Friday, October 24, 2025

US Open 2025 - Day 1 - Getting To NY

[Composed 8/26/2025]

It's US Open time, baby! Step one was getting to NYC. Our flight from DCA to LaGuardia was uneventful, and the sights along the way did not disappoint.

On the DC side, I appreciated getting an aerial view of the nearby Arlington National Cemetery Southern Expansion project. This effort has been going on in one form or another since we moved to the area nearly 30 years ago. The birds-eye view today shows an island of calm immediately surrounding the Air Force Memorial in the midst of a sea of construction. Outside of these bounds, civilization with its buildings and greenspaces resumes. We've walked past this construction countless times, but the sky view neatly puts it into context.

On the New York side, of course, I was psyched one of my many Manhattan Skyscraper pics came out decent:

I also captured Liberty Island as we flew by, but between the digital zoom and the plane's motion, the quality was especially poor. I asked Gemini's Nano Banana to help me fix the picture, and I think it did a fine job.

Clearly, photography, like many, if not all artistic pursuits, is at an inflection point thanks to AI. Is the cleaned-up version of my photo still 'my photo?' Is it somehow more ethical to open up Gimp and painstakingly edit the image, rather than telling Nano Banana what I want in a few short sentences? Or, is any editing at all 'cheating?' Is AI the gateway to relying on cheap, lightweight gear rather than heavy, expensive tech?

Time will tell on all these questions. For now though, Nano Banana is simply too magical to not embrace.

Between DC and NY, I also captured these pics of the Salem Nuclear Power Plant. I knew I was looking at a nuclear power plant because it looks just like the one on The Simpsons. In fact, both are two-unit pressurized water reactors. Kudos to the Simpsons for including a realistic'ish nuclear plant layout.

While reading up on the Salem site, I learned that they operate a Service Water System that uses water from the Delaware River to cool the nuclear reactor. This system consists of 12 intake pumps that pull in water at a maximum rate of 185,000 gallons per minute. So that means that in the 4 minutes the plant was in view, the system pulled in up to 6,660,000 gallons of water to keep the reactor from overheating. I find that to be a staggering amount of water, and an impressive accomplishment in and of itself.

When I looked back at my pictures from the day, I was curious how tricky it would be to find out the name and details of the site we'd flown by. It turns out, not tricky at all. The Nuclear Regulatory Commission has a nice map showing all the reactors in the country, and gives extensive details about both units at Salem.

Heck, I can tell you that on the day we flew into NY, there were 4 nuclear-related "events" that occurred around the country, including a missing vial of "Ra-223 dichloride solution," which sounds scary, but was "very unlikely to cause permanent injury to individuals," so that's nice. There were no events at the Salem plant.

Once at LaGuardia we had no problem collecting our bags, and then it was off to the hotel to drop them off and officially start our New York Adventure!

Wednesday, October 22, 2025

ESOXOFFORE Kids Camera - Command Line Tool Automation

As my recent review implied, I've been enjoying my new ESOXOFFORE Kids Instant Print Camera. It didn't take long, however, before I identified a couple of camera-related tasks that I could streamline with code. I give you: toycameraassist, a command-line tool for working with the ESOXOFFORE.

This short script, which depends on gphotoassist and sdcardassist handles two common workflows: archiving pictures from, and loading pictures to, the camera. Here's the script in action.

Archiving Photos

Step one, of course, is to shoot some photos. My morning tea may not be the most interesting subject, but it's one that I had at my fingertips:

Next, I popped the SD card out of the camera and into my laptop. I'm running Mint Linux, but toycameraassist should work equally well from a WSL2 or Mac OS terminal. I then ran toycameraassist -a archive.

$ toycameraassist -a archive -v | mightee
PICT0000.jpg:https://photos.google.com/lr/photo/AHnaBgstn16lDqnQQrVMfHk6gO8fdEpEjvIeTpSsxhcSZceegzJv0y02L2CfEahXoumYzj9Ri6YS7TTHIkT6KbAf5qftppapcw
PICT0001.jpg:https://photos.google.com/lr/photo/AHnaBgsorU4SZmzW0wjCxwgoyRk3Yp17wLMX6gKLlS1jQw61BZSwX2dlJt8TjZ4CzRc3YkaLOGQhgfY-GHEoPI1mbIUM3XMycQ
PICT0002.jpg:https://photos.google.com/lr/photo/AHnaBgvh2-7_R680yo6RdqpTI5Syz0xoKCXwUozB8IkZmhyEr1dDDv-_UobwpJmfvUGXDud87ImYvlZPyobHwD9c6JbMcMLjCg
PICT0003.jpg:https://photos.google.com/lr/photo/AHnaBgvrr7dsmQ1F3SMm7GWg0g312kkfbgyF9WlP4BpHkb8PDaDu_zJVUaJokZmzFR5Fk9ySSagXLGLb12SUxzojVnZewHCmNQ
PICT0004.jpg:https://photos.google.com/lr/photo/AHnaBgukO4g_SYSd3MG18iKA59WFBiyIL-pl-GFLSWpfpvpVAIgZiv1i8ZFrLL56pzmGv_srClEcAvRGMrN7vtmou_sIYKyLIw
PICT0005.jpg:https://photos.google.com/lr/photo/AHnaBgtznwDNI8dPAJKbI0aqvLBc3_jBVVAAJbY_I6WcmM5dZq62PeCyNMVItWcJR7tyqFmIeET0zJyVTKOHQYNEvVd4KaFO8Q
PICT0006.jpg:https://photos.google.com/lr/photo/AHnaBgulFX2cWEgLjZN6RLrajeSxYJR0mJYdwl0RWvnLJjenyJoZtpqOOAChbCuJexWEZLHe1O4otS4jIqk844caQ1zLWhHXhw
PICT0007.jpg:https://photos.google.com/lr/photo/AHnaBgvHd-eicj_6aqYhBuHtEtgZwzWteTjYAwIcCtywQpHfVaJWsZm-7DyuE9tKAenc2OQ6bLobuLf3SSQ65oepK99KipQbbg
PICT0008.jpg:https://photos.google.com/lr/photo/AHnaBgu3ucZo8ogslauMNYnFc7rlgD5eQMHpu3zhTqnbGhyFLE_YltjI9Tos6kg4MlMN0GG8zbar0_7pfQdPyL2LzsQ1XCJFTg
PICT0009.jpg:https://photos.google.com/lr/photo/AHnaBgsDu4KbJO5JoLeHAWvRNoWtNi5EyMuqga7n8KFAb1C3WbNrQBQHz8Xe80qmJEpKNT6ZGHXJwZDWOvi3mEktmaTE9ib7rg

And that's it. All the images have been taken off the card and pushed to a Google Photos album that's defined in ~/.config/toycameraassist/default.config.

After a few moments, the images appeared in my Google Photos feed, as well as in the default folder that I set.

The process isn't as magical as Google Photos' backup on Android, but it's miles ahead of manually managing and uploading photos.

Loading Photos

Next up, toycameraassist allows you to load arbitrary photos into the camera, so you can use the camera as a low-cost photo printer.

Step one again begins with a selection of photos. This time, however, I'm pulling them from Google Photos as they're taken with my Galaxy S22 Ultra.

I downloaded these photos to a local directory, and put the camera's SD card into my laptop. I then ran toycameraassist -a load.

  # In Google Photos, I clicked 'Download all' on a 'Print Photos'
  $ unzip Print\ Photos-1-001.zip
  $ cd Print\ Photos
  $ toycameraassist -a load *.jpg

The SD card now has the photos scaled, stripped of EXIF data and named as the camera expects. Surprisingly, stripping the image metadata is a key step, as the camera refused to read images that skipped this step.

I then ejected the card from my laptop and put it back into the camera. Finally, I fired up the camera and was able to browse and print the pictures as though they had been captured with the ESOXOFFORE.

Here are the prints from the camera, hastily mounted on 3x5 index cards:

Not bad for a $30 camera and $0.09 worth of materials.

You can grab the script and its dependencies here. Enjoy!

Monday, October 20, 2025

ESOXOFFORE Kids Camera - Review

Back in June, I picked up a ESOXOFFORE 'Kids Instant Camera' from Amazon for the impressively low price of $30.00. Ostensibly, I bought it for various kids in our lives. But let's be real; I totally bought it for me.

The Amazon product page promised a fully-featured camera, but given the low price and random brand, I braced myself for disappointment.

Quirk and Flaws

Spending a few minutes with the ESOXOFFORE reveals its biggest flaw: its user experience (UX). To an adult, the buttons and menu system are clunky. To a child, they must seem utterly random.

To print a picture you've previously captured, you just have to: long press #4 to turn the camera on, press #3 three times to highlight playback, press #5 to select playback, use buttons #1 and #2 to pick the image. At some point, you need to press #5 to toggle printing. Finally, when the image you want to print is selected, press #3 to print the photo. Easy, right?

At one point, I was chatting with Shira about the camera's UX and said, you know, the camera really needs a touchscreen. Her response: wait, it doesn't have one? No wonder she struggled to get it to work.

An interesting exercise would be to tweak the buttons and camera software to be kid-friendly without significant hardware upgrades. Some obvious improvements: make the buttons into clear predictable shapes; stop using text on the buttons; and consider dropping the "OK" button and making the shutter button do double-duty for capturing photos and selecting an item.

Another quirk is that there's a single volume level for the camera. To hear audio during video playback, you need to crank the audio setting way up. This results in making the beep that occurs after pressing every button equally loud, which gets annoying quickly.

Toggling whether prints are produced or a filter is enabled can be subtle and easy to miss. This can result in wasted paper or capturing images with an unexpected filter.

But, All Isn't Lost

So the ESOXOFFORE has its flaws, but here's the thing: the photo quality of this camera is downright impressive for $30.00.

Both the digital images and "prints" are totally usable. Here are some examples (most taken by kids):

The built-in filters are surprisingly fun and are far more of an asset than I imagined.

AI, especially Google's Nano Banana, will gladly take the digital images and turn them into a fun creation. Here's L transported into the kitchen of a fancy restaurant:

Photo printing is accomplished by using a cheap thermal printer. The three rolls of receipt paper included with the camera promise about 372 photos and you can buy refills at about $0.013 cents a print. This is far more kid-friendly than $0.50 cents a print ZINK cartridges or $1.50 per photo of an Instax Fulfilm.

All this means that you can unleash your little Ansel Adams and let them shoot and print as much as they want. And if they happen to capture some amazing shots, then the quality will be good enough to share on Instagram and Facebook their blog.

To put the quality in perspective, consider the twice as expensive Phonemo printer's output against the ESOXOFFORE's.

That's impressive, right? It's possible that I could have further tuned the Phonemo's image, but the ESOXOFFORE's is solid by default.

The thermal-paper-based prints are fragile and curly. Mounting them on a standard 3x5 index card using glue tape has proven to be an easy way to increase their durability.

I also use clear packing tape to secure the loose photos to my notebook, making for an easy way to use them in a collage.

I experimented with using our laminator to protect the flimsy pictures, but this was a bad idea. The laminator works by sealing the plastic with heat, and the photo paper is printed with heat. Laminating added a layer of dark gray over the picture. It looks like cold lamination is a thing, so maybe that would work. It's hard to beat the simplicity of a strip of clear packing tape, though.

Skip or Buy?

Is the ESOXOFFORE 'worth it?' I think so! With one caveat: there are heaps of kids' cameras out there, so it's possible that another model delivers on both the UX and quality front. But until I find such a model, ESOXOFFORE is an excellent choice.

I say, buy the camera for your toddler to save your iPhone. Or, buy it for your teen with some fairy light photo clips, so they can cover their walls in fun moments. Heck, even the photographer in your life who covets pricey gear will appreciate the camera as an opportunity to find creativity through limits. In short, if you need a cheap camera that produces surprisingly usable pics, the ESOXOFFORE is a winner.