- The Long Way to a Small, Angry Planet, Becky Chambers
- The Bright Sword, Lev Grossman
- Half of a Yellow Sun, Chimamanda Ngozi Adichie
- The Singularity Is Nearer, Ray Kurzweil
- We Should All Be Feminists, Chimamanda Ngozi Adichie
- Purple Hibiscus, Chimamanda Ngozi Adichie
- Children of Time, Adrian Tchaikovsky
- Dream Count, Chimamanda Ngozi Adichie
- Good Material, Dolly Alderton
- The Sirens’ Call, Chris Hayes
- Who Is Government?, Michael Lewis
- Genesis, Henry A. Mundie Craig Schmidt Eric Kissinger
- Saturation Point, Adrian Tchaikovsky
- Everything Is Tuberculosis, John Green
- Picks and Shovels, Cory Doctorow
- Old Man’s War, John Scalzi
- The Fault in Our Stars, John Green
- On Tyranny, Timothy Snyder
- If It Bleeds, Stephen King
- The Great Gatsby, F. Scott Fitzgerald
- The Big Short: Inside the Doomsday Machine, Michael M. Lewis
- Ask More, Frank Sesno
- Little brother, Cory Doctorow
- Life 3.0, Max Tegmark
- The Maid, Nita Prose
- Homeland, Cory Doctorow
- On the Road, Jack Kerouac
- The Dispossessed, Úrsula K. Le Guin
- The Mystery Guest, Nita Prose
- The Kite Runner, Khaled Hosseini
- Never Split the Difference, Tahl Voss Chris Raz
- Whalefall, Daniel Kraus
- The Mistletoe Mystery, Nita Prose
- The Maid’s Secret, Nita Prose
- Never Let Me Go, Kazuo Ishiguro
- The Thursday Murder Club, Richard Osman
- The Kaiju Preservation Society, John Scalzi
- The Ghost Brigades, John Scalzi
- The God of the Woods, Liz Moore
- Enshittification: Why Everything Suddenly Got Worse and What to Do About It, Cory Doctorow
- Empire of AI, Karen Hao
- Spill, Cory Doctorow
- All That We See or Seem, Ken Liu
- The Last Colony, John Scalzi
- Zoe’s Tale, John Scalzi
- Where the Axe Is Buried, Ray Nayler
- The Running Man, Stephen King
- The Circle, Dave Eggers
- Omfg, Bees!, Matt Kracht
- Culpability, Bruce Holsinger
Author: doug
If you’ve ever tried to snag a popular California State Parks campsite, you know the frustration: spots get booked months ahead, and then a bunch of them open up only one day before the weekend. That makes it tough to plan, and it leaves campsites sitting unused longer than they need to.
California State Parks is trying to fix that with an updated cancellation and refund policy for reservations made through ReserveCalifornia with arrival dates on and after July 1, 2026.
The key change: refunds now reward earlier cancellations
Here’s the refund schedule the policy spells out (shared exactly so it’s easy to read):
- 7 or more days before your reservation starts: You get all site fees back, minus the cancellation fee.
- 2–6 days before: You lose the first night’s site fee, and the rest is refunded (minus the cancellation fee).
- Less than 2 days before (or no-show): No refund — all fees are forfeited.
A couple important details people will miss if they don’t read closely:
- There’s an $8.25 cancellation fee, and the reservation fee paid at booking is non-refundable.
- “Reservation start” is defined as 12:00 PM on the arrival date (not the campground’s check-in time). To qualify for the “7+ days” full refund tier, you need to cancel by 12:00 PM exactly one week before.
Why this is a good idea
This setup gives people a real reason to cancel earlier if they’re not going to use the site. Instead of waiting until the last minute (when plans change or weather looks bad), the best financial move is to decide at least a week out — which should help campsites reopen sooner for everyone else.
What this means if you’re hunting for a campsite
If you’re hoping to catch someone else’s cancellation, the sweet spot is starting about 7 days before the date you want to go. That’s the point where many people will be motivated to cancel to avoid losing bigger chunks of their payment.
So if you want a Friday night site, start checking the Friday a week before, and keep an eye on openings through the week.
(And if you’re the one holding a reservation you might not use: canceling sooner doesn’t just help your wallet — it helps someone else actually get outside.)
Comments closedIf you ride your bike a lot—commuting, gravel, road, or mountain—your drivetrain is quietly wearing out beneath you. Most of that wear starts with one part: the chain.
The good news? There’s a cheap little tool that can dramatically cut your maintenance costs:

👉 Park Tool CC-3.2 Chain Wear Indicator Amazon
It usually sells for around $11–$16 depending on the shop.
And used right, it can easily save you hundreds of dollars over the life of a bike.
Why “Chain Stretch” Matters (and Why It’s Not Really Stretch)
Chains don’t literally stretch like rubber bands. The pins and rollers wear down over time, which makes the distance between links slightly longer. That tiny elongation means:
- The chain no longer meshes perfectly with the teeth on your cassette and chainring.
- Load gets concentrated on the leading edges of teeth instead of spread evenly.
- Over time, the cassette and chainring teeth get “shark-finned” and worn out.
A worn chain is cheap to replace.
A worn cassette and chainring? Not so much.
Meet the Park Tool CC-3.2
The Park Tool CC-3.2 is a simple “go/no-go” gauge:
- One side measures 0.5% elongation
- The other side measures 0.75% elongation
For modern 11–12 speed drivetrains (like SRAM GX Eagle), most mechanics recommend replacing the chain around 0.5% wear to protect your cassette. Older 8–10 speed systems can usually go a bit further, up to around 0.75%.
How it works:
- Hook one end of the tool into a link.
- Try to drop the opposite end into the chain.
- If the 0.5% side drops in cleanly on an 11/12-speed chain → time to think about a new chain.
- If the 0.75% side also drops in → you’ve waited too long; the cassette is probably already wearing.
That’s it. No math. No measuring. Just “keep” or “replace.”
The Economics: SRAM GX Eagle Example
Let’s put some real numbers on this using a SRAM GX Eagle 12-speed drivetrain, a super common “mid-pack” group set.
Approximate street prices (US):
| Part | Approx. Price (USD) |
| Park Tool CC-3.2 chain checker | $12–$16 |
| SRAM GX Eagle 12-speed chain | $35–$45 |
| SRAM GX Eagle XG-1275 cassette | $220–$255 |
| SRAM GX Eagle direct-mount chainring | $40–$50 |
(Of course, prices vary by shop, sale, and region—but these numbers are a realistic ballpark.)
Now let’s look at two riders over 3,000 miles of riding.
Rider A: Uses a Chain Checker, Replaces Chains Early
Rider A checks their chain regularly. On a modern 12-speed drivetrain, a chain can often go roughly 1,000 miles (give or take—conditions matter) before hitting 0.5% wear if it’s cleaned and lubed reasonably well.
So over 3,000 miles, Rider A might use:
- 3 chains × ~$40 each ≈ $120
Because the chains were replaced before they got too worn, the cassette and chainring stay in good shape and don’t need replacing yet.
Total drivetrain wear cost for 3,000 miles: ~$120
Cost per mile:
- 120 ÷ 3000 = 0.04 → about 4¢ per mile
Rider B: Never Checks Chain Wear, Waits Until It Skips
Rider B just rides. No checking. Eventually, the chain gets so long that:
- Shifting starts to feel rough
- The chain skips under load
- The cassette teeth are visibly hooked
At that point, you usually can’t just slap on a fresh chain—
the cassette is worn to match the old chain, and a new chain will skip.
So Rider B ends up needing:
- 1 new chain ≈ $40
- 1 new cassette (XG-1275) ≈ $240
- Possibly 1 new chainring ≈ $45
Total: ~$325
Now do the same cost-per-mile math over those 3,000 miles:
- 325 ÷ 3000 ≈ 0.108 → about 11¢ per mile
The Bottom Line: 4¢ vs 11¢ per Mile
- Rider A (with a $12–$16 chain checker): ~4¢ per mile in wear parts
- Rider B (no checker, just rides it into the ground): ~11¢ per mile
There is also a higher likelihood that the chain will break before the 3000 miles, causing this expense earlier.
Even if the exact numbers shift a bit for your terrain, weight, and riding style, the pattern is clear:
Replacing chains early is dramatically cheaper than replacing chains + cassette + chainring later.
And that $12–$16 Park Tool CC-3.2 pays for itself the first time it saves your cassette. After that, it’s just making you money.
How to Use This Tool in Your Routine
You don’t need to obsessively measure your chain every ride. But building a simple habit makes a big difference:
- If you ride a lot (3–5x per week):Check every 2–3 weeks or roughly every 300–500 miles.
- If you’re an occasional rider:Check once a month or after a few big rides.
- If you ride in mud, rain, or dust:Check more frequently; grit accelerates wear.
A quick routine:
- Wipe down the chain (cleaner chain = more accurate reading).
- Drop in the CC-3.2 on the 0.5% side.
- Read the tool
- If it doesn’t quite drop all the way in → keep riding.
- If it drops in easily on a GX Eagle → order a new chain.
- Swap the chain before it reaches 0.75% wear.
Want to build your own DeskHog but found the official project page lacking in instructions? I did too. Here’s the step-by-step guide I wish I had when I started—complete with photos, links, and tips.
Hardware & Files You’ll Need
From the project README:
- ESP32‑S3 Reverse TFT Feather (Adafruit 5691)
- (Optional) PKCell 552035 LiPo battery (350 mAh) Adafruit
- 3D-printed enclosure, print: 3mf file


Printing the Case
I downloaded the .3mf file and imported it into my 3D printer software. The slicer recommended adding supports, which I did.
I used PLA+ at 0.2mm layer height
Here is what the print looked like:

The print includes 3 pieces:
- Bottom case
- Top case
- Keypad
After printing, I removed the supports and cleaned things up with a knife and sandpaper. The hardest part was getting the keypad to fit cleanly into the top case.
Here’s the final result after cleanup.

Assembling the Hardware
Attach the LiPo battery to the board.

Place both inside the bottom case.

Snap the top case on.

Connect the DeskHog to your computer via USB-C.
Setting Up the Firmware
1. Clone the repo:
git clone https://github.com/PostHog/DeskHog.git
cd DeskHog
2. Install the UV Package Manager (if you don’t have it)
I’m using UV package manager to make this process easier. If you don’t have uv install, here is how:
Install uv
curl -Ls https://astral.sh/uv/install.sh | sh
Or use Homebrew (macOS):
brew install astral-sh/uv/uv
Make sure it’s working:
uv --version
3. Create a Virtual Environment
uv venv
source .venv/bin/activate # macOS/Linux
python -m ensurepip
This creates and activates a fast Python virtual environment.
4. Install PlatformIO, which the project uses to build and flash the firmware:
uv pip install platformio
5. Flash the Firmware
Make sure you’re in the root project folder (where platformio.ini lives), then:
platformio run --target upload
This builds and uploads the firmware using USB (with Auto-DFU support).
6. Power and charge:
To power off: Hold the ● + ▼ buttons.
To power on: Press the reset pad.
Charging is automatic when plugged into USB-C.
What It Does Out of the Box
Once booted, you’ll see:
- ProvisioningCard: Shows a QR code for Wi‑Fi setup
- InsightCard: Displays PostHog data
- FriendCard: A sweet ‘encouragement’ screen featuring Max the hedgehog
Connecting to Wi-Fi
Once powered on, the DeskHog shows a QR code for Wi-Fi setup. Scan it to connect to your network—just pick your SSID and enter the password.

From here you can select your network and enter your password. Once connected you’ll see 2 screens. A screen with: WiFi, IP, Signal, Version and API. And a FriendCard

Add PostHog Insights
Go to the IP address displayed on your DeskHog.

You’ll see the configuration page.

Enter your PostHog Team ID (or Project ID) and a read-only API key.
Add the Insights you want to display.
And you’re done! You now have your own fully functional DeskHog.
Final Thoughts
This was a fun weekend project. If you’re already using PostHog, it’s a nice little dashboard for your desk—and a conversation starter too.
Comments closed
I recently put together a small Python script to automate downloading all the available Kensington Outlook newsletters from the Kensington Community Council website.
I wrote it because I enjoy reading the Outlook on my iPad. Until now, I had to go through the site and manually download each PDF. This script fetches all the PDF links from the site, downloads them to a folder on my Mac, and skips any files that are already downloaded. That folder is synced to my iPad, so I can easily read the latest issues offline.
You can check out the code here:
👉 github.com/dougdiego/py-download-outlook
Setup and usage instructions are in the README.
Comments closed
Have you ever encountered this pop-up when trying to change a file extension?

Are you sure you want to change the extension from “.txt” to “.md”?
If you make this change, your document may open in a different application.
This warning can be helpful, but if you frequently change file extensions and find it unnecessary, you can easily disable it. There are two ways to do this: via the GUI (Graphical User Interface) or the CLI (Command Line Interface).
Disable via GUI
- Open the Finder
- In the menu bar, go to Finder > Settings…
- Click on the Advanced tab.
- Uncheck “Show warning before changing an extension“

Disable via CLI (Terminal)
If you prefer using the command line, you can disable the warning using Terminal commands.
Disable the Warning
defaults write com.apple.finder "FXEnableExtensionChangeWarning" -bool "true" && killall Finder
Enable the Warning Again
defaults write com.apple.finder "FXEnableExtensionChangeWarning" -bool "true" && killall Finder
Check the Current Setting
defaults read com.apple.finder "FXEnableExtensionChangeWarning"
Reset to Default
defaults delete com.apple.finder "FXEnableExtensionChangeWarning" && killall Finder
For more defaults commands, check out: https://macos-defaults.com
Now you can change file extensions freely without interruptions! 🚀
Comments closedThe fuel door on our 2021 Ford Transit broke. Unfortunately, it’s held together by a flimsy plastic piece, which makes it prone to damage.

When I took the van in for a routine service at the Ford dealership, I asked for a quote to fix the fuel door. They quoted me over $600, which included the cost of the door and painting it to match the van. Needless to say, I decided not to get it fixed there.
Later, I did some research online and found that replacement fuel doors could be purchased for around $50. I also came across an excellent video tutorial on YouTube Ford Transit Fuel Door Replacement – YouTube that showed exactly how to replace it.
Parts and Tools Needed
- Transit Fuel Door, Transit Gas Door Assembly + Black Cover – The door assembly with cover.
- Replacement Molding Clip Retainer – Replacement clips in case I broke any (I didn’t)
- Tresalto Auto Trim Removal Tool Kit – Tool to remove panels
- T25 Wrench – I already had one of these.
Here is what the door looked like:

The tools used:

Using the tools, I first unscrewed the T25 Torx screws holding the fuel door and surrounding panels in place. Then, I carefully used the trim removal tools to pop the panels off. The process was straightforward, and none of the clips broke during removal.


I positioned the new fuel door assembly in place, secured it with the Torx screws, and snapped the panels back on. It was a seamless fit, and everything went back together smoothly.

And screwed it in and snapped the panels back into place. The final result:

For those who prefer a seamless look, it’s possible to transfer the painted panel from the old fuel door to the new one. However, I liked the sleek black look of the replacement door and decided to keep it as is. I saved the painted panel in case I change my mind in the future.
The entire replacement process took just 10 minutes. By doing the repair myself, I saved over $550 compared to the dealership’s quote. If you’re dealing with a broken Ford Transit fuel door, I highly recommend tackling this repair yourself. It’s quick, easy, and cost-effective.
Comments closedHere is a list of book that I read in 2024
- Tomorrow, and Tomorrow, and Tomorrow, Gabrielle Zevin
- All the Light We Cannot See, Anthony Doerr
- All Souls Lost, Dan Moren
- Atomic Habits, James Clear
- Everybody Lies, Seth Stephens-Davidowitz
- The Handmaid’s Tale, Margaret Atwood
- Neuromancer, William Gibson
- The Book of Charlie, David Von Drehle
- The Murder of Roger Ackroyd, Agatha Christie
- Co-Intelligence, Ethan Mollick
- Red Team Blues, Cory Doctorow
- Talking to Strangers, Malcolm Gladwell
- Eruption, Michael Crichton, James Patterson
- James, Percival Everett
- All Systems Red, Martha Wells
- Artificial Condition, Martha Wells
- Exit Strategy, Martha Wells
- Rogue Protocol, Martha Wells
- A Wrinkle in Time, Madeleine L’Engle
- Arch-Conspirator, Veronica Roth
- The Bezzle, Cory Doctorow
- Network Effect, Martha Wells
- System Collapse, Martha Wells
- The Lies of Locke Lamora, Scott Lynch
- Fugitive Telemetry, Martha Wells
- The Creative Act, Rick Rubin
- Red Rising, Pierce Brown
- Golden Son, Pierce Brown
- Red Seas Under Red Skies, Scott Lynch
- AI 2041, Kai-Fu Lee, Chen Qiufan
- Morning Star, Pierce Brown
- Iron Gold, Pierce Brown
- Lucky, Marissa Stapley
- The Innovator’s Dilemma, Clayton M. Christensen
I’ve owned and used a Fellow Stagg Gooseneck Kettle for about 5 years now. It’s been a great kettle. Recently I wanted a kettle for my home office, so I could make tea while working. I didn’t want to spent $165. on a Fellow and started looking around. I was drawn to the DmofwHi Gooseneck Electric Kettle in Green. It was simple and beautiful. I spent some time researching it before buying for $39.99. Below are some thoughts on the two kettles.


Comparison
| Feature | Fellow | DmofwHi |
| Price | $165 | $39.99 |
| Capacity | 0.9L | 1.0L |
| Material | 304 stainless steel | 304 stainless steel |
| Watts | 1200 W | 1000 W |
| Temp. Control | Yes | No |
| Temp. Hold | 60 min | 60 min |
| Auto Shutoff | Yes | Yes |
| Boil-Dry Protection | Yes | Yes |
| Spout Size | 0.7 CM | 0.8 CM |
Fellow Stagg
This has been a great kettle. It has lasted over 5 years with no problems. It boils quickly and pours precisely.
The spout size on the Fellow is way too narrow. You need super patience when pouring. This is OK when pouring a drip coffee and you want to be precise, but frustrating when pouring tea. I often find myself tilting too far and water comes out the top. I have to tell myself slow down.
It has features I never use through. I don’t ever change the temperature, expect by accident. At which point I need to find the manual to set it back to what is was. But others may want to dial in exactly the temperature.
DmofwHi
I’ve only been using the DmofwHi for about a month, but love it already. It boils quickly. At 1000 Watts, it will be slower than the Fellow. But I’ve never noticed.
I love how quickly it pours. And I’ve never spilt water out the top while pouring.
And I’d assume that being less complicated, there are less things to break over time.
Summary
The Fellow has been a great kettle. But the DmofwHi at a fraction of the price gives me everything I need. I would happily buy the DmofwHi again or give it as a gift.
Comments closedAre you using Xcodes.app and Expo and seeing this error when trying to run the app in the simulator?
› Opening on iOS...
✔ Xcode must be fully installed before you can continue. Continue to the App Store? … yes
Going to the App Store, re-run Expo CLI when Xcode has finished installing.
The problem is that Xcodes installs apps with a version like: Xcode-15.2.0.app. Where the App Store installs it like: Xcode.app
All you need to do is let it know when you Xcode is with the following command:
sudo xcode-select -s /Applications/Xcode-15.2.0.app/Contents/Developer
Comments closed