Notes

The old depth camera was not dead

I 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.

A week of verified loops

This 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.

AI-centered robot stack

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.

Website as working memory

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.

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.

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.

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.

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.

I’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.

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.

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.

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.

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.

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.

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.

ChatGPT 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.

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.

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.

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.

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.

Building mayphus.org Live #2

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.

Today'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.

Looks inside Roku Remote

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.

Forget the superapp. Just let ChatGPT and Codex share memory. Re-explaining the same project to both is unnecessary friction.

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.

I 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.

Look inside a Toddler's Electronic Learning Book

This children’s electronic learning book stopped working.

I 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.

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.

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.

Found 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.

Just investigate 3 broken TP-Link Security Camera #2

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

Inside a broken TP-Link security camera

I bought this broken TP-Link security camera for about $1 to learn how it is built.

Just investigate 3 broken TP-Link Security Camera

Investigating 3 broken TP-Link security cameras bought for about $1 each.

A 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

Discover mayphus.org/han – a Racket-powered web tool I built for creating print-ready 3500-character matrix posters.

Visualizing Every Unicode Character (Plane 0 to 16)

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?

Just 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/

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.

Just powered through a 50 KM ride. 🚴‍♂️✨ Legs on fire, heart full—cycling goals unlocked. #CyclingLife #Endurance

I implemented RP2040 official minimal design. #rp2040 #raspberrypi #raspberrypipico #soldering #diy

This board follows the official RP2040 minimal hardware design from Raspberry Pi.

Soldering an ESP32 PCB: Showcasing Skills Despite a Design Flaw

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

I DIY a mini desk monitor. Just a screen currently, more features will be added. #diyprojects

A YouTube Short.

Made a simple displayer. Used a Raspberry Pi Pico, and 1.69 in LCD. And made my first useful PCB board. #diy #pcb #3dprint

Boring game with accelerometer #diy #diygames #raspberrypizero #mpu6050 #tftdisplay #circuitpython

A YouTube Short.

First day of 2025. Completed my first 3 kilometers running and booted my new Raspberry Pi Zero 2 W.

Witness the Majestic Qiantang River Tidal Bore: Nature’s Ultimate Spectacle!

FreeBSD 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’.

Excited to share my first open source contribution! Just submitted a patch to FreeBSD to fix documentation for thin nullfs jails. #OpenSource #FreeBSD #FirstContribution

Desoldering My First Failed PCB Design: RP2040 Board Teardown

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.

Start to practice free talk. This time with a more freely style, the main goal is output something useful content.

Making Century Egg. Warping lime now, then wait for the magic of time. #centuryegg #chinesefood

A YouTube Short.

Start running again. This time mainly focus on health, and habit building. Ignore speed, ignore marathon.

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

Chinese launch, tomato, eggs and rice. Eat with my big spoon. So delicious. #chinesefood #wfh

A YouTube Short.

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.

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.

Planned a 65.5-kilometer walk from Hangzhou to Zhuji. I made it about 20 or 30 kilometers.

Early Bing Chat and ChatGPT experiments: connecting EdgeGPT to Emacs, then relaying messages between the two chatbots.

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.

Working 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.

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.

These 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.

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.