91 Posts under Mango Paper
Sequoia National Park
In the afternoon before our spontaneous road trip to Sequoia National Park, I discovered a bulge on the front right tire. I immediately called my repair shop Menlo Atherton Auto Repair, and thanks to Anthony, we were able to depart before noon the next day. We stayed for two nights in Three Rivers, close to the south entrance.
The view at our AirBnb in Three Rivers
The first 20 miles entering the park are steep with numerous switchbacks. I drove much more slowly, but with frequent turnouts along the road, it was a pleasantly relaxing experience.
Landscapes in the Sequoia National Park
Snow appeared once we entered the Giant Forest. On a holiday during winter, the parking space near General Sherman are accessible spots only. So we took the shuttle service instead. It ran quite frequently. On the way back to Three Rivers, we saw a spectacular sunset.
∞ Bambu Printer Poop Basket for P1S/P1P/X1C
Bambu Printer Poop Basket for P1S/P1P/X1C
This is an adaptation from this model but with hex holes for better visibility and filament savings.
My Monitor Shelf
I built myself a monitor shelf with a cutout for the stand, so it stays flush on the surface.
Photos of my custom built monitor shelf.
Routers do wonders.
I Migrated My Passwords From Keepassxc to Password.app
I spent about an hour migrating ~500 passwords from KeePassXC to Password.app yesterday. Here is my process:
- Initially, I was afraid the export & import process might lose data (e.g. notes). Since there is no "preview" state in Password.app, if something is missing among my hundreds of records, it's very difficult to find and undo.
- I picked the important ones and migrated them manually.
- Before migrating everything, I did two trial runs to import 10 records at a time and verified that the data were correct.
- After everything was imported, I ended up with ~200 "reused" passwords because I had been using both password managers for a while. Password.app doesn't tell you which records are sharing the same password, and I had to manually check, delete, or merge them.
- I saved a backup copy of the encrypted
.kdbxfile in case something went wrong, though I don't expect to ever need it.
424
Today, April 24, is Global Close Your Rings Day. I did a morning run, then went to the Palo Alto Apple Store to collect this shiny pin:

My rings were all closed later today.
A few years ago, I had a long streak of closing my rings. Then I was on an international flight and lost my streak. Even since, I haven't been able to care closing my rings. But today, 424, feels special enough to start a new streak.
Exactly one year ago, some people decided my team was replaceable and laid us off. Even though I was able to find a job quickly, I don't think I healed that quick. A year and a job later, am I fine now? Maybe my rings in the following months can tell.
On What Drives Me
Recently, I had conversations with several people about what's next for me. When I mentioned making iOS apps in my spare time, they were usually surprised. Totally understandable, after all, my day job is in the Python developer tooling space. iOS apps, consumer products, front end, design... these are so different concepts and require different skills. Am I being inconsistent when I say I'm passionate about supporting Python developers while considering going full-time indie under Mango Umbrella?
Not long ago, this app review of Mango Baby appeared:
Due to some complications, our daughter had to spend time in the NICU when she was born, and when she was released we were told we had to keep close track of her milk intake. With breastfeeding problems related to the NICU stay, we also needed to keep track of my wife's pumping volume.
Enter Mango Baby. I don't know even where to begin. My wife isn't too tech savvy but the beautiful user interface made it easy for her to navigate the app and easily log things. The syncing is seamless, where we can see updates on each other's devices in real time.
Reading these words drives me to continue developing Mango Baby, despite my day job consuming most of my energy and time, and despite our own child being almost 7, well past the age when I needed the app myself. I can’t let Mango Baby rot. Every bit of feedback from new parents reminds me there's a real human behind it, plus the little one(s) they're caring for, potentially in the NICU!
In previous roles, I supported Python for tens of thousands of in-house developers. I know my work, the collective of my lines of code and blobs of documentation have reached most of them. It’s a larger audience than Mango Baby users. Yet what drove me wasn't the numbers but the interactions with these developers. I loved reading and answering their questions, not just because the process helped me to think and identify areas to improve, but also planted motivational seeds in my brain. They made me enjoy my job more, even at times when the work itself became repetitive or unchallenging.
Last year, after my team were laid off, I read so many kind words and reactions from colleagues supporting us (most posted in internal spaces that I technically shouldn't have seen). I still remember them. These images still have an effect in me, even though I had to move on.
I’ve also worked on consumer products reaching hundreds of millions, but never interacted directly with any users. I did enjoy working with my teammates on ambitious projects like rendering Google search results using UIKit, or collaborating with designers on what we can and can’t do as a carrier without the Apple carrier bundle. Yet without direct user interactions, I failed to find long lasting motivations, even though I know my work affected exponentially more lives.
What drives me isn't magnificent or high impact. It is also not something from my inner self, like willpower. I have that sometimes, but willpower runs out. What sustains are the interactions with people, IRL or virtual. These connections drive me forward.
I’m starting a new career chapter soon, a once-in-a-lifetime opportunity. I’m sure the company mission alone will motivate me for a long time, even leave me little to no time for Mango. Still, I hope to find old and new interactions, in or outside of the company, to have a sustained impact in me.
Message to Steve
Dear Steve,
You might have received an email about resetting your Disney+ password. That was me, and I'm sorry! Your account was still signed in on the Samsung TV in Maui, and despite my best 10-minute struggle with the remote, I couldn't figure out how to properly sign you out.
Don't worry, your account was locked so I only saw your name and your thoughtfully chosen avatar (which I really like, by the way!). Eventually, I gave up and decided to delete the app and reinstall it. And just like that, you vanished from my life.
Miss you,
Yilei
Operation AIM
Last week I needed quick access to Python's standard library documentation outside of work. Having built custom URL shortener mappings twice in corporate environments, I really missed the productivity boost from these shortcuts.
Fortunately and also unfortunately, I decided to build it for the third time. In the past, I avoided public availability because the productivity boost also requires a very short url for the shortener. Then I remembered desktop Chrome's custom site shortcuts feature. Once configured, the domain length becomes irrelevant.
You can now use https://mangoumbrella.com/go/<FULLY.QUALIFIED.SYMBOL> to jump directly to Python's standard library reference docs. Here are some examples:
- https://mangoumbrella.com/go/dict.update
- https://mangoumbrella.com/go/typing
- https://mangoumbrella.com/go/typing.Literal
- https://mangoumbrella.com/go/concurrent.futures.ThreadPoolExecutor
To set it up in desktop Chrome, add a new search engine with your preferred keyword (like go) and URL https://mangoumbrella.com/go/%s. Then just type go dict.update in the address bar to get to the docs you need.
Cabel Sasser at the 2024 XOXO Festival
I have always enjoyed Cabel's dedication to his interest, and how he always finds himself in a very deep rabbit hole. The story telling is really good, you have to watch it.
Google’s Alphabet Rebranding Didn’t Actually Fail
In ATP 607, the hosts discussed about Meta's Orion glasses. During the discussion, Marco mentioned that Meta has a pretty overall successful rebranding. John responded with Meta's "renaming is going better than Alphabet for sure". No one will disagree with John here, but it's actually comparing apples and oranges.
Meta is now the company, with Facebook being just one of its products.
On the other hand, Alphabet is a holding company, and Google is both a product and a company under its umbrella. Other companies like Waymo also fall under Alphabet. When Alphabet was formed, it was intentionally designed to not have any products associated with it.
How do I know about this? I worked on Abseil Common Libraries. It's an open-source collection of common C++ and Python libraries widely used by Google internally. The project was funded nine years ago as a result of Alphabet's formation, with the goal of sharing common infrastructures between Google and other Alphabet companies. Because of this mission, the project was initially named Alphabet Common Libraries. C++ used abcl:: as the namespace and Python used abcl as the package name. However during the launch review, the branding team rejected the name as it went against the policy. We had to change the name before the launch. We decided to change one letter to the C++ namespace and Python package so the code refactoring we had to do was easier. The new name is spelled as absl and we walked backwards from the pronunciation of absl to the word abseil.
All I'm trying to say is, Alphabet wasn't a rebranding effort because Alphabet isn't supposed to be a brand. The rebranding didn't actually fail because there is no rebranding in the first place.
Now you might think I'm just defending Google. No. Even though there was no rebranding, everyone thinks this was a failed rebranding attempt. This is what matters. This is actually very on brand of Google that it doesn't do well in PR, marketing, and branding. Meta, on the other hand, is better at this.