Monday, October 27, 2025

Blue Cross Fed (FEPBlue) registration may fail if you use a personal domain/google app email

Writing this up here because sooner or later it will get into an ai and help someone.

I was unable to set up an FEPBlue.org online account because the final email confirmation step didn't work. There's no recourse, you have to start over. Yes, "start over" is crap coding -- but web sites are getting worse.

I checked spam folder, etc. The email was not being sent.

I had used an email address that's part of a (legacy) Google Apps domain.  I had a hunch so I repeated the process with an iCloud email. That worked.

A clueless developer had put in place some security filter that treated the Google Apps custom domain email as a security risk. Like I noted above, there's a lot of bad quality software now. All the talent has left for way better money. We really do need to turn this class of software work over to the AIs.

Anyway, if you find it doesn't work - use an email that's not a custom domain.

(Obviously there's no way to report a bug like this.)

Monday, October 20, 2025

Workaround for Yahoo delete all email not working

I have a legacy Yahoo email account I use when I need to give a vendor an email address that I know they will abuse (spam, etc). Periodically I want to thousands of spam emails from the inbox.

Because this is 2025 the delete all function does not delete all. Often it seems to delete nothing.

The workaround is to search for '.' This finds all emails. Selecting all then clicks delete works. It doesn't only delete your inbox though, it deletes archives, folders, sent, etc.

Which is fine for my purposes.

Thursday, October 16, 2025

Continue printing when Brother HL-L6200DW says it's out of toner

My old HL-6200DW Brother laster printer ran out of toner. It happens. I've never been able to get it to bypass the low toner hard stop, but now we have Perplexity.

The ai suggestions didn't work. I suspect they do work on newer printers. But the description of oddball key combinations made me look at bit further with some additional search terms. This time old decrepit and battered Google Search actually found a fix on an obscure toner sales site.

Here it is, from them, for posterity (or until I die):
 Open the toner access door on your printer.
• Press the Secure and Cancel buttons at the same time.
• Use the arrow buttons to select the correct toner yield of the toner you are using
TNR-STR = Starter cartridge
TNR-STD = TN-820 standard yield
TNR-HC = TN-850 high yield
TNR-S.HC = TN-880 super high yield
• After you have found your toner cartridge type, press OK
• Press up arrow to Reset

I don't think it matters which cartridge you choose, that just determines what count is applied and any of them will exhaust your low toner. But it does allow continued printing while waiting for a replacement.

(The printer is end-of-life, it's had one drum replaced. I keep it because it's unlikely there's anything better today.)

Thursday, October 09, 2025

Vibe coding a python script to create a plain text file with my macOS Photos (Aperture) folder hierarchy

My single greatest Photos.app frustration (I have many) is the inability to search the folder hierarchy. Mine contains hundreds semantically important folder names where the hierarchy is also meaningful. Meaning lost in the catastrophic Aperture to Photos migraiton.

This morning I had an hour free so I asked an ai about available utilities and workarounds. It said there are really no good options, but the Python osxphotos module might be able to traverse the folder hierarchy.

I have dabbled in minor Python coding and I have a half-baked Visual Studio Code environment. So I asked Claude 4.5 in Perplexity (this is not a formal supported coding environment) to write me a script that would use osxphotos to build a text file representation of the hierarchy. I ran whatever it generated.

It took 4-5 tries. I never edited the code myself. The first time there were copious errors, I describe errors and requested a redo. The next two times there were fewer errors, but I only got the top level of the hierarchy. The ai added debug code. It took two more tries of running and reporting errors to get a script that generated the text file I wanted (example):

[Teams and Orgs / MN Special Hockey / MNSH 2006 pre-season] MNSpecialHockey_060317
[Teams and Orgs / MN Special Hockey / MNSH 2022-2023] MSH 2023 Printed
[Teams and Orgs / MN Special Hockey / MNSH Woodbury 2019-2020] MSH Portraits Jan 2020
[Teams and Orgs / MN Special Hockey / MNSH 2008-2009] Nov 2008 MN SH Section 108 Event
[Teams and Orgs / MN Special Hockey / MNSH 2021-2022] Portraits MNSH Woodbury 2022

This is most personally valuable code I have ever "produced" since my days of writing the "medtrans" C program to turn 1990s MEDLINE output into tab delimited importable text.

And I wrote none of it.

I'll be cleaning it up and refining it, but below is the code I have today. It also included album names within a containing folder - I didn't want that but now I find it useful so I'll leave it.

Code

#!/usr/bin/env python3
"""
Export Photos folder and album hierarchy to a text file with tab indentation.
Requires: pip install osxphotos
"""

import osxphotos
from pathlib import Path

def export_folder_hierarchy(output_file="photos_folders.txt"):
"""
Export Photos library folder/album structure to a text file.
Args:
output_file: Path to output text file (default: photos_folders.txt)
"""
# Initialize connection to Photos library
photosdb = osxphotos.PhotosDB()
# Get folders and albums
folders = photosdb.folder_info
albums = photosdb.album_info
print(f"Found {len(folders)} folders and {len(albums)} albums")
# Build maps for folders
folder_map = {f.uuid: {'obj': f, 'children': [], 'type': 'folder'} for f in folders}
# Add albums to the structure
for album in albums:
# Albums have folder_names property which is a list of folder names in the path
if hasattr(album, 'folder_names') and album.folder_names:
# Try to find the parent folder by matching folder names
# folder_names is a list like ['Top Folder', 'Sub Folder']
# We want to match the first (top-level) folder name
top_folder_name = album.folder_names[0] if album.folder_names else None
if top_folder_name:
# Find folder with matching title
parent_folder = None
for folder in folders:
if folder.title == top_folder_name:
parent_folder = folder
break
if parent_folder and parent_folder.uuid in folder_map:
folder_map[parent_folder.uuid]['children'].append({
'obj': album,
'type': 'album',
'title': album.title,
'folder_path': ' / '.join(album.folder_names) if album.folder_names else ''
})
# Recursive function to write hierarchy
def write_item(f, item_data, level=0):
"""Write item and its children with proper indentation."""
indent = '\t' * level
if item_data['type'] == 'folder':
folder = item_data['obj']
f.write(f"{indent}{folder.title}/\n")
# Sort children alphabetically
children = sorted(item_data['children'], key=lambda x: x.get('title', x.get('obj').title).lower())
for child in children:
if child['type'] == 'album':
# Write album with its folder path if nested
folder_path = child.get('folder_path', '')
if folder_path:
f.write(f"{indent}\t[{folder_path}] {child['title']}\n")
else:
f.write(f"{indent}\t{child['title']}\n")
else:
write_item(f, child, level + 1)
# Find root folders
root_folders = [folder_map[f.uuid] for f in folders if f.parent is None]
root_folders = sorted(root_folders, key=lambda x: x['obj'].title.lower())
# Write to output file
with open(output_file, 'w', encoding='utf-8') as f:
f.write("Photos Library Folder Hierarchy\n")
f.write("=" * 50 + "\n\n")
for root in root_folders:
write_item(f, root)
print(f"Folder hierarchy exported to: {Path(output_file).absolute()}")
print(f"Total top-level folders: {len(root_folders)}")

if __name__ == "__main__":
export_folder_hierarchy()