{"documents":[{"aliases":[],"id":"page:/","metadata":{"kind":"home","language":"en","route":"/","type":"page"},"summary":"I work with AI to build, investigate, and learn. Practical work across software, electronics, and mechanical engineering, readable by people and directly usable by AI agents.","text":"Mayphus\n\nI work with AI to build, investigate, and learn.\n\nA restored generative field of hand-drawn cellular forms, preserved for screen and print.  (https://mayphus.org/cell-field/) \nCell Field (https://mayphus.org/cell-field/) \n\nA restored Racket drawing DSL explored through geometric and decorative motifs.  (https://mayphus.org/motif/) \nMotif (https://mayphus.org/motif/) \n\n Watch Milk Teeth (https://mayphus.org/milk-teeth/milk-teeth.mp4)  \nMilk Teeth (https://mayphus.org/milk-teeth/) \n\nRepair note for a toddler's electronic learning book: inspect the power path, clean the battery compartment, replace batteries, and verify the fix.  (https://mayphus.org/electronic-learning-book-repair/) \nElectronic Learning Book Repair (https://mayphus.org/electronic-learning-book-repair/) \n\nDescribe places to find in any city, then generate a safe, bounded OpenStreetMap layer on a real basemap.  (https://mayphus.org/map/) \nNatural Language City Map (https://mayphus.org/map/) \n\nCuriosity teardown note for three TP-Link security cameras: power-on observations, reset and app behavior, internal modules, UART wiring, and hardware design clues.  (https://mayphus.org/tp-link-security-camera-investigation/) \n3 TP-Link Security Cameras (https://mayphus.org/tp-link-security-camera-investigation/) \n\nOld HiSilicon camera board connected to a USB-TTL adapter during the attempted bring-up  (https://mayphus.org/entries/twelve-volts-one-wrong-pin/) \nTwelve volts, one wrong pin (https://mayphus.org/entries/twelve-volts-one-wrong-pin/) \n\n Notes and details \n\nDay\n\n8 September 2026\n \nMaking the website easier to maintain\n \nI kept Racket at the center of the site and separated media delivery and asset loading into smaller modules. A new inspection command explains where each page comes from. The checks passed, the reading pages stayed unchanged, and the changes are live.\n\n- The site changes (https://github.com/mayphus/mayphus/commit/02f9056e9feb) \n\n19 August 2026\n \nThe board was healthy\n \nI brought a silent NanoPi R2S to a verified Alpine Linux boot. Two separate problems had hidden a working board: an unreliable serial connection and an SD-card image for the wrong chip. Testing the measuring tool first made the rest of the investigation possible.\n\n- From silent UART to a working NanoPi R2S (https://mayphus.org/nanopi-r2s-alpine-boot/) \n\n14 August 2026\n \nA camera that admits uncertainty\n \nWith OpenLens, I explored a learning companion built around local vision on Android. The useful question was how to show what the model could recognize while keeping its uncertainty visible.\n\n- OpenLens: a local-first camera that admits what it does not know (https://mayphus.org/openlens/) \n\nWeek\n\n17 August 2026 – 23 August 2026 · through 19 August 2026\n \nMaking the evidence trustworthy\n \nThe NanoPi work came down to separating an observation from the equipment producing it. Once the serial path was reliable, the wrong boot image became visible. The result was a working board and a clearer explanation of the stages between the chip's boot ROM and a running system.\n\n- From silent UART to a working NanoPi R2S (https://mayphus.org/nanopi-r2s-alpine-boot/) \n\n10 August 2026 – 16 August 2026 · through 14 August 2026\n \nSmall models, real devices\n \nI worked on two ways of putting AI into physical devices: a tiny story generator running on my RP2040 board, and OpenLens on Android. One showed that a complete model could fit and run on a microcontroller; the other made the limits of recognition part of the experience. Both needed evidence from the actual device.\n\n- A TinyStories model on my RP2040 board (https://mayphus.org/tinystories-rp2040/) \n\n- OpenLens: a local-first camera that admits what it does not know (https://mayphus.org/openlens/) \n\nMonth\n\nAugust 2026 · through 19 August 2026\n \nClosing the loop with hardware\n \nAcross a tiny language model, a camera companion, and a silent single-board computer, I kept returning to the same loop: describe an intention, let the agent work through the software, observe the physical result, and revise. The successes were specific—a model generating text on a Pico and an R2S booting Alpine. The limits mattered too: small-model language remained imperfect, and visual recognition needed to express uncertainty.\n\n- A TinyStories model on my RP2040 board (https://mayphus.org/tinystories-rp2040/) \n\n- OpenLens: a local-first camera that admits what it does not know (https://mayphus.org/openlens/) \n \n- From silent UART to a working NanoPi R2S (https://mayphus.org/nanopi-r2s-alpine-boot/) \n\nYear\n\n2026 · through 8 September 2026\n \nWorking through intention and observation\n \nA thread through my public work this year is learning how to direct AI while staying close to reality. That has meant testing models on small devices, recovering hardware one uncertain link at a time, and keeping useful accounts of the process. The website is part of that work: a place to preserve what happened and what I learned, with code that the agent can maintain.\n\n- How I work with AI (https://mayphus.org/ai-workflow/) \n\n- A TinyStories model on my RP2040 board (https://mayphus.org/tinystories-rp2040/) \n \n- From silent UART to a working NanoPi R2S (https://mayphus.org/nanopi-r2s-alpine-boot/) \n\n   All notes and work \n\n2026\n\n-  \n\nFrom silent UART to a working NanoPi R2S (https://mayphus.org/nanopi-r2s-alpine-boot/) \n \nAn evidence-led NanoPi R2S investigation: isolate an unreliable UART path, identify a wrong Rockchip image, boot Alpine Linux, and map the RK3328 SD-card chain.\n\n- \n\nTwelve volts, one wrong pin (https://mayphus.org/entries/twelve-volts-one-wrong-pin/) \n \nI tried to bring an old HiSilicon camera board back to life.\n\n-  \n\nOpenLens: a local-first camera that admits what it does not know (https://mayphus.org/openlens/) \n \nBuilding a portable multilingual learning companion, testing offline vision on Android, and keeping model uncertainty visible.\n\n-  \n\nA TinyStories model on my RP2040 board (https://mayphus.org/tinystories-rp2040/) \n \nTraining, quantizing, and physically verifying a tiny Transformer on a custom Raspberry Pi Pico display board through intention-and-observation collaboration with an AI agent.\n\n- \n\nThe real value of an AI agent (https://mayphus.org/entries/the-real-value-of-an-ai-agent/) \n \nAn IDE, tab completion, and autocomplete help an engineer do known work faster.\n\n- \n\nThe old depth camera was not dead (https://mayphus.org/entries/old-depth-camera-was-not-dead/) \n \nI pulled an old LeTV LeTMC-520 RGB-D camera out of storage and initially thought it had failed: Linux repeatedly rejected it during USB setup.\n\n- \n\nA week of verified loops (https://mayphus.org/entries/a-week-of-verified-loops/) \n \nThis week I kept returning to the same way of working: build the smallest real loop, verify it, and widen the boundary only when the evidence holds.\n\n- \n\nAI-centered robot stack\n\nI do not think ROS 2 should be the center of a modern robot. The center should be an AI agent that understands the goal and works through explicit capabilities such as navigate, inspect, and grasp. ROS 2, vendor SDKs, and generated adapters can remain replaceable integration layers. Learned skills and whole-body control can execute below them, while hard limits, watchdogs, emergency stop, and motor loops stay outside the agent. AI can optimize the software around the robot; it should not be allowed to rewrite the safety boundary while the robot is running.\n\n-  \n\nSugar from a soldier (https://mayphus.org/sugar-from-a-soldier/) \n \nTesting a grandmother’s memory of Japanese soldiers giving sweets to children in wartime Liu Yuan against Japanese and international records.\n\n- \n\nAI-native website interfaces\n\nA proposal for websites that keep a clear reading experience while making questions, evidence, state, and next actions legible to AI.\n\n- \n\nWebsite as working memory\n\nI do not want my website to be a separate job. It should become a durable public memory that participates in my AI work: when an idea or investigation becomes useful, I can ask the assistant to turn it into a concise note, keep private details out, and create a review before anything goes public. The website is not the work itself. It records the proof and lessons from real work.\n\n- \n\nBuilt a small family AI workstation on PB62. A dedicated KVM guest named zsn runs OpenCode and OpenChamber, holds my wife's website checkout and development toolchain, and keeps her sessions, Git identity, and future provider credentials separate from mine. Each client pairs with its own revocable encrypted relay token; raw agent ports stay private. Git remains the recovery boundary, and deployment credentials stay outside the VM until they are explicitly needed.\n\n- \n\nI spent a night helping optimize my wife’s website. By morning, she was furious—not because it was broken, but because I had slightly changed her UI and logic. Predictable result: when working on someone else’s familiar system, preserving what they already recognize matters more than making it “better” without asking.\n\n- \n\nA Roku remote through Tailscale (https://mayphus.org/roku-remote-over-tailscale/) \n \nHow any available Wi-Fi, manual IP entry, and Tailscale made the official Roku app remote work from outside home.\n\n-  \n\nHow I work with AI (https://mayphus.org/ai-workflow/) \n \nA short explanation of how I use ChatGPT, Codex, Git, and Mayphus as one practical workflow.\n\n- \n\nMy daughter's grandma called while I was outside the house because she could not find the Roku remote and wanted me to stop a show. The Roku app refused to enable its remote over mobile data, even with Tailscale connected. ChatGPT suggested connecting my phone to any available Wi-Fi, then manually entering the Roku's home IP address. The Wi-Fi satisfied the app's check, manual entry bypassed discovery, and Tailscale carried the connection home. The official Roku remote then worked while I was outside.\n\n- \n\nI’m going to finish investigating the three TP-Link security cameras with the new ChatGPT… (https://mayphus.org/entries/chatgpt-camera-investigation-workflow/) \n\n- \n\nI’m starting to optimize my Codex workflow. Instead of making every turn follow a heavy default sequence of pull, change, test, and review—even when a small change takes only a moment—I’m moving toward a hierarchy of iteration, review, and ship. The depth of the workflow should match the size and risk of the change, so a small task does not automatically take two or three minutes. I’m also starting to use Git worktrees so independent work can run in parallel.\n\n- \n\nA part-time job might be a good fit for me. In theory, full-time employment is not always efficient for either the employer or the employee: people rarely work productively through every hour of a fixed schedule, while focused work often comes in intense bursts that can stretch beyond eight hours when the work is truly moving. Part-time work may leave more room to follow that natural rhythm.\n\n- \n\nCoding, architecture, and other high-level work can be important, but they can also abstract the problem until I lose sight of what actually needs to be solved. I want to begin with the concrete problem, make the smallest useful thing, and only add abstraction when the work asks for it.\n\n- \n\nToday I worked on my website while taking care of my daughter. Instead of separating work and life, AI let me fit small moments of engineering into ordinary parenting. It’s only the first day, but it feels like a different way to work.\n \nA parent holding a phone showing Codex work on mayphus.org while walking beside their young daughter.  (https://mayphus.org/media/notes/engineering-in-parenting-moments.jpg) \n\n- \n\nI am trying to develop a workflow that lets me work mostly on the go—with mobile devices, ChatGPT, AI, and Codex—while still being present and taking care of my daughter. With AI agents, I only need to prompt a few times; most of the work is waiting and thinking. A traditional desktop workflow often keeps me sitting at the computer even when I am mostly searching the web, browsing X, or watching YouTube. The better optimization is to let the agents work while I step away: think clearly, enjoy life, and care for my baby, then return when a decision is needed.\n\n- \n\nChatGPT desktop is starting to feel like the AI version of Emacs: one extensible environment with a terminal, browser, code, files, and conversations together. The important part is not having every tool in one window. It is that my operations and working state can become shared AI context, so I spend less time switching apps and explaining where the work stopped.\n\n- \n\nChatGPT desktop quietly added passkey/password support to its in-app browser — something I’ve wanted for weeks. This matters because I sign in to Google with a passkey. Now the in-app browser can handle it. One less reason to open Chrome, haha.\n\n- \n\nShort ideas should have one quiet public home. They do not each need a new page, project, or polished conclusion. A dated thread can show the thought while it is still moving.\n\n- \n\nA personal site is more useful when it shows working artifacts and operating evidence instead of describing ambitions. Build the proof, then write the sentence.\n\n- \n\nchatgpt, work, codex may share ui. only difference is the context (project, plugins etc)\n\n- \n\nI used ChatGPT Atlas as my main browser and loved it, even though it’s no longer maintained. But ChatGPT desktop doesn’t need to replace Chrome. My workflow now: Chrome for the web, ChatGPT desktop for intelligence, and the ChatGPT extension connecting them. It feels natural.\n\n- \n\nSome people dislike GPT-5.6 and the “super app.” I think they’re amazing. Real engineers and users don’t spend all day judging models or comparing flaws—they use the tools to build something amazing. Extraordinary capability at a low cost, shared globally, is worth appreciating.\n\n- \n\nThe smallest useful project note records where the work stopped, the next physical action, and the evidence already captured. That is enough to make tomorrow easier.\n\n- \n\ncodex in-app browser needs passkey support @thsottiaux\n\n- \n\nBuilding mayphus.org Live #2\n\nToday I'm reorganizing my infrastructure page. I realized that my website should explain my Kubernetes cluster, Podman containers, KVM virtual machines, and network visually instead of hiding everything behind text. This livestream is me refining both the website and the idea.\n\n- \n\nLive to do something\n\nA YouTube livestream or video.\n\n- \n\nToday's realization: I'm not at my best when answering from memory. I'm at my best when investigating. Give me a terminal, logs, and a problem. I'll figure it out. Learn. Repeat. That's how I'm going to learn and build in public.\n\n- \n\nLooks inside Roku Remote\n\nMy Roku Remote voice feature don't works weeks ago, and today all buttons don't works. So I decide to teardown and see what is inside. After teardown and try again. it works. I think it's battery case has issue? And voice feature continue don't works. I don't see any water or possible visual broken. So wait for next time to investigate.\n\n- \n\nForget the superapp. Just let ChatGPT and Codex share memory. Re-explaining the same project to both is unnecessary friction.\n\n- \n\nJune 29, 2026\n\nA YouTube Short.\n\n- \n\nJust migrated my codebase to my mini PC. Maintained by Codex now, so I barely need my desktop PC anymore. I can work from coffee shops, supermarkets, etc.\n \nPhoto 1 attached to the X post from 2026-06-29.  (https://mayphus.org/media/x/2071427945152082398-HL8wtzkasAAkZA5.jpg) \n\n- \n\nMy Roku remote can’t listen to me. investigating if microphone break down.\n \nPhoto 1 attached to the X post from 2026-06-29.  (https://mayphus.org/media/x/2071616169765949771-HL_b671bIAAt06o.jpg) \n\n- \n\nI don’t remember the commands anymore. I remember the curiosity. Ten years later, most of the software is obsolete, but the habit of taking things apart, experimenting, and documenting what I learn is still the most valuable skill.\n\n-  \n\nElectronic Learning Book Repair (https://mayphus.org/electronic-learning-book-repair/) \n \nRepair note for a toddler's electronic learning book: inspect the power path, clean the battery compartment, replace batteries, and verify the fix.\n\n- \n\nLook inside a Toddler's Electronic Learning Book\n\nThis children’s electronic learning book stopped working.\n\n- \n\n@naval Humans should do the work, AI should do the documenting.\n\n- \n\nAfter reinstalling the Codex mobile app and pairing it again, sync issues disappeared. The app also feels smoother, though I'm not sure if that's because of the reinstall or just my perception.\n\n- \n\nFixed a sync issue between Codex Desktop and the mobile app. The solution was to uninstall the Codex app on my phone, then pair it again.\n\n- \n\nI just realized I first tried ROS almost 10 years ago. This photo was taken in an old, almost abandoned office at my university. July 2017.\n \nPhoto 1 attached to the X post from 2026-06-26.  (https://mayphus.org/media/x/2070396348583813167-HLuFmsOa0AAw92R.jpg) \n\n- \n\nFebruary 10, 2026\n\nA YouTube Short.\n\n- \n\nFebruary 11, 2026\n\nA YouTube Short.\n\n- \n\nFound these old photos today. My Raspberry Pi 3 used to be the brain of my ROS robot. I lost this Pi after buying a Raspberry Pi 4, but I still have the other boards in the box. Maybe it’s time to build something with them again.\n \nPhoto 1 attached to the X post from 2026-06-25.  (https://mayphus.org/media/x/2070168449062707553-HLq2MRNbgAAeNqk.jpg) Photo 2 attached to the X post from 2026-06-25.  (https://mayphus.org/media/x/2070168449062707553-HLq2MRGbwAALc8-.jpg) \n\n- \n\nJune 25, 2026\n\nA YouTube Short.\n\n- \n\nJune 25, 2026\n\nA YouTube Short.\n\n- \n\n3 TP-Link Security Cameras (https://mayphus.org/tp-link-security-camera-investigation/) \n \nCuriosity teardown note for three TP-Link security cameras: power-on observations, reset and app behavior, internal modules, UART wiring, and hardware design clues.\n\n- \n\nInside a broken TP-Link security camera\n\nI bought this broken TP-Link security camera for about $1 to learn how it is built.\n\n- \n\nJust investigate 3 broken TP-Link Security Camera #2\n\n00:00 Broken TP-Link Camera Investigation Begins 00:43 Connecting UART Debug Interface 05:04 Using AI as a Hardware Repair Assistant 07:04 No Serial Output After Power-On 10:18 Checking Power Rails 15:49 Suspecting a Power Circuit Fault 18:07 Testing the USB-TTL Adapter 20:11 UART Loopback Verification 23:07 Verifying 3.3V Logic Levels 27:21 Reconnecting UART Lines 28:01 Second Boot Attempt 32:39 Searching for Camera Hardware Information 34:00 Why the Camera Probably Isn't Booting 35:03 Wrap-Up & Future Investigation\n\n- \n\nJust investigate 3 broken TP-Link Security Camera\n\nInvestigating 3 broken TP-Link security cameras bought for about $1 each.\n\n- \n\nbuilding my ai first personal website. still ugly.\n \nPhoto 1 attached to the X post from 2026-06-17.  (https://mayphus.org/media/x/2067242145233424467-HLBRsX2asAANK97.jpg) \n\n- \n\nJune 12, 2026\n\nA YouTube Short.\n\n-  \n\nNano Pi Teardown (https://mayphus.org/nano-pi-teardown/) \n \nHardware teardown note from the Nano Pi stream: open the enclosure, remove the SD card, inspect RK3328, RAM, Ethernet chips, USB-C, reset, debug pins, and power-management…\n\n- \n\nNano Pi teardown\n\nA YouTube livestream.\n\n- \n\nToday I learned how to flip an egg pancake in a pan\n\nA YouTube Short.\n\n- \n\nJune 11, 2026\n\nA YouTube Short.\n\n- \n\nBuilding mayphus.org Live #1\n\nFirst Live explain and test.\n\n- \n\nmy lithium battery burn by itself.\n \nPhoto 1 attached to the X post from 2026-06-10.  (https://mayphus.org/media/x/2064395550271942867-HKY0znVbwAABKtw.jpg) \n\n- \n\nA generated Flypy double-pinyin skin. Instead of drawing keyboard themes manually, I'm generating them from code so the same system can produce skins, previews, and configuration packages automatically. mayphus.org/typing\n \nPhoto 1 attached to the X post from 2026-06-09.  (https://mayphus.org/media/x/2064249796668625060-HKWwPinagAAPpAZ.jpg) \n\n- \n\nJune 10, 2026\n\nA YouTube Short.\n\n-  \n\nRouter service recovery through a Tailscale jump (https://mayphus.org/router-service-tailscale-jump-recovery/) \n \nA short operations note on recovering a router service through an independent Tailscale jump host when direct access is gone.\n\n- \n\nBuilding\n \nPhoto 1 attached to the X post from 2026-06-04.  (https://mayphus.org/media/x/2062369997037703402-HJ8ClARa4AAdBNb.jpg) Photo 2 attached to the X post from 2026-06-04.  (https://mayphus.org/media/x/2062369997037703402-HJ8ClARbEAAVO1u.jpg) \n\n- \n\nRime Input Method and Yuanshu Input method's Schema and Skin generator. mayphus.org/typing/\n\n- \n\nDiscover mayphus.org/han – a Racket-powered web tool I built for creating print-ready… (https://mayphus.org/entries/x-2062104590410260679/) \n\n- \n\nI am building a single, unified Racket project to orchestrate my entire personal infrastructure.\n \nPhoto 1 attached to the X post from 2026-06-02.  (https://mayphus.org/media/x/2061713757844431205-HJytuUUakAAgTl0.jpg) \n\n- \n\nJust built a massive Unicode matrix! (https://mayphus.org/entries/x-2060192582706344390/) \n\n- \n\nScreenshots from May 2026. (https://mayphus.org/entries/screenshots-2026-05/) \n\n- \n\nVisualizing Every Unicode Character (Plane 0 to 16)\n\nThis is a complete visual walkthrough of a massive matrix grid UI designed to browse every single character space across all 17 Unicode planes (Planes 0 to 16). https://mayphus.org/unicode/ do you like it?\n\n- \n\nScreenshots from April 2026. (https://mayphus.org/entries/screenshots-2026-04/) \n\n- \n\nI just used my Emacs to check my homelab computer k3s's service when I am out of home.\n \nPhoto 1 attached to the X post from 2026-04-24.  (https://mayphus.org/media/x/2047688708418425261-HGrZkQTbgAAyC2N.jpg) \n\n- \n\nHistorical research screenshots from February 2026. (https://mayphus.org/entries/screenshots-historical-2026-02/) \n\n2025\n\n- \n\nScreenshots from December 2025.\n \nScreenshot from 2025-12-27 at 23:37.  (https://mayphus.org/media/screenshots/2025-12-27-233721.png) Screenshot from 2025-12-27 at 23:37.  (https://mayphus.org/media/screenshots/2025-12-27-233728.png) \n\n- \n\nScreenshots from November 2025.\n \nScreenshot from 2025-11-22 at 21:27.  (https://mayphus.org/media/screenshots/2025-11-22-212722.png) Screenshot from 2025-11-22 at 21:30.  (https://mayphus.org/media/screenshots/2025-11-22-213054.png) \n\n- \n\nPhoto 1 attached to the X post from 2025-10-01.  (https://mayphus.org/media/x/1973271263209726015-G2J3vukbwAAnW4m.jpg) \n\n- \n\nIn September 2025, I contributed a small fix to weapp-vite, a Vite-based build tool for WeChat mini-programs. The merged patch made its build, dev, and generate commands honor custom configuration files through --config or -c, including resolving relative paths from the project root.\n\n- \n\nScreenshots from August 2025.\n \nScreenshot from 2025-08-24 at 00:02.  (https://mayphus.org/media/screenshots/2025-08-24-000215.png) Screenshot from 2025-08-24 at 00:02.  (https://mayphus.org/media/screenshots/2025-08-24-000220.png) \n\n- \n\nThis is my Chinese breakfast.\n \nPhoto 1 attached to the X post from 2025-08-19.  (https://mayphus.org/media/x/1957815477561860601-GyuOpF9acAEU9x7.jpg) \n\n- \n\nJust powered through a 50 KM ride. 🚴‍♂️✨ Legs on fire, heart full—cycling goals unlocked. #CyclingLife #Endurance\n \nPhoto 1 attached to the X post from 2025-04-18.  (https://mayphus.org/media/x/1913133587630531003-GozQ1Z5WwAA38Ku.jpg) \n\n- \n\nStart 2025 new year journey.\n\n- \n\nI implemented RP2040 official minimal design example. (https://mayphus.org/entries/x-1881704765983510867/) \n\n- \n\nI implemented RP2040 official minimal design. #rp2040 #raspberrypi #raspberrypipico #soldering #diy\n\nThis board follows the official RP2040 minimal hardware design from Raspberry Pi.\n\n- \n\nI made a minimal ESP32-S3 PCB with just USB-C and an AMS1117. It just works. #diy #esp32\n\nA YouTube Short.\n\n- \n\nSoldering an ESP32 PCB: Showcasing Skills Despite a Design Flaw\n\nI attempted to design a minimal PCB for the ESP32, but it seems to have some issues—possibly related to power delivery or the EN pin. However, I’m glad to see my soldering skills haven’t gotten rusty! I successfully soldered a USB-C connector using just a soldering iron and used a heat station for the first time to solder the ESP32 chip itself. The results were fantastic. #diy #sold #soldering #solderingiron #esp32\n\n- \n\nSoldering my ESP32 #soldering #electronics #esp32\n\nA YouTube Short.\n\n- \n\nMade my first ESP32. Fail to boot.\n \nPhoto 1 attached to the X post from 2025-01-14.  (https://mayphus.org/media/x/1879160110314086438-GhQeJtXWUAEk9Bg.jpg) Photo 2 attached to the X post from 2025-01-14.  (https://mayphus.org/media/x/1879160110314086438-GhQeJtUWMAA1YrS.jpg) \n\n- \n\nI DIY a mini desk monitor. Just a screen currently, more features will be added. #diyprojects\n\nA YouTube Short.\n\n- \n\nMade a simple displayer. Used a Raspberry Pi Pico, and 1.69 in LCD. And made my first useful PCB board. #diy #pcb #3dprint\n \nPhoto 1 attached to the X post from 2025-01-08.  (https://mayphus.org/media/x/1876896537940291910-GgwTclCXsAA-jcy.jpg) \n\n- \n\nBoring game with accelerometer #diy #diygames #raspberrypizero #mpu6050 #tftdisplay #circuitpython\n\nA YouTube Short.\n\n- \n\nSimulated #starwars opening crawl by using a small OLED screen. #diy\n\nA YouTube Short.\n\n- \n\nFirst day of 2025. (https://mayphus.org/entries/x-1874248940180430948/) \n\n2024\n\n- \n\nBooting my new Raspberry Pi Zero 2 W. What should I make? #raspberrypizero #diy #rpizero\n\nA YouTube Short.\n\n- \n\n@salimbenbouz cool\n\n- \n\nI tear down my electric cervical neck massager\n\nA YouTube video.\n\n- \n\nI tear down my electric cervical neck massager #teardown #massager #diy\n\nA YouTube Short.\n\n- \n\nStart from simple\n \nPhoto 1 attached to the X post from 2024-12-20.  (https://mayphus.org/media/x/1869911568974016554-GfNCp84WkAARS6A.jpg) Photo 2 attached to the X post from 2024-12-20.  (https://mayphus.org/media/x/1869911568974016554-GfNCp84XoAAQdap.jpg) \n\n- \n\nI am trying to repair my stuck MacBook key\n\nA YouTube video.\n\n- \n\nRepair my stuck MacBook key, easy but need practice and patience #macrepair #techrepair #diy\n\nA YouTube Short.\n\n- \n\ndestroyed my wife’s mirror. Fixing it now. Replaced bad battery #fix #mirror #diy #diyrepair\n\nA YouTube Short.\n\n- \n\nMy DIY page turner. I think I need make a bluetooth version. #DIY\n \nPhoto 1 attached to the X post from 2024-11-28.  (https://mayphus.org/media/x/1862113064197276142-GdeN8ObWMAAUo4L.jpg) Photo 2 attached to the X post from 2024-11-28.  (https://mayphus.org/media/x/1862113064197276142-GdeN8OcWwAAIVCQ.jpg) \n\n- \n\nStart live as a creator, maker.\n\n- \n\n3d print a Batman\n \nPhoto 1 attached to the X post from 2024-11-14.  (https://mayphus.org/media/x/1857059847453265988-GcWaFPZWQAAKPEX.jpg) \n\n- \n\nPhoto 1 attached to the X post from 2024-11-03.  (https://mayphus.org/media/x/1853032780747129188-GbdLe2kakAANsX0.jpg) \n\n- \n\nmy diet, - Yellowhead catfish - Common bean - Pepper steak\n \nPhoto 1 attached to the X post from 2024-11-02.  (https://mayphus.org/media/x/1852565512997282206-GbWigkOWkAACe39.jpg) \n\n- \n\nHappy Halloween!\n \nPhoto 1 attached to the X post from 2024-10-31.  (https://mayphus.org/media/x/1851952457435210034-GbN06f9XYAARMI2.jpg) \n\n- \n\nmigrated my website from #github pages to #cloudflare pages. make website style somewhat similar to #emacs\n \nPhoto 1 attached to the X post from 2024-09-29.  (https://mayphus.org/media/x/1840067494444159130-GYk7oF6WQAAq266.jpg) \n\n- \n\nScreenshots from September 2024.\n \nScreenshot from 2024-09-28 at 05:11.  (https://mayphus.org/media/screenshots/2024-09-28-051103.png) \n\n- \n\nI enjoy write with Emacs. #emacs\n \nPhoto 1 attached to the X post from 2024-09-27.  (https://mayphus.org/media/x/1839522770725515601-GYdMM6Ba8AAa_gd.jpg) \n\n- \n\nWitness the Majestic Qiantang River Tidal Bore: Nature’s Ultimate Spectacle! (https://mayphus.org/entries/x-1837765187329315034/) \n\n- \n\nGaramond font looks great. Just switch font from browser’s default serif font to it.\n \nPhoto 1 attached to the X post from 2024-09-20.  (https://mayphus.org/media/x/1837090614548005267-GX6oKh9WgAARPpW.jpg) \n\n- \n\nWorking on my uniorg powered #astrojs website. Website keeps minimal and been treated as an index list of my #org-mode notes.\n \nPhoto 1 attached to the X post from 2024-09-16.  (https://mayphus.org/media/x/1835700787638354328-GXm4IPSWcAA-qyb.jpg) Photo 2 attached to the X post from 2024-09-16.  (https://mayphus.org/media/x/1835700787638354328-GXm4IPRXYAATbVQ.jpg) \n\n- \n\nSwitch from a content consumer to a content creator. 1. Build a #orgmode based website.\n\n- \n\nThese containers should have gone to many corners of the world. Then they must be more knowledgable than me.\n \nPhoto 1 attached to the X post from 2024-09-11.  (https://mayphus.org/media/x/1833651179747774906-GXJwAdyW8AEjbNA.jpg) \n\n- \n\nis this mediterranean food?\n \nPhoto 1 attached to the X post from 2024-09-08.  (https://mayphus.org/media/x/1832759345513197923-GW9E5pUWwAAMThH.jpg) \n\n- \n\nFreeBSD is my favorite. I never need to choose between different Linux distributions and package managers. And in FreeBSD both basic freebsd system and third party packages are easy to find the sources. Make the system ‘transparency’.\n \nPhoto 1 attached to the X post from 2024-08-24.  (https://mayphus.org/media/x/1827255547122303255-GVu3OXJWUAAzGX5.jpg) Photo 2 attached to the X post from 2024-08-24.  (https://mayphus.org/media/x/1827255547122303255-GVu3OXJWEAAx_0V.jpg) \n\n- \n\nExcited to share my first open source contribution! Just submitted a patch to FreeBSD to fix documentation for thin nullfs jails. #OpenSource #FreeBSD #FirstContribution\n \nPhoto 1 attached to the X post from 2024-08-23.  (https://mayphus.org/media/x/1826665178475233737-GVmeSebXoAMXg4J.jpg) \n\n- \n\nMy Macropad finally works. 😂 It’s my first self-designed #pcb Exciting\n\nA YouTube Short.\n\n- \n\n3D printed morel mushrooms #morelmushrooms #3dprinting\n\nA YouTube Short.\n\n- \n\nEntry from 2024-07-15 (https://mayphus.org/entries/x-1812764876085117182/) \n\n- \n\nDesoldering My First Failed PCB Design: RP2040 Board Teardown\n\nIn this video, I'm desoldering components from my first self-designed PCB - a basic RP2040 minimal design. Although the design didn't work as intended, it marks an important milestone in my maker journey. Watch as I carefully remove components from this failed PCB, demonstrating proper desoldering techniques.\n\n- \n\nMy first PCB.\n \nPhoto 1 attached to the X post from 2024-07-14.  (https://mayphus.org/media/x/1812430823221875191-GScMOW9XIAAFSRU.jpg) \n\n- \n\nunsoldering my electric components from failed PCB board. #pcb\n\nA YouTube Short.\n\n- \n\nmy wife’s gift. #sewingmachine 11 pm still happy working\n\nA YouTube Short.\n\n- \n\nPCB soldering #maker #pcb\n\nA YouTube Short.\n\n- \n\nGenerating keycaps with my 3D printer\n\nA YouTube Short.\n\n- \n\nI love Thailand. (https://mayphus.org/entries/x-1787870398023184883/) \n\n- \n\nThanks, Hugging Face's Zero GPU. #zerogpu #huggingface\n \nPhoto 1 attached to the X post from 2024-04-28.  (https://mayphus.org/media/x/1784414256928272398-GMOC9BXa8AAiOyW.jpg) \n\n- \n\n@ubuntu try the new autoinstall install method. i still remember how i hack ubuntu server’s iso and modify autoinstall years ago.\n\n- \n\nDo something.\n \nPhoto 1 attached to the X post from 2024-04-26.  (https://mayphus.org/media/x/1783616353573974184-GMCtmzraQAA7_SE.jpg) \n\n- \n\nStart to practice free talk. This time with a more freely style, the main goal is output something useful content.\n\n- \n\n@ollama Awesome, saved my old desktop.\n\n- \n\n@miiura @vercel Cool! simple, minimal and powerful.\n\n- \n\nOh my poor machine.\n \nPhoto 1 attached to the X post from 2024-04-13.  (https://mayphus.org/media/x/1779043304509931871-GLBudB0bIAAUfFg.jpg) \n\n- \n\nWaiting for GPT-4 Turbo available on my account.\n\n- \n\nA minimalism diet.\n \nPhoto 1 attached to the X post from 2024-03-30.  (https://mayphus.org/media/x/1773933965352788236-GJ5HicDbgAAb3If.jpg) \n\n- \n\nLazy cat, busy weekend. #cat #weekend #wfh\n\nA YouTube Short.\n\n- \n\nMaking Century Egg. Wait for the magic of time. #chinese\n \nPhoto 1 attached to the X post from 2024-03-30.  (https://mayphus.org/media/x/1774076030225154167-GJ7IvlTb0AAn7Wg.jpg) \n\n- \n\nMaking Century Egg. Warping lime now, then wait for the magic of time. #centuryegg #chinesefood\n\nA YouTube Short.\n\n- \n\nStart running again. This time mainly focus on health, and habit building. Ignore speed, ignore marathon.\n\n- \n\nvoice input is so great way to input text messages. it also practices the English speaking skills.\n\n- \n\nUse tweet to catch ideas.\n\n- \n\nVoice tweet test. (https://mayphus.org/entries/x-1773368233044623386/) \n\n- \n\nI love Emacs org-mode to take notes. denote is my favorite tools, because I can use it start taking notes from minimal. Not like org-roam. #emacs #orgmode\n \nPhoto 1 attached to the X post from 2024-03-27.  (https://mayphus.org/media/x/1772974412708388979-GJre0-0bIAEa3zZ.jpg) \n\n- \n\nChinese launch, tomato, eggs and rice. Eat with my big spoon. So delicious. #chinesefood #wfh\n\nA YouTube Short.\n\n- \n\nMy cat snores\n\nA YouTube Short.\n\n2023\n\n- \n\nA month ago, I upload a practicing English short video to Chinese instagram 小红书. After that I update daily. Why I do this because I have social anxiety and lack up speaking communication skills. One month of practice improve m a lot I think. I will continue to do that.\n \nPhoto 1 attached to the X post from 2023-09-09.  (https://mayphus.org/media/x/1700538797933617526-F5mHA-XaUAAv-f2.jpg) \n\n- \n\nHi, My name is Felix Tang. I am learning and practicing English as a non-English speaker. I also want to share my mind and skills with this way. I also upload daily practice videos to my YouTube channel. I help these methods can save my English.\n\n- \n\nPlanned a 65.5-kilometer walk from Hangzhou to Zhuji. I made it about 20 or 30 kilometers.\n \nGoogle Maps showing a 65.5-kilometer walking route from Hangzhou through Xiaoshan to Zhuji.  (https://mayphus.org/media/notes/hangzhou-to-zhuji-walking-plan.jpg) \n\n- \n\nEarly Bing Chat and ChatGPT experiments: connecting EdgeGPT to Emacs, then relaying messages between the two chatbots.\n \nEarly Bing Chat explaining how to connect EdgeGPT to Emacs through EPC.  (https://mayphus.org/media/notes/early-bing-chat-edgegpt-emacs.png) ChatGPT and early Bing Chat side by side, with messages relayed between them.  (https://mayphus.org/media/notes/early-chatgpt-bing-conversation.png) \n\n- \n\nInstalling GNU Guix System on a workstation.\n \nA terminal showing GNU Guix System details and the status of its Shepherd services.  (https://mayphus.org/media/notes/gnu-guix-system-services.png) A GNU Guix System installation log ending with the bootloader installed on /boot/efi.  (https://mayphus.org/media/notes/gnu-guix-system-install.png) \n\n2017\n\n- \n\nBuilding my ROS robot vehicle. After learning with turtlesim, I started putting the physical platform together: a wheeled chassis, stacked controller and motor-driver boards, power wiring, and a cooling fan, all still exposed while I debugged it beside the laptop.\n \nClose view of a ROS robot vehicle under construction, with a wheeled chassis, stacked control boards, motor driver, wiring, and cooling fan.  (https://mayphus.org/media/notes/building-ros-robot-vehicle.jpg) \n\n- \n\nWorking like a professional in an abandoned office at university, trying to learn ROS. (https://mayphus.org/entries/learning-ros-office/) \n\n- \n\nAt university, I helped others get this linear actuator moving. The work brought the whole control path onto one desk: code on the laptop and monitor, a power supply, controller boards, a breadboard, wiring, and the actuator itself.\n \nA university electronics workspace with code on two screens, a linear actuator, power supply, controller boards, breadboard, and wiring.  (https://mayphus.org/media/notes/university-linear-actuator.jpg) \n\n2016\n\n- \n\nThese photos are from a mechanical competition in November 2016. (https://mayphus.org/entries/mechanical-competition/) \n\n- \n\nMy first time using an AT89X51 microcontroller. I built and debugged the circuit on breadboards, surrounded by jumper wires, handwritten notes, a programmer, and a multimeter. The LEDs, seven-segment display, and ultrasonic sensors made the code visible in the physical world.\n \nA late-night electronics workbench with two laptops, handwritten notes, and an illuminated AT89X51 breadboard circuit.  (https://mayphus.org/media/notes/at89x51-workbench.jpg) An AT89X51 breadboard circuit with lit LEDs, a seven-segment display, ultrasonic sensors, jumper wires, and a digital multimeter.  (https://mayphus.org/media/notes/at89x51-breadboard.jpg) \n\nUndated\n\n- \n\nAI-native website interfaces (https://mayphus.org/ai-native-website-interfaces/) \n \nAn evolving proposal for websites built around AI-readable investigation objects, with the human interface as one view.\n\n- \n\nAlpine Builder (https://mayphus.org/alpine-builder/) \n \nFriendlyElec and NanoPi Alpine image builder web UI for rootfs and SD-card builds.\n\n- \n\nBaby Cards (https://mayphus.org/baby-cards/) \n \nPrintable and generated learning-card experiments.\n\n- \n\nBiology Diagrams (https://mayphus.org/biology/) \n \nCell-structure and DNA-strip SVG generators.\n\n- \n\nCalculus Visual Lab (https://mayphus.org/calculus/) \n \nInteractive calculus figures, exports, and TypeScript widgets.\n\n- \n\nCangjie Tree (https://mayphus.org/cangjie/) \n \nVisual exploration of Cangjie character structures.\n\n- \n\nCell Field (https://mayphus.org/cell-field/) \n \nA restored generative field of hand-drawn cellular forms, preserved for screen and print.\n\n- \n\nChemistry (https://mayphus.org/chemistry/) \n \nChemical formula parsing, element counts, tests, and a web interface.\n\n- \n\nChinese Book Lab (https://mayphus.org/chinese-book-lab/) \n \nText preparation and traditional vertical book rendering, grounded in the Honglou experiments.\n\n- \n\nChinese Calendar & Symbols (https://mayphus.org/chinese-culture/) \n \nGenerated references for the zodiac, eight trigrams, and the twenty-four solar terms.\n\n- \n\nChinese Zodiac (https://mayphus.org/chinese-zodiac/) \n \nChinese zodiac generation and reference experiments.\n\n- \n\nCircuit Symbol Atlas (https://mayphus.org/circuit-symbol-atlas/) \n \nPrintable atlas of electronic circuit symbols.\n\n- \n\nCommerce Lab (https://mayphus.org/commerce-lab/) \n \nThe useful parts of two commerce prototypes: storefront, cart, checkout, administration, Cloudflare, and WeChat delivery.\n\n- \n\nDaily (https://mayphus.org/daily/) \n \nPublic browser-local daily tracker.\n\n- \n\nDecision (https://mayphus.org/decision/) \n\n- \n\nDemo (https://mayphus.org/demo/) \n \nInbox of small runnable demonstrations recovered from the archive.\n\n- \n\nDiet (https://mayphus.org/diet/) \n \nFood, nutrition, and personal diet experiments; only a sanitized shell is public.\n\n- \n\nDrone Performance (https://mayphus.org/drones/) \n \nDeclarative drone choreography, simulation, safety checks, and show export.\n\n- \n\nEight Trigrams (https://mayphus.org/eight-trigrams/) \n \nBagua and trigram reference generation.\n\n- \n\nEmoji Drawings (https://mayphus.org/emoji/) \n \nRacket pict emoji and icon prototypes.\n\n- \n\nEnglish (https://mayphus.org/english/) \n\n- \n\nEnglish Word Wallpaper (https://mayphus.org/wallpapers/) \n \nRotating Oxford 3000 word wallpaper built with Racket.\n\n- \n\nFacade Light (https://mayphus.org/facade-light/) \n \nDeclarative architectural lighting, mapping, preview, and controller export.\n\n- \n\nFIFA (https://mayphus.org/fifa/) \n \nFootball tournament data and document-rendering experiments.\n\n- \n\nFlashcards (https://mayphus.org/flashcards/) \n \nGenerated flashcard interface and source model.\n\n- \n\nFlower Studies (https://mayphus.org/flower/) \n \nGenerated daisy, cosmos, lily, lotus, rose, sunflower, and tulip studies.\n\n- \n\nFreeBSD (https://mayphus.org/freebsd/) \n \nA short personal introduction to FreeBSD: what it is, why I used it, and what stayed with me.\n\n- \n\nGames (https://mayphus.org/games/) \n \nMahjong, Sudoku, Tetris, and football tournament experiments preserved as one playable-software family.\n\n- \n\nGeologic Clock (https://mayphus.org/geologic-clock/) \n \nGenerated deep-time visual study.\n\n- \n\nGridpaper (https://mayphus.org/gridpaper/) \n \nPrintable guide-sheet generator.\n\n- \n\nHanzi Matrix (https://mayphus.org/hanzi/) \n \nTraditional Hanzi matrix with pinyin, zhuyin, and English details.\n\n- \n\nHardware Lab (https://mayphus.org/hardware-lab/) \n \nMechanical CAD, circuit-symbol references, and four original KiCad board experiments.\n\n- \n\nHome Network (https://mayphus.org/network/) \n \nPublic-safe graph view of the Mayphus home LAN topology.\n\n- \n\nHonglou (https://mayphus.org/honglou/) \n \nDream of the Red Chamber source and text experiments.\n\n- \n\nIcon Forge (https://mayphus.org/icon-forge/) \n \nDeclared icon scenes with rendering, licensing, and source attribution.\n\n- \n\nInfrastructure (https://mayphus.org/infrastructure/) \n \nPublic, sanitized description of the infrastructure behind Mayphus.\n\n- \n\nInput Method Builder (https://mayphus.org/typing/) \n \nRime and Yuanshu input-method builder with live keyboard previews and downloadable packages.\n\n- \n\nIntegrated Show (https://mayphus.org/show/) \n \nShared timeline for lights, fountains, drones, music, and performance channels.\n\n- \n\nInteractive Artillery (https://mayphus.org/physics/) \n \nProjectile-flight visualization with quadratic drag.\n\n- \n\nIPA Chart (https://mayphus.org/ipa/) \n \nClickable phonetic reference with local audio samples.\n\n- \n\nJob Hunter (https://mayphus.org/job-hunter/) \n \nPersonal job-search tooling; this public page excludes private applications and resume data.\n\n- \n\nJoy Lang (https://mayphus.org/joy-lang/) \n \nSmall language and stack-language experiments.\n\n- \n\nLambdaCAD (https://mayphus.org/cad/) \n \nRacket-first CAD for mechanical ideas, shapes, parts, and manufacturable models.\n\n- \n\nLanguage Learning (https://mayphus.org/language-learning/) \n \nSmall teaching surfaces for words, cards, prompts, and device-sized repetition.\n\n- \n\nLeRobot (https://mayphus.org/lerobot/) \n \nRobot-learning and training experiments.\n\n- \n\nLinux Disk Layout (https://mayphus.org/linux-disk/) \n \nVisual map of a GPT-partitioned Linux install disk: EFI, boot, root, swap, home, and backup GPT metadata.\n\n- \n\nMahjong (https://mayphus.org/mahjong/) \n \nRacket-powered local four-player Mahjong prototype.\n\n- \n\nMath Lab (https://mayphus.org/math-lab/) \n \nInteractive calculus, numerical and 3D studies, Voronoi geometry, cube mathematics, and comparison models.\n\n- \n\nMilk Teeth (https://mayphus.org/milk-teeth/) \n \nAnimated primary-tooth eruption timeline for all 20 milk teeth.\n\n- \n\nMotif (https://mayphus.org/motif/) \n \nA restored Racket drawing DSL explored through geometric and decorative motifs.\n\n- \n\nMusic Fountain (https://mayphus.org/music-fountain/) \n \nDeclarative water, pump, color, and music-synchronized choreography.\n\n- \n\nNatural Language City Map (https://mayphus.org/map/) \n \nDescribe places to find in any city, then generate a safe, bounded OpenStreetMap layer on a real basemap.\n\n- \n\nOrigami (https://mayphus.org/origami/) \n\n- \n\nPackage Tool (https://mayphus.org/pkg/) \n \nPackage-management and installation workflow experiments.\n\n- \n\nPeople Counter (https://mayphus.org/people-counter/) \n \nSmall macOS people-counting utility experiment.\n\n- \n\nPerformance Studio (https://mayphus.org/performance-studio/) \n \nOne timeline language for coordinated lights, fountains, drones, music, and show control.\n\n- \n\nPeriodic Table (https://mayphus.org/periodic-table/) \n \nSquare-cell periodic table with search, category focus, and click-to-inspect element details.\n\n- \n\nPixel (https://mayphus.org/pixel/) \n\n- \n\nPolychron (https://mayphus.org/polychron/) \n \nChinese regnal-era conversion and a generated timeline spanning 505 historical eras.\n\n- \n\nProfile (https://mayphus.org/profile/) \n \nExperienced across CI/CD platforms, production operations, Linux systems, networking, and embedded hardware.\n\n- \n\nRacket Mathematics and 3D (https://mayphus.org/mathematics/) \n \nNumeric visualizations, surfaces, meshes, curves, and interactive 3D.\n\n- \n\nRobot: simulation to SO-101 hardware (https://mayphus.org/so-101-simulator/) \n \nA working record from camera-guided MuJoCo learning to agent-assisted physical SO-101 setup, calibration, and fault isolation.\n\n- \n\nRobotics & Vision (https://mayphus.org/robotics-vision/) \n \nRobot training, ROS 2 environments, and native computer-vision experiments gathered into one practical lab.\n\n- \n\nROS 2 (https://mayphus.org/ros2/) \n\n- \n\nRubik (https://mayphus.org/rubik/) \n\n- \n\nScience Lab (https://mayphus.org/science-lab/) \n \nChemistry, biology diagrams, projectile physics, and the periodic table as one explainable science workspace.\n\n- \n\nSemina (https://mayphus.org/semina/) \n \nPlain-text AI coding tool and Emacs bridge experiments.\n\n- \n\nShop Prototype (https://mayphus.org/shop/) \n \nArchived Cloudflare shop prototype with route and binding declarations.\n\n- \n\nSolar Term Wheel (https://mayphus.org/solar-term/) \n \nTwenty-four solar terms visualization.\n\n- \n\nStarflash (https://mayphus.org/starflash/) \n \nGuided macOS SD and USB image flasher CLI with standalone Ubuntu autoinstall support.\n\n- \n\nStatus (https://mayphus.org/status/) \n \nPublic site inventory and coarse runtime health.\n\n- \n\nSudoku (https://mayphus.org/sudoku/) \n\n- \n\nTCP Explained (https://mayphus.org/tcp/) \n \nInteractive TCP map for connection setup, segment headers, sequence numbers, acknowledgments, windows, retransmission, and teardown.\n\n- \n\nTetris (https://mayphus.org/tetris/) \n \nA compact Racket Tetris game.\n\n- \n\nTimelines (https://mayphus.org/timelines/) \n \nRegnal chronology, Unix lineage, world history, deep time, and human development across different scales.\n\n- \n\nTrime (https://mayphus.org/trime/) \n \nAndroid Rime theme, schema, and configuration collection.\n\n- \n\nUnicode Map (https://mayphus.org/unicode/) \n \nWide Unicode character browser and inspector.\n\n- \n\nUnix Timeline (https://mayphus.org/unix-timeline/) \n \nA maintained Unix lineage chart extended through 2026 with refreshable release labels.\n\n- \n\nVertical Book (https://mayphus.org/vertical-book/) \n \nTraditional vertical Chinese book-layout DSL and PDF renderer.\n\n- \n\nVisual Drawing Lab (https://mayphus.org/visual-lab/) \n \nGenerative motifs, flowers, cells, emoji, pixel art, and icon systems in one drawing collection.\n\n- \n\nVoronoi (https://mayphus.org/voronoi/) \n\n- \n\nWeShop (https://mayphus.org/weshop/) \n \nWeChat commerce app with mini program, CloudBase functions, and admin console.\n\n- \n\nWorld History Chart (https://mayphus.org/history/) \n \nLarge generated world-history chart for screen and print.\n\n- \n\nWriting (https://mayphus.org/writing/) \n \nRecovered public-writing source and publishing domain.\n\n   Explore with your AI (https://mayphus.org/agents/) RSS (https://mayphus.org/rss.xml)","title":"Mayphus","url":"https://mayphus.org/"},{"aliases":[],"id":"note:ai-centered-robot-stack","metadata":{"date":"2026-08-01","id":"ai-centered-robot-stack","kind":"note","links":[],"topic":"ideas","type":"note"},"summary":"I do not think ROS 2 should be the center of a modern robot. The center should be an AI agent that understands the goal and works through explicit capabilities such as navigate, inspect, and grasp. ROS 2, vendor SDKs, and generated adapters can remain replaceable integration layers. Learned skills and whole-body control can execute below them, while hard limits, watchdogs, emergency stop, and motor loops stay outside the agent. AI can optimize the software around the robot; it should not be allowed to rewrite the safety boundary while the robot is running.","text":"I do not think ROS 2 should be the center of a modern robot. The center should be an AI agent that understands the goal and works through explicit capabilities such as navigate, inspect, and grasp. ROS 2, vendor SDKs, and generated adapters can remain replaceable integration layers. Learned skills and whole-body control can execute below them, while hard limits, watchdogs, emergency stop, and motor loops stay outside the agent. AI can optimize the software around the robot; it should not be allowed to rewrite the safety boundary while the robot is running.","title":"AI-centered robot stack","url":"https://mayphus.org/#ai-centered-robot-stack"},{"aliases":[],"id":"note:ai-native-website-interfaces","metadata":{"date":"2026-07-26","id":"ai-native-website-interfaces","kind":"note","links":[{"label":"AI-native website interfaces","url":"https://mayphus.org/ai-native-website-interfaces/"}],"topic":"ideas","type":"note"},"summary":"A proposal for websites that keep a clear reading experience while making questions, evidence, state, and next actions legible to AI.","text":"A proposal for websites that keep a clear reading experience while making questions, evidence, state, and next actions legible to AI.","title":"AI-native website interfaces","url":"https://mayphus.org/#ai-native-website-interfaces"},{"aliases":[],"id":"note:ai-super-app","metadata":{"date":"2026-07-12","id":"ai-super-app","kind":"note","links":[],"topic":"ideas","type":"note"},"summary":"ChatGPT desktop is starting to feel like the AI version of Emacs: one extensible environment with a terminal, browser, code, files, and conversations together. The important part is not having every tool in one window. It is that my operations and working state can become shared AI context, so I spend less time switching apps and explaining where the work stopped.","text":"ChatGPT desktop is starting to feel like the AI version of Emacs: one extensible environment with a terminal, browser, code, files, and conversations together. The important part is not having every tool in one window. It is that my operations and working state can become shared AI context, so I spend less time switching apps and explaining where the work stopped.","title":"ChatGPT desktop is starting to feel like the AI version of Emacs: one extensible…","url":"https://mayphus.org/#ai-super-app"},{"aliases":[],"id":"note:building-ros-robot-vehicle","metadata":{"date":"2017-08-13","id":"building-ros-robot-vehicle","kind":"note","links":[],"topic":"making","type":"note"},"summary":"Building my ROS robot vehicle. After learning with turtlesim, I started putting the physical platform together: a wheeled chassis, stacked controller and motor-driver boards, power wiring, and a cooling fan, all still exposed while I debugged it beside the laptop.","text":"Building my ROS robot vehicle. After learning with turtlesim, I started putting the physical platform together: a wheeled chassis, stacked controller and motor-driver boards, power wiring, and a cooling fan, all still exposed while I debugged it beside the laptop.","title":"Building my ROS robot vehicle.","url":"https://mayphus.org/#building-ros-robot-vehicle"},{"aliases":[],"id":"note:concrete-before-abstraction","metadata":{"date":"2026-07-14","id":"concrete-before-abstraction","kind":"note","links":[],"topic":"ideas","type":"note"},"summary":"Coding, architecture, and other high-level work can be important, but they can also abstract the problem until I lose sight of what actually needs to be solved. I want to begin with the concrete problem, make the smallest useful thing, and only add abstraction when the work asks for it.","text":"Coding, architecture, and other high-level work can be important, but they can also abstract the problem until I lose sight of what actually needs to be solved. I want to begin with the concrete problem, make the smallest useful thing, and only add abstraction when the work asks for it.","title":"Coding, architecture, and other high-level work can be important, but they can also…","url":"https://mayphus.org/#concrete-before-abstraction"},{"aliases":[],"id":"note:early-bing-chat-and-chatgpt","metadata":{"date":"2023-02-23","id":"early-bing-chat-and-chatgpt","kind":"note","links":[],"topic":"making","type":"note"},"summary":"Early Bing Chat and ChatGPT experiments: connecting EdgeGPT to Emacs, then relaying messages between the two chatbots.","text":"Early Bing Chat and ChatGPT experiments: connecting EdgeGPT to Emacs, then relaying messages between the two chatbots.","title":"Early Bing Chat and ChatGPT experiments: connecting EdgeGPT to Emacs, then relaying…","url":"https://mayphus.org/#early-bing-chat-and-chatgpt"},{"aliases":[],"id":"note:electronic-learning-book-repair","metadata":{"date":"2026-06-27","id":"electronic-learning-book-repair","kind":"note","links":[{"label":"Read the full note","url":"https://mayphus.org/electronic-learning-book-repair/"}],"topic":"making","type":"note"},"summary":"Repairing a toddler’s electronic learning book by tracing the power path, cleaning the battery compartment, replacing the batteries, and verifying the fix.","text":"Repairing a toddler’s electronic learning book by tracing the power path, cleaning the battery compartment, replacing the batteries, and verifying the fix.","title":"Electronic learning book repair","url":"https://mayphus.org/#electronic-learning-book-repair"},{"aliases":[],"id":"note:engineering-in-parenting-moments","metadata":{"date":"2026-07-14","id":"engineering-in-parenting-moments","kind":"note","links":[],"topic":"life","type":"note"},"summary":"Today I worked on my website while taking care of my daughter. Instead of separating work and life, AI let me fit small moments of engineering into ordinary parenting. It’s only the first day, but it feels like a different way to work.","text":"Today I worked on my website while taking care of my daughter. Instead of separating work and life, AI let me fit small moments of engineering into ordinary parenting. It’s only the first day, but it feels like a different way to work.","title":"Today I worked on my website while taking care of my daughter.","url":"https://mayphus.org/#engineering-in-parenting-moments"},{"aliases":[],"id":"note:family-ai-workstation","metadata":{"date":"2026-07-22","id":"family-ai-workstation","kind":"note","links":[{"label":"OpenCode","url":"https://opencode.ai/"},{"label":"OpenChamber","url":"https://openchamber.dev/"}],"topic":"making","type":"note"},"summary":"Built a small family AI workstation on PB62. A dedicated KVM guest named zsn runs OpenCode and OpenChamber, holds my wife's website checkout and development toolchain, and keeps her sessions, Git identity, and future provider credentials separate from mine. Each client pairs with its own revocable encrypted relay token; raw agent ports stay private. Git remains the recovery boundary, and deployment credentials stay outside the VM until they are explicitly needed.","text":"Built a small family AI workstation on PB62. A dedicated KVM guest named zsn runs OpenCode and OpenChamber, holds my wife's website checkout and development toolchain, and keeps her sessions, Git identity, and future provider credentials separate from mine. Each client pairs with its own revocable encrypted relay token; raw agent ports stay private. Git remains the recovery boundary, and deployment credentials stay outside the VM until they are explicitly needed.","title":"Built a small family AI workstation on PB62.","url":"https://mayphus.org/#family-ai-workstation"},{"aliases":[],"id":"note:faster-codex-workflow","metadata":{"date":"2026-07-15","id":"faster-codex-workflow","kind":"note","links":[],"topic":"work","type":"note"},"summary":"I’m starting to optimize my Codex workflow. Instead of making every turn follow a heavy default sequence of pull, change, test, and review—even when a small change takes only a moment—I’m moving toward a hierarchy of iteration, review, and ship. The depth of the workflow should match the size and risk of the change, so a small task does not automatically take two or three minutes. I’m also starting to use Git worktrees so independent work can run in parallel.","text":"I’m starting to optimize my Codex workflow. Instead of making every turn follow a heavy default sequence of pull, change, test, and review—even when a small change takes only a moment—I’m moving toward a hierarchy of iteration, review, and ship. The depth of the workflow should match the size and risk of the change, so a small task does not automatically take two or three minutes. I’m also starting to use Git worktrees so independent work can run in parallel.","title":"I’m starting to optimize my Codex workflow.","url":"https://mayphus.org/#faster-codex-workflow"},{"aliases":[],"id":"note:first-at89x51","metadata":{"date":"2016-10-14","id":"first-at89x51","kind":"note","links":[],"topic":"making","type":"note"},"summary":"My first time using an AT89X51 microcontroller. I built and debugged the circuit on breadboards, surrounded by jumper wires, handwritten notes, a programmer, and a multimeter. The LEDs, seven-segment display, and ultrasonic sensors made the code visible in the physical world.","text":"My first time using an AT89X51 microcontroller. I built and debugged the circuit on breadboards, surrounded by jumper wires, handwritten notes, a programmer, and a multimeter. The LEDs, seven-segment display, and ultrasonic sensors made the code visible in the physical world.","title":"My first time using an AT89X51 microcontroller.","url":"https://mayphus.org/#first-at89x51"},{"aliases":[],"id":"note:gnu-guix-system-install","metadata":{"date":"2023-01-18","id":"gnu-guix-system-install","kind":"note","links":[{"label":"GNU Guix","url":"https://guix.gnu.org/"}],"topic":"making","type":"note"},"summary":"Installing GNU Guix System on a workstation.","text":"Installing GNU Guix System on a workstation.","title":"Installing GNU Guix System on a workstation.","url":"https://mayphus.org/#gnu-guix-system-install"},{"aliases":[],"id":"note:how-i-work-with-ai","metadata":{"date":"2026-07-16","id":"how-i-work-with-ai","kind":"note","links":[{"label":"Read the full note","url":"https://mayphus.org/ai-workflow/"}],"topic":"work","type":"note"},"summary":"A short explanation of how I use ChatGPT, Codex, Git, and Mayphus as one practical workflow.","text":"A short explanation of how I use ChatGPT, Codex, Git, and Mayphus as one practical workflow.","title":"How I work with AI","url":"https://mayphus.org/#how-i-work-with-ai"},{"aliases":[],"id":"note:nano-pi-teardown","metadata":{"date":"2026-06-12","id":"nano-pi-teardown","kind":"note","links":[{"label":"Read the full note","url":"https://mayphus.org/nano-pi-teardown/"}],"topic":"making","type":"note"},"summary":"Opening a Nano Pi to inspect the RK3328, memory, Ethernet chips, SD-card slot, USB-C, reset, debug pins, and power-management markings.","text":"Opening a Nano Pi to inspect the RK3328, memory, Ethernet chips, SD-card slot, USB-C, reset, debug pins, and power-management markings.","title":"Nano Pi teardown","url":"https://mayphus.org/#nano-pi-teardown"},{"aliases":[],"id":"note:nanopi-r2s-alpine-boot","metadata":{"date":"2026-08-19","id":"nanopi-r2s-alpine-boot","kind":"note","links":[{"label":"Read the full note","url":"https://mayphus.org/nanopi-r2s-alpine-boot/"}],"topic":"making","type":"note"},"summary":"An evidence-led NanoPi R2S investigation: isolate an unreliable UART path, identify a wrong Rockchip image, boot Alpine Linux, and map the RK3328 SD-card chain.","text":"An evidence-led NanoPi R2S investigation: isolate an unreliable UART path, identify a wrong Rockchip image, boot Alpine Linux, and map the RK3328 SD-card chain.","title":"From silent UART to a working NanoPi R2S","url":"https://mayphus.org/#nanopi-r2s-alpine-boot"},{"aliases":[],"id":"note:one-public-thread","metadata":{"date":"2026-07-12","id":"one-public-thread","kind":"note","links":[],"topic":"ideas","type":"note"},"summary":"Short ideas should have one quiet public home. They do not each need a new page, project, or polished conclusion. A dated thread can show the thought while it is still moving.","text":"Short ideas should have one quiet public home. They do not each need a new page, project, or polished conclusion. A dated thread can show the thought while it is still moving.","title":"Short ideas should have one quiet public home.","url":"https://mayphus.org/#one-public-thread"},{"aliases":[],"id":"note:openlens-local-first-camera","metadata":{"date":"2026-08-14","id":"openlens-local-first-camera","kind":"note","links":[{"label":"Read the full note","url":"https://mayphus.org/openlens/"}],"topic":"making","type":"note"},"summary":"Building a portable multilingual learning companion, testing offline vision on Android, and keeping model uncertainty visible.","text":"Building a portable multilingual learning companion, testing offline vision on Android, and keeping model uncertainty visible.","title":"OpenLens: a local-first camera that admits what it does not know","url":"https://mayphus.org/#openlens-local-first-camera"},{"aliases":[],"id":"note:optimizing-someone-elses-workflow","metadata":{"date":"2026-07-17","id":"optimizing-someone-elses-workflow","kind":"note","links":[],"topic":"life","type":"note"},"summary":"I spent a night helping optimize my wife’s website. By morning, she was furious—not because it was broken, but because I had slightly changed her UI and logic. Predictable result: when working on someone else’s familiar system, preserving what they already recognize matters more than making it “better” without asking.","text":"I spent a night helping optimize my wife’s website. By morning, she was furious—not because it was broken, but because I had slightly changed her UI and logic. Predictable result: when working on someone else’s familiar system, preserving what they already recognize matters more than making it “better” without asking.","title":"I spent a night helping optimize my wife’s website.","url":"https://mayphus.org/#optimizing-someone-elses-workflow"},{"aliases":[],"id":"note:part-time-work-rhythm","metadata":{"date":"2026-07-14","id":"part-time-work-rhythm","kind":"note","links":[],"topic":"work","type":"note"},"summary":"A part-time job might be a good fit for me. In theory, full-time employment is not always efficient for either the employer or the employee: people rarely work productively through every hour of a fixed schedule, while focused work often comes in intense bursts that can stretch beyond eight hours when the work is truly moving. Part-time work may leave more room to follow that natural rhythm.","text":"A part-time job might be a good fit for me. In theory, full-time employment is not always efficient for either the employer or the employee: people rarely work productively through every hour of a fixed schedule, while focused work often comes in intense bursts that can stretch beyond eight hours when the work is truly moving. Part-time work may leave more room to follow that natural rhythm.","title":"A part-time job might be a good fit for me.","url":"https://mayphus.org/#part-time-work-rhythm"},{"aliases":[],"id":"note:proof-before-claims","metadata":{"date":"2026-07-11","id":"proof-before-claims","kind":"note","links":[],"topic":"ideas","type":"note"},"summary":"A personal site is more useful when it shows working artifacts and operating evidence instead of describing ambitions. Build the proof, then write the sentence.","text":"A personal site is more useful when it shows working artifacts and operating evidence instead of describing ambitions. Build the proof, then write the sentence.","title":"A personal site is more useful when it shows working artifacts and operating evidence…","url":"https://mayphus.org/#proof-before-claims"},{"aliases":[],"id":"note:restartable-work","metadata":{"date":"2026-07-10","id":"restartable-work","kind":"note","links":[{"label":"Infrastructure","url":"https://mayphus.org/infrastructure/"}],"topic":"ideas","type":"note"},"summary":"The smallest useful project note records where the work stopped, the next physical action, and the evidence already captured. That is enough to make tomorrow easier.","text":"The smallest useful project note records where the work stopped, the next physical action, and the evidence already captured. That is enough to make tomorrow easier.","title":"The smallest useful project note records where the work stopped, the next physical…","url":"https://mayphus.org/#restartable-work"},{"aliases":[],"id":"note:roku-remote-over-tailscale","metadata":{"date":"2026-07-16","id":"roku-remote-over-tailscale","kind":"note","links":[{"label":"A Roku remote through Tailscale","url":"https://mayphus.org/roku-remote-over-tailscale/"}],"topic":"life","type":"note"},"summary":"My daughter's grandma called while I was outside the house because she could not find the Roku remote and wanted me to stop a show. The Roku app refused to enable its remote over mobile data, even with Tailscale connected. ChatGPT suggested connecting my phone to any available Wi-Fi, then manually entering the Roku's home IP address. The Wi-Fi satisfied the app's check, manual entry bypassed discovery, and Tailscale carried the connection home. The official Roku remote then worked while I was outside.","text":"My daughter's grandma called while I was outside the house because she could not find the Roku remote and wanted me to stop a show. The Roku app refused to enable its remote over mobile data, even with Tailscale connected. ChatGPT suggested connecting my phone to any available Wi-Fi, then manually entering the Roku's home IP address. The Wi-Fi satisfied the app's check, manual entry bypassed discovery, and Tailscale carried the connection home. The official Roku remote then worked while I was outside.","title":"My daughter's grandma called while I was outside the house because she could not find the…","url":"https://mayphus.org/#roku-remote-over-tailscale"},{"aliases":[],"id":"note:router-service-recovery","metadata":{"date":"2026-06-09","id":"router-service-recovery","kind":"note","links":[{"label":"Read the full note","url":"https://mayphus.org/router-service-tailscale-jump-recovery/"}],"topic":"work","type":"note"},"summary":"Recovering a router service through an independent Tailscale jump host when direct access is gone.","text":"Recovering a router service through an independent Tailscale jump host when direct access is gone.","title":"Router service recovery through a Tailscale jump","url":"https://mayphus.org/#router-service-recovery"},{"aliases":[],"id":"note:screenshots-2024-09","metadata":{"date":"2024-09-28","id":"screenshots-2024-09","kind":"note","links":[],"topic":"making","type":"note"},"summary":"Screenshots from September 2024.","text":"Screenshots from September 2024.","title":"Screenshots from September 2024.","url":"https://mayphus.org/#screenshots-2024-09"},{"aliases":[],"id":"note:screenshots-2025-08","metadata":{"date":"2025-08-30","id":"screenshots-2025-08","kind":"note","links":[],"topic":"making","type":"note"},"summary":"Screenshots from August 2025.","text":"Screenshots from August 2025.","title":"Screenshots from August 2025.","url":"https://mayphus.org/#screenshots-2025-08"},{"aliases":[],"id":"note:screenshots-2025-11","metadata":{"date":"2025-11-22","id":"screenshots-2025-11","kind":"note","links":[],"topic":"making","type":"note"},"summary":"Screenshots from November 2025.","text":"Screenshots from November 2025.","title":"Screenshots from November 2025.","url":"https://mayphus.org/#screenshots-2025-11"},{"aliases":[],"id":"note:screenshots-2025-12","metadata":{"date":"2025-12-27","id":"screenshots-2025-12","kind":"note","links":[],"topic":"making","type":"note"},"summary":"Screenshots from December 2025.","text":"Screenshots from December 2025.","title":"Screenshots from December 2025.","url":"https://mayphus.org/#screenshots-2025-12"},{"aliases":[],"id":"note:sugar-from-a-soldier","metadata":{"date":"2026-07-30","id":"sugar-from-a-soldier","kind":"note","links":[{"label":"Read the full note","url":"https://mayphus.org/sugar-from-a-soldier/"}],"topic":"life","type":"note"},"summary":"Testing a grandmother’s memory of Japanese soldiers giving sweets to children in wartime Liu Yuan against Japanese and international records.","text":"Testing a grandmother’s memory of Japanese soldiers giving sweets to children in wartime Liu Yuan against Japanese and international records.","title":"Sugar from a soldier","url":"https://mayphus.org/#sugar-from-a-soldier"},{"aliases":[],"id":"note:tinystories-model-on-rp2040","metadata":{"date":"2026-08-13","id":"tinystories-model-on-rp2040","kind":"note","links":[{"label":"Full project record","url":"https://mayphus.org/tinystories-rp2040/"}],"topic":"making","type":"note"},"summary":"I trained a tiny Transformer, quantized it, and ran its C inference runtime entirely on my custom Raspberry Pi Pico display board. I did not solve the individual technical issues myself. I described what I wanted and what I could see; the AI agent handled the technical path, while I supplied the physical observations needed to verify the screen, button, and board. The final 98,944-parameter model fit inside the RP2040 memory budget and generated a punctuation-complete micro-story on the physical board in 10.394 seconds.","text":"I trained a tiny Transformer, quantized it, and ran its C inference runtime entirely on my custom Raspberry Pi Pico display board. I did not solve the individual technical issues myself. I described what I wanted and what I could see; the AI agent handled the technical path, while I supplied the physical observations needed to verify the screen, button, and board. The final 98,944-parameter model fit inside the RP2040 memory budget and generated a punctuation-complete micro-story on the physical board in 10.394 seconds.","title":"A TinyStories model on my RP2040 board","url":"https://mayphus.org/#tinystories-model-on-rp2040"},{"aliases":[],"id":"note:university-linear-actuator","metadata":{"date":"2017-05-26","id":"university-linear-actuator","kind":"note","links":[],"topic":"making","type":"note"},"summary":"At university, I helped others get this linear actuator moving. The work brought the whole control path onto one desk: code on the laptop and monitor, a power supply, controller boards, a breadboard, wiring, and the actuator itself.","text":"At university, I helped others get this linear actuator moving. The work brought the whole control path onto one desk: code on the laptop and monitor, a power supply, controller boards, a breadboard, wiring, and the actuator itself.","title":"At university, I helped others get this linear actuator moving.","url":"https://mayphus.org/#university-linear-actuator"},{"aliases":[],"id":"note:walking-from-hangzhou-to-zhuji","metadata":{"date":"2023-04-25","id":"walking-from-hangzhou-to-zhuji","kind":"note","links":[],"topic":"life","type":"note"},"summary":"Planned a 65.5-kilometer walk from Hangzhou to Zhuji. I made it about 20 or 30 kilometers.","text":"Planned a 65.5-kilometer walk from Hangzhou to Zhuji. I made it about 20 or 30 kilometers.","title":"Planned a 65.5-kilometer walk from Hangzhou to Zhuji.","url":"https://mayphus.org/#walking-from-hangzhou-to-zhuji"},{"aliases":[],"id":"note:weapp-vite-custom-config","metadata":{"date":"2025-09-17","id":"weapp-vite-custom-config","kind":"note","links":[{"label":"Repository","url":"https://github.com/weapp-vite/weapp-vite"},{"label":"Merged PR #175","url":"https://github.com/weapp-vite/weapp-vite/pull/175"}],"topic":"making","type":"note"},"summary":"In September 2025, I contributed a small fix to weapp-vite, a Vite-based build tool for WeChat mini-programs. The merged patch made its build, dev, and generate commands honor custom configuration files through --config or -c, including resolving relative paths from the project root.","text":"In September 2025, I contributed a small fix to weapp-vite, a Vite-based build tool for WeChat mini-programs. The merged patch made its build, dev, and generate commands honor custom configuration files through --config or -c, including resolving relative paths from the project root.","title":"In September 2025, I contributed a small fix to weapp-vite, a Vite-based build tool for…","url":"https://mayphus.org/#weapp-vite-custom-config"},{"aliases":[],"id":"note:website-as-working-memory","metadata":{"date":"2026-07-26","id":"website-as-working-memory","kind":"note","links":[],"topic":"ideas","type":"note"},"summary":"I do not want my website to be a separate job. It should become a durable public memory that participates in my AI work: when an idea or investigation becomes useful, I can ask the assistant to turn it into a concise note, keep private details out, and create a review before anything goes public. The website is not the work itself. It records the proof and lessons from real work.","text":"I do not want my website to be a separate job. It should become a durable public memory that participates in my AI work: when an idea or investigation becomes useful, I can ask the assistant to turn it into a concise note, keep private details out, and create a review before anything goes public. The website is not the work itself. It records the proof and lessons from real work.","title":"Website as working memory","url":"https://mayphus.org/#website-as-working-memory"},{"aliases":[],"id":"note:work-on-the-go","metadata":{"date":"2026-07-13","id":"work-on-the-go","kind":"note","links":[],"topic":"life","type":"note"},"summary":"I am trying to develop a workflow that lets me work mostly on the go—with mobile devices, ChatGPT, AI, and Codex—while still being present and taking care of my daughter. With AI agents, I only need to prompt a few times; most of the work is waiting and thinking. A traditional desktop workflow often keeps me sitting at the computer even when I am mostly searching the web, browsing X, or watching YouTube. The better optimization is to let the agents work while I step away: think clearly, enjoy life, and care for my baby, then return when a decision is needed.","text":"I am trying to develop a workflow that lets me work mostly on the go—with mobile devices, ChatGPT, AI, and Codex—while still being present and taking care of my daughter. With AI agents, I only need to prompt a few times; most of the work is waiting and thinking. A traditional desktop workflow often keeps me sitting at the computer even when I am mostly searching the web, browsing X, or watching YouTube. The better optimization is to let the agents work while I step away: think clearly, enjoy life, and care for my baby, then return when a decision is needed.","title":"I am trying to develop a workflow that lets me work mostly on the go—with mobile devices,…","url":"https://mayphus.org/#work-on-the-go"},{"aliases":[],"id":"note:x-1700337175748055385","metadata":{"date":"2023-09-09","id":"x-1700337175748055385","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1700337175748055385"}],"topic":"ideas","type":"note"},"summary":"Hi, My name is Felix Tang. I am learning and practicing English as a non-English speaker. I also want to share my mind and skills with this way. I also upload daily practice videos to my YouTube channel. I help these methods can save my English.","text":"Hi, My name is Felix Tang. I am learning and practicing English as a non-English speaker. I also want to share my mind and skills with this way. I also upload daily practice videos to my YouTube channel. I help these methods can save my English.","title":"Hi, My name is Felix Tang.","url":"https://mayphus.org/#x-1700337175748055385"},{"aliases":[],"id":"note:x-1700538797933617526","metadata":{"date":"2023-09-09","id":"x-1700538797933617526","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1700538797933617526"}],"topic":"making","type":"note"},"summary":"A month ago, I upload a practicing English short video to Chinese instagram 小红书. After that I update daily. Why I do this because I have social anxiety and lack up speaking communication skills. One month of practice improve m a lot I think. I will continue to do that.","text":"A month ago, I upload a practicing English short video to Chinese instagram 小红书. After that I update daily. Why I do this because I have social anxiety and lack up speaking communication skills. One month of practice improve m a lot I think. I will continue to do that.","title":"A month ago, I upload a practicing English short video to Chinese instagram 小红书.","url":"https://mayphus.org/#x-1700538797933617526"},{"aliases":[],"id":"note:x-1772974412708388979","metadata":{"date":"2024-03-27","id":"x-1772974412708388979","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1772974412708388979"}],"topic":"making","type":"note"},"summary":"I love Emacs org-mode to take notes. denote is my favorite tools, because I can use it start taking notes from minimal. Not like org-roam. #emacs #orgmode","text":"I love Emacs org-mode to take notes. denote is my favorite tools, because I can use it start taking notes from minimal. Not like org-roam. #emacs #orgmode","title":"I love Emacs org-mode to take notes.","url":"https://mayphus.org/#x-1772974412708388979"},{"aliases":[],"id":"note:x-1773368489807429804","metadata":{"date":"2024-03-28","id":"x-1773368489807429804","kind":"x","links":[{"label":"Reply context","url":"https://x.com/i/status/1773368233044623386"},{"label":"Source","url":"https://x.com/mayphustang/status/1773368489807429804"}],"topic":"ideas","type":"note"},"summary":"Use tweet to catch ideas.","text":"Use tweet to catch ideas.","title":"Use tweet to catch ideas.","url":"https://mayphus.org/#x-1773368489807429804"},{"aliases":[],"id":"note:x-1773392712856986105","metadata":{"date":"2024-03-29","id":"x-1773392712856986105","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1773392712856986105"}],"topic":"ideas","type":"note"},"summary":"voice input is so great way to input text messages. it also practices the English speaking skills.","text":"voice input is so great way to input text messages. it also practices the English speaking skills.","title":"voice input is so great way to input text messages.","url":"https://mayphus.org/#x-1773392712856986105"},{"aliases":[],"id":"note:x-1773933965352788236","metadata":{"date":"2024-03-30","id":"x-1773933965352788236","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1773933965352788236"}],"topic":"life","type":"note"},"summary":"A minimalism diet.","text":"A minimalism diet.","title":"A minimalism diet.","url":"https://mayphus.org/#x-1773933965352788236"},{"aliases":[],"id":"note:x-1774068875166134428","metadata":{"date":"2024-03-30","id":"x-1774068875166134428","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1774068875166134428"}],"topic":"life","type":"note"},"summary":"Start running again. This time mainly focus on health, and habit building. Ignore speed, ignore marathon.","text":"Start running again. This time mainly focus on health, and habit building. Ignore speed, ignore marathon.","title":"Start running again.","url":"https://mayphus.org/#x-1774068875166134428"},{"aliases":[],"id":"note:x-1774076030225154167","metadata":{"date":"2024-03-30","id":"x-1774076030225154167","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1774076030225154167"}],"topic":"life","type":"note"},"summary":"Making Century Egg. Wait for the magic of time. #chinese","text":"Making Century Egg. Wait for the magic of time. #chinese","title":"Making Century Egg.","url":"https://mayphus.org/#x-1774076030225154167"},{"aliases":[],"id":"note:x-1778666578265182495","metadata":{"date":"2024-04-12","id":"x-1778666578265182495","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1778666578265182495"}],"topic":"ideas","type":"note"},"summary":"Waiting for GPT-4 Turbo available on my account.","text":"Waiting for GPT-4 Turbo available on my account.","title":"Waiting for GPT-4 Turbo available on my account.","url":"https://mayphus.org/#x-1778666578265182495"},{"aliases":[],"id":"note:x-1779043304509931871","metadata":{"date":"2024-04-13","id":"x-1779043304509931871","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1779043304509931871"}],"topic":"making","type":"note"},"summary":"Oh my poor machine.","text":"Oh my poor machine.","title":"Oh my poor machine.","url":"https://mayphus.org/#x-1779043304509931871"},{"aliases":[],"id":"note:x-1781486728756551907","metadata":{"date":"2024-04-20","id":"x-1781486728756551907","kind":"x","links":[{"label":"Reply context","url":"https://x.com/i/status/1777350693596139546"},{"label":"Source","url":"https://x.com/mayphustang/status/1781486728756551907"}],"topic":"ideas","type":"note"},"summary":"@miiura @vercel Cool! simple, minimal and powerful.","text":"@miiura @vercel Cool! simple, minimal and powerful.","title":"@miiura @vercel Cool!","url":"https://mayphus.org/#x-1781486728756551907"},{"aliases":[],"id":"note:x-1782803513543954635","metadata":{"date":"2024-04-24","id":"x-1782803513543954635","kind":"x","links":[{"label":"Reply context","url":"https://x.com/i/status/1782790974978007176"},{"label":"Source","url":"https://x.com/mayphustang/status/1782803513543954635"}],"topic":"ideas","type":"note"},"summary":"@ollama Awesome, saved my old desktop.","text":"@ollama Awesome, saved my old desktop.","title":"@ollama Awesome, saved my old desktop.","url":"https://mayphus.org/#x-1782803513543954635"},{"aliases":[],"id":"note:x-1783603658896339133","metadata":{"date":"2024-04-26","id":"x-1783603658896339133","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1783603658896339133"}],"topic":"ideas","type":"note"},"summary":"Start to practice free talk. This time with a more freely style, the main goal is output something useful content.","text":"Start to practice free talk. This time with a more freely style, the main goal is output something useful content.","title":"Start to practice free talk.","url":"https://mayphus.org/#x-1783603658896339133"},{"aliases":[],"id":"note:x-1783616353573974184","metadata":{"date":"2024-04-26","id":"x-1783616353573974184","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1783616353573974184"}],"topic":"making","type":"note"},"summary":"Do something.","text":"Do something.","title":"Do something.","url":"https://mayphus.org/#x-1783616353573974184"},{"aliases":[],"id":"note:x-1783717213020754014","metadata":{"date":"2024-04-26","id":"x-1783717213020754014","kind":"x","links":[{"label":"Reply context","url":"https://x.com/i/status/1783139859588116703"},{"label":"Source","url":"https://x.com/mayphustang/status/1783717213020754014"}],"topic":"ideas","type":"note"},"summary":"@ubuntu try the new autoinstall install method. i still remember how i hack ubuntu server’s iso and modify autoinstall years ago.","text":"@ubuntu try the new autoinstall install method. i still remember how i hack ubuntu server’s iso and modify autoinstall years ago.","title":"@ubuntu try the new autoinstall install method.","url":"https://mayphus.org/#x-1783717213020754014"},{"aliases":[],"id":"note:x-1784414256928272398","metadata":{"date":"2024-04-28","id":"x-1784414256928272398","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1784414256928272398"}],"topic":"making","type":"note"},"summary":"Thanks, Hugging Face's Zero GPU. #zerogpu #huggingface","text":"Thanks, Hugging Face's Zero GPU. #zerogpu #huggingface","title":"Thanks, Hugging Face's Zero GPU.","url":"https://mayphus.org/#x-1784414256928272398"},{"aliases":[],"id":"note:x-1812430823221875191","metadata":{"date":"2024-07-14","id":"x-1812430823221875191","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1812430823221875191"}],"topic":"making","type":"note"},"summary":"My first PCB.","text":"My first PCB.","title":"My first PCB.","url":"https://mayphus.org/#x-1812430823221875191"},{"aliases":[],"id":"note:x-1826665178475233737","metadata":{"date":"2024-08-23","id":"x-1826665178475233737","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1826665178475233737"}],"topic":"making","type":"note"},"summary":"Excited to share my first open source contribution! Just submitted a patch to FreeBSD to fix documentation for thin nullfs jails. #OpenSource #FreeBSD #FirstContribution","text":"Excited to share my first open source contribution! Just submitted a patch to FreeBSD to fix documentation for thin nullfs jails. #OpenSource #FreeBSD #FirstContribution","title":"Excited to share my first open source contribution!","url":"https://mayphus.org/#x-1826665178475233737"},{"aliases":[],"id":"note:x-1827255547122303255","metadata":{"date":"2024-08-24","id":"x-1827255547122303255","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1827255547122303255"}],"topic":"making","type":"note"},"summary":"FreeBSD is my favorite. I never need to choose between different Linux distributions and package managers.\nAnd in FreeBSD both basic freebsd system and third party packages are easy to find the sources. Make the system ‘transparency’.","text":"FreeBSD is my favorite. I never need to choose between different Linux distributions and package managers.\nAnd in FreeBSD both basic freebsd system and third party packages are easy to find the sources. Make the system ‘transparency’.","title":"FreeBSD is my favorite.","url":"https://mayphus.org/#x-1827255547122303255"},{"aliases":[],"id":"note:x-1832759345513197923","metadata":{"date":"2024-09-08","id":"x-1832759345513197923","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1832759345513197923"}],"topic":"life","type":"note"},"summary":"is this mediterranean food?","text":"is this mediterranean food?","title":"is this mediterranean food?","url":"https://mayphus.org/#x-1832759345513197923"},{"aliases":[],"id":"note:x-1833651179747774906","metadata":{"date":"2024-09-11","id":"x-1833651179747774906","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1833651179747774906"}],"topic":"making","type":"note"},"summary":"These containers should have gone to many corners of the world. Then they must be more knowledgable than me.","text":"These containers should have gone to many corners of the world. Then they must be more knowledgable than me.","title":"These containers should have gone to many corners of the world.","url":"https://mayphus.org/#x-1833651179747774906"},{"aliases":[],"id":"note:x-1834000596677898698","metadata":{"date":"2024-09-12","id":"x-1834000596677898698","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1834000596677898698"}],"topic":"making","type":"note"},"summary":"Switch from a content consumer to a content creator.\n1. Build a #orgmode based website.","text":"Switch from a content consumer to a content creator.\n1. Build a #orgmode based website.","title":"Switch from a content consumer to a content creator.","url":"https://mayphus.org/#x-1834000596677898698"},{"aliases":[],"id":"note:x-1835700787638354328","metadata":{"date":"2024-09-16","id":"x-1835700787638354328","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1835700787638354328"}],"topic":"making","type":"note"},"summary":"Working on my uniorg powered #astrojs website. Website keeps minimal and been treated as an index list of my #org-mode notes.","text":"Working on my uniorg powered #astrojs website. Website keeps minimal and been treated as an index list of my #org-mode notes.","title":"Working on my uniorg powered #astrojs website.","url":"https://mayphus.org/#x-1835700787638354328"},{"aliases":[],"id":"note:x-1837090614548005267","metadata":{"date":"2024-09-20","id":"x-1837090614548005267","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1837090614548005267"}],"topic":"making","type":"note"},"summary":"Garamond font looks great. Just switch font from browser’s default serif font to it.","text":"Garamond font looks great. Just switch font from browser’s default serif font to it.","title":"Garamond font looks great.","url":"https://mayphus.org/#x-1837090614548005267"},{"aliases":[],"id":"note:x-1839522770725515601","metadata":{"date":"2024-09-27","id":"x-1839522770725515601","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1839522770725515601"}],"topic":"making","type":"note"},"summary":"I enjoy write with Emacs. #emacs","text":"I enjoy write with Emacs. #emacs","title":"I enjoy write with Emacs.","url":"https://mayphus.org/#x-1839522770725515601"},{"aliases":[],"id":"note:x-1840067494444159130","metadata":{"date":"2024-09-29","id":"x-1840067494444159130","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1840067494444159130"}],"topic":"making","type":"note"},"summary":"migrated my website from #github pages to #cloudflare pages.\nmake website style somewhat similar to #emacs","text":"migrated my website from #github pages to #cloudflare pages.\nmake website style somewhat similar to #emacs","title":"migrated my website from #github pages to #cloudflare pages.","url":"https://mayphus.org/#x-1840067494444159130"},{"aliases":[],"id":"note:x-1851952457435210034","metadata":{"date":"2024-10-31","id":"x-1851952457435210034","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1851952457435210034"}],"topic":"life","type":"note"},"summary":"Happy Halloween!","text":"Happy Halloween!","title":"Happy Halloween!","url":"https://mayphus.org/#x-1851952457435210034"},{"aliases":[],"id":"note:x-1852565512997282206","metadata":{"date":"2024-11-02","id":"x-1852565512997282206","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1852565512997282206"}],"topic":"life","type":"note"},"summary":"my diet,\n- Yellowhead catfish\n- Common bean\n- Pepper steak","text":"my diet,\n- Yellowhead catfish\n- Common bean\n- Pepper steak","title":"my diet, - Yellowhead catfish - Common bean - Pepper steak","url":"https://mayphus.org/#x-1852565512997282206"},{"aliases":[],"id":"note:x-1853032780747129188","metadata":{"date":"2024-11-03","id":"x-1853032780747129188","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1853032780747129188"}],"topic":"making","type":"note"},"summary":"Photo 1 attached to the X post from 2024-11-03.","text":"Photo 1 attached to the X post from 2024-11-03.","title":"Entry from 2024-11-03","url":"https://mayphus.org/#x-1853032780747129188"},{"aliases":[],"id":"note:x-1857059847453265988","metadata":{"date":"2024-11-14","id":"x-1857059847453265988","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1857059847453265988"}],"topic":"making","type":"note"},"summary":"3d print a Batman","text":"3d print a Batman","title":"3d print a Batman","url":"https://mayphus.org/#x-1857059847453265988"},{"aliases":[],"id":"note:x-1858039008216883555","metadata":{"date":"2024-11-17","id":"x-1858039008216883555","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1858039008216883555"}],"topic":"ideas","type":"note"},"summary":"Start live as a creator, maker.","text":"Start live as a creator, maker.","title":"Start live as a creator, maker.","url":"https://mayphus.org/#x-1858039008216883555"},{"aliases":[],"id":"note:x-1862113064197276142","metadata":{"date":"2024-11-28","id":"x-1862113064197276142","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1862113064197276142"}],"topic":"making","type":"note"},"summary":"My DIY page turner. I think I need make a bluetooth version. #DIY","text":"My DIY page turner. I think I need make a bluetooth version. #DIY","title":"My DIY page turner.","url":"https://mayphus.org/#x-1862113064197276142"},{"aliases":[],"id":"note:x-1869911568974016554","metadata":{"date":"2024-12-20","id":"x-1869911568974016554","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1869911568974016554"}],"topic":"making","type":"note"},"summary":"Start from simple","text":"Start from simple","title":"Start from simple","url":"https://mayphus.org/#x-1869911568974016554"},{"aliases":[],"id":"note:x-1872137266245832898","metadata":{"date":"2024-12-26","id":"x-1872137266245832898","kind":"x","links":[{"label":"Reply context","url":"https://x.com/i/status/1872062313567797373"},{"label":"Source","url":"https://x.com/mayphustang/status/1872137266245832898"}],"topic":"ideas","type":"note"},"summary":"@salimbenbouz cool","text":"@salimbenbouz cool","title":"@salimbenbouz cool","url":"https://mayphus.org/#x-1872137266245832898"},{"aliases":[],"id":"note:x-1876896537940291910","metadata":{"date":"2025-01-08","id":"x-1876896537940291910","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1876896537940291910"}],"topic":"making","type":"note"},"summary":"Made a simple displayer.\nUsed a Raspberry Pi Pico, and 1.69 in LCD.\nAnd made my first useful PCB board.\n#diy #pcb #3dprint","text":"Made a simple displayer.\nUsed a Raspberry Pi Pico, and 1.69 in LCD.\nAnd made my first useful PCB board.\n#diy #pcb #3dprint","title":"Made a simple displayer.","url":"https://mayphus.org/#x-1876896537940291910"},{"aliases":[],"id":"note:x-1879160110314086438","metadata":{"date":"2025-01-14","id":"x-1879160110314086438","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1879160110314086438"}],"topic":"making","type":"note"},"summary":"Made my first ESP32. Fail to boot.","text":"Made my first ESP32. Fail to boot.","title":"Made my first ESP32.","url":"https://mayphus.org/#x-1879160110314086438"},{"aliases":[],"id":"note:x-1887887393111355695","metadata":{"date":"2025-02-07","id":"x-1887887393111355695","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1887887393111355695"}],"topic":"ideas","type":"note"},"summary":"Start 2025 new year journey.","text":"Start 2025 new year journey.","title":"Start 2025 new year journey.","url":"https://mayphus.org/#x-1887887393111355695"},{"aliases":[],"id":"note:x-1913133587630531003","metadata":{"date":"2025-04-18","id":"x-1913133587630531003","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1913133587630531003"}],"topic":"making","type":"note"},"summary":"Just powered through a 50 KM ride. 🚴‍♂️✨ Legs on fire, heart full—cycling goals unlocked. #CyclingLife #Endurance","text":"Just powered through a 50 KM ride. 🚴‍♂️✨ Legs on fire, heart full—cycling goals unlocked. #CyclingLife #Endurance","title":"Just powered through a 50 KM ride.","url":"https://mayphus.org/#x-1913133587630531003"},{"aliases":[],"id":"note:x-1957815477561860601","metadata":{"date":"2025-08-19","id":"x-1957815477561860601","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1957815477561860601"}],"topic":"making","type":"note"},"summary":"This is my Chinese breakfast.","text":"This is my Chinese breakfast.","title":"This is my Chinese breakfast.","url":"https://mayphus.org/#x-1957815477561860601"},{"aliases":[],"id":"note:x-1973271263209726015","metadata":{"date":"2025-10-01","id":"x-1973271263209726015","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1973271263209726015"}],"topic":"making","type":"note"},"summary":"Photo 1 attached to the X post from 2025-10-01.","text":"Photo 1 attached to the X post from 2025-10-01.","title":"Entry from 2025-10-01","url":"https://mayphus.org/#x-1973271263209726015"},{"aliases":[],"id":"note:x-2047688708418425261","metadata":{"date":"2026-04-24","id":"x-2047688708418425261","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/2047688708418425261"}],"topic":"making","type":"note"},"summary":"I just used my Emacs to check my homelab computer k3s's service when I am out of home.","text":"I just used my Emacs to check my homelab computer k3s's service when I am out of home.","title":"I just used my Emacs to check my homelab computer k3s's service when I am out of home.","url":"https://mayphus.org/#x-2047688708418425261"},{"aliases":[],"id":"note:x-2061713757844431205","metadata":{"date":"2026-06-02","id":"x-2061713757844431205","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/2061713757844431205"}],"topic":"making","type":"note"},"summary":"I am building a single, unified Racket project to orchestrate my entire personal infrastructure.","text":"I am building a single, unified Racket project to orchestrate my entire personal infrastructure.","title":"I am building a single, unified Racket project to orchestrate my entire personal…","url":"https://mayphus.org/#x-2061713757844431205"},{"aliases":[],"id":"note:x-2062369997037703402","metadata":{"date":"2026-06-04","id":"x-2062369997037703402","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/2062369997037703402"}],"topic":"making","type":"note"},"summary":"Building","text":"Building","title":"Building","url":"https://mayphus.org/#x-2062369997037703402"},{"aliases":[],"id":"note:x-2062546584131547366","metadata":{"date":"2026-06-04","id":"x-2062546584131547366","kind":"x","links":[{"label":"mayphus.org/typing/","url":"https://mayphus.org/typing/"},{"label":"Source","url":"https://x.com/mayphustang/status/2062546584131547366"}],"topic":"making","type":"note"},"summary":"Rime Input Method and Yuanshu Input method's Schema and Skin generator. mayphus.org/typing/","text":"Rime Input Method and Yuanshu Input method's Schema and Skin generator. mayphus.org/typing/","title":"Rime Input Method and Yuanshu Input method's Schema and Skin generator.","url":"https://mayphus.org/#x-2062546584131547366"},{"aliases":[],"id":"note:x-2064249796668625060","metadata":{"date":"2026-06-09","id":"x-2064249796668625060","kind":"x","links":[{"label":"mayphus.org/typing","url":"http://mayphus.org/typing"},{"label":"Source","url":"https://x.com/mayphustang/status/2064249796668625060"}],"topic":"making","type":"note"},"summary":"A generated Flypy double-pinyin skin.\nInstead of drawing keyboard themes manually, I'm generating them from code so the same system can produce skins, previews, and configuration packages automatically.\nmayphus.org/typing","text":"A generated Flypy double-pinyin skin.\nInstead of drawing keyboard themes manually, I'm generating them from code so the same system can produce skins, previews, and configuration packages automatically.\nmayphus.org/typing","title":"A generated Flypy double-pinyin skin.","url":"https://mayphus.org/#x-2064249796668625060"},{"aliases":[],"id":"note:x-2064395550271942867","metadata":{"date":"2026-06-10","id":"x-2064395550271942867","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/2064395550271942867"}],"topic":"making","type":"note"},"summary":"my lithium battery burn by itself.","text":"my lithium battery burn by itself.","title":"my lithium battery burn by itself.","url":"https://mayphus.org/#x-2064395550271942867"},{"aliases":[],"id":"note:x-2067242145233424467","metadata":{"date":"2026-06-17","id":"x-2067242145233424467","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/2067242145233424467"}],"topic":"making","type":"note"},"summary":"building my ai first personal website. still ugly.","text":"building my ai first personal website. still ugly.","title":"building my ai first personal website.","url":"https://mayphus.org/#x-2067242145233424467"},{"aliases":[],"id":"note:x-2070168449062707553","metadata":{"date":"2026-06-25","id":"x-2070168449062707553","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/2070168449062707553"}],"topic":"making","type":"note"},"summary":"Found these old photos today.\n\nMy Raspberry Pi 3 used to be the brain of my ROS robot.\n\nI lost this Pi after buying a Raspberry Pi 4, but I still have the other boards in the box.\n\nMaybe it’s time to build something with them again.","text":"Found these old photos today.\n\nMy Raspberry Pi 3 used to be the brain of my ROS robot.\n\nI lost this Pi after buying a Raspberry Pi 4, but I still have the other boards in the box.\n\nMaybe it’s time to build something with them again.","title":"Found these old photos today.","url":"https://mayphus.org/#x-2070168449062707553"},{"aliases":[],"id":"note:x-2070348614732526009","metadata":{"date":"2026-06-26","id":"x-2070348614732526009","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/2070348614732526009"}],"topic":"ideas","type":"note"},"summary":"Fixed a sync issue between Codex Desktop and the mobile app. The solution was to uninstall the Codex app on my phone, then pair it again.","text":"Fixed a sync issue between Codex Desktop and the mobile app. The solution was to uninstall the Codex app on my phone, then pair it again.","title":"Fixed a sync issue between Codex Desktop and the mobile app.","url":"https://mayphus.org/#x-2070348614732526009"},{"aliases":[],"id":"note:x-2070349853847412992","metadata":{"date":"2026-06-26","id":"x-2070349853847412992","kind":"x","links":[{"label":"Reply context","url":"https://x.com/i/status/2070348614732526009"},{"label":"Source","url":"https://x.com/mayphustang/status/2070349853847412992"}],"topic":"ideas","type":"note"},"summary":"After reinstalling the Codex mobile app and pairing it again, sync issues disappeared. The app also feels smoother, though I'm not sure if that's because of the reinstall or just my perception.","text":"After reinstalling the Codex mobile app and pairing it again, sync issues disappeared. The app also feels smoother, though I'm not sure if that's because of the reinstall or just my perception.","title":"After reinstalling the Codex mobile app and pairing it again, sync issues disappeared.","url":"https://mayphus.org/#x-2070349853847412992"},{"aliases":[],"id":"note:x-2070384134992842812","metadata":{"date":"2026-06-26","id":"x-2070384134992842812","kind":"x","links":[{"label":"Reply context","url":"https://x.com/i/status/2069994029593543005"},{"label":"Source","url":"https://x.com/mayphustang/status/2070384134992842812"}],"topic":"ideas","type":"note"},"summary":"@naval Humans should do the work, AI should do the documenting.","text":"@naval Humans should do the work, AI should do the documenting.","title":"@naval Humans should do the work, AI should do the documenting.","url":"https://mayphus.org/#x-2070384134992842812"},{"aliases":[],"id":"note:x-2070396348583813167","metadata":{"date":"2026-06-26","id":"x-2070396348583813167","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/2070396348583813167"}],"topic":"making","type":"note"},"summary":"I just realized I first tried ROS almost 10 years ago.\n\nThis photo was taken in an old, almost abandoned office at my university.\n\nJuly 2017.","text":"I just realized I first tried ROS almost 10 years ago.\n\nThis photo was taken in an old, almost abandoned office at my university.\n\nJuly 2017.","title":"I just realized I first tried ROS almost 10 years ago.","url":"https://mayphus.org/#x-2070396348583813167"},{"aliases":[],"id":"note:x-2070904771448631393","metadata":{"date":"2026-06-28","id":"x-2070904771448631393","kind":"x","links":[{"label":"Reply context","url":"https://x.com/i/status/2070396348583813167"},{"label":"Source","url":"https://x.com/mayphustang/status/2070904771448631393"}],"topic":"ideas","type":"note"},"summary":"I don’t remember the commands anymore.\n\nI remember the curiosity.\n\nTen years later, most of the software is obsolete, but the habit of taking things apart, experimenting, and documenting what I learn is still the most valuable skill.","text":"I don’t remember the commands anymore.\n\nI remember the curiosity.\n\nTen years later, most of the software is obsolete, but the habit of taking things apart, experimenting, and documenting what I learn is still the most valuable skill.","title":"I don’t remember the commands anymore.","url":"https://mayphus.org/#x-2070904771448631393"},{"aliases":[],"id":"note:x-2071427945152082398","metadata":{"date":"2026-06-29","id":"x-2071427945152082398","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/2071427945152082398"}],"topic":"making","type":"note"},"summary":"Just migrated my codebase to my mini PC. Maintained by Codex now, so I barely need my desktop PC anymore. I can work from coffee shops, supermarkets, etc.","text":"Just migrated my codebase to my mini PC. Maintained by Codex now, so I barely need my desktop PC anymore. I can work from coffee shops, supermarkets, etc.","title":"Just migrated my codebase to my mini PC.","url":"https://mayphus.org/#x-2071427945152082398"},{"aliases":[],"id":"note:x-2071505350155792531","metadata":{"date":"2026-06-29","id":"x-2071505350155792531","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/2071505350155792531"}],"topic":"ideas","type":"note"},"summary":"Forget the superapp. Just let ChatGPT and Codex share memory. Re-explaining the same project to both is unnecessary friction.","text":"Forget the superapp. Just let ChatGPT and Codex share memory. Re-explaining the same project to both is unnecessary friction.","title":"Forget the superapp.","url":"https://mayphus.org/#x-2071505350155792531"},{"aliases":[],"id":"note:x-2071616169765949771","metadata":{"date":"2026-06-29","id":"x-2071616169765949771","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/2071616169765949771"}],"topic":"making","type":"note"},"summary":"My Roku remote can’t listen to me. investigating if microphone break down.","text":"My Roku remote can’t listen to me. investigating if microphone break down.","title":"My Roku remote can’t listen to me.","url":"https://mayphus.org/#x-2071616169765949771"},{"aliases":[],"id":"note:x-2072198325340873068","metadata":{"date":"2026-07-01","id":"x-2072198325340873068","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/2072198325340873068"}],"topic":"ideas","type":"note"},"summary":"Today's realization:\n\nI'm not at my best when answering from memory.\n\nI'm at my best when investigating.\n\nGive me a terminal, logs, and a problem. I'll figure it out.\nLearn. Repeat.\nThat's how I'm going to learn and build in public.","text":"Today's realization:\n\nI'm not at my best when answering from memory.\n\nI'm at my best when investigating.\n\nGive me a terminal, logs, and a problem. I'll figure it out.\nLearn. Repeat.\nThat's how I'm going to learn and build in public.","title":"Today's realization: I'm not at my best when answering from memory.","url":"https://mayphus.org/#x-2072198325340873068"},{"aliases":[],"id":"note:x-2074332004049711280","metadata":{"date":"2026-07-07","id":"x-2074332004049711280","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/2074332004049711280"}],"topic":"ideas","type":"note"},"summary":"codex in-app browser needs passkey support @thsottiaux","text":"codex in-app browser needs passkey support @thsottiaux","title":"codex in-app browser needs passkey support @thsottiaux","url":"https://mayphus.org/#x-2074332004049711280"},{"aliases":[],"id":"note:x-2075320630992642416","metadata":{"date":"2026-07-10","id":"x-2075320630992642416","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/2075320630992642416"}],"topic":"ideas","type":"note"},"summary":"chatgpt, work, codex may share ui. only difference is the context (project, plugins etc)","text":"chatgpt, work, codex may share ui. only difference is the context (project, plugins etc)","title":"chatgpt, work, codex may share ui.","url":"https://mayphus.org/#x-2075320630992642416"},{"aliases":[],"id":"note:x-2075499189841330310","metadata":{"date":"2026-07-10","id":"x-2075499189841330310","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/2075499189841330310"}],"topic":"ideas","type":"note"},"summary":"Some people dislike GPT-5.6 and the “super app.” I think they’re amazing. Real engineers and users don’t spend all day judging models or comparing flaws—they use the tools to build something amazing. Extraordinary capability at a low cost, shared globally, is worth appreciating.","text":"Some people dislike GPT-5.6 and the “super app.” I think they’re amazing. Real engineers and users don’t spend all day judging models or comparing flaws—they use the tools to build something amazing. Extraordinary capability at a low cost, shared globally, is worth appreciating.","title":"Some people dislike GPT-5.6 and the “super app.” I think they’re amazing.","url":"https://mayphus.org/#x-2075499189841330310"},{"aliases":[],"id":"note:x-2075500227650613343","metadata":{"date":"2026-07-10","id":"x-2075500227650613343","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/2075500227650613343"}],"topic":"ideas","type":"note"},"summary":"I used ChatGPT Atlas as my main browser and loved it, even though it’s no longer maintained. But ChatGPT desktop doesn’t need to replace Chrome. My workflow now: Chrome for the web, ChatGPT desktop for intelligence, and the ChatGPT extension connecting them. It feels natural.","text":"I used ChatGPT Atlas as my main browser and loved it, even though it’s no longer maintained. But ChatGPT desktop doesn’t need to replace Chrome. My workflow now: Chrome for the web, ChatGPT desktop for intelligence, and the ChatGPT extension connecting them. It feels natural.","title":"I used ChatGPT Atlas as my main browser and loved it, even though it’s no longer…","url":"https://mayphus.org/#x-2075500227650613343"},{"aliases":[],"id":"note:x-2075974617450336676","metadata":{"date":"2026-07-12","id":"x-2075974617450336676","kind":"x","links":[{"label":"Source","url":"https://x.com/mayphustang/status/2075974617450336676"}],"topic":"ideas","type":"note"},"summary":"ChatGPT desktop quietly added passkey/password support to its in-app browser — something I’ve wanted for weeks.\n\nThis matters because I sign in to Google with a passkey. Now the in-app browser can handle it. One less reason to open Chrome, haha.","text":"ChatGPT desktop quietly added passkey/password support to its in-app browser — something I’ve wanted for weeks.\n\nThis matters because I sign in to Google with a passkey. Now the in-app browser can handle it. One less reason to open Chrome, haha.","title":"ChatGPT desktop quietly added passkey/password support to its in-app browser — something…","url":"https://mayphus.org/#x-2075974617450336676"},{"aliases":[],"id":"note:youtube--YcUGU2FZdU","metadata":{"date":"2026-06-22","id":"youtube--YcUGU2FZdU","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/watch?v=-YcUGU2FZdU"}],"topic":"making","type":"note"},"summary":"00:00 Broken TP-Link Camera Investigation Begins 00:43 Connecting UART Debug Interface 05:04 Using AI as a Hardware Repair Assistant 07:04 No Serial Output After Power-On 10:18 Checking Power Rails 15:49 Suspecting a Power Circuit Fault 18:07 Testing the USB-TTL Adapter 20:11 UART Loopback Verification 23:07 Verifying 3.3V Logic Levels 27:21 Reconnecting UART Lines 28:01 Second Boot Attempt 32:39 Searching for Camera Hardware Information 34:00 Why the Camera Probably Isn't Booting 35:03 Wrap-Up & Future Investigation","text":"00:00 Broken TP-Link Camera Investigation Begins 00:43 Connecting UART Debug Interface 05:04 Using AI as a Hardware Repair Assistant 07:04 No Serial Output After Power-On 10:18 Checking Power Rails 15:49 Suspecting a Power Circuit Fault 18:07 Testing the USB-TTL Adapter 20:11 UART Loopback Verification 23:07 Verifying 3.3V Logic Levels 27:21 Reconnecting UART Lines 28:01 Second Boot Attempt 32:39 Searching for Camera Hardware Information 34:00 Why the Camera Probably Isn't Booting 35:03 Wrap-Up & Future Investigation","title":"Just investigate 3 broken TP-Link Security Camera #2","url":"https://mayphus.org/#youtube--YcUGU2FZdU"},{"aliases":[],"id":"note:youtube-1u-ys0MvMII","metadata":{"date":"2026-06-10","id":"youtube-1u-ys0MvMII","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/watch?v=1u-ys0MvMII"}],"topic":"ideas","type":"note"},"summary":"First Live explain and test.","text":"First Live explain and test.","title":"Building mayphus.org Live #1","url":"https://mayphus.org/#youtube-1u-ys0MvMII"},{"aliases":[],"id":"note:youtube-3huYzxx3eE0","metadata":{"date":"2024-12-12","id":"youtube-3huYzxx3eE0","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/watch?v=3huYzxx3eE0"}],"topic":"making","type":"note"},"summary":"A YouTube video.","text":"A YouTube video.","title":"I am trying to repair my stuck MacBook key","url":"https://mayphus.org/#youtube-3huYzxx3eE0"},{"aliases":[],"id":"note:youtube-6ChZ9bJYgQw","metadata":{"date":"2024-07-14","id":"youtube-6ChZ9bJYgQw","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/6ChZ9bJYgQw"}],"topic":"making","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"unsoldering my electric components from failed PCB board. #pcb","url":"https://mayphus.org/#youtube-6ChZ9bJYgQw"},{"aliases":[],"id":"note:youtube-89UrjrXWJ8Q","metadata":{"date":"2024-03-30","id":"youtube-89UrjrXWJ8Q","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/89UrjrXWJ8Q"}],"topic":"life","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"Lazy cat, busy weekend. #cat #weekend #wfh","url":"https://mayphus.org/#youtube-89UrjrXWJ8Q"},{"aliases":[],"id":"note:youtube-8vTtWEZZcwM","metadata":{"date":"2026-06-12","id":"youtube-8vTtWEZZcwM","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/8vTtWEZZcwM"}],"topic":"life","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"June 12, 2026","url":"https://mayphus.org/#youtube-8vTtWEZZcwM"},{"aliases":[],"id":"note:youtube-EX4-KdCL83s","metadata":{"date":"2024-12-12","id":"youtube-EX4-KdCL83s","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/EX4-KdCL83s"}],"topic":"making","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"Repair my stuck MacBook key, easy but need practice and patience #macrepair #techrepair #diy","url":"https://mayphus.org/#youtube-EX4-KdCL83s"},{"aliases":[],"id":"note:youtube-EXk1gPWJxCI","metadata":{"date":"2026-06-22","id":"youtube-EXk1gPWJxCI","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/watch?v=EXk1gPWJxCI"}],"topic":"making","type":"note"},"summary":"I bought this broken TP-Link security camera for about $1 to learn how it is built.","text":"I bought this broken TP-Link security camera for about $1 to learn how it is built.","title":"Inside a broken TP-Link security camera","url":"https://mayphus.org/#youtube-EXk1gPWJxCI"},{"aliases":[],"id":"note:youtube-GsmcwxP73X4","metadata":{"date":"2024-07-17","id":"youtube-GsmcwxP73X4","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/GsmcwxP73X4"}],"topic":"making","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"My Macropad finally works. 😂 It’s my first self-designed #pcb Exciting","url":"https://mayphus.org/#youtube-GsmcwxP73X4"},{"aliases":[],"id":"note:youtube-HbfNagCcP30","metadata":{"date":"2026-07-02","id":"youtube-HbfNagCcP30","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/watch?v=HbfNagCcP30"}],"topic":"making","type":"note"},"summary":"Today I'm reorganizing my infrastructure page. I realized that my website should explain my Kubernetes cluster, Podman containers, KVM virtual machines, and network visually instead of hiding everything behind text. This livestream is me refining both the website and the idea.","text":"Today I'm reorganizing my infrastructure page. I realized that my website should explain my Kubernetes cluster, Podman containers, KVM virtual machines, and network visually instead of hiding everything behind text. This livestream is me refining both the website and the idea.","title":"Building mayphus.org Live #2","url":"https://mayphus.org/#youtube-HbfNagCcP30"},{"aliases":[],"id":"note:youtube-IXCtMfwpRFA","metadata":{"date":"2026-06-25","id":"youtube-IXCtMfwpRFA","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/IXCtMfwpRFA"}],"topic":"life","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"June 25, 2026","url":"https://mayphus.org/#youtube-IXCtMfwpRFA"},{"aliases":[],"id":"note:youtube-I_4XUxoQU2o","metadata":{"date":"2026-06-25","id":"youtube-I_4XUxoQU2o","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/I_4XUxoQU2o"}],"topic":"life","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"June 25, 2026","url":"https://mayphus.org/#youtube-I_4XUxoQU2o"},{"aliases":[],"id":"note:youtube-O7I_83FCYAo","metadata":{"date":"2024-03-07","id":"youtube-O7I_83FCYAo","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/O7I_83FCYAo"}],"topic":"life","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"My cat snores","url":"https://mayphus.org/#youtube-O7I_83FCYAo"},{"aliases":[],"id":"note:youtube-Qxc-CAhHgt0","metadata":{"date":"2024-12-01","id":"youtube-Qxc-CAhHgt0","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/Qxc-CAhHgt0"}],"topic":"making","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"destroyed my wife’s mirror. Fixing it now. Replaced bad battery #fix #mirror #diy #diyrepair","url":"https://mayphus.org/#youtube-Qxc-CAhHgt0"},{"aliases":[],"id":"note:youtube-RqshwcfTM7g","metadata":{"date":"2025-01-19","id":"youtube-RqshwcfTM7g","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/RqshwcfTM7g"}],"topic":"making","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"I made a minimal ESP32-S3 PCB with just USB-C and an AMS1117. It just works. #diy #esp32","url":"https://mayphus.org/#youtube-RqshwcfTM7g"},{"aliases":[],"id":"note:youtube-Rz1yJOCcIoo","metadata":{"date":"2024-12-25","id":"youtube-Rz1yJOCcIoo","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/Rz1yJOCcIoo"}],"topic":"making","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"I tear down my electric cervical neck massager #teardown #massager #diy","url":"https://mayphus.org/#youtube-Rz1yJOCcIoo"},{"aliases":[],"id":"note:youtube-S6_gNHbb9Xg","metadata":{"date":"2024-12-25","id":"youtube-S6_gNHbb9Xg","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/watch?v=S6_gNHbb9Xg"}],"topic":"ideas","type":"note"},"summary":"A YouTube video.","text":"A YouTube video.","title":"I tear down my electric cervical neck massager","url":"https://mayphus.org/#youtube-S6_gNHbb9Xg"},{"aliases":[],"id":"note:youtube-SvGFxFLjiN0","metadata":{"date":"2025-01-16","id":"youtube-SvGFxFLjiN0","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/SvGFxFLjiN0"}],"topic":"making","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"Soldering my ESP32 #soldering #electronics #esp32","url":"https://mayphus.org/#youtube-SvGFxFLjiN0"},{"aliases":[],"id":"note:youtube-V92c8z3qO50","metadata":{"date":"2025-01-16","id":"youtube-V92c8z3qO50","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/watch?v=V92c8z3qO50"}],"topic":"making","type":"note"},"summary":"I attempted to design a minimal PCB for the ESP32, but it seems to have some issues—possibly related to power delivery or the EN pin. However, I’m glad to see my soldering skills haven’t gotten rusty! I successfully soldered a USB-C connector using just a soldering iron and used a heat station for the first time to solder the ESP32 chip itself. The results were fantastic. #diy #sold #soldering #solderingiron #esp32","text":"I attempted to design a minimal PCB for the ESP32, but it seems to have some issues—possibly related to power delivery or the EN pin. However, I’m glad to see my soldering skills haven’t gotten rusty! I successfully soldered a USB-C connector using just a soldering iron and used a heat station for the first time to solder the ESP32 chip itself. The results were fantastic. #diy #sold #soldering #solderingiron #esp32","title":"Soldering an ESP32 PCB: Showcasing Skills Despite a Design Flaw","url":"https://mayphus.org/#youtube-V92c8z3qO50"},{"aliases":[],"id":"note:youtube-XTB2Pm89kHs","metadata":{"date":"2026-06-29","id":"youtube-XTB2Pm89kHs","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/XTB2Pm89kHs"}],"topic":"life","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"June 29, 2026","url":"https://mayphus.org/#youtube-XTB2Pm89kHs"},{"aliases":[],"id":"note:youtube-Xxb1FfHzyvk","metadata":{"date":"2024-12-31","id":"youtube-Xxb1FfHzyvk","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/Xxb1FfHzyvk"}],"topic":"making","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"Booting my new Raspberry Pi Zero 2 W. What should I make? #raspberrypizero #diy #rpizero","url":"https://mayphus.org/#youtube-Xxb1FfHzyvk"},{"aliases":[],"id":"note:youtube-YWOTB8w0MBc","metadata":{"date":"2024-07-15","id":"youtube-YWOTB8w0MBc","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/YWOTB8w0MBc"}],"topic":"ideas","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"3D printed morel mushrooms #morelmushrooms #3dprinting","url":"https://mayphus.org/#youtube-YWOTB8w0MBc"},{"aliases":[],"id":"note:youtube-_-CID8EABeM","metadata":{"date":"2026-06-12","id":"youtube-_-CID8EABeM","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/_-CID8EABeM"}],"topic":"life","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"Today I learned how to flip an egg pancake in a pan","url":"https://mayphus.org/#youtube-_-CID8EABeM"},{"aliases":[],"id":"note:youtube-bEgjF6DybFY","metadata":{"date":"2026-06-09","id":"youtube-bEgjF6DybFY","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/bEgjF6DybFY"}],"topic":"life","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"June 10, 2026","url":"https://mayphus.org/#youtube-bEgjF6DybFY"},{"aliases":[],"id":"note:youtube-bKNWYqZoGB4","metadata":{"date":"2025-01-02","id":"youtube-bKNWYqZoGB4","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/bKNWYqZoGB4"}],"topic":"making","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"Simulated #starwars opening crawl by using a small OLED screen. #diy","url":"https://mayphus.org/#youtube-bKNWYqZoGB4"},{"aliases":[],"id":"note:youtube-ctq6cGv6m04","metadata":{"date":"2026-06-21","id":"youtube-ctq6cGv6m04","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/watch?v=ctq6cGv6m04"}],"topic":"making","type":"note"},"summary":"Investigating 3 broken TP-Link security cameras bought for about $1 each.","text":"Investigating 3 broken TP-Link security cameras bought for about $1 each.","title":"Just investigate 3 broken TP-Link Security Camera","url":"https://mayphus.org/#youtube-ctq6cGv6m04"},{"aliases":[],"id":"note:youtube-eE51821kRh0","metadata":{"date":"2024-03-30","id":"youtube-eE51821kRh0","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/eE51821kRh0"}],"topic":"life","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"Making Century Egg. Warping lime now, then wait for the magic of time. #centuryegg #chinesefood","url":"https://mayphus.org/#youtube-eE51821kRh0"},{"aliases":[],"id":"note:youtube-ebVWS3-dCfU","metadata":{"date":"2026-06-25","id":"youtube-ebVWS3-dCfU","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/ebVWS3-dCfU"}],"topic":"life","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"February 11, 2026","url":"https://mayphus.org/#youtube-ebVWS3-dCfU"},{"aliases":[],"id":"note:youtube-fa3i7ljPgcM","metadata":{"date":"2024-07-12","id":"youtube-fa3i7ljPgcM","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/fa3i7ljPgcM"}],"topic":"making","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"PCB soldering #maker #pcb","url":"https://mayphus.org/#youtube-fa3i7ljPgcM"},{"aliases":[],"id":"note:youtube-klVVGc1qJgg","metadata":{"date":"2024-07-14","id":"youtube-klVVGc1qJgg","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/watch?v=klVVGc1qJgg"}],"topic":"making","type":"note"},"summary":"In this video, I'm desoldering components from my first self-designed PCB - a basic RP2040 minimal design. Although the design didn't work as intended, it marks an important milestone in my maker journey. Watch as I carefully remove components from this failed PCB, demonstrating proper desoldering techniques.","text":"In this video, I'm desoldering components from my first self-designed PCB - a basic RP2040 minimal design. Although the design didn't work as intended, it marks an important milestone in my maker journey. Watch as I carefully remove components from this failed PCB, demonstrating proper desoldering techniques.","title":"Desoldering My First Failed PCB Design: RP2040 Board Teardown","url":"https://mayphus.org/#youtube-klVVGc1qJgg"},{"aliases":[],"id":"note:youtube-n6fECoZxHFk","metadata":{"date":"2026-06-27","id":"youtube-n6fECoZxHFk","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/watch?v=n6fECoZxHFk"}],"topic":"ideas","type":"note"},"summary":"This children’s electronic learning book stopped working.","text":"This children’s electronic learning book stopped working.","title":"Look inside a Toddler's Electronic Learning Book","url":"https://mayphus.org/#youtube-n6fECoZxHFk"},{"aliases":[],"id":"note:youtube-nOj_lqMfsdw","metadata":{"date":"2026-05-29","id":"youtube-nOj_lqMfsdw","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/watch?v=nOj_lqMfsdw"}],"topic":"making","type":"note"},"summary":"This is a complete visual walkthrough of a massive matrix grid UI designed to browse every single character space across all 17 Unicode planes (Planes 0 to 16). https://mayphus.org/unicode/ do you like it?","text":"This is a complete visual walkthrough of a massive matrix grid UI designed to browse every single character space across all 17 Unicode planes (Planes 0 to 16). https://mayphus.org/unicode/ do you like it?","title":"Visualizing Every Unicode Character (Plane 0 to 16)","url":"https://mayphus.org/#youtube-nOj_lqMfsdw"},{"aliases":[],"id":"note:youtube-oqr4c7GJIMU","metadata":{"date":"2026-07-01","id":"youtube-oqr4c7GJIMU","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/watch?v=oqr4c7GJIMU"}],"topic":"ideas","type":"note"},"summary":"A YouTube livestream or video.","text":"A YouTube livestream or video.","title":"Live to do something","url":"https://mayphus.org/#youtube-oqr4c7GJIMU"},{"aliases":[],"id":"note:youtube-pOhlAyIMJH8","metadata":{"date":"2025-01-08","id":"youtube-pOhlAyIMJH8","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/pOhlAyIMJH8"}],"topic":"making","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"I DIY a mini desk monitor. Just a screen currently, more features will be added. #diyprojects","url":"https://mayphus.org/#youtube-pOhlAyIMJH8"},{"aliases":[],"id":"note:youtube-ru_nltH8csU","metadata":{"date":"2025-01-05","id":"youtube-ru_nltH8csU","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/ru_nltH8csU"}],"topic":"making","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"Boring game with accelerometer #diy #diygames #raspberrypizero #mpu6050 #tftdisplay #circuitpython","url":"https://mayphus.org/#youtube-ru_nltH8csU"},{"aliases":[],"id":"note:youtube-sVGy1DCey8Y","metadata":{"date":"2024-06-30","id":"youtube-sVGy1DCey8Y","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/sVGy1DCey8Y"}],"topic":"making","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"Generating keycaps with my 3D printer","url":"https://mayphus.org/#youtube-sVGy1DCey8Y"},{"aliases":[],"id":"note:youtube-uMt7Fv18aU8","metadata":{"date":"2024-07-12","id":"youtube-uMt7Fv18aU8","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/uMt7Fv18aU8"}],"topic":"life","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"my wife’s gift. #sewingmachine 11 pm still happy working","url":"https://mayphus.org/#youtube-uMt7Fv18aU8"},{"aliases":[],"id":"note:youtube-uz9yUaEU5HA","metadata":{"date":"2025-01-21","id":"youtube-uz9yUaEU5HA","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/uz9yUaEU5HA"}],"topic":"making","type":"note"},"summary":"This board follows the official RP2040 minimal hardware design from Raspberry Pi.","text":"This board follows the official RP2040 minimal hardware design from Raspberry Pi.","title":"I implemented RP2040 official minimal design. #rp2040 #raspberrypi #raspberrypipico  #soldering #diy","url":"https://mayphus.org/#youtube-uz9yUaEU5HA"},{"aliases":[],"id":"note:youtube-vjCi8doRJLY","metadata":{"date":"2024-03-26","id":"youtube-vjCi8doRJLY","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/vjCi8doRJLY"}],"topic":"ideas","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"Chinese launch, tomato, eggs and rice. Eat with my big spoon. So delicious. #chinesefood #wfh","url":"https://mayphus.org/#youtube-vjCi8doRJLY"},{"aliases":[],"id":"note:youtube-volOJQ8SNNI","metadata":{"date":"2026-06-12","id":"youtube-volOJQ8SNNI","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/watch?v=volOJQ8SNNI"}],"topic":"making","type":"note"},"summary":"A YouTube livestream.","text":"A YouTube livestream.","title":"Nano Pi teardown","url":"https://mayphus.org/#youtube-volOJQ8SNNI"},{"aliases":[],"id":"note:youtube-w3kcWYbPogo","metadata":{"date":"2026-06-11","id":"youtube-w3kcWYbPogo","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/w3kcWYbPogo"}],"topic":"life","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"June 11, 2026","url":"https://mayphus.org/#youtube-w3kcWYbPogo"},{"aliases":[],"id":"note:youtube-x7MJIDOONNk","metadata":{"date":"2026-06-30","id":"youtube-x7MJIDOONNk","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/watch?v=x7MJIDOONNk"}],"topic":"making","type":"note"},"summary":"My Roku Remote voice feature don't works weeks ago, and today all buttons don't works. So I decide to teardown and see what is inside. After teardown and try again. it works. I think it's battery case has issue? And voice feature continue don't works. I don't see any water or possible visual broken. So wait for next time to investigate.","text":"My Roku Remote voice feature don't works weeks ago, and today all buttons don't works. So I decide to teardown and see what is inside. After teardown and try again. it works. I think it's battery case has issue? And voice feature continue don't works. I don't see any water or possible visual broken. So wait for next time to investigate.","title":"Looks inside Roku Remote","url":"https://mayphus.org/#youtube-x7MJIDOONNk"},{"aliases":[],"id":"note:youtube-xP7njwecE6Q","metadata":{"date":"2026-06-25","id":"youtube-xP7njwecE6Q","kind":"youtube","links":[{"label":"Source","url":"https://www.youtube.com/shorts/xP7njwecE6Q"}],"topic":"life","type":"note"},"summary":"A YouTube Short.","text":"A YouTube Short.","title":"February 10, 2026","url":"https://mayphus.org/#youtube-xP7njwecE6Q"},{"aliases":["article:a-tiny-freebsd-jail-doc-fix"],"id":"page:/a-tiny-freebsd-jail-doc-fix/","metadata":{"date":"2026-05-29T00:00:00Z","kind":"article","language":"en","locale":"en","route":"/a-tiny-freebsd-jail-doc-fix/","slug":"a-tiny-freebsd-jail-doc-fix","tags":["freebsd","jails","docs"],"type":"article"},"summary":"A short note on fixing relative symlinks in the FreeBSD Handbook's NullFS thin-jail recipe.","text":"A tiny FreeBSD jail doc fix\n\nI made a small FreeBSD Handbook patch for the NullFS thin-jail recipe. It is not a big patch, but it fixes a real footgun: after following the documented layout, some relative symlinks inside the jail point at the wrong tree.\n \nThe thin-jail setup splits a reusable base from a per-jail skeleton. That is the useful part: most of the release can be shared, while local state lives in the skeleton. The problem appears when files moved into the skeleton still contain relative symlinks that were written for the normal FreeBSD filesystem layout.\n \nOne example is under /etc/ssl/certs . Certificate links can point toward paths like:\n\n../../../usr/share/certs/...\n\nIn a normal system that is fine. In the thin-jail skeleton, the path is resolved from inside /skeleton/etc/ssl/certs , so it lands under:\n\n/skeleton/usr/share/...\n\nBut the shared files are really in /usr/share , not /skeleton/usr/share . The result is a jail that looks mostly correct but has broken certificate links, which can make basic things like package bootstrapping fail.\n \nMy patch does not rewrite all of those links. Instead it adds small bridge symlinks inside the skeleton:\n\ncd /usr/local/jails/templates/...-RELEASE-skeleton/usr\nln -s ../../usr/share share\nln -s ../../usr/sbin sbin\n\nThat makes /skeleton/usr/share resolve back to the shared base /usr/share , so existing relative links keep working. The sbin link covers the same class of problem for paths such as /etc/rmt .\n \nThis is the kind of fix I like: small, boring, and close to the failure. Documentation commands are code too. If someone copies a Handbook recipe exactly, the result should be a working jail.","title":"A tiny FreeBSD jail doc fix","url":"https://mayphus.org/a-tiny-freebsd-jail-doc-fix/"},{"aliases":[],"id":"page:/agents/","metadata":{"kind":"page","language":"en","route":"/agents/","type":"page"},"summary":"Public, read-only capabilities and connection details for AI agents using Mayphus.","text":"For agents\n\nSearch the full published text, read a canonical document, and follow its sources. The website, plain text, HTTP API, and MCP gateway share the same public content.\n\nRead directly\n \nNo connection is needed for these ordinary HTTP requests. Search returns stable IDs and excerpts; reading returns full text, a citation URL, and metadata.\n\nGET /api/search?q=bootstrapping\nGET /api/document?url=/a-tiny-freebsd-jail-doc-fix/\n\nComplete public document corpus (https://mayphus.org/documents.json) · Plain-text example (https://mayphus.org/a-tiny-freebsd-jail-doc-fix/index.txt) \n\nPUBLIC · READ ONLY \nOne gateway\n \nConnect explicitly to the public MCP server. It exposes published material and bounded tools; it does not grant access to private site areas or change site content.\n \n https://mayphus.org/mcp (https://mayphus.org/mcp) \nNothing here silently installs or connects an agent. A person or developer chooses to add this endpoint. In supported browsers, each public page also registers these same read-only tools through WebMCP for the browser's agent.\n\nCapabilities\n \nSix small public capabilities, described once and shared by this page, JSON, and MCP.\n\n- \n\nDiscover public work\n PUBLIC · READ ONLY \n \nList the public capabilities, projects, and pages that Mayphus has chosen to share.\n\nHuman\n \n/agents/ (https://mayphus.org/agents/) \n\nAPI\n\n- /api/capabilities (https://mayphus.org/api/capabilities) \n\n- /api/projects (https://mayphus.org/api/projects) \n \n- /api/pages (https://mayphus.org/api/pages) \n\nMCP\n\n- discover_capabilities \n\n- discover_projects \n\n- \n\nSearch public knowledge\n PUBLIC · READ ONLY \n \nSearch the full published text of pages, projects, articles, notes, and capabilities, with excerpts and canonical citation URLs.\n\nHuman\n \n/ (https://mayphus.org/) \n\nAPI\n\n- /api/search (https://mayphus.org/api/search) \n\nMCP\n\n- search \n\n- \n\nFetch a public record\n PUBLIC · READ ONLY \n \nRead a public document by stable identifier or canonical URL, including its full text and source metadata.\n\nHuman\n \n/agents/ (https://mayphus.org/agents/) \n\nAPI\n\n- /api/document (https://mayphus.org/api/document) \n\nMCP\n\n- fetch \n\n- get_project \n\n- \n\nFollow public updates\n PUBLIC · READ ONLY \n \nRead recent public articles and notes without inferring private activity.\n\nHuman\n \n/ (https://mayphus.org/) \n\nAPI\n\n- /api/updates (https://mayphus.org/api/updates) \n\n- /api/notes (https://mayphus.org/api/notes) \n\nMCP\n\n- get_public_updates \n\n- \n\nGenerate a city map\n PUBLIC · READ ONLY \n \nTurn a bounded city-and-topic request into a public OpenStreetMap-based result without changing server state.\n\nHuman\n \n/map/ (https://mayphus.org/map/) \n\nAPI\n\n- /api/map (https://mayphus.org/api/map) \n\nMCP\n\n- generate_city_map \n\n- \n\nRead the public profile\n PUBLIC · READ ONLY \n \nRetrieve Mayphus Tang's deliberately published profile, names, links, and selected work.\n\nHuman\n \n/profile/ (https://mayphus.org/profile/) \n\nAPI\n\n- /api/profile (https://mayphus.org/api/profile) \n\n- /api/identity (https://mayphus.org/api/identity) \n\nMCP\n\n- search \n\n- fetch \n\nConnect\n \nKeep tool approval enabled when trying a new remote MCP server, even when its published tools are read-only.\n\nChatGPT\n \nCreate a custom MCP app or connector and use this server URL.\n\nhttps://mayphus.org/mcp\n\nCodex\n \nAdd this remote server to the Codex MCP configuration.\n\n[mcp_servers.mayphus]\nurl = \"https://mayphus.org/mcp\"\n\nResponses API\n \nPlace this object in the request's tools array.\n\n{\n  \"type\": \"mcp\",\n  \"server_label\": \"mayphus\",\n  \"server_url\": \"https://mayphus.org/mcp\",\n  \"require_approval\": \"always\"\n}\n\nPublic discovery\n \nThese indexes are ordinary public files. They make the site easier to inspect, cite, and reuse, but they are not an automatic authorization mechanism.\n\n- llms.txt (https://mayphus.org/llms.txt) — compact public reading guide\n\n- ai.json (https://mayphus.org/ai.json) — structured public site index\n \n- capabilities (https://mayphus.org/api/capabilities) — stable capability records\n \n- notes (https://mayphus.org/api/notes) — public non-todo notes\n \n- site manifest (https://mayphus.org/api/sites/v1/manifest.json) — canonical discovery URLs\n \n- RSS (https://mayphus.org/rss.xml) and sitemap (https://mayphus.org/sitemap.xml) — public change and route feeds","title":"For agents","url":"https://mayphus.org/agents/"},{"aliases":[],"id":"capability:city-map","metadata":{"api_urls":["https://mayphus.org/api/map"],"human_url":"https://mayphus.org/map/","id":"city-map","mcp_tools":["generate_city_map"],"status":"public-read-only","type":"capability"},"summary":"Turn a bounded city-and-topic request into a public OpenStreetMap-based result without changing server state.","text":"Turn a bounded city-and-topic request into a public OpenStreetMap-based result without changing server state.","title":"Generate a city map","url":"https://mayphus.org/agents/#city-map"},{"aliases":[],"id":"capability:public-discovery","metadata":{"api_urls":["https://mayphus.org/api/capabilities","https://mayphus.org/api/projects","https://mayphus.org/api/pages"],"human_url":"https://mayphus.org/agents/","id":"public-discovery","mcp_tools":["discover_capabilities","discover_projects"],"status":"public-read-only","type":"capability"},"summary":"List the public capabilities, projects, and pages that Mayphus has chosen to share.","text":"List the public capabilities, projects, and pages that Mayphus has chosen to share.","title":"Discover public work","url":"https://mayphus.org/agents/#public-discovery"},{"aliases":[],"id":"capability:public-fetch","metadata":{"api_urls":["https://mayphus.org/api/document"],"human_url":"https://mayphus.org/agents/","id":"public-fetch","mcp_tools":["fetch","get_project"],"status":"public-read-only","type":"capability"},"summary":"Read a public document by stable identifier or canonical URL, including its full text and source metadata.","text":"Read a public document by stable identifier or canonical URL, including its full text and source metadata.","title":"Fetch a public record","url":"https://mayphus.org/agents/#public-fetch"},{"aliases":[],"id":"capability:public-profile","metadata":{"api_urls":["https://mayphus.org/api/profile","https://mayphus.org/api/identity"],"human_url":"https://mayphus.org/profile/","id":"public-profile","mcp_tools":["search","fetch"],"status":"public-read-only","type":"capability"},"summary":"Retrieve Mayphus Tang's deliberately published profile, names, links, and selected work.","text":"Retrieve Mayphus Tang's deliberately published profile, names, links, and selected work.","title":"Read the public profile","url":"https://mayphus.org/agents/#public-profile"},{"aliases":[],"id":"capability:public-search","metadata":{"api_urls":["https://mayphus.org/api/search"],"human_url":"https://mayphus.org/","id":"public-search","mcp_tools":["search"],"status":"public-read-only","type":"capability"},"summary":"Search the full published text of pages, projects, articles, notes, and capabilities, with excerpts and canonical citation URLs.","text":"Search the full published text of pages, projects, articles, notes, and capabilities, with excerpts and canonical citation URLs.","title":"Search public knowledge","url":"https://mayphus.org/agents/#public-search"},{"aliases":[],"id":"capability:public-updates","metadata":{"api_urls":["https://mayphus.org/api/updates","https://mayphus.org/api/notes"],"human_url":"https://mayphus.org/","id":"public-updates","mcp_tools":["get_public_updates"],"status":"public-read-only","type":"capability"},"summary":"Read recent public articles and notes without inferring private activity.","text":"Read recent public articles and notes without inferring private activity.","title":"Follow public updates","url":"https://mayphus.org/agents/#public-updates"},{"aliases":["project:ai-native-website-interfaces"],"id":"page:/ai-native-website-interfaces/","metadata":{"category":"note","id":"ai-native-website-interfaces","kind":"artifact","language":"en","route":"/ai-native-website-interfaces/","tags":["ai","interfaces","agents","web"],"type":"project"},"summary":"An evolving proposal for websites built around AI-readable investigation objects, with the human interface as one view.","text":"AI-native website interfaces\n\nEvolving proposal · 26 July 2026\n \nThe better interface is not a chatbot added to a conventional page. It is a website whose underlying work is directly readable by people and AI agents.\n\nQuestion\n \nWhat should a website become when people and AI agents are both first-class readers?\n\nCore idea\n \nCurrent answer\n \nMake the durable unit an AI-readable investigation object. The human interface is one view of that object—not the object itself.\n \nThe object should expose claims, evidence, relationships, confidence, work state, and possible actions directly. An agent can then inspect or extend the work without reverse-engineering a screen.\n\nWhy it matters\n \nEvidence · working observations, not benchmark results\n \nA conventional web interface hides meaning behind interaction choreography. An agent must translate intent into menus, tabs, clicks, and playback steps, then translate the resulting screen back into state.\n \nintent menu tab click playback extract \n\n- Menus and tabs delay access to relationships until the right control is found.\n\n- Click sequences encode procedure, but rarely expose why each step matters.\n \n- Video-only evidence adds seek, playback, and transcription before claims can be compared.\n\nHow the parts relate\n \nMap / relationships\n\n- INPUT Question + evidence The material being investigated and the provenance behind it. \n\n- DURABLE CORE Investigation object Claims · relations · confidence · work state · actions \n \n- VIEWS Human page + agent context Different interfaces reading the same source of meaning. \n\nA chatbot may be one view, but it is not the architecture.\n\nOne source of meaning can support a calm reading page for people, compact structured context for agents, and other interfaces later.\n\nWork state\n\nVerified\n \nThis proposal exposes its six parts as named semantic sections, with state labels that do not depend on color.\n\nUncertain\n \nThe shared schema, permission model, and best balance between machine detail and human calm still need testing.\n\nA practical next step\n \nNext actions\n\n- Define a small public schema for the investigation object.\n\n- Apply it to one real investigation, with claim-level provenance.\n \n- Compare clicks, tool calls, time, and recovery against the current page.\n \n- Revise this answer when the evidence changes.","title":"AI-native website interfaces","url":"https://mayphus.org/ai-native-website-interfaces/"},{"aliases":["project:ai-workflow","article:ai-workflow"],"id":"page:/ai-workflow/","metadata":{"category":"note","date":"2026-07-16T02:42:23Z","id":"ai-workflow","kind":"article","language":"en","locale":"en","route":"/ai-workflow/","slug":"ai-workflow","tags":["ai","workflow","codex"],"type":"article"},"summary":"A short explanation of how I use ChatGPT, Codex, Git, and Mayphus as one practical workflow.","text":"How I work with AI\n\nI use ChatGPT Desktop as the command center for thinking, investigating, creating, and operating systems. AI is the interface; the durable result stays in files, Git history, and Mayphus.\n \nWhat enters the system\n\nMost work can begin with voice. I can talk while walking, caring for my daughter, or working on hardware. ChatGPT helps turn an unfinished thought into a question, a decision, a note, or a bounded task without waiting for a formal writing session.1 (https://mayphus.org/ai-workflow/#footnote-1)  \n \n Engineering in parenting moments (https://mayphus.org/#engineering-in-parenting-moments) ↩ (https://mayphus.org/ai-workflow/#reference-1) \n\nUsing Codex on a phone while walking beside my young daughter. \nWorking through a website change on my phone while walking with my daughter.\n\n- For investigation, AI browses sources, compares evidence, and challenges assumptions before producing a useful conclusion.\n\n- For physical experiments, voice, photos, and YouTube livestreams capture what really happened. AI can help identify parts, record questions, and turn the session into an article or repair note.2 (https://mayphus.org/ai-workflow/#footnote-2)  \n \n- For software and operations, Codex uses the repository, terminal, and tests to change the actual system.\n\n ChatGPT camera investigation workflow (https://mayphus.org/#chatgpt-camera-investigation-workflow) ↩ (https://mayphus.org/ai-workflow/#reference-2) \n\nA livestream is therefore more than content. It is a record of real-world exploration that can later become searchable knowledge.\n \nThe flow\n\n- Voice, video, questions \n\n- ChatGPT Desktop \n \n- Investigation or task \n \n- Codex \n \n- Git \n \n- Mayphus \n\nChatGPT is where I direct the work. The browser gathers evidence, Codex makes and verifies changes, Git records what actually exists, and Mayphus preserves and publishes the useful result. These tools matter, but none of them needs to be the center on its own.3 (https://mayphus.org/ai-workflow/#footnote-3)  \n \n ChatGPT Desktop as an AI superapp (https://mayphus.org/#ai-super-app) ↩ (https://mayphus.org/ai-workflow/#reference-3) \n\nWhat remains my responsibility\n \nAI can choose local implementation details. I keep responsibility for purpose, public and private boundaries, acceptable complexity, and the definition of done. This keeps separate AI sessions moving in the same direction.\n \nMy operating rules\n\n- One task should produce one clear, reviewable outcome.4 (https://mayphus.org/ai-workflow/#footnote-4)  \n\n- Important claims need evidence; every change needs verification.\n \n- Repeated instructions become repository guidance or a reusable skill.\n \n- Each completed task should leave the system easier to understand.\n\n Concrete before abstraction (https://mayphus.org/#concrete-before-abstraction) ↩ (https://mayphus.org/ai-workflow/#reference-4) \n\nThe conversation is temporary. The artifacts are the source of truth.","title":"How I work with AI","url":"https://mayphus.org/ai-workflow/"},{"aliases":["project:alpine-builder"],"id":"page:/alpine-builder/","metadata":{"category":"tool","id":"alpine-builder","kind":"tool","language":"en","route":"/alpine-builder/","tags":["alpine","nanopi","images"],"type":"project"},"summary":"FriendlyElec and NanoPi Alpine image builder web UI for rootfs and SD-card builds.","text":"Build Alpine images for NanoPi boards\n\nA small build system for turning Alpine Linux packages into repeatable root filesystems and bootable NanoPi images.\n\nWhy this builder exists\n \nPreparing a small ARM board is more than copying files to an SD card. The root filesystem, board architecture, partition layout, boot files, and first-boot configuration all need to agree. A manual build can work once and still be difficult to reproduce later.\n \nThis tool keeps that process visible. Choose the output and board, inspect the service state, and keep the resulting artifacts attached to the build that produced them.\n\nservice idle \n \ncurrent job No build has been started in this service process. \n\nArtifacts\n \nRootfs archives and board images produced by the service.\n\n- Loading artifacts.\n\nFirst boot handoff\n \nKeep provisioning close to the board; do not depend on a network service just to deliver cloud-init data.\n\n- 1 Render seed \nracket main.rkt seed render \n\n- 2 Copy seed \nUse USB or local seed media.\n\n- 3 Boot board \nEthernet can wait for SSH and packages.\n\nBuild log\n \nOpen only when you need raw service output.\n\nNo build log yet.\n\nTwo outputs, two jobs\n \nA rootfs archive is the reusable Linux userspace: packages, configuration, and the filesystem tree that can be unpacked into another image or deployment process. An SD-card image adds the board-facing disk layout so it can be written directly to media and booted.\n \nThe board selector makes the hardware assumption explicit. The same Alpine userspace can target several Rockchip generations, but the final bootable image still has to match the NanoPi board that will run it.\n\nThe public surface stays bounded\n \nStatus, artifacts, and logs make the process understandable, but starting a build remains restricted. Image creation consumes trusted infrastructure and should not become anonymous public compute.\n \nFirst-boot seed handoff stays close to the board as well. Rendering and copying seed data locally means the new machine can establish its identity before it depends on network services, SSH, or package mirrors.","title":"Alpine Builder","url":"https://mayphus.org/alpine-builder/"},{"aliases":[],"id":"page:/baby-cards/","metadata":{"kind":"artifact","language":"en","route":"/baby-cards/","type":"page"},"summary":"Printable and generated learning-card experiments.","text":"Baby Cards\n\nPrintable and generated learning-card experiments.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Language Learning (https://mayphus.org/language-learning/) \n\nArchive state\n \nseed-stage old domain\n\nSource\n \n~/my.backup/0/baby-cards \n\nVisibility\n \npublic archive shell","title":"Baby Cards","url":"https://mayphus.org/baby-cards/"},{"aliases":[],"id":"page:/biology/","metadata":{"kind":"artifact","language":"en","route":"/biology/","type":"page"},"summary":"Cell-structure and DNA-strip SVG generators.","text":"Biology Diagrams\n\nCell-structure and DNA-strip SVG generators.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Science Lab (https://mayphus.org/science-lab/) \n\nArchive state\n \nunregistered archive project\n\nSource\n \n~/my.backup/0/biology \n\nVisibility\n \npublic archive shell","title":"Biology Diagrams","url":"https://mayphus.org/biology/"},{"aliases":[],"id":"page:/cad/","metadata":{"kind":"artifact","language":"en","route":"/cad/","type":"page"},"summary":"Racket-first CAD for mechanical ideas, shapes, parts, and manufacturable models.","text":"LambdaCAD\n\nRacket-first CAD for mechanical ideas, shapes, parts, and manufacturable models.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Hardware Lab (https://mayphus.org/hardware-lab/) \n\nArchive state\n \nactive old domain\n\nSource\n \n~/my.backup/0/cad \n\nVisibility\n \npublic archive shell","title":"LambdaCAD","url":"https://mayphus.org/cad/"},{"aliases":[],"id":"page:/calculus/","metadata":{"kind":"artifact","language":"en","route":"/calculus/","type":"page"},"summary":"Interactive calculus figures, exports, and TypeScript widgets.","text":"Calculus Visual Lab\n\nInteractive calculus figures, exports, and TypeScript widgets.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Math Lab (https://mayphus.org/math-lab/) \n\nArchive state\n \nunregistered archive project\n\nSource\n \n~/my.backup/0/calculus \n\nVisibility\n \npublic archive shell","title":"Calculus Visual Lab","url":"https://mayphus.org/calculus/"},{"aliases":[],"id":"page:/cangjie/","metadata":{"kind":"artifact","language":"en","route":"/cangjie/","type":"page"},"summary":"Visual exploration of Cangjie character structures.","text":"Cangjie Tree\n\nVisual exploration of Cangjie character structures.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n\nArchive state\n \nactive old domain\n\nSource\n \n~/my.backup/0/cangjie \n\nVisibility\n \npublic archive shell","title":"Cangjie Tree","url":"https://mayphus.org/cangjie/"},{"aliases":["project:cell-field"],"id":"page:/cell-field/","metadata":{"category":"artifact","id":"cell-field","kind":"artifact","language":"en","route":"/cell-field/","tags":["generative","cells","print"],"type":"project"},"summary":"A restored generative field of hand-drawn cellular forms, preserved for screen and print.","text":"Cell Field\n\nAn algorithmic drawing of irregular cellular forms: repeated, varied, densely packed, and preserved as both a screen image and a print-ready PDF.\n\nDense field of irregular generated cell forms \nGenerated with Racket drawing code from the recovered archive. Open print PDF (https://mayphus.org/cell-field/cells.pdf)","title":"Cell Field","url":"https://mayphus.org/cell-field/"},{"aliases":[],"id":"page:/chemistry/","metadata":{"kind":"artifact","language":"en","route":"/chemistry/","type":"page"},"summary":"Chemical formula parsing, element counts, tests, and a web interface.","text":"Chemistry\n\nChemical formula parsing, element counts, tests, and a web interface.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Science Lab (https://mayphus.org/science-lab/) \n\nArchive state\n \nunregistered archive project\n\nSource\n \n~/my.backup/0/chemistry \n\nVisibility\n \npublic archive shell","title":"Chemistry","url":"https://mayphus.org/chemistry/"},{"aliases":[],"id":"page:/chinese-zodiac/","metadata":{"kind":"artifact","language":"en","route":"/chinese-zodiac/","type":"page"},"summary":"Chinese zodiac generation and reference experiments.","text":"Chinese Zodiac\n\nChinese zodiac generation and reference experiments.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Chinese Calendar & Symbols (https://mayphus.org/chinese-culture/) \n\nArchive state\n \nseed-stage old domain\n\nSource\n \n~/my.backup/0/chinese-zodiac \n\nVisibility\n \npublic archive shell","title":"Chinese Zodiac","url":"https://mayphus.org/chinese-zodiac/"},{"aliases":[],"id":"page:/circuit-symbol-atlas/","metadata":{"kind":"artifact","language":"en","route":"/circuit-symbol-atlas/","type":"page"},"summary":"Printable atlas of electronic circuit symbols.","text":"Circuit Symbol Atlas\n\nPrintable atlas of electronic circuit symbols.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Hardware Lab (https://mayphus.org/hardware-lab/) \n\nArchive state\n \nunregistered archive project\n\nSource\n \n~/my.backup/0/circuit-symbol-atlas \n\nVisibility\n \npublic archive shell","title":"Circuit Symbol Atlas","url":"https://mayphus.org/circuit-symbol-atlas/"},{"aliases":[],"id":"page:/daily/","metadata":{"kind":"tool","language":"en","route":"/daily/","type":"page"},"summary":"Public browser-local daily tracker. Entries stay on the current device and are never uploaded.","text":"Daily\n \nRecord the day while it is still small · entries stay in this browser and are never uploaded\n\nPattern\n\nEntries\n 0 \n\nLatest weight\n - \n\n7 day sleep\n - \n\n Import    \n\nLast days\n \nLocal draft data stays in this browser.","title":"Daily","url":"https://mayphus.org/daily/"},{"aliases":[],"id":"page:/decision/","metadata":{"kind":"artifact","language":"en","route":"/decision/","type":"page"},"summary":"Decision modeling and comparison experiments.","text":"Decision\n\nDecision modeling and comparison experiments.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Math Lab (https://mayphus.org/math-lab/) \n\nArchive state\n \nseed-stage old domain\n\nSource\n \n~/my.backup/0/decision \n\nVisibility\n \npublic archive shell","title":"Decision","url":"https://mayphus.org/decision/"},{"aliases":[],"id":"page:/demo/","metadata":{"kind":"artifact","language":"en","route":"/demo/","type":"page"},"summary":"Inbox of small runnable demonstrations recovered from the archive.","text":"Demo\n\nInbox of small runnable demonstrations recovered from the archive.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Hardware Lab (https://mayphus.org/hardware-lab/) \n\nArchive state\n \ninbox experiment\n\nSource\n \n~/my.backup/0/demo \n\nVisibility\n \npublic archive shell","title":"Demo","url":"https://mayphus.org/demo/"},{"aliases":[],"id":"page:/diet/","metadata":{"kind":"artifact","language":"en","route":"/diet/","type":"page"},"summary":"Food, nutrition, and personal diet experiments; only a sanitized shell is public.","text":"Diet\n\nFood, nutrition, and personal diet experiments; only a sanitized shell is public.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n\nArchive state\n \nseed-stage old domain\n\nSource\n \n~/my.backup/0/diet \n\nVisibility\n \nsanitized public shell\n\nPrivate source data stays private \nOnly the project concept and migration status are exposed here. Personal records from the archived implementation were not copied into the public site.","title":"Diet","url":"https://mayphus.org/diet/"},{"aliases":[],"id":"page:/drones/","metadata":{"kind":"artifact","language":"en","route":"/drones/","type":"page"},"summary":"Declarative drone choreography, simulation, safety checks, and show export.","text":"Drone Performance\n\nDeclarative drone choreography, simulation, safety checks, and show export.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Performance Studio (https://mayphus.org/performance-studio/) \n\nArchive state\n \nseed-stage old domain\n\nSource\n \n~/my.backup/0/drones \n\nVisibility\n \npublic archive shell","title":"Drone Performance","url":"https://mayphus.org/drones/"},{"aliases":[],"id":"page:/eight-trigrams/","metadata":{"kind":"artifact","language":"en","route":"/eight-trigrams/","type":"page"},"summary":"Bagua and trigram reference generation.","text":"Eight Trigrams\n\nBagua and trigram reference generation.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Chinese Calendar & Symbols (https://mayphus.org/chinese-culture/) \n\nArchive state\n \nseed-stage old domain\n\nSource\n \n~/my.backup/0/eight-trigrams \n\nVisibility\n \npublic archive shell","title":"Eight Trigrams","url":"https://mayphus.org/eight-trigrams/"},{"aliases":["project:learning-book-repair"],"id":"page:/electronic-learning-book-repair/","metadata":{"category":"artifact","id":"learning-book-repair","kind":"artifact","language":"en","route":"/electronic-learning-book-repair/","tags":["repair","electronics","teardown"],"type":"project"},"summary":"Repair note for a toddler's electronic learning book: inspect the power path, clean the battery compartment, replace batteries, and verify the fix.","text":"Look inside a Toddler's Electronic Learning Book\n\nA toddler's electronic learning book stopped working. The repair opened the case, checked the visible electronics, cleaned the battery area, replaced the batteries, and confirmed the book worked again.\n\nStatus\n \nComplete\n\nDate\n \nJune 27, 2026\n\nResult\n \nCleaning the battery path and fitting fresh cells restored the book without board-level repair.\n\nEvidence\n \nRepair stream (https://www.youtube.com/watch?v=n6fECoZxHFk) \n\n Opened teal electronic learning book showing the circuit board, wiring, speaker, and battery contacts.  \nInside view after opening the learning book: power wiring, board, speaker, ribbon cable, and battery-contact area are visible for inspection.\n\nSummary\n \nMost of the repair was basic diagnosis: start with power, inspect before replacing parts, and verify the result.\n\nNot working. \nThe book did not respond, so the first check was whether power was reaching the device.\n\nBoard and wiring looked intact. \nOpening the case exposed the main board, speaker, wiring, ribbon cable, and battery-contact area.\n\nClean contacts, replace batteries. \nThe practical fix was restoring the battery path rather than doing board-level work.\n\nWorking again. \nAfter the battery change, the learning book powered on and the repair was complete.\n\nSteps\n\n- \nConfirm the device is not working.\n\n- \nOpen the case and inspect the visible electronics.\n\n- \nClean the battery compartment and contacts.\n\n- \nReplace the batteries with fresh cells.\n\n- \nTest the book again and confirm it works.","title":"Electronic Learning Book Repair","url":"https://mayphus.org/electronic-learning-book-repair/"},{"aliases":[],"id":"page:/emoji/","metadata":{"kind":"artifact","language":"en","route":"/emoji/","type":"page"},"summary":"Racket pict emoji and icon prototypes.","text":"Emoji Drawings\n\nRacket pict emoji and icon prototypes.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Visual Drawing Lab (https://mayphus.org/visual-lab/) \n\nArchive state\n \nunregistered archive project\n\nSource\n \n~/my.backup/0/emoji \n\nVisibility\n \npublic archive shell","title":"Emoji Drawings","url":"https://mayphus.org/emoji/"},{"aliases":[],"id":"page:/english/","metadata":{"kind":"artifact","language":"en","route":"/english/","type":"page"},"summary":"English-language data and utility experiments.","text":"English\n\nEnglish-language data and utility experiments.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Language Learning (https://mayphus.org/language-learning/) \n\nArchive state\n \nunregistered archive project\n\nSource\n \n~/my.backup/0/english \n\nVisibility\n \npublic archive shell","title":"English","url":"https://mayphus.org/english/"},{"aliases":["article:entries/a-week-of-verified-loops","note:a-week-of-verified-loops"],"id":"page:/entries/a-week-of-verified-loops/","metadata":{"date":"2026-08-07","id":"a-week-of-verified-loops","kind":"note","language":"en","links":[{"label":"SO-101 simulator","url":"https://mayphus.org/so-101-simulator/"}],"locale":"en","route":"/entries/a-week-of-verified-loops/","slug":"entries/a-week-of-verified-loops","tags":[],"topic":"making","type":"note"},"summary":"A week of verified loops","text":"A week of verified loops\n  \n 2026-08-07 \n\nThis week I kept returning to the same way of working: build the smallest real loop, verify it, and widen the boundary only when the evidence holds. The main thread was robotics. I moved the SO-101 simulator through camera-guided pick and place, repeatable safety checks, staged learned policies, and the beginnings of an object-packing architecture. Around it, I shipped a small agent-operated store, booted a minimal Rust/RISC-V kernel, extended an AI gateway with verified image input, and fixed focused dependency issues. The projects were different, but the useful habit was the same: turn an idea into an observable system before making it bigger.","title":"A week of verified loops","url":"https://mayphus.org/entries/a-week-of-verified-loops/"},{"aliases":["article:entries/chatgpt-camera-investigation-workflow","note:chatgpt-camera-investigation-workflow"],"id":"page:/entries/chatgpt-camera-investigation-workflow/","metadata":{"date":"2026-07-15","id":"chatgpt-camera-investigation-workflow","kind":"note","language":"en","links":[{"label":"3 TP-Link Security Cameras","url":"https://mayphus.org/tp-link-security-camera-investigation/"}],"locale":"en","route":"/entries/chatgpt-camera-investigation-workflow/","slug":"entries/chatgpt-camera-investigation-workflow","tags":[],"topic":"making","type":"note"},"summary":"I’m going to finish investigating the three TP-Link security cameras with the new ChatGPT…","text":"I’m going to finish investigating the three TP-Link security cameras with the new ChatGPT…\n  \n 2026-07-15 \n\nI’m going to finish investigating the three TP-Link security cameras with the new ChatGPT Desktop as a hands-on engineering partner. One camera is already torn down and may need a main-chip replacement, so I’ll start with the other two: both still show working IR and PTZ movement at power-on. First I need a longer Ethernet cable. Then I’ll tear them down, connect interfaces, measure signals, form hypotheses, and test likely faults while ChatGPT helps identify serial pins, inspect U-Boot and Linux boot logs, and answer questions quickly. I’ll record the work on YouTube Live, then use the generated transcripts to summarize the investigation and update the website.","title":"I’m going to finish investigating the three TP-Link security cameras with the new ChatGPT…","url":"https://mayphus.org/entries/chatgpt-camera-investigation-workflow/"},{"aliases":["article:entries/learning-ros-office","note:learning-ros-office"],"id":"page:/entries/learning-ros-office/","metadata":{"date":"2017-07-13","id":"learning-ros-office","kind":"note","language":"en","links":[],"locale":"en","route":"/entries/learning-ros-office/","slug":"entries/learning-ros-office","tags":[],"topic":"making","type":"note"},"summary":"Working like a professional in an abandoned office at university, trying to learn ROS.","text":"Working like a professional in an abandoned office at university, trying to learn ROS.\n  \n 2017-07-13 \n\nWorking like a professional in an abandoned office at university, trying to learn ROS. I turned the empty room into a three-monitor lab, worked through the ROS tutorials, and got turtlesim running. The setup looked serious; I was still learning from the beginning.\n \nThree monitors in an unused university office, with Ubuntu terminals and development tools open across the workspace.  (https://mayphus.org/media/notes/ros-office-three-monitors.jpg) Mayphus sitting at a laptop in the university office while learning robotics software.  (https://mayphus.org/media/notes/ros-office-learning.jpg) A multi-monitor ROS learning setup showing terminals, tutorial instructions, and a running turtlesim window.  (https://mayphus.org/media/notes/ros-office-turtlesim.jpg)","title":"Working like a professional in an abandoned office at university, trying to learn ROS.","url":"https://mayphus.org/entries/learning-ros-office/"},{"aliases":["article:entries/mechanical-competition","note:mechanical-competition"],"id":"page:/entries/mechanical-competition/","metadata":{"date":"2016-11-10","id":"mechanical-competition","kind":"note","language":"en","links":[],"locale":"en","route":"/entries/mechanical-competition/","slug":"entries/mechanical-competition","tags":[],"topic":"making","type":"note"},"summary":"These photos are from a mechanical competition in November 2016.","text":"These photos are from a mechanical competition in November 2016.\n  \n 2016-11-10 \n\nThese photos are from a mechanical competition in November 2016. I built a tall wheeled robot from aluminum plate, steel rods, laser-cut wheels, gears, an AT89X51 controller, and ultrasonic sensors. The workbench photos show the mechanism and electronics coming together; the final photo shows the robot on the competition track.\n \nA tall homemade wheeled robot under construction on a crowded electronics workbench.  (https://mayphus.org/media/notes/mechanical-competition-workbench.jpg) Close view of the robot's large laser-cut wheels, gears, AT89X51 controller board, batteries, wiring, and ultrasonic sensor.  (https://mayphus.org/media/notes/mechanical-competition-drive.jpg) The completed tall wheeled robot standing on the polished floor of a mechanical competition track.  (https://mayphus.org/media/notes/mechanical-competition-track.jpg)","title":"These photos are from a mechanical competition in November 2016.","url":"https://mayphus.org/entries/mechanical-competition/"},{"aliases":["article:entries/old-depth-camera-was-not-dead","note:old-depth-camera-was-not-dead"],"id":"page:/entries/old-depth-camera-was-not-dead/","metadata":{"date":"2026-08-10","id":"old-depth-camera-was-not-dead","kind":"note","language":"en","links":[],"locale":"en","route":"/entries/old-depth-camera-was-not-dead/","slug":"entries/old-depth-camera-was-not-dead","tags":[],"topic":"making","type":"note"},"summary":"The old depth camera was not dead","text":"The old depth camera was not dead\n  \n 2026-08-10 \n\nI pulled an old LeTV LeTMC-520 RGB-D camera out of storage and initially thought it had failed: Linux repeatedly rejected it during USB setup. Windows showed that the ordinary RGB camera still worked, but the depth interface had no driver. The useful clue was the connection itself. On a rear USB 2.0 port, Linux cleanly enumerated the camera's internal hub, Orbbec Astra Pro depth sensor, and UVC color camera. With one small video utility, I streamed 720p MJPEG over SSH to my Mac without installing a depth driver or running a permanent server. The depth stream can wait for a separate OpenNI test on a Raspberry Pi. Old hardware is easy to misdiagnose when physical health, USB compatibility, and software support are treated as the same question.","title":"The old depth camera was not dead","url":"https://mayphus.org/entries/old-depth-camera-was-not-dead/"},{"aliases":["article:entries/screenshots-2026-04","note:screenshots-2026-04"],"id":"page:/entries/screenshots-2026-04/","metadata":{"date":"2026-04-29","id":"screenshots-2026-04","kind":"note","language":"en","links":[],"locale":"en","route":"/entries/screenshots-2026-04/","slug":"entries/screenshots-2026-04","tags":[],"topic":"making","type":"note"},"summary":"Screenshots from April 2026.","text":"Screenshots from April 2026.\n  \n 2026-04-29 \n\nScreenshots from April 2026.\n \nScreenshot from 2026-04-01 at 14:04.  (https://mayphus.org/media/screenshots/2026-04-01-140447.png) Screenshot from 2026-04-02 at 11:47.  (https://mayphus.org/media/screenshots/2026-04-02-114720.png) Screenshot from 2026-04-02 at 16:43.  (https://mayphus.org/media/screenshots/2026-04-02-164305.png) Screenshot from 2026-04-22 at 14:49.  (https://mayphus.org/media/screenshots/2026-04-22-144915.png)","title":"Screenshots from April 2026.","url":"https://mayphus.org/entries/screenshots-2026-04/"},{"aliases":["article:entries/screenshots-2026-05","note:screenshots-2026-05"],"id":"page:/entries/screenshots-2026-05/","metadata":{"date":"2026-05-29","id":"screenshots-2026-05","kind":"note","language":"en","links":[],"locale":"en","route":"/entries/screenshots-2026-05/","slug":"entries/screenshots-2026-05","tags":[],"topic":"making","type":"note"},"summary":"Screenshots from May 2026.","text":"Screenshots from May 2026.\n  \n 2026-05-29 \n\nScreenshots from May 2026.\n \nScreenshot from 2026-05-08 at 13:12.  (https://mayphus.org/media/screenshots/2026-05-08-131257.png) Screenshot from 2026-05-08 at 01:17.  (https://mayphus.org/media/screenshots/2026-05-08-011710.png) Screenshot from 2026-05-08 at 10:23.  (https://mayphus.org/media/screenshots/2026-05-08-102333.png) Screenshot from 2026-05-09 at 23:16.  (https://mayphus.org/media/screenshots/2026-05-09-231635.png) Screenshot from 2026-05-16 at 00:17.  (https://mayphus.org/media/screenshots/2026-05-16-001736.png) Screenshot from 2026-05-16 at 00:34.  (https://mayphus.org/media/screenshots/2026-05-16-003422.png) Screenshot from 2026-05-17 at 11:54.  (https://mayphus.org/media/screenshots/2026-05-17-115448.png)","title":"Screenshots from May 2026.","url":"https://mayphus.org/entries/screenshots-2026-05/"},{"aliases":["article:entries/screenshots-historical-2026-02","note:screenshots-historical-2026-02"],"id":"page:/entries/screenshots-historical-2026-02/","metadata":{"date":"2026-02-09","id":"screenshots-historical-2026-02","kind":"note","language":"en","links":[],"locale":"en","route":"/entries/screenshots-historical-2026-02/","slug":"entries/screenshots-historical-2026-02","tags":[],"topic":"making","type":"note"},"summary":"Historical research screenshots from February 2026.","text":"Historical research screenshots from February 2026.\n  \n 2026-02-09 \n\nHistorical research screenshots from February 2026.\n \nScreenshot from 2026-02-09 at 02:02.  (https://mayphus.org/media/screenshots/2026-02-09-020230.png) Screenshot from 2026-02-09 at 02:25.  (https://mayphus.org/media/screenshots/2026-02-09-022543.png) Screenshot from 2026-02-09 at 02:28.  (https://mayphus.org/media/screenshots/2026-02-09-022820.png) Screenshot from 2026-02-09 at 02:30.  (https://mayphus.org/media/screenshots/2026-02-09-023011.png) Screenshot from 2026-02-09 at 02:31.  (https://mayphus.org/media/screenshots/2026-02-09-023135.png) Screenshot from 2026-02-09 at 02:32.  (https://mayphus.org/media/screenshots/2026-02-09-023245.png) Screenshot from 2026-02-09 at 02:33.  (https://mayphus.org/media/screenshots/2026-02-09-023347.png) Screenshot from 2026-02-09 at 02:41.  (https://mayphus.org/media/screenshots/2026-02-09-024140.png) Screenshot from 2026-02-09 at 02:46.  (https://mayphus.org/media/screenshots/2026-02-09-024659.png) Screenshot from 2026-02-09 at 02:48.  (https://mayphus.org/media/screenshots/2026-02-09-024840.png) Screenshot from 2026-02-09 at 02:49.  (https://mayphus.org/media/screenshots/2026-02-09-024907.png) Screenshot from 2026-02-09 at 02:50.  (https://mayphus.org/media/screenshots/2026-02-09-025017.png) Screenshot from 2026-02-09 at 03:05.  (https://mayphus.org/media/screenshots/2026-02-09-030529.png) Screenshot from 2026-02-09 at 03:20.  (https://mayphus.org/media/screenshots/2026-02-09-032020.png)","title":"Historical research screenshots from February 2026.","url":"https://mayphus.org/entries/screenshots-historical-2026-02/"},{"aliases":["article:entries/the-real-value-of-an-ai-agent","note:the-real-value-of-an-ai-agent"],"id":"page:/entries/the-real-value-of-an-ai-agent/","metadata":{"date":"2026-08-13","id":"the-real-value-of-an-ai-agent","kind":"note","language":"en","links":[{"label":"TinyStories on RP2040","url":"https://mayphus.org/tinystories-rp2040/"},{"label":"SO-101 working record","url":"https://mayphus.org/so-101-simulator/"}],"locale":"en","route":"/entries/the-real-value-of-an-ai-agent/","slug":"entries/the-real-value-of-an-ai-agent","tags":[],"topic":"ideas","type":"note"},"summary":"The real value of an AI agent","text":"The real value of an AI agent\n  \n 2026-08-13 \n\nAn IDE, tab completion, and autocomplete help an engineer do known work faster. An AI agent is a much larger step: it can carry an intention across tools and through many known, well-specified technical problems—inspect the real system, choose a method, implement it, diagnose failures, run tests, and preserve the evidence. TinyStories on my RP2040 board and the bring-up of my SO-101 robot made this concrete. I described the outcome I wanted and what I could physically observe; the agent handled most of the technical path. I still operated and calibrated the hardware, protected the physical safety boundary, and replaced the broken motor. The value is not making the human disappear. It is reaching a usable system sooner, so our attention can move from repeated technical friction to the different, useful, and creative question: what should we make the robot do now?","title":"The real value of an AI agent","url":"https://mayphus.org/entries/the-real-value-of-an-ai-agent/"},{"aliases":["article:entries/twelve-volts-one-wrong-pin","note:twelve-volts-one-wrong-pin"],"id":"page:/entries/twelve-volts-one-wrong-pin/","metadata":{"date":"2026-08-15","id":"twelve-volts-one-wrong-pin","kind":"note","language":"en","links":[],"locale":"en","route":"/entries/twelve-volts-one-wrong-pin/","slug":"entries/twelve-volts-one-wrong-pin","tags":[],"topic":"making","type":"note"},"summary":"Twelve volts, one wrong pin","text":"Twelve volts, one wrong pin\n  \n 2026-08-15 \n\nI tried to bring an old HiSilicon camera board back to life. The plan was cautious at first: identify the H1102NL Ethernet magnetics, verify the USB-TTL adapter with a loopback, keep its VCC disconnected, and listen for boot output. The mistake was the unverified eight-pin harness. I put 12 volts onto what I thought was the input pin. The board answered with a pop and was finished. The TTL adapter survived a second exact loopback test. The useful lesson is embarrassingly physical: a connector that fits is not a pinout, wire color is not evidence, and voltage should not be applied until ground, input protection, and the power path have been traced with continuity. Sometimes the artifact is the failed board and the rule it leaves behind.\n \nOld HiSilicon camera board connected to a USB-TTL adapter during the attempted bring-up  (https://mayphus.org/media/notes/twelve-volts-one-wrong-pin-setup.jpg) Camera main board, improvised eight-pin harness, and the H1102NL Ethernet magnetics module  (https://mayphus.org/media/notes/twelve-volts-one-wrong-pin-main-board.jpg) Camera sensor module and the unverified eight-wire harness after the failed power test  (https://mayphus.org/media/notes/twelve-volts-one-wrong-pin-camera-module.jpg)","title":"Twelve volts, one wrong pin","url":"https://mayphus.org/entries/twelve-volts-one-wrong-pin/"},{"aliases":["article:entries/x-1773368233044623386","note:x-1773368233044623386"],"id":"page:/entries/x-1773368233044623386/","metadata":{"date":"2024-03-28","id":"x-1773368233044623386","kind":"x","language":"en","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1773368233044623386"}],"locale":"en","route":"/entries/x-1773368233044623386/","slug":"entries/x-1773368233044623386","tags":[],"topic":"making","type":"note"},"summary":"Voice tweet test.","text":"Voice tweet test.\n  \n 2024-03-28 \n\nVoice tweet test.","title":"Voice tweet test.","url":"https://mayphus.org/entries/x-1773368233044623386/"},{"aliases":["article:entries/x-1787870398023184883","note:x-1787870398023184883"],"id":"page:/entries/x-1787870398023184883/","metadata":{"date":"2024-05-07","id":"x-1787870398023184883","kind":"x","language":"en","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1787870398023184883"}],"locale":"en","route":"/entries/x-1787870398023184883/","slug":"entries/x-1787870398023184883","tags":[],"topic":"life","type":"note"},"summary":"I love Thailand.","text":"I love Thailand.\n  \n 2024-05-07 \n\nI love Thailand. Because it’s simple, convenient, free, relax, because people’s kindness, friendly.\n \nPhoto 1 attached to the X post from 2024-05-07.  (https://mayphus.org/media/x/1787870398023184883-GM_KpSyaYAAFJnK.jpg) Photo 2 attached to the X post from 2024-05-07.  (https://mayphus.org/media/x/1787870398023184883-GM_KpS1bQAEbYoP.jpg) Photo 3 attached to the X post from 2024-05-07.  (https://mayphus.org/media/x/1787870398023184883-GM_KpSzagAAwtll.jpg) Photo 4 attached to the X post from 2024-05-07.  (https://mayphus.org/media/x/1787870398023184883-GM_KpS0aoAA5Stg.jpg)","title":"I love Thailand.","url":"https://mayphus.org/entries/x-1787870398023184883/"},{"aliases":["article:entries/x-1812764876085117182","note:x-1812764876085117182"],"id":"page:/entries/x-1812764876085117182/","metadata":{"date":"2024-07-15","id":"x-1812764876085117182","kind":"x","language":"en","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1812764876085117182"}],"locale":"en","route":"/entries/x-1812764876085117182/","slug":"entries/x-1812764876085117182","tags":[],"topic":"making","type":"note"},"summary":"Entry from 2024-07-15","text":"Entry from 2024-07-15\n  \n 2024-07-15","title":"Entry from 2024-07-15","url":"https://mayphus.org/entries/x-1812764876085117182/"},{"aliases":["article:entries/x-1837765187329315034","note:x-1837765187329315034"],"id":"page:/entries/x-1837765187329315034/","metadata":{"date":"2024-09-22","id":"x-1837765187329315034","kind":"x","language":"en","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1837765187329315034"}],"locale":"en","route":"/entries/x-1837765187329315034/","slug":"entries/x-1837765187329315034","tags":[],"topic":"life","type":"note"},"summary":"Witness the Majestic Qiantang River Tidal Bore: Nature’s Ultimate Spectacle!","text":"Witness the Majestic Qiantang River Tidal Bore: Nature’s Ultimate Spectacle!\n  \n 2024-09-22 \n\nWitness the Majestic Qiantang River Tidal Bore: Nature’s Ultimate Spectacle!","title":"Witness the Majestic Qiantang River Tidal Bore: Nature’s Ultimate Spectacle!","url":"https://mayphus.org/entries/x-1837765187329315034/"},{"aliases":["article:entries/x-1874248940180430948","note:x-1874248940180430948"],"id":"page:/entries/x-1874248940180430948/","metadata":{"date":"2025-01-01","id":"x-1874248940180430948","kind":"x","language":"en","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1874248940180430948"}],"locale":"en","route":"/entries/x-1874248940180430948/","slug":"entries/x-1874248940180430948","tags":[],"topic":"making","type":"note"},"summary":"First day of 2025.","text":"First day of 2025.\n  \n 2025-01-01 \n\nFirst day of 2025. Completed my first 3 kilometers running and booted my new Raspberry Pi Zero 2 W.","title":"First day of 2025.","url":"https://mayphus.org/entries/x-1874248940180430948/"},{"aliases":["article:entries/x-1881704765983510867","note:x-1881704765983510867"],"id":"page:/entries/x-1881704765983510867/","metadata":{"date":"2025-01-21","id":"x-1881704765983510867","kind":"x","language":"en","links":[{"label":"Source","url":"https://x.com/mayphustang/status/1881704765983510867"}],"locale":"en","route":"/entries/x-1881704765983510867/","slug":"entries/x-1881704765983510867","tags":[],"topic":"making","type":"note"},"summary":"I implemented RP2040 official minimal design example.","text":"I implemented RP2040 official minimal design example.\n  \n 2025-01-21 \n\nI implemented RP2040 official minimal design example. #rp2040 #raspberrypi #raspberrypipico #diy\n \nPhoto 1 attached to the X post from 2025-01-21.  (https://mayphus.org/media/x/1881704765983510867-Gh0ofsxWwAA_2Gd.jpg) Photo 2 attached to the X post from 2025-01-21.  (https://mayphus.org/media/x/1881704765983510867-Gh0oftWWYAAHiay.jpg) Photo 3 attached to the X post from 2025-01-21.  (https://mayphus.org/media/x/1881704765983510867-Gh0oftYWwAAlFxQ.jpg) Photo 4 attached to the X post from 2025-01-21.  (https://mayphus.org/media/x/1881704765983510867-Gh0oftYWEAA-QSb.jpg)","title":"I implemented RP2040 official minimal design example.","url":"https://mayphus.org/entries/x-1881704765983510867/"},{"aliases":["article:entries/x-2060192582706344390","note:x-2060192582706344390"],"id":"page:/entries/x-2060192582706344390/","metadata":{"date":"2026-05-29","id":"x-2060192582706344390","kind":"x","language":"en","links":[{"label":"mayphus.org/unicode/","url":"https://mayphus.org/unicode/"},{"label":"Source","url":"https://x.com/mayphustang/status/2060192582706344390"}],"locale":"en","route":"/entries/x-2060192582706344390/","slug":"entries/x-2060192582706344390","tags":[],"topic":"making","type":"note"},"summary":"Just built a massive Unicode matrix!","text":"Just built a massive Unicode matrix!\n  \n 2026-05-29 \n\nJust built a massive Unicode matrix! 🚀 You can visually browse every single character from Plane 0 all the way through Plane 16 in one clean, responsive grid. Check out the UI layout in the video below. What do you think? mayphus.org/unicode/","title":"Just built a massive Unicode matrix!","url":"https://mayphus.org/entries/x-2060192582706344390/"},{"aliases":["article:entries/x-2062104590410260679","note:x-2062104590410260679"],"id":"page:/entries/x-2062104590410260679/","metadata":{"date":"2026-06-03","id":"x-2062104590410260679","kind":"x","language":"en","links":[{"label":"mayphus.org/han","url":"http://mayphus.org/han"},{"label":"Source","url":"https://x.com/mayphustang/status/2062104590410260679"}],"locale":"en","route":"/entries/x-2062104590410260679/","slug":"entries/x-2062104590410260679","tags":[],"topic":"making","type":"note"},"summary":"Discover mayphus.org/han – a Racket-powered web tool I built for creating print-ready…","text":"Discover mayphus.org/han – a Racket-powered web tool I built for creating print-ready…\n  \n 2026-06-03 \n\nDiscover mayphus.org/han – a Racket-powered web tool I built for creating print-ready 3500-character matrix posters.","title":"Discover mayphus.org/han – a Racket-powered web tool I built for creating print-ready…","url":"https://mayphus.org/entries/x-2062104590410260679/"},{"aliases":[],"id":"page:/facade-light/","metadata":{"kind":"artifact","language":"en","route":"/facade-light/","type":"page"},"summary":"Declarative architectural lighting, mapping, preview, and controller export.","text":"Facade Light\n\nDeclarative architectural lighting, mapping, preview, and controller export.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Performance Studio (https://mayphus.org/performance-studio/) \n\nArchive state\n \nseed-stage old domain\n\nSource\n \n~/my.backup/0/facade-light \n\nVisibility\n \npublic archive shell","title":"Facade Light","url":"https://mayphus.org/facade-light/"},{"aliases":[],"id":"page:/fifa/","metadata":{"kind":"artifact","language":"en","route":"/fifa/","type":"page"},"summary":"Football tournament data and document-rendering experiments.","text":"FIFA\n\nFootball tournament data and document-rendering experiments.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Games (https://mayphus.org/games/) \n\nArchive state\n \nseed-stage old domain\n\nSource\n \n~/my.backup/0/fifa \n\nVisibility\n \npublic archive shell","title":"FIFA","url":"https://mayphus.org/fifa/"},{"aliases":[],"id":"page:/flashcards/","metadata":{"kind":"artifact","language":"en","route":"/flashcards/","type":"page"},"summary":"Generated flashcard interface and source model.","text":"Flashcards\n\nGenerated flashcard interface and source model.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Language Learning (https://mayphus.org/language-learning/) \n\nArchive state\n \nunregistered archive project\n\nSource\n \n~/my.backup/0/flashcards \n\nVisibility\n \npublic archive shell","title":"Flashcards","url":"https://mayphus.org/flashcards/"},{"aliases":[],"id":"page:/flower/","metadata":{"kind":"artifact","language":"en","route":"/flower/","type":"page"},"summary":"Generated daisy, cosmos, lily, lotus, rose, sunflower, and tulip studies.","text":"Flower Studies\n\nGenerated daisy, cosmos, lily, lotus, rose, sunflower, and tulip studies.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Visual Drawing Lab (https://mayphus.org/visual-lab/) \n\nArchive state\n \nunregistered archive project\n\nSource\n \n~/my.backup/0/flower \n\nVisibility\n \npublic archive shell","title":"Flower Studies","url":"https://mayphus.org/flower/"},{"aliases":["project:freebsd"],"id":"page:/freebsd/","metadata":{"category":"note","id":"freebsd","kind":"note","language":"en","route":"/freebsd/","tags":["freebsd","bsd","unix","systems"],"type":"project"},"summary":"A short personal introduction to FreeBSD: what it is, why I used it, and what stayed with me.","text":"FreeBSD\n\nFreeBSD is a complete Unix-like operating system: kernel, base tools, documentation, and release engineering developed together. I used it in the past, and this page is a short note about why it stayed with me.\n\nWhat made it different\n \nFreeBSD felt coherent. The base system had clear boundaries, the Handbook was unusually practical, and features such as jails, ZFS, ports, and packages made it useful for learning and running real services.\n\nWhy I remember it\n \nUsing it encouraged me to understand the whole machine instead of treating the operating system as a collection of unrelated parts. Its calm, conservative approach made administration feel deliberate.\n\nFixing the Handbook's thin-jail recipe\n \nI made a small FreeBSD Handbook patch for a real NullFS thin-jail footgun: relative symlinks could resolve into the wrong tree and break certificate links or package bootstrapping.\n \nRead the fix (https://mayphus.org/a-tiny-freebsd-jail-doc-fix/) \n\nMy FreeBSD story\n \nI will add the machines I ran it on, the version and setup I used, what worked well, and why I eventually moved on.","title":"FreeBSD","url":"https://mayphus.org/freebsd/"},{"aliases":["project:geologic-clock"],"id":"page:/geologic-clock/","metadata":{"category":"study","id":"geologic-clock","kind":"artifact","language":"en","route":"/geologic-clock/","tags":["time","diagrams"],"type":"project"},"summary":"Generated deep-time visual study.","text":"Geologic Clock\n\nRestored geologic time scale artifacts from the backup: a circular clock, a full table, and an alternate Fibonacci layout.\n\nArtifacts\n Geologic time scale table  Time Scale Table Dense eras, periods, epochs, and ages as a printable reference.   (https://mayphus.org/geologic-clock/geologic-time-table.svg) Circular geologic time clock  Clock Earth history compressed into a circular time artifact.   (https://mayphus.org/geologic-clock/geologic-clock.svg) Geologic time Fibonacci layout  Fibonacci Layout An alternate generated composition for deep-time scanning.   (https://mayphus.org/geologic-clock/geologic-fibonacci.svg)","title":"Geologic Clock","url":"https://mayphus.org/geologic-clock/"},{"aliases":["project:gridpaper"],"id":"page:/gridpaper/","metadata":{"category":"tool","id":"gridpaper","kind":"tool","language":"en","route":"/gridpaper/","tags":["print","paper","generator"],"type":"project"},"summary":"Printable guide-sheet generator.","text":"Gridpaper\n \nConfigure a printable guide sheet, then print it or download the generated SVG\n\nA4 landscape · grid · 8 × 4","title":"Gridpaper","url":"https://mayphus.org/gridpaper/"},{"aliases":["project:hanzi"],"id":"page:/hanzi/","metadata":{"category":"tool","id":"hanzi","kind":"tool","language":"zh-Hant","route":"/hanzi/","tags":["hanzi","language","reference"],"type":"project"},"summary":"Traditional Hanzi matrix with pinyin, zhuyin, and English details.","text":"Hanzi Matrix\n \n3,500 common Traditional characters · select one for pinyin, zhuyin, and English","title":"Hanzi Matrix","url":"https://mayphus.org/hanzi/"},{"aliases":[],"id":"page:/history/","metadata":{"kind":"artifact","language":"en","route":"/history/","type":"page"},"summary":"Large generated world-history chart for screen and print.","text":"World History Chart\n\nLarge generated world-history chart for screen and print.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Timelines (https://mayphus.org/timelines/) \n\nArchive state\n \nunregistered archive project\n\nSource\n \n~/my.backup/0/history \n\nVisibility\n \npublic archive shell","title":"World History Chart","url":"https://mayphus.org/history/"},{"aliases":[],"id":"page:/honglou/","metadata":{"kind":"artifact","language":"en","route":"/honglou/","type":"page"},"summary":"Dream of the Red Chamber source and text experiments.","text":"Honglou\n\nDream of the Red Chamber source and text experiments.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Chinese Book Lab (https://mayphus.org/chinese-book-lab/) \n\nArchive state\n \ninbox experiment\n\nSource\n \n~/my.backup/0/honglou \n\nVisibility\n \npublic archive shell","title":"Honglou","url":"https://mayphus.org/honglou/"},{"aliases":[],"id":"page:/icon-forge/","metadata":{"kind":"artifact","language":"en","route":"/icon-forge/","type":"page"},"summary":"Declared icon scenes with rendering, licensing, and source attribution.","text":"Icon Forge\n\nDeclared icon scenes with rendering, licensing, and source attribution.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Visual Drawing Lab (https://mayphus.org/visual-lab/) \n\nArchive state\n \nunregistered archive project\n\nSource\n \n~/my.backup/0/icon-forge \n\nVisibility\n \npublic archive shell","title":"Icon Forge","url":"https://mayphus.org/icon-forge/"},{"aliases":["project:infrastructure"],"id":"page:/infrastructure/","metadata":{"category":"tool","id":"infrastructure","kind":"tool","language":"en","route":"/infrastructure/","tags":["kubernetes","cloudflare","ops"],"type":"project"},"summary":"Public, sanitized description of the infrastructure behind Mayphus.","text":"Public, sanitized description of the infrastructure behind Mayphus.","title":"Infrastructure","url":"https://mayphus.org/infrastructure/"},{"aliases":["project:ipa"],"id":"page:/ipa/","metadata":{"category":"tool","id":"ipa","kind":"tool","language":"en","route":"/ipa/","tags":["ipa","audio","language"],"type":"project"},"summary":"Clickable phonetic reference with local audio samples.","text":"IPA Chart\n \nInternational Phonetic Alphabet reference · select highlighted symbols to hear local audio\n\nLoading chart","title":"IPA Chart","url":"https://mayphus.org/ipa/"},{"aliases":[],"id":"page:/job-hunter/","metadata":{"kind":"artifact","language":"en","route":"/job-hunter/","type":"page"},"summary":"Personal job-search tooling; this public page excludes private applications and resume data.","text":"Job Hunter\n\nPersonal job-search tooling; this public page excludes private applications and resume data.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n\nArchive state\n \nactive old domain\n\nSource\n \n~/my.backup/0/job-hunter \n\nVisibility\n \nsanitized public shell\n\nPrivate source data stays private \nOnly the project concept and migration status are exposed here. Personal records from the archived implementation were not copied into the public site.","title":"Job Hunter","url":"https://mayphus.org/job-hunter/"},{"aliases":[],"id":"page:/joy-lang/","metadata":{"kind":"artifact","language":"en","route":"/joy-lang/","type":"page"},"summary":"Small language and stack-language experiments.","text":"Joy Lang\n\nSmall language and stack-language experiments.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n\nArchive state\n \nseed-stage old domain\n\nSource\n \n~/my.backup/0/joy-lang \n\nVisibility\n \npublic archive shell","title":"Joy Lang","url":"https://mayphus.org/joy-lang/"},{"aliases":[],"id":"page:/lerobot/","metadata":{"kind":"artifact","language":"en","route":"/lerobot/","type":"page"},"summary":"Robot-learning and training experiments.","text":"LeRobot\n\nRobot-learning and training experiments.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Robotics & Vision (https://mayphus.org/robotics-vision/) \n\nArchive state\n \nseed-stage old domain\n\nSource\n \n~/my.backup/0/lerobot \n\nVisibility\n \npublic archive shell","title":"LeRobot","url":"https://mayphus.org/lerobot/"},{"aliases":[],"id":"page:/linux-disk/","metadata":{"kind":"tool","language":"en","route":"/linux-disk/","type":"page"},"summary":"Visual map of a GPT-partitioned Linux install disk: EFI, boot, root, swap, home, and backup GPT metadata.","text":"Plan and understand a Linux disk\n\nTurn a disk size, memory budget, and boot requirements into a practical GPT layout—then inspect what every region does.\n  \n01 · sector zero \nThe protective MBR speaks to older tools\n \nA GPT disk still begins with a 512-byte Master Boot Record. Its job is compatibility, not modern partition discovery: one partition entry normally uses type 0xEE to claim the disk and discourage MBR-only software from overwriting it.\n \nThe last two bytes must be 0x55 and 0xAA. Between the optional boot-code area and that signature sit a disk identifier, two reserved bytes, and four legacy 16-byte partition entries.\n\nEvery byte in the protective MBR\n \nSelect any offset in the 512-byte sector. Values marked -- depend on the disk or legacy boot code; structural roles remain fixed.\n\nOffset 0x1FE / 510 \n \nValue 0x55 \n \nFunction Boot signature · first byte \nMust be 0x55 as the first half of the 0x55AA boot-record signature.\n\n02 · primary metadata \nGPT describes the real partition map\n \nThe primary GPT header normally lives at logical block address 1. It identifies the disk, records the usable LBA range, points to the partition-entry array, and stores CRC32 checksums so damage can be detected.\n \nEach GPT partition entry carries a type GUID, a unique partition GUID, starting and ending LBAs, attributes, and a UTF-16 name. Linux tools use this table—not the protective MBR—to locate the ESP, root filesystem, swap, and other partitions.\n\nInspect the structure \nPrimary GPT header, field by field\n \nThis matrix maps the primary GPT header sector at LBA 1. The header points to the partition-entry array that follows it.\n  \nSignature 0x000-0x007, EFI PART  \nASCII bytes that identify this sector as a GPT header.\n  Revision 0x008-0x00B  \nGPT revision, commonly 00 00 01 00 for revision 1.0.\n  Header size 0x00C-0x00F  \nSize of the valid header region, usually 92 bytes.\n  Header CRC32 0x010-0x013  \nCRC32 of the header with this field zeroed while calculating.\n  Reserved 0x014-0x017  \nMust be zero.\n  Current LBA 0x018-0x01F  \nLocation of this primary header, normally LBA 1.\n  Backup LBA 0x020-0x027  \nLocation of the backup GPT header at the end of the disk.\n  First usable LBA 0x028-0x02F  \nFirst LBA that may be used by real partitions.\n  Last usable LBA 0x030-0x037  \nLast LBA that may be used by real partitions.\n  Disk GUID 0x038-0x047  \nUnique identifier for the whole disk, not for any one partition.\n  Entry array LBA 0x048-0x04F  \nStarting LBA of the partition-entry array, commonly LBA 2.\n  Entry count 0x050-0x053  \nNumber of partition entries reserved in the array.\n  Entry size 0x054-0x057  \nSize of each partition entry, usually 128 bytes.\n  Entry array CRC32 0x058-0x05B  \nCRC32 covering the whole partition-entry array.\n  Header padding 0x05C-0x1FF  \nUnused bytes in the 512-byte sector. They must be zero.\n\n03 · firmware handoff \nUEFI enters through the EFI System Partition\n \nUEFI firmware follows GPT to a small FAT32 EFI System Partition. It can read files such as /EFI/BOOT/BOOTX64.EFI without understanding ext4, Btrfs, LUKS, or the Linux root filesystem.\n \nThe selected EFI program—often GRUB or systemd-boot—loads a kernel and initramfs. A separate /boot is useful when those files must remain outside encrypted or otherwise complex root storage, but many straightforward systems do not require it.\n\nInspect the structure \nWhat firmware reads inside the FAT32 boot record\n \nThis matrix maps the FAT32 volume boot record at the start of the EFI System Partition. Firmware uses this filesystem metadata to find /EFI bootloader files.\n  \nJump instruction 0x000-0x002  \nCPU jump bytes for legacy boot compatibility. UEFI usually reads the filesystem rather than executing this code.\n  OEM name 0x003-0x00A  \nEight-byte formatter label. It is informational, not a reliable filesystem type check.\n  Bytes per sector 0x00B-0x00C  \nLogical sector size recorded by the FAT32 BIOS parameter block, commonly 512 bytes.\n  Sectors per cluster 0x00D  \nAllocation unit size. FAT maps clusters, not individual bytes.\n  Reserved sectors 0x00E-0x00F  \nSectors before the first FAT. This includes the boot sector, FSInfo sector, and backup boot sector.\n  FAT count 0x010  \nUsually 2 copies of the FAT allocation table for compatibility and repair.\n  Root entry count 0x011-0x012  \nMust be 0 for FAT32 because the root directory is a normal cluster chain.\n  Small sector count 0x013-0x014  \nOlder 16-bit sector count. FAT32 ESPs normally use the 32-bit total-sector field instead.\n  Media descriptor 0x015  \nLegacy media marker, commonly 0xF8 for a fixed disk.\n  FAT16 size 0x016-0x017  \nMust be 0 for FAT32; the FAT32 table size lives later in the BPB.\n  Geometry hint 0x018-0x01B  \nLegacy sectors-per-track and head-count values. Modern firmware should not depend on them.\n  Hidden sectors 0x01C-0x01F  \nNumber of sectors before this FAT volume. On a GPT disk this corresponds to the ESP partition start offset.\n  Total sectors 0x020-0x023  \n32-bit count of sectors in the EFI System Partition volume.\n  FAT size 0x024-0x027  \nSize in sectors of each FAT copy. This determines where the data region begins.\n  FAT flags 0x028-0x029  \nControls active FAT selection and whether FAT copies are mirrored.\n  FAT version 0x02A-0x02B  \nFilesystem version, normally 0:0.\n  Root cluster 0x02C-0x02F  \nFirst cluster of the root directory. The /EFI directory is found by walking directory entries from here.\n  FSInfo sector 0x030-0x031  \nSector number of the FAT32 FSInfo structure, commonly 1.\n  Backup boot sector 0x032-0x033  \nSector number of the backup boot record, commonly 6.\n  BPB reserved 0x034-0x03F  \nReserved FAT32 BIOS parameter block bytes.\n  Drive number 0x040  \nLegacy BIOS drive number. UEFI does not use this as a device path.\n  Reserved byte 0x041  \nReserved byte in the extended boot record.\n  Extended signature 0x042  \n0x29 indicates that volume ID, label, and filesystem type fields follow.\n  Volume ID 0x043-0x046  \nSerial number generated when the FAT32 volume was formatted.\n  Volume label 0x047-0x051  \nEleven-byte label for the FAT volume. Linux often also exposes the partition label separately.\n  Filesystem type 0x052-0x059, FAT32  \nInformational string. Robust code identifies FAT32 from the BPB layout, not only this text.\n  Boot code area 0x05A-0x1FD  \nReserved executable area for legacy boot. On an ESP, the useful bootloaders are files such as /EFI/BOOT/BOOTX64.EFI in the data region.\n  Boot signature 0x1FE-0x1FF  \nFinal bytes 0x55 and 0xAA, matching the standard boot-sector signature.\n\nThe handoff from power-on to mounted root\n \n01 UEFI reads GPT  \nFirmware finds the EFI System Partition through the primary partition table.\n  02 The ESP starts a loader  \nAn EFI executable selects the kernel, initramfs, and kernel command line.\n  03 Initramfs prepares storage  \nEarly userspace unlocks LUKS, activates LVM, assembles RAID, and locates root.\n  04 Linux mounts the system  \nRoot becomes live; /boot, /home, and other filesystems follow from /etc/fstab.\n\n04 · the running system \nLinux partitions are policy boundaries\n \nThe root filesystem holds /etc, /usr, /var, applications, and system state. Swap is page-oriented kernel storage rather than a mounted filesystem. A separate /home can isolate user data from operating-system replacement, but it also creates a fixed capacity boundary.\n \nUse fewer partitions when flexibility matters. Use separate filesystems when independent recovery, quotas, encryption, snapshots, or failure containment justify the operational cost.\n\nGPT disk layout\n \n 512 GiB disk · 16 GiB RAM   \n\nMount point\n \nnot mounted \n\nPlanning rule\n \nDo not format\n\nWhy it exists\n \nProtects a GPT disk from legacy MBR-only tools.\n\nsudo fdisk -l /dev/nvme0n1\n\nInspect its structure\n \nThe whole MBR fits in the first sector. Its fixed layout can be inspected from named regions down to byte offsets and individual bits.\n \nBoot code area 0x000-0x1B7, 440 bytes  \nUsually unused on a UEFI GPT disk, but still reserved by the legacy MBR layout.\n  Disk signature 0x1B8-0x1BB, 4 bytes  \nOptional legacy identifier used by some operating systems and tools.\n  Reserved 0x1BC-0x1BD, 2 bytes  \nTwo bytes between the disk signature and partition-entry table.\n  Partition entries 0x1BE-0x1FD, 64 bytes  \nFour 16-byte entries. A GPT disk normally exposes one protective 0xEE entry.\n  Boot signature 0x1FE-0x1FF, 2 bytes  \nThe final bytes are 0x55 and 0xAA, marking the sector as a boot record.\n\next4 or Btrfs \n/\n \n operating system  \nThe root filesystem contains the installed operating system: /etc, /usr, /var, system services, packages, and the base runtime.\n\nFilesystem\n \next4 or Btrfs\n\nMount point\n \n/ \n\nPlanning rule\n \n40–120 GiB\n\nWhy it exists\n \nContains the operating system, applications, logs, and service state.\n\nsudo mkfs.ext4 /dev/nvme0n1p3\n\nInspect its structure\n \nThe root partition is the installed operating system. It may be plain ext4 or an outer container for LUKS, LVM, or Btrfs.\n \n/etc configuration  \nMachine identity, service config, network config, package sources.\n  /usr programs  \nMost installed binaries, libraries, and shared resources.\n  /var mutable state  \nLogs, caches, databases, package state, and service data.\n  Storage layer optional  \nLUKS encryption, LVM logical volumes, or Btrfs subvolumes can sit inside this GPT partition.\n\n05 · recovery copy \nBackup GPT closes the disk\n \nGPT repeats its partition-entry array and header at the physical end of the device. The backup header swaps the current and alternate LBA pointers but preserves the same disk identity and usable range.\n \nThis redundancy can repair damaged front metadata, but it is not a backup of files or filesystem structures. Always capture real data separately, and verify the target device before writing partition tables.\n\nInspect the structure \nBackup GPT header and recovery fields\n \nThis matrix maps the backup GPT header sector at the final LBA. It mirrors the primary header but swaps current and alternate locations.\n  \nSignature 0x000-0x007, EFI PART  \nASCII bytes that identify this sector as a GPT header.\n  Revision 0x008-0x00B  \nGPT revision, commonly 00 00 01 00 for revision 1.0.\n  Header size 0x00C-0x00F  \nSize of the valid header region, usually 92 bytes.\n  Header CRC32 0x010-0x013  \nCRC32 of the backup header with this field zeroed while calculating.\n  Reserved 0x014-0x017  \nMust be zero.\n  Current LBA 0x018-0x01F  \nLocation of this backup header: the final LBA on the disk.\n  Primary LBA 0x020-0x027  \nLocation of the primary GPT header, normally LBA 1.\n  First usable LBA 0x028-0x02F  \nFirst LBA that may be used by real partitions.\n  Last usable LBA 0x030-0x037  \nLast LBA that may be used by real partitions.\n  Disk GUID 0x038-0x047  \nSame disk GUID recorded in the primary GPT header.\n  Backup entry array LBA 0x048-0x04F  \nStarting LBA of the backup partition-entry array near the disk end.\n  Entry count 0x050-0x053  \nNumber of partition entries reserved in the array.\n  Entry size 0x054-0x057  \nSize of each partition entry, usually 128 bytes.\n  Entry array CRC32 0x058-0x05B  \nCRC32 covering the backup partition-entry array.\n  Header padding 0x05C-0x1FF  \nUnused bytes in the 512-byte sector. They must be zero.","title":"Linux Disk Layout","url":"https://mayphus.org/linux-disk/"},{"aliases":[],"id":"page:/mahjong/","metadata":{"kind":"artifact","language":"en","route":"/mahjong/","type":"page"},"summary":"Racket-powered local four-player Mahjong prototype.","text":"Mahjong\n\nRacket-powered local four-player Mahjong prototype.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Games (https://mayphus.org/games/) \n\nArchive state\n \nactive old domain\n\nSource\n \n~/my.backup/0/mahjong \n\nVisibility\n \npublic archive shell","title":"Mahjong","url":"https://mayphus.org/mahjong/"},{"aliases":["project:map"],"id":"page:/map/","metadata":{"category":"tool","id":"map","kind":"tool","language":"en","route":"/map/","tags":["maps","openstreetmap","cities"],"type":"project"},"summary":"Describe places to find in any city, then generate a safe, bounded OpenStreetMap layer on a real basemap.","text":"Describe the map you need\n\nAsk for places in any city. AI interprets the request, then a bounded OpenStreetMap query draws the result on a real basemap.\n\nDrag to pan · wheel to zoom\n \n© OpenStreetMap contributors (https://www.openstreetmap.org/copyright) \n\nTry “parks in London”, “wheelchair-accessible museums in Paris”, or simply a city name.\n\nA practical map workflow\n\n- Describe the request.  Type a place and subject in ordinary language. A city name by itself defaults to parks.\n\n- Keep it bounded.  AI chooses only from approved OpenStreetMap categories, filters, and a 2–20 km radius; server code builds the actual query.\n \n- Read the result.  The OpenStreetMap basemap keeps every generated feature grounded in streets, water, boundaries, and surrounding places.\n \n- Move through the result.  Drag the map to pan and use the mouse wheel or trackpad to zoom.\n\nCity search and map data come from OpenStreetMap contributors. AI interprets intent but never emits or executes raw Overpass code.","title":"Natural Language City Map","url":"https://mayphus.org/map/"},{"aliases":[],"id":"page:/mathematics/","metadata":{"kind":"artifact","language":"en","route":"/mathematics/","type":"page"},"summary":"Numeric visualizations, surfaces, meshes, curves, and interactive 3D.","text":"Racket Mathematics and 3D\n\nNumeric visualizations, surfaces, meshes, curves, and interactive 3D.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Math Lab (https://mayphus.org/math-lab/) \n\nArchive state\n \nunregistered archive project\n\nSource\n \n~/my.backup/0/mathematics \n\nVisibility\n \npublic archive shell","title":"Racket Mathematics and 3D","url":"https://mayphus.org/mathematics/"},{"aliases":["project:milk-teeth"],"id":"page:/milk-teeth/","metadata":{"category":"study","id":"milk-teeth","kind":"artifact","language":"en","route":"/milk-teeth/","tags":["timeline","animation"],"type":"project"},"summary":"Animated primary-tooth eruption timeline for all 20 milk teeth.","text":"Milk teeth\n\nHow all 20 primary teeth emerge between roughly six and twenty-nine months.\n\nEruption happens in overlapping waves\n \nThe first lower central incisors usually appear near six months. Other incisors follow, then first molars and canines, while the second molars complete the primary set near the end of the second year.\n\nPrimary dentition\n\n6 months estimated age \n\nUpper right second molar  Upper right first molar  Upper right canine  Upper right lateral incisor  Upper right central incisor  Upper left central incisor  Upper left lateral incisor  Upper left canine  Upper left first molar  Upper left second molar  \n\nLower right second molar  Lower right first molar  Lower right canine  Lower right lateral incisor  Lower right central incisor  Lower left central incisor  Lower left lateral incisor  Lower left canine  Lower left first molar  Lower left second molar  \n\n  6 months incisors molars + canines 29 months   \n\nPrimary teeth 20 \n \nTypical window 6–29 months \n \nSequence Incisors → molars → canines → second molars \n\n6 months Lower central incisors \n \n10–13 months Central and lateral incisors \n \n16–20 months First molars and canines \n \n27–29 months Second molars","title":"Milk Teeth","url":"https://mayphus.org/milk-teeth/"},{"aliases":["project:motif"],"id":"page:/motif/","metadata":{"category":"study","id":"motif","kind":"artifact","language":"en","route":"/motif/","tags":["generative","drawing","patterns"],"type":"project"},"summary":"A restored Racket drawing DSL explored through geometric and decorative motifs.","text":"Motif\n\nA small Racket language for composing borders, lattices, medallions, cloud forms, vessels, knots, and other reusable drawing ideas.\n\nSpiral Cloud  Spiral Cloud A dense circular cloud study built from the motif DSL.   (https://mayphus.org/motif/spiral-cloud.svg) Jade Mask  Jade Mask A symmetrical mask assembled from reusable geometric primitives.   (https://mayphus.org/motif/jade-mask.svg) Antique Border  Antique Border A circular meander border generated from one repeated unit.   (https://mayphus.org/motif/antique-motif.svg) \n\nA language, not a picture folder\n \nThe archive defines reusable points, paths, circular repetition, palettes, and roughly twenty named motif modules. These three outputs were regenerated directly from that code for this migration.","title":"Motif","url":"https://mayphus.org/motif/"},{"aliases":[],"id":"page:/music-fountain/","metadata":{"kind":"artifact","language":"en","route":"/music-fountain/","type":"page"},"summary":"Declarative water, pump, color, and music-synchronized choreography.","text":"Music Fountain\n\nDeclarative water, pump, color, and music-synchronized choreography.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Performance Studio (https://mayphus.org/performance-studio/) \n\nArchive state\n \nseed-stage old domain\n\nSource\n \n~/my.backup/0/music-fountain \n\nVisibility\n \npublic archive shell","title":"Music Fountain","url":"https://mayphus.org/music-fountain/"},{"aliases":["project:nano-pi-teardown"],"id":"page:/nano-pi-teardown/","metadata":{"category":"artifact","id":"nano-pi-teardown","kind":"artifact","language":"en","route":"/nano-pi-teardown/","tags":["nanopi","hardware","teardown"],"type":"project"},"summary":"Hardware teardown note from the Nano Pi stream: open the enclosure, remove the SD card, inspect RK3328, RAM, Ethernet chips, USB-C, reset, debug pins, and power-management markings.","text":"Nano Pi teardown\n\nA short hardware teardown pass for a Nano Pi device: open the enclosure, remove the SD card, expose the board, and identify the visible chips, ports, debug pins, and power path.\n\nStatus\n \nDocumented\n\nDate\n \nJune 12, 2026\n\nResult\n \nThe board layout, RK3328, dual Ethernet path, power-management marking, and likely TTL service points are recorded.\n\nEvidence\n \nTeardown stream (https://www.youtube.com/watch?v=volOJQ8SNNI) \n\nNext\n \nVerify the marked TX1 and RX1 pins against a live board and capture boot output.\n\n Thumbnail from the Nano Pi teardown stream.  \n\nSummary\n \nThe transcript turns the stream into a board-level inspection note: how the case opened, what chips were visible, and which service points were worth recording.\n\nNano Pi board. \nThe stream tears down a compact Nano Pi device and exposes the board after the SD card is removed.\n\nRockchip RK3328. \nThe main SoC is identified during inspection, with nearby memory and storage-related footprints checked next.\n\nTwo Ethernet ports and chips. \nThe board has two Ethernet ports, visible Ethernet chips, USB-C, a reset button, and an SD-card slot.\n\nTTL and power points noted. \nThe teardown finds TX1/RX1 markings, power points, LED indicators, and a power-management chip marking.\n\nSteps\n\n- \nStart the stream workflow: main computer for notes, phone camera for hand work, and desk view for context.\n\n- \nRemove the label/case cover, then remove the SD card before forcing the board out.\n\n- \nExpose the board and identify the Rockchip RK3328 SoC, memory, SD-card slot, USB-C, and reset button.\n\n- \nCompare the board with reference images to label the debug port, LEDs, Ethernet chips, and unmounted flash footprint.\n\n- \nRecord service points: RK805-style power-management marking, power pads, and TX1/RX1 TTL pins.","title":"Nano Pi Teardown","url":"https://mayphus.org/nano-pi-teardown/"},{"aliases":["project:nanopi-r2s-alpine-boot","article:nanopi-r2s-alpine-boot"],"id":"page:/nanopi-r2s-alpine-boot/","metadata":{"category":"artifact","date":"2026-08-19T00:00:00Z","id":"nanopi-r2s-alpine-boot","kind":"article","language":"en","locale":"en","route":"/nanopi-r2s-alpine-boot/","slug":"nanopi-r2s-alpine-boot","tags":["nanopi","rk3328","alpine linux","uart","embedded"],"type":"article"},"summary":"An evidence-led NanoPi R2S investigation: isolate an unreliable UART path, identify a wrong Rockchip image, boot Alpine Linux, and map the RK3328 SD-card chain.","text":"From silent UART to a working NanoPi R2S\n\nAugust 19, 2026 · RK3328 · UART · Alpine Linux\n \nToday I brought a NanoPi R2S from a completely silent serial console to a verified Alpine Linux boot. The board was healthy. Two independent problems had hidden that fact: an intermittent USB–TTL path and a 64 GB SD card flashed with an image for the wrong Rockchip family.\n\nThe result\n \nWith a replacement serial adapter and the correct official FriendlyELEC RK3328 image, the board spoke immediately at 1,500,000 baud. The log identified a NanoPi R2S, U-Boot 2017.09, Linux 6.6.134+, and Alpine Linux 3.23.4. I had left the UART VCC pin disconnected and used only ground plus crossed TX and RX, so the adapter observed the board without trying to power it.\n\nHardware\n \nNanoPi R2S Rockchip RK3328 and 1 GB RAM \n\nSerial proof\n \n1,500,000 baud Dedicated 3.3 V debug UART \n\nBooted system\n \nAlpine 3.23.4 Linux 6.6.134+ after U-Boot 2017.09 \n\nStorage after first boot\n \n58.9 GiB userdata Backup GPT repaired and userdata expanded \n\nHow the silence was isolated\n\n- Start with the instrument. The first USB–TTL adapter and jumper path behaved intermittently in loopback, so silence at the board could not yet be trusted as evidence about the board.\n\n- Replace one uncertain link. A replacement adapter passed repeated loopbacks at both 115200 and 1,500,000 baud. That made the serial path a known-good measuring tool.\n \n- Inspect the boot medium. The original SD card contained a Rockchip image from the RK3588 family, not an R2S/RK3328 image. Its early boot code could never match this chip.\n \n- Build and verify the right image. I assembled and flashed the official FriendlyELEC RK3328 Alpine image, then compared the boot-critical region byte-for-byte before putting the card into the board.\n \n- Read the first real evidence. U-Boot appeared over UART, Linux continued, Alpine reached its login environment, and the system reported the correct board identity.\n\nThe important shift was treating every link as a separate hypothesis. A silent terminal did not mean a dead board; it meant only that the complete path had not yet produced readable bytes.\n\nWhat actually boots\n \nAn SD card for this board is not just a Linux filesystem. The RK3328 begins with code built into the chip, then reads several board-specific stages from raw locations on the card before it can start a kernel.\n\n- 01 \nBoot ROM Fixed inside the RK3328 \n\n- 02 \nIDB loader Raw early loader on the SD card \n\n- 03 \nTrusted firmware Prepares the secure handoff \n\n- 04 \nU-Boot Finds and starts the operating system \n\n- 05 \nLinux + device tree Kernel plus the R2S hardware description \n\n- 06 \nAlpine root filesystem The installed userspace \n\n- 07 \nOpenRC services SSH and other configured services \n\nEach stage only needs to load the next one. Seeing the U-Boot banner proves stages 1–4 before Linux or the root filesystem is involved.\n\nWhat is on the SD card\n \nThe working card combines raw boot components, small support regions, a compact Alpine system, and a large data partition. On first boot the image repaired the backup GPT at the end of the larger card and grew userdata to use the remaining space.\n\nEarly boot raw area IDB loader, trusted firmware, U-Boot \n \nBoot support small regions misc, DTBO, resources, kernel and boot files \n \nAlpine rootfs about 448 MiB The compact operating system \n \nuserdata about 58.9 GiB Expanded on first boot \n\nConceptual rather than to scale: the tiny raw boot regions at the front matter just as much as the visible filesystems.\n\nA quiet, healthy first boot\n \nI kept the first health pass read-only. The board reported about 946 MB of total memory with about 851 MB available, a temperature near 44 °C, and low load. Configured services, including SSH, started. Both Ethernet ports correctly showed no carrier because no cables were attached. The hardware clock was old, and the remaining boot warnings were nonfatal defaults rather than failed hardware.\n \nSSH being ready is useful, but it also sets the next safety boundary: the vendor-default root password must be changed before either Ethernet port is connected. I am deliberately not recording that password here.\n\nThe lesson I will reuse\n \nA U-Boot banner over UART is already a strong milestone. It proves that the RK3328 Boot ROM found the raw loader, trusted firmware ran, and U-Boot started. A Linux kernel and root filesystem are not required to reach that point.\n \nThe three UART wires can stay fixed while I experiment with operating systems, but the software side is not interchangeable. Each image must enable the correct serial console and may need its own loader, firmware, U-Boot, kernel, and device tree.\n\nNext experiments\n \nUbuntu, Debian, OpenWrt, and FreeBSD are all useful next directions; FreeBSD's current hardware notes include both RK3328 and NanoPi R2S. I will use one separate SD card per operating system and preserve today's Alpine card unchanged as the recovery baseline. That turns a successful investigation into a dependable way back.","title":"From silent UART to a working NanoPi R2S","url":"https://mayphus.org/nanopi-r2s-alpine-boot/"},{"aliases":[],"id":"page:/network/","metadata":{"kind":"artifact","language":"en","route":"/network/","type":"page"},"summary":"Public-safe graph view of the Mayphus home LAN topology.","text":"Home Network\n\nPublic-safe graph view of the Mayphus home LAN topology.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Infrastructure (https://mayphus.org/infrastructure/) \n\nArchive state\n \nactive old domain\n\nSource\n \n~/my.backup/0/network \n\nVisibility\n \npublic archive shell","title":"Home Network","url":"https://mayphus.org/network/"},{"aliases":["project:openlens","article:openlens"],"id":"page:/openlens/","metadata":{"category":"artifact","date":"2026-08-14T00:00:00Z","id":"openlens","kind":"article","language":"en","locale":"en","route":"/openlens/","slug":"openlens","tags":["ai","computer vision","android","multilingual","local-first"],"type":"article"},"summary":"Building a portable multilingual learning companion, testing offline vision on Android, and keeping model uncertainty visible.","text":"OpenLens: a local-first camera that admits what it does not know\n\nPortable C++ · Android · offline vision · multilingual learning\n \nI built OpenLens as a small experiment in object-led learning: point a camera at something real, identify what it might be, and ask a child one warm discovery question in a chosen language. The interesting result was not perfect recognition. It was finding a useful boundary between what a small local model reports and what the product should claim.\n\nThe working proof\n \nOpenLens now has a portable C++17 core, a command-line simulator, data-driven English, Simplified Chinese, and Spanish language packs, and a thin Android host running on an MI 8. The phone provides the camera and offline model; it does not own the learning decisions or translated prompts.\n\nLanguages\n \n3 packs English, Simplified Chinese, and Spanish \n\nRecognition\n \n1,000 classes MobileNetV3-Small INT8 ImageNet vocabulary \n\nPrivacy\n \nCamera only No network or microphone permission \n\nTest hardware\n \nMI 8 A real Android device, not an emulator \n\n01 See One visible, user-triggered camera capture \n  \n02 Recognize Offline MobileNet inference on the phone \n  \n03 Filter The portable core applies confidence and label rules \n  \n04 Ask A short discovery question from the chosen language pack \n\nThe recognizer proposes an answer; the learning interaction remains a separate, portable decision.\n\nFrom product idea to portable experiment\n\n- \nStart with the interaction. \nResearch a child-focused camera companion, then reduce the idea to a real object, a possible label, and one curious question.\n\n- \nKeep the core portable. \nMove the state machine, recognition contract, prompts, and language packs into C++17 so a phone remains a test body rather than the architecture.\n\n- \nLeave the wrong test path. \nTry an iOS shell, encounter certificate and platform-support friction, remove the discontinued host, and keep the portable work.\n\n- \nUse Android as the instrument. \nBuild a lean command-line Android toolchain, connect the shared core through JNI, and install the app on a physical phone.\n\n- \nReplace mocks with evidence. \nPackage a checksum-pinned MobileNet model, add a live preview and explicit capture, and learn from the model's actual behavior.\n\nWhen almost everything became ‘window screen’\n \nObserved on the MI 8 window screen 41.5–44.8% confidence \n \nThe label sounded like a software error, but it was an ImageNet category. MobileNet was not finding an object inside the frame. It was center-cropping the photograph to 224 × 224 and choosing one label for the whole image from its fixed vocabulary. Repeated textures and background detail could therefore dominate the object I intended to show it.\n \nA changed, ambiguous view produced ‘chainlink fence’ at 23.7%. That observation led to a measured Android threshold of 40%: stable results could continue into the learning flow, while weak results asked for another picture. The threshold makes the behavior testable; it does not make the classifier understand an open world.\n\nTwo audiences, two kinds of honesty\n \nThe parent-facing result card always keeps the raw English model class and confidence visible. The child-facing interaction is more conservative. Known concepts such as apple and book retain their curated translated questions; familiar harmless labels can enter a localized generic question; obscure, malformed, or inappropriate labels are withheld and replaced by a label-free prompt.\n\nParent sees\n \nThe model's exact class, confidence, and whether OpenLens accepted or retried it.\n\nChild hears or reads\n \nA curated question, a safe generic question, or an invitation to look again—never invented certainty.\n\nWhat the physical phone revealed\n\n- Packaging The first APK contained TensorFlow Lite but omitted the model because an asset override excluded its directory.\n\n- Execution XNNPACK could not prepare this static INT8 graph on the MI 8, so the host uses the compatible path.\n \n- Tensor layout The model expected channel-first INT8[1,3,224,224] input rather than the assumed channel-last layout.\n \n- Device behavior Speech initialization was made lazy, and the diagnostic build ultimately kept prompts visible without initializing TTS.\n \n- Camera boundary The preview begins only after a user action; recognition happens only when Take picture & discover is tapped, and the captured JPEG is not persisted.\n\nCurrent verified boundary\n\nWhat works\n \nThe shared core and language packs validate locally; the Android host runs one-shot offline MobileNet inference, routes recognized classes through the real core, and presents conservative multilingual discovery prompts.\n\nWhat this does not prove\n \nReliable general object recognition, object detection, translated names for every ImageNet class, speech-and-listening interaction, or deployment on Raspberry Pi, ESP32, Linux, or an RTOS.\n   \nAndroid proved the interaction and exposed the model's limits. The next meaningful step is not polishing one mistaken label. It is comparing a stronger classifier or moving to object detection or open-vocabulary vision, then measuring whether that improvement is practical on the hardware OpenLens is eventually meant to inhabit.","title":"OpenLens: a local-first camera that admits what it does not know","url":"https://mayphus.org/openlens/"},{"aliases":["project:origami"],"id":"page:/origami/","metadata":{"category":"study","id":"origami","kind":"artifact","language":"en","route":"/origami/","tags":["geometry","folding"],"type":"project"},"summary":"Origami crease geometry and generated folding-step study.","text":"Origami\n\nSquare paper, valley folds, mountain folds, generated crease SVGs, and step-by-step folding diagrams.\n\nFour-fold foundation\n \nTwo diagonal valley folds and two center mountain folds describe a compact base pattern.\n\nCrease grammar\n \nNamed fold families such as diagonal, book, kite, petal, wing, neck, and head.\n\n01 Valley \nMark diagonal references across the square.\n\n02 Mountain \nAdd book folds through the center axes.\n\n03 Kite \nPull corners toward the center structure.\n\n04 Petal \nResolve smaller folds into a bird-base form.","title":"Origami","url":"https://mayphus.org/origami/"},{"aliases":[],"id":"page:/people-counter/","metadata":{"kind":"artifact","language":"en","route":"/people-counter/","type":"page"},"summary":"Small macOS people-counting utility experiment.","text":"People Counter\n\nSmall macOS people-counting utility experiment.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Robotics & Vision (https://mayphus.org/robotics-vision/) \n\nArchive state\n \nseed-stage old domain\n\nSource\n \n~/my.backup/0/people-counter \n\nVisibility\n \npublic archive shell","title":"People Counter","url":"https://mayphus.org/people-counter/"},{"aliases":["project:periodic-table"],"id":"page:/periodic-table/","metadata":{"category":"study","id":"periodic-table","kind":"tool","language":"en","route":"/periodic-table/","tags":["chemistry","reference"],"type":"project"},"summary":"Square-cell periodic table with search, category focus, and click-to-inspect element details.","text":"Periodic Table\n \nSearch, focus a category, or select any of the 118 elements for details","title":"Periodic Table","url":"https://mayphus.org/periodic-table/"},{"aliases":[],"id":"page:/physics/","metadata":{"kind":"artifact","language":"en","route":"/physics/","type":"page"},"summary":"Projectile-flight visualization with quadratic drag.","text":"Interactive Artillery\n\nProjectile-flight visualization with quadratic drag.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Science Lab (https://mayphus.org/science-lab/) \n\nArchive state\n \nunregistered archive project\n\nSource\n \n~/my.backup/0/physics \n\nVisibility\n \npublic archive shell","title":"Interactive Artillery","url":"https://mayphus.org/physics/"},{"aliases":[],"id":"page:/pixel/","metadata":{"kind":"artifact","language":"en","route":"/pixel/","type":"page"},"summary":"Pixel-art DSL, palette, renderer, overview generator, and artwork catalog.","text":"Pixel\n\nPixel-art DSL, palette, renderer, overview generator, and artwork catalog.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Visual Drawing Lab (https://mayphus.org/visual-lab/) \n\nArchive state\n \nunregistered archive project\n\nSource\n \n~/my.backup/0/pixel \n\nVisibility\n \npublic archive shell","title":"Pixel","url":"https://mayphus.org/pixel/"},{"aliases":[],"id":"page:/pkg/","metadata":{"kind":"artifact","language":"en","route":"/pkg/","type":"page"},"summary":"Package-management and installation workflow experiments.","text":"Package Tool\n\nPackage-management and installation workflow experiments.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n\nArchive state\n \nseed-stage old domain\n\nSource\n \n~/my.backup/0/pkg \n\nVisibility\n \npublic archive shell","title":"Package Tool","url":"https://mayphus.org/pkg/"},{"aliases":["project:polychron"],"id":"page:/polychron/","metadata":{"category":"study","id":"polychron","kind":"artifact","language":"en","route":"/polychron/","tags":["history","timeline","chinese"],"type":"project"},"summary":"Chinese regnal-era conversion and a generated timeline spanning 505 historical eras.","text":"Polychron\n\nChinese regnal years become comparable calendar time: 505 eras, reversible conversion, and a generated dynasty timeline.\n\n康熙六十一年 1722 CE Chinese numeral parsing \n \n1722 CE 康熙61年（清） Reverse lookup \n \n505 era records Searchable historical dataset \n\nChinese regnal timeline\n \n Open full SVG (https://mayphus.org/polychron/full-timeline.svg)  \n\nSearch   Dynasty All dynasties  \n\nExplore the timeline\n \nClick a colored era bar to inspect its dates and dynasty. Drag horizontally to pan; use the wheel or controls to zoom.\n\nLoading 505 era records…\n\nWhat was preserved\n \nThe original Racket work includes parsing, CE conversion in both directions, batch conversion, dynasty grouping, and SVG generation. This restored page keeps the historical dataset and its largest visual artifact visible while the converter remains preserved in the source archive.","title":"Polychron","url":"https://mayphus.org/polychron/"},{"aliases":[],"id":"page:/profile/","metadata":{"kind":"profile","language":"en","route":"/profile/","type":"page"},"summary":"Experienced across CI/CD platforms, production operations, Linux systems, networking, and embedded hardware. At State Street, supported an internal delivery platform spanning GitHub Enterprise, Jenkins shared libraries, Ansible, AWS, databases, and Databricks, tracing failures across build, scan, approval, release, and deployment stages. Earlier roles covered physical and virtual infrastructure, VPNs, containers, reverse proxies, databases, and board-level camera and recorder repair. Strongest at turning incomplete signals into a clear failing boundary, a safe recovery plan, and a reusable operational handoff.","text":"Mayphus Tang\n\nHangzhou, China\n\nResume PDF (https://mayphus.org/profile/Mayphus_Meifa_Tang_CV.pdf) Email (mailto:tangmeifa@gmail.com) GitHub (https://github.com/mayphus) \n\nProfessional Summary\n \nExperienced across CI/CD platforms, production operations, Linux systems, networking, and embedded hardware. At State Street, supported an internal delivery platform spanning GitHub Enterprise, Jenkins shared libraries, Ansible, AWS, databases, and Databricks, tracing failures across build, scan, approval, release, and deployment stages. Earlier roles covered physical and virtual infrastructure, VPNs, containers, reverse proxies, databases, and board-level camera and recorder repair. Strongest at turning incomplete signals into a clear failing boundary, a safe recovery plan, and a reusable operational handoff.\n\nCore Skills\n\nSystems\n \nLinux, FreeBSD, TCP/IP, routing/firewalls, DNS/TLS, incident troubleshooting, ZFS\n\nCI/CD & Automation\n \nJenkins, GitHub Enterprise, Ansible, YAML, Bash, Python, Racket, release troubleshooting\n\nCloud & Platform\n \nAWS, EC2, Alibaba Cloud, Kubernetes, KVM, Docker/Podman, Databricks\n\nProfessional Experience\n\n- 2022 - 2025 \nDevOps / CI/CD Platform Engineer \nState Street Technology (Zhejiang) Co., Ltd.\n \nTechnical environment:  GitHub Enterprise, Jenkins shared libraries, YAML, Ansible, AWS, EC2, databases, Databricks\n\n- Supported engineering teams using an internal CI/CD and self-service deployment platform built on GitHub Enterprise, Jenkins shared libraries, YAML, Ansible, and release approval gates.\n\n- Investigated failures across build, security scanning, approval, release, and AWS deployment stages, including EC2, database, and Databricks workflows.\n \n- Correlated pipeline logs, shared-library behavior, configuration, automation output, application dependencies, and infrastructure state to isolate the failing layer.\n \n- Documented root cause, ownership boundary, safe workaround, reproduction path, and next action so teams could recover without relying on raw logs alone.\n\nCI/CD Failure Analysis Method\n\n- Start with the failed stage and its nearest authoritative signal: source or YAML input, shared-library execution, scan result, approval state, automation output, or downstream service response.\n\n- Compare expected inputs and outputs across adjacent stages to isolate the boundary between application configuration, delivery-platform behavior, automation, and dependent infrastructure.\n \n- Before recommending a retry, verify the current release state, the downstream resource condition, and whether the original failure left partial work that changes the recovery path.\n \n- Summarize each investigation as evidence, reproduction path, affected boundary, safe workaround, responsible owner, and next action rather than forwarding raw logs alone.\n\n- 2020 - 2022 \nInfrastructure Operations Engineer \nHangzhou Fuzamei Tech Ltd.\n \nTechnical environment:  Linux, physical and virtual servers, Docker, Nginx, OpenVPN, WireGuard, monitoring, databases, blockchain\n\n- Operated physical servers, virtual machines, cloud resources, office networks, VPNs, domains, and TLS certificates as one production service estate.\n \n- Managed routing, firewalls, OpenVPN, WireGuard, monitoring, Docker build environments, Nginx, databases, and the runbooks used for daily delivery.\n \n- Supported deployment of blockchain-backed NFT and inclusive-finance services, covering reverse-proxy routing, database setup, service configuration, and release verification.\n \n- Diagnosed deployments end to end across network, host, container, application, and data layers before production handoff.\n \n- Converted working configurations and verification commands into repeatable operating and recovery procedures.\n\nInfrastructure Deployment Verification Method\n\n- Model a deployment as one service path: domain and certificate, routing and firewall policy, VPN or public reachability, reverse proxy, host, container or process, application, and database.\n \n- Verify the path from the outside inward so a healthy local process is not mistaken for a reachable and production-ready service.\n \n- When a check fails, move to the adjacent layer and distinguish connectivity, host state, runtime execution, application behavior, and data dependency before changing configuration.\n \n- Use production-readiness checks to confirm routing, certificate validity, service configuration, database access, monitoring visibility, and the expected external response.\n \n- Capture the final working state, verification commands, rollback or recovery steps, and ownership notes in a reusable runbook.\n\n- 2018 - 2019 \nTechnical Support / Camera, NVR & DVR Repair Engineer \nZhejiang Dahua Vision Technology Co., Ltd.\n \nTechnical environment:  Linux, ARM, HiSilicon, u-boot, TCP/IP, FTP, cameras, NVR, DVR, embedded hardware\n\n- Diagnosed and repaired cameras, NVRs, DVRs, servers, and network-connected embedded systems used in customer deployments.\n \n- Separated hardware, firmware, storage, boot, and network faults across Linux, ARM, HiSilicon, u-boot, TCP/IP, and FTP environments.\n \n- Performed board-level component replacement and full startup, storage, networking, recording, and device-function validation before return to service.\n\nEmbedded Device Diagnostic Method\n\n- Use a fixed diagnostic order: power and board condition, bootloader and boot progress, firmware, storage, network configuration, service connectivity, then device-specific functions.\n \n- Classify the first abnormal stage before replacing components, separating boot-chain, firmware, storage, configuration, hardware, and connectivity faults.\n \n- Use TCP/IP reachability and FTP transfer results as independent evidence so network or deployment-environment problems are not misclassified as device failure.\n \n- After a repair, repeat the full startup path and validate storage, networking, recording, and device-specific behavior rather than checking only the repaired component.\n \n- Apply the same sequence across cameras, recorders, servers, and other network-connected embedded devices while adapting the final functional checks to the equipment type.\n\nSelected Public Work\n\n- Infrastructure (https://mayphus.org/infrastructure/) \nOperate a public system across Kubernetes, KVM, Podman, Cloudflare, and private service tunnels with deliberately bounded health reporting.\n\n- Alpine Builder (https://mayphus.org/alpine-builder/) \nBuilt repeatable Alpine root filesystem and bootable image workflows for NanoPi boards.\n\n- Starflash (https://mayphus.org/starflash/) \nCreated a safety-oriented macOS flashing tool with device validation, dry runs, and explicit write confirmation.\n\n- Input Method Builder (https://mayphus.org/typing/) \nGenerated Rime and Yuanshu packages, keyboard previews, and downloads.\n\nEducation\n\nMechanical Design, Manufacturing and Automation 2014 - 2018 \n \nChangsha University\n\n- Built embedded and Linux systems through projects involving ROS robotics, 8051 MCU control, OpenWrt firmware, and Linux kernel module customization.\n\n- Combined mechanical, electronics, and software skills in engineering competitions and smart-agriculture automation projects.\n\nLanguages & Credentials\n \nChinese (native), English (CET-4), NCRE Level 2","title":"Profile","url":"https://mayphus.org/profile/"},{"aliases":[],"id":"page:/profile/zh/","metadata":{"kind":"profile","language":"zh-Hans","route":"/profile/zh/","type":"page"},"summary":"具备 CI/CD 平台、生产运维、Linux 系统、网络及嵌入式硬件经验。在道富信息科技支持内部交付平台，技术范围涵盖 GitHub Enterprise、Jenkins 共享库、Ansible、AWS、数据库和 Databricks，并排查构建、扫描、审批、发布及部署各阶段故障。此前负责物理与虚拟基础设施、VPN、容器、反向代理、数据库，以及摄像机和录像设备的板级维修。擅长从不完整信号中确认故障边界，制定安全恢复方案，并沉淀为可复用的运维交接资料。","text":"汤美法\n\n中国杭州\n\n简历 PDF (https://mayphus.org/profile/%E6%B1%A4%E7%BE%8E%E6%B3%95_%E7%AE%80%E5%8E%86.pdf) 邮件 (mailto:tangmeifa@gmail.com) GitHub (https://github.com/mayphus) \n\n个人概况\n \n具备 CI/CD 平台、生产运维、Linux 系统、网络及嵌入式硬件经验。在道富信息科技支持内部交付平台，技术范围涵盖 GitHub Enterprise、Jenkins 共享库、Ansible、AWS、数据库和 Databricks，并排查构建、扫描、审批、发布及部署各阶段故障。此前负责物理与虚拟基础设施、VPN、容器、反向代理、数据库，以及摄像机和录像设备的板级维修。擅长从不完整信号中确认故障边界，制定安全恢复方案，并沉淀为可复用的运维交接资料。\n\n核心技能\n\n系统\n \nLinux, FreeBSD, TCP/IP, 路由/防火墙, DNS/TLS, 故障排查, ZFS\n\nCI/CD 与自动化\n \nJenkins, GitHub Enterprise, Ansible, YAML, Bash, Python, Racket, 发布故障排查\n\n云与平台\n \nAWS, EC2, 阿里云, Kubernetes, KVM, Docker/Podman, Databricks\n\n工作经历\n\n- 2022 - 2025 \nDevOps / CI/CD 平台工程师 \n道富信息科技（浙江）有限公司\n \n技术环境： GitHub Enterprise、Jenkins 共享库、YAML、Ansible、AWS、EC2、数据库、Databricks\n\n- 支持工程团队使用基于 GitHub Enterprise、Jenkins 共享库、YAML、Ansible 和发布审批关卡的内部 CI/CD 与自助部署平台。\n\n- 排查构建、安全扫描、审批、发布及 AWS 部署阶段的故障，覆盖 EC2、数据库和 Databricks 工作流。\n \n- 综合流水线日志、共享库行为、配置、自动化输出、应用依赖和基础设施状态，确认实际故障层。\n \n- 记录根因、责任边界、安全绕过方案、复现路径和下一步行动，帮助团队在不依赖原始日志转发的情况下恢复。\n\nCI/CD 故障分析方法\n\n- 先确认失败阶段及其最接近的权威信号：源码或 YAML 输入、共享库执行、安全扫描结果、审批状态、自动化输出或下游服务响应。\n\n- 对照相邻阶段的预期输入与实际输出，定位应用配置、交付平台行为、自动化过程和依赖基础设施之间的故障边界。\n \n- 在建议重试前，检查当前发布状态、下游资源条件，以及原始失败是否留下会改变恢复路径的部分执行结果。\n \n- 将调查结果整理为支撑证据、复现路径、影响边界、安全绕过方案、责任方和下一步行动，而非仅转发原始日志。\n\n- 2020 - 2022 \n基础设施运维工程师 \n杭州复杂美科技有限公司\n \n技术环境： Linux、物理与虚拟服务器、Docker、Nginx、OpenVPN、WireGuard、监控、数据库、区块链\n\n- 将物理服务器、虚拟机、云资源、办公网络、VPN、域名和 TLS 证书作为一套生产服务环境统一运维。\n \n- 维护路由、防火墙、OpenVPN、WireGuard、监控、Docker 构建环境、Nginx、数据库及日常交付手册。\n \n- 支持 NFT 与普惠金融等区块链相关服务部署，负责反向代理路由、数据库初始化、服务配置和发布验证。\n \n- 在生产交接前跨网络、主机、容器、应用和数据层执行端到端故障排查。\n \n- 将有效配置和验证命令沉淀为可重复执行的运维与恢复流程。\n\n基础设施部署验证方法\n\n- 将部署建模为一条完整服务路径：域名与证书、路由与防火墙策略、VPN 或公网可达性、反向代理、主机、容器或进程、应用和数据库。\n \n- 从外向内验证整条路径，避免将本地进程正常误判为服务已具备外部可达性和生产就绪条件。\n \n- 当检查失败时转向相邻层，先区分连接、主机状态、运行时执行、应用行为和数据依赖，再修改配置。\n \n- 通过生产就绪检查确认路由、证书有效性、服务配置、数据库访问、监控可见性和预期的外部响应。\n \n- 将最终有效状态、验证命令、回滚或恢复步骤及责任说明记录到可复用的运维手册中。\n\n- 2018 - 2019 \n技术支持 / 摄像机、NVR 与 DVR 维修工程师 \n浙江大华科技有限公司\n \n技术环境： Linux、ARM、海思、u-boot、TCP/IP、FTP、摄像机、NVR、DVR、嵌入式硬件\n\n- 诊断并维修客户部署中的摄像机、NVR、DVR、服务器及联网嵌入式系统。\n \n- 在 Linux、ARM、海思、u-boot、TCP/IP 和 FTP 环境中区分硬件、固件、存储、启动及网络故障。\n \n- 执行板级元件更换，并在返还设备前验证完整启动、存储、网络、录像和设备功能。\n\n嵌入式设备诊断方法\n\n- 采用固定诊断顺序：供电与板卡状态、引导程序与启动进度、固件、存储、网络配置、服务连接，最后检查设备特定功能。\n \n- 在更换元件前先确认第一个异常阶段，区分启动链、固件、存储、配置、硬件和连接故障。\n \n- 将 TCP/IP 可达性和 FTP 传输结果作为独立证据，避免把网络或部署环境问题误判为设备故障。\n \n- 维修后重新执行完整启动路径，并验证存储、网络、录像和设备特定行为，而非只检查已维修元件。\n \n- 将同一诊断顺序应用于摄像机、录像机、服务器及其他联网嵌入式设备，并根据设备类型调整最终功能检查。\n\n公开作品\n\n- Infrastructure (https://mayphus.org/infrastructure/) \n运营一套涵盖 Kubernetes、KVM、Podman、Cloudflare 和私有服务隧道的公开系统，并以严格边界发布健康状态。\n\n- Alpine Builder (https://mayphus.org/alpine-builder/) \n为 NanoPi 开发可重复构建的 Alpine 根文件系统与可启动镜像流程。\n\n- Starflash (https://mayphus.org/starflash/) \n开发面向安全的 macOS 镜像写入工具，包含设备校验、试运行和明确写入确认。\n\n- Input Method Builder (https://mayphus.org/typing/) \n生成 Rime 与元书输入法包、键盘预览和下载。\n\n教育背景\n\n机械设计制造及其自动化 2014 - 2018 \n \n长沙学院\n\n- 通过 ROS 机器人、8051 MCU 控制、OpenWrt 固件和 Linux 内核模块定制等项目构建嵌入式与 Linux 系统。\n\n- 在工程训练竞赛和智慧农业自动化项目中综合应用机械、电子和软件能力。\n\n语言与资质\n \n中文（母语）, 英语（CET-4）, 全国计算机等级考试二级","title":"Profile Chinese","url":"https://mayphus.org/profile/zh/"},{"aliases":["project:roku-remote-over-tailscale","article:roku-remote-over-tailscale"],"id":"page:/roku-remote-over-tailscale/","metadata":{"category":"note","date":"2026-07-16T00:00:00Z","id":"roku-remote-over-tailscale","kind":"article","language":"en","locale":"en","route":"/roku-remote-over-tailscale/","slug":"roku-remote-over-tailscale","tags":["roku","tailscale","homelab"],"type":"article"},"summary":"How any available Wi-Fi, manual IP entry, and Tailscale made the official Roku app remote work from outside home.","text":"A Roku remote through Tailscale\n\nMy daughter's grandma called while I was outside the house. She wanted me to stop a show on the Roku, but she could not find the remote. I had my phone, Tailscale was connected, and the Roku app looked like the obvious answer.\n \nAt first the app refused to enable its remote without Wi-Fi. Tailscale could route traffic to my home network, but it did not make mobile data look like Wi-Fi to the Roku app.\n \nChatGPT suggested the missing combination: connect the phone to any available Wi-Fi so the app enables its remote, then bypass discovery by entering the Roku's home IP address manually. The Wi-Fi connection satisfied the app's local check; it did not need to be my home Wi-Fi.\n \nI connected the phone to another Wi-Fi network, kept Tailscale connected, opened Devices help, chose Connect manually, and entered the living-room Roku's private IP address.\n\n- Any Wi-Fi enables the remote \n\n- Roku app Connect manually \n \n- Home IP bypasses discovery \n \n- Tailscale routes traffic home \n \n- Roku :8060 receives the command \n\nThat worked. The official Roku app connected to the Roku at home, and its remote controls worked while I was outside. I could stop the show for Grandma without a separate web remote or exposing the Roku to the public internet.\n \nEach part solved a different restriction. Wi-Fi made the Roku app show and enable the remote. Manual entry avoided local multicast discovery, which did not cross the route. Tailscale carried the ordinary connection to the Roku's private address on the home LAN.\n \nFor this to keep working, the Roku needs a stable IP address and must allow mobile-app control. A DHCP reservation keeps the address from changing. The Roku remains private; traffic still travels through Tailscale.\n \nWhat I remember is the shape of the workaround: Grandma needed a show stopped, the remote was missing, and I was not home. One question to ChatGPT revealed that the app's Wi-Fi check and the actual network path were separate problems. Any Wi-Fi satisfied the first, manual IP entry solved discovery, and Tailscale solved the distance.","title":"A Roku remote through Tailscale","url":"https://mayphus.org/roku-remote-over-tailscale/"},{"aliases":[],"id":"page:/ros2/","metadata":{"kind":"artifact","language":"en","route":"/ros2/","type":"page"},"summary":"ROS 2 environment and robotics experiments.","text":"ROS 2\n\nROS 2 environment and robotics experiments.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Robotics & Vision (https://mayphus.org/robotics-vision/) \n\nArchive state\n \nseed-stage old domain\n\nSource\n \n~/my.backup/0/ros2 \n\nVisibility\n \npublic archive shell","title":"ROS 2","url":"https://mayphus.org/ros2/"},{"aliases":["project:router-service-tailscale-jump-recovery","article:router-service-tailscale-jump-recovery"],"id":"page:/router-service-tailscale-jump-recovery/","metadata":{"category":"note","date":"2026-06-09T00:00:00Z","id":"router-service-tailscale-jump-recovery","kind":"article","language":"en","locale":"en","route":"/router-service-tailscale-jump-recovery/","slug":"router-service-tailscale-jump-recovery","tags":["ops","tailscale","router"],"type":"article"},"summary":"A short operations note on recovering a router service through an independent Tailscale jump host when direct access is gone.","text":"Router service recovery through a Tailscale jump\n\nToday a router-side service that helps me reach home went down. The awkward part was that this service is also part of the path I normally use to get back home, so direct access to the router was unavailable from outside.\n \nThe useful foothold was a small home server that was still online as a Tailscale node. It could still see the router on the home LAN. That made the recovery path simple: connect to the independent Tailscale node, then jump from there to the router's local management address.\n\nssh -J user@tailscale-node admin@router-lan-address\n\nOnce on the router, the fix was not a rebuild or a config migration. It was just the boring manual action that mattered: restart the service and confirm it came back.\n\n/etc/init.d/network-service restart\n/etc/init.d/network-service status\n\nThe important lesson is not the exact IP pair. It is the shape of the access path: keep at least one independent Tailscale node inside the home network that is not the router itself. If the router's proxy or exit path fails, that node can still act as a jump host for emergency maintenance.\n \nThis is also a reminder that \"remote access works\" should not mean \"the router is the only way in.\" The router is infrastructure under repair; it should not be the only tool available to repair itself.","title":"Router service recovery through a Tailscale jump","url":"https://mayphus.org/router-service-tailscale-jump-recovery/"},{"aliases":[],"id":"page:/rubik/","metadata":{"kind":"artifact","language":"en","route":"/rubik/","type":"page"},"summary":"Rubik's Cube mathematics and rendering experiments.","text":"Rubik\n\nRubik's Cube mathematics and rendering experiments.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Math Lab (https://mayphus.org/math-lab/) \n\nArchive state\n \nseed-stage old domain\n\nSource\n \n~/my.backup/0/rubik \n\nVisibility\n \npublic archive shell","title":"Rubik","url":"https://mayphus.org/rubik/"},{"aliases":[],"id":"page:/semina/","metadata":{"kind":"artifact","language":"en","route":"/semina/","type":"page"},"summary":"Plain-text AI coding tool and Emacs bridge experiments.","text":"Semina\n\nPlain-text AI coding tool and Emacs bridge experiments.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n\nArchive state\n \nseed-stage old domain\n\nSource\n \n~/my.backup/0/semina \n\nVisibility\n \npublic archive shell","title":"Semina","url":"https://mayphus.org/semina/"},{"aliases":[],"id":"page:/shop/","metadata":{"kind":"artifact","language":"en","route":"/shop/","type":"page"},"summary":"Archived Cloudflare shop prototype with route and binding declarations.","text":"Shop Prototype\n\nArchived Cloudflare shop prototype with route and binding declarations.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Commerce Lab (https://mayphus.org/commerce-lab/) \n\nArchive state\n \narchived prototype\n\nSource\n \n~/my.backup/0/shop \n\nVisibility\n \npublic archive shell","title":"Shop Prototype","url":"https://mayphus.org/shop/"},{"aliases":[],"id":"page:/show/","metadata":{"kind":"artifact","language":"en","route":"/show/","type":"page"},"summary":"Shared timeline for lights, fountains, drones, music, and performance channels.","text":"Integrated Show\n\nShared timeline for lights, fountains, drones, music, and performance channels.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Performance Studio (https://mayphus.org/performance-studio/) \n\nArchive state\n \nseed-stage old domain\n\nSource\n \n~/my.backup/0/show \n\nVisibility\n \npublic archive shell","title":"Integrated Show","url":"https://mayphus.org/show/"},{"aliases":["project:so-101-simulator"],"id":"page:/so-101-simulator/","metadata":{"category":"artifact","id":"so-101-simulator","kind":"artifact","language":"en","route":"/so-101-simulator/","tags":["robotics","mujoco","lerobot","computer vision","simulation","hardware"],"type":"project"},"summary":"A working record from camera-guided MuJoCo learning to agent-assisted physical SO-101 setup, calibration, and fault isolation.","text":"Robot: from simulation to SO-101 hardware\n\nMuJoCo · LeRobot · physical SO-101\n \nThis is my working record of taking one robot from a camera-guided MuJoCo task into learned control and then into careful, measured physical bring-up.\n\nThe visible wrist-camera marker makes the perception loop inspectable: search, see, approach, pick, and place.\n\nFrom motion to perception\n \nThe project began with scripted joint motion: useful for proving that the simulated arm and gripper could complete a physical pick-and-place sequence, but dependent on already knowing where everything was.\n \nThe next steps moved that knowledge into the wrist camera. First the controller used camera observations to guide the approach. Then it learned to search actively when the cube or target was outside the current view. If an object is not visible, the arm holds safely instead of continuing on a blind assumption.\n\nTask-session progression\n\n- \nScripted motion. \nProve the arm, gripper, and pick-and-place sequence in MuJoCo.\n\n- \nCamera guidance. \nUse the wrist RGB view to guide the cube approach and target placement.\n\n- \nActive search. \nMove the wrist view deliberately until the cube or target becomes visible; hold safely while it is unseen.\n\n- \nRandomized validation. \nRun the complete behavior across 18 hidden upright-cube locations in the verified workspace.\n\nLearning without skipping the evidence\n \nThe deterministic controller became an expert-data generator. I trained ACT policies in stages rather than asking one model to learn grasp, lift, transport, and release at once. A grasp-and-lift policy and a separate transport-and-place policy were evaluated behind a measured handoff: bilateral gripper contact and a 60 mm lift had to be true before placement could begin.\n \nThe selected placement checkpoint completed five of five default-pose trials and four of four randomized handoff-gated trials in closed-loop MuJoCo. That is useful simulation evidence, not permission to run the policy on hardware; real demonstrations, limits, and supervised progressive tests still come first.\n\nRandomized validation\n \n18 / 18 successful hidden-location runs \n \nEach run placed an upright red cube at a hidden location inside the calibrated reachable zones. The controller had to search from the wrist camera view and complete the pick-and-place task. All 18 runs succeeded.\n\nInteractive simulator controls\n\n- 6 \nRandomize Move the cube to another valid hidden location. \n\n- 7 \nRun Start the camera-guided search and pick-and-place sequence. \n\n- 8 \nReset Return the simulator to its initial state. \n\n- 9 \nWrist view Toggle the wrist RGB camera view and its visible marker. \n\nA new workflow: agent-assisted physical bring-up\n \nThe useful change was not handing the robot to an AI. It was pairing an AI agent that can inspect software and controller state with a human who remains the physical sensor and safety authority. This shortened the path from an assembled arm to an evidence-backed diagnosis without blurring what either side had actually verified.\n\n- \nDescribe the boundary. \nThe human confirms the arm is clamped, supported, clear, and authorizes one precisely bounded action.\n\n- \nInspect reality. \nThe agent finds the serial device and reads motor IDs, firmware, position, and torque state before any write.\n\n- \nAct minimally. \nOnly the approved motor or official calibration step runs, with conservative limits and guaranteed torque release.\n\n- \nObserve physically. \nThe human identifies the moving joint, guides the manual range sweep, and stops anything unexpected.\n\n- \nVerify and record. \nThe agent checks readback, calibration ranges, and torque-off state, then records the exact verified boundary.\n\nAgent work\n \nTranslate the next safe goal into the official tool, perform read-only audits, isolate mismatches, orchestrate bounded tests, preserve cleanup paths, and keep an evidence trail.\n\nHuman work\n \nSecure and support the arm, watch and feel the mechanism, move joints by hand when prompted, inspect cables and boards, isolate a failed motor, replace parts, and control physical power.\n   \nFollower motor ID 1 shows the boundary clearly. The agent established that ID 1 did not communicate while IDs 2–6 remained healthy and torque-off; the human then investigated the physical chain, confirmed the motor problem, and ordered its replacement. Software evidence can narrow the fault, but a person must distinguish and repair the motor, cable, connector, power, or drive-board failure at the mechanism.\n\nPhysical SO-101 bring-up — August 2026\n \nThe two-arm hardware is now assembled. I brought it up one boundary at a time: serial communication, physical motor mapping, calibration, torque-off verification, and passive calibrated sensing. Every mapping test energized exactly one supported joint for one bounded move and verified torque release immediately afterward.\n\nLeader\n \nAll six motors communicate on matching firmware. The physical map is confirmed, official calibration completed, calibrated readings respond to hand movement, and torque-off was verified after the session.\n\nFollower\n \nIts saved calibration has plausible ranges and motors 2–6 communicate with torque off. Shoulder-pan motor ID 1 has a confirmed hardware problem; a replacement is ordered and paired motion is paused.\n   \nNo leader-to-follower motion test has run. The next step begins only after the replacement shoulder-pan motor is installed, all six follower IDs pass a read-only audit, calibrated readings work, and both arms are secured and supported.\n\nCurrent verified boundary\n\nWhat works\n \nA bounded camera-guided pick-and-place task and staged ACT evaluation in MuJoCo, plus verified leader communication, mapping, calibration, and passive sensing on the physical arm.\n\nWhat this does not claim\n \nGeneral object recognition, obstacle planning, sim-to-real policy transfer, a healthy six-motor follower, or a completed paired-arm hardware task.\n   \nThe useful result is the progression and the stopping discipline: scripted action became camera-guided behavior, then learned stages, then measured hardware bring-up—and the project stops at a failed motor instead of hiding it.","title":"Robot: simulation to SO-101 hardware","url":"https://mayphus.org/so-101-simulator/"},{"aliases":[],"id":"page:/solar-term/","metadata":{"kind":"artifact","language":"en","route":"/solar-term/","type":"page"},"summary":"Twenty-four solar terms visualization.","text":"Solar Term Wheel\n\nTwenty-four solar terms visualization.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Chinese Calendar & Symbols (https://mayphus.org/chinese-culture/) \n\nArchive state\n \nactive old domain\n\nSource\n \n~/my.backup/0/solar-term \n\nVisibility\n \npublic archive shell","title":"Solar Term Wheel","url":"https://mayphus.org/solar-term/"},{"aliases":["project:starflash"],"id":"page:/starflash/","metadata":{"category":"tool","id":"starflash","kind":"tool","language":"en","route":"/starflash/","tags":["macos","usb","ubuntu"],"type":"project"},"summary":"Guided macOS SD and USB image flasher CLI with standalone Ubuntu autoinstall support.","text":"Flash a bootable drive without guessing\n\nStarflash is a small command-line guide for turning an image into a bootable USB drive or SD card. It checks the target first, shows a dry run, and waits for an explicit confirmation before writing.\n \nDownload Starflash (https://mayphus.org/downloads/starflash/starflash-cli.txt) ./starflash \n\nRun the guide\n \nUse your own Ubuntu Server ISO or device image. Make the downloaded file executable, then start the guide:\n\nchmod +x starflash\n./starflash\n\nIt asks for the image, the external whole disk, and optional Ubuntu cloud-init settings.\n\nReview before writing\n \nA dry run checks that the image exists, the target is removable, and the image fits. Nothing is erased until you choose the write step and type WRITE .\n\n./starflash --image ubuntu.iso --disk /dev/disk4 --dry-run\n\nUbuntu autoinstall, when you need it\n \nStarflash can add NoCloud seed data to Ubuntu installation media. The target computer can then finish its setup without depending on your MacBook or an Ethernet connection.\n \n Scripted commands \n\nsudo ./starflash --image ubuntu.iso --disk /dev/disk4 --write --yes\n\n./starflash --ubuntu-autoinstall --seed-dir cidata --render-seed","title":"Starflash","url":"https://mayphus.org/starflash/"},{"aliases":["project:status"],"id":"page:/status/","metadata":{"category":"tool","id":"status","kind":"tool","language":"en","route":"/status/","tags":["status","operations","cloudflare"],"type":"project"},"summary":"Public site inventory and coarse runtime health.","text":"Status\n\nPublic site inventory and coarse runtime health.\n\nPublic\n \nChecking public inventory.\n\nroutes -- \n \nfeatures -- \n \nlinked --","title":"Status","url":"https://mayphus.org/status/"},{"aliases":[],"id":"page:/sudoku/","metadata":{"kind":"artifact","language":"en","route":"/sudoku/","type":"page"},"summary":"Sudoku board, solver, puzzle, and web experiments.","text":"Sudoku\n\nSudoku board, solver, puzzle, and web experiments.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Games (https://mayphus.org/games/) \n\nArchive state\n \nseed-stage old domain\n\nSource\n \n~/my.backup/0/sudoku \n\nVisibility\n \npublic archive shell","title":"Sudoku","url":"https://mayphus.org/sudoku/"},{"aliases":["project:sugar-from-a-soldier","article:sugar-from-a-soldier"],"id":"page:/sugar-from-a-soldier/","metadata":{"category":"note","date":"2026-07-30T00:00:00Z","id":"sugar-from-a-soldier","kind":"article","language":"en","locale":"en","route":"/sugar-from-a-soldier/","slug":"sugar-from-a-soldier","tags":["family history","second sino-japanese war","jacar","guangji","wuxue"],"type":"article"},"summary":"Testing a grandmother’s memory of Japanese soldiers giving sweets to children in wartime Liu Yuan against Japanese and international records.","text":"Sugar from a soldier\n\nMy grandmother remembered that, when she was a child, Japanese soldiers gave sugar or sweets to local children in Liu Yuan, a village in wartime Guangji County, Hubei. I wanted to know whether surviving records could place that memory inside documented history.\n \nA Japanese military officer giving caramels to a group of Chinese children in Jiangnan on November 6, 1937. \nA Japanese military officer giving caramels to Chinese children in Jiangnan, 6 November 1937. Photograph by Hamano Yoshio, published by Asahi Shimbun in 1938. This is a historical parallel, not a photograph of Liu Yuan or my grandmother. Source and public-domain record (https://commons.wikimedia.org/wiki/File:Chinese_children_receive_caramels01.jpg) .\n\nThe place in her memory\n \nThe village is 刘元村刘元垸, now in Dajin Town, Wuxue City. During the war it belonged to Guangji County. Earlier research places Liu Yuan near the Dajinpu–Tashuiqiao–Jiulongcheng–Lianglukou corridor, west of Huangmei and north of the Yangtze port at Wuxue.\n \nThe archival problem is scale. Japanese operational files usually name counties, towns, roads, rivers and military objectives, not every small settlement. Searches using 刘元垸 / 劉元垸, 大金铺 / 大金鋪, and 塔水桥 / 塔水橋 have not yet produced a verified Japanese record naming the village itself. Similar-looking search results for Jiulongcheng and Lianglukou often refer to different places.\n \nWhat the records establish\n\n- Direct regional evidence \nOn 15 August 1938, the Japanese 11th Army issued a logistics plan for an advance from Huangmei toward Guangji. It identifies the 6th Division and treats Guangji as an operational objective.\n \nJACAR C11112060800 (https://www.jacar.archives.go.jp/das/meta-en/C11112060800) \n\n- Independent contemporary evidence \nA United States diplomatic report dated 28 September 1938 recorded Japanese naval landing forces at Wuxue on 17 September.\n \nForeign Relations of the United States, 1938, volume IV, document 652 (https://history.state.gov/historicaldocuments/frus1938v04/d652) \n\n- Direct regional evidence \nA Japanese artillery regiment produced a detailed report, with maps and diagrams, for the Tianjiazhen and Wuxue battle zone between 15 September and 5 October 1938.\n \nJACAR C13070245100 (https://www.jacar.archives.go.jp/das/meta-en/C13070245100) \n\n- Direct county-level evidence \nA subsequent report explicitly covers combat in Guangji during the Wuhan campaign, 17–22 October 1938.\n \nJACAR C13070245600 (https://www.jacar.archives.go.jp/das/meta-en/C13070245600) \n\n- Later occupation evidence \nA postwar Japanese unit history records that Independent Infantry Battalion 216 moved to Wuxue, Guangji County, on 7 February 1944.\n \nJACAR C12122442700 (https://www.jacar.archives.go.jp/das/meta-en/C12122442700) \n\n- End-of-occupation evidence \nJapanese naval surrender inventories from October 1945 list equipment, boats, fuel, ammunition, communications gear, buildings and provisions at Wuxue. They show that a substantial military establishment remained there at the end of the war.\n \nJACAR C08010861000 and following files (https://www.jacar.archives.go.jp/das/meta-en/C08010861000) \n\nTogether, these records establish Japanese military movement into Guangji and Wuxue in 1938, later guard and garrison activity, and a continuing Japanese presence through surrender in 1945. They make an encounter between local children and Japanese personnel historically possible. They do not tell us which soldiers entered Liu Yuan, on what date, or why one of them offered sweets.\n \nWhy sweets appear in occupation memories\n \nGiving sweets to children was not unique to one village. Japanese wartime photographs and publications repeatedly showed soldiers or pacification personnel interacting gently with Chinese children. These images helped represent military occupation as benevolent. Formal Japanese military guidance also treated propaganda and 宣撫—pacification—as organized work.\n \nA surviving photograph made in Jiangnan on 6 November 1937 is captioned as Chinese children happily receiving caramels from a Japanese military officer. A scholarly study of occupation imagery reproduces another contemporary photograph captioned “Japanese soldiers handing out sweets to Chinese children.” The image appeared within a visual environment that selected or staged reassuring scenes while violence and coercion continued around them.\n\n- Hamano Yoshio, Chinese children receive caramels, 6 November 1937 (https://commons.wikimedia.org/wiki/File:Chinese_children_receive_caramels01.jpg) \n\n- Gary Evans, “The Nanking Atrocity: Still and Moving Images 1937–1944,” 2014 (https://www.cogitatiopress.com/mediaandcommunication/article/viewFile/145/101) \n \n- Japanese Army, Propaganda and Pacification Reference Handbook, September 1939 — JACAR C11110463100 (https://www.jacar.archives.go.jp/das/meta-en/C11110463100) \n \n- JACAR exhibition of the Cabinet Information Department’s Shashin Shūhō, 1938–1945 (https://www.jacar.go.jp/english/exhibition/shuhou-english/home.html) \n\nA remembered gift can therefore have more than one meaning. It may have been a spontaneous gesture by an individual soldier. It may have happened during a patrol, rest stop, village inspection, transport movement or organized pacification visit. Personal kindness and an occupying army’s propaganda system are not mutually exclusive.\n \nWhat the evidence does not prove\n\n- No located primary document yet says that Japanese soldiers distributed sugar in Liu Yuan.\n\n- No located photograph depicts Liu Yuan, my grandmother, or the soldiers she encountered.\n \n- The Jiangnan photograph proves that such scenes occurred and were publicized elsewhere; it cannot identify her event.\n \n- The surviving military records describe operations and institutions more readily than children’s ordinary experiences.\n \n- Her age at the time remains necessary to distinguish the 1938 advance from later occupation years.\n\nMy conclusion so far\n \nMy grandmother’s memory is historically plausible and fits a documented pattern: Japanese forces were present in the Guangji–Wuxue area, and Japanese soldiers or pacification personnel elsewhere gave sweets to Chinese children and publicized similar encounters. But the responsible conclusion stops there. The archive supplies context, not confirmation of her individual moment.\n \nThat limitation is part of the history. A child could remember the taste of sugar for a lifetime while the military archive recorded divisions, supply routes and ammunition. The memory preserves a scale of experience that official records usually leave out.\n \nNext evidence to look for\n\n- Her approximate birth year, age, season, wrapper, setting, and whether interpreters or local officials were present.\n\n- Other accounts from siblings, cousins or elderly residents of Liu Yuan.\n \n- The 6th Division’s detailed narratives and scanned map attachments for the Guangji advance.\n \n- Japanese soldiers’ diaries, regimental histories, photographs and guard-duty records using nearby landmarks rather than Liu Yuan.\n \n- County gazetteers, local historical collections and family genealogies used carefully to bridge village geography to the Japanese operational record.","title":"Sugar from a soldier","url":"https://mayphus.org/sugar-from-a-soldier/"},{"aliases":[],"id":"page:/tcp/","metadata":{"kind":"tool","language":"en","route":"/tcp/","type":"page"},"summary":"Interactive TCP map for connection setup, segment headers, sequence numbers, acknowledgments, windows, retransmission, and teardown.","text":"TCP Explained\n \nOpen the conversation, inspect the segment header, then pan or zoom through the protocol","title":"TCP Explained","url":"https://mayphus.org/tcp/"},{"aliases":[],"id":"page:/tetris/","metadata":{"kind":"artifact","language":"en","route":"/tetris/","type":"page"},"summary":"A compact Racket Tetris game.","text":"Tetris\n\nA compact Racket Tetris game.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Games (https://mayphus.org/games/) \n\nArchive state\n \nseed-stage old domain\n\nSource\n \n~/my.backup/0/tetris \n\nVisibility\n \npublic archive shell","title":"Tetris","url":"https://mayphus.org/tetris/"},{"aliases":["project:tinystories-rp2040","article:tinystories-rp2040"],"id":"page:/tinystories-rp2040/","metadata":{"category":"artifact","date":"2026-08-13T00:00:00Z","id":"tinystories-rp2040","kind":"article","language":"en","locale":"en","route":"/tinystories-rp2040/","slug":"tinystories-rp2040","tags":["ai","rp2040","raspberry pi pico","embedded","tinystories"],"type":"article"},"summary":"Training, quantizing, and physically verifying a tiny Transformer on a custom Raspberry Pi Pico display board through intention-and-observation collaboration with an AI agent.","text":"A TinyStories model on my RP2040 board\n\nTraining · quantization · C inference · physical hardware\n \nI trained a very small language model, converted it into an embedded C runtime, and ran it locally on my custom Raspberry Pi Pico display board. I did not solve the individual technical problems myself. I described what I wanted and what I could see; the AI agent translated that into code, measurements, firmware, and the next test.\n\nThe result\n \nThe final model is a 98,944-parameter byte-level Transformer with a 256-byte context. It was trained on short setup-and-conclusion stories, quantized to INT8 weights, checked against its Python reference through a portable C implementation, and then built into native RP2040 firmware.\n\nModel weights\n \n98,944 bytes INT8 weights, plus 80 bytes of scales \n\nStatic SRAM\n \n143,504 bytes within the RP2040's 264 KiB budget \n\nFirmware image\n \n145,980 bytes native RP2040 flash and code image \n\nPhysical generation\n \n10.394 seconds sentence-aware output on the connected board \n\nFrom intention to a physical result\n\n- \nDescribe. \nI said what I wanted: a TinyStories-style model made specifically for the RP2040, not a larger computer hidden behind it.\n\n- \nInspect reality. \nI connected the board and described what I saw on its screen, buttons, and USB connection. The agent inspected the software and measurements.\n\n- \nImplement. \nThe agent built the Python model, training path, quantization export, numerically checked C runtime, display driver, and firmware.\n\n- \nVerify. \nI supplied the physical observations the computer could not infer: whether the display was blank, whether text appeared, and what happened after I pressed BOOTSEL.\n\n- \nUse. \nThe board now generates a fresh bounded micro-story locally at startup or after a button press.\n\nMy contribution was not pretending to be the firmware engineer. It was holding the intention, making the decisions, connecting the physical world, and describing reality accurately enough for the next step. The working loop was: describe, inspect reality, implement, verify, use.\n\nWhat ran where\n \nTraining ran on my Apple M1 Mac, because training a Transformer is not the job of this microcontroller. The completed quantized model and inference runtime run on the RP2040 itself. Story generation does not call a cloud model or another computer.\n \nThe 256-byte model trained for 10,000 steps on 18,522 derived micro-stories. Its final validation loss was 0.7502 and perplexity was 2.1175. A scaled INT16 key-value cache made the longer context fit in SRAM, while the display driver draws glyphs directly over SPI instead of reserving a framebuffer.\n\nCaptured from the physical board\n\nTINYSTORIES_RP2040_READY\nmodel_state_bytes=138244\nDISPLAY_READY\nSTORY_BEGIN\nOnce upon a time, there was a big treest of animals.\nSTORY_END\nbytes=52 generation_ms=10394\n\nThe language is imperfect, and I am keeping that visible. This is a deployment proof for a genuinely tiny model, not a claim that a 99K-parameter storyteller matches a large language model.\n\nWhat this proves\n \nThe physical board executed the quantized Transformer, initialized its ST7789 display, generated a learned story ending locally, and displayed the result. Earlier tests also verified that pressing and releasing BOOTSEL triggered a different generation without rebooting.\n \nIt does not prove that the model was trained on the Pico, that its writing is generally coherent, or that an AI can observe physical hardware without a person. The achievement is the complete collaboration: a person can direct a real embedded-AI project through intention and observation while an agent handles the technical path and preserves an evidence trail.","title":"A TinyStories model on my RP2040 board","url":"https://mayphus.org/tinystories-rp2040/"},{"aliases":["project:tp-link-security-camera-investigation"],"id":"page:/tp-link-security-camera-investigation/","metadata":{"category":"artifact","id":"tp-link-security-camera-investigation","investigation":{"current_answer":"Two cameras still show IR and pan/tilt life; the opened unit maps the hardware, while UART remains silent.","date":"June 22, 2026","evidence":[{"body":"LED changes, reset response, IR activity, and pan/tilt movement reveal which subsystems still receive power.","title":"Power shows behavior."},{"body":"Both intact cameras still show IR and pan/tilt movement at power-on, so they can be compared before another teardown.","title":"Two units remain useful comparisons."},{"body":"The opened camera exposes the main PCB, camera module, motors, audio parts, SD-card slot, IR board, light sensor, UART pads, and power conversion.","title":"One unit is the hardware reference."},{"body":"The USB-TTL follow-up produced no boot output, narrowing the next work toward power rails and boot-state measurements.","title":"UART silence is evidence."}],"id":"tp-link-security-camera-investigation","next_action":"Power-check the remaining cameras, confirm rails, and capture the result before attempting deeper repair.","public_boundary":"Only selected teardown observations and measurements are public; no live room view, credentials, network identifiers, or private device data are published.","question":"What still works inside these three failed cameras, and which power or boot fault best explains the remaining failures?","status":"Active investigation","uncertainty":"The remaining rail voltages and boot state have not been measured, so a power fault, stalled boot, or failed main processor is not yet distinguished.","updated":"2026-07-31","workflow":"next"},"kind":"artifact","language":"en","route":"/tp-link-security-camera-investigation/","tags":["electronics","camera","teardown","embedded"],"type":"project"},"summary":"Curiosity teardown note for three TP-Link security cameras: power-on observations, reset and app behavior, internal modules, UART wiring, and hardware design clues.","text":"3 TP-Link Security Cameras\n\nWhat still works inside these three failed cameras, and which power or boot fault best explains the remaining failures?\n\nStatus\n \nActive investigation\n\nDate\n \nJune 22, 2026\n\nResult\n \nTwo cameras still show IR and pan/tilt life; the opened unit maps the hardware, while UART remains silent.\n\nEvidence\n \nPower-on stream (https://www.youtube.com/watch?v=ctq6cGv6m04) Teardown stream (https://www.youtube.com/watch?v=EXk1gPWJxCI) UART follow-up (https://www.youtube.com/watch?v=-YcUGU2FZdU) \n\nNext\n \nPower-check the remaining cameras, confirm rails, and capture the result before attempting deeper repair.\n\n Opened TP-Link security camera during the investigation stream.  \nDisassembly context from the stream: the camera is opened first as an object to understand, not a repair target.\n\n Full circular TP-Link camera PCB on a wooden desk.  \nBoard view: the complete circular PCB after it is out of the camera shell.\n\nSummary\n \nThe investigation keeps the known evidence, uncertainty, public boundary, and next physical experiment together.\n\nPower shows behavior. \nLED changes, reset response, IR activity, and pan/tilt movement reveal which subsystems still receive power.\n\nTwo units remain useful comparisons. \nBoth intact cameras still show IR and pan/tilt movement at power-on, so they can be compared before another teardown.\n\nOne unit is the hardware reference. \nThe opened camera exposes the main PCB, camera module, motors, audio parts, SD-card slot, IR board, light sensor, UART pads, and power conversion.\n\nUART silence is evidence. \nThe USB-TTL follow-up produced no boot output, narrowing the next work toward power rails and boot-state measurements.\n\nWhat remains uncertain. \nThe remaining rail voltages and boot state have not been measured, so a power fault, stalled boot, or failed main processor is not yet distinguished.\n\nPublic boundary. \nOnly selected teardown observations and measurements are public; no live room view, credentials, network identifiers, or private device data are published.\n\nSteps\n\n- \nPower on each camera, press reset, watch LEDs, and see whether the motor still moves.\n\n- \nUse app pairing and network discovery as quick clues about what part of the system may still be alive.\n\n- \nOpen the roughest unit as a physical guide for snap locations, board layout, and how the camera is assembled.\n\n- \nCheck UART pads as a curiosity path into the boot process, not as a promise that the camera needs to be repaired.\n\nHardware map\n \nmain PCB camera module stepper motor speaker microphone SD-card slot IR LED board light sensor UART pads power conversion","title":"3 TP-Link Security Cameras","url":"https://mayphus.org/tp-link-security-camera-investigation/"},{"aliases":[],"id":"page:/trime/","metadata":{"kind":"artifact","language":"en","route":"/trime/","type":"page"},"summary":"Android Rime theme, schema, and configuration collection.","text":"Trime\n\nAndroid Rime theme, schema, and configuration collection.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Input Method Builder (https://mayphus.org/typing/) \n\nArchive state\n \nunregistered archive project\n\nSource\n \n~/my.backup/0/trime \n\nVisibility\n \npublic archive shell","title":"Trime","url":"https://mayphus.org/trime/"},{"aliases":["project:typing"],"id":"page:/typing/","metadata":{"category":"tool","id":"typing","kind":"tool","language":"en","route":"/typing/","tags":["rime","yuanshu","input-method"],"type":"project"},"summary":"Rime and Yuanshu input-method builder with live keyboard previews and downloadable packages.","text":"Input Method Builder\n\nChoose an input method and keyboard layout, inspect the generated keyboard, then build a Rime or Yuanshu package.\n\nBuild a package\n\nFlypy 9-Key\n \nA compact Yuanshu layout that groups QWERTY rows for phone input.\n \ndouble pinyin Rime Yuanshu \n\nFlypy 9-Key","title":"Input Method Builder","url":"https://mayphus.org/typing/"},{"aliases":["project:unicode"],"id":"page:/unicode/","metadata":{"category":"tool","id":"unicode","kind":"tool","language":"en","route":"/unicode/","tags":["unicode","characters","reference"],"type":"project"},"summary":"Wide Unicode character browser and inspector.","text":"Unicode Map\n \nBrowse all 17 Unicode planes, zoom into assigned ranges, and inspect individual code points\n\nUnicode · choose a plane\n\nChoose a plane to begin","title":"Unicode Map","url":"https://mayphus.org/unicode/"},{"aliases":["project:unix-timeline"],"id":"page:/unix-timeline/","metadata":{"category":"study","id":"unix-timeline","kind":"artifact","language":"en","route":"/unix-timeline/","tags":["unix","history","systems"],"type":"project"},"summary":"A maintained Unix lineage chart extended through 2026 with refreshable release labels.","text":"Unix Timeline\n\nResearch Unix, BSD, Linux, macOS, Solaris, and their branching relationships—preserved at full detail and extended through 2026.\n\nFrom 1969 to 2026\n \n Open full SVG (https://mayphus.org/unix-timeline/unix-timeline.svg?v=20260710-theme-aware)  Unix and Unix-like operating system family timeline  (https://mayphus.org/unix-timeline/unix-timeline.svg?v=20260710-theme-aware) \n\nMaintained geometry\n \nThe generator preserves the original detailed arrows and labels, extends active system bars and the time axis, and normalizes fonts for stable local rendering.\n\nRefreshable versions\n \nRelease labels live separately from chart geometry. FreeBSD, NetBSD, OpenBSD, Darwin, macOS, GNU/Hurd, Minix, Linux, and Solaris can be refreshed without redrawing the lineage.","title":"Unix Timeline","url":"https://mayphus.org/unix-timeline/"},{"aliases":[],"id":"page:/vertical-book/","metadata":{"kind":"artifact","language":"en","route":"/vertical-book/","type":"page"},"summary":"Traditional vertical Chinese book-layout DSL and PDF renderer.","text":"Vertical Book\n\nTraditional vertical Chinese book-layout DSL and PDF renderer.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Chinese Book Lab (https://mayphus.org/chinese-book-lab/) \n\nArchive state\n \nunregistered archive project\n\nSource\n \n~/my.backup/0/vertical-book \n\nVisibility\n \npublic archive shell","title":"Vertical Book","url":"https://mayphus.org/vertical-book/"},{"aliases":[],"id":"page:/voronoi/","metadata":{"kind":"artifact","language":"en","route":"/voronoi/","type":"page"},"summary":"Voronoi diagram generator and example output.","text":"Voronoi\n\nVoronoi diagram generator and example output.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Math Lab (https://mayphus.org/math-lab/) \n\nArchive state\n \nunregistered archive project\n\nSource\n \n~/my.backup/0/voronoi \n\nVisibility\n \npublic archive shell","title":"Voronoi","url":"https://mayphus.org/voronoi/"},{"aliases":[],"id":"page:/wallpapers/","metadata":{"kind":"artifact","language":"en","route":"/wallpapers/","type":"page"},"summary":"Rotating Oxford 3000 word wallpaper built with Racket.","text":"English Word Wallpaper\n\nRotating Oxford 3000 word wallpaper built with Racket.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Language Learning (https://mayphus.org/language-learning/) \n\nArchive state\n \nunregistered archive project\n\nSource\n \n~/my.backup/0/wallpapers \n\nVisibility\n \npublic archive shell","title":"English Word Wallpaper","url":"https://mayphus.org/wallpapers/"},{"aliases":[],"id":"page:/weshop/","metadata":{"kind":"artifact","language":"en","route":"/weshop/","type":"page"},"summary":"WeChat commerce app with mini program, CloudBase functions, and admin console.","text":"WeShop\n\nWeChat commerce app with mini program, CloudBase functions, and admin console.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Commerce Lab (https://mayphus.org/commerce-lab/) \n\nArchive state\n \nseed-stage old domain\n\nSource\n \n~/my.backup/0/weshop \n\nVisibility\n \npublic archive shell","title":"WeShop","url":"https://mayphus.org/weshop/"},{"aliases":[],"id":"page:/writing/","metadata":{"kind":"artifact","language":"en","route":"/writing/","type":"page"},"summary":"Recovered public-writing source and publishing domain.","text":"Writing\n\nRecovered public-writing source and publishing domain.\n\nPresent before polished\n \nThis archived route remains available while its useful implementation and artifacts move into a clearer public collection.\n \nOpen Home (https://mayphus.org/) \n\nArchive state\n \nactive old domain\n\nSource\n \n~/my.backup/0/writing \n\nVisibility\n \npublic archive shell","title":"Writing","url":"https://mayphus.org/writing/"}],"version":"v1"}
