An indiction or so late in posting this addition to the graphics page... #

🌱 Picture Resizer 6.0.1.1 [395k] + Drag and drop to batch resize images. Rename executable to change parameters like size, sharpness, and recursion, or run via command line for more options. (Variously referenced as "PhotoResize", "PhotoResizer", and "Photo Resizer" in the documentation and version info.) 📺

/windows | Dec 17, 2020

Force MacBook to mirror displays #

When connecting an external monitor to a MacBook, the screen is extended rather than mirrored by default, making it difficult to work around broken internal monitors. One of these keyboard shortcuts should switch your Mac to mirrored mode:

Pressing the shortcut again will toggle back to extended mode.

H/T: OSXDaily and Miko.

/mac | Dec 17, 2020

Blocking Apple from bypassing application firewalls in Big Sur #

UPDATE: According to Patrick Wardle, "As of macOS 11.2 beta 2, the (in)famous ContentFilterExclusionList is gone!"

In addition to the hacky workaround previously outlined in these pages and Objective Development's steps for enabling Little Snitch 4.6 under Big Sur, there is now a third option for preventing Apple from bypassing application firewalls, courtesy of Hany (author of Murus and Vallum): Exclusions Blaster. Simply copy to /Applications, run, and approve the system extension when prompted - that's it!

Exclusions Blaster screenshot

Successfully tested under both Intel and M1 Macs, though the README warns that it is "experimental".

/mac | Dec 16, 2020

Chuang Tzu's "Great Man" #

from Chapter 17, Autumn Floods:

莊子 Literal
是故大人之行
不出乎害人
不多仁恩
動不為利
不賤門隸
貨財弗爭
不多辭讓
事焉不借人
不多食乎力
不賤貪汙
行殊乎俗
不多辟異
為在從衆
不賤佞諂
世之爵祿不足以為勸
戮恥不足以為辱
知是非之不可為分
細大之不可為倪
聞曰
道人不聞
至德不得
大人無己
約分之至也
therefore great person action
not cause harm person
not much benevolent charity
move not for profit
not mean gate servant
goods wealth not strive
not much speech permit
business not borrow person
not much eat strong
not mean greedy vile
act special ordinary
not much different
follow multitude
not mean glib flatter
world rank emolument not satisfy persuade
disgrace shame not attain disgrace
know right wrong not able distinguish
small great not able differentiate
hear said
Dao person not hear
extreme virtue not obtain
great person no self
limit distinguish extreme
Brook Ziporyn Thomas Merton
"So the conduct of the Great Man harms no one, but he places no special value on humanity and kindness. His actions are not motivated by profit, but he does not despise those who slavishly subordinate themselves to it. He does not fight over wealth, but he places no special value on yielding and refusing it. He doesn’t depend on others, but he places no special value on self-sufficiency. He does not despise the greedy and corrupt, and though his own conduct is unconventional, he places no special value on eccentricity and uniqueness. His actions do [not] follow the crowd, but he does not despise the obsequious flatterers. All the honors and stipends in the world are not enough to goad him into doing anything, and all its punishments and condemnation are not enough to cause him shame, for he knows that right and wrong cannot be definitively divided, and that no border can be fixed between great and small. I have heard it said, 'The man of the Course has no reputation; perfect Virtuosity achieves nothing; the Great Man has no fixed identity.' For he holds perfectly to the differing allotment of things." The man in whom Tao
Acts without impediment
Harms no other being
By his actions
Yet he does not know himself
To be "kind," to be "gentle."

The man in whom Tao
Acts without impediment
Does not bother with his own interests
And does not despise
Others who do.
He does not struggle to make money
And does not make a virtue of poverty.
He goes his way
Without relying on others
And does not pride himself
On walking alone.
While he does not follow the crowd
He won't complain of those who do.
Rank and reward
Make no appeal to him;
Disgrace and shame
Do not deter him.
He is not always looking
For right and wrong
Always deciding "Yes" or "No."
The ancients said, therefore:

"The man of Tao
Remains unknown
Perfect virtue
Produces nothing
'No-Self'
Is 'True-Self.'
And the greatest man
Is Nobody.
"
Martin Palmer Patrick Edwin Moran
'So it is that the great man through his actions will not set out to harm others, nor make much of benevolence and charity; he does not make any move for gain, nor consider the servant at the gate as lowly; he will not barter for property and riches, nor does he make much of his having turned them down; he asks for no one's help, nor does he make much of his own self-reliance, nor despise the greedy and mean; he does not follow the crowd, nor does he make much of being so different; he comes behind the crowd, but does not make much of those who get ahead through flattery. The titles and honours of this world are of no interest to him, nor is he concerned at the disgrace of punishments. He knows there is no distinction between right and wrong, nor between great and little. I have heard it said, "The Tao man earns no reputation, perfect Virtue is not followed, the great man is self-less." In perfection, this is the path he follows.' "...For that reason, the behavior of the great man does not proceed from any intention to do injury to others, neither does it go overboard with benevolence or kindness. His activities are not done for the sake of profit, yet on the other hand he does not despise those who take employment as doormen or as other attendants. In disputes over goods or materials he does not depend overly on rhetorical skills, but on the other hand he is not too greatly self effacing. When there are tasks to be done he does not depend on other people to do things for him, but he also does not greatly tout his self reliance, and he does not despise political favors. His behavior is different from ordinary people, but he avoids departing too far from customary norms. While he intends to follow along with the masses, he does not despise others who may depend on eloquence and flattery. The emoluments and official ranks of the common world are insufficient to influence him, and neither death nor being shamed are sufficient to make him feel disgraced. He knows that affirmations and denials are insufficient to make any real discriminations among things, but neither can ideas of the fine and the gross enable people to make real distinctions. I have heard it said that 'The man of the Dao does not have fame. The man of highest virtue does not have virtue. The great man has no self.' That shows how far one can take restrictions [to categories] and divisions [into groups]."
Herbert Giles Burton Watson
Therefore, the truly great man, although he does not injure others, does not credit himself with charity and mercy. He seeks not gain, but does not despise his followers who do. He struggles not for wealth, but does not take credit for letting it alone. He asks help from no man, but takes no credit for his self-reliance, neither does he despise those who seek preferment through friends. He acts differently from the vulgar crowd, but takes no credit for his exceptionality; nor because others act with the majority does he despise them as hypocrites. The ranks and emoluments of the world are to him no cause for joy; its punishments and shame no cause for disgrace. He knows that positive and negative cannot be distinguished, that great and small cannot be defined.

"I have heard say, the man of TAO has no reputation; perfect virtue acquires nothing; the truly great man ignores self;—this is the height of self-discipline."
"Therefore the Great Man in his actions will not harm others, but he makes no show of benevolence or charity. He will not move for the sake of profit, but he docs not despise the porter at the gate. He will not wrangle for goods or wealth, but he makes no show of refusing or relinquishing them. He will not enlist the help of others in his work, but he makes no show of being self-supporting, and he does not despise the greedy and base. His actions differ from those of the mob, but he makes no show of uniqueness or eccentricity. He is content to stay behind with the crowd, but he does not despise those who run forward to flatter and fawn. All the titles and stipends of the age are not enough to stir him to exertion; all its penalties and censures are not enough to make him feel shame. He knows that no line can be drawn between right and wrong, no border can be fixed between great and small. I have heard it said, 'The Man of the Way wins no fame, the highest virtue wins no gain, the Great Man has no self.' To the most perfect degree, he goes along with what has been allotted to him."
Sam Hamill James Legge
"So great people don't hurt others. But they don't concern themselves much with benevolence or mercy either. Profit is never their motive, but they're not bad tippers. They don't compete for property and wealth, but they don't make a big show of turning it down, either. They don't recruit helpers for their work, but they don't show off their independence. They don't despise the mean and greedy, and while they stay clear of those bad habits, they don't make a display of their difference. They go along with the crowd and don't look down on its glib, fawning leaders. The rank and rewards of the world can't move them. The punishment and blame of the world can't shame them. They know 'right' and 'wrong' are not so easily divisible—no more than 'big' and 'little.' I've heard it said that those with the Tao will not be heard of, that getting the Power of Virtue is not 'getting.' Great people have no selves. They find their parts in life. Now that's being there." 'Therefore while the actions of the Great Man are not directed to injure men, he does not plume himself on his benevolence and kindness; while his movements are not made with a view to gain, he does not consider the menials of a family as mean; while he does not strive after property and wealth, he does not plume himself on declining them; while he does not borrow the help of others to accomplish his affairs, he does not plume himself on supporting himself by his own strength, nor does he despise those who in their greed do what is mean; while he differs in his conduct from the vulgar, he does not plume himself on being so different from them; while it is his desire to follow the multitude, he does not despise the glib-tongued flatterers. The rank and emoluments of the world furnish no stimulus to him, nor does he reckon its punishments and shame to be a disgrace. He knows that the right and the wrong can (often) not be distinguished, and that what is small and what is great can (often) not be defined. I have heard it said, "The Man of Tâo does not become distinguished; the greatest virtue is unsuccessful; the Great Man has no thought of self;"— to so great a degree may the lot be restricted.'
Altair Unattributed*
"Therefore, while the behavior of the great man does not stem from harming others, he does not make much of his kind and gracious acts. While his movements are not for profit, he does not despise the porter at the gate. While not striving after property, he does not make much of politely turning it down. While engaging in anything and not borrowing from others, he does not make much of eating from his own strength nor despise corruption. While his conduct is exceptional among the common people, he does not make much of being an unusual phenomenon. While yielding to the opinion of the masses, he does not despise flattery. The world's titles and emoluments are not enough to urge him on; its executions and humiliations are not enough to shame him. He knows right and wrong cannot be parted, the fine and the gross cannot be distinguished. I have heard said: "The man of the Dao is not famous, supreme virtue is not obtained, the great man is impartial." It is the height of restraining differentiation. 28 The men of perfect practice don't do harm to others but they don't make efforts to do well everywhere. Their deeds aren't based on interest, while they don't consider it is wrong that philistines seek pretty interest and pretty position and ask for money. They don't scramble for the present wealth, but they will not pretend to be lofty to refuse the interest in hand.

29 They would like to accomplish everything by themseles. They would not bother others unless by no choice. They don't pant for making more money; however, they don't condemn and scorn the common people who strive for money.

30 The men of perfect practice are different in deeds, living customs and mindset from the common people but you can't say that they are weird. They don't look like Hippie with queer clothes and unique behavior. They do in Rome as Rome do, act as the same as the common people. In society, they stand with the masses. They don't flatter somebody for convenience and personal interest and echo the opinion of a few man of high position. Nevertheless, they think it as living tactics that some philistines adore hero and flatter man of high position. They don't consider it is wrong or mean.

31 Fame, position and wealth can't lure them because these are not their goal of life. High pressure, punishment and insult can't change their thought and deed too. They are tough and persistent. Why are they so, it is because they are deeply aware that right and wrong, small and big, rich and poor, and nobleness and humbleness are not absolute but relative.

32 The saying in this world goes well --- a man of practice seeks no fame and virtue. A man who practices to a certain level doesn't seek anything. The true man of perfect practice even forgets his own body---, which maybe is the best conclusion for our discussion about size and shape, rich and poor, and nobleness and humbleness.

* Grammatical and spelling errors have been left intact.

Victor Mair has excluded this passage from his Wandering on the Way: Early Taoist Tales and Parables of Chuang Tzu (see ellipsis on page 155 of the April 2000 University of Hawaii Press edition). A possible explanation from Paul Rouzer's A New Practical Primer of Literary Chinese:

"This passage to the end of the chapter may seem a non sequitur. What does a discussion of the behavior of the 'Great Man' have to do with metaphysical categories of size analyzed earlier? Consequently, some have assumed that the rest of this lesson's text has been interpolated and have removed it. However, if the author is attempting to show how our mental categories are conventional and arbitrary, then he can also claim that our behavior in the world should not be based on absolute and unchanging standards as well."

/misc | Oct 27, 2020

Whose computer is it? #

Patrick Wardle highlighted a tweet by Maxwell ("Some Apple apps bypass some network extensions and VPN Apps. Maps for example can directly access the internet bypassing any NEFilterDataProvider or NEAppProxyProviders you have running"), sparking an extensive HN discussion on Apple's ham-fisted tactics (not unlike Google's recent behavior).

A search for "NEFilterDataProvider" turned up David Dudok de Wit's post fingering the ContentFilterExclusionList key in /System/Library/Frameworks/NetworkExtension.framework/Versions/A/Resources/Info.plist as the culprit. The default list includes 56 Apple apps and daemons like App Store, MusicLibrary, softwareupdated, etc.:

Deleting those entries under Big Sur turned out to be rather involved; in fact, one could be forgiven for coming away with the vague suspicion that Apple would prefer them not to be disturbed:

  1. Disable FileVault

  2. Boot into macOS Recovery, disable SIP (csrutil disable) and SSV (csrutil authenticated-root disable), and reboot

  3. Find the root mount device, e.g.,
    % mount
    /dev/disk1s5s1 on / (apfs, local, read-only, journaled)
    ...

  4. % mkdir mnt

  5. % sudo mount -o nobrowse -t apfs /dev/disk1s5 mnt/

  6. Edit Info.plist as desired, e.g., % sudo vi mnt/System/Library/Frameworks/NetworkExtension.framework/Versions/A/Resources/Info.plist

  7. % sudo bless --folder mnt/System/Library/CoreServices --bootefi --create-snapshot && sudo reboot

Little Snitch 5 and TripMode 3 had no problem blocking the previously-cloaked processes afterwards:

Little Snitch 5 TripMode 3

though one may well be left with a niggling doubt: should all this really be necessary to monitor your own computer's network traffic?

UPDATE 1: Hany, author of Murus and Vallum, was kind enough to reply with some testing of his own:

I did some tests and I’ve found at least one major issue on Catalina.
Removing all entries from the dictionary key seems to work for most listed processes: connections are seen by the network filter and flows are passed/blocked according to matched rules. But it does not work for at least one of the listed processes: IMTransferAgent. If you use macOS Messages.app then you may be aware that this process is used to send messages attachments.
If removed from the list, the process is always blocked. The filter provider does not see any flow for that process, and any attempt to send attachments with Messages.app will fail until you disable the filter.

UPDATE 2: The traffic of some Apple processes isn’t shown in Little Snitch 5.

UPDATE 3: Enabling Little Snitch 4.6 kext under Big Sur

UPDATE 4: Tweet by Apple developer Russ Bishop: "Some system processes bypassing NetworkExtensions in macOS is a bug, in case you were wondering." and some replies:

UPDATE 5: Exclusions Blaster

UPDATE 6: Hooray, no more ContentFilterExclusionList

/mac | Oct 21, 2020

Batch convert Safari webarchive files to PDF #

via Terminal & textutil/cupsfilter

textutil -convert html *.webarchive && for i in *.html ; do cupsfilter "$i" > "$i".pdf ; done

via Automator & Download URLs as PDFs action

via AppleScript & Safari

-- Keep code for Safari separate from the code for System Events.
tell application "Safari"
   activate
   -- Tell Safari, as the known frontmost application, to display the 'choose folder' dialog.
   set SaveFolderPath to POSIX path of (choose folder with prompt "Select Folder to Save PDF Files")
   tell window 1
       set current tab to tab 1
       set ctabs to (count tabs)
   end tell
end tell

repeat with i from 1 to ctabs
   tell application "System Events"
       tell process "Safari"
           click menu item "Show Reader" of menu "View" of menu bar 1
           click menu item "Export as PDF…" of menu "File" of menu bar 1
           repeat until exists sheet 1 of window 1
               delay 1
           end repeat
           -- The sheet opens alread primed with a file name based on the tab name.
           if (i is 1) then
               -- Make sure the file gets saved to the folder chosen above.
               -- This is only necessary first time round the repeat, as the folder becomes the default next time.
               keystroke "g" using {command down, shift down}
               repeat until exists sheet 1 of sheet 1 of window 1
                   delay 1
               end repeat
               log "passed delay"
               tell sheet 1 of sheet 1 of window 1
                   set value of combo box 1 to SaveFolderPath -- NB. the folder path here, not the file name.
                   click button "Go"
                   
               end tell
           end if
           click button "Save" of sheet 1 of window 1
           click menu item "Close tab" of menu "File" of menu bar 1
       end tell
       
       tell application "Safari" to display dialog "Close after 1 second..." giving up after 1
   end tell
end repeat

via Paparazzi!

via EagleFiler & Web archive to PDF script

See also

/mac | Oct 11, 2020

Back up iOS apps to a PC or Mac #

A little history

Before iOS 9, iOS apps could be backed up to Macs and PCs via iTunes1:

Adding insult to injury, iTunes 12.7 removed the App Store, closing the door on downloading/backing up iOS apps from there:

Why bother?

You may want to back up an app before it disappears from the App Store or preserve an older, better version, e.g.,

Download iOS apps from Apple to a PC or Mac

iOS apps can still be downloaded via iTunes 12.6.3 (does not run on Mojave or higher), Apple Configurator 2 (with some caveats), or iMazing:

Copy apps from an iOS device to a PC or Mac

To back up all apps on your iOS device to apps/ in the current directory of your Mac, jailbreak your device, install usbmuxd, start iproxy, then:

$ scp -P 4444 -r root@localhost:/var/containers/Bundle/Application apps/

Convert iOS .app to .ipa

$ mkdir Payload
$ cp -R appname.app Payload/
$ zip -r appname.ipa Payload/

Install .ipa from a PC or Mac to an iOS device

Footnotes

  1. The backups were located in:

  2. Apple Configurator 2 also allows installing an iOS .app via Actions → Add → Apps... → Choose from my Mac...

See also

/mac | Sep 28, 2020

iOS Safari has a weight problem #

The auspiciously-titled Safari hogging up storage on your iPhone? Here's the fix! exhorts users to tap Settings → Safari → Advanced → Website Data → Remove All Website Data (mgmiller68 wonders in the comments how this differs from Settings → Safari → Clear History and Website Data); alas, neither method proved efficacious.

Others advise waiting days for the issue to clear; sadly, not even weeks availed.

Still others recommend a draconian backup, wipe, and restore approach.

Macworld's Documents & Data: A mysterious black hole of data storage in iOS concludes unpropitiously:

"At a minimum, I’d like to know what’s taking up all that space. Those 7GB of Documents & Data probably include something that’s gotten stuck, that can’t be deleted, such as an old iOS update perhaps. But it would be helpful if every app had to offer a feature to delete its caches, or if there were a global Clear Caches feature in iOS."

Found the offending files by jailbreaking and SSHing into the device then:

# cd /var/mobile/Containers/Data/Application/

# find . -name Safari
./{GUID}/Library/Safari

# cd {GUID}

# du -h
...
4.0G    ./tmp/Download-tCA2Caas
...
3.7G    ./tmp/Download-UT0Nlzkj
...
7.8G    ./tmp
8.0G    .

Emptying the tmp directory did the trick:

Before After
iPhone 28.5 of 32GB used iPhone 19.9 of 32GB used
Safari 8.5 GB Safari no longer showing

H/T jareehD for the filepath hint.

/misc | Sep 26, 2020

Deleting a subdirectory in the path of a URL via sed or perl #

Delete the divers subdirs which appear between "/blog/" and the filenames in this example:

$ cat index.rss
...
    <link>https://tinyapps.org/blog</link>
...
      <link>https://tinyapps.org/blog/misc/202009080700_usbimager.html</link>
...
      <link>https://tinyapps.org/blog/mac/202009070700_2011_mac_mini_snow_leopard.html</link>
...
      <link>https://tinyapps.org/blog/windows/202008200700_vostro_2420_lines.html</link>
...

with GNU sed:

$ sed -i -E 's (tinyapps.org/blog)/[a-z]+ \1 ' index.rss

or Perl:

$ perl -pi -e 's|(tinyapps.org/blog)/[a-z]+|\1|' index.rss

/nix | Sep 13, 2020

macOS: Block (most) keyboard input for cleaning, etc. #

Keyboard Cleaner 1.2 [137k] Disables keyboard input (well, most: Command+Shift+3 worked and Command+Tab switched focus to the next app (though the black screen obscured that fact)) until Command+Q is pressed. 📺

UPDATE: Michael Leddy kindly wrote in to suggest KeyboardCleanTool, which does a more thorough job of blocking keyboard input (including the Function keys, which Keyboard Cleaner does not). He has written more about the tool here.

/mac | Sep 13, 2020

Rare addition to file and macOS pages #

H/T HN

/misc | Sep 08, 2020

Install Snow Leopard on a 2011 Mac Mini #

(See also Downgrading from Lion to Snow Leopard on the latest Mac hardware)

  1. Install Snow Leopard via a 10.6.7 universal installer disc (a MacBook Pro or iMac 10.6.7 "Mac OS X Install DVD" can be made universal via Joel Bruner's bash script 💾).

  2. Install all updates*

  3. From a Lion install, copy

    /System/Library/Extensions/:
    AppleIntelHDGraphics.kext
    AppleIntelSNBGraphicsFB.kext

    and

    /System/Library/Extensions/IOPlatformPluginFamily.kext/Contents/Plugins/ACPI_SMC_PlatformPlugin.kext/Contents/Resources/:
    Macmini5_1.plist
    Macmini5_2.plist
    Macmini5_3.plist

    into the same locations on the Mac Mini.

  4. Run this script as root and reboot:

    cd /System/Library/Extensions/IOPlatformPluginFamily.kext/Contents/PlugIns/ACPI_SMC_PlatformPlugin.kext/Contents/Resources
    chown root:wheel Macmini5*
    chmod 644 Macmini5*
    cd /System/Library/Extensions
    chown -R root:wheel AppleIntelHDGraphics.kext
    chown -R root:wheel AppleIntelSNBGraphicsFB.kext
    chmod -R 755 AppleIntelHDGraphics.kext
    chmod -R 755 AppleIntelSNBGraphicsFB.kext
    kextcache -system-prelinked-kernel
    kextcache -system-caches
    exit
    echo 'Finished'

Footnote

* Deuced civil of Apple to keep the old servers humming along:

Sources

Related

/mac | Sep 07, 2020

Fiction books featuring a stoic protagonist #

who, as Arnold relates, "with equanimity surveys
Lustre of goodness, strife of passion, sloth
Of ignorance, not angry if they are,
Not wishful when they are not ... who sits
A sojourner and stranger in their midst
Unruffled, standing off, saying—serene—
When troubles break, 'These be the Qualities!'"

Title Character Author
Around the World in Eighty Days Phileas Fogg Verne
Foundation Salvor Hardin Asimov
A Gentleman in Moscow Alexander Rostov Towles
Knight Without Armour Ainsely Fothergill Hilton
Leave it to Psmith Ronald Psmith Wodehouse
A Man in Full Conrad Hensley Wolfe

See also Descriptive book titles that obviate the need to read the book.

/misc | Aug 26, 2020

Dell Vostro 2420: pink and grey lines on screen after Windows 10 upgrade #

Four years ago, RockNir posted Weird Lines and color changes suddenly appear on screen. What's happening? to the Dell laptops general forum. It read in part, "[My] Dell Vostro 2420 has been behaving weirdly at times ... pink and grey lines suddenly appear and cover the entire area of the screen, generally when I am not plugged in ... This problem started after I upgraded to Windows 10..." and included this image:

Dell Vostro 2420: pink and grey lines on screen after Windows 10 upgrade

Sadly, the forum has since gone read only, so I am posting the solution here in hopes that RockNir (and anyone else facing this issue) finds it:

  1. Control Panel > Intel Graphics and Media
  2. Advanced Mode > Power > Power Source: On battery
  3. Under "Power Conservation Features", uncheck "Display Refresh Rate Switching" and "Display Power Saving Technology"

Verified both the problem and the solution on a Dell Vostro 2420 running Windows 10.

See also:

/windows | Aug 20, 2020

Cloning a Bitlocker-encrypted disk #

Some options for cloning a Bitlocker-enabled system drive:

Footnotes

  1. TBWinPE does not include manage-bde.exe.

  2. Select "Read from Volume", which "allows things like the ability to see BitLocker volumes unencrypted" (if unselected, a sector-by-sector clone will be made, even if the Bitlocker partition was unlocked). Other options worth considering: Scale to Fit, Scale to Target, Align to Target, and Remove Gaps on Copy. Could not find an option or set of options that correctly resized a larger target; fixed with Paragon's Partition Manager Community Edition.

  3. A number of useful tools lie hidden beneath the surface: Explore > Quick Access Toolbar arrow > Save As > click the now-showing Save As button > This PC > X:

    right click desired tool > Open. You can also reveal the Menu Bar in the main menu via F10.

  4. If you missed the GUI prompt to unlock, make it reappear by clicking the SmartStart Wizard icon in the upper right hand corner (alternatively, run manage-bde -unlock inside cmd.exe).

Notes

/windows | Aug 19, 2020

Importing tens of thousands of photos and videos from an iPhone #

via USB generally fails using the native Windows (Import Pictures and Videos wizard, File Explorer) and macOS (Image Capture, Photos) tools with errors like "Error Copying File or Folder - The device is unreachable" or "The operation couldn't be completed." In a recent case, these MTP-compatible Windows apps did not avail either:

nor did iMazing under macOS ("Operation Failed - foo.JPG is locked by iOS." within the first few minutes). Happily, iExplorer did the trick, successfully importing close to 40,000 photos and videos (though the batch delete process failed, necessitating a workaround).

/misc | Aug 13, 2020

Closest thing to having superpowers #

when handling digital photos and videos: Phil Harvey's sedulously-crafted ExifTool, "a platform-independent Perl library plus a command-line application for reading, writing and editing meta information in a wide variety of files".

That description hardly does it justice; here's a taste of what's possible from the Renaming and/or Moving Files section:

By writing a new value to the FileName and/or Directory tags, files can be renamed and/or moved to different directories. This can be a very powerful tool in combination with the -d (date format) option for organizing images by date/time. For example, the following command renames all images in directory "DIR" according to the individual file's creation date in the form "YYYYmmdd_HHMMSS.ext".

exiftool "-FileName<CreateDate" -d "%Y%m%d_%H%M%S.%%e" DIR

Or a new directory can be specified by setting the value of the Directory tag. For example, the following command moves all images originally in directory "DIR" into a directory hierarchy organized by year/month/day:

exiftool "-Directory<DateTimeOriginal" -d "%Y/%m/%d" DIR

Read here for more details about this powerful feature.

For Windows users who prefer a GUI, check out Kim Jensen's Advanced Renamer which includes ExifTool among a host of other renaming tools.

/misc | Aug 13, 2020

Bulk delete all photos and videos from iPhone #

To batch delete all photos and videos without a third party app or a PC or Mac:

  1. Tap Photos app > Photos > All Photos
  2. Tap Select at top right
  3. Begin sliding your index finger across the bottom row of images
  4. Tap the battery icon at top right (or anywhere else in the status bar) with your middle finger to select all photos and videos
  5. Tap the Trash icon and confirm deletion
  6. Tap Albums > Recently Deleted > Select > Delete All > confirm deletion

Video of the process. H/T MacObserver.

UPDATE: The above process failed on a collection of over 58,000 images, but iMazing for macOS did the job, at least when deleting in batches under 10,000.

/misc | Aug 11, 2020

Sounding the source of an impulse #

Q: "How can one discern between an impulse that comes from the sense of separation versus awareness?"

A: "Nearly all the impulses that are filtered through the sense of separation have happiness as their destiny. Whereas the impulses that come directly from awareness, unmediated through the sense of separation, have happiness as their origin."

🔈

—Rupert Spira: The Essence of Non-Duality, Episode 8: Conversations Exploring Experience Through the Metaphor of an Actor

/misc | Aug 08, 2020

Batch delete all email from POP server via Python #

#! /usr/bin/env python
import poplib
M = poplib.POP3_SSL("mail.example.com", 995)
M.user("user@example.com")
M.pass_("password")
for i in range(M.stat()[0], 0, -1):
  M.dele(i)
M.quit()

/nix | Aug 04, 2020

"[T]he good and excellent man, #

bearing in mind who he is, and whence he has come, and by whom he was created, centres his attention on this and this only, how he may fill his place in an orderly fashion, and with due obedience to God. 'Is it Thy will that I should still remain? I will remain as a free man, as a noble man, as Thou didst wish it; for Thou hast made me free from hindrance in what was mine own. And now hast Thou no further need of me? Be it well with Thee. I have been waiting here until now because of Thee and of none other, and now I obey Thee and depart.' 'How do you depart?' 'Again, as Thou didst wish it, as a free man, as Thy servant, as one who has perceived Thy commands and Thy prohibitions. But so long as I continue to live in Thy service, what manner of man wouldst Thou have me be? An official or a private citizen, a senator or one of the common people, a soldier or a general, a teacher or the head of a household? Whatsoever station and post Thou assign me, I will die ten thousand times, as Socrates says, or ever I abandon it. And where wouldst Thou have me be? In Rome, or in Athens, or in Thebes, or in Gyara? Only remember me there. If Thou sendest me to a place where men have no means of living in accordance with nature, I shall depart this life, not in disobedience to Thee, but as though Thou wert sounding for me the recall. I do not abandon Thee—far be that from me! but I perceive that Thou hast no need of me. Yet if there be vouchsafed a means of living in accordance with nature, I will seek no other place than that in which I am, or other men than those who are now my associates.'"

—Epictetus, Book III, Chapter 24, That we ought not to yearn for the things which are not under our control

/misc | Aug 03, 2020

Native Windows NT 3.51 apps that still run under Windows 10 #

The author of Running DOS Apps on Windows (HN thread) has tested and uploaded a number of standalone EXEs from Windows NT 3.51 that still run well under Windows 10:

Name   Size
calc icon calc.exe   54 KB
cdplayer icon cdplayer.exe   78 KB
charmap icon charmap.exe   52 KB
clock icon clock.exe   30 KB
control icon control.exe   41 KB
pbrush icon pbrush.exe   230 KB
perfmon icon perfmon.exe   176 KB
sndrec32 icon sndrec32.exe   106 KB
sol icon sol.exe   182 KB
telnet icon telnet.exe   66 KB
terminal icon terminal.exe   162 KB
winmine icon winmine.exe   36 KB

Cursory testing reveals that perennial-favorite time-wasting tool Freecell also works; just extract FREECELL.EXE and CARDS.DLL from the Windows NT 3.51 Workstation CD:

expand D:\I386\FREECELL.EX_ -r C:\Games
expand D:\i386\CARDS.DL_ -r C:\Games

/windows | Jul 27, 2020

The Ashtavakra gita #

commences with such aphorisms as:

before transcending them in only seeming contradiction:

Passages from the 1972 reprint of Ashtavakra gita, translated by Hari Prasad Shastri and published by Shanti Sadan (an updated edition is available from the publisher).

/misc | Jul 15, 2020

Batch delete all email from IMAP Inbox in iOS #

Some email services (Spectrum/TWC/Road Runner, Yahoo!, etc.) allow forwarding but not automatic deletion of forwarded email, leading to potential quota exceedance over time.

This Python script* can be scheduled or run manually to batch delete all messages in the Inbox:

#!/usr/bin/env python
import imaplib
M = imaplib.IMAP4_SSL("imap.example.com")
M.login("user@example.com","password")
M.select("Inbox")
typ, data = M.search(None, 'ALL')
for num in data[0].split():
  M.store(num, '+FLAGS', '\\Deleted')
M.expunge()
M.close()
M.logout()

Under iOS, use a-Shell (App Store | GitHub) to edit and save the script (e.g., "emptyinbox") in vim, then set as executable (chmod +x emptyinbox). Run simply as emptyinbox or pair with Shortcuts (specifying the full path, /private/var/mobile/Containers/Data/Application/long-string/Documents/emptyinbox) and add an icon to the Home screen via the Action icon.

See also Batch delete all email from POP server via Python.

* H/T codersofthedark, the imaplib documentation, and the participants in this discussion.

/misc | Jul 03, 2020

Fix the paper feed roller on Brother MPrint MW series mobile printers #

In almost a decade and a half of using Brother MPrint MW series mobile printers, the only problem I've had is with the paper feed roller (aka the "pick-up roller"), which generally stops feeding paper after 4 or 5 years.

Brother's MW-140BT's FAQs & Troubleshooting includes a document entitled The paper does not feed., which recommends checking that the paper is properly loaded, the cover closed, etc.

However, the final suggestion (reproduced below) to clean the pick-up roller with a piece of cellophane tape is marginally useful; it would sometimes allow one or two more prints before failing altogether (though it seemed to have less to do with cleaning and more to do with making the roller just tacky/sticky enough to pick up the paper):


1. Affix a piece of cellophane tape to the pick-up roller.
2. Remove the cellophane tape from the pick-up roller.
3. Rotate the pick-up and repeat the procedure to clean the entire surface of the roller.

Searching for a real solution to the paper feed problem, I stumbled onto No more paper jams or misfeeds!, which suggests using a rubber restorer like one of these:

(A similar product not mentioned in the article: CleanTex Rubber Roller Restorer.)

I went with CaiKleen RBR due to its diminutive size and applicator.

Applying a few drops to a couple of Q-tips and cleaning the roller with them worked wonders - several units that I had given up on began feeding perfectly.

One of the units needed a new battery; Brother would not ship their $92 BT100 MW-145BT Li-ion battery to my location, so I ordered NextBatteries' Brother MW-145BT battery (listed as a compatible replacement for Brother's BW-100 and BW-105 batteries) for $20.90 - it charged right up in an MW-120. (The original battery is held down by tape, so a bit of force is required to remove it.)

The A7 paper (model C-11 or C11S) required by the MPrint MW 100 series printers is still available from Brother.

/misc | Jun 17, 2020

Convert audio recordings to text via macOS Enhanced Dictation and Soundflower #

Update

Environment

Setup

  1. Run Soundflower installer twice

  2. System Preferences > Sound > set both input and output device to "Soundflower (2ch)"

  3. System Preferences > Keyboard > Dictation > set "Dictation:" to "On", check "Use Enhanced Dictation", and set microphone to "Soundflower (2ch)"

  4. System Preferences > Accessibility > Dictation > uncheck "Mute audio output while dictating"

Use

  1. Begin playback of audio file

  2. Press Fn twice in TextEdit to start converting audio to text

Notes

  1. To uninstall Soundflower, delete Soundflower.kext from /Library/Extensions (and /System/Library/Extensions if present), sudo kextcache --prune-staging, and restart.

  2. BlackHole (FOSS), Sound Siphon ($49), or Loopback ($99) can be substituted for Soundflower.

  3. Enhanced Dictation has been removed from Catalina. Therefore, all Dictation data (along with a slew of other information) is sent to Apple for processing:

    Mojave Catalina
  4. This regrettable change, coupled with an error message sometimes encountered in Mojave ("Dictation languages aren't available to download at this time. Try again later."), makes it all the more advisable to back up a copy of the Enhanced Dictation files once they are downloaded. They can be found in /System/Library/Speech/Recognizers/SpeechRecognitionCoreLanguages/ with filenames like en_US.SpeechRecognition, ja_JP.SpeechRecognition, etc.

Sources

Related

/mac | Jun 16, 2020

A humble iOS 14 wishlist #

UPDATE: iOS: Disable WiFi (not just cellular) for specific apps without jailbreaking

/misc | Jun 14, 2020

Portable app for hot disk cloning a running Windows install #

Tom Ehlert's portable Drive Snapshot has been a longtime favorite for disk image backups, but it does not offer disk cloning.

Another product also from Germany, Miray's HDClone, does; it can clone a running Windows system to another drive via the portable hdclone.exe.

However, HDClone comes in a dizzying array of versions:

all of which (other than the free version) are hobbled with activation schemes; even "Professional Portable", which is intended "for professional use on arbitrary PCs", requires a USB dongle:

Use on any PC to be serviced with a USB token provided by us. The software may be permanently installed on those PCs, but can only be used when the token is connected.

While the free version is saddled with a number of artificial limitations (max copy rate of 30MB/s, no support for USB 3.0 or disks over 2TB, no cloning to smaller disks, etc.), it does offer hot disk cloning of live, running Windows instances without the need to install any software or wrangle with activation.

The problem with activation schemes is highlighted by btesoroni's post Lost USB Token and hit limit of December 2019 (which went unanswered, prompting a followup post the next day, Is this company still in business???? which is also unanswered).

Miray, please stop punishing your customers with activation schemes and learn from Tom's nearly two decades of success with his activation-free Drive Snapshot.

/windows | Jun 14, 2020

A modest proposal #

End "Qualified Immunity"

End "Civil Forfeiture"

End "No-knock Warrants"

End the "War on Drugs"

Demilitarize the Police

Require Body Cameras

Setup Civilian Review Boards

Collect Data

Fire Liars

Stop Discriminating Against High IQ Applicants

/misc | Jun 11, 2020

Wealth #

/misc | Jun 09, 2020

Running multiple versions of Thunderbird #

Environment: Windows 10 with an existing default install of Mozilla Thunderbird ("C:\Program Files\Mozilla Thunderbird")

  1. Install desired second version (e.g., 60.9.1) to a new directory (e.g., "C:\Program Files\Mozilla Thunderbird 60") by selecting "Custom" as setup type

  2. Once installation completes, uncheck "Launch Mozilla Thunderbird now" and click Finish

  3. Edit Thunderbird 60's Desktop shortcut, appending a path to a new data directory (e.g., -profile "C:\Users\user\Documents\TB60DATA") to the Target field, which should then read "C:\Program Files\Mozilla Thunderbird 60\thunderbird.exe" -profile "C:\Users\user\Documents\TB60DATA"

  4. On first launch, close the "Set Up an Existing Email Account" and "System Integration" windows

  5. Right click the title bar then click "Menu Bar" > File > Offline > Work Offline

  6. Click Tools > Options > Advanced > Update > check "Never check for updates" > OK

At this point, you can setup an account, add extensions, etc.

In this example, we'll add Kaosmos' ImportExportTools and his updated version of Torge Kummerow's Email Address Crawler, both of which are compatible with Thunderbird 60.* (but no higher; see Christopher Leidigh's ImportExportTools NG for more recent versions):

  1. Download XPI files

  2. Set extensions.strictCompatibility to false in Config Editor (Tools > Options > Advanced > General > Config Editor) to enable Kaosmos' updated Email Address Crawler

  3. Install XPI files (Tools > Add-ons > Extensions > drag XPI files into window)

/windows | Jun 07, 2020

Fast, free (as in speech) MBOX viewer for Windows #

mboxviewer (alternately described as "Windows MBox Viewer" (on the cover of the impressive user guide) and "Simple MBox Viewer" (in the About dialog box)) is an open source MBOX viewer for Windows. Features include: large (>4GB) file support; export individual messages to EML; print some or all messages to CSV, plain text, HTML, or PDF; advanced search and sort; merge multiple MBOX files and remove duplicate messages; and more. One small undocumented quirk: files must have a .mbox extension in order to load (neither .mbx nor extensionless files will open).

/windows | Jun 06, 2020

macOS apps that make me smile #

While macOS has been relegated to the back burner (with disastrous if predictable results), a few intrepid developers continue to craft apps so performant and pleasing that I look for excuses to launch them:

All four can be launched consecutively before Messages can open or iTunes stop beachballing.

/mac | Jun 03, 2020

Brother MPrint MW series mobile printer printing only blank pages #

Two Brother MPrint MW series mobile printers (an MW-120 and MW-140BT) began printing only blank pages following battery changes and holding the units vertically while printing (the latter in order to coax the paper feed roller into doing its job). While it's not clear which action (if either) was the culprit, the completely undocumented* RESET button on the back of the units resolved the issue.

* Could not find a single reference to it in five different MPrint manuals (in either English or Japanese) nor anywhere else on the Internet.

/misc | May 29, 2020

macOS driver for Brother MPrint MW series mobile printers #

Ryoji Takahashi not only updated his excellent MPrintDriver for macOS, he also generously changed the license from shareware to freeware (see README.TXT).

It officially supports virtually the entire line-up:

so the relatively rare MW-170 and recently announced MW-270 should likely work as well.

The MW-260 is the only model currently offered for sale by Brother in the U.S. (though it is listed as discontinued on their Japanese website). It is also the first model to use the larger A6 paper (C211S), which is apparently not in stock.

New and used units (as well as the required paper cassettes) can generally be found on auction sites, however, and are well worth the investment, especially now that the macOS driver has been updated.

Thank you, Ryoji!

/mac | May 25, 2020

Stuck on login screen with "Optimizing Your Mac" notification after entering correct password #

  1. On first boot, import data via Migration Assistant, assigning same user password as original when prompted
  2. Migration Assistant completes successfully; attempt login
  3. Password accepted, but stuck on login screen with a spinning progress indicator and "Optimizing Your Mac" notification

Resolved by:

  1. Deleting /var/db/.AppleSetupDone and creating second user during Setup Assistant
  2. Logging in as second user and changing password for first user
  3. Logging in as first user with new password (no longer hanging after entering password) and changing password back to original - Keychain items preserved

(Booting into macOS Recovery and running resetpassword from Terminal or simply waiting for the login to complete (>10 minutes, <40 minutes on a third Mac tested recently) may also work.)

Similar reports:

/mac | May 23, 2020

Circumstance #

/misc | May 17, 2020

Remove red (1) notification badge for disabled Catalina upgrade in Mojave #

See update below for important change following Security Update 2020-003 Mojave.

TL;DR: defaults delete com.apple.preferences.softwareupdate LatestMajorOSSeenByUserBundleIdentifier && softwareupdate --list

As of April, half of all macOS users are still running Mojave or earlier (49.01%) rather than Catalina (48.98%). Perhaps not unreasonably:

Most (but intriguingly not all) Mojave users who disable the Catalina upgrade via sudo softwareupdate --ignore "macOS Catalina" are left with a red (1) notification badge on their System Preferences icon in the Dock, even if no updates are available:

A number of solutions have been proposed, including:

Searching for a better way (as well as an answer as to why the issue did not affect all Mojave users who disabled the Catalina upgrade), I had the good fortune of stumbling onto bernuli's October 12 comment, which offered in part:

[T]here is a per user preference file that needs hosing to get rid of notification if software update already ran before you did the ignore.
...
My guess is that new users created after you run the --ignore should never get the Upgrade notification in the first place.

The file in question was identified as ~/Library/Preferences/com.apple.preferences.softwareupdate.plist. I decided to do some testing (TL;DR: bernuli was exactly right):

  1. On a brand new Mojave install, ~/Library/Preferences/com.apple.preferences.softwareupdate.plist did not exist (nor was there a /Library/Preferences/com.apple.preferences.softwareupdate.plist).

  2. Running sudo softwareupdate --ignore "macOS Catalina" on a brand new Mojave install before checking for updates prevented the issue from occurring. ~/Library/Preferences/com.apple.preferences.softwareupdate.plist was created after checking for updates with the following data (which appeared to correspond to "Security Update 2020-002 10.14.6" and "Safari 13.1"):

        <key>ProductKeysLastSeenByUser</key>
        <array>
            <string>061-90745</string>
            <string>061-61260</string>
        </array>
    
  3. Checking for updates on a brand new Mojave install and then running sudo softwareupdate --ignore "macOS Catalina" caused the issue to occur for the current user. ~/Library/Preferences/com.apple.preferences.softwareupdate.plist was populated with:

        <key>LatestMajorOSSeenByUserBundleIdentifier</key>
        <string>com.apple.InstallAssistant.Catalina</string>
        <key>ProductKeysLastSeenByUser</key>
        <array>
            <string>061-90745</string>
            <string>061-61260</string>
        </array>
    
  4. Users created after running sudo softwareupdate --ignore "macOS Catalina" were not affected by the issue; ~/Library/Preferences/com.apple.preferences.softwareupdate.plist did not get created even after such users checked for updates.

In two followup comments, bernuli suggested these steps for disabling Catalina and resolving the red notification badge issue:

  1. Quit System Preferences
  2. sudo softwareupdate --ignore "macOS Catalina"
  3. defaults delete com.apple.preferences.softwareupdate LatestMajorOSSeenByUserBundleIdentifier (deletes the lines containing LatestMajorOSSeenByUserBundleIdentifier and com.apple.InstallAssistant.Catalina from ~/Library/Preferences/com.apple.preferences.softwareupdate.plist)
  4. softwareupdate --list

though based on the above tests, there appears to be little harm in simply deleting ~/Library/Preferences/com.apple.preferences.softwareupdate.plist for step 3 as bernuli originally did then rebooting and checking for updates again. However, using defaults or Prefs Editor is preferable due to the caching system for app preferences (not to mention being faster). As Thomas Tempelmann, the author of Prefs Editor, explains:

Mac OS X 10.8 introduced a caching system for app preferences ("cfprefsd"). While this probably increases performances for apps, it makes it harder for developers to manipulate preference values quickly for testing, because making changes directly to the plist files in the ~/Library/Preferences folder does not work any more with editors such as "Property List Editor.app" and the similar editor in Xcode. As of now (Dec 14, 2013), the only way to edit such preferences is by using the "defaults" command, which is rather difficult to use once it comes to editing dict or array entries.

Therefore, I've written a tool that works like the plist editor in Xcode but uses the CFPreferences functions to modify the values instead of editing the plist files directly.

Tangentially, SwitchUp "allows you to create, duplicate, and switch between multiple profiles of settings (preferences and data) for almost any application." While no longer actively developed, it worked well with Safari and Calculator (but not Contacts) in my testing under Mojave.

UPDATE: After installing Security Update 2020-003 Mojave and Safari 13.1.1, the Catalina nag reappeared in Software Update. ~/Library/Preferences/com.apple.preferences.softwareupdate.plist now contained the following:

        <key>LatestMajorOSSeenByUserBundleIdentifier</key>
        <string>com.apple.InstallAssistant.Catalina</string>
        <key>ProductKeysLastSeenByUser</key>
        <array>
            <string>061-90107</string>
            <string>001-09493</string>
        </array>

Running sudo softwareupdate --ignore "macOS Catalina" returned:

Ignored updates:
(
    "macOS Catalina"
)

Ignoring software updates is deprecated.
The ability to ignore individual updates will be removed in a future release of macOS.

though defaults delete com.apple.preferences.softwareupdate LatestMajorOSSeenByUserBundleIdentifier && softwareupdate --list still works for now to hide the nag again. That is, until the Software Update preference pane is reopened, in which case it needs to be rerun. Jeff Johnson recommends eschewing the preference pane in favor of softwareupdate --list to avoid.

/mac | May 07, 2020

HELPDECO & SHG Editor added #

to the file and graphics pages, respectively:

/windows | May 03, 2020

Cropping a video with Handbrake #

  1. Open video in Handbrake
  2. Click Preview in toolbar
  3. Click Settings button in floating Preview window
  4. Click Custom: radio button next to Cropping: in floating Picture window
  5. Adjust dimensions as desired, noting changes in floating Preview window
  6. Click Start in toolbar to save cropped video

See also Simple QuickTime MOV cropping via Goldberg 2.5 from 2007 (which actually covered trimming, not cropping).

UPDATE: Check out Claquette, which makes cropping video as easy as click and drag.

/misc | Apr 20, 2020

The Ancient Ones #

Excerpt from Chapter One, Economy of Walden by Henry David Thoreau:

The ancient philosophers, Chinese, Hindoo, Persian, and Greek, were a class than which none has been poorer in outward riches, none so rich in inward. ... To be a philosopher is not merely to have subtle thoughts, nor even to found a school, but so to love wisdom as to live according to its dictates, a life of simplicity, independence, magnanimity, and trust. It is to solve some of the problems of life, not only theoretically, but practically.

Chapter XVI, Book XVII Yang Ho from The Analects by Confucius, et al. & James Legge (transl.):

The Master said, "Anciently, men had three failings, which now perhaps are not to be found.

"The high-mindedness of antiquity showed itself in a disregard of small things; the high-mindedness of the present day shows itself in wild license. The stern dignity of antiquity showed itself in grave reserve; the stern dignity of the present day shows itself in quarrelsome perverseness. The stupidity of antiquity showed itself in straightforwardness; the stupidity of the present day shows itself in sheer deceit."

Chapter 15 of Tao te ching : a new English version by Lao Tzu & Stephen Mitchell (transl.):

The ancient Masters were profound and subtle.
Their wisdom was unfathomable.
There is no way to describe it;
all we can describe is their appearance.

They were careful
as someone crossing an iced-over stream.
Alert as a warrior in enemy territory.
Courteous as a guest.
Fluid as melting ice.
Shapable as a block of wood.
Receptive as a valley.
Clear as a glass of water.

Do you have the patience to wait
till your mud settles and the water is clear?
Can you remain unmoving
till the right action arises by itself?

The Master doesn't seek fulfillment.
Not seeking, not expecting,
she is present, and can welcome all things.

/misc | Apr 18, 2020

Cannot add subtitles to videos on Google Drive: "No tracks added" #

Attempting to add subtitles to an MP4 file on Google Drive by selecting it and clicking More Actions/Kebab Menu > "Manage caption tracks" > "ADD NEW CAPTION TRACKS" > "Upload" > "Select a file from your device" > "UPLOAD" resulted in only "No tracks added" over and over.

Jason H. 956 kindly shared the solution:

[I]f you happen to be on multiple users try opening an incognito window and sign in to only one account. Then try to upload the captions to that file.

Google really needs to add this fix to the "Caption error messages" section of their Add caption tracks to your video files, which currently only offers:

If you get and [sic] error while uploading your file, make sure the file is:

/misc | Apr 12, 2020

Long overdue addition to graphics and OS X pages #

LICEcap v1.28 (Win 📺) [230k] & v1.29 (Mac 📺) [864k] {S} Capture an area of your desktop and save it directly to animated .GIF or .LCF.

/misc | Feb 22, 2020

Two rare additions to the OS X page, #

despite having gone nearly read-only (thanks for the kind shout-out, j_s! ;-)

/mac | Feb 20, 2020

Working around Apple's arbitrary limitations, #

or Extracting IPA files from an iPhone

A recent Fantastical update hid previously-paid-for functionality behind a subscription paywall with account creation nags.

Since iTunes backups have long excluded IPAs and Apple Configurator 2 or iMazing only download the latest IPA from Apple, I used an iPhone 6 running iOS 12 to download the previous version (happily, the new version was iOS 13-only) then extracted the IPA for copying to an iPhone 6S running iOS 13:

  1. While Fantastical no longer appears in App Store searches performed under iOS 12, the last compatible version can be downloaded (assuming it is associated with your account) via App Store → Updates → Account icon → Purchased → My Purchases → Search → Fantastical → Download icon → "Download"

  2. Install and run checkra1n, connecting the iPhone 6 to the Mac via USB cable when prompted. Jailbreaking only takes a minute or two.

  3. Install Homebrew

  4. user@Mac ~ % brew install usbmuxd

  5. user@Mac ~ % iproxy 4444 44

  6. In a new Terminal tab: user@Mac ~ % ssh root@localhost -p 4444
    root@localhost's password: alpine

  7. iPhone6:~ root# find /var/containers/Bundle/Application/ -name Fantastical
    /var/containers/Bundle/Application/C5CC3023-C8E7-4AEB-8536-363B96BDB725/Fantastical.app/Fantastical

  8. iPhone6:~ root# exit

  9. user@Mac ~ % mkdir Payload

  10. user@Mac ~ % scp -P 4444 -r root@localhost:/var/containers/Bundle/Application/C5CC3023-C8E7-4AEB-8536-363B96BDB725/Fantastical.app Payload/

  11. user@Mac ~ % zip -r Fantastical.ipa Payload/

  12. Find Fantastical.ipa in the Mac's current directory. It can be installed on the iPhone 6S running iOS 13 via:

Notes & Sources

/misc | Feb 01, 2020

Windows 7 ESU for truly small businesses #

Despite dire warnings and headlines like these:

it is trivial (on the order of a few minutes) and inexpensive ($63.75 per computer for the first year with no minimum order) for small businesses running Windows 7 Pro or Ultimate to enroll in Microsoft's Extended Security Updates program thanks to Ted and Amy at Harbor Computer Services.

Simply fill out the order form (as mentioned in Ed Bott's updated You want to keep running Windows 7? Good luck with that, small businesses) and run the 3 simple slmgr commands provided by Ted in your order confirmation email.

Deepest thanks to Ted and Amy for helping truly small businesses access critical security updates for legacy systems.

/windows | Jan 22, 2020

On Wisdom #

/misc | Jan 01, 2020


Subscribe or visit the archives.