In the past, it was common for a Western company to release some hot new object, then Chinese manufacturers would rush in with knock-offs. Thankfully we're seeing a shift away from this, where Chinese manufacturers are starting to add their own innovations to improve existing products. As one example Titaner, a Chinese manufacturer of titanium tools, is taking a more Apple-like approach: Let others be the first, then take your time to design a better version of that object.
In this case, the object that's having a moment is the fractal vise. This all started in 2021, when artist Steve J. Lindsay designed his based on a jaw he'd seen on a milling machine from the early 1900s.
First off it's on a ball joint, greatly improving the ergonomics.
Secondly, it has a feature critical for working on delicate objects: The ability to set the clamping pressure. The user dials it in via a torque mechanism, and when the vise hits the desired pressure, it audibly clicks, like a torque wrench.
Thirdly the jaws have a width capacity of nearly 4 inches.
Lastly the jaws are reversible, allowing you to hold objects from the inside out.
The tool, being made entirely out of precision-CNC-milled titanium, is well expensive, starting at $1,100. The company's only making 1,000 units and selling them on Kickstarter. At press time the campaign had been successfully funded, with 85 units spoken for and 27 days left to pledge.
You’ll never need to flip your pillow to find the cool side with Eight Sleep’s new covers. | Image: Eight Sleep
What is a good night’s sleep worth to you? Does a grand seem like a small price to pay to avoid a night spent constantly flipping your pillow in search of the cool side? Eight Sleep has announced a new Pod Pillow Cover that ensures where you’re resting your head is always at your ideal temperature. Skip that mortgage payment or iPhone upgrade and throw some money at a good night’s sleep.
Designed to slip over your existing pillows without changing their shape or firmness, the Pod Pillow Cover features discreet tubes, or what the company calls “silent hydro channels,” that are used to circulate temperature-controlled water beneath your head. Up to two sleepers can dial in an exact temperature anywhere between 55 and 110 degrees Fahrenheit and the cover will maintain it all night long — no pillow flips needed.
The Pod Pillow Cover is launching today in the US and other markets, including the EU and Canada, for $1,049 and discounted to $1,649 for a pair. There’s no pretending that’s not an expensive alternative to traditional cooling pillows that rely on cooling gels or foams, but that’s not all you need to pay. The Pod Pillow Cover is made to complement Eight Sleep’s existing cooling systems, which currently start at $2,449, plus a $199 annual subscription. They feature a larger mattress cover that can regulate the temperature of your entire bed and include the company’s bedside hub that circulates the water for precise control.
Django’s runserver automatically reloads when you change Python files.
Without this autoreloading feature, you’d need to manually restart the server every time you made a code change.
However, the default autoreloading implementation is inefficient, as it constantly polls the filesystem for changes.
The alternative to polling is to use your operating system’s file watching APIs, which can efficiently notify the server when files change.
Using this technique saves CPU and power, while making reloads faster and more reliable—all in all, a big win!
But since these APIs are OS-specific, it’s best for Django to use a cross-platform library that wraps them.
Django provides an integration with Facebook’s Watchman, which works as a file watching server.
While I appreciate this integration, it does require installing, running, and maintaining an extra tool (Watchman itself).
Additionally, the Python client library for Watchman, pywatchman, seems to be rather unmaintained.
Most notably, it was broken on Python 3.10, and the fix was not released for 2.5 years, after Python 3.12 was released.
I promoted the Watchman integration on this blog and in the first version of Boost Your Django DX, which came out just after Python 3.10 was released.
But since pywatchman was broken, my book offered advice that quickly became unusable, so I was open to finding alternatives.
(I later removed that section, after it was clear that pywatchman wasn’t getting fixed any time soon.)
Thankfully, watchfiles was released around that time, a cross-platform file-watching library for Python.
It’s powered by Rust and the widely used Notify crate, and created by Samuel Colvin, the author of Pydantic.
I started django-watchfiles in 2022, to integrate Django’s autoreloader with watchfiles.
In 2023, Tom Forbes (the author of Django’s Watchman integration) helped me improve it beyond alpha quality, and I released the first stable version in 2024.
However, it’s only today, after a final sprint on some remaining issues and release 1.4.0, that I feel confident to announce and promote the package for wide use.
Add "django_watchfiles" to INSTALLED_APPS in your Django settings file:
INSTALLED_APPS=[...,"django_watchfiles",...,]
django-watchfiles patches Django’s autoreloader to always use the included watchfiles class.
You’ll be able to tell this patch is working because runserver will report it’s using WatchfilesReloader at startup, as opposed to StatReloader:
Then, you should be able to enjoy faster and more efficient reloading!
A quick benchmark on a medium-sized project (385,000 lines plus 206 installed packages) using an M1 MacBook shows Django’s default reloader using ~10% of a CPU every other second, while django-watchfiles uses 0%.
That can translate into a lot of saved battery life when developing on an unplugged laptop.
Fin
Please try out django-watchfiles today, and let me know what you think!
The README contains more details about its benefits, as well as a full history of Django’s autoreloader.
When django-watchfiles is more established and proven, I may propose adding a watchfiles integration to Django core.
We’re all familiar with doomscrolling, spending too much time scrolling endless feeds of content that make you feel bad about everything.
But sometimes when I hear the word “doomscrolling” it makes me think of two other things: the classic video game Doom and, well, scrolling.
That got me wondering if I could make a Doom-inspired game in a web browser where the only thing you do to play is scroll. No moving your character laterally, no jumping. Just scrolling.
That’s what the game looks like. But here’s what playing it feels like:
You can go play it right now on desktop or mobile. The rest of this newsletter is the non-technical story of how I made the game.
The first time was a failure
As readers know, I’m not a coder, but I enjoy how vibe coding lets me turn an idea into something real. So naturally, I turned to vibe coding for this.
It didn’t work.
This was around nine months ago. I tried and tried, but none of the LLMs were able to help me go from idea to a playable game at all. Like, not even close. GPT-4 absolutely refused to understand that scrolling down a page means that the background should move up the page. I ended up with something kinda pathetic that didn’t even resemble a game. So I gave up, figuring this was either beyond an LLM’s skills, beyond my skills, or both.
But then GPT-5 came out a few weeks ago, and I tried again to see how much better it might be at coding. In just two hours I had a very good prototype. I even made a little title screen for my prototype so it felt more like a real game:
I described the game design to ChatGPT very broadly at first. I said it should work kinda like Galaga turned upside-down. But I explained that unlike Galaga, the player moves forward and backward rather than side to side, and that the monster’s position should remain relative to the floor. That and a few more details got me surprisingly far as a first step.
For prototyping purposes, I asked ChatGPT to just come up with five different monsters, each one with a two-frame animation, like Space Invaders aliens. They were little more than basic shapes, and I figured at some point I’d replace them with actual pre-rendered monster sprites. But this worked for now.
The original 5 monsters
Then I went on vacation. I spent an hour or two each morning over coffee working on this game until the kids woke up, gradually adding and refining features one at a time.
Improving the game
I focused on making the game more fun to play, with incentives to keep moving but also things to stop you from racing through it too fast. I added things like weapon upgrades for every 100 monsters you kill, a wall of fire that chases you if you stay in one place too long, and obstacles to slow you down, like brick walls and spider webs.
Don’t let the wall of fire get you
Some other little quality-of-life features I came up with include:
Five different background textures so you can have a different visual experience each time you play.
Health potions. The first one appears when you’re down to three health points. After that, they are more rare and may require weapon upgrades to reach.
A visual marker when you pass your record distance
A pause screen with some stats
Making it really Doomscrolling
I was pretty happy with the game and ready to share it. But then at the last minute I got another nagging idea in the back of my mind: What if it was somehow more like actual doomscrolling?
It would be easy to get an RSS Feed of headlines from a news site. Could I make them appear in the game as you scroll, in a way that felt integrated with the game?
First I tried having headlines just appear on the floor as you play, but it felt very tacked-on. So I came up with some lore for the game that helped.
I decided that the game takes place in the future, in a lair that was sealed up today, whatever day you happen to be playing the game. And the civilization that sealed up the cave left behind plaques featuring today’s headlines for some unexplained reason. So as you play, you encounter these plaques that each has a bit of news from when the cave was sealed up. Today’s actual news.
It’s not really doomscrolling if there isn’t awful news to read
The plaques have no effect on the game, except to the extent that they tempt you to read them and get distracted from the gameplay. But they’re just decorative elements. Feel free to ignore them. If you can.
The headlines all come from the New York Times front page RSS feed. So in a sense, this game is actually an extremely complex single-feed RSS reader.
Working with AI is still a pain. This was my solution.
If you’ve ever tried to work with AI, you’ve likely run into a roadblock where you’re describing something over and over and it’s simply not getting it. “No, don’t do it that way, for the umpteenth time, do it this way.”
I still planned on making the monsters as pre-rendered sprites, but the background textures, plaques, and decorative items like torches could still be rendered in-game if I could just get GPT-5 to understand what I want them to look like. An LLM isn’t really good at making artwork like this.
So I simplified things. I had the AI set up simple “labs,” standalone test pages where we could work on different designs, using the style from the game. For example, here’s one “lab” I made for testing how some in-world elements would look on different backgrounds:
Everything above is rendered on the fly. One big advantage of that approach is that I could randomize some visual elements in the game. For example, look at the spider webs above. They all follow the same rules but they’re all slightly different. The game’s background textures are also slightly different each time you play.
Next, I set about making pre-rendered monsters. But wow, small-scale pixel art is hard. I went through a lot of versions of different monsters. Eventually, I had a few I felt were good enough. The game looked like this:
It had its own charm, but in the end, I didn’t love it. Somehow, my pre-rendered monsters made the game feel worse. Maybe it’s because I just am not a good pixel artist.
So I decided to see what I could do with ChatGPT in a “lab” like I did for other in-game items, but focused on monster designs. After a lot of experimentation, I settled on the simple monsters that ended up in the game:
I assume doing all this computationally is more processor-intensive than using pre-rendered monsters, but it’s very smooth for me on both desktop and phone, so it must not be too intensive. I guess I’ll hear from people if it’s choppy on their device.
Sometimes I still needed a little more control over how something looked. So in those cases I had ChatGPT build labs with sliders that I could adjust to decide how I want things to appear, instead of getting frustrated with the chatbot. This way I could quickly settle on a look and feel.
Here for example is the lab page for the plaques. I wanted them to look integrated into the game world, so I described the parameters I wanted to play with for the text styling and plaque itself. We put a “copy settings” button that I could use to report back to the LLM once I liked it, so I could say “Okay, let’s go with these settings in the game.”
There are still features and adjustments I’d like to add, but I’m not on vacation anymore, so think I just need to stop here. I may still tweak it, but for now I’m calling version 1.0 ready to ship. It has successfully scratched my itch to see if I could make a fun scrolling-only game, which was really all I wanted.
It should play equally well on mobile and desktop. The only difference is that with a taller device you can see more of the world at a time, which makes it a little easier.
Oh, and you can save it to your home screen so it acts like a standalone app rather than a browser game. That’s how I play.
Here’s where I remind you that you can support my endeavors by becoming a paid member, or making a one-time donation. Every little bit matters.
And if not, that’s okay, too. But maybe you can share the newsletter? Moving from Beehiiv to Ghost resulted in a subscriber hit, which I anticipated because the same thing happened when I first left Substack. It took a while to begin growing again after the first move, and you can help me get back to positive growth by spreading the word now that I’ve landed at Ghost. It would mean the world to me.
Indiana Jones and the Great Circle will be the first game to get Nvidia’s new RTX Hair features next month. Instead of using triangles to model hair, Nvidia will use spheres to improve Harrison Ford’s virtual hair in the Indiana Jones game.
RTX Hair is designed to improve lighting and shadows, all while maintaining performance in the game and not taking up too much extra memory. It also makes Ford’s hair look fuller and more realistic, and will be available as an update to the real-time path tracing mode in Indiana Jones and the Great Circle.
The RTX Hair improvements use new hardware capabilities in RTX 50-series GPUs, as Nvidia added hardware acceleration of ray tracing for hair and fur and support for the linear swept sphere (LSS) primitive. Nvidia says LSS is a “big step toward rendering high-quality digital humans in real time.”
MicroSD cards are tiny but slow; the M.2 storage sticks in your PC are blazing fast but bigger and fully enclosed. Now, a new type of SSD out of China could be the best of both worlds — and it’s already set to appear in two cutting-edge gaming portables.
Chinese storage manufacturer Biwin is calling it the “Mini SSD,” though another manufacturer refers to it as the “1517”; it measures just 15mm x 17mm x 1.4mm thick, smaller than a U.S. penny and just slightly larger than MicroSD. Despite that, it offers maximum sequential read speeds of 3,700 megabytes per second (or 3,400MB/s writes) over a PCIe 4×2 connection, and offers 512GB, 1TB and 2TB capacities.
To put that in context, the new MicroSD Express cards that work with the Nintendo Switch 2 top out at a theoretical 985MB/s, less than a third the speed. And while a full-size SD Express card could theoretically beat Mini SSD at 3,940MB/s, it would be nearly twice the size of Biwin’s creation.
The nano-SIMs used in recent smartphones are still smaller, though, and M.2 drives are still faster. I whipped up a quick chart so you can easily compare various storage cards and SIMs:
Type
Length
Width
Height
Theoretical max speed
Mini SSD
15mm
17mm
1.4mm
3,700MB/s
MicroSD
11mm
15mm
1mm
985MB/s
SD
24mm
32mm
~2mm (varies)
3,940MB/s
M.2 2230
22mm
30mm
~2mm (varies)
~8,000MB/s
M.2 2280
22mm
80mm
~2mm (varies)
~14,000MB/s
Nano-SIM
8.8mm
12.3mm
0.67mm
N/A
Micro-SIM
12mm
15mm
0.76mm
N/A
Mini-SIM
15mm
25mm
0.76mm
N/A
It’s not clear if Biwin’s Mini SSD is a true standard that other storage makers can easily adopt. But the company’s marketing it for laptops, tablets, phones, cameras and more, with its own dedicated slot that works exactly like smartphone SIM card slots: stick in a pin to remove the tray.
The company claims IP68 water and dust resistance, which could be handy for phones in particular, and three-meter drop resistance.
Two cutting-edge Chinese gaming portables already appear to be customers, both of which made announcements at ChinaJoy this past week. There’s the GPD Win 5, the monster battery backpack wielding Strix Halo handheld we told you about in July, which you can see with the new SSD in the video atop this story.