PageSourceSearch

https://shirt-pocket.com/blog/

html shirt-pocket.com collected 2026-10-02 07:50:48 UTC 49,092 bytes, 693 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3<head>
4<meta charset="utf-8">
5<meta name="viewport" content="width=device-width, initial-scale=1">
6<title>Shirt Pocket Watch</title>
7<link rel="preconnect" href="https://fonts.googleapis.com">
8<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9<link href="https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,[email protected],800&family=IBM+Plex+Mono:wght@400;500;600&display=swap" rel="stylesheet">
10<link rel="icon" href="/favicon.svg" type="image/svg+xml">
11<link rel="icon" href="/favicon-32.png" type="image/png" sizes="32x32">
12<link rel="apple-touch-icon" href="/apple-touch-icon.png">
13<link rel="stylesheet" href="/css/site.css?v=1789385552">
14<link rel="stylesheet" href="/css/blog.css?v=1784744508"></head>
15<body class="" style="background:#eef1f6;">
16<div class="sp-page" style="background:#eef1f6;">
17  <!-- NAV -->
18  <div class="sp-nav">
19    <a href="/" class="sp-nav-logo">
20      <svg viewBox="0 0 44 48" width="30" height="33" class="sp-logo-mark" aria-label="Shirt Pocket">
21        <path d="M7 11 H33 A4 4 0 0 1 37 15 V31 A10 10 0 0 1 27 41 H17 A10 10 0 0 1 7 31 Z" fill="#eef4fa" stroke="#2c6fa8" stroke-width="2.6" stroke-linejoin="round"></path>
22        <path d="M7 19 H37" fill="none" stroke="#2c6fa8" stroke-width="2.3"></path>
23        <path d="M27 25 L32 9" fill="none" stroke="#232b38" stroke-width="3" stroke-linecap="round"></path>
24        <circle cx="32.6" cy="8" r="2.5" fill="#2c6fa8"></circle>
25      </svg>
26      <span class="sp-brand--nav">Shirt&nbsp;Pocket</span>
27    </a>
28    <div class="sp-nav-links">
29      <a href="/superduper4.php" class="sp-nav-link">SuperDuper! 4</a><a href="/classic.php" class="sp-nav-link">Classic</a><a href="/blog/" class="sp-nav-link is-active" aria-current="page">Blog</a>      <a href="mailto:[email protected]" class="sp-nav-link">Support</a>
30      <a href="/downloads/SuperDuper.dmg" class="sp-btn-primary sp-nav-download">Download</a>
31    </div>
32  </div>
33  <header class="sp-blog-header">
34    <div class="sp-eyebrow">Shirt Pocket Watch</div>
35    <h1 class="sp-blog-title">The blog</h1>
36    <p class="sp-blog-intro">Where I humiliate myself in public: release notes, backup deep-dives, and various and sundry other things that strike my fancy.</p>
37  </header>
38    <div class="sp-blog-tools" aria-label="Blog tools">
39    <div class="sp-tool-links">
40      <a class="sp-tool-link is-active" href="/blog/">Latest</a>
41      <a class="sp-tool-link " href="/blog/archives">Archives</a>
42      <a class="sp-tool-link " href="/blog/categories">Categories</a>
43      <a class="sp-tool-link" href="/blog/feed">RSS</a>
44    </div>
45    <form class="sp-search-form" method="get" action="/blog/search">
46      <label for="sp-search">Search the blog</label>
47      <input class="sp-search-input" id="sp-search" type="search" name="q" value="" placeholder="Search the blog">
48      <button class="sp-search-submit" type="submit">Search</button>
49    </form>
50  </div>
51  <div class="sp-content">
52    <div class="sp-post-list">
53        <article class="sp-post">
54    <div class="sp-post-meta">
55            <time datetime="2026-10-01">October 1, 2026</time>
56              <a class="sp-category" href="/blog/category/News">News</a>
57              <a class="sp-category" href="/blog/category/Shirt%20Pocket">Shirt Pocket</a>
58              <a class="sp-category" href="/blog/category/SuperDuper%21">SuperDuper!</a>
59          </div>
60    <h1 class="sp-post-title"><a href="/blog/controlled_craziness">Controlled Craziness</a></h1>
61    <div class="sp-post-body"><p>Recently, Apple released an <a href="https://developer.apple.com/documentation/technotes/tn3137-on-mac-keychains#Backing-up-a-file-based-keychain">update to TN3137</a> that discusses backing up keychains.</p>
62
63<p>Specifically, as of macOS 26.4, <a href="https://mjtsai.com/blog/2026/09/24/locked-down-passkey-and-keychain-backups">the login keychain, and perhaps others, cannot be decrypted on other Macs, or after a restore</a>. The Tech Note indicates that backup programs should be sure to back up a folder that contains special system keys&#8230;but also says that the folder is not accessible when System Integrity Protection (SIP)<sup id="fnref:controlled_craziness:sip"><a href="#fn:controlled_craziness:sip" class="footnote-ref" role="doc-noteref">1</a></sup> is on.</p>
64
65<p>This is obviously not a good user solution, because no one is going to boot to Recovery, turn off SIP, back up, boot back to Recovery, and turn SIP back on. Thinking they <strong>would</strong> do so is kind of crazy.<sup id="fnref:controlled_craziness:crazy"><a href="#fn:controlled_craziness:crazy" class="footnote-ref" role="doc-noteref">2</a></sup></p>
66
67<h2>Breathe: it&#8217;s OK</h2>
68
69<p><strong>Fortunately</strong>, SuperDuper handles this situation. When you make a <a href="/guide.php#ch-8-bootable-backups-and-restoring">bootable copy</a>, the required keys are copied without requiring any special steps. Even though <code>Smart Update</code> cannot access those files, it preserves them on the backup so they&#8217;re available if needed.</p>
70
71<h2>What that means for you</h2>
72
73<p>It&#8217;s always a good idea to make a bootable backup, <strong>even if you have no plan to boot from it</strong>. Update it with <code>Smart Update</code>
73, update the OS when SuperDuper indicates you should, and you&#8217;ll be in good shape should you need to restore&#8230;even if you need to restore your keychains on a different Mac.<sup id="fnref:controlled_craziness:restore"><a href="#fn:controlled_craziness:restore" class="footnote-ref" role="doc-noteref">3</a></sup></p>
74
75<div class="footnotes" role="doc-endnotes">
76<hr />
77<ol>
78
79<li id="fn:controlled_craziness:sip" role="doc-endnote">
80<p>System Integrity Protection—basically, a process that prevents any programs, other than Apple-authorized ones, from performing certain activities. You can read more about it <a href="https://developer.apple.com/documentation/security/disabling-and-enabling-system-integrity-protection">here</a>.&#160;<a href="#fnref:controlled_craziness:sip" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a></p>
81</li>
82
83<li id="fn:controlled_craziness:crazy" role="doc-endnote">
84<p>This all may change in the future. The Tech Note hedges a lot in the <strong>Warning</strong> and <strong>Important</strong> sections, which suggests to me that they realize this isn&#8217;t a great situation.&#160;<a href="#fnref:controlled_craziness:crazy" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a></p>
85</li>
86
87<li id="fn:controlled_craziness:restore" role="doc-endnote">
88<p>In fact, I&#8217;ve just verified that migrating from a SuperDuper bootable backup to a different Mac restores the encrypted keychains as you&#8217;d hope and expect.&#160;<a href="#fnref:controlled_craziness:restore" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a></p>
89</li>
90
91</ol>
92</div>
93</div>
94    <div class="sp-post-footer">
95      <span><a href="/blog/controlled_craziness">Permalink</a></span>
96      <span>Comments closed</span>
97    </div>
98  </article>
99  <article class="sp-post">
100    <div class="sp-post-meta">
101            <time datetime="2026-10-01">October 1, 2026</time>
102              <a class="sp-category" href="/blog/category/News">News</a>
103              <a class="sp-category" href="/blog/category/Shirt%20Pocket">Shirt Pocket</a>
104              <a class="sp-category" href="/blog/category/SuperDuper%21">SuperDuper!</a>
105              <a class="sp-category" href="/blog/category/Usability">Usability</a>
106          </div>
107    <h1 class="sp-post-title"><a href="/blog/pushing_the_boundaries">Pushing the Boundaries</a></h1>
108    <div class="sp-post-body"><h2>mtitv;ilmart<sup id="fnref:pushing_the_boundaries:value"><a href="#fn:pushing_the_boundaries:value" class="footnote-ref" role="doc-noteref">1</a></sup></h2>
109
110<p>That&#8217;s right, a new version of SuperDuper has arrived. It has some new stuff!</p>
111
112<h2>I get email</h2>
113
114<p>Every so often, a user will ask for more run logging: some sort of master list of SuperDuper copies, so they can reference it during personal contemplation time. I&#8217;ve usually suggested that they write a little shortcut to do what they want: after all, that&#8217;s what I added the feature for—to allow for extension, and inclusion of behavior that might be user-specific (and, also, to allow people to share Shortcut tips-and-tricks they might develop for SuperDuper).</p>
115
116<h2>Making an example</h2>
117
118<p>That&#8217;s a good approach, I think, but sometimes people need to start with something a bit more elaborate, and tweak that, rather than generate something from scratch.</p>
119
120<p>With that in mind, SuperDuper 4.0.9 includes a new Shortcut—<strong>Log SuperDuper Copy to Dashboard</strong>.</p>
121
122<p><em>What does it do?</em>, you might ask? Well, pretty much what&#8217;s on the tin.</p>
123
124<p>After each copy, it adds a row of information to the sheet that includes various bits of information about the copy that just ran. At the top, you&#8217;ll find a list of the different Copy Jobs that have run (there are typically multiple runs per Job, of course, but only one entry at the top).</p>
125
126<p>You can focus on the runs of one Job by unchecking the <strong>Show</strong> column for the others, or compare them by checking other Jobs.</p>
127
128<blockquote>
129  <p>If you have so many <strong>Copy Jobs</strong> that the upper table overlaps the graphs<sup id="fnref:pushing_the_boundaries:insane"><a href="#fn:pushing_the_boundaries:insane" class="footnote-ref" role="doc-noteref">2</a></sup>, you can just drag them to relocate where they are on the sheet.</p>
130</blockquote>
131
132<h2>Extend away</h2>
133
134<p>Of course, there may be other things you want to do with the data that&#8217;s logged, and once the spreadsheet is there, you can change the various charts, add to them, and do what you&#8217;
134d like. The Shortcut will continue to update the runs.</p>
135
136<h2>I wouldn&#8217;t do that</h2>
137
138<p>I&#8217;ve had <strong>way</strong> too many users write in, thinking that their license was only good for a day. They thought that because the Registration window said &#8220;Registered for 1 day&#8221; the first day they were registered. It would, of course, say &#8220;Registered for 2 days&#8221; the next day, etc.</p>
139
140<p>Now, <strong>I</strong> didn&#8217;t think this was unclear, but when I get a bunch of emails about something like that, and people think that I&#8217;m somehow selling them a 1-day license (folks, I would never do that), it&#8217;s time for a change. So, now it says &#8220;You&#8217;ve been registered for 1 day&#8221;, etc.</p>
141
142<p>I hope that&#8217;s clearer.</p>
143
144<h2>But that&#8217;s not all!</h2>
145
146<p>Well, that&#8217;s mostly all. I&#8217;ve also improved some additional <strong>very</strong> obscure network issues, improved progress display in some edge cases, and individual job phases now remember whether you&#8217;ve expanded them or not. So, if you like to see the detailed stats for a given job, that&#8217;ll be remembered next time you run.</p>
147
148<p>To enjoy the new version, use the internal updater, or</p>
149
150<p><a href="/downloads/SuperDuper.dmg">Download SuperDuper 4.0.9 now!</a></p>
151
152<p>Once again, thanks for using and recommending SuperDuper!</p>
153
154<div class="footnotes" role="doc-endnotes">
155<hr />
156<ol>
157
158<li id="fn:pushing_the_boundaries:value" role="doc-endnote">
159<p>My time is too valuable; I&#8217;ll let my assistant read this.&#160;<a href="#fnref:pushing_the_boundaries:value" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a></p>
160</li>
161
162<li id="fn:pushing_the_boundaries:insane" role="doc-endnote">
163<p>In other words, you&#8217;re an insane person like me with <a href="/blog/testing">a million jobs running all the time</a>.&#160;<a href="#fnref:pushing_the_boundaries:insane" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a></p>
164</li>
165
166</ol>
167</div>
168</div>
169    <div class="sp-post-footer">
170      <span><a href="/blog/pushing_the_boundaries">Permalink</a></span>
171      <span>Comments closed</span>
172    </div>
173  </article>
174  <article class="sp-post">
175    <div class="sp-post-meta">
176            <time datetime="2026-09-24">September 24, 2026</time>
177              <a class="sp-category" href="/blog/category/News">News</a>
178              <a class="sp-category" href="/blog/category/Shirt%20Pocket">Shirt Pocket</a>
179              <a class="sp-category" href="/blog/category/SuperDuper%21">SuperDuper!</a>
180              <a class="sp-category" href="/blog/category/Usability">Usability</a>
181          </div>
182    <h1 class="sp-post-title"><a href="/blog/it_s_the_little_things">It&#039;s the Little Things</a></h1>
183    <div class="sp-post-body"><h2>Purpose &amp; Intent</h2>
184
185<p>SuperDuper is, obviously, a serious tool that has an important task: making a reliable copy of data from one place to another. Its UI, for the most part, is <strong>all business</strong>, and tries to make the process as clear as possible.</p>
186
187<p>Those, clearly, are the big things. Table stakes, as it were.</p>
188
189<h2>Fun &amp; Frivolity</h2>
190
191<p>Keeping that in mind, I&#8217;ve still tried to put &#8220;pleasing&#8221; things into the general design, with a focus on making things a bit more convenient, clear, informative, or easier to look at.</p>
192
193<p>Things like animations and transitions (which were in SuperDuper Classic, too); updating progress with different options, communication via both bars and pulsing; more playful ways of choosing options; dragging around jobs; the sparkles to draw your attention for the first time<sup id="fnref:it_s_the_little_things:hand"><a href="#fn:it_s_the_little_things:hand" class="footnote-ref" role="doc-noteref">1</a></sup>; things like that.</p>
194
195<p>But, yeah—while I don&#8217;t want it to be <strong>boring</strong>, SuperDuper isn&#8217;t ever going to be a <a href="https://daringfireball.net/2026/09/appzapper_3000">Delicious Generation</a> app.<sup id="fnref:it_s_the_little_things:tm"><a href="#fn:it_s_the_little_things:tm" class="footnote-ref" role="doc-noteref">2</a></sup> Respect to whose who <strong>can</strong> be that playful with their stuff, though!</p>
196
197<h2>Fit &amp; Finish</h2>
198
199<p>There are serious &#8220;little&#8221; things, too, of course. And that&#8217;s where I generally focus.</p>
200
201<p>For example, SuperDuper preserves the destination drive icon and Spotlight state even across erase operations and replications.</p>
202
203<p>It&#8217;s a little thing, but I know that many users identify their drives by their icons, and so it&#8217;s nearly as important as keeping the name the same.</p>
204
205<p>Similarly, even though the Spotlight state is kept <strong>on the destination drive</strong>, I take pains to ensure that it&#8217;s preserved across the various copy permutations. It&#8217;s pretty annoying when Spotlight starts indexing a backup you told it to ignore&#8230;and can result in finding something on a backup rather than a source.</p>
206
207<p>Behavioral things, too, like mounting drives for the user, and unmounting them after (if they started that way)&#8230;there are a lot of little touches in there that just try to predict what a user would want, without needing any settings, or thought&#8230;it just works.</p>
208
209<h2>Details &amp; Obscurity</h2>
210
211<p>SuperDuper 4.0.8, released today, deals with some of those cases, and handles some relatively obscure cases better than before.</p>
212
213<p>For example, users who have Samba setups on Linux boxes that include the <code>fruit</code> extensions may be preserving macOS permissions, and you can get into situations where a file with no permissions becomes permanently read-only (except server-side).</p>
214
215<p>Obscure, but handled.</p>
216
217<p><em>Speaking of obscure</em>, the onboarding sequence is now sensitive to the macOS version you&#8217;re running, and name-checks the background activity section based differently depending on what it is. Because it regressed from macOS 14/15&#8217;s &#8220;Allow in the background&#8221; to macOS 26/27&#8217;s &#8220;
217Background App Activity&#8221; for <strong>reasons</strong>.</p>
218
219<p>There&#8217;s a lot more, but you get the idea: continue to polish-polish-polish.</p>
220
221<p>And to get the benefit of that</p>
222
223<p><a href="/downloads/SuperDuper.dmg">Download SuperDuper! 4.0.8</a></p>
224
225<p>and install (or, better, use the built-in updater).</p>
226
227<p>As always, enjoy, and thanks for using SuperDuper.</p>
228
229<div class="footnotes" role="doc-endnotes">
230<hr />
231<ol>
232
233<li id="fn:it_s_the_little_things:hand" role="doc-endnote">
234<p>Eventually, I&#8217;ll get around to my original plan for this—having the &#8220;Hi!&#8221; hand come alive, swoop down, and point at the link, along with some other fun behaviors&#8230;the storyboard I did for this amuses me&#8230;but it&#8217;s a lot of work for a funny-but-useful bit of goofiness.</p>
235
236<p>Maybe if I do it they&#8217;ll let me into the Hall of Delicious Generations.&#160;<a href="#fnref:it_s_the_little_things:hand" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a></p>
237</li>
238
239<li id="fn:it_s_the_little_things:tm" role="doc-endnote">
240<p>The original version of Apple&#8217;s <code>Time Machine</code> had its UI designed by <a href="https://www.mikematas.com">Mike Matas</a>, the original—and probably the best—Delicious Generation designer. I was lucky enough to have him design the original SuperDuper Classic icon back when he was a very young man, and it was <strong>quite</strong> clear he was both incredibly talented and going places.</p>
241
242<p><a href="https://www.lovefrom.com">And, indeed, he did &#40;many times over&#41;!</a></p>
243
244<p>Since he left, Time Machine has become less <strong>fun</strong>, and certainly less H.G. Wells/Victorian.&#160;<a href="#fnref:it_s_the_little_things:tm" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a></p>
245</li>
246
247</ol>
248</div>
249</div>
250    <div class="sp-post-footer">
251      <span><a href="/blog/it_s_the_little_things">Permalink</a></span>
252      <span>Comments closed</span>
253    </div>
254  </article>
255  <article class="sp-post">
256    <div class="sp-post-meta">
257            <time datetime="2026-09-21">September 21, 2026</time>
258              <a class="sp-category" href="/blog/category/News">News</a>
259              <a class="sp-category" href="/blog/category/Shirt%20Pocket">Shirt Pocket</a>
260              <a class="sp-category" href="/blog/category/SuperDuper%21">SuperDuper!</a>
261          </div>
262    <h1 class="sp-post-title"><a href="/blog/turbo_tips">⚡️Turbo Tips</a></h1>
263    <div class="sp-post-body"><p>I&#8217;ve been asked a lot of times about when Smart Update becomes <strong>⚡️Turbo Smart Update</strong>, and where the setting is in SuperDuper.</p>
264
265<p>The answer is: there&#8217;s no setting. When possible, SuperDuper <strong>automatically</strong> does a <strong>⚡️Turbo Smart Update</strong>.</p>
266
267<p>So, why doesn&#8217;t it <strong>always</strong> ⚡️Turbo?</p>
268
269<h2>The rules of the game</h2>
270
271<p>Here&#8217;s the deal: ⚡️Turbo depends on a number of factors, and you can improve the likelihood it will happen by using a separate Copy Job for each source/destination pair. SuperDuper needs to maintain a relationship between the source, destination, copy method, etc., to ensure that ⚡️Turbo is reliable.</p>
272
273<p>If you change the copy method or the rules, then the relationship between the last backup and the next one has changed&#8230;and ⚡️Turbo is disallowed (until the next run).</p>
274
275<p>Turbo also won&#8217;t run after a <strong>One Time macOS Update</strong>, or an <strong>Erase, then copy</strong> until the second <strong>Smart Update</strong>.</p>
276
277<h2>System effects</h2>
278
279<p>SuperDuper also relies on the system&#8217;s own mechanism for tracking changes.<sup id="fnref:turbo_tips:special sauce"><a href="#fn:turbo_tips:special sauce" class="footnote-ref" role="doc-noteref">1</a></sup></p>
280
281<p>Many (many) years ago, there was a program that I <em>think</em> was called <code>Synk</code>. It installed a kernel extension that tracked all file system changes and wrote a database into user space that the copy program used to make &#8220;smarter&#8221; copies.</p>
282
283<p>I remember thinking that was incredibly dangerous at the time. You could change the volume when <code>Synk</code> wasn&#8217;t running, or on another system, and <code>Synk</code> would be none the wiser. So, while <em>clever</em>, it wasn&#8217;t a <em>reliable</em> method of doing this.</p>
284
285<p>Years later, Apple added <code>fsevents</code>, a system-supported way of doing the same kind of thing. I evaluated it when it was introduced, and it was just too flaky to rely on&#8230;it wasn&#8217;t worth the risk.</p>
286
287<p>Since then, Apple has made changes to <code>fsevents</code>, making it far more reliable as a source of &#8220;truth&#8221; about volume status.</p>
288
289<p>Now, it&#8217;s no panacea. <code>fsevents</code> doesn&#8217;
289t tell you a ton, and it consolidates its change sets pretty regularly, so it&#8217;s not like you can just say &#8220;here&#8217;s what happened&#8221; and replay a bunch of events on the copy and get a good result.</p>
290
291<p>But, as a way of &#8220;thinning&#8221; the number of files and folders you have to visit, when used intelligently, it works well.</p>
292
293<p>Unless/Until it doesn&#8217;t.</p>
294
295<h2>Sorry, Charlie</h2>
296
297<p>Unfortunately, sometimes <code>fsevents</code> can&#8217;t keep up with the number of changes being made to a volume, or needs to flush its internal change database. So even though SuperDuper knows what to do, <code>fsevents</code> can veto our attempt annd say that it has, basically, lost the history—and a full scan is needed.</p>
298
299<p>This can also happen when a drive disconnects unexpectedly, or is unplugged without fully ejecting it.</p>
300
301<p>And, of course, it&#8217;s erased when you erase.</p>
302
303<h2>Faster, Pussycat! Kill! Kill!</h2>
304
305<p>So there you go: <strong>⚡️Turbo Smart Update</strong> works on the second and subsequent runs of the same job, when the job itself hasn&#8217;t changed in a way that invalidates <strong>⚡️Turbo</strong>&#8230;as long as the system doesn&#8217;t invalidate its change database for the volumes involved.</p>
306
307<p>In the event a full scan is necessary, SuperDuper uses regular <strong>Smart Update</strong>. And since that&#8217;s more than twice as fast as before, it&#8217;s less painful than it could be.</p>
308
309<p><img style="display:block; margin-left:auto; margin-right:auto;" src="https://www.shirt-pocket.com/blog/assets/media/2026/09/The_More_You_Know_about_Turbo.gif" alt="The More You Know about ⚡️Turbo Smart Update." title="The More You Know about Turbo.gif" border="0" width="360" height="218" /></p>
310
311<div class="footnotes" role="doc-endnotes">
312<hr />
313<ol>
314
315<li id="fn:turbo_tips:special sauce" role="doc-endnote">
316<p>Of course, there&#8217;s a ton of SuperDuper Special Sauce™️ involved here, too.&#160;<a href="#fnref:turbo_tips:special sauce" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a></p>
317</li>
318
319</ol>
320</div>
321</div>
322    <div class="sp-post-footer">
323      <span><a href="/blog/turbo_tips">Permalink</a></span>
324      <span>Comments closed</span>
325    </div>
326  </article>
327  <article class="sp-post">
328    <div class="sp-post-meta">
329            <time datetime="2026-09-16">September 16, 2026</time>
330              <a class="sp-category" href="/blog/category/News">News</a>
331              <a class="sp-category" href="/blog/category/Shirt%20Pocket">Shirt Pocket</a>
332              <a class="sp-category" href="/blog/category/SuperDuper%21">SuperDuper!</a>
333              <a class="sp-category" href="/blog/category/Usability">Usability</a>
334          </div>
335    <h1 class="sp-post-title"><a href="/blog/do_the_right_thing">Do the Right Thing</a></h1>
336    <div class="sp-post-body"><p>I try to always do the &#8220;right thing&#8221;.</p>
337
338<p>What does that mean? It means &#8220;only use documented calls&#8221;. It means &#8220;work around problems using normal processes, but not things that aren&#8217;t documented&#8221;.</p>
339
340<p>It means that even when I know why something isn&#8217;t working, if there&#8217;s no documented fix&#8230;well, I don&#8217;t do that&#8230;unless I absolutely have to.</p>
341
342<h2>The past is prologue</h2>
343
344<p>I&#8217;ve been in this situation before. When Catalina was released, and the whole boot process was different, I spent all summer figuring out how to make a bootable copy: volume groups, roles, firmlinks, and so much time going through verbose boot logs (literally taking movies of them, since they went by so <strong>fast</strong>, and single stepping through) until I figured out the issue.</p>
345
346<p>It was rough (but also fun).</p>
347
348<p>And, obviously, none of that was documented. But I did it anyway&#8230;to benefit the users of SuperDuper.</p>
349
350<h2>A new dilemma</h2>
351
352<p>I&#8217;ve known for a while why drives aren&#8217;t showing up as bootable under Golden Gate. And it&#8217;s been reported as a bug, as mentioned in my previous blog posts. But I didn&#8217;
352t want to release the workaround I had, because it relies on something undocumented.</p>
353
354<p>Specifically, one&#8230;single&#8230;bit.</p>
355
356<h2>Cat leaves bag</h2>
357
358<p>I had hoped that the <code>Terminal</code> command I provided in a previous post would be sufficient until an official fix came out, but it&#8217;s just too difficult for &#8220;regular&#8221; people to execute&#8230;and the last thing I want to do is put people in a state of panic when they&#8217;re trying to recover from a failure.</p>
359
360<p>But the tipping point was that, yesterday, a beta of 27.2 (!) was released, without a fix. Which means I don&#8217;t know when, or if, a fix is going to be implemented.</p>
361
362<p>The thing is, the copy is actually <strong>fine</strong> (as proven by the original workaround &amp; &#8220;proof of life&#8221; screenshot). The real issue is that Golden Gate&#8217;s startup drive code is filtering its selections by looking for something that neither <code>asr</code> nor <code>bless</code> is setting. In fact, they&#8217;ve <strong>never</strong> set this value, which is why, under Golden Gate, your <strong>previously</strong> bootable backups <em>look</em> like they&#8217;re no longer bootable.</p>
363
364<p>With those factors in mind, I&#8217;ve reversed course and have decided to go ahead and work around the issue as safely as I can.</p>
365
366<p>Note that this fix will automatically disable itself when the <strong>real</strong> fix is (hopefully) released. In all the internal testing that I&#8217;ve done during the Golden Gate Beta, it&#8217;s worked fine and seems perfectly safe.</p>
367
368<h2>What you need to do (nothing)</h2>
369
370<p>The fix will be applied automatically when you make your next backup, even if it&#8217;s a Smart Update, under all macOS versions supported by SuperDuper 4. Other than that, there&#8217;s nothing special you need to do.</p>
371
372<p>With all that said,</p>
373
374<p><a href="/downloads/SuperDuper.dmg">Download SuperDuper! 4.0.7</a></p>
375
376<p>(or, better, just use the internal updater).</p>
377
378<p>Thanks, as always, for using SuperDuper, and for your patience.</p>
379</div>
380    <div class="sp-post-footer">
381      <span><a href="/blog/do_the_right_thing">Permalink</a></span>
382      <span>Comments closed</span>
383    </div>
384  </article>
385  <article class="sp-post">
386    <div class="sp-post-meta">
387            <time datetime="2026-09-14">September 14, 2026</time>
388              <a class="sp-category" href="/blog/category/Shirt%20Pocket">Shirt Pocket</a>
389              <a class="sp-category" href="/blog/category/SuperDuper%21">SuperDuper!</a>
390          </div>
391    <h1 class="sp-post-title"><a href="/blog/proof_of_boot_life">Proof of (Boot) Life</a></h1>
392    <div class="sp-post-body"><p>As I mentioned in the previous post, there&#8217;s a bug in Golden Gate that is not showing proper external copies as bootable, even though they&#8217;re made correctly, with Apple&#8217;s own replicator.</p>
393
394<p>The workaround, if you must, is listed there (you should also be able to install Golden Gate over the backup from Recovery). For those who doubt (you know who you are), this is a screen shot of my Mac Studio<sup id="fnref:proof_of_boot_life:SN"><a href="#fn:proof_of_boot_life:SN" class="footnote-ref" role="doc-noteref">1</a></sup> booting off a SuperDuper copy made to a JBOD PRO-BLADE Station (I&#8217;ve also tested a MacBook Neo and a MacBook Pro).</p>
395
396<p><img style="display:block; margin-left:auto; margin-right:auto;" src="https://www.shirt-pocket.com/blog/assets/media/2026/09/Golden_Gate_Boot.png" alt="Golden Gate Boot." title="Golden Gate Boot.png" border="0" width="356" height="600" /></p>
397
398<div class="footnotes" role="doc-endnotes">
399<hr />
400<ol>
401
402<li id="fn:proof_of_boot_life:SN" role="doc-endnote">
403<p><strong>NOTACHANCE</strong> is obviously not my real serial number, but I thought this would be funnier than just blacking it out.&#160;<a href="#fnref:proof_of_boot_life:SN" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a></p>
404</li>
405
406</ol>
407</div>
408</div>
409    <div class="sp-post-footer">
410      <span><a href="/blog/proof_of_boot_life">Permalink</a></span>
411      <span>Comments closed</span>
412    </div>
413  </article>
414  <article class="sp-post">
415    <div class="sp-post-meta">
416            <time datetime="2026-09-14">September 14, 2026</time>
417              <a class="sp-category" href="/blog/category/News">News</a>
418              <a class="sp-category" href="/blog/category/Shirt%20Pocket">Shirt Pocket</a>
419              <a class="sp-category" href="/blog/category/SuperDuper%21">SuperDuper!</a>
420          </div>
421    <h1 class="sp-post-title"><a href="/blog/laboring_day">Laboring Day</a></h1>
422    <div class="sp-post-body"><h2>Busy week</h2>
423
424<p>Post-Labor Day (on which I still labored), it&#8217;s been a busy week here at Shirt Pocket HQ.</p>
425
426<p>I&#8217;ve been adding a few little features and fixes to SuperDuper, improving behaviors with regard to images, Cloud Storage, and wrapping up Golden Gate support for its release, which will likely be a few hours after this posts.</p>
427
428<p>Details are in the <a href="/superduper4.php#notes-1015">release notes</a>.</p>
429
430<h2>SuperDuper is ready, but&#8230;</h2>
431
432<p>Golden Gate, in my view, looks to be one of the more reliable releases we&#8217;ve had in <strong>years</strong>, even in its 27.0 release. I wouldn&#8217;t hesitate to encourage people to install it, without waiting for the (inevitable) 27.1 release. I even recommended it to the curious during the very stable and reliable Beta period. Shockingly painless.</p>
433
434<p>That said, there&#8217;s always a <strong>but</strong> in these releases, you know?</p>
435
436<p>The <a href="https://youtu.be/X53ZSxkQ3Ho">big but</a>(t—sorry) in Golden Gate 27.0 is a SuperDuper issue (that is <a href="/blog/its_a_trip_to_the_moon_not_a_marathon/">actually an Apple issue</a>): backups, even though a bootable backup is properly configured to boot, they aren&#8217;t showing up as choices in <em>either</em> the startup disk preference pane <strong>or</strong> the startup picker. (FB24210103, reported quite a while ago, Apple friends.)</p>
437
438<p>Fortunately, unlike when <a href="/blog/youre_a_mean_one">this happened before</a>, there&#8217;s no error during copy. But, even though the end result is bootable<sup id="fnref:laboring_day:boot"><a href="#fn:laboring_day:boot" class="footnote-ref" role="doc-noteref">1</a></sup>, it just doesn&#8217;t appear.</p>
439
440<p><strong>Remember</strong>: a drive doesn&#8217;t have to boot to be fully restored. But there are many scenarios where boot is essential, and I&#8217;m hoping Apple will fix this soon.</p>
441
442<h2>Ecosystem: engage!</h2>
443
444<p>I was delighted to see that there&#8217;s a third-party app called <a href="https://openbackup.app/">OpenBackup</a> that offers mobile notification when backups run for both <a href="/superduper4.php">SuperDuper 4</a> and <a href="/classic.php">SuperDuper Classic</a>. It works on both iOS and Android.</p>
445
446<p>I always hope, when I implement things like <code>Shortcuts</code> support, that other developers will make use of them to do cool things<sup id="fnref:laboring_day:legup"><a href="#fn:laboring_day:legup" class="footnote-ref" role="doc-noteref">2</a></sup>&#8230;it&#8217;s nice to see it happening.</p>
447
448<h2>In the meantime</h2>
449
450<p>I continue to be surprised and delighted by how well the rollout of SuperDuper 4 is going. Thanks to everyone who has registered, to those who have recommended it to their friends, and to the folks that have reviewed it.</p>
451
452<p>But now, it&#8217;s time to update SuperDuper using the built-in updater, or</p>
453
454<p><a href="/downloads/SuperDuper.dmg">Download SuperDuper! 4.0.6 Now</a></p>
455
456<p>As always, thanks for using SuperDuper!—your support is appreciated.</p>
457
458<div class="footnotes" role="doc-endnotes">
459<hr />
460<ol>
461
462<li id="fn:laboring_day:boot" role="doc-endnote">
463<p>You can prove this to yourself if you really <strong>want</strong> to by booting into Recovery, reducing security with the Startup Security utility, and then using <code>bless --mount /Volumes/Backup-Volume --setBoot</code> in Recovery&#8217;s <code>Terminal</code>. But <strong>don&#8217;t</strong> unless you <strong>really</strong> have to.&#160;<a href="#fnref:laboring_day:boot" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a></p>
464</li>
465
466<li id="fn:laboring_day:legup" role="doc-endnote">
467<p>It&#8217;s always nice to leave some space for fellow developers (not to mention users) to build on what you&#8217;ve done: we did this with Classic, with support for <code>Growl</code> and extensive AppleScript support.&#160;<a href="#fnref:laboring_day:legup" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a></p>
468</li>
469
470</ol>
471</div>
472</div>
473    <div class="sp-post-footer">
474      <span><a href="/blog/laboring_day">Permalink</a></span>
475      <span>Comments closed</span>
476    </div>
477  </article>
478  <article class="sp-post">
479    <div class="sp-post-meta">
480            <time datetime="2026-09-08">September 8, 2026</time>
481              <a class="sp-category" href="/blog/category/News">News</a>
482              <a class="sp-category" href="/blog/category/Shirt%20Pocket">Shirt Pocket</a>
483              <a class="sp-category" href="/blog/category/SuperDuper%21">SuperDuper!</a>
484          </div>
485    <h1 class="sp-post-title"><a href="/blog/daring_to_recommend">Daring to Recommend</a></h1>
486    <div class="sp-post-body"><p>John Gruber (of <a href="https://www.daringfireball.net"><img src="https://daringfireball.net/favicon.ico" width="16" height="16" alt="Daring Fireball" style="vertical-align: -2px;"> Daring Fireball</a> fame) has been using SuperDuper <a href="https://daringfireball.net/2004/12/software_update">since at least 2004</a>, not long after its initial release. He&#8217;s <a href="https://daringfireball.net/2010/03/ode_to_diskwarrior_superduper_dropbox">written</a> <a href="https://daringfireball.net/2025/02/bootable_mac_startup_drive_backups_and_another_ode_to_superduper">kindly about it</a> over the years, and has just issued <a href="https://daringfireball.net/2026/09/superduper_4">his verdict on SuperDuper 4</a>:</p>
487
488<blockquote>
489  <p>SuperDuper feels like impossibly good software. Read <a href="/blog/supererduperer">his post announcing version 4</a> to start, then catch up on the rest of the blog to get a feeling for how much work he’s put into SuperDuper 4. Just extraordinary.<br />
490  &#8230;<br />
491  I recommend SuperDuper 4 wholeheartedly.</p>
492</blockquote>
493
494<p><em>Thanks, John!</em></p>
495</div>
496    <div class="sp-post-footer">
497      <span><a href="/blog/daring_to_recommend">Permalink</a></span>
498      <span>Comments closed</span>
499    </div>
500  </article>
501  <article class="sp-post">
502    <div class="sp-post-meta">
503            <time datetime="2026-09-08">September 8, 2026</time>
504              <a class="sp-category" href="/blog/category/News">News</a>
505              <a class="sp-category" href="/blog/category/Shirt%20Pocket">Shirt Pocket</a>
506              <a class="sp-category" href="/blog/category/SuperDuper%21">SuperDuper!</a>
507              <a class="sp-category" href="/blog/category/Usability">Usability</a>
508          </div>
509    <h1 class="sp-post-title"><a href="/blog/testing">Testing</a></h1>
510    <div class="sp-post-body"><h2>In a Hurry?</h2>
511
512<p>You probably don&#8217;t need to read this. Unless you want to.</p>
513
514<h2>Process, Process, Process</h2>
515
516<p>So, how do you solve the problem of testing a product like SuperDuper?</p>
517
518<iframe width="560" height="315" src="https://www.youtube.com/embed/s-VRyQprlu8?si=GBONziGHxaMHPupx" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
519
520<p>As you might expect, it&#8217;s pretty difficult. Of course, you can pin individual cases of UI and copy behavior (there are over 2,000 individual tests against the SuperDuper code base, which is about 250K lines of Swift, Objective-C and C): those are run every time I make a change to the code base&#8230;to protect against regression of things that are <strong>known</strong>.</p>
521
522<h2>Theory vs Practice</h2>
523
524<p>But this type of testing only gets you so far. I can model various situations that I&#8217;m trying to cover, but models just simulate reality (even if the cases are real).</p>
525
526<p>Real backups are more complicated, and quirkier.</p>
527
528<p>They&#8217;re often to different drive types. Those drives may be formatted in different ways, have their own layouts, failure modes, fragmentation levels, and connections.</p>
529
530<p>So, not only do I run a few systems of different eras as test harnesses with various drives attached (simultaneously running Time Machine, too), my main development system (currently a first generation Mac studio) has a <strong>huge</strong> number of different drives attached.</p>
531
532<p>These include (but are not limited to—I also have thumb-drives set up for specific tests, and assorted other SSDs and HDDs):</p>
533
534<ul>
535<li>2x OWC Express 1M2 80G, one with an OWC SSD, one with a SanDisk SSD</li>
536<li>
5361x LaCie D2 Thunderbolt 2 drive, connected via an Apple TB3/4->TB2 adapter, chained to</li>
537<li>1x LaCie 2Big Thunderbolt 2 drive (RAID)</li>
538<li>1x LaCie 2Big Desk/Dock (RAID)</li>
539<li>1x SanDisk Pro USB-C SSD</li>
540<li>1x SanDisk Professional TB4 SSD</li>
541<li>1x SanDisk USB Transport with its own PRO-BLADE</li>
542<li>1x SanDisk PRO-BLADE Station with 4 PRO-BLADE SSDs (JBOD)</li>
543<li>1x OWC 4M2, configured as JBOD, with 2xM.2 SSDs</li>
544<li>1x Synology 2415+ configured as iSCSI via ATTO&#8217;s initiator</li>
545<li>4x SMB mounts from the Synology</li>
546</ul>
547
548<blockquote>
549  <p>Note that some of these drives are connected to an Anker TB5 dock, to make sure that&#8217;s covered, too; some are connected to an Apple Studio Display, to get a hub in there; many are daisy chained, so I deal with that, too.</p>
550</blockquote>
551
552<p>Yeah, that&#8217;s a lot of drives (and a significant investment), and doesn&#8217;t count the separate Mac systems with their own external storage that are running tests all the time.</p>
553
554<p>Those drives don&#8217;t do a lot on their own, of course: SuperDuper is configured to run copies against them, of various types, all day long (and all night).</p>
555
556<p>If there are any failures, I&#8217;m notified immediately and can analyze the logs to determine the cause, how it was handled (since failures can happen to users), and whether it was my issue or a problem with hardware.</p>
557
558<p>In addition, while all of the copies are checked separately for accuracy and under-copying, a number of tests also check for idempotency, to ensure there&#8217;s no thrashing or incorrect/over copying, and then there are a series of timed tests that make sure there hasn&#8217;t been a performance regression.</p>
559
560<p>And on top of that, there are the aforementioned <em>2,000 automated tests</em> in the full SuperDuper 4 test suite, with more manual tests as well (which I need to figure out how to automate one of these days).</p>
561
562<h2>Even So&#8230;</h2>
563
564<p>But even with all that, I can&#8217;t truly replicate every situation that can occur in the field. And even with all that <strong>I</strong> can screw up and miss things.</p>
565
566<p>That&#8217;s where <strong>other</strong> testers come in. As I&#8217;ve mentioned previously, there were a large number of external testers during SuperDuper 4&#8217;s development, rolled in over time to ensure a series of &#8220;fresh testers&#8221; (and test cases) were always encountering the code.</p>
567
568<p>When outside users run into a problem, I have to figure out what happened beyond just &#8220;Hey, Dave, last night&#8217;s copy failed&#8221;. So SuperDuper does extensive logging (if you  want to be driven mad, feel free to look at the ocean of logging with <code>log show</code> in Terminal): when a user submits an issue, it includes both SuperDuper&#8217;s visible log, and a filtered-for-relevance couple of seconds before and after the failure from the system log, so that I have enough information to analyze the error.</p>
569
570<p>When appropriate, verified problems turn into another test case, to make sure they&#8217;re both fixed and won&#8217;t break again. And then a test build is sent to the user to ensure the situation is covered in its original setting.</p>
571
572<p>Bugs in the field are pretty rare things (and are often the result of configuration differences that I haven&#8217;t created in-house). But given a report, it&#8217;s nice to be able to fix them&#8230;and prevent them from happening again.</p>
573
574<h2>In Sum</h2>
575
576<p>In the end, there&#8217;s no magic, and there are no shortcuts: copy testing is done by making (and comparing) tons and tons of copies, small and large, under both &#8220;random&#8221; and &#8220;known&#8221; situations; UI testing is done by pinning behavior and ensuring things react as expected.</p>
577
578<p>Combine that with (hopefully) proper design, extensive experience, and careful implementation, and you end up with SuperDuper 4 which, despite a number of small updates post-release, is (thankfully) proving to be very reliable in the field&#8230;the goal of any design, development, and testing process.</p>
579</div>
580    <div class="sp-post-footer">
581      <span><a href="/blog/testing">Permalink</a></span>
582      <span>Comments closed</span>
583    </div>
584  </article>
585  <article class="sp-post">
586    <div class="sp-post-meta">
587            <time datetime="2026-09-03">September 3, 2026</time>
588              <a class="sp-category" href="/blog/category/Shirt%20Pocket">Shirt Pocket</a>
589              <a class="sp-category" href="/blog/category/SuperDuper%21">SuperDuper!</a>
590              <a class="sp-category" href="/blog/category/Usability">Usability</a>
591          </div>
592    <h1 class="sp-post-title"><a href="/blog/estimates">Estimates</a></h1>
593    <div class="sp-post-body"><h2>Hard Problems are Hard</h2>
594
595<p>You need only look at Apple&#8217;s installer, sitting at &#8220;one minute left&#8221; for an hour, to understand that time estimates of I/O-based operations are <strong>very hard</strong>.</p>
596
597<p>They seem like they&#8217;d be easy, though, don&#8217;t they?<sup id="fnref:estimates:easy"><a href="#fn:estimates:easy" class="footnote-ref" role="doc-noteref">1</a></sup> You just take the size, figure out how fast things are going, and do some math, and bingo-bango-bongo, there you go! Perfect estimate!</p>
598
599<p>Similarly, you take something like the <a href="https://apps.apple.com/us/app/blackmagic-disk-speed-test/id425264550">Blackmagic Disk Speed Test</a> and look at its read/write speed and think &#8220;geez, there&#8217;s the speed, what&#8217;s the problem&#8221;?</p>
600
601<p>I mean, sure: if you were writing a single file (or some big files), to a blank destination, on a consistent connection. Bytes stream at a constant rate, and it really is just a matter of a few quick observations and a little math.</p>
602
603<h2>Real World Cases</h2>
604
605<p>But, no. It&#8217;s not that simple. I tried the best I could to get things as right as possible, and the estimates are <strong>still</strong>, sometimes, wrong.</p>
606
607<p>Sometimes <strong>very</strong> wrong.</p>
608
609<p>Let me walk you through the general (albeit highly simplified) approach:</p>
610
611<ul>
612<li>SuperDuper walks the drive and calculates about how much data has to be copied (while, at the same time, it&#8217;s copying)</li>
613<li>Once it knows, it looks as the rate copying is going</li>
614<li>It then shows you a time</li>
615</ul>
616
617<p>Sounds familiar, right? Well, it goes further than that:</p>
618
619<ul>
620<li>It&#8217;s actually showing a moving average that&#8217;s taking speed variances into account</li>
621<li>It&#8217;s determining the approximate ratio of &#8220;up to date&#8221; vs &#8220;need to copy&#8221; files</li>
622<li>It&#8217;s figuring out how long it&#8217;s taking to copy small vs big files</li>
623<li>It&#8217;s taking <strong>previous runs</strong> against this content into account</li>
624<li>&#8230;and so much more&#8230;</li>
625</ul>
626
627<p>Even with all that, sometimes it&#8217;ll be wrong.</p>
628
629<p>I just don&#8217;t know, until I get there, whether something is going to <strong>need</strong> to be copied. If it doesn&#8217;t, and it&#8217;s large, the estimate will be too long. If it does, and the OS is slow to copy that particular file, or that size of file, it&#8217;ll be too short.</p>
630
631<p>You get the idea. Hopefully.</p>
632
633<h2>&#8220;Your Estimates Suck, and So Do You&#8221;</h2>
634
635<p>For years, I resisted putting in anything like this. It&#8217;s just too hard to give an accurate number. But as I shaped the algorithms I&#8217;m using in SD4, I figured I could get <strong>close</strong>, <strong>most</strong> of the time, in <strong>most</strong> situations, and it would be worthwhile.</p>
636
637<p>And I think it is. Usually. Sometimes it&#8217;s wrong&#8230;but it gets better the more you copy that particular content.</p>
638
639<p>It&#8217;ll never be perfect, though (although I get <strong>very</strong> close for replication, which was very tricky, given Apple&#8217;s replicator gives virtually <strong>no</strong> information about what it&#8217;s doing, and certainly no speed or even size info), and I try to indicate that with lots of hedging and &#8220;weasel words&#8221; like <em>approximately</em> and <em>about</em> and <em>estimate</em> to tell you that, well, an estimate is an estimate. It&#8217;s an inexact science.</p>
640
641<p>So, if the estimate I&#8217;m presenting annoys you, you may want to consider taking the Car Talk &#8220;engine check light&#8221; approach: put a piece of black electrical tape over it.</p>
642
643<p>Or just close the window. The copy will continue in the background and finish when it finishes.</p>
644
645<p>Problem solved!</p>
646
647<div class="footnotes" role="doc-endnotes">
648<hr />
649<ol>
650
651<li id="fn:estimates:easy" role="doc-endnote">
652<p>Or so everyone tells me when they complain about them.&#160;<a href="#fnref:estimates:easy" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a></p>
653</li>
654
655</ol>
656</div>
657</div>
658    <div class="sp-post-footer">
659      <span><a href="/blog/estimates">Permalink</a></span>
660      <span>Comments closed</span>
661    </div>
662  </article>
663    </div>
664          <nav class="sp-pagination" aria-label="Post pages">
665                <span class="sp-page-count">Page 1 of 33</span>
666        <a href="/blog/page/2">Older →</a>      </nav>
667      </div>
668  <!-- FOOTER -->
669  <div class="sp-footer">
670    <div class="sp-footer-intro">
671      <div class="sp-footer-brand">
672        <svg viewBox="0 0 44 48" width="24" height="26" class="sp-logo-mark" aria-hidden="true">
673          <path d="M7 11 H33 A4 4 0 0 1 37 15 V31 A10 10 0 0 1 27 41 H17 A10 10 0 0 1 7 31 Z" fill="#eef4fa" stroke="#2c6fa8" stroke-width="2.6" stroke-linejoin="round"></path>
674          <path d="M7 19 H37" fill="none" stroke="#2c6fa8" stroke-width="2.3"></path>
675          <path d="M27 25 L32 9" fill="none" stroke="#232b38" stroke-width="3" stroke-linecap="round"></path>
676          <circle cx="32.6" cy="8" r="2.5" fill="#2c6fa8"></circle>
677        </svg>
678        <span class="sp-brand--footer">Shirt Pocket</span>
679      </div>
680      <div class="sp-footer-tagline">Software for an audience of one. You.</div>
681    </div>
682    <div class="sp-footer-links">
683      <div class="sp-footer-column"><strong>Products</strong><a href="/superduper4.php">SuperDuper! 4</a><a href="/classic.php">Classic</a><a href="/hall-of-fame.php">Hall of Fame</a></div>
684      <div class="sp-footer-column"><strong>Learn</strong><a href="/faq-superduper4.php">FAQ</a><a href="/guide.php">User's Guide</a><a href="/blog/">Blog</a></div>
685      <div class="sp-footer-column"><strong>Company</strong><a href="/about.php">About</a><a href="mailto:[email protected]">Support</a></div>
686    </div>
687  </div>
688  <div class="sp-footer-copyright">© 2002–2026 Shirt Pocket. All rights reserved.</div>
689
690</div><!-- /.sp-page -->
691<script src="/js/site.js?v=1785608967"></script>
691
692</body>
693</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.