Monday, January 12, 2026

Sharing with iCloud Links: working around a bug in macOS Sequoia Photos

I don't write many posts about Apple bugs in the modern era. If I did I'd be putting out several every day. I cannot use a modern macOS Apple product without running into yet another bug. Photos is a particularly rich example of the Tim Cook era bugfest.

Today's bug concerns sharing by iCloud Link. This is theoretically the best way to share photos and videos between iCloud users (full res, esp video, full metadata if you are careful), but there's a bug with assigning them to an album (may depend on volume)

Steps:

  1. Open iCloud Link via messages
  2. See result in Sharing:iCloud Links. Wait until fully downloaded.
  3. Drag and drop to an album
  4. The images do not appear.
There's something broken in the drag and drop function. Maybe it's fixed in Tahoe, but Tahoe is a typical Tim Cook era product. Broken by both bugs and bad design.

I tried a few things, I'm not sure yet what worked. That included switching to an instance of my Photo Library that is full resolution download. After the usual long delay due to iCloud throttling the images did appear in my Library, but not in the album they were copied too. I could move them from the Library to an album.

Next time I'll try selecting all images, dragging to "Library", then reviewing in "Recently Saved" and copying to an album. If that works I hope I remember to update this post. I think if you try to copy them to an album it looks like it intends to copy (get the warning about adding xxx images); I think even though they don't make to the album they do end up, eventually, in the Library.

I apologize to everyone I ever shared an iCloud Link with.

Tim Cook should have been fired years ago. The stock would be worth less but the company would suck less.

Monday, November 24, 2025

Sequoia: 400 GB free storage but not really: How to force Photos to downsize using large encrypted disk images

I read Eclectic Light so I know about macOS APFS free space chaos. Recently macOS Photos quietly grew to consume most of my boot drive leaving only 30GB free. I switched to optimized storage while preserving a full local library on an external drive.

So Finder showed 400GB free --- but it's "purgeable free". So not really. One of my sparse disk image ran out of space (causing cryptic error messages) because it couldn't grow even 10GB.

In theory the OS should be shrinking the Photos Library as needed. But if it's doing that it's doing it slowly. An ai claims iOS Photos is much better at shrinking than macOS Photos; macOS Photos optimizes only under severe pressure (10GB free?!) and then only slowly.

I created sets of 20GB images followed by a shutdown and restart. Over an hour or so of this I was able to get 90GB truly free. That's enough free I can just chip away at the rest by creating then eventually deleting larger disk images (regular, NOT sparse). Just make sure you don't back them up accidentally - wastes space. A full shutdown appears to be needed as part of the routine (magical incantation).

(The other approach is to nuke local photos and let it rebuild optimized from iCloud.)

PS. There are so many bugs in modern Apple software I only post workarounds for the big ones. I will be glad to see Tim Cook retire.

Update 11/25/26

Some further refinements
  • Create a folder to hold the disk image and in Time Machine set as no backup
  • Use Disk Utility to see the real free space
  • Create an encrypted (reduce compression possibility) disk image about 8-10 GB less than true free space. (If you make it too large Photos can't iCloud sync, about 8-10GB seems to work)
  • Let things sit for a few hours.
  • Shut down and restart
  • Delete image and empty trash
  • Shut down and restart and check Disk Utility for true free space
  • Repeat every few days until Photos is beaten back
  • Pray Tim Cook has a happy retirement
Once Photos starts optimizing it seems to work in bursts, sometimes freeing up 5-10GB in a burst of activity. Photos doesn't need to be running; folklore says it is faster if it's not running but I have not verified that. The full shutdown does seem to be necessary to see true recovered space. You can run Photos to verify that it's doing iCloud sync.

It's funny to see the different size estimates in Finder vs Storage (preferences) vs Disk Utility. In Storage Photos uses 35GB (aspirational!). In Finder it used 512GB originally, now down to 467GB and shrinking. Disk Utility showed about 15 GB free space, Storage says about 500 GB free, Finder Info says 500GB purgeable. 

Wednesday, November 05, 2025

macOS Photos: Optimized Storage version and External Drive Full Resolution version of same library

If your full resolution iPhotos Library won't fit on your internal drive any more you can switch to optimized storage. Even for a large library that's only 30GB or so [1], But they you can't do true backups with full resolution images. I like to have 5-6 full res backups rotated amongst drivers and servers including Time Machine.

The trick is to have two macOS user accounts with the same Apple ID [2]. One you use strictly for backup.

This is what I did starting with my Library in full res mode on my primary account. It takes about 610GB or so.
  1. Copy Library to external drive.
  2. Change primary Library to optimized storage [1].
  3. Create new user account called iCloudBackup.
  4. Log into iCloudBackup using same Apple ID as primary account. Turn off every iCloud feature.
  5. Open full-resolution Library on external drive and make it the system library.
  6. From within Photos turn on iCloud Photos support and set to full image download.
  7. Keep the iCloudBackup account active for a few days so all sync things settle out. Then shut down.
Backups now have to include the external drive of course. You need to set something up so you periodically launch the full storage account and let it sync things up.

PS. You can track sync activity using nsurlsessionid network traffic in activity monitor.

PPS. You think -- "but now I'll be using a lot of extra backup storage". Because I'll backup my full res library in addition to the primary library which is still full res until storage pressure causes a purge. Ahh, but APFS is weirder than you know. [1]

- fn -

[1] In Optimized Storage my library is 30GB or so with optimizes storage enabled. In reality it's about 610FB  but that will shrink over time as needed. In Sequoia Finder says my backup of the 610GB is about 1GB in size, but on opening with network access disabled it contains all the data. I believe that's the chaos in file size problem with Sequoia -- the 1GB is because of deduplication at the APFS level, a single APFS container holds two Library backups, one "optimized" but only minimally purged at this time, the other non-optimized. Both over 600GB, but together they use about 601GB since the contents are so similar.
[2] I forgot that was allowed -- two accounts with same Apple ID. Kudos Claude 4.5 for the plan.

Update 11/10/25: After 5 days the optimized library is 90GB smaller than the full library. The optimized library SSD was short of storage so I expect the optimized to slowly shrink over time.

Monday, November 03, 2025

How to remove the "Live Photo" video from a macOS Photos.app image: Duplicate

As of Sequoia's end when you duplicate an image in Photos you have the option to "Duplicate as Still Photo" thus omitting the live image video.

So duplicate and delete original to remove video portion.

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()

Monday, August 04, 2025

Apple's ai opportunity is context

I use Perplexity as my $20/m answer engine -- and for generic ai tasks. I don't want Perplexity as a longterm ai provider, but I do like being able to experiment with different models. Currently all the leading not-free models are pretty good, but some are more sycophantic than others. I dislike sycophancy; ChatGPT and Sonnet have less of it than Gemini but all are too eager to please (prompts help but one has to be careful not to reveal a preference for a particular response).

For me, at this time, all of the models work significantly better with quite a bit of context. In Perplexity that context is provided in Spaces. Spaces include reference material and the model/prompt settings for the Space.

The great mass of people are not going to do that sort of context work. So vendors are trying to answer questions and apply (lower cost) models without context. Meanwhile they try to scrape together a lot of knowledge about the user from whatever source they get.

Apple's opportunity is they can assemble a lot of context. In my case GBs of information on my main drive, not to mention my calendars, contacts, notes and so on. Apple could ask questions to provide a general default context, such as preference for sycophancy, references to use, web resources, textbooks and so on. 

I consider Apple to be a broken company. I don't think they will be able to get their ai act together under Cook. But if they can, they do have advantages.

Sunday, July 20, 2025

Tip: Let your ai tell you what's new and novel in an iOS or macOS release

I like to wait a month (iOS) or six months (macOS) before applying major updates. By the time I apply them all the useful tips and tricks I read along the way are ancient history.

Instead of trying to keep track of these things before the OS is installed wait until you are ready to pull the trigger. Then ask your ($20/m) ai to summarize known issues and interesting new features, tips and tricks. You can provide context as needed (ex: I am an expert user, etc).

PS. Apple got away from providing PDF versions of manuals and user guides -- but if they still did that I'd drop the PDFs into my Perplexity macOS Space.

Wednesday, July 16, 2025

New lessons on macOS network home backup: WiFi issues and so many bugs

Recently we had a flurry of home computing issues. They feel typical of our time where multiple bugs interact across multiple environments.

In this case there were 3-4 different bugs and failures that impacted our home network and especially backup. The lessons learned were not in my ai responses so they seem worth sharing. The interacting bugs included:
  1. Apple hardware bugs in the M1 Air that can make the Air WiFi unreliable. (Could be drivers/software but persistence suggests either a very hard problem or hardware with possible software mitigation.)
  2. The odd behavior of Eero wifi
  3. Bugs and limitations in macOS SMB networking and in HPFS mean network share filesystems can be corrupted beyond repair.
  4. A completely unrelated red herring that turned out to be due to CenturyLink's parent org messing up their DNS configuration.
Such is the nature of our times, where complexity and unsustainable share prices combine to decrease reliability of core systems.

At the core was WiFi instability. Our M1 Air WiFi was constantly fluctuating, leading to constant disconnects. I knew there was something wrong as Carbon Copy Cloner would quite often warn that a backup was being transiently disrupted by the network share disappearing. The very frequent write/read failures presumably led to the HPFS hard drive file system corruption. I had to diagnoses and fix the drive connection before focusing on the underlying WiFi issue.

Things I am doing differently now:
  1. Reconfigured physical layout of our Eero base stations so there was a direct "line of sight" short distance between the M1 Air dock location and the Eero base station. The M1 Air needs a much stronger than usual WiFi connection to be stable. The new configuration also offloads some traffic from an overloaded Eero device.
  2. We use a Synology Time Machine server as a secondary (not robust) backup. That backup was also corrupted (happens normally anyway -- because bugs, but WiFi issues sped it up). At least in Sequoia if you remove a Synology TM backup destination and then add it back there's an option to replace the original. This is faster than wiping it from the Synology side.
  3. I used advanced preferences so Carbon Copy Cloner will dismount the network share after a clone/backup is compete. The less that share is open the better because it's hosted from a MacBook Pro that can be disconnected from the network, and macOS/SMB does not handle that disconnect gracefully.
  4. I had configured a user quota for one of our machines that had become too small. Time Machine should have provided guidance about capacity but did not do so in a useful way.
Related

Thursday, June 26, 2025

Bug in iOS 18.5 eSIM removal - you have to let it update your contacts

When Tello failed to transfer my CenturyLink number I canceled their service. I then tried to remove their eSIM from my phone. Apple's instructions worked -- but the line name remained even with a deleted eSIM.

It's a bug.

When Apple asks if you want to update any contacts using the number associated with the removed eSIM you have to say yes -- even if there are none. Looks like a simple logic bug. Then the entry will be removed.

Tuesday, June 24, 2025

Create a macOS desktop shortcut (.inetloc) that deep links to a specific note in Notes.app

Writing this up quickly, I might get back to it later.

I want to have a shortcut to a specific macOS Notes.app note that I can put in a folder.

1. In the note I want to link to hit ⌘K. Search on name of the current note.

2. Do NOT use the note title option. Unclick that and provide your own title. Create link in note.

3. A link is created in the note. Click on that that and then drag it to the desktop. An inetloc file with a deep link is created.

This is what the .inetloc shortcut has in it:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">

<dict>

<key>URL</key>

<string>applenotes:note/fcbf1ab3-4779-49d5-b12f-ab33e9809113?ownerIdentifier=_5e4c6731f56ce6c061ce7014d9bc1b2a</string>

</dict>

</plist>

Sunday, June 22, 2025

Porting a landline number to a secondary Ting eSIM on iPhone with primary AT&T account

This was much harder than I expected it to be. Below is a simplified account of what eventually succeeded. I actually started out by trying to transfer from CenturyLink to Tello. That port failed. It was impossible to determine why it failed, each company pointed me to the other. I did learn that the porting process is surprisingly manual, there's an actual carrier to carrier voice call involved.  The porting office is kept away from customers to reduce social engineering exploits. Lastly the all important PIN provided by, in this case CenturyLink, is of a form that suggests the carriers don't take it very seriously. Overall I was left with the impression that carriers have fairly successfully sabotaged the landline porting process. I miss having a government that cared about such things.

My best guess as to why the port from CenturyLink to Tello failed is that CenturyLink takes too long to process the request and Tello is too impatient. It took CenturyLink 4-5 days to complete the Port that succeeded, longer than Tello's 3 day limit. Tello's disinterest in the port process makes me wonder how much time they have as an MVNO.

After some glitches I was able to delete my Tello account (they had a bad link that I'm sure they will never fix).

Now to what worked with an preface of why we were among the last to do successfully port a number from a landline to a mobile company. 

Why we ported from a landline in 2025

We are among the last in America to have a $43/m voice only family landline. It persisted because our ancient security system relies on two of the standard four copper landline wires, and the switching costs were comparable to our monthly landline fee. The landline was purely a message phone, it didn't ring.

It was on the list of things to replace but lower priority since minimal savings and added hassles.

Then copper wires started to disappeared in our metro area. I think wire theft may have peaked for the moment, but the copper side of Century Link isn't paying what it would take to maybe keep the wires working. When the elderly techs come by they beg us to leave copper so they can finally rest.

We want to keep the legacy number so I looked into the 2025 porting options. The only thing that's changed since I last looked in 2015 or so is the eSIM. Mastodon friends suggested voip.ms, but it was obvious that we're not their business. (These days we think a lot about how things get managed after we die, and we assume that the kids are having to make decisions. They are not techies.) Also, canceling voip.ms service requires tedious interactions with their outsourced retention people. A huge red flag.

You still can't port from landline directly to Google Voice. The cost of a landline port would be prohibitive for what is still a "free" service. The AIs claim you can't port from CenturyLink VOIP to Google Voice either.

CenturyLink (fiber) would sell us a VOIP phone service for about $30/m that I'm sure would not have a porting issues. This is modest savings from the $43 landline, but we felt we could do better. Also, I'm not impressed with legacy CenturyLink service. (Their fiber service has worked well for us, they behave like separate companies.)

We looked at using an old iPhone as our home phone with its Apple Voice Mail (requires data). AT&T is our ($$) current family carrier and we could add a $30+/m line from them. But of course there are cheaper options.  Back in 2012 we used H2O Wireless for the kids phones. It's rock bottom service quality but if you work at it you should be able to use them for under $100 a year (prepay, no contract). They are still around! Also familiar from the old days: Tello, Hello Mobile, and Ting. All of which will provide new phones that could be left in the kitchen. We could even use one of our old iPhones. (Note Apple vmail requires some data support, so data-free won't work).

Happily there are better options than leaving an old iPhone on a charger. In the past few years eSIMs have started to work fairly well on iPhones. Our current phones can all handle at least 2 (I think up to 8?) eSIMs. So rather than hassle with an old iPhone holding the number, we ported it to an eSIM on Emily's personal iPhone.

I asked the AIs which had the better customer service among H2O Wireless, Tello, Ting, and Hello Mobile. Tello and Ting won easily. I tried Tello and my initial impression was good, but as noted above the port failed. With Tello you get a temporary number and eSIM immediately, then switch numbers if the port works.

After the Tello port failed we removed the eSIM from Emily's iPhone and tried Ting's $10/m plan. I actually sent a referral from an older Ting account I had but I'm not sure the referral credit thing worked.

We again called CenturyLink. Emily's name was on the landline account, so we used her name on the Ting account. We had the correct account number. Emily navigated CenturyLink phone puzzle and got a 4 digit Port code. We submitted the port request with Ting.

There's no way to monitor porting progress from the Ting site but after 5 work days Emily got an email notification.

Then as expected, things got a bit wonky. Ting's documentation on the eSIM assignment process is contradictory and didn't match what happened. We got a link to go to, but the link only displayed a blank page. We tried it from both the desktop and from Safari mobile. When I investigated the Ting account however it seemed like her iPhone was activated.

In fact it appears that Ting was using Apple's eSIM Carrier Activation. Under some conditions, presumably including a port, the eSIM can be pushed directly from the carrier to the target device. No customer interaction needed -- despite Ting's reference to QR codes and the like. (Bit unnerving really.)

After confirming the eSIM was on her phone we configured it. There are several options to look at,  We configured her Vmail response and tested texting and calling. Everything seemed to be in order.

Wednesday, May 28, 2025

Move your existing Greenlight account to the free US Bank option: you can't do it on macOS desktop

If you have a GreenLight family debit card and are a US Bank checking customer, you can, in theory, link the GreenLight account to the US Bank checking account and save $72 a year. If you do this you lose some Greenlight features (investing, maybe some others) I don't care about, and after the migration some functions move to the US Bank app:

  1. Sending money to "kids" and viewing balance is through the US Bank app.
  2. Greenlight app for setting spending limits, managing chores, pay allowance, etc.

I got an email about this from US Bank, very thoughtfully clicked the macOS Mail.app email link, clicked Approve on the form ... and nothing happened. Even with popups enabled:

I was able to workaround the bug. There are two things I did but I think the big one is the first.
  1. I had to click the link in the US Bank mail I received on mobile, not on desktop. I don't think this works on desktop at all! There's no GreenLight desktop access (mobile only), and since the mobile process invokes the GreenLight app I don't see how it would work on desktop even if there wasn't a bug with this form. US Bank contractors coded the page for use on mobile but didn't consider that somebody might click an email link from a desktop app.
  2. I thought at first there was a problem because my funding source was already my US Bank checking account. So I switched to using my US Bank debit card and remove the checking account. After I migrated I reversed this. I don't think this was necessary however.
So, basically, I think the GreenLight to US Bank migration is actually mobile only, even though clicking an email link from macOS will initiate the migration in a browser. If I'm right the web page needs to check that it's running on mobile, and display the appropriate error message.