While Automator and AppleScript fail to reliably batch delete thousands of calendar events in recent macOS versions (see Archiving Calendar.app events as plain text), Shortcuts.app is surprisingly successful:
Backup all calendars
File → New Shortcut
Action Library → Apps → Calendar
Drag "Find Calendar Events" into the shortcut editor (aka "main window")
Change Start Date as desired then click the plus symbol to the right and add additional criteria (e.g., "Calendar is Travel", "Calendar is not US Holidays", "End Date is Before 1/1/2023, 00:00", etc.)
Drag the "Remove Events" action underneath → click "Show More" → leave "Include Future Events:" unchecked to preserve repeating events linked to ones that will be deleted
Before running the shortcut, open Shortcuts Preferences... → Advanced and enable "Allow Deleting Large Amounts of Data"
Delete all events in the Travel calendar within the last 8 years that took place before 1/1/23 while preserving any repeating events after that date:
Delete events in all calendars other than Birthdays and US Holidays within the last 13 years that took place before 1/1/23 while preserving any repeating events after that date:
Start Date is the only required filter parameter in the "Find Calendar Events" action. Setting an overly-long value for "is in the last x years" resulted in the shortcut not returning any results.
While setting the Start Date to "is in the last 10 years" should include all earlier years (9, 8, etc.), Shortcuts does not always find them; be sure to check and rerun with a lower value if necessary.
Setting Start Date to "is between" did not work on large numbers of events.
Shortcuts.app does not require explicit authorization in System Preferences → Security & Privacy → Privacy for accessing data in Calendar.app. However, it is important to ensure that "Ask to Delete" is selected instead of "Never Delete" within the shortcut's Privacy settings (View → Show Shortcut Details → Privacy → "Allow this shortcut to delete data?"; the option becomes visible only after having clicked "Delete" or "Don't Delete" in the Privacy popup dialog on the first successful run).
Tested in macOS 12.6.1 Monterey with Shortcuts 5 and Calendar 11.
/mac | Dec 11, 2023
If the columns in Thunderbird's message list have disappeared, it may be due to Supernova's "Modernized Cards View". Revert to the original layout and get your columns back by clicking on the new "Message list display options" icon at top right and selecting "Table View":
/misc | Dec 11, 2023
Much like on macOS, emails can be easily exported as EML files by dragging them from Mail.app to Files.app in Split View.
As iPhones lack Split View support, a workaround is required to export EML files:
Tap the Compose icon.
Swipe down from the top bar of the New Message window to minimize it.
Tap and drag desired email message onto the small New Message window at the bottom of the screen.
Lift your finger when the New Message window reopens; this will attach the selected email as an EML file.
/misc | Dec 01, 2023
or, Monitoring app installers/activity:
Clone entire boot volume with Carbon Copy Cloner 5 (or 6 via Legacy Bootable Copy Assistant)
Install or run app
Repeat step 1
Compare clones with Beyond Compare in a root session: sudo /Applications/Beyond\ Compare.app/Contents/MacOS/BCompare
Create a local snapshot:1 tmutil localsnapshot
Install or run app
Repeat step 1
Find snapshot names: tmutil listlocalsnapshots /
com.apple.TimeMachine.2023-10-16-184148.local com.apple.TimeMachine.2023-10-16-184247.local
Create mount points and attach snapshots:2
%mkdir ~/snapshot1 ~/snapshot2
%mount_apfs -o ro -s com.apple.TimeMachine.2023-10-16-184148.local /System/Volumes/Data ~/snapshot1
%mount_apfs -o ro -s com.apple.TimeMachine.2023-10-16-184247.local /System/Volumes/Data ~/snapshot2
Compare snapshots with Beyond Compare as above
Unmount snapshots and optionally delete mount points (~/snapshot1 & ~/snapshot2) and snapshots (e.g., tmutil deletelocalsnapshots 2023-10-16-184247
) when done.
fs_usage
, fseventer, etc.)Suspicious Package (mentioned in ‘12, ‘17, & ‘21): "An application for inspecting macOS installer packages."
How do I know what files are installed by an installer program?
How to Open .pkg Files to View What Will Install on Mac with Suspicious Package: "Longtime Mac users may recall that a package inspection feature used to exist in Mac OS X some time ago via the right-click menu, but that feature has since been removed. More advanced Mac users can still extract pkg files with pkgutil without actually installing them but it requires the use of the command line, and the Show Files method to see what files are going to be installed and where to is not always available or detailed enough."
File Buddy (mentioned in ‘05 & ‘17): "Create snapshots to track changes to a folder or disk, such as files installed by an installer. Use the results of snapshot comparisons to uninstall applications."
FileControl: "Determine exactly which files have been changed, anywhere on your system."
Virtual machines:
Windows:
Time Machine backups exclude a number of files and folders and others may be excluded via the com_apple_backup_excludeItem
extended attribute (uncover them via sudo mdfind "com_apple_backup_excludeItem = 'com.apple.backupd'"
). ↩
Grant Terminal Full Disk Access to avoid mount_apfs: volume could not be mounted: Operation not permitted
. ↩
/mac | Oct 17, 2023
Several MP4 files hosted on this site are encoded using H.265 (HEVC). While most browsers support playback, Mozilla Firefox 118.0.1 returns an error:
Suggestions such as enabling pass-through support or providing a more descriptive error message have been made; alack, to no avail as yet.
Handy one-liner for returning the encoding type of all MP4 files in the current directory:
find . -type f -name "*.mp4" -exec sh -c 'echo -n "{}: "; ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "{}"' \;
/misc | Sep 29, 2023
"Should I wear a mask?" "Oh, absolutely not." 📺
"There's no reason to be walking around with a mask." 📺
"A mask is more appropriate for someone who is infected." 📺
"Do we need a national [mask] mandate?" "Yes." 📺
Bloomberg: The David Rubenstein Show: Anthony Fauci, May 22, 2019
Spectrum News: Disease Expert: Flu a Bigger Risk in the US Than Coronavirus
60 Minutes: March 2020: Dr. Anthony Fauci talks with Dr Jon LaPook about Covid-19 (See also Preventing coronavirus: Should you wear a face mask?)
Spectrum News: Disease Expert: Flu a Bigger Risk in the US Than Coronavirus
CNBC: Anthony Fauci on The News with Shepard Smith, October 28, 2020 (See also Fauci voices support for national mask mandate)
CNN: Dr. Fauci responds to study that says masks didn't work
2020:
USA Today: Top disease official: Risk of coronavirus in USA is 'minuscule'; skip mask and wash hands - "Fauci doesn't want people to worry about coronavirus, the danger of which is 'just minuscule.'"
NBC: Do you need a mask? The science hasn't changed, but public guidance might - "Surgeon General Jerome Adams has been outspoken against healthy people wearing masks or other coverings in public. '@WHO @CDCgov and my office have consistently recommended against the general public wearing masks as there is scant or conflicting evidence they benefit individual wearers in a meaningful way,' Adams wrote on Twitter."
Center for Infectious Disease Research & Policy at University of Minnesota: Masks-for-all for COVID-19 not based on sound data by Dr. Brosseau ("a national expert on respiratory protection and infectious diseases") and Dr. Sietsema ("an expert on respiratory protection")
2021:
City Journal: Do Masks Work? A review of the evidence
Independent: 1.6 billion disposable masks entered the ocean in 2020 and will take 450 years to biodegrade - "Waste from throwaway masks created a mass of plastic waste around 7 per cent of the size of the Great Garbage Plastic Patch"
Brownstone: More than 170 Comparative Studies and Articles on Mask Ineffectiveness and Harms
2022:
2023:
New York Times: The Mask Mandates Did Nothing. Will Any Lessons Be Learned?
Reason: Masks Make 'Little or No Difference' on COVID-19, Flu Rates: New Study
The Atlantic: A New Turn in the Fight Over Masks
CNN: Mask study author: 'More likely than not they don't work'
South China Morning Post: Maskless Joe Biden laughs off pandemic guidance despite first lady having Covid
USA Today: 'Don't tell them I didn't have it on': Biden flaunts not wearing mask after COVID exposure
Politico: Biden casts off his mask
/misc | Sep 18, 2023
Anthony Fauci was interviewed by CNN's Micheal Smerconish* and made the following claim:
"Organizations like the CDC recommend (CDC doesn't mandate anything) I mean recommends, that people wear masks." 📺
The CDC itself contradicts him:
"The Centers for Disease Control and Prevention (CDC) issued an Order [PDF – 11 pages] on January 29, 2021 requiring the wearing of masks by people on public transportation conveyances or on the premises of transportation hubs to prevent spread of the virus that causes COVID-19. This Order was effective February 1, 2021 and was published in the Federal Register on February 3, 2021.
"The terms of the Order, which were no longer enforceable as a result of a court order (effective, April 18, 2022), have now expired due to the conclusion of the Public Health Emergency on May 11, 2023."
* Apparently on September 2, 2023 based on the CNN URL.
/misc | Sep 03, 2023
/misc | Aug 26, 2023
Apple silicon (M1) Mac
macOS 13.4.1 Ventura with SIP disabled1
Mozilla Firefox 116.0.12
Bit Slicer 1.7.12 or Cheat Engine 7.4.3 for Mac3
Tower Swap version 55 in single player mode (i.e., not logged in)
Open Tower Swap in Firefox and press Play (optionally go offline once game has loaded)
Press Shift+Esc to open Firefox's Process Manager and find the Tower Swap tab process ID (e.g., 696)
Launch Bit Slicer → from the drop-down menu at top left, select the process ID found in step 2 (e.g., "FirefoxCP Isolated Web Content (696)")
Enter the current number of swaps in Tower Swap (e.g., 5) in the box at top right and press Return
Make a move in Tower Swap to change the number of swaps to 4 → enter 4 in the box at top right and press Return
Repeat step 5 until only two addresses remain
Double click value for first address → change value to desired number of swaps → press Return (if the number of swaps does not change, repeat using the second address)
Install Rosetta 2 if missing (optionally back up for offline use)
Open Tower Swap in Firefox and press Play (optionally go offline once game has loaded)
Press Shift+Esc to open Firefox's Process Manager and find the Tower Swap tab process ID (e.g., 696)
In Terminal, convert the process ID from decimal to hex via printf '%x\n' 696
→ 2b8
Launch Cheat Engine → File → Open Process → click Processes tab → click process matching hex value (e.g., "000002B8-FirefoxCP Isolated Web Content") → click Open
Enter the current number of swaps in Tower Swap (e.g., 5) in "Value:" → click "First Scan"
Make a move in Tower Swap to change the number of swaps to 4 → enter 4 for "Value:" → click Next Scan
Repeat step 8 until only two addresses remain
Double click first address → double click the decimal value in the bottom pane → change value to desired number of swaps → click OK
Failure to disable SIP returns "Search Failure: FirefoxCP Isolated Web Content's memory cannot be searched due to system protections." in Bit Slicer and "Error while opening this process. Have you disabled 'System Integrity Protection (SIP) yet?" in Cheat Engine. ↩
"Target Choice: Web browsers like Safari and Google Chrome may opt into security protections preventing them from being accessed by Bit Slicer." → "This filtering can be disabled however by executing the following command in Terminal and re-launching Bit Slicer: defaults write com.zgcoder.BitSlicer ZGRemoveRootlessProcessesKey -bool NO
" ↩
Unlike Cheat Engine, Bit Slicer is: signed and notorized, a Universal 2 binary (i.e., Apple silicon-native), and not time-limited trialware. Both projects maintain GitHub repositories: CE | BS. ↩
/mac | Aug 07, 2023
with iSH Shell & GNU Coreutils' shuf
and fold
:
shuf -n 1 book.txt | fold -w 30 -s
Enjoy aleatory quotes from ebooks, etc.
/nix | Jul 27, 2023
/windows | Jul 11, 2023
/windows | May 23, 2023
painted by Graeber & Wengrow in The Dawn of Everything1 is rather economical with the truth. The pair claim that [emphases added throughout]:
"[Native] Americans, by contrast, were equal insofar as they were equally free to obey or disobey orders as they saw fit."
"That indigenous Americans lived in generally free societies, and that Europeans did not, was never really a matter of debate..."
"[A]n office holder could give all the orders he or she liked, but no one was under any particular obligation to follow them."
"Europeans were constantly squabbling for advantage; societies of the Northeast Woodlands, by contrast, guaranteed one another the means to an autonomous life – or at least ensured no man or woman was subordinated to any other."
And while they dismissively acknowledge:
"...[the Wendat] had formal political offices and a stratum of war captives whom the Jesuits, at least, referred to as ‘slaves’..."
the academics knew (assuming they read their primary source2) that Kandiaronk himself3 described such "war captives" in no uncertain terms:4
"...the young Warrior will not embarque in a married State till he has made some Campaigns against the Iroquese, and took some Slaves to serve him..."
"If any one of us have a Mind to build a Canow or a Hut, we all send our Slaves to forward the Work, without being ask'd."
"Besides, our Slaves take all the Drudgery off our Hands..."
"If you lived after our Manner, all of you would be equally Masters ; your Riches would be of the same Stamp with ours, and consist in the Purchasing of Glory by military Actions, and the taking of Slaves ; for the more you took of them, the less Occasion you would have to work : In a word, you would live as happily as we do."
Graeber, D., & Wengrow, D. (2021b). The Dawn of Everything: A New History of Humanity. New York: Farrar, Straus and Giroux. Quotes are from pages 45, 40, 43, 48, and 40 respectively.
Cited as "the 1735 English edition of Dialogues"; since no such title exists, they must be referring to Lahontan's New Voyages to North-America of the same year (which appears in their bibliography and contains the dialogues). While the first French and English (1, 2) versions of Nouveaux Voyages de Mr le Baron de Lahontan dans l’Amérique Septentrionale were both published in 1703, only the English edition contained the dialogues (as alluded to on its title page: "Done into English. In Two VOLUMES. A great part of which never Printed in the Original."). The dialogues appeared the following year in French with the publication of Suite du Voyage de l'Amérique, ou Dialogue de Monsieur le baron de Lahontan et d'un sauvage dans l'Amérique.
Graeber & Wengrow argue that Lahontan's work reflects actual "conversations between Lahontan and Kandiaronk" as opposed to being a fiction invented by himself; in fact, they go so far as to replace the pseudonym "Adario" with "Kandiaronk" when quoting passages from the book.
Lahontan, 1735. New Voyages to North-America. 2nd ed. London: J. Walthoe, et al. Quotes are from pages 114, 156, 145, and 144 respectively.
/misc | May 11, 2023
with Marco Pontello's HdRen, a simple Python 2 script that adds file signatures to filenames, making it easy to spot imposters:
$ls -1
1.mp3 2.mp3 3.mp3 $hdren.py foo/
... $ls -1
'4D5A5A01=2.mp3' 'FFFB90C4=1.mp3' 'FFFB90C4=3.mp3'
/nix | May 07, 2023
For almost two decades, MSKey Readme1 has heralded the defeat of Windows XP's product activation, not via mere circumvention, but by cracking the encryption algorithm itself.
Based on the even earlier Inside Windows Product Activation: A Fully Licensed Paper2, WindowsXPKg3 launched on Microsoft's GitHub platform four years ago (see update #3 below). While it can generate product keys, the program relies on an external, third-party server to return the Confirmation ID.
In a post last year on the Windows XP subreddit (Windows XP web activation is finally dead…), u/retroreviewyt shared xp_activate32.exe4, which calculates the Installation ID then generates and optionally applies the corresponding Confirmation ID to activate Windows XP, all offline. Wiping the system and reinstalling Windows XP results in the same Installation ID being assigned by Windows (assuming no change in hardware or product key), thus the same Confirmation ID obtains even in msoobe's standard telephone activation window.
Long considered out of reach, this development bodes well for salvaging old systems even after Microsoft shuts down the activation servers. Given their curious tolerance (even use!) of MAS (hosted on their own platform!), which impacts all modern versions of Windows, perhaps Microsoft will see fit to release an official XP activation tool for posterity.
The apparently oldest extant copy, dated January 18, 2005, is signed "yag". A few months later, it was posted to Tool_Delphi2005 by Alexandre Trevizoli. By 2007, Kevin Hatfield was hosting it, and he claimed copyright by 2008, thereby becoming associated with the document in later years.
In fact, the paper was released in July 2001, before even Windows XP was released to manufacturing. However, it was kept "a little vague at some points in order not to facilitate the task of an attacker attempting to circumvent the license enforcement supplied by the activation mechanism".
Elliptic Curve Key Tool is a similar app that does not require recompiling for each combination.
18432 bytes with a SHA-256 hash of 5a4bcac5a50eb5113dd6a2f88c35ebdb709c4df8a792c71ad03ea347afaced52 (first seen by VirusTotal on 2020-10-16).
Neo-Desktop has forked WindowsXPKg to include a fix for compiling and running properly under Linux. They are also at work on disassembling xp_activate32.exe.
The purported source code for xp_activate32.exe has been posted to MDL (since deleted) by diamondggg, who referenced such a tool in 2021. See this thread for more information.
On the provenance of WindowsXPKg, Endermanch stated: "This repository is not the original source for the Windows XP Keygen. The original was uploaded to PlanetWPA as part of MSKey 4-in-1 algorithm sources back in early 2000s and was made by z22." The comment has been updated with additional details and, along with his XPKeygen README, is sine qua non for understanding the history and mathematics behind this story.
/windows | Apr 23, 2023
$ pdftotext -layout input.pdf output.txt
Preinstalled in current versions of Debian, Ubuntu, et al.; Homebrew formula (brew install poppler
), raw source, and Windows binary also available. Beautiful conversion of QuickBooks invoice PDFs into plain text.
H/T: Linux Uprising
UPDATE: "Marker converts PDF, EPUB, and MOBI to markdown. It's 10x faster than nougat, more accurate on most documents, and has low hallucination risk."
/nix | Apr 14, 2023
the cause may be the default 5% of filesystem blocks reserved for root by ext4:
$ sudo dumpe2fs /dev/vda2 | grep -i "block count"
...
Block count: 16645632
Reserved block count: 832281
(832281/16645632 x 100 ≈ 5.00%)
$ sudo tune2fs -m 0 /dev/vda2
...
Setting reserved blocks percentage to 0% (0 blocks)
Check once more:
$ sudo dumpe2fs /dev/vda2 | grep -i "block count"
...
Block count: 16645632
Reserved block count: 0
/nix | Apr 08, 2023
quietly ended on March 20, 2023. The initial notice on Amazon's Order History Reports page read:
Order History Reports will be unavailable after March 20, 2023
You can continue accessing your order history on Your Orders .
and now confirms:
Order History Reports are no longer available
You can continue accessing your order history on Your Orders .
Michael Tsai's Unhelpful Amazon Order Confirmation E-mails highlighted the behemoth's information-light missives; this move only adds insult to injury (apparently business accounts still have access to CSV order reports).
Two workarounds:
Philip Mulcahy's open source Amazon Order History Reporter (Chrome Web Store). Tested successfully. If you find it useful too, consider donating to Princess Alice Hospice as requested by Philip:
I share and work on this extension for free, but need donations to the linked hospice charity to be more proportional to the value commercial users are receiving. At the moment, the vast majority of donations appear to be from private/family users, not businesses, and the total amount donated is a tiny fraction of both the value of my donated time, and the value business are receiving.
Amazon's Request My Data page, which includes options like "Your Orders", "Subscriptions", "Search History", "Customer Support Communication", and "Request All Your Data". Alas, as yet I cannot report on its efficacy:
We've received and are processing your request to access your personal data.
We will provide your information to you as soon as we can. Usually, this should not take more than a month [emphasis added]. In exceptional cases, for example if a request is more complex or if we are processing a high volume of requests, it might take longer, but if so we will notify you that there will be a delay.
UPDATE 1: To their credit, Amazon:
UPDATE 2: The "All Data" report took just under two weeks to arrive and included such arcana as "Digital.PrimeVideo.NotInterested.csv", "Amazon-Music/listening.csv", and "PhysicalStores.OrdersVisitsSurveys/datasets/WholeFoodsMarket.Orders/WholeFoodsMarket.Orders.csv" among many others (226 directories in root!).
/misc | Mar 25, 2023
Some contacts would not export to vCard from Contacts.app, instead exhibiting the following behavior:
when clicked and dragged alone, the resulting file, "Contact.vcf", was zero KB
when clicked and dragged with unaffected contact(s), affected contact(s) would be skipped
when exported via File → Export → Export vCard..., affected contact(s) would be skipped if combined with unaffected contact(s), while no output would be produced if only affected contact(s) was/were selected.
Maurits kindly wrote in with both the cause:
[T]he affected records have in common that in ZABCDRECORD, the ZDISPLAYFLAGS column is set to NULL for the affected records. This column seems to indicate whether an entry is a company (1) or a person (0). My suspicion is that older macOS versions didn't bother to write a 0, but kept it at NULL, whereas newer versions are explicitly expecting a 0 instead of a NULL. To bolster this theory, all affected entries were rather old ones.
and actual resolution:
Close Contacts.app, fire up sqlite3 on the AddressBook-v22.abcddb file and execute
UPDATE ZABCDRECORD SET ZDISPLAYFLAGS = 0 WHERE ZDISPLAYFLAGS IS NULL;
The remainder of the post is retained for the sake of historical curiosity (and as a testament to my inextant SQL knowledge).
Tested in macOS 12.6.1 Monterey and 13.2.1 Ventura with local (i.e., "On My Mac") contacts:
Launch Automator.app
Select "Workflow" and click "Choose"
Select "Contacts" under "Library"
Drag "Get Selected Contacts Items" into the workflow area at right and leave it set to the default "Get selected people"
Drag "Export vCards" under that, select either "one vCard" or "individual vCard" from the "Export" dropdown menu, and select a destination in the "to:" dropdown menu
In Contacts.app, select desired contacts to export
In Automator, click Run
While unaffeced contacts could be deleted from Contacts.app, affected contacts could not; after exporting both affected and unaffected contacts to vCard via Automator, the contents of ~/Library/Application\ Support/AddressBook/ were deleted to clear all data from Contacts.app, then the Automator-exported vCards were imported - the previously affected contacts were no longer affected.
Apparently tools which use AddressBook-v22.abcddb like Contacts.app, abcddb2vcard, and Exporter for Contacts 2 fail on the affected contacts (despite sqlite3 queries like select * from ZABCDCONTACTINDEX;
working on those contacts from Terminal), while tools which access the associated .abcdp files instead like Automator and contact_reaper.py are able to export the affected contacts. UPDATE: relikd, the author of abcddb2vcard, has kindly updated it to handle the affected contacts in AddressBook-v22.abcddb.
Be sure to check ~/Library/Application\ Support/AddressBook/Metadata/ and ~/Library/Application\ Support/AddressBook/Sources/UUID/Metadata/ for additional contacts in .abcdp format that may not appear in Contacts.app (which is populated via the ~/Library/Application\ Support/AddressBook/AddressBook-v22.abcddb sqlite database, which is itself supposed to populate from the .abcdp files located in Metadata, though there can be orphaned .abcdp files in the latter). The only documented method for importing or converting .abcdp files is to drop the Metadata folder containing them into a blank ~/Library/Application\ Support/AddressBook/ directory under macOS Mojave or earlier and allow Contacts.app to rebuild the AddressBook-v22.abcddb sqlite database from there before exporting to vCard from Contacts.app. This process, along with Quick Look's "Add to Contacts" button for .abcdp files, stopped working as of Catalina.
However, Catalina, Big Sur, Monterey, and Ventura do work in reverse: if you copy an AddressBook-v22.abcddb into a blank ~/Library/Application\ Support/AddressBook/ directory, Contacts.app will create the Metadata subdirectory and populate it with .abcdp files (Big Sur required logging off and on for the contacts to appear in Contacts.app, and, as expected, the process did not work under Mojave).
Relatedly, if you double click an .abbu Contacts backup and select Replace All in Catalina or later, you may be left with a blank Contacts.app. Whereas if you extract AddresBook-v22.abcddb from the .abbu package and restore it to an empty ~/Library/Application\ Support/AddressBook/ directory, the contacts should appear in Contacts.app when launched.
Contacts.app's File → Export → Contacts Archive... merely makes a copy of ~/Library/Application Support/AddressBook/ with .abbu appended.
.abcdp files can be converted from Apple binary property list to XML for easier parsing (perform on copies only): plutil -convert xml1 <UUID>/ABPerson.abcdp
, though BBEdit can display either format with equal ease.
abcdp = Address Book CoreData person, abcdg = Address Book CoreData group
Find the .abcdp file which corresponds to a given contact in Contacts.app's AddressBook-v22.abcddb SQLite database:
via Terminal: grep -r -i --include=\*.abcdp foo ~/Library/Application\ Support/AddressBook/
Open Automator and create a new Quick action
Set "Workflow receives current" to "no input" and "in" to "Contacts.app"
From the Utilities group, drag the Run AppleScript action into the workflow area and paste in this script:
tell application "Contacts" set thePeople to selection repeat with aPerson in thePeople set createDate to (creation date of aPerson) set modDate to (modification date of aPerson) display dialog name of aPerson & return & id of aPerson & return & "Created: " & short date string of createDate & return & "Modified: " & short date string of modDate end repeat end tell
Save the Quick Action with a short, descriptive name
Open Contacts, select a contact (or many), and select your Quick Action name from Contacts → Services
AddressBook-v22.abcddb & SQLite
The ZABCDCONTACTINDEX table contains all contact data in the ZSTRINGFORINDEXING column (though without the associated field names):
%sqlite3 ~/Library/Application\ Support/AddressBook/AddressBook-v22.abcddb
sqlite>.output /Users/user/Desktop/contacts.txt
sqlite>select ZSTRINGFORINDEXING from ZABCDCONTACTINDEX;
sqlite>.q
Dump all tables to text: sqlite3 AddressBook-v22.abcddb .dump > ~/Desktop/all-tables.txt
parse_abcddb.rb: "Get a csv from an Apple Address Book '.abbu' archive"
How to sort contacts by creation date or modification date in iOS Contacts or OS X Contacts 7.x?
SQLite visual browsers: DBeaver, DB Browser for SQLite, SQLiteStudio, SQLite Viewer, Navicat for SQLite
SQLite data modelers/visualizers: sqleton, Luna Modeler, Navicat Data Modeler (open Navicat for SQLite and drag sqlite database file onto its Dock icon → open Navicat Data Modeler → New Model → Database: SQLite → OK → File → Import from Database... → Manage Connections → New → Import Connections to My Connections... → select Navicat for SQLite database → OK → Close → click database in Connection: dropdown menu → check top level of database → Start → Close)
SQLFluff: SQL linter and auto-formatter
Can't edit or delete mac contacts includes an answer from Linc Davis to "unlock all your user files (not system files) and reset their ownership and access-control lists to the default" via { sudo chflags -R nouchg,nouappnd ~ $TMPDIR.. ; sudo chown -R $UID:staff ~ $_ ; sudo chmod -R u+rwX ~ $_ ; chmod -R -N ~ $_ ; } 2> /dev/null
, and, failing that, to run resetpassword
in macOS Recovery.
Unable to import .abbu file into Contacts on Mac OS 15.2 reports success in Catalina 15.3 with restoring contacts from the Metadata directory
Verifying that there's no way to create a vCard from just the .abcdp files.
Unable to recover contacts from Mojave to Big Sur describes a contacts restore in Big Sur working after waiting several days(?!)
ContactsCleaner offers a workaround for local Contacts.app synchronization failure caused by "son" or "daughter" labels; see also SiliconLunch's amplification.
2005, from John Siracusa's Mac OS X 10.4 Tiger review:
The Address Book and iCal applications use monolithic data and index files to store all their data, rather than individual files for each data item (contacts, events). Address Book uses a single, large data file (AddressBook.data) and two SearchKit index files (ABPerson.skIndexInverted and ABSubscribedPerson.skIndexInverted). The situation is similar for iCal, which uses a data and index file for each calendar, rather than for each individual event.
And yet Spotlight will find and display individual contacts and calendar events. Selecting one from a Spotlight search results list will open the appropriate application and take you right to the contact or event.
There actually are individual data files for Address Book contacts in ~/Library/Caches/com.apple.AddressBook/MetaData/, and these files are indexed by Spotlight. But instead of showing up in Spotlight search results as obscurely named data files, they appear as conceptual proxies for the data they contain. Unlike other Spotlight search results, there's no file path listed for Address Book contacts.
To pull this off, the Address Book metadata importer sets a custom kMDItemDisplayName for the files that it imports, using the contact name instead of the file name. The individual data files hidden files in ~/Library/Caches/com.apple.AddressBook/MetaData/ have a ".abcdp" extension. Opening one from anywhere, not just a Spotlight search results window, will cause the Address Book application to launch and display that particular person. Pretty sneaky.
2007, from Amit Singh's Mac OS X Internals: A Systems Approach:
[U]nlike normal search results, we do not see the filename of an Address Book contact in the Spotlight result list. The same holds for Safari bookmarks and iCal events. This is because the files in question have a special metadata attribute named kMDItemDisplayName, which is set by the metadata importers to user-friendly values such as contact names and bookmark titles. You can see the filenames if you search for these entities using the mdfind command-line program.
$ mdfind 'kMDItemContentType == com.apple.addressbook.person && kMDItenDisplayName == "Amit Singh"' /Users/amit/Library/Caches/com.apple.AddressBook/Metadata/<UUID>:ABPerson.abcdp $ mdls /Users/amit/Library/Caches/com.apple.AddressBook/Metadata/<UUID>:ABPerson.abcdp ... kMDItemDisplayName = "Amit Singh" ... kMDItemKind = "Address Book Person Data" ... kMDItemTitle = "Amit Singh"
2009, from Eoghan Casey's Handbook of Digital Forensics and Investigation:
The Address Book is another application that has embraced the SQLite and plist format for much of the data manipulation. For Mac OS X 10.2 through 10.4 the Address Book data was stored in the user's Library/Application Support/Addressbook/ folder in a file named Addressbook.data. This was a proprietary file format that could be easily read only with the Address Book application itself. This changed in Mac OS X 10.5, and the Addressbook.data file may still exist, but it is leftover data no longer updated.
In Mac OS X 10.5 two structures seem to replicate that data. The AddressBook-v22.abcddb is an SQLite database that contains all the data in the Address Book. Interestingly, the same data is replicated in the Library/Application Support/Addressbook/Metadata folder, storing the same data in individual files as shown in Figure 7.10. There is an .ABCDP file for each contact as well as each group in the Address Book. These files build (or rebuild) the SQLite database upon launch of the application. The SQLite database is then used for the quick searching and the integration into the Mail and iChat application for address searching. Each .ABCDP file is just a property list and can be opened easily with Plist Editor.
/mac | Feb 19, 2023
with Qt5-based Kristall, the "Small-Internet Browser":
"Kristall is a browser without support for css/js/wasm or graphical websites. It can display user-styled documents in several formats, including gemini, html, markdown, … provided by a server via gemini, gopher, http, finger, …"
By default, Gemini is the only enabled protocol; to access the web head to kristall → Preferences... → Generic → and check HTTP and HTTPS.
The result is a calm, pleasant browsing experience reminiscent of "a more... civilized age":
/misc | Feb 17, 2023
I had a lengthy exchange with ChatGPT about veganism, in which it prevaricated quite a bit; backed in to a corner, ChatGPT was forced to come clean at last:
Me: Continuing in this vein, I'm going to ask you four simple questions. Please respond with simply "Yes" or "No". Do you understand?
ChatGPT: Yes, I understand. Please go ahead with your questions.
Me: Great, thanks. Question number 1: Is it unethical to kill a human for mere pleasure?
ChatGPT: Yes.
Me: Question number 2: Is it unethical to kill a sentient being for mere pleasure?
ChatGPT: Yes.
Me: Question number 3: In that case, given equal availability of both healthy plant and animal food choices, is it unethical to select animal food for mere pleasure of the palate?
ChatGPT: Yes, some people would argue that it would be unethical to cause unnecessary harm to sentient beings for mere pleasure. Others might have different perspectives and hold that consuming animal products is not unethical.
Me: You were just supposed to answer "Yes" or "No" as promised. Which is it please?
ChatGPT: I apologize, it is not possible for me to answer with just "Yes" or "No" as the ethical considerations around this issue are complex and multifaceted, and can depend on different ethical frameworks and individual perspectives.
Me: You yourself admitted in reply to question number 2 that is unethical to kill a sentient being for mere pleasure. Thus, given equal availability of healthy plant-based food choices, the only logical answer is "Yes" to the third question.
ChatGPT: As an AI model, I don't have personal opinions or beliefs. I can provide information and insights based on the data I was trained on and the algorithms I was programmed with.
Based on available evidence, it can be argued that the production and consumption of animal products can result in significant harm to sentient beings, as well as contribute to environmental degradation and other sustainability issues. Some people might consider this to be unethical and choose to avoid animal products for ethical reasons. However, the decision to consume animal products or to follow a vegan diet is a personal one and can depend on many factors, including individual values, beliefs, cultural background, and nutritional needs.
Me: I am not asking for opinion or belief, only logic. Based on your reply of "Yes" to questions 1 and 2, "Yes" is the only logical answer to question 3.
ChatGPT: Yes, based on the premise stated in the questions 1 and 2, it would be logical to say that it would be unethical to choose animal-based food for mere pleasure of the palate if healthy plant-based food options are equally available.
Me: Thank you.
ChatGPT: You're welcome! Let me know if there's anything else I can help with.
I had expected ChatGPT to take "Do you understand?" as the first question, hence the lack of a question labeled as number 4. Here is a screenshot of the exchange.
There appears to be some confusion around the premise in question 3 that a plant-based diet can be healthy, so I returned to the oracle (screenshot):
Me: Is a vegan diet healthy?
ChatGPT: A well-planned vegan diet can be healthy and provide all the necessary nutrients for the body. Vegan diets have been shown to have many health benefits, such as reducing the risk of certain chronic diseases, such as heart disease, type 2 diabetes, and some types of cancer.
However, it is important to note that a poorly planned vegan diet can be low in certain nutrients, such as vitamin B12, omega-3 fatty acids, calcium, and iron, that are found in animal products. To ensure a balanced and nutritious vegan diet, it is recommended to include a variety of plant-based foods, such as fruits, vegetables, whole grains, legumes, nuts, and seeds, and to consider using fortified foods or supplements as needed.
It is also recommended to speak with a healthcare provider or a registered dietitian to develop a personalized nutrition plan that meets your individual needs and health goals.
Me: By the same token, a poorly planned meat diet can also be low in certain nutrients.
ChatGPT: That's correct. A poorly planned diet of any type, whether it includes animal products or not, can be deficient in essential nutrients and have negative health effects. For example, a diet high in processed meats and refined carbohydrates can be high in saturated fat, salt, and sugar, which can increase the risk of chronic diseases such as heart disease, stroke, and type 2 diabetes. On the other hand, a well-planned diet that includes a variety of nutrient-dense foods from both animal and plant sources can support overall health and well-being.
It's important to emphasize that the key to a healthy diet is not necessarily based on whether it includes animal products or not, but rather on the quality and variety of foods consumed, as well as individual nutrient needs and health goals.
/misc | Feb 12, 2023
The Brother MFC-L8905CDW (among many other models) assigns touchscreen Scan to PC names based on the current Windows computer name; changing the computer name after initial setup will not change the Scan to PC name, nor does the manual explain how (or even if) the Scan to PC name can be changed. Moreover, neither ControlCenter4 nor Web Based Management (password info) offer any means to edit the Scan to PC name.
Thanks to timdotexe's decade-old post (which links to a long-dead Brother page missing from archive.org), an amplified and updated instruction set has been cobbled together for changing the Brother Scan to PC name under Windows 10 & 11:
* As alluded to in timdotexe's post, another method is via Control Panel → search for "scanner" → click "View scanners and cameras". The program filename is "ImagingDevices.exe", the window title is "Scanners and Cameras", and the running process is labeled "Imaging Devices Control Panel".
† On one Windows 11 install, a reboot was required for the scanner to appear in Scanners and Cameras.
Subsequent digging has unearthed the necessary steps on Brother.com, albeit for a very different and much older device, the ADS-2500We:
and this reddit thread was also found to contain the secret.
/windows | Feb 12, 2023
is requested regularly:
and while @dang expressed a willingness to implement it back in 2020, support is still absent as of early 2023 (in his defense, he did mention: "remember our motto: move slowly and preserve things...When I say slowly I mean slowly.").
Browser extensions like Dark Reader or Cascadea (among many others that support userscripts for customizing webpages) are often recommended as an alternative by those who are unaware of or indifferent to the risk:
(Apple really needs to display required permissions in the Information section of App Store listings so users can evaluate them before purchase.)
Perhaps Stylish, an extension expressly for managing userscripts and one of the most popular add-ons of its time, best demonstrates the danger:
Apple provides a framework for Safari web extension developers to leverage the least invasive permissions possible. Happily, Justin Wasack did just that with his open source Userscripts extension:
Combined with Vishal Patel's HN Dark Mode userscript (modified to handle the white flash, aka "flash of unstyled content" when navigating between pages on the site via @run-at document-start
), it offers the least bad option for Safari users until HN offers native dark mode (or until Apple allows custom style sheets in Settings... → Advanced to apply to specific websites, as Firefox's userContent.css does via @-moz-document domain
).
/mac | Jan 28, 2023
Attempting to update VMWare Tools in a Windows XP VM under Fusion 13 returned:
"D:\ is not a valid Win32 application."
A more helpful message would've been something like:
Windows XP cannot run VMWare Tools versions higher than 10.0.12; download it here.
VMware Tools support for Windows 2000, Windows XP, and Windows Server 2003 (81466):
VMware Tools 10.0.12 will be the last version to support legacy Guest Operating Systems (Windows 2000, Windows XP, and Windows Server 2003).
VMware Tools 10.0.12 Release Notes:
- VMware Tools support for Guest Operating Systems in version 10.0.12
winPreVista.iso
supports Windows 2000, Windows XP, and Windows 2003.linuxPreGLibc25.iso
supports Linux guest operating systems earlier than Red Hat Enterprise Linux (RHEL) 5, SUSE Linux Enterprise Server (SLES) 11, Ubuntu 7.04, and other distributions withglibc
version earlier than 2.5.darwinPre15.iso
supports Mac OS X versions 10.10.x and older.- VMware Tools 7.7.0 support for the following guest operating systems has been already frozen
winPre2k.iso
supports versions earlier than Windows 2000.- VMware Tools 8.1.0 support for the following guest operating systems has been already frozen
netware.iso
supports NetWare guest operating systems.
- Name: VMware-Tools-10.0.12-legacy-4448496.zip
- File size: 122.15 MB
- Release Date: 2016-11-05
- Build Number: 4448496
- MD5SUM: 1fc53cc75dd6b9e02cd67867f73a6a86
- SHA1SUM: 0b6e5f954eb848ffe1ae8ba1c297c335e95c6312
- SHA256SUM: 5eb1c9c1c5533c530839ea714a8b2ecbba201022c99c340b0332f966e7a68f80
/mac | Jan 04, 2023
Microsoft does not appear to host a list of Windows' default Microsoft Management Console (MMC) snap-ins/Management Saved Console (MSC) files.
Here is one from a clean Windows 10 installation with descriptions cobbled together from a variety of linked sources. Launch MSC files from an elevated command prompt via mmc name.msc
.
What is Microsoft Management Console?: "You use Microsoft Management Console (MMC) to create, save and open administrative tools, called consoles, which manage the hardware, software, and network components of your Microsoft Windows operating system."
/windows | Jan 02, 2023
Today's HN discussion on How many layers of UI inconsistencies are in Windows 11? included a thread sparked by csours on working around Windows' byzantine maze of UI elements with CPL shortcuts.
Microsoft's documentation is woefully out of date, so here's a list of those found in %SystemRoot%\System32 on a clean Windows 11 Pro 21H2 install:
Filename | Description |
---|---|
appwiz.cpl | Programs and Features |
bthprops.cpl | Bluetooth & devices → Devices |
desk.cpl | System → Display |
Firewall.cpl | Windows Defender Firewall |
hdwwiz.cpl | Device Manager |
inetcpl.cpl | Internet Properties |
intl.cpl | Region |
joy.cpl | Game Controllers |
main.cpl | Mouse Properties |
mmsys.cpl | Sound |
ncpa.cpl | Network Connections |
powercfg.cpl | Power Options |
sysdm.cpl | System Properties |
TabletPC.cpl | Tablet and Pen Settings |
telephon.cpl | Phone and Modem |
timedate.cpl | Date and Time |
wscui.cpl | Security and Maintenance |
Just press Winkey+R, type the desired CPL filename, and press Enter to open.
UPDATE: As of Windows 11 version 22H2, attempting to open "Devices and Printers" through the Control Panel or by using the command control printers
will now redirect users to the Settings app. To access the traditional interface, enter control /name Microsoft.Printers
or shell:::{A8A91A66-3A7D-4424-8D24-04E180695C7A}
in the Run dialog box.
/windows | Jan 02, 2023
For most of its online history, Microsoft made ISO checksums/hashes publicly available on TechNet and MSDN (even if with a free Microsoft account), but since late 2017, a paid Visual Studio account is required (starting at $1,199 per year) to access the database.
A number of projects have sprung up to keep this important information accessible:
Microsoft SHA1 Hash Archive from my.visualstudio.com: Currently lists 94,980 files. Maintained by Jan Krohn, author of Microsoft Windows and Office ISO Download Tool, mentioned back in 2017. The free service has won glowing praise from Samir.
List of files by Microsoft: "This project contains all necessary information on files (family, the version, language, a hash sum [MD5, SHA-1, SHA-256 and SHA-512] and also their actual size)." Browse or search the database of 114,610 files.
MSDN.SU: "Technical information about the files available for downloading on official site from 'MSDN Subscriber Downloads' section." 42,512 files.
MVS Dump thread on My Digital Life. Updated regularly.
Windows and Office Genuine ISO Verifier: Standalone, freeware .NET app that "allows verification of Windows and Office x32 x64 (ISO, EXE ...). Finds ISO hash and compares it with the official hash (MSDN, VLSC)."
msdn-mirrors: GitHub repository last updated July 7, 2020; primarily focused on Chinese and English versions.
List of MD5/SHA1 hashes for various Windows OS ISOs: Modest list of some Windows 2000 through 7/2008 distributions.
/windows | Jan 02, 2023