<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>Ramblings &#8211; Wade Tregaskis</title>
	<atom:link href="https://wadetregaskis.com/categories/ramblings/feed/" rel="self" type="application/rss+xml" />
	<link>https://wadetregaskis.com</link>
	<description></description>
	<lastBuildDate>Fri, 20 Mar 2026 16:51:37 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://wadetregaskis.com/wp-content/uploads/2016/03/Stitch-512x512-1-256x256.png</url>
	<title>Ramblings &#8211; Wade Tregaskis</title>
	<link>https://wadetregaskis.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">226351702</site>	<item>
		<title>6k display comparison</title>
		<link>https://wadetregaskis.com/6k-display-comparison/</link>
					<comments>https://wadetregaskis.com/6k-display-comparison/#comments</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Sat, 07 Mar 2026 23:33:28 +0000</pubDate>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[32U990A-S]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Dell]]></category>
		<category><![CDATA[LG]]></category>
		<category><![CDATA[PA32QCV]]></category>
		<category><![CDATA[Pro Display XDR]]></category>
		<category><![CDATA[U3224KB]]></category>
		<guid isPermaLink="false">https://wadetregaskis.com/?p=8747</guid>

					<description><![CDATA[It&#8217;s very clear that Apple were going for peak brightness above all else. Nobody else has even tried to make a bright 6k display &#8211; in fact, every non-Apple 6k display is outright dim by modern display standards &#8211; they&#8217;re barely brighter than the original 5k display in the 2015 iMac! For the price of&#8230; <a class="read-more-link" href="https://wadetregaskis.com/6k-display-comparison/" data-wpel-link="internal">Read more</a>]]></description>
										<content:encoded><![CDATA[
<p>It&#8217;s very clear that Apple were going for peak brightness above all else. Nobody else has even tried to make a bright 6k display &#8211; in fact, every non-Apple 6k display is outright <em>dim</em> by modern display standards &#8211; they&#8217;re barely brighter than the original 5k display in the 2015 iMac!<sup data-fn="a041ec8b-df15-4e40-85ce-8259991341aa" class="fn"><a href="#a041ec8b-df15-4e40-85ce-8259991341aa" id="a041ec8b-df15-4e40-85ce-8259991341aa-link">1</a></sup></p>



<p>For the price of <em>one</em> Apple Pro Display XDR you can get <em>four</em> Asus ProArt 6k displays.</p>



<p>I suspect there&#8217;s only three 6k panel models in existence &#8211; the one used by Apple, the AUO one used by Asus<sup data-fn="08a8dafe-81b7-4c14-94ec-907400f178dc" class="fn"><a href="#08a8dafe-81b7-4c14-94ec-907400f178dc" id="08a8dafe-81b7-4c14-94ec-907400f178dc-link">2</a></sup>, and the LG one used by LG, Dell, &amp; Kuycon.</p>



<p>It&#8217;s strange to me that Dell haven&#8217;t dropped the price of their 6k display given that LG are offering the same panel in a much svelter package for 15% less (and you can get the very similar Asus display for 45% less!).</p>



<figure class="wp-block-table is-style-stripes"><table class="has-fixed-layout"><thead><tr><th></th><th class="has-text-align-center" data-align="center">Pro Display XDR</th><th class="has-text-align-center" data-align="center"><a href="https://www.lg.com/us/monitors/lg-32u990a-s-ultrafine-monitor" data-wpel-link="external" target="_blank" rel="external noopener">LG UltraFine™evo 6K Nano IPS Black Monitor with Thunderbolt™ 5 (32U990A-S)</a></th><th class="has-text-align-center" data-align="center"><a href="https://www.dell.com/en-us/shop/dell-ultrasharp-32-6k-monitor-u3224kb/apd/210-bhbz/monitors-monitor-accessories" data-wpel-link="external" target="_blank" rel="external noopener">Dell UltraSharp 32 6K (U3224KB)</a></th><th class="has-text-align-center" data-align="center"><a href="https://www.asus.com/us/displays-desktops/monitors/proart/proart-display-6k-pa32qcv/" data-wpel-link="external" target="_blank" rel="external noopener">Asus ProArt Display 6K (PA32QCV)</a></th><th class="has-text-align-center" data-align="center"><a href="https://kuycon.us/monitors/G32P" data-wpel-link="external" target="_blank" rel="external noopener">Kuycon G32P</a></th></tr></thead><tbody><tr><td>Screen diagonal</td><td class="has-text-align-center" data-align="center">81 cm</td><td class="has-text-align-center" data-align="center">80 cm</td><td class="has-text-align-center" data-align="center">80 cm</td><td class="has-text-align-center" data-align="center">80 cm</td><td class="has-text-align-center" data-align="center">80 cm</td></tr><tr><td>Resolution</td><td class="has-text-align-center" data-align="center">6,016 ⨉ 3,384</td><td class="has-text-align-center" data-align="center"><strong>6,144 ⨉ 3,456</strong></td><td class="has-text-align-center" data-align="center"><strong>6,144 ⨉ 3,456</strong></td><td class="has-text-align-center" data-align="center">6,016 ⨉ 3,384</td><td class="has-text-align-center" data-align="center"><strong>6,144 ⨉ 3,456</strong></td></tr><tr><td>Pixel count</td><td class="has-text-align-center" data-align="center">20,358,144</td><td class="has-text-align-center" data-align="center"><strong>21,233,664</strong></td><td class="has-text-align-center" data-align="center"><strong>21,233,664</strong></td><td class="has-text-align-center" data-align="center">20,358,144</td><td class="has-text-align-center" data-align="center"><strong>21,233,664</strong></td></tr><tr><td>Backlight zones</td><td class="has-text-align-center" data-align="center"><strong>576</strong></td><td class="has-text-align-center" data-align="center">1</td><td class="has-text-align-center" data-align="center">1</td><td class="has-text-align-center" data-align="center">1</td><td class="has-text-align-center" data-align="center">1</td></tr><tr><td>Pixels per backlight zone</td><td class="has-text-align-center" data-align="center"><strong>35,344</strong></td><td class="has-text-align-center" data-align="center">21,233,664</td><td class="has-text-align-center" data-align="center">21,233,664</td><td class="has-text-align-center" data-align="center">20,358,144</td><td class="has-text-align-center" data-align="center">21,233,664</td></tr><tr><td>Pixel density</td><td class="has-text-align-center" data-align="center">218</td><td class="has-text-align-center" data-align="center">224</td><td class="has-text-align-center" data-align="center">224</td><td class="has-text-align-center" data-align="center">218</td><td class="has-text-align-center" data-align="center">224</td></tr><tr><td>Contrast ratio</td><td class="has-text-align-center" data-align="center"><strong>1,000,000 : 1</strong></td><td class="has-text-align-center" data-align="center">2,000 : 1 <sup data-fn="27847762-88f0-44ea-ba59-70adf9684471" class="fn"><a href="#27847762-88f0-44ea-ba59-70adf9684471" id="27847762-88f0-44ea-ba59-70adf9684471-link">3</a></sup></td><td class="has-text-align-center" data-align="center">2,000 : 1 <sup data-fn="6a31577c-b563-4fb9-9aca-74b093f68a7b" class="fn"><a href="#6a31577c-b563-4fb9-9aca-74b093f68a7b" id="6a31577c-b563-4fb9-9aca-74b093f68a7b-link">4</a></sup></td><td class="has-text-align-center" data-align="center">1,500 : 1 <sup data-fn="a2835b86-4009-45a0-954b-86fce0627424" class="fn"><a href="#a2835b86-4009-45a0-954b-86fce0627424" id="a2835b86-4009-45a0-954b-86fce0627424-link">5</a></sup></td><td class="has-text-align-center" data-align="center">2,000 : 1</td></tr><tr><td>Peak sustained brightness</td><td class="has-text-align-center" data-align="center"><strong>1,600 (≤ 25℃)</strong></td><td class="has-text-align-center" data-align="center">450<sup data-fn="7cc0e42f-875c-4148-8ce7-17bbf1b8e484" class="fn"><a href="#7cc0e42f-875c-4148-8ce7-17bbf1b8e484" id="7cc0e42f-875c-4148-8ce7-17bbf1b8e484-link">6</a></sup></td><td class="has-text-align-center" data-align="center">450</td><td class="has-text-align-center" data-align="center">450</td><td class="has-text-align-center" data-align="center">500</td></tr><tr><td>Maximum &#8220;black&#8221; luminence</td><td class="has-text-align-center" data-align="center">?</td><td class="has-text-align-center" data-align="center">≤ 0.1<sup data-fn="d231f696-9847-4c87-b843-921d7335e588" class="fn"><a href="#d231f696-9847-4c87-b843-921d7335e588" id="d231f696-9847-4c87-b843-921d7335e588-link">7</a></sup></td><td class="has-text-align-center" data-align="center">≤ 0.1<sup data-fn="ff1bcdce-6782-4a98-af23-0f60b16ebd43" class="fn"><a href="#ff1bcdce-6782-4a98-af23-0f60b16ebd43" id="ff1bcdce-6782-4a98-af23-0f60b16ebd43-link">8</a></sup></td><td class="has-text-align-center" data-align="center">≤ 0.1<sup data-fn="f3bcfdba-aa27-4817-8525-e3eab046df92" class="fn"><a href="#f3bcfdba-aa27-4817-8525-e3eab046df92" id="f3bcfdba-aa27-4817-8525-e3eab046df92-link">9</a></sup></td><td class="has-text-align-center" data-align="center">?</td></tr><tr><td>Bit depth</td><td class="has-text-align-center" data-align="center">10</td><td class="has-text-align-center" data-align="center">10</td><td class="has-text-align-center" data-align="center">10</td><td class="has-text-align-center" data-align="center">10</td><td class="has-text-align-center" data-align="center">10</td></tr><tr><td>Display P3 coverage</td><td class="has-text-align-center" data-align="center"><a href="https://www.pcmag.com/reviews/apple-pro-display-xdr" target="_blank" rel="noreferrer noopener external" data-wpel-link="external">98.7%</a> <sup data-fn="1c5cb586-f38c-4cb7-b885-03d2d3b75f9b" class="fn"><a href="#1c5cb586-f38c-4cb7-b885-03d2d3b75f9b" id="1c5cb586-f38c-4cb7-b885-03d2d3b75f9b-link">10</a></sup></td><td class="has-text-align-center" data-align="center">98%</td><td class="has-text-align-center" data-align="center"><strong>99%</strong></td><td class="has-text-align-center" data-align="center">98%</td><td class="has-text-align-center" data-align="center">99%</td></tr><tr><td>Adobe RGB coverage</td><td class="has-text-align-center" data-align="center"><a href="https://www.pcmag.com/reviews/apple-pro-display-xdr" target="_blank" rel="noreferrer noopener external" data-wpel-link="external">96.7%</a></td><td class="has-text-align-center" data-align="center"><strong>99.5%</strong></td><td class="has-text-align-center" data-align="center">?</td><td class="has-text-align-center" data-align="center">?</td><td class="has-text-align-center" data-align="center">?</td></tr><tr><td>Rec 709 coverage</td><td class="has-text-align-center" data-align="center">?</td><td class="has-text-align-center" data-align="center">?</td><td class="has-text-align-center" data-align="center"><strong>100%</strong></td><td class="has-text-align-center" data-align="center">?</td><td class="has-text-align-center" data-align="center">?</td></tr><tr><td>sRGB coverage</td><td class="has-text-align-center" data-align="center"><a href="https://www.pcmag.com/reviews/apple-pro-display-xdr" target="_blank" rel="noreferrer noopener external" data-wpel-link="external">94.3%</a></td><td class="has-text-align-center" data-align="center">?</td><td class="has-text-align-center" data-align="center"><strong>100%</strong></td><td class="has-text-align-center" data-align="center"><strong>100%</strong></td><td class="has-text-align-center" data-align="center">99%</td></tr><tr><td>Refresh rate</td><td class="has-text-align-center" data-align="center">47.95 – 60.00 Hz</td><td class="has-text-align-center" data-align="center">30 &#8211; 60 Hz</td><td class="has-text-align-center" data-align="center">60 Hz</td><td class="has-text-align-center" data-align="center">60 Hz</td><td class="has-text-align-center" data-align="center">60 Hz</td></tr><tr><td>USB Power Delivery</td><td class="has-text-align-center" data-align="center">96W</td><td class="has-text-align-center" data-align="center">96W</td><td class="has-text-align-center" data-align="center"><strong>140W</strong></td><td class="has-text-align-center" data-align="center">96W</td><td class="has-text-align-center" data-align="center">100W</td></tr><tr><td>Connectivity</td><td class="has-text-align-center" data-align="center">1⨉ Thunderbolt 3<br>3⨉ USB-C (5 Gb/s<sup data-fn="4d2bc830-3dc1-4bc2-aed3-38a307275750" class="fn"><a href="#4d2bc830-3dc1-4bc2-aed3-38a307275750" id="4d2bc830-3dc1-4bc2-aed3-38a307275750-link">11</a></sup>)</td><td class="has-text-align-center" data-align="center"><strong>2⨉ Thunderbolt 5<br></strong>3⨉ USB-C (10 Gb/s, 1 up 2 down)<br>1⨉ DisplayPort 2.1<br>1⨉ HDMI 2.1</td><td class="has-text-align-center" data-align="center">2⨉ Thunderbolt 4<br><strong>5⨉ USB-C (10 Gb/s, 1 up 4 down)<br></strong>1⨉ Mini DisplayPort 2.?<br>1⨉ HDMI 2.?<br><strong>1⨉ 2.5 Gb Ethernet (RJ45)</strong></td><td class="has-text-align-center" data-align="center">2⨉ Thunderbolt 4<br>3⨉ USB-C (5 Gb/s, 1 up 2 down)<br>1x USB-C signal switch (for KVM)<br>1⨉ HDMI 2.1<br>1⨉ 3.5mm stereo audio (out)</td><td class="has-text-align-center" data-align="center">3⨉ USB-C (1 up 2 down)<br>1⨉ DisplayPort 2.1<br>2⨉ HDMI 2.1<br>1⨉ 3.5mm stereo audio (out)</td></tr><tr><td>Built-in KVM</td><td class="has-text-align-center" data-align="center">No</td><td class="has-text-align-center" data-align="center">No<sup data-fn="eb03d0d5-20a2-4377-9a37-dc051226db01" class="fn"><a href="#eb03d0d5-20a2-4377-9a37-dc051226db01" id="eb03d0d5-20a2-4377-9a37-dc051226db01-link">12</a></sup></td><td class="has-text-align-center" data-align="center"><strong>Yes</strong></td><td class="has-text-align-center" data-align="center"><strong>Yes</strong></td><td class="has-text-align-center" data-align="center">No</td></tr><tr><td>Dimensions (excluding stand)</td><td class="has-text-align-center" data-align="center">41.2 ⨉ 71.8 ⨉ 2.7 cm</td><td class="has-text-align-center" data-align="center"><strong>41 ⨉ 72 ⨉ 2.56 cm</strong></td><td class="has-text-align-center" data-align="center">49cm ⨉ 71cm ⨉ 6.6 cm</td><td class="has-text-align-center" data-align="center">41.97 ⨉ 71.42 ⨉ 4.69 cm</td><td class="has-text-align-center" data-align="center">41.5 ⨉ 71.2 ⨉ 2.5 cm</td></tr><tr><td>Naive volume<sup data-fn="a6444b2a-9fb8-4cd2-ae9c-59baab4a2450" class="fn"><a href="#a6444b2a-9fb8-4cd2-ae9c-59baab4a2450" id="a6444b2a-9fb8-4cd2-ae9c-59baab4a2450-link">13</a></sup> (excluding stand)</td><td class="has-text-align-center" data-align="center">7,987 cm³ </td><td class="has-text-align-center" data-align="center">7,559 cm³</td><td class="has-text-align-center" data-align="center">23,069 cm³</td><td class="has-text-align-center" data-align="center">14,058 cm³</td><td class="has-text-align-center" data-align="center"><strong>7,387 cm³</strong></td></tr><tr><td>Weight w/ stand</td><td class="has-text-align-center" data-align="center">11.8 kg</td><td class="has-text-align-center" data-align="center">9.48 kg</td><td class="has-text-align-center" data-align="center">13.29 kg</td><td class="has-text-align-center" data-align="center"><strong>9.3 kg</strong></td><td class="has-text-align-center" data-align="center">?</td></tr><tr><td>Weight w/o stand</td><td class="has-text-align-center" data-align="center">7.48 kg</td><td class="has-text-align-center" data-align="center"><strong>5.99 kg</strong></td><td class="has-text-align-center" data-align="center">8.62 kg</td><td class="has-text-align-center" data-align="center">6.3 kg</td><td class="has-text-align-center" data-align="center">7.5 kg</td></tr><tr><td>Price w/o stand</td><td class="has-text-align-center" data-align="center">$4,999 US</td><td class="has-text-align-center" data-align="center">N/A</td><td class="has-text-align-center" data-align="center">N/A</td><td class="has-text-align-center" data-align="center">N/A</td><td class="has-text-align-center" data-align="center"><strong>$1,799 US</strong></td></tr><tr><td>Price w/ stand</td><td class="has-text-align-center" data-align="center">$5,999 US</td><td class="has-text-align-center" data-align="center">$1,999 US</td><td class="has-text-align-center" data-align="center">$2,350 US</td><td class="has-text-align-center" data-align="center"><strong>$1,299 US</strong></td><td class="has-text-align-center" data-align="center">$1,898 US</td></tr><tr><td>Introduced</td><td class="has-text-align-center" data-align="center">December 2019</td><td class="has-text-align-center" data-align="center">October 2025</td><td class="has-text-align-center" data-align="center">May 2023</td><td class="has-text-align-center" data-align="center">August 2025</td><td class="has-text-align-center" data-align="center">July 2025?</td></tr><tr><td>Discontinued</td><td class="has-text-align-center" data-align="center">March 2026</td><td class="has-text-align-center" data-align="center">&#8211;</td><td class="has-text-align-center" data-align="center">&#8211;</td><td class="has-text-align-center" data-align="center">&#8211;</td><td class="has-text-align-center" data-align="center">&#8211;</td></tr></tbody></table></figure>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p>⚠️ Note on Kuycon: I added the G32P after <a href="https://kevinyank.com" data-wpel-link="external" target="_blank" rel="external noopener">Kevin Yank</a> suggested it.  It&#8217;s a Chinese brand, which I would normally ignore for numerous reasons, <em>but</em> they actually have a functioning, well-designed English website, with a real working order system.  So you can actually buy one in the western world.  But be careful, nonetheless &#8211; there are plenty of anecdotes online about their non-existent customer support.  Also, I&#8217;m not sure it&#8217;s worth a mere $100, vs the LG, to take the risk &#8211; and lose Thunderbolt 5 &amp; KVM functionality &#8211; unless you <em>really</em> want a display that shamelessly rips off the appearance of the Pro Display XDR (but without any of the actual benefits, like HDR support and higher contrast ratio).<br><br>Also, there is a G32X which is similar but inferior &#8211; it has a lower contrast ratio and only 8-bit depth. </p>
</div></div>


<ol class="wp-block-footnotes"><li id="a041ec8b-df15-4e40-85ce-8259991341aa">Apple don&#8217;t appear to have ever published a brightness spec for the original Retina iMac, but <a href="https://www.tomsguide.com/us/apple-imac-5k-retina-2015,review-3115.html" data-wpel-link="external" target="_blank" rel="external noopener">Tom&#8217;s Guide measured their review model at 382 lumens</a>.<br><br>The comparison to the original Retina iMac is apt because it was the <em>first</em> of the retina [desktop] displays, of which these 6k displays are all members.  It also had the exact same pixel density &#8211; 218 PPI &#8211; as the Apple and Asus displays &#8211; i.e. each individual pixel is the exact same size &#8211; so it&#8217;s a very fair point of comparison despite the overall differences in resolution. <a href="#a041ec8b-df15-4e40-85ce-8259991341aa-link" aria-label="Jump to footnote reference 1">↩︎</a></li><li id="08a8dafe-81b7-4c14-94ec-907400f178dc">Speculation is that the Asus uses an AUO panel (the same one that&#8217;s popular with Chinese display manufacturers, because it&#8217;s very cheap).  I wouldn&#8217;t normally give this much weight, except it is interesting that both the Asus and the Chinese displays are frequently reported as making an annoying whining noise at certain brightness levels, and have <em>identical</em> panel specifications, and were released at similar times (notably, many years after the Pro Display XDR). <a href="#08a8dafe-81b7-4c14-94ec-907400f178dc-link" aria-label="Jump to footnote reference 2">↩︎</a></li><li id="27847762-88f0-44ea-ba59-70adf9684471">This is what LG states in the monitor&#8217;s specifications.  Yet, LG also states that this monitor is DisplayHDR 600 certified, which means <a href="https://displayhdr.org/performance-criteria/" data-wpel-link="external" target="_blank" rel="external noopener">it&#8217;s <em>required</em></a> to have a static contrast ratio of at least 8,000 : 1. <a href="#27847762-88f0-44ea-ba59-70adf9684471-link" aria-label="Jump to footnote reference 3">↩︎</a></li><li id="6a31577c-b563-4fb9-9aca-74b093f68a7b">As with the LG, Dell <em>states</em> a 2,000 : 1 contrast ratio even though DisplayHDR 600 conformance requires at least 8,000 : 1. <a href="#6a31577c-b563-4fb9-9aca-74b093f68a7b-link" aria-label="Jump to footnote reference 4">↩︎</a></li><li id="a2835b86-4009-45a0-954b-86fce0627424">Asus <em>states</em> a 1,500 : 1 contrast ratio even though DisplayHDR 600 conformance requires at least 8,000 : 1.  Though they also describe the 1,500 : 1 as &#8220;typical&#8221; while also listing 3,000 : 1 as the maximum. <a href="#a2835b86-4009-45a0-954b-86fce0627424-link" aria-label="Jump to footnote reference 5">↩︎</a></li><li id="7cc0e42f-875c-4148-8ce7-17bbf1b8e484">LG says &#8220;typical&#8221; brightness is 450, with minimum being 360, without explaining the difference &#8211; e.g. whether that&#8217;s for a white patch vs full-screen white, or perhaps depending on ambient temperature.  I&#8217;m choosing to be generous and <em>assume</em> it&#8217;s merely a temperature thing, and not likely to be a concern in a typical indoor environment, because 360 is ridiculously dim.  <a href="#7cc0e42f-875c-4148-8ce7-17bbf1b8e484-link" aria-label="Jump to footnote reference 6">↩︎</a></li><li id="d231f696-9847-4c87-b843-921d7335e588">LG don&#8217;t explicitly state this, but it&#8217;s a requirement of the DisplayHDR 600 conformance. <a href="#d231f696-9847-4c87-b843-921d7335e588-link" aria-label="Jump to footnote reference 7">↩︎</a></li><li id="ff1bcdce-6782-4a98-af23-0f60b16ebd43">Dell don&#8217;t explicitly state this, but it&#8217;s a requirement of the DisplayHDR 600 conformance. <a href="#ff1bcdce-6782-4a98-af23-0f60b16ebd43-link" aria-label="Jump to footnote reference 8">↩︎</a></li><li id="f3bcfdba-aa27-4817-8525-e3eab046df92">Asus don&#8217;t explicitly state this, but it&#8217;s a requirement of the DisplayHDR 600 conformance. <a href="#f3bcfdba-aa27-4817-8525-e3eab046df92-link" aria-label="Jump to footnote reference 9">↩︎</a></li><li id="1c5cb586-f38c-4cb7-b885-03d2d3b75f9b">Apple don&#8217;t state the actual coverage &#8211; just vaguely reference the various colour gamut standards &#8211; so these are the figures as actually tested by PCMag. <a href="#1c5cb586-f38c-4cb7-b885-03d2d3b75f9b-link" aria-label="Jump to footnote reference 10">↩︎</a></li><li id="4d2bc830-3dc1-4bc2-aed3-38a307275750">Only when used with Macs which support DSC (Display Stream Compression), otherwise the USB-C ports are limited to USB 2.0 (400 Mb/s). <a href="#4d2bc830-3dc1-4bc2-aed3-38a307275750-link" aria-label="Jump to footnote reference 11">↩︎</a></li><li id="eb03d0d5-20a2-4377-9a37-dc051226db01">The tech specs claim it has a built-in KVM, but there&#8217;s no mention of that anywhere else in the marketing materials nor the user manual.  It does have a USB hub, which you can <em>manually</em> switch between the Thunderbolt or USB upstream ports by diving into the on-screen display, but there&#8217;s no apparent support for (a) doing this automatically when the input source changes nor (b) switching input sources &amp; USB routing via keypress. <a href="#eb03d0d5-20a2-4377-9a37-dc051226db01-link" aria-label="Jump to footnote reference 12">↩︎</a></li><li id="a6444b2a-9fb8-4cd2-ae9c-59baab4a2450">Meaning the simple product of the three maximal dimensions.  Some of these displays have curved backs, so their actual volume will be substantially less. <a href="#a6444b2a-9fb8-4cd2-ae9c-59baab4a2450-link" aria-label="Jump to footnote reference 13">↩︎</a></li></ol>]]></content:encoded>
					
					<wfw:commentRss>https://wadetregaskis.com/6k-display-comparison/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">8747</post-id>	</item>
		<item>
		<title>Bugs Apple Loves &#038; Apps Apple Hates</title>
		<link>https://wadetregaskis.com/bugs-apple-loves-apps-apple-hates/</link>
					<comments>https://wadetregaskis.com/bugs-apple-loves-apps-apple-hates/#comments</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Mon, 26 Jan 2026 01:48:06 +0000</pubDate>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Bugs!]]></category>
		<category><![CDATA[Sad]]></category>
		<category><![CDATA[Snafu]]></category>
		<guid isPermaLink="false">https://wadetregaskis.com/?p=8717</guid>

					<description><![CDATA[It&#8217;s been a while since I&#8217;ve seen such a pithy and accurate representation of what it&#8217;s like being an Apple Mac &#38; iPhone user these days (well done Nick Hodulik!). The externalities cost estimates might be a little tongue-in-cheek, but honestly, are they all that wrong? One small irritation at the wrong moment can ricochet&#8230; <a class="read-more-link" href="https://wadetregaskis.com/bugs-apple-loves-apps-apple-hates/" data-wpel-link="internal">Read more</a>]]></description>
										<content:encoded><![CDATA[
<p>It&#8217;s been a while since I&#8217;ve seen such <a href="https://www.bugsappleloves.com" data-wpel-link="external" target="_blank" rel="external noopener">a pithy and accurate representation of what it&#8217;s like being an Apple Mac &amp; iPhone user these days</a> (well done <a href="https://github.com/nhod" data-wpel-link="external" target="_blank" rel="external noopener">Nick Hodulik</a>!).</p>



<p>The externalities cost estimates might be a little tongue-in-cheek, but honestly, are they all that wrong?  One small irritation at the wrong moment can ricochet my happy mood off into the doldrums, and Apple&#8217;s products produce a hundred &#8220;small&#8221; irritations every day &#8211; which compound in their irritation when you see them software update after software update, year after year, product after product.  It&#8217;s hard not to take it personally.  Like Apple is <em>deliberately</em> being cruel.</p>



<p><a href="https://ikennd.ac/about/" data-wpel-link="external" target="_blank" rel="external noopener">Daniel Kennett</a> wrote, in <a href="https://ikennd.ac/blog/2026/01/old-man-yells-at-modern-software-design/" data-wpel-link="external" target="_blank" rel="external noopener">his memorial to Aperture</a>, about how the Mac-using experience wasn&#8217;t <em>actually</em> rainbows and perfection even back in whatever you personally feel was the golden age (I&#8217;m with him that circa System 7.1 was glorious, though the early days of Mac OS X were also very special to me).  Which is true &#8211; fire up your favourite old Mac on <a href="https://infinitemac.org" data-wpel-link="external" target="_blank" rel="external noopener">Infinite Mac</a> and see the strength of your rose-tinted nostalgia glasses.</p>



<p><em>But</em>, the big difference is that Apple back then was a relatively tiny company struggling just to survive in a brutal industry dominated by <a href="https://www.ibm.com" data-wpel-link="external" target="_blank" rel="external noopener">soulless</a>, <a href="https://www.microsoft.com" data-wpel-link="external" target="_blank" rel="external noopener">greedy</a> <a href="https://www.intel.com" data-wpel-link="external" target="_blank" rel="external noopener">monsters</a>.</p>



<p>There is a point at which mere indifference or incompetence transitions into negligence, and it&#8217;s <em>long</em> before you become one of the wealthiest companies on the planet with a veritable army of engineers.</p>



<p>Having worked at Apple &#8211; among other big tech companies &#8211; I can say with confidence that there&#8217;s no valid reason why they cannot fix long-standing, <em>infamous</em> bugs.  It&#8217;s.  Not.  That.  Hard.  One half-decent engineer could fix everything listed on Bugs Apple Loves in six months, single-handed.</p>



<p>It&#8217;s not apparent why that doesn&#8217;t happen, but it&#8217;s not that Apple are technically incapable of it, and it cannot be that they&#8217;re unaware, so it must be that they&#8217;re choosing not to.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wadetregaskis.com/bugs-apple-loves-apps-apple-hates/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">8717</post-id>	</item>
		<item>
		<title>We&#8217;ve been in squircle jail before</title>
		<link>https://wadetregaskis.com/weve-been-in-squircle-jail-before/</link>
					<comments>https://wadetregaskis.com/weve-been-in-squircle-jail-before/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Fri, 23 Jan 2026 16:41:36 +0000</pubDate>
				<category><![CDATA[Ancient History]]></category>
		<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[At Ease]]></category>
		<category><![CDATA[infinitemac.org]]></category>
		<category><![CDATA[Launchpad]]></category>
		<category><![CDATA[Mac OS 9]]></category>
		<category><![CDATA[macOS 26 Tahoe]]></category>
		<category><![CDATA[MacOS X 10.7 Lion]]></category>
		<category><![CDATA[squircle jail]]></category>
		<category><![CDATA[System 7.1]]></category>
		<guid isPermaLink="false">https://wadetregaskis.com/?p=8696</guid>

					<description><![CDATA[I&#8217;m not using macOS 26 Tahoe yet &#8211; hopefully I&#8217;ll never have to; 🤞 the next version of macOS is less of a dumpster fire, and I&#8217;ll just skip Tahoe entirely. But, looking over other people&#8217;s shoulders, and listening to the groans and cries, I&#8217;m struck by something. We&#8217;ve been here before. Icon jail, I&#8230; <a class="read-more-link" href="https://wadetregaskis.com/weve-been-in-squircle-jail-before/" data-wpel-link="internal">Read more</a>]]></description>
										<content:encoded><![CDATA[
<p>I&#8217;m not using macOS 26 Tahoe yet &#8211; hopefully I&#8217;ll never have to; 🤞 the next version of macOS is less of a dumpster fire, and I&#8217;ll just skip Tahoe entirely.</p>



<p>But, looking over other people&#8217;s shoulders, and listening to the groans and cries, I&#8217;m struck by something.  We&#8217;ve been here before.  Icon jail, I mean (&#8220;Squircle&#8221; jail specifically in Tahoe&#8217;s case):</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img fetchpriority="high" decoding="async" width="701" height="346" src="https://wadetregaskis.com/wp-content/uploads/2026/01/macos-26-tahoe-squircle-jail.webp" alt="Screenshot from macOS 26 Tahoe showing various application icons, many of them stuck in squircle jail" class="wp-image-8697" srcset="https://wadetregaskis.com/wp-content/uploads/2026/01/macos-26-tahoe-squircle-jail.webp 701w, https://wadetregaskis.com/wp-content/uploads/2026/01/macos-26-tahoe-squircle-jail-256x126.webp 256w, https://wadetregaskis.com/wp-content/uploads/2026/01/macos-26-tahoe-squircle-jail@2x.webp 1402w, https://wadetregaskis.com/wp-content/uploads/2026/01/macos-26-tahoe-squircle-jail-256x126@2x.webp 512w" sizes="(max-width: 701px) 100vw, 701px" /><figcaption class="wp-element-caption">Screenshot courtesy of <a href="https://iconfactory.world/@Iconfactory/114659727480043761" data-wpel-link="external" target="_blank" rel="external noopener">the Iconfactory</a>.</figcaption></figure>
</div>


<p>This isn&#8217;t the first time Apple&#8217;s put icons in grey jail.  Mac OS 9 already did this:</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="640" height="480" src="https://wadetregaskis.com/wp-content/uploads/2026/01/mac-os-9-with-22view…-as-buttons22-enabled-in-the-finder-1.webp" alt="" class="wp-image-8702" srcset="https://wadetregaskis.com/wp-content/uploads/2026/01/mac-os-9-with-22view…-as-buttons22-enabled-in-the-finder-1.webp 640w, https://wadetregaskis.com/wp-content/uploads/2026/01/mac-os-9-with-22view…-as-buttons22-enabled-in-the-finder-1-256x192.webp 256w, https://wadetregaskis.com/wp-content/uploads/2026/01/mac-os-9-with-22view…-as-buttons22-enabled-in-the-finder-1-256x192@2x.webp 512w" sizes="(max-width: 640px) 100vw, 640px" /><figcaption class="wp-element-caption">Screenshot taken in <a href="https://infinitemac.org" data-wpel-link="external" target="_blank" rel="external noopener">https://infinitemac.org</a>&#8216;s Mac OS 9 emulator</figcaption></figure>
</div>


<p>This mode made the icons activate with a single click rather than a double-click.  It was a window-specific (and desktop-specific) setting.  I vaguely recall it being sold as a simpler, more efficient way of using the Finder &#8211; fewer clicks!  It did not catch on, though possibly there were some fans.  I vaguely recall encountering Macs in the wild that had this mode enabled.</p>



<p>It wasn&#8217;t new in Mac OS 9 either, really &#8211; it was actually introduced with <a href="https://en.wikipedia.org/wiki/At_Ease" data-wpel-link="external" target="_blank" rel="external noopener">At Ease</a> circa System 7.1:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="563" height="404" src="https://wadetregaskis.com/wp-content/uploads/2026/01/at-ease.webp" alt="" class="wp-image-8703" srcset="https://wadetregaskis.com/wp-content/uploads/2026/01/at-ease.webp 563w, https://wadetregaskis.com/wp-content/uploads/2026/01/at-ease-256x184.webp 256w, https://wadetregaskis.com/wp-content/uploads/2026/01/at-ease-256x184@2x.webp 512w" sizes="(max-width: 563px) 100vw, 563px" /><figcaption class="wp-element-caption">Screenshot courtesy of <a href="https://porn.quiteajolt.com/about-me/" data-wpel-link="external" target="_blank" rel="external noopener">‘Ili Butterfield</a> via <a href="https://porn.quiteajolt.com/2009/03/16/old-mac-cds-2-the-macintosh-demo-applications-cd-version-11/" data-wpel-link="external" target="_blank" rel="external noopener">his website</a>.</figcaption></figure>
</div>


<p>In a way, Apple is just returning to its roots; <em>continuing</em> to try to dumb-down the Mac.</p>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p>Incidentally, <a href="https://notebooks.com/2011/07/22/how-to-get-the-most-out-of-lions-launchpad/" data-wpel-link="external" target="_blank" rel="external noopener">Launchpad</a>, introduced in MacOS X 10.7 Lion in 2011, was also very similar to At Ease&#8217;s app launcher (by way of iOS, of course).  Ironically it&#8217;s <em>removed</em> in macOS 26 Tahoe (in favour of Spotlight, which would be fine <em>if</em> Spotlight ever worked reliably) although <a href="https://www.macobserver.com/news/launchpad-is-gone-in-macos-26-but-you-can-still-restore-it/" data-wpel-link="external" target="_blank" rel="external noopener">it is possible to resurrect it</a>.</p>
</div></div>



<p>Of course, a big difference between all these prior incarnations and macOS 26 Tahoe&#8217;s is that previously the user controlled it, and could turn it off.  You didn&#8217;t have to install At Ease at all.  Mac OS 9 didn&#8217;t use the Buttons view mode by default, you had to enable it, and anyone could disable it again at any time.</p>



<p>That&#8217;s where today&#8217;s Apple <em>actually</em> differs from yesteryear&#8217;s &#8211; they used to respect the user, and now they don&#8217;t.</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://wadetregaskis.com/weve-been-in-squircle-jail-before/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<media:content url="https://wadetregaskis.com/wp-content/uploads/2026/01/macos-26-tahoe-squircle-jail.webp" medium="image" />
<post-id xmlns="com-wordpress:feed-additions:1">8696</post-id>	</item>
		<item>
		<title>Image Capture import failing with error -9934</title>
		<link>https://wadetregaskis.com/image-capture-import-failing-with-error-9934/</link>
					<comments>https://wadetregaskis.com/image-capture-import-failing-with-error-9934/#comments</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Sun, 07 Dec 2025 19:16:27 +0000</pubDate>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[-9934]]></category>
		<category><![CDATA[com.apple.ImageCaptureCore]]></category>
		<category><![CDATA[DNG]]></category>
		<category><![CDATA[HEIC]]></category>
		<category><![CDATA[Image Capture]]></category>
		<category><![CDATA[iPhone]]></category>
		<guid isPermaLink="false">https://wadetregaskis.com/?p=8601</guid>

					<description><![CDATA[The error &#8220;com.apple.ImageCaptureCore error -9934&#8221; during import (e.g. from an iPhone) can be caused by a lot of things, according to the Internet: Basically it seems like this &#8220;-9934&#8221; error is a catch-all for any kind of I/O error. Good job, Apple, in providing useful information to your users. But add to the aforementioned list&#8230; <a class="read-more-link" href="https://wadetregaskis.com/image-capture-import-failing-with-error-9934/" data-wpel-link="internal">Read more</a>]]></description>
										<content:encoded><![CDATA[
<p>The error &#8220;com.apple.ImageCaptureCore error -9934&#8221; during import (e.g. from an iPhone) can be caused by a lot of things, according to the Internet:</p>



<ul class="wp-block-list">
<li>Permission errors with the destination folder (e.g. not writable by the current user).</li>



<li>Conversion failures if you have the iPhone set to export images in &#8220;compatible&#8221; formats rather than their originals<sup data-fn="ecfdc392-955d-4750-ac97-c991a66441c7" class="fn"><a href="#ecfdc392-955d-4750-ac97-c991a66441c7" id="ecfdc392-955d-4750-ac97-c991a66441c7-link">1</a></sup></li>



<li>Unsupported image formats (e.g. HEIC) on very old versions of macOS (macOS 10.12 Sierra and earlier).</li>



<li>The destination folder not existing.</li>



<li>Etc.</li>
</ul>



<p>Basically it seems like this &#8220;-9934&#8221; error is a catch-all for <em>any</em> kind of I/O error.  Good job, Apple, in providing useful information to your users.</p>



<p>But add to the aforementioned list one other possibility, that I didn&#8217;t see mentioned <em>anywhere</em>:  the destination volume is full.</p>



<p>I&#8217;ve been hitting this error message in Image Capture sporadically for months and been baffled by it &#8211; especially since it seemed to occur for seemingly random sets of images and videos, that were <em>sometimes</em> consistent between attempts and sometimes changed unpredictably.  Which is of course the result of the destination volume being perpetually close to full but varying slightly over time as random bits &amp; pieces are added or removed from it.</p>



<p>It&#8217;s especially tricky because the destination volume won&#8217;t typically show as <em>actually</em> full, in the Finder &#8211; it could have virtually any amount of space left, even hundreds of gigabytes, because the particular image or video that hits the limit could be huge, and Image Capture either tries to pre-allocate the entire file&#8217;s space up front (failing immediately if there&#8217;s insufficient space) or retroactively zeroes out the file if it encounters a write error.  Either way, it leaves a bunch of zero-byte files (the failed transfers) behind, rather than incompletely-written ones, further hiding the fact that it ran out out of disk space.</p>


<ol class="wp-block-footnotes"><li id="ecfdc392-955d-4750-ac97-c991a66441c7">Please don&#8217;t ever do that.  It means transcoding your original images from DNG or HEIC into JPEGs, increasing their file size and/or reducing their quality in the process.  Don&#8217;t do it.  DNG and HEIC are old formats that are widely supported &#8211; not just on Apple devices, but Windows as well (and probably most Linux distros). <a href="#ecfdc392-955d-4750-ac97-c991a66441c7-link" aria-label="Jump to footnote reference 1">↩︎</a></li></ol>]]></content:encoded>
					
					<wfw:commentRss>https://wadetregaskis.com/image-capture-import-failing-with-error-9934/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			<media:content url="https://wadetregaskis.com/wp-content/uploads/2025/12/image-capture-error-dialog-com-apple--imagecapturecore-error-9934.webp" medium="image" />
<post-id xmlns="com-wordpress:feed-additions:1">8601</post-id>	</item>
		<item>
		<title>Backblaze seemingly does not support files greater than 1 TB</title>
		<link>https://wadetregaskis.com/backblaze-seemingly-does-not-support-files-greater-than-1-tb/</link>
					<comments>https://wadetregaskis.com/backblaze-seemingly-does-not-support-files-greater-than-1-tb/#comments</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Thu, 02 Jan 2025 23:27:59 +0000</pubDate>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[Backblaze]]></category>
		<category><![CDATA[Broken by design]]></category>
		<category><![CDATA[Sad]]></category>
		<category><![CDATA[Undocumented]]></category>
		<guid isPermaLink="false">https://wadetregaskis.com/?p=8475</guid>

					<description><![CDATA[For nearly a month now, Backblaze has been fixated on a particular file of mine, that happens to be over 1 TB in size. Backblaze seemingly uploads it completely, but then on the next backup it uploads it again, even though it has not changed (in eight years!). Ad infinitum. Using their Explainfile tool to&#8230; <a class="read-more-link" href="https://wadetregaskis.com/backblaze-seemingly-does-not-support-files-greater-than-1-tb/" data-wpel-link="internal">Read more</a>]]></description>
										<content:encoded><![CDATA[
<p>For nearly a month now, Backblaze has been fixated on a particular file of mine, that happens to be over 1 TB in size.  Backblaze seemingly uploads it completely, but then on the next backup it uploads it again, even though it has not changed (in eight years!).  Ad infinitum.</p>



<p>Using their <a href="https://www.backblaze.com/computer-backup/docs/use-explainfile-to-diagnose-backup-issues-mac" data-wpel-link="external" target="_blank" rel="external noopener">Explainfile</a> tool to dig into the log files, the clue seems to be:</p>



<pre class="wp-block-preformatted">  - line 288 - 2024-12-16 16:16:17 0000000646 - ERROR: UpdateBzDoneRegardingFlsToBeExp - Z_B_TOO_MANY_CHUNKS bz_done_ line chunk related, numBytesInLargeFile=1099512156951, totNumChunks=104858, bz_done_line_is: 5	! …<br>  - line 522 - 2024-12-16 16:18:46 0000000646 - ERROR - bz_done_ INCONSISTENCY_FOUND - 20241216161846 - BadBadBadChunkRecord hexAsciiVal=0x78 - AfterBzdoneLargeFileAnalysis: chunkSeq=100001, highestChunkSeqSeen=104857, fileIdOfLargeFile=00000000002c53cd, dateTimeOfLargeFile=20231217091843, XYXBXXX_FILE_NAME: …</pre>



<p>Admittedly I&#8217;m guessing somewhat, since that&#8217;s a rather reader-hostile log message, but the combination of the <code><strong>Z_B_TOO_MANY_CHUNKS</strong></code> error mnemonic and <code><strong>chunkSeq=100001</strong></code> (because of its proximity to the arbitrary round number 100,000) strongly suggests that Backblaze is imposing a 100,000 chunk limit. Since <a href="https://www.backblaze.com/computer-backup/docs/file-sizes" data-wpel-link="external" target="_blank" rel="external noopener">chunks are 10 MB each</a>, that&#8217;s exactly 1 TB.</p>



<p>This is unequivocally at odds with what they claim repeatedly on their website, on pages like <a href="https://www.backblaze.com/cloud-backup/features/what-gets-backed-up" data-wpel-link="external" target="_blank" rel="external noopener">What Backblaze Backs Up</a> and <a href="https://www.backblaze.com/computer-backup/docs/file-sizes" data-wpel-link="external" target="_blank" rel="external noopener">File Sizes</a>.</p>



<p>It&#8217;s not clear to me why this is suddenly a problem; is this a newly-imposed limit?  It&#8217;s possible that a month ago I removed some exclusion on the file, but I don&#8217;t remembering doing that and I can see no reason why I would have excluded it to begin with.  If it is newly imposed, that would imply it&#8217;s also <em>retroactive</em> &#8211; that Backblaze actually <em>deleted</em> the existing backup of the file from their servers, thus causing the client app to try uploading it again.</p>



<p>I reached out to their technical support, of course, but thus far have only received mindless responses &#8211; restart your computer, reinstall Backblaze, etc.</p>



<h3 class="wp-block-heading">Update</h3>



<p>I received no further response from Backblaze&#8217;s technical support.  They asked me to send them the log files, which I did on January 2nd, 2025, and they never responded again.</p>



<p>As of this update (February 4th 2025) their website still falsely advertises support for files of any size.</p>



<h3 class="wp-block-heading">Addendum</h3>



<p>I was surprised to see that many folks <a href="https://news.ycombinator.com/item?id=42930786" data-wpel-link="external" target="_blank" rel="external noopener">on HackerNews</a> were surprised by the idea of a 1 TiB file.  I certainly agree that&#8217;s large, but it doesn&#8217;t seem unusual or inexplicable to me.  In my case, this particular &#8220;problem&#8221; file is an encrypted, compressed disk image of the boot drive of a prior computer, that I saved when I upgraded to my current computer.</p>



<p>It&#8217;s true that I could <em>probably</em> throw it out at this point &#8211; it was just a precaution in case I forgot to migrate something over, so now (eight years later) it seems that either I made no such mistake or whatever I forgot to migrate doesn&#8217;t matter anyway.  For now I&#8217;ve just manually excluded it from the backup, to work around Backblaze&#8217;s bugs.</p>



<p>There are other cases in which I&#8217;ve had files over 1 TiB, though &#8211; e.g. video files:</p>



<ul class="wp-block-list">
<li>With some cameras and recording modes (e.g. documentarian, interviews) it&#8217;s in principle easy to exceed 1 TiB per file.  e.g. the <a href="https://onlinemanual.nikonimglib.com/z9/en/06_video_recording_02.html#:~:text=Approx.%205780%C2%A0Mbps" data-wpel-link="external" target="_blank" rel="external noopener">Nikon Z9 &amp; Z8 record around 700 MB/s for 8k60 N-RAW</a>, which is about 24 minutes per TiB.<br><br>Note that I don&#8217;t recall if I personally have ever actually exceeded 1 TiB this way.  I mention it mainly for illustration.  It&#8217;s also possible that the Z9 &amp; Z8 shard large recordings into multiple files (I don&#8217;t recall seeing this in years &#8211; not since the 4 GiB per-file limit of cameras a decade ago &#8211; but perhaps I&#8217;ve just not had a single recording large enough).</li>



<li>Usually (for me) it&#8217;s output files that are largest, since they can combine many clips.  I use Final Cut Pro and its video compression capabilities aren&#8217;t great, so I export essentially lossless ProRes and then use ffmpeg or Handbrake for the real compression.  <a href="https://www.apple.com/final-cut-pro/docs/Apple_ProRes.pdf#page=21" data-wpel-link="external" target="_blank" rel="external noopener">ProRes 422 HQ is nearly a gigabyte per second for 8k60</a>, so it takes less than twenty minutes of video to exceed 1 TiB.  Fortunately these large intermediaries only have to live as long as the final compression takes (though that can be days, especially with the latest formats like AV1).</li>
</ul>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://wadetregaskis.com/backblaze-seemingly-does-not-support-files-greater-than-1-tb/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			<media:content url="https://wadetregaskis.com/wp-content/uploads/2025/01/backblazes-marketing-claims.avif" medium="image" />
<post-id xmlns="com-wordpress:feed-additions:1">8475</post-id>	</item>
		<item>
		<title>Sync Now</title>
		<link>https://wadetregaskis.com/sync-now/</link>
					<comments>https://wadetregaskis.com/sync-now/#comments</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Fri, 26 Jul 2024 22:05:22 +0000</pubDate>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[Happy]]></category>
		<category><![CDATA[iMessage]]></category>
		<category><![CDATA[Sync Now]]></category>
		<guid isPermaLink="false">https://wadetregaskis.com/?p=8317</guid>

					<description><![CDATA[I&#8217;m very glad Apple&#8217;s Messages team somehow snuck this one little button past the corporate bureaucracy (Apple infamously likes to pretend their software is infallible and therefore doesn&#8217;t need things like useful error messages or rectification tools). It&#8217;s of course not great that iMessages don&#8217;t reliably sync between Apple devices to begin with, but at&#8230; <a class="read-more-link" href="https://wadetregaskis.com/sync-now/" data-wpel-link="internal">Read more</a>]]></description>
										<content:encoded><![CDATA[<div class="wp-block-image">
<figure class="alignright size-full"><img loading="lazy" decoding="async" width="262" height="148" src="https://wadetregaskis.com/wp-content/uploads/2024/07/sync-now-love.avif" alt="A macOS button labelled &quot;Sync Now&quot; surrounded by love hearts." class="wp-image-8316" srcset="https://wadetregaskis.com/wp-content/uploads/2024/07/sync-now-love.avif 262w, https://wadetregaskis.com/wp-content/uploads/2024/07/sync-now-love-256x145.avif 256w, https://wadetregaskis.com/wp-content/uploads/2024/07/sync-now-love@2x.avif 524w" sizes="auto, (max-width: 262px) 100vw, 262px" /></figure>
</div>


<p>I&#8217;m very glad Apple&#8217;s Messages team somehow snuck this one little button past the corporate bureaucracy (Apple infamously likes to pretend their software is infallible and therefore doesn&#8217;t need things like useful error messages or rectification tools).</p>



<p>It&#8217;s of course not great that iMessages don&#8217;t reliably sync between Apple devices to begin with, but at least there&#8217;s a simple way to fix that when it occurs.</p>



<p>In case you&#8217;re unfamiliar with it, this button is in the &#8220;iMessage&#8221; tab of the Messages Settings &#8211; although placed dangerously close to the &#8220;Sign Out&#8221; button. 🤨</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wadetregaskis.com/sync-now/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			<media:content url="https://wadetregaskis.com/wp-content/uploads/2024/07/sync-now-love.avif" medium="image" />
<post-id xmlns="com-wordpress:feed-additions:1">8317</post-id>	</item>
		<item>
		<title>Bipolar customer support</title>
		<link>https://wadetregaskis.com/bipolar-customer-support/</link>
					<comments>https://wadetregaskis.com/bipolar-customer-support/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Thu, 18 Jul 2024 22:37:30 +0000</pubDate>
				<category><![CDATA[Photography]]></category>
		<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[Flickr]]></category>
		<category><![CDATA[Lightroom]]></category>
		<category><![CDATA[Photo Upload for Lightroom]]></category>
		<category><![CDATA[Sad]]></category>
		<category><![CDATA[Snafu]]></category>
		<guid isPermaLink="false">https://wadetregaskis.com/?p=8297</guid>

					<description><![CDATA[Consider these two examples involving Flickr, that occurred within just one day of each other. Nice gal Amanda I submitted the following feedback, not really expecting much of it. In fact, I fully expected some useless, boilerplate response that completely ignored the point and directed me to the upload requirements page (despite it being the&#8230; <a class="read-more-link" href="https://wadetregaskis.com/bipolar-customer-support/" data-wpel-link="internal">Read more</a>]]></description>
										<content:encoded><![CDATA[
<p>Consider these two examples involving Flickr, that occurred within just one day of each other.</p>



<h2 class="wp-block-heading">Nice gal Amanda</h2>



<p>I submitted the following feedback, not really expecting much of it.  In fact, I fully expected some useless, boilerplate response that completely ignored the point and directed me to the upload requirements page (despite it being the very first thing I myself pointed to) or was nothing but mail-merge platitudes.</p>



<p>And in retrospect I could have phrased this more respectfully, too.  So I wasn&#8217;t even going in as a great customer.</p>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p>Per&nbsp;<a href="https://www.flickrhelp.com/hc/en-us/articles/4404079649300-Flickr-upload-requirements" data-wpel-link="external" target="_blank" rel="external noopener">https://www.flickrhelp.com/hc/en-us/articles/4404079649300-Flickr-upload-requirements</a>, Flickr still doesn&#8217;t support modern, more efficient formats like HEIF, WebP, and AVIF (for images).</p>



<p>It&#8217;s also unclear what video codecs are actually supported, since they&#8217;re not specified &#8211; merely container formats. &nbsp;e.g. does AV1 work? &nbsp;Or even just HEVC?</p>



<p>Being relegated to JPEG makes my files way larger and therefore uploads take a lot longer, and also precludes use of high-quality images featuring e.g. greater than 8-bit depths and HDR support.</p>



<p>(I realise TIFF is nominally supported and does at least offer 16-bit support, but the article notes that it&#8217;s degraded to JPEG anyway on the server, plus even compressed TIFFs are still huge and particularly slow to upload)</p>



<p>On your end, you&#8217;d save a lot of storage space if you supported and prioritised modern, more efficient formats &#8211; not to mention bandwidth costs (every browser of note supports WebP &amp; AVIF at the very least, so you could even transcode from older formats).</p>
</div></div>



<p>What I got surprised me greatly, in the best way:</p>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p>Hi Wade,<br><br>Thank you for reaching out to us! My name is Amanda and I&#8217;m happy to help you.<br><br>I understand you would like to see more photo formats accepted on Flickr (namely: HEIF/HEIC, WebP, AVIF). I&#8217;ve passed a feature suggestion along to our product development team for review regarding this. Hopefully, being able to offer support for these newer file formats is something we can address in a future site update.<br><br>While I do not have a timeframe for if/when this would be put into effect, they are aware that this is something that members of Flickr would like to see as an option.<br><br>You also mentioned some specific video codecs. As these aren&#8217;t listed in that Help Center article you linked, I&#8217;m double checking with our team to see if these are supported or not. As soon as I hear back from them, I&#8217;ll follow up and let you know here.<br><br>In the meantime, please let me know if you have any other questions or suggestions. I&#8217;ll keep an eye out for your response!</p>



<p>Warmly,</p>



<p>Amanda<br>Flickr Support</p>
</div></div>



<p>Holy shit.  A humane response from a real human.  Better yet, a couple of hours later that was followed by (unprompted by me):</p>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p>Hi Wade,<br><br>Thank you for your patience! I checked with our team and it appears AV1 and HEVC are not currently supported. I have added these along to the other formats you had already asked about in our feedback to the Product Development team.&nbsp;<br><br>If there is anything else I can help with, please do feel free to reach out!</p>



<p>Warmly,</p>



<p>Amanda<br>Flickr Support</p>
</div></div>



<p>Even though these responses made no conclusive promises (regarding support for these file formats), I was thrilled.  Beyond the pleasant tone and clear demonstration that Amanda actually read and comprehended my feedback, just knowing that my feedback <em>actually</em> got to the intended recipients (the dev team) is heartening; it made me feel <em>good</em> about choosing to use Flickr for all these years.</p>



<p>But then…</p>



<h2 class="wp-block-heading">Bad guy Marc</h2>



<p>Coincidentally, while Amanda was getting back to me I ran into a bug in Flickr&#8217;s file upload API.  It was apparent from the logs that Flickr was the cause of the issue, but nonetheless I took the time to first confirm that with the <a href="https://www.newpproducts.com/lightroom-plug-ins/photo-upload/" data-wpel-link="external" target="_blank" rel="external noopener">Photo Upload</a> plug-in&#8217;s author.  Then, I submitted the bug report to Flickr:</p>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p>When trying to upload some (but not all) files, the upload ostensibly fails &#8211; it hangs for a while after the transfer is complete before finally concluding with a 504 error from CloudFront. &nbsp;e.g.:</p>



<details class="wp-block-details is-layout-flow wp-block-details-is-layout-flow"><summary>Log</summary>
<pre class="wp-block-preformatted">HTTP/1.1 504 Gateway Time-out
Content-Type: text/html
Content-Length: 1033
Connection: keep-alive
Server: CloudFront
Date: Thu, 18 Jul 2024 01:42:43 GMT
X-Cache: Error from cloudfront
Via: 1.1 CENSORED.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: CENSORED
X-Amz-Cf-Id: CENSORED

&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
&lt;HTML>&lt;HEAD>&lt;META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
&lt;TITLE>ERROR: The request could not be satisfied&lt;/TITLE>
&lt;/HEAD>&lt;BODY>
&lt;H1>504 ERROR&lt;/H1>
&lt;H2>The request could not be satisfied.&lt;/H2>
&lt;HR noshade size="1px">
CloudFront attempted to establish a connection with the origin, but either the attempt failed or the origin closed the connection.
We can't connect to the server for this app or website at this time. There might be too much traffic or a configuration error. Try again later, or contact the app or website owner.
&lt;BR clear="all">
If you provide content to customers through CloudFront, you can find steps to troubleshoot and help prevent this error by reviewing the CloudFront documentation.
&lt;BR clear="all">
&lt;HR noshade size="1px">
&lt;PRE>
Generated by cloudfront (CloudFront)
Request ID: CENSORED
&lt;/PRE>
&lt;ADDRESS>
&lt;/ADDRESS>
&lt;/BODY>&lt;/HTML></pre>
</details>



<p></p>



<p>This happens every time.</p>



<details class="wp-block-details is-layout-flow wp-block-details-is-layout-flow"><summary>Log from curl</summary>
<pre class="wp-block-preformatted">* Host up.flickr.com:443 was resolved.<br>* IPv6: (none)<br>* IPv4: 13.227.78.140<br>*   Trying 13.227.78.140:443...<br>* Connected to up.flickr.com (13.227.78.140) port 443<br>* ALPN: curl offers http/1.1<br>* (304) (OUT), TLS handshake, Client hello (1):<br>} [315 bytes data]<br>* (304) (IN), TLS handshake, Server hello (2):<br>{ [122 bytes data]<br>* (304) (IN), TLS handshake, Unknown (8):<br>{ [25 bytes data]<br>* (304) (IN), TLS handshake, Certificate (11):<br>{ [4967 bytes data]<br>* (304) (IN), TLS handshake, CERT verify (15):<br>{ [264 bytes data]<br>* (304) (IN), TLS handshake, Finished (20):<br>{ [36 bytes data]<br>* (304) (OUT), TLS handshake, Finished (20):<br>} [36 bytes data]<br>* SSL connection using TLSv1.3 / AEAD-AES128-GCM-SHA256 / [blank] / UNDEF<br>* ALPN: server accepted http/1.1<br>* Server certificate:<br>*  subject: CN=flickr.com<br>*  start date: Feb  5 00:00:00 2024 GMT<br>*  expire date: Mar  4 23:59:59 2025 GMT<br>*  issuer: C=US; O=Amazon; CN=Amazon RSA 2048 M02<br>*  SSL certificate verify ok.<br>* using HTTP/1.x<br>> POST /services/upload/ HTTP/1.1<br>> Host: up.flickr.com<br>> User-Agent: curl/8.6.0<br>> Accept: */*<br>> Authorization: OAuth oauth_signature="CENSORED",oauth_token="CENSORED",oauth_version="1.0",oauth_nonce="CENSORED",oauth_timestamp="CENSORED",oauth_signature_method="HMAC-SHA1",oauth_consumer_key="CENSORED"<br>> Content-Length: 123113221<br>> Content-Type: multipart/form-data; boundary=------------------------cbLPLbBocYE2oLsFDbSmbX<br>> <br>} [233 bytes data]<br><br>  0  117M    0     0    0  128k      0   453k  0:04:25 --:--:--  0:04:25  452k<br>  5  117M    0     0    5 6848k      0  5670k  0:00:21  0:00:01  0:00:20 5669k<br>  6  117M    0     0    6 7360k      0  3068k  0:00:39  0:00:02  0:00:37 3068k<br>  6  117M    0     0    6 7360k      0  2165k  0:00:55  0:00:03  0:00:52 2165k<br>  6  117M    0     0    6 7488k      0  1780k  0:01:07  0:00:04  0:01:03 1780k<br>  7  117M    0     0    7 9280k      0  1773k  0:01:07  0:00:05  0:01:02 1848k<br>  9  117M    0     0    9 11.5M      0  1906k  0:01:03  0:00:06  0:00:57  997k<br> 12  117M    0     0   12 14.3M      0  2025k  0:00:59  0:00:07  0:00:52 1508k<br> 14  117M    0     0   14 17.4M      0  2175k  0:00:55  0:00:08  0:00:47 2182k<br> 17  117M    0     0   17 20.4M      0  2270k  0:00:52  0:00:09  0:00:43 2682k<br> 19  117M    0     0   19 22.8M      0  2295k  0:00:52  0:00:10  0:00:42 2843k<br> 21  117M    0     0   21 24.9M      0  2274k  0:00:52  0:00:11  0:00:41 2730k<br> 23  117M    0     0   23 27.1M      0  2279k  0:00:52  0:00:12  0:00:40 2648k<br> 25  117M    0     0   25 30.0M      0  2324k  0:00:51  0:00:13  0:00:38 2567k<br> 27  117M    0     0   27 32.6M      0  2342k  0:00:51  0:00:14  0:00:37 2472k<br> 29  117M    0     0   29 34.9M      0  2350k  0:00:51  0:00:15  0:00:36 2462k<br> 32  117M    0     0   32 38.0M      0  2399k  0:00:50  0:00:16  0:00:34 2679k<br> 34  117M    0     0   34 40.5M      0  2403k  0:00:50  0:00:17  0:00:33 2705k<br> 36  117M    0     0   36 42.6M      0  2400k  0:00:50  0:00:18  0:00:32 2601k<br> 38  117M    0     0   38 45.6M      0  2432k  0:00:49  0:00:19  0:00:30 2691k<br> 41  117M    0     0   41 48.5M      0  2456k  0:00:48  0:00:20  0:00:28 2780k<br> 43  117M    0     0   43 51.5M      0  2487k  0:00:48  0:00:21  0:00:27 2772k<br> 46  117M    0     0   46 54.2M      0  2499k  0:00:48  0:00:22  0:00:26 2830k<br> 48  117M    0     0   48 56.5M      0  2489k  0:00:48  0:00:23  0:00:25 2810k<br> 50  117M    0     0   50 59.2M      0  2504k  0:00:48  0:00:24  0:00:24 2782k<br> 52  117M    0     0   52 62.1M      0  2526k  0:00:47  0:00:25  0:00:22 2811k<br> 55  117M    0     0   55 65.1M      0  2547k  0:00:47  0:00:26  0:00:21 2803k<br> 58  117M    0     0   58 68.8M      0  2589k  0:00:46  0:00:27  0:00:19 2990k<br> 61  117M    0     0   61 72.1M      0  2617k  0:00:45  0:00:28  0:00:17 3221k<br> 62  117M    0     0   62 73.8M      0  2556k  0:00:47  0:00:29  0:00:18 2791k<br> 65  117M    0     0   65 77.3M      0  2620k  0:00:45  0:00:30  0:00:15 3091k<br> 67  117M    0     0   67 79.5M      0  2600k  0:00:46  0:00:31  0:00:15 2873k<br> 71  117M    0     0   71 83.3M      0  2651k  0:00:45  0:00:32  0:00:13 2987k<br> 72  117M    0     0   72 85.5M      0  2638k  0:00:45  0:00:33  0:00:12 2753k<br> 73  117M    0     0   73 85.7M      0  2557k  0:00:47  0:00:34  0:00:13 2565k<br> 73  117M    0     0   73 85.8M      0  2494k  0:00:48  0:00:35  0:00:13 1728k<br> 76  117M    0     0   76 89.3M      0  2506k  0:00:47  0:00:36  0:00:11 1934k<br> 76  117M    0     0   76 89.3M      0  2439k  0:00:49  0:00:37  0:00:12 1150k<br> 76  117M    0     0   76 89.3M      0  2375k  0:00:50  0:00:38  0:00:12  726k<br> 76  117M    0     0   76 89.3M      0  2315k  0:00:51  0:00:39  0:00:12  705k<br> 76  117M    0     0   76 89.3M      0  2258k  0:00:53  0:00:40  0:00:13  680k<br> 76  117M    0     0   76 89.3M      0  2203k  0:00:54  0:00:41  0:00:13     0<br> 76  117M    0     0   76 89.3M      0  2151k  0:00:55  0:00:42  0:00:13     0<br> 76  117M    0     0   76 89.3M      0  2102k  0:00:57  0:00:43  0:00:14     0<br> 76  117M    0     0   76 89.3M      0  2054k  0:00:58  0:00:44  0:00:14     0<br> 76  117M    0     0   76 89.3M      0  2009k  0:00:59  0:00:45  0:00:14     0<br> 76  117M    0     0   76 89.3M      0  1966k  0:01:01  0:00:46  0:00:15     0<br> 76  117M    0     0   76 89.3M      0  1924k  0:01:02  0:00:47  0:00:15     0<br> 76  117M    0     0   76 89.3M      0  1885k  0:01:03  0:00:48  0:00:15     0<br> 76  117M    0     0   76 89.3M      0  1846k  0:01:05  0:00:49  0:00:16     0<br> 76  117M    0     0   76 89.3M      0  1810k  0:01:06  0:00:50  0:00:16     0<br> 76  117M    0     0   76 89.3M      0  1775k  0:01:07  0:00:51  0:00:16     0<br> 76  117M    0     0   76 89.3M      0  1741k  0:01:09  0:00:52  0:00:17     0<br> 76  117M    0     0   76 90.3M      0  1739k  0:01:09  0:00:53  0:00:16  231k<br> 77  117M    0     0   77 91.3M      0  1724k  0:01:09  0:00:54  0:00:15  436k<br> 78  117M    0     0   78 92.3M      0  1711k  0:01:10  0:00:55  0:00:15  652k<br> 79  117M    0     0   79 93.3M      0  1700k  0:01:10  0:00:56  0:00:14  886k<br> 80  117M    0     0   80 94.7M      0  1695k  0:01:10  0:00:57  0:00:13 1186k<br> 81  117M    0     0   81 96.0M      0  1689k  0:01:11  0:00:58  0:00:13 1166k<br> 83  117M    0     0   83 97.7M      0  1690k  0:01:11  0:00:59  0:00:12 1319k<br> 84  117M    0     0   84 99.5M      0  1692k  0:01:11  0:01:00  0:00:11 1478k<br> 87  117M    0     0   87  102M      0  1714k  0:01:10  0:01:01  0:00:09 1870k<br> 89  117M    0     0   89  104M      0  1719k  0:01:09  0:01:02  0:00:07 1995k<br> 90  117M    0     0   90  106M      0  1725k  0:01:09  0:01:03  0:00:06 2137k<br> 91  117M    0     0   91  107M      0  1718k  0:01:09  0:01:04  0:00:05 2042k<br> 92  117M    0     0   92  108M      0  1705k  0:01:10  0:01:05  0:00:05 1861k<br> 93  117M    0     0   93  109M      0  1700k  0:01:10  0:01:06  0:00:04 1521k<br> 94  117M    0     0   94  110M      0  1683k  0:01:11  0:01:07  0:00:04 1237k<br> 94  117M    0     0   94  110M      0  1664k  0:01:12  0:01:08  0:00:04  896k<br> 95  117M    0     0   95  111M      0  1651k  0:01:12  0:01:09  0:00:03  803k<br> 95  117M    0     0   95  112M      0  1621k  0:01:14  0:01:10  0:00:04  633k<br> 95  117M    0     0   95  112M      0  1615k  0:01:14  0:01:11  0:00:03  497k<br> 95  117M    0     0   95  112M      0  1595k  0:01:15  0:01:12  0:00:03  419k<br> 96  117M    0     0   96  113M      0  1585k  0:01:15  0:01:13  0:00:02  510k<br> 97  117M    0     0   97  114M      0  1574k  0:01:16  0:01:14  0:00:02  498k<br> 97  117M    0     0   97  114M      0  1541k  0:01:18  0:01:16  0:00:02  462k<br> 97  117M    0     0   97  114M      0  1536k  0:01:18  0:01:16  0:00:02  419k<br> 98  117M    0     0   98  115M      0  1530k  0:01:18  0:01:17  0:00:01  581k<br> 98  117M    0     0   98  116M      0  1520k  0:01:19  0:01:18  0:00:01  564k<br> 99  117M    0     0   99  117M      0  1513k  0:01:19  0:01:19 --:--:--  614k<br>* We are completely uploaded and fine<br>100  117M    0     0  100  117M      0  1495k  0:01:20  0:01:20 --:--:--  695k<br>100  117M    0     0  100  117M      0  1476k  0:01:21  0:01:21 --:--:--  589k<br>100  117M    0     0  100  117M      0  1458k  0:01:22  0:01:22 --:--:--  388k<br>100  117M    0     0  100  117M      0  1441k  0:01:23  0:01:23 --:--:--  252k<br>100  117M    0     0  100  117M      0  1424k  0:01:24  0:01:24 --:--:-- 57489<br>100  117M    0     0  100  117M      0  1407k  0:01:25  0:01:25 --:--:--     0<br>100  117M    0     0  100  117M      0  1391k  0:01:26  0:01:26 --:--:--     0<br>100  117M    0     0  100  117M      0  1375k  0:01:27  0:01:27 --:--:--     0<br>100  117M    0     0  100  117M      0  1359k  0:01:28  0:01:28 --:--:--     0<br>100  117M    0     0  100  117M      0  1344k  0:01:29  0:01:29 --:--:--     0<br>100  117M    0     0  100  117M      0  1329k  0:01:30  0:01:30 --:--:--     0<br>100  117M    0     0  100  117M      0  1314k  0:01:31  0:01:31 --:--:--     0<br>100  117M    0     0  100  117M      0  1300k  0:01:32  0:01:32 --:--:--     0<br>100  117M    0     0  100  117M      0  1286k  0:01:33  0:01:33 --:--:--     0<br>100  117M    0     0  100  117M      0  1273k  0:01:34  0:01:34 --:--:--     0<br>100  117M    0     0  100  117M      0  1259k  0:01:35  0:01:35 --:--:--     0<br>100  117M    0     0  100  117M      0  1246k  0:01:36  0:01:36 --:--:--     0<br>100  117M    0     0  100  117M      0  1233k  0:01:37  0:01:37 --:--:--     0<br>100  117M    0     0  100  117M      0  1221k  0:01:38  0:01:38 --:--:--     0<br>100  117M    0     0  100  117M      0  1209k  0:01:39  0:01:39 --:--:--     0<br>100  117M    0     0  100  117M      0  1196k  0:01:40  0:01:40 --:--:--     0<br>100  117M    0     0  100  117M      0  1185k  0:01:41  0:01:41 --:--:--     0<br>100  117M    0     0  100  117M      0  1173k  0:01:42  0:01:42 --:--:--     0<br>100  117M    0     0  100  117M      0  1162k  0:01:43  0:01:43 --:--:--     0<br>100  117M    0     0  100  117M      0  1151k  0:01:44  0:01:44 --:--:--     0<br>100  117M    0     0  100  117M      0  1140k  0:01:45  0:01:45 --:--:--     0<br>100  117M    0     0  100  117M      0  1129k  0:01:46  0:01:46 --:--:--     0<br>100  117M    0     0  100  117M      0  1118k  0:01:47  0:01:47 --:--:--     0<br>100  117M    0     0  100  117M      0  1108k  0:01:48  0:01:48 --:--:--     0<br>100  117M    0     0  100  117M      0  1098k  0:01:49  0:01:49 --:--:--     0<br>100  117M    0     0  100  117M      0  1088k  0:01:50  0:01:50 --:--:--     0<br>100  117M    0     0  100  117M      0  1078k  0:01:51  0:01:51 --:--:--     0<br>100  117M    0     0  100  117M      0  1069k  0:01:52  0:01:52 --:--:--     0<br>100  117M    0     0  100  117M      0  1059k  0:01:53  0:01:53 --:--:--     0<br>100  117M    0     0  100  117M      0  1050k  0:01:54  0:01:54 --:--:--     0<br>100  117M    0     0  100  117M      0  1041k  0:01:55  0:01:55 --:--:--     0<br>100  117M    0     0  100  117M      0  1032k  0:01:56  0:01:56 --:--:--     0<br>100  117M    0     0  100  117M      0  1023k  0:01:57  0:01:57 --:--:--     0<br>100  117M    0     0  100  117M      0  1014k  0:01:58  0:01:58 --:--:--     0<br>100  117M    0     0  100  117M      0  1006k  0:01:59  0:01:59 --:--:--     0<br>100  117M    0     0  100  117M      0   997k  0:02:00  0:02:00 --:--:--     0<br>100  117M    0     0  100  117M      0   989k  0:02:01  0:02:01 --:--:--     0<br>100  117M    0     0  100  117M      0   981k  0:02:02  0:02:02 --:--:--     0<br>100  117M    0     0  100  117M      0   973k  0:02:03  0:02:03 --:--:--     0<br>100  117M    0     0  100  117M      0   965k  0:02:04  0:02:04 --:--:--     0<br>100  117M    0     0  100  117M      0   958k  0:02:05  0:02:05 --:--:--     0<br>100  117M    0     0  100  117M      0   950k  0:02:06  0:02:06 --:--:--     0<br>100  117M    0     0  100  117M      0   943k  0:02:07  0:02:07 --:--:--     0<br>100  117M    0     0  100  117M      0   935k  0:02:08  0:02:08 --:--:--     0<br>100  117M    0     0  100  117M      0   928k  0:02:09  0:02:09 --:--:--     0<br>100  117M    0     0  100  117M      0   921k  0:02:10  0:02:10 --:--:--     0<br>100  117M    0     0  100  117M      0   914k  0:02:11  0:02:11 --:--:--     0<br>100  117M    0     0  100  117M      0   907k  0:02:12  0:02:12 --:--:--     0<br>100  117M    0     0  100  117M      0   900k  0:02:13  0:02:13 --:--:--     0<br>100  117M    0     0  100  117M      0   893k  0:02:14  0:02:14 --:--:--     0<br>100  117M    0     0  100  117M      0   887k  0:02:15  0:02:15 --:--:--     0<br>100  117M    0     0  100  117M      0   880k  0:02:16  0:02:16 --:--:--     0<br>100  117M    0     0  100  117M      0   874k  0:02:17  0:02:17 --:--:--     0<br>100  117M    0     0  100  117M      0   868k  0:02:18  0:02:18 --:--:--     0<br>100  117M    0     0  100  117M      0   861k  0:02:19  0:02:19 --:--:--     0<br>100  117M    0     0  100  117M      0   855k  0:02:20  0:02:20 --:--:--     0<br>&lt; HTTP/1.1 504 Gateway Time-out<br>&lt; Content-Type: text/html<br>&lt; Content-Length: 1033<br>&lt; Connection: keep-alive<br>&lt; Server: CloudFront<br>&lt; Date: Thu, 18 Jul 2024 01:42:43 GMT<br>&lt; X-Cache: Error from cloudfront<br>&lt; Via: 1.1 CENSORED.cloudfront.net (CloudFront)<br>&lt; X-Amz-Cf-Pop: CENSORED<br>&lt; X-Amz-Cf-Id: CENSORED<br>&lt; <br>{ [1033 bytes data]<br><br>100  117M  100  1033  100  117M      7   855k  0:02:27  0:02:20  0:00:07   253<br>* Connection #0 to host up.flickr.com left intact<br></pre>
</details>



<p></p>



<p>Worse, the image&nbsp;<em>is</em>&nbsp;actually uploaded, and appears in the photostream etc. &nbsp;So uploaders that retry on failure (e.g.&nbsp;<a href="https://www.newpproducts.com/?page_id=3306" target="_blank" rel="noreferrer noopener external" data-wpel-link="external">Photo Upload</a>&nbsp;for Lightroom) produce endless duplicate uploads.</p>



<p>According to the author of Photo Upload, Rob, this is a commonly reported problem with Flickr specifically (Photo Upload supports seventeen other destinations). &nbsp;He said it seems to come and go randomly, presumably due to miscellaneous changes on the server side (whether CloudFront or Flickr).</p>



<p>This is preventing me from uploading&nbsp;<em>any</em>&nbsp;photos to Flickr, since it&#8217;s stuck on the one photo and the rest of my enqueued uploads are behind that.</p>
</div></div>



<p>And the response was:</p>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p>Hi Wade,<br><br>Thanks for reaching out to Flickr Support.<br><br>Unfortunately the product you are experiencing issues with was developed by a third-party &amp; therefore we&#8217;re unable to offer specialized support in this area.&nbsp;<br><br>We realize the frustration this causes , but we&#8217;re are limited to providing support for the Flickr website and official mobile applications.<br><br>In this case, we recommend reaching out with this third-party developer or help team for better assistance.&nbsp;</p>



<p>Appreciatively,</p>



<p>Marc J.</p>
</div></div>



<p>What the fuck happened?  You were doing so well, Flickr.  Here I am going out of my way to diagnose and report &#8211; with all pertinent details available to me &#8211; a bug in your API servers, and I get a robotic, bullshit response that&#8217;s purely about refusing to accept responsibility.  This is the kind of response which makes me think your support staff are paid based solely on how fast they close tickets.</p>



<p>And what the hell is Marc &#8216;appreciating&#8217; here?  Amanda&#8217;s &#8220;Warmly&#8221; valediction actually feels genuine, in context (and is human even out of context).  &#8220;Appreciatively&#8221; feels like corporate innuendo.</p>



<h2 class="wp-block-heading">We humans are weird</h2>



<p>Admittedly I started writing this out of catharsis, but it really got me thinking.</p>



<p>Why should I care that Flickr delivered miserable customer support in this second case?  Shouldn&#8217;t I just quietly move on, like I would if it were from most other companies?  Shouldn&#8217;t I be thrilled it&#8217;s at least not a bug in Lightroom itself, since Adobe&#8217;s customer support is a hundred times worse in every case; among the most aggressively evasive and pre-emptively hostile I&#8217;ve ever encountered?</p>



<p>I think we&#8217;re <em>all</em> pretty conditioned to expect terrible experiences with so-called customer support from large software companies, like Adobe, or Google.  We expect it and tolerate it, against all justice and our own interests.</p>



<p>Instead, it&#8217;s often <em>inconsistency</em> in a single company&#8217;s behaviour that&#8217;s the most infuriating and raises our ire.  This makes no logical nor rational sense &#8211; and is very bad from a game theory perspective, as it encourages companies to be <em>consistently</em> dumb and evil.</p>



<p>It seems akin to how most folks pay little attention to e.g. Facebook doing yet another horrible thing &#8211; the headlines might as well all be &#8220;Facebook acts like Facebook yet again&#8221; &#8211; but if e.g. Apple does something a bit clueless, the world gets up in arms.</p>



<p>I guess it boils down to hope, ironically.  If we see a company &#8211; or a person &#8211; demonstrate that they <em>can</em> do better, then we raise the bar for them.  And are then ripe to be disappointed if they merely behave like most of their peers, subsequently.</p>



<p>Which is stupid, really.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wadetregaskis.com/bipolar-customer-support/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">8297</post-id>	</item>
		<item>
		<title>Multiple displays on a Mac sucks</title>
		<link>https://wadetregaskis.com/multiple-displays-on-a-mac-sucks/</link>
					<comments>https://wadetregaskis.com/multiple-displays-on-a-mac-sucks/#comments</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Thu, 25 Apr 2024 18:19:13 +0000</pubDate>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[computer displays]]></category>
		<category><![CDATA[Dock]]></category>
		<category><![CDATA[iMac Pro]]></category>
		<category><![CDATA[menubar]]></category>
		<category><![CDATA[multiple displays]]></category>
		<category><![CDATA[System Settings]]></category>
		<category><![CDATA[Xcode]]></category>
		<guid isPermaLink="false">https://wadetregaskis.com/?p=7903</guid>

					<description><![CDATA[So many people I&#8217;ve worked with have used multiple displays &#8211; typically a matched pair side-by-side &#8211; and sworn by them. It&#8217;s always mystified me, to be honest. I&#8217;ve attempted the multi-display lifestyle a few times over the last thirty years. At first as a bourgeois indulgence, back when even having a single 17&#8243; display&#8230; <a class="read-more-link" href="https://wadetregaskis.com/multiple-displays-on-a-mac-sucks/" data-wpel-link="internal">Read more</a>]]></description>
										<content:encoded><![CDATA[
<p>So many people I&#8217;ve worked with have used multiple displays &#8211; typically a matched pair side-by-side &#8211; and sworn by them. It&#8217;s always mystified me, to be honest.</p>



<p>I&#8217;ve attempted the multi-display lifestyle a few times over the last thirty years. At first as a bourgeois indulgence, back when even having a single 17&#8243; display was considered luxurious<sup data-fn="f3ad31a4-54b3-4c05-9f1f-e3057f4f8a73" class="fn"><a href="#f3ad31a4-54b3-4c05-9f1f-e3057f4f8a73" id="f3ad31a4-54b3-4c05-9f1f-e3057f4f8a73-link">1</a></sup>, let-alone two displays. Just because I could. Then sporadically over the years in more practical attempts to expand my screen real estate.</p>



<p>The debut of 5k displays in 2014 relieved that pressure for a long while. It&#8217;s hard to overstate how profound that first 5k iMac was.</p>



<p>But in the last year or so I&#8217;ve felt a bit cramped &#8211; particularly as I&#8217;ve spent increasing amounts of time in Xcode, which is <em>okay</em> on a 5k display but not great. Especially if you try to do GUI design, whether AppKit or SwiftUI. Let-alone if you start working with iPad Pro simulators and the like.</p>



<p>So I&#8217;ve been considering, yet again, my options.</p>



<p>Sadly:</p>



<ol class="wp-block-list">
<li>I have an iMac Pro. Even if I were willing to waste the built-in display, I cannot &#8211; Apple does not allow iMacs to disable their internal displays.<br><br>I wouldn&#8217;t necessarily mind replacing the iMac Pro (it&#8217;s been a pretty shitty computer since the day it was made) but <a href="https://wadetregaskis.com/apples-timing-problem/" data-wpel-link="internal">Apple keep conspiring to discourage me from doing so</a><sup data-fn="2d929093-1c10-4680-a4bd-383b85a98e88" class="fn"><a href="#2d929093-1c10-4680-a4bd-383b85a98e88" id="2d929093-1c10-4680-a4bd-383b85a98e88-link">2</a></sup>.</li>



<li>There aren&#8217;t any great options for larger displays.<br><br>Available 6k displays aren&#8217;t great<sup data-fn="85221166-1dce-4d95-b6be-6b7fa2b7c644" class="fn"><a href="#85221166-1dce-4d95-b6be-6b7fa2b7c644" id="85221166-1dce-4d95-b6be-6b7fa2b7c644-link">3</a></sup>, although I&#8217;m glad there&#8217;s at least a couple of half-decent options. I never thought I&#8217;d be thankful that <em>Dell</em>, of all hardware companies, is still around and making better products than Apple.<br><br>8k displays practically don&#8217;t exist &#8211; I don&#8217;t have the physical space to use an 8k TV<sup data-fn="31755725-c69f-4729-b5d0-d0e1d2833f9f" class="fn"><a href="#31755725-c69f-4729-b5d0-d0e1d2833f9f" id="31755725-c69f-4729-b5d0-d0e1d2833f9f-link">4</a></sup>, which is otherwise actually the best way to go, and <a href="https://www.dell.com/en-us/shop/dell-ultrasharp-32-8k-monitor-up3218k/apd/210-alez/monitors-monitor-accessories" data-wpel-link="external" target="_blank" rel="external noopener">the one 8k computer display</a> I know of is far too physically small for its resolution<sup data-fn="329e19a1-f614-448f-8975-7365a698f75a" class="fn"><a href="#329e19a1-f614-448f-8975-7365a698f75a" id="329e19a1-f614-448f-8975-7365a698f75a-link">5</a></sup>.</li>
</ol>



<p>As it happened, I had an extra 5k display left over from working at LinkedIn (they wouldn&#8217;t provide decent displays to employees while I was there, so I had to buy my own out of my own pocket<sup data-fn="3f8979d6-ea6a-4991-afc8-845186aeb8a5" class="fn"><a href="#3f8979d6-ea6a-4991-afc8-845186aeb8a5" id="3f8979d6-ea6a-4991-afc8-845186aeb8a5-link">6</a></sup>). So far as multi-display setups go it&#8217;s arguably ideal, since it&#8217;s basically the exact same panel as the iMac Pro&#8217;s display, so it should match quite well<sup data-fn="9cf23db5-75b6-40a4-88cd-48d1ad743001" class="fn"><a href="#9cf23db5-75b6-40a4-88cd-48d1ad743001" id="9cf23db5-75b6-40a4-88cd-48d1ad743001-link">7</a></sup>. So a few months ago I went to some effort to rearrange my working space to accomodate it, and set to work with it.</p>



<p>And not a lot has changed in thirty years.</p>



<h2 class="wp-block-heading">The Mac operating system <em>still</em> Just. Fucking. Sucks. at remembering where windows were, when relaunching apps.</h2>



<p>For the first month or so it was mostly fine &#8211; a couple of apps would be <em>occasionally</em> problematic, but it was tolerable. Mostly. Xcode in particularly pisses me off in that it <em>always</em> forgets where the documentation window was, every time you open it<sup data-fn="08475590-6d49-4fed-ab6b-99455053ae2a" class="fn"><a href="#08475590-6d49-4fed-ab6b-99455053ae2a" id="08475590-6d49-4fed-ab6b-99455053ae2a-link">8</a></sup>.</p>



<p>But then, something invisible to me apparently happened, and since then <em>every single boot every single window resets its position onto the built-in display</em>. Every single boot I have to spend a bunch of time digging buried windows out from the over-crowded main display and shifting them back to their correct positions on the second display.</p>



<p>I might dismiss this as particular bad luck, except I know from decades of experience that this is in fact normal. It <em>always</em> happens, sooner or later. And at some point it will unfuck itself and start [mostly] remembering where windows go. Only to inevitably repeat the vicious cycle.</p>



<h2 class="wp-block-heading">Full-screen apps (mostly games) don&#8217;t handle the additional display(s) correctly.</h2>



<p>This cuts both ways &#8211; some apps erroneously ignore the extra displays, while some erroneously <em>don&#8217;t</em> and do stupid things like put windows on the wrong display:</p>



<ul class="wp-block-list">
<li>Games are the most common offenders in the former category, as they usually fail to dim or turn off unused displays.  It&#8217;s very distracting having a bright display right next to one on which you&#8217;re trying to play a game.  Every time I launch or exit such an app I have to manually open System Settings, go to Display settings, click the secondary display, and manually changes its brightness.<br><br>My secondary display (<a href="https://www.lg.com/us/monitors/lg-27md5kl-b-5k-uhd-led-monitor" data-wpel-link="external" target="_blank" rel="external noopener">LG 5k</a>) doesn&#8217;t have a power button, and I found out real quick that unplugging the Thunderbolt cable confuses the hell out of macOS, resulting in windows going wild and some apps outright crashing.</li>



<li>In the latter, &#8220;WTF are you doing?!&#8221; subcategory are applications like Adobe Lightroom Classic, which will spontaneously move the entire window to a different display sometimes, and the only way to get it back is to quit &amp; relaunch Lightroom<sup data-fn="652e1ed2-b22f-476a-bfcf-9c76338c27b3" class="fn"><a href="#652e1ed2-b22f-476a-bfcf-9c76338c27b3" id="652e1ed2-b22f-476a-bfcf-9c76338c27b3-link">9</a></sup>.</li>
</ul>



<h2 class="wp-block-heading">Side Docks aren&#8217;t practical.</h2>



<p>When the Dock is on the side, it only appears on the display that is farthest to that side. Having to move the mouse across <em>multiple</em> displays just to get to the Dock is untenably slow and awkward.</p>



<p>I have the Dock set to auto-hide, because I&#8217;m not a monster. But that does mean I have to be careful about mouse movements near its edge of the screen.</p>



<p>I prefer having the Dock on the left-hand side because it&#8217;s the least intrusive place &#8211; there&#8217;s relatively little you have to mouse to or interact with on the left edge (the right side is second-best, but notably is the home of scrollbars). It&#8217;s also slightly easier to mouse left (or right) than down, because moving the mouse &#8216;down&#8217; (towards me) has extra tension from the USB cable.</p>



<p>With multiple monitors (in a typical horizontal arrangement), I&#8217;m forced to use a bottom Dock, which is the worst place to have the Dock because so much stuff is placed right at the bottom of the screen &#8211; window resize widgets, toolbars &amp; their buttons, horizontal scrollbars, etc. It&#8217;s immensely irritating to have to finesse minute mouse movements in order to avoid triggering the Dock while somehow still getting the cursor within a few pixels of the edge of the screen. Sometimes it&#8217;s necessary to move the entire window just to interact with its bottom parts &#8211; which can in turn require first resizing it from the top, in order to allow it to be moved upwards.</p>



<h2 class="wp-block-heading">The menu bar is particularly petulant when multiple displays are in use.</h2>



<p>I have the menu bar set to auto-hide, partly for reasons of visual cleanliness and to save a little screen space, but also because the menubar ruined my previous iMac&#8217;s display by burning in, hard.</p>



<p>I also use the menubar a lot more than for just activating menus with the mouse &#8211; I have iStat Menus and a host of other monitoring utilities in there as well. So I&#8217;m frequently mousing up to the top of the screen to reveal the menubar. Which is not a burden in itself &#8211; flicking the mouse to the top of the screen is a completely trivial operation.</p>



<p>But it doesn&#8217;t work half the time, when you have multiple displays, because the menubar will only deign to reveal itself on the &#8220;active&#8221; display, which is often at a glance visually indistinguishable from the &#8220;inactive&#8221; display (thanks to Apple&#8217;s long-running war against clarity).</p>



<p>That defeats the instinct and muscle-memory to just flick the cursor to the top of the display in order to see the menubar. Worse, since macOS has some design flaws regarding menu bar reveal (e.g. it refuses to reveal if the frontmost application&#8217;s main thread runloop isn&#8217;t idle, and whenever an application is launching), you can&#8217;t immediately tell if it&#8217;s refusing to reveal itself because the cursor&#8217;s on the &#8220;wrong&#8221; display. So inevitably there&#8217;s wasted, distracting moments of pause and investigation, and possibly movement to a whole different display. For an operation that happens hundreds of times a day, wasted seconds add up.</p>



<h2 class="wp-block-heading">Windows appear on the wrong display sometimes.</h2>



<p>Enough said, really. I have no idea why they appear in the wrong places, but then so much about macOS&#8217;s window management is inexplicably buggy like this, such as why some modal dialogs appear <em>behind</em> all existing windows.</p>



<h2 class="wp-block-heading">Multi-display ergonomics tend to suck.</h2>



<p>If &#8211; in a typical horizontal arrangement &#8211; you give the two displays equal priority in placement, you end up with one to your left and one to your right, with a very irritating gap between them in the one place it&#8217;s natural to look &#8211; straight ahead of you. Neither display is aligned with the keyboard or mouse, which I find impairs typing and mousing accuracy (especially with a treadmill desk where I&#8217;m constantly moving). And I find I get a sore neck no matter what, because I&#8217;m spending all my time looking anywhere but centre.</p>



<p>If you keep a &#8220;primary&#8221; display front and centre, and put a second one off to a side, the second display becomes <em>much</em> less useful because it&#8217;s even more uncomfortable to actually look at. Which couples with the fact that…</p>



<h2 class="wp-block-heading">Splitting work across multiple displays is <em>hard</em>.</h2>



<p>More so than it seems it should be. In practice there&#8217;s a <em>big</em> difference between two windows side-by-side on one display, and two windows on separate displays (<em>especially</em> if the displays aren&#8217;t identical, or aren&#8217;t aligned on horizontal or vertical axes). Maybe it&#8217;s as a simple as the difference between moving your eyes and moving your head.</p>



<p>Whatever it is, I just cannot get comfortable moving between displays frequently. That then forces me to not put anything <em>important</em> on the second display (especially if it has an ergonomically inferior position compared to the primary display), so it ends up being kind of a dumping ground for stuff I don&#8217;t actually use that often &#8211; e.g. calendar, clipboard viewers, calculators, etc.</p>



<p>And since I don&#8217;t actually use them that often, there&#8217;s really not much advantage to having them on a second display, versus just bringing them to the front on the main display and then hiding them again when I&#8217;m done. In fact, sometimes it&#8217;s counter-productive as irrelevant animations on the second display distract me, whereas they&#8217;d be safely out of sight behind other windows on the main display.</p>



<p>The only meaningful use-case I have so far for genuine simultaneous use is moving information references &#8211; e.g. Xcode&#8217;s documentation window &#8211; to the second display. In fact that was the specific use-case that made me go to the trouble of hooking up the second display, since it&#8217;s practically impossible to fit a non-trivial Xcode project into just half a 5k display, and having to constantly toggle between code &amp; documentation is irritating and a little disruptive &#8211; there&#8217;s often a <em>lot</em> of rapid back-and-forth between code &amp; docs, which is of course much easier if they&#8217;re simultaneously visible.</p>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-dots"/>



<h2 class="wp-block-heading">Follow-up</h2>



<p>There&#8217;s <a href="https://news.ycombinator.com/item?id=40166268" data-wpel-link="external" target="_blank" rel="external noopener">a surprisingly long thread on HackerNews about this post</a>. And I was pleasantly surprised to find mostly commiseration and honest attempts to help, as opposed to vitriol. It&#8217;s worth looking over if you want to dive even deeper into this topic.</p>



<p>Addressing a select few points raised in the HackerNews comments:</p>



<ul class="wp-block-list">
<li>I&#8217;ve been a Mac user for about thirty-five years, and always focused on the Mac. So assertions that I&#8217;m &#8220;doing it wrong&#8221; because I&#8217;m secretly a Wintel or Linux stooge are misguided. 🙂</li>



<li>A <em>lot</em> of folks also brought up problems with even getting external displays to work reliably, which I can definitely relate to &#8211; that LG 5k I&#8217;m using was a real bitch, frankly, before I replaced what turned out to be a faulty Thunderbolt cable that it came with. Even then, it never worked reliably with my work MacBook Pro, for some reason. Seems to work just fine with my iMac Pro. 🤷‍♂️<br><br>I chose not to go there in this post because somehow I&#8217;m not having those sorts of issues right now (🤞) and because I feel like that&#8217;s a whole <em>other</em> can of worms. But yes, it&#8217;s definitely a <em>big</em> problem for the Mac, too.</li>



<li>One or two folks suggested that my problem is that I should just get a bigger single display. To which I agree, that is my problem. That was covered in the opening of the post. 🙂<br><br>Quite a few people suggested or at least evangelised using ultra-wide displays. I&#8217;m open to it, if one is ever released with decent pixel density. e.g. 5k is a decent number of pixels in 23.5&#8243; (the horizontal width of a conventional 27&#8243; display) but is <em>way</em> too few on a display that&#8217;s like 50&#8243; wide. Abysmally few. I touched on this topic tangentially in the footnotes, but to reiterate: a decent display has a pixel density of <em>at least</em> 100 PPD (pixels per degree) at a reasonable working distance. Apple&#8217;s &#8220;Retina&#8221; displays all have this. To my knowledge no ultra-wide display ever made has this &#8211; not even close.</li>



<li>The specific setup I&#8217;ve been using recently is with my iMac Pro in its traditional place front and centre, and the LG 5k off to the left side by about 45°.<br><br>In prior attempts at the multi-display lifestyle I&#8217;ve used many other setups, including symmetrical horizontal arrangements, stacked vertical arrangements, and even ad hoc &#8220;diagonal&#8221; arrangements with things like my iPad Pro or laptops. I don&#8217;t think there&#8217;s a reasonable layout that I have not tried.</li>



<li>I don&#8217;t use <a href="https://en.wikipedia.org/wiki/Spaces_(software)" data-wpel-link="external" target="_blank" rel="external noopener">Spaces</a>. I&#8217;ve used it in the past (mostly <em>way</em> back when it was new to Mac OS X, and earlier on Linux) but it just never really felt nor worked right. It also has its own family of window management problems &amp; bugs, with things like new windows (particularly modal dialogs) silently opening in the wrong space. 😔</li>



<li>I don&#8217;t full-screen apps (except in very limited circumstances, such as some games which <em>only</em> run full-screen).<br><br>For <em>years</em> I did, on my work MacBook Pros, but only because I felt forced to by the small laptop screen &#8211; there are <em>so</em> many bugs around full-screen mode in macOS. And it makes very little sense for most apps when you have a decent-sized screen, as you end up with massive areas of wasted space in margins etc. In fact I got so sick of the bugs that even on my little 12&#8243; MacBook Air I don&#8217;t use full-screen mode anymore, and just suffer through the loss of screen real estate. And, more importantly, I don&#8217;t do any real software development or photo/video work on laptops anymore &#8211; mostly just writing and web browsing.</li>



<li>A few folks seemed surprised that I use the Dock at all, which I found surprising in turn. I&#8217;d never really considered <em>not</em> using the Dock.<br><br>Reflecting on it, I mostly use the Dock for:
<ul class="wp-block-list">
<li>Switching applications.<br><br>I use ⌘⇥ too, of course, but with multiple displays it&#8217;s unpredictable as to which screen the app palette appears on, making it hard to efficiently use the mouse with it (and merely hitting tab over and over again is far too slow when you have tens of apps open).<br><br>I do use Spotlight to launch &amp; switch apps, but I try to avoid it for commonly-used apps as Spotlight is very unreliable:
<ul class="wp-block-list">
<li>Sometimes it takes a non-trivial amount of time to show the floating text input window, and keystokes in the interim may be silently ignored or go to the wrong place.</li>



<li>Sometimes it just doesn&#8217;t work. I type some letters and nothing happens, or it just shows me that infuriating &#8220;indexing&#8221; indeterminate progress bar. Try again later, apparently.</li>



<li>It randomly changes what frequently-used character sequences mean. e.g. I might have been using &#8220;te&#8221; for TextEdit for <em>months</em>, and then suddenly it decides that &#8220;te&#8221; means some random fifteen year old PDF file. It&#8217;s absolutely infuriating and inexplicable, and there&#8217;s no apparent way to fix it when this happens.</li>
</ul>
</li>



<li>Accessing minimised windows. I don&#8217;t know of any other way to get at these.</li>



<li>Accessing the contextual menu for an app&#8217;s Dock icon &#8211; most often to force quit it, but also some apps put important functionality there which isn&#8217;t readily accessible through any other means. And I know that I can ⌥⌘⎋, which I use sometime too, but for whatever reason I prefer going via the Dock.</li>



<li>Monitoring (e.g. unread message counts).</li>
</ul>
</li>



<li>A lot of people tangentially critiqued the Mac&#8217;s lack of window tiling and gesture functionality, particularly those coming from Windows it seems. These are fair and broadly accurate critiques, but they did seem to overlook that while macOS doesn&#8217;t have a <em>lot</em> of such gestures &amp; tiling features, it does have some (e.g. what Apple calls &#8220;<a href="https://support.apple.com/en-au/guide/mac-help/mchl4fbe2921/mac" data-wpel-link="external" target="_blank" rel="external noopener">Split View</a>&#8220;).<br><br>But, &#8220;Split View&#8221; is essentially a specialisation of full screen mode, with many of the same design problems and bugs.</li>



<li>There were a <em>lot</em> more display and window management utilities than I thought &#8211; <em>many</em> people come forth with suggestions and recommendations I&#8217;d not yet encountered (e.g. <a href="https://cordlessdog.com/stay/" data-wpel-link="external" target="_blank" rel="external noopener">Stay</a>, <a href="https://funk-isoft.com/display-maid.html" data-wpel-link="external" target="_blank" rel="external noopener">Display Maid</a>, <a href="https://github.com/kasper/phoenix" data-wpel-link="external" target="_blank" rel="external noopener">Phoenix</a>, <a href="https://rectangleapp.com/pro" data-wpel-link="external" target="_blank" rel="external noopener">Rectangle Pro</a>). I might look into some of those, and will perhaps do a follow-up post if they substantially improve things (but, keep in mind that problems like Dock and menubar accessibility, let-alone fundamentals like the ergonomics, aren&#8217;t addressed by these utilities).</li>



<li>A few people responded with essentially &#8220;huh, none of this happens to / bothers me&#8221;. Which is fair to say, but not surprising &#8211; different strokes for different folks. I was pleased to see that most weren&#8217;t trying to dismiss my opinion out of hand, merely noting that there are other opinions. Which is totally fine and important to remember.</li>
</ul>


<ol class="wp-block-footnotes"><li id="f3ad31a4-54b3-4c05-9f1f-e3057f4f8a73">Apple&#8217;s first so-called 17&#8243; display (it was actually only 16.5&#8243;) was the <a href="https://everymac.com/monitors/apple/multiple_scan/specs/multiple_scan_17.html" data-wpel-link="external" target="_blank" rel="external noopener">Apple Multiple Scan 17</a>, released in 1994 for USD$1,100 (not counting taxes).  That&#8217;s equivalent to about $2,500 today.  For a display that could do just 1024&#215;768 &#8211; but, in a time when 640&#215;480 was the vastly dominant standard, so that was a <em>huge</em> leap up in display resolution &#8211; 156%!  It&#8217;s the same as going from a 4k to 6k display. <a href="#f3ad31a4-54b3-4c05-9f1f-e3057f4f8a73-link" aria-label="Jump to footnote reference 1">↩︎</a></li><li id="2d929093-1c10-4680-a4bd-383b85a98e88">I say that with some sense of humility and humour, of course.  But the effect is real, even if arguably irrational.  Nobody likes buying something that they know is about to be replaced, nor something that&#8217;s a bit outdated even at its start, irrespective of whether it&#8217;s functionally sufficient for their needs. <a href="#2d929093-1c10-4680-a4bd-383b85a98e88-link" aria-label="Jump to footnote reference 2">↩︎</a></li><li id="85221166-1dce-4d95-b6be-6b7fa2b7c644"><a href="https://www.apple.com/pro-display-xdr/" data-wpel-link="external" target="_blank" rel="external noopener">Apple&#8217;s 6k display</a> is stupidly over-priced, even by Apple standards, and uses a severely compromised design with its coarse backlight zoning system.  That results in significant blooming, which is annoying even for casual use but particularly problematic for photography and videography.  I&#8217;d rather have a uniform display with lower contrast &#8211; like existing 5k displays &#8211; as the lesser of the two evils, since that more faithfully reproduces images.<br><br><a href="https://www.dell.com/en-us/shop/dell-ultrasharp-32-6k-monitor-u3224kb/apd/210-bhbz/monitors-monitor-accessories#techspecs_section" data-wpel-link="external" target="_blank" rel="external noopener">Dell&#8217;s 6k display</a> is a better option, having made better decisions on key design compromises, but it&#8217;s still a bit pricey and it&#8217;s a bit dim at just 450 cd/m².  Good enough for coding in a not too brightly lit room, but it&#8217;s pretty useless for working with HDR imagery. <a href="#85221166-1dce-4d95-b6be-6b7fa2b7c644-link" aria-label="Jump to footnote reference 3">↩︎</a></li><li id="31755725-c69f-4729-b5d0-d0e1d2833f9f">The smallest I can find is 65&#8243;, which would mean sitting at least a metre away from it to avoid seeing its individual pixels.  Not <em>impossible</em>, but deeper than most people&#8217;s desks.  And a corner desk (like mine) has a lot less usable depth due to the angle of the walls, making it completely impossible to fit a 65&#8243; display at all, let-alone while maintaining a practical viewing distance. <a href="#31755725-c69f-4729-b5d0-d0e1d2833f9f-link" aria-label="Jump to footnote reference 4">↩︎</a></li><li id="329e19a1-f614-448f-8975-7365a698f75a">Apple pretty much nailed it with their 5k displays, right from the start; 27&#8243; is a good size for them.  At a healthy viewing distance of about 70cm, it&#8217;s about 111 PPD (pixels per degree) which is close enough to the limit of even excellent human vision (~130 PPD) to make it genuinely a &#8216;retina&#8217; display (where you can&#8217;t typically distinguish individual pixels) for most people without <em>wasting</em> a lot of pixels.  And if you have exceptionally good vision, situating yourself a little farther away is plausible in most setups. <br><br><a href="https://www.dell.com/en-us/shop/dell-ultrasharp-32-8k-monitor-up3218k/apd/210-alez/monitors-monitor-accessories" data-wpel-link="external" target="_blank" rel="external noopener">Dell&#8217;s 8k display</a>, on the other hand, is a mere 32&#8243;, yielding a PPD of 143 &#8211; <em>way</em> higher than necessary and meaning you can&#8217;t <em>actually</em> utilise its full resolution at typical viewing distances &#8211; it&#8217;d require being within 50cm, which might not sound all that bad but try it; 50cm is <em>really</em> close to any computer display, let-alone a relatively large one at 32&#8243;.<br><br>8k displays <em>should</em> be about 44&#8243;, to be optimal. <a href="#329e19a1-f614-448f-8975-7365a698f75a-link" aria-label="Jump to footnote reference 5">↩︎</a></li><li id="3f8979d6-ea6a-4991-afc8-845186aeb8a5">And lest you think I was just a fussy princess, know that quite a lot of my colleagues did the same.  You could look around the office and get a pretty good idea about who really <em>cared</em> about their work (or at least their eyes), by looking at whether they had the company-issued displays or not. <a href="#3f8979d6-ea6a-4991-afc8-845186aeb8a5-link" aria-label="Jump to footnote reference 6">↩︎</a></li><li id="9cf23db5-75b6-40a4-88cd-48d1ad743001">In practice it doesn&#8217;t &#8211; they differ substantially in temperature, with the LG display being too warm, but I could probably fix that by properly calibrating the LG display… I just haven&#8217;t bothered.  I <em>used</em> to obsess over monitor calibration, years ago, until I became more aware of just how incredibly situational and subjective human colour perception is anyway (and how well-calibrated Apple&#8217;s displays usually are already, out of the box).<br><br>It&#8217;s largely pointless stressing over small errors in colour when you have no control over the viewing context anyway &#8211; let-alone the fact that most people view content on tiny little phone displays that are comically not colour-accurate, and can&#8217;t see anything anyway. <a href="#9cf23db5-75b6-40a4-88cd-48d1ad743001-link" aria-label="Jump to footnote reference 7">↩︎</a></li><li id="08475590-6d49-4fed-ab6b-99455053ae2a">But then, it essentially forgets the windows contents themselves, anyway.  It preserves <em>only</em> the first open tab, not any of the others.  When I&#8217;m in the middle of development and I accidentally close the documentation window &#8211; losing a dozen open tabs that were very precisely tied to what I was working at that exact moment &#8211; I want to throw my whole god damn computer through a wall.<br><br>So, Xcode is an infuriating piece of shit even on one display, in that respect.  Somehow that&#8217;s little consolation. <a href="#08475590-6d49-4fed-ab6b-99455053ae2a-link" aria-label="Jump to footnote reference 8">↩︎</a></li><li id="652e1ed2-b22f-476a-bfcf-9c76338c27b3">Yes, Lightroom&#8217;s Window menu has a &#8220;Move to &lt;other display>…&#8221; item, but it doesn&#8217;t do anything. <a href="#652e1ed2-b22f-476a-bfcf-9c76338c27b3-link" aria-label="Jump to footnote reference 9">↩︎</a></li></ol>]]></content:encoded>
					
					<wfw:commentRss>https://wadetregaskis.com/multiple-displays-on-a-mac-sucks/feed/</wfw:commentRss>
			<slash:comments>17</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7903</post-id>	</item>
		<item>
		<title>Apple antitrust &#038; music piracy</title>
		<link>https://wadetregaskis.com/apple-antitrust-music-piracy/</link>
					<comments>https://wadetregaskis.com/apple-antitrust-music-piracy/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Thu, 21 Mar 2024 22:25:59 +0000</pubDate>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[antitrust]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[entitlement]]></category>
		<category><![CDATA[music piracy]]></category>
		<category><![CDATA[Napster]]></category>
		<category><![CDATA[U.S. Department of Justice]]></category>
		<guid isPermaLink="false">https://wadetregaskis.com/?p=7895</guid>

					<description><![CDATA[The position of many folks &#8211; most recently the U.S. Department of Justice &#8211; against Apple has drawn an unexpected parallel to that of music pirates in the late 90&#8217;s and early 2000&#8217;s. If you&#8217;re too young to have personally lived that time, just know this key point: back then, buying or streaming music online&#8230; <a class="read-more-link" href="https://wadetregaskis.com/apple-antitrust-music-piracy/" data-wpel-link="internal">Read more</a>]]></description>
										<content:encoded><![CDATA[
<p>The position of many folks &#8211; <a href="https://www.justice.gov/opa/pr/justice-department-sues-apple-monopolizing-smartphone-markets" data-wpel-link="external" target="_blank" rel="external noopener">most recently the U.S. Department of Justice</a> &#8211; against Apple has drawn an unexpected parallel to that of music pirates in the late 90&#8217;s and early 2000&#8217;s.</p>



<p>If you&#8217;re too young to have personally lived that time, just know this key point: back then, buying or streaming music online was basically not a thing<sup data-fn="c69e16df-1a11-4f0e-8a4f-6da2431f49d8" class="fn"><a href="#c69e16df-1a11-4f0e-8a4f-6da2431f49d8" id="c69e16df-1a11-4f0e-8a4f-6da2431f49d8-link">1</a></sup>.  You bought CDs in physical stores, or <em>maybe</em> by mail order from an online retailer if you were on the bleeding edge.  Or you listened to the radio.  Or, you traded pirated copies of CD rips via a plethora of file sharing apps, most famously <a href="https://en.wikipedia.org/wiki/Napster" data-wpel-link="external" target="_blank" rel="external noopener">Napster</a>.</p>



<p>It was the opinion of quite a few people &#8211; my younger, more ignorant self among them &#8211; that if the music industry wasn&#8217;t willing to provide us the songs we wanted by the means we wanted and at the price we wanted, then it was their fault that we pirated their product.</p>



<p>Talk about entitlement.</p>



<p>Computer game pirates had &#8211; and seemingly still have &#8211; a similar attitude.  &#8220;$70 for a game?  Outrageous!  I have no choice but to pirate it!&#8221;</p>



<p>Bullshit.  You have plenty of choice: you can pay for it, or you can not have it.  You&#8217;re not <em>entitled</em> to the work of others.  <a href="https://en.wikipedia.org/wiki/Slavery" data-wpel-link="external" target="_blank" rel="external noopener">That used to be believed</a>, but not anymore.</p>



<p>A similar sense of entitlement seems to underpin many critiques of Apple&#8217;s business practices.  While I&#8217;m no fan of some of Apple&#8217;s business practices &#8211; because it&#8217;s always a shame to see flaws in an otherwise good or promising product &#8211; I&#8217;m under no delusion that I&#8217;m somehow entitled to have Apple&#8217;s products at all, let-alone on purely my own terms.</p>


<ol class="wp-block-footnotes"><li id="c69e16df-1a11-4f0e-8a4f-6da2431f49d8">I think it&#8217;s now largely forgotten just how <em>big</em> a deal it was when the <a href="https://en.wikipedia.org/wiki/ITunes_Store" data-wpel-link="external" target="_blank" rel="external noopener">iTunes Music Store</a> was announced in April 2003, with <em>five</em> of the biggest western music labels onboard. <a href="#c69e16df-1a11-4f0e-8a4f-6da2431f49d8-link" aria-label="Jump to footnote reference 1">↩︎</a></li></ol>]]></content:encoded>
					
					<wfw:commentRss>https://wadetregaskis.com/apple-antitrust-music-piracy/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7895</post-id>	</item>
		<item>
		<title>A hint that the Mac Messages app is not native</title>
		<link>https://wadetregaskis.com/a-hint-that-the-mac-messages-app-is-not-native/</link>
					<comments>https://wadetregaskis.com/a-hint-that-the-mac-messages-app-is-not-native/#comments</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Wed, 20 Mar 2024 00:33:43 +0000</pubDate>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[Apple Messages]]></category>
		<category><![CDATA[Bugs!]]></category>
		<category><![CDATA[Catalyst]]></category>
		<category><![CDATA[iMessage]]></category>
		<category><![CDATA[Snafu]]></category>
		<guid isPermaLink="false">https://wadetregaskis.com/?p=7869</guid>

					<description><![CDATA[I must admit, the Messages team have done a somewhat good job of making Messages pretend to be a native Mac app, at least in my experience &#8211; most of the time it works as it should. But then it&#8217;s a very simple app which I use in a pretty limited fashion. Even so, there&#8230; <a class="read-more-link" href="https://wadetregaskis.com/a-hint-that-the-mac-messages-app-is-not-native/" data-wpel-link="internal">Read more</a>]]></description>
										<content:encoded><![CDATA[
<p>I must admit, the Messages team have done a <em>somewhat</em> good job of making Messages pretend to be a native Mac app, at least in my experience &#8211; <em>most</em> of the time it works as it should.  But then it&#8217;s a very simple app which I use in a pretty limited fashion.</p>



<p>Even so, there are things which just scream &#8220;I&#8217;m actually an iOS app&#8221;, like when you right-click a message or attachment while the Messages window is on a secondary display, and the contextual menu appears in the top-left corner of the main display.  And disappears when you click on any item in it, <em>without</em> activating the item.  Because it&#8217;s reacting to the mouse location <em>as if</em> it were in the correct place on the secondary display.  But if you click on the secondary display, it just dismisses the pop-up menu without activating the selected item &#8211; I don&#8217;t know how they managed to get that discontinuity between mouse move events and mouse down events, but there you go, the miracle that is Catalyst.</p>



<p>Sigh.</p>



<p>Also, keyboard navigation doesn&#8217;t work correctly in the contextual menu &#8211; it&#8217;s fine for the plain text items, but it&#8217;s impossible to select any of the reactions.</p>



<p>Fortunately, for reactions specifically, there&#8217;s a workaround!  ⌘T brings up a special contextual menu <em>just</em> for reactions, and you can then just hit a number key, from 1 through 6, to apply the corresponding reaction.  It only works on the most recently received message in the selected conversation, but then that&#8217;s usually the one you want.</p>



<p>Of course, the GUI for that special contextual menu is ripped <em>directly</em> out of iOS, further emphasising Message&#8217;s unnatural nature.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><a href="https://signal.org" data-wpel-link="external" target="_blank" rel="external noopener"><img loading="lazy" decoding="async" width="373" height="284" src="https://wadetregaskis.com/wp-content/uploads/2024/03/macOS-Messages-non-native-but-useful-reactions-pop-up-menu.webp" alt="Screenshot from a Messages conversation thread showing the reactions pop-up above a message." class="wp-image-7870" srcset="https://wadetregaskis.com/wp-content/uploads/2024/03/macOS-Messages-non-native-but-useful-reactions-pop-up-menu.webp 373w, https://wadetregaskis.com/wp-content/uploads/2024/03/macOS-Messages-non-native-but-useful-reactions-pop-up-menu-256x195.webp 256w, https://wadetregaskis.com/wp-content/uploads/2024/03/macOS-Messages-non-native-but-useful-reactions-pop-up-menu@2x.webp 746w" sizes="auto, (max-width: 373px) 100vw, 373px" /></a><figcaption class="wp-element-caption">Genuinely chosen as the example merely because it was the first impersonal message I came across in my recent conversations &#8211; but, a sign, perhaps? 😄</figcaption></figure>
</div>]]></content:encoded>
					
					<wfw:commentRss>https://wadetregaskis.com/a-hint-that-the-mac-messages-app-is-not-native/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			<media:content url="https://wadetregaskis.com/wp-content/uploads/2024/03/macOS-Messages-non-native-but-useful-reactions-pop-up-menu.webp" medium="image" />
<post-id xmlns="com-wordpress:feed-additions:1">7869</post-id>	</item>
		<item>
		<title>Another Swift release, another day wasted</title>
		<link>https://wadetregaskis.com/another-swift-release-another-day-wasted/</link>
					<comments>https://wadetregaskis.com/another-swift-release-another-day-wasted/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Wed, 06 Mar 2024 22:32:35 +0000</pubDate>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[Bugs!]]></category>
		<category><![CDATA[Sad]]></category>
		<category><![CDATA[Swift]]></category>
		<guid isPermaLink="false">https://wadetregaskis.com/?p=7838</guid>

					<description><![CDATA[I really wish Swift releases would stop having major regressions in the ability to parse non-trivial expressions. The installation of a new version of Xcode &#8211; with a corresponding new Swift version &#38; toolchain &#8211; should be a joyous occasion, not one I increasingly dread.]]></description>
										<content:encoded><![CDATA[
<p>I really wish Swift releases would stop having major regressions in the ability to parse non-trivial expressions.  The installation of a new version of Xcode &#8211; with a corresponding new Swift version &amp; toolchain &#8211; should be a <em>joyous</em> occasion, not one I increasingly dread.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wadetregaskis.com/another-swift-release-another-day-wasted/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<media:content url="https://wadetregaskis.com/wp-content/uploads/2024/03/Sad-Keanu.avif" medium="image" />
<post-id xmlns="com-wordpress:feed-additions:1">7838</post-id>	</item>
		<item>
		<title>Mail &#038; Preview working together</title>
		<link>https://wadetregaskis.com/mail-preview-working-together/</link>
					<comments>https://wadetregaskis.com/mail-preview-working-together/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Fri, 09 Feb 2024 23:06:27 +0000</pubDate>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[Apple Mail]]></category>
		<category><![CDATA[Apple Preview]]></category>
		<category><![CDATA[dialog]]></category>
		<category><![CDATA[Happy]]></category>
		<category><![CDATA[macOS]]></category>
		<category><![CDATA[PDF]]></category>
		<guid isPermaLink="false">https://wadetregaskis.com/?p=7685</guid>

					<description><![CDATA[It&#8217;s the little things that sometimes impress me the most. Like when this dialog appeared: …after I&#8217;d filled out a form PDF that was emailed to me. It had exactly the option I wanted first and foremost, to send the completed PDF back to the sender. Sure, manually digging up the completed PDF from disk&#8230; <a class="read-more-link" href="https://wadetregaskis.com/mail-preview-working-together/" data-wpel-link="internal">Read more</a>]]></description>
										<content:encoded><![CDATA[
<p>It&#8217;s the little things that sometimes impress me the most.  Like when this dialog appeared:</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="372" height="450" src="https://wadetregaskis.com/wp-content/uploads/2024/02/Save-Changes-dialog-for-PDF-form-related-to-an-email-message.webp" alt="Screenshot of a macOS dialog saying: &quot;Do you want to save the changes made to the document &quot;Waste Disposal Forms requiring signatures copy&quot;, with the buttons: &quot;Reply to lora…&quot;, &quot;New Mail Message&quot;, &quot;Save&quot;, and &quot;Cancel&quot;." class="wp-image-7686" srcset="https://wadetregaskis.com/wp-content/uploads/2024/02/Save-Changes-dialog-for-PDF-form-related-to-an-email-message.webp 372w, https://wadetregaskis.com/wp-content/uploads/2024/02/Save-Changes-dialog-for-PDF-form-related-to-an-email-message-212x256.webp 212w, https://wadetregaskis.com/wp-content/uploads/2024/02/Save-Changes-dialog-for-PDF-form-related-to-an-email-message@2x.webp 744w" sizes="auto, (max-width: 372px) 100vw, 372px" /></figure>
</div>


<p>…after I&#8217;d filled out a form PDF that was emailed to me.  It had exactly the option I wanted first and foremost, to send the completed PDF back to the sender.</p>



<p>Sure, manually digging up the completed PDF from disk and dragging it into a Mail Compose [Reply] window isn&#8217;t <em>hard</em>, but it just feels so <em>thoughtful</em> when the system saves me the effort.  Knowing that someone, somewhere, actually thought through how Mail &amp; Preview might be used, and thought enough of their users to go to the trouble of implementing this.</p>



<p>Kudos to whomever was behind this sweet little feature.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wadetregaskis.com/mail-preview-working-together/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<media:content url="https://wadetregaskis.com/wp-content/uploads/2024/02/Save-Changes-dialog-for-PDF-form-related-to-an-email-message.webp" medium="image" />
<post-id xmlns="com-wordpress:feed-additions:1">7685</post-id>	</item>
		<item>
		<title>The Devil&#8217;s Tech Dictionary</title>
		<link>https://wadetregaskis.com/the-devils-tech-dictionary/</link>
					<comments>https://wadetregaskis.com/the-devils-tech-dictionary/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Wed, 07 Feb 2024 19:42:17 +0000</pubDate>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[Cynical]]></category>
		<category><![CDATA[euphamisms]]></category>
		<category><![CDATA[Funny because it's true]]></category>
		<category><![CDATA[Tech]]></category>
		<guid isPermaLink="false">https://blog.wadetregaskis.com/?p=4646</guid>

					<description><![CDATA[Actionable, a. A veiled proxy for the speaker&#8217;s laziness. Used as in &#8220;this isn&#8217;t actionable&#8221; to mean one or more of: Cannot Reproduce, n. A versatile term, often found as a formal state in bug / ticket tracking systems, which can mean various things: Crowdsourcing, n. The practice of making other people do your work&#8230; <a class="read-more-link" href="https://wadetregaskis.com/the-devils-tech-dictionary/" data-wpel-link="internal">Read more</a>]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Actionable, a.</h2>



<p>A veiled proxy for the speaker&#8217;s laziness.  Used as in &#8220;this isn&#8217;t actionable&#8221; to mean one or more of:</p>



<ul class="tight wp-block-list">
<li>I don&#8217;t understand and I don&#8217;t want to.</li>



<li>This looks like it takes effort and I don&#8217;t want to.</li>



<li>I don&#8217;t like this and I don&#8217;t want to.</li>
</ul>



<h2 class="wp-block-heading">Cannot Reproduce, n.</h2>



<p>A versatile term, often found as a formal state in bug / ticket tracking systems, which can mean various things:</p>



<ul class="tight wp-block-list">
<li>I tried vaguely, once, to reproduce this, carefully ignoring any detailed instructions you provided, and I didn&#8217;t immediately see a problem.</li>



<li>I successfully ignored this for long enough that the reporter gave up (or died of old age) so now I can pretend it magically went away by itself.</li>



<li>I couldn&#8217;t be bothered even trying to reproduce this, which is a form of &#8220;cannot&#8221;, right?</li>
</ul>



<h2 class="wp-block-heading">Crowdsourcing, n.</h2>



<p>The practice of making other people do your work for you without compensation or credit.</p>



<p>See also the observation that none of us are as dumb as all of us are.</p>



<h2 class="wp-block-heading">Free to play / Freemium, a.</h2>



<p>A sales method used when presenting the true cost up front would result in no sales.</p>



<p>Commonly used in some industries outside of tech as well, such as drug dealing.</p>



<h2 class="wp-block-heading">Full Stack Developer, n.</h2>



<p>Someone who programs exclusively in JavaScript and once wrote a query for MySQL.</p>



<h2 class="wp-block-heading">Gamify, v.</h2>



<p>To make a product less enjoyable by inserting unnecessary casino mechanics and condescending interstitial animations.</p>



<h2 class="wp-block-heading">GPL, n.</h2>



<p>A passive-aggressive way of open-sourcing your software without actually making it free (as in freedom).</p>



<p>(also, AGPL, even more so)</p>



<h2 class="wp-block-heading">Levandowski, n.</h2>



<p>A unit of money equal to approximately $80M USD.  Used especially in contexts where a purchase has deeply negative actual value.  Derives from the hiring bonuses and other promised compensation required to recruit a single <a href="https://en.wikipedia.org/wiki/Anthony_Levandowski" data-type="link" data-id="https://en.wikipedia.org/wiki/Anthony_Levandowski" data-wpel-link="external" target="_blank" rel="external noopener">Anthony Levandowski</a>.</p>



<ul class="tight wp-block-list">
<li>Often used in hiring negotiations to establish compensation expectations, e.g. &#8220;I don&#8217;t switch companies for less than three Levandowskis.&#8221;</li>



<li>Can be used to refer cryptically to a huge future cost, e.g. &#8220;That&#8217;s only one Levandowski now, but also in future.&#8221;</li>
</ul>



<h2 class="wp-block-heading">MVP (Minimum Viable Product), n.</h2>



<p>A trump card in design discussions to unilaterally reject anything that is inconvenient, hard, or from someone other than one&#8217;s self.  e.g.:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Mohammed: For our banking app, let&#8217;s add the ability to generate photos of people with AI.</p>



<p>Mary: We should put some safeguards in place to prevent deepfakes.</p>



<p>Mohammed: Mary, we&#8217;re working on the MVP right now, we need to stay focused.</p>
</blockquote>



<h2 class="wp-block-heading">Offline, a.</h2>



<p>As in, &#8220;let&#8217;s talk about that offline&#8221;.</p>



<p>May be used with any of several meanings, the ambiguity of which is usually intentional:</p>



<ul class="tight wp-block-list">
<li>To shift communication from the real world to the online world, without any apparent sense of irony.</li>



<li>To dismiss something with prejudice, under the curious social contract that no one is allowed to call you out on it.</li>



<li>To relatively tacitly state that you do not like someone&#8217;s input and want them to shut up.</li>
</ul>



<h2 class="wp-block-heading">Prototype, n.</h2>



<p>Software created by ignoring all the development best practices that are inconvenient, such as unit testing and accepting input from others.</p>



<h2 class="wp-block-heading">Technical Debt, n.</h2>



<p>Liabilities in software design and implementation due to poor choices and unrealistic deadlines, that managers inexplicably believe &#8211; in the face of all evidence from every software project ever &#8211; is a limitless line of free credit.</p>



<h2 class="wp-block-heading">UX Designer, n.</h2>



<p>Self-selected job title for pretentious UI designers.</p>



<p>Beware of using the term &#8220;UI&#8221; in front of an afflicted person, as it triggers a compulsory thirty minute monologue on the difference between &#8220;UI&#8221; and &#8220;UX&#8221; design, made particularly excruciating by the fact that there is no difference.</p>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-dots"/>



<h2 class="wp-block-heading has-text-align-center">Further reading</h2>



<div style="height:0.1em" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-text-align-center"><a href="https://www.theguardian.com/us-news/2019/jun/26/how-to-speak-silicon-valley-decoding-tech-bros-from-microdosing-to-privacy" data-wpel-link="external" target="_blank" rel="external noopener">How to speak Silicon Valley: 53 essential tech-bro terms explained</a>.</p>



<p class="has-text-align-center"><a href="https://www.gutenberg.org/ebooks/972" data-wpel-link="external" target="_blank" rel="external noopener">The Devil&#8217;s Dictionary</a> by <a href="https://en.wikipedia.org/wiki/Ambrose_Bierce" data-wpel-link="external" target="_blank" rel="external noopener">Ambrose Bierce</a> (<a href="https://en.wikipedia.org/wiki/The_Devil%27s_Dictionary" data-wpel-link="external" target="_blank" rel="external noopener">context</a>).</p>



<div style="height:1em" aria-hidden="true" class="wp-block-spacer"></div>
]]></content:encoded>
					
					<wfw:commentRss>https://wadetregaskis.com/the-devils-tech-dictionary/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4646</post-id>	</item>
		<item>
		<title>A perfect little feature: Universal Clipboard</title>
		<link>https://wadetregaskis.com/a-perfect-little-feature-universal-clipboard/</link>
					<comments>https://wadetregaskis.com/a-perfect-little-feature-universal-clipboard/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Thu, 01 Feb 2024 19:27:48 +0000</pubDate>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[AirDrop]]></category>
		<category><![CDATA[AirPlay]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Apple Watch Unlock]]></category>
		<category><![CDATA[Continuity]]></category>
		<category><![CDATA[Happy]]></category>
		<category><![CDATA[SMS Forwarding]]></category>
		<category><![CDATA[Universal Clipboard]]></category>
		<guid isPermaLink="false">https://wadetregaskis.com/?p=7639</guid>

					<description><![CDATA[Perhaps in karmic balance of my previous post critical of one of Apple&#8217;s APIs, I want to highlight an Apple OS feature that I use every day, that ironically is so simple, obvious, and reliable that I almost never stop to appreciate it. Universal Clipboard basically just means you can copy something on one device&#8230; <a class="read-more-link" href="https://wadetregaskis.com/a-perfect-little-feature-universal-clipboard/" data-wpel-link="internal">Read more</a>]]></description>
										<content:encoded><![CDATA[
<p>Perhaps in karmic balance of <a href="https://wadetregaskis.com/bad-api-example-filemanagers-urlforinappropriateforcreate/" data-wpel-link="internal">my previous post</a> critical of one of Apple&#8217;s APIs, I want to highlight an Apple OS feature that I use every day, that ironically is so simple, obvious, and reliable that I almost never stop to appreciate it.</p>



<p><a href="https://support.apple.com/en-us/102430" data-wpel-link="external" target="_blank" rel="external noopener">Universal Clipboard</a> basically just means you can copy something on one device and paste it on another, as long as they&#8217;re physically near each other and signed into the same Apple ID.  <a href="https://www.youtube.com/watch?v=XSNqTgd9SXU" data-wpel-link="external" target="_blank" rel="external noopener">There is no step 3</a>.</p>



<p>It&#8217;s such a beautiful feature, in concept and execution.  Admittedly most of the time I use it merely to shuffle authentication codes from my iPhone to my Mac, but still &#8211; I love not having to temporarily memorise arbitrary numbers and then type them in manually.</p>



<p>I think what really elevates it to perfection is that <em>it works</em>.  It sounds like such a vapid point, but it really makes all the difference.  Nominally Universal Clipboard is just one of a family of similar features, under the <a href="https://support.apple.com/en-au/102426" data-wpel-link="external" target="_blank" rel="external noopener">Continuity</a> moniker, but it&#8217;s the only one that actually works reliably and predictably.  <em>The only one!</em></p>



<p>Many of the other Continuity features are similarly great in concept, but just don&#8217;t work reliably.  <a href="https://support.apple.com/en-us/102545" data-wpel-link="external" target="_blank" rel="external noopener">SMSes</a> sometimes don&#8217;t sync to my Macs.  <a href="https://support.apple.com/en-au/102661" data-wpel-link="external" target="_blank" rel="external noopener">AirPlay</a> sometimes just won&#8217;t connect, or the video quality is comically bad.  <a href="https://support.apple.com/en-us/102442" data-wpel-link="external" target="_blank" rel="external noopener">Unlocking my Macs with my Watch</a> is a guessing game as to whether it feels like working today.  <a href="https://support.apple.com/en-kz/guide/mac-help/mh35868/mac" data-wpel-link="external" target="_blank" rel="external noopener">AirDrop</a> is so fussy and unreliable that it actually gives me anxiety if I even think of using it.</p>



<p>I wish Apple&#8217;s products had more features like Universal Clipboard.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wadetregaskis.com/a-perfect-little-feature-universal-clipboard/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<media:content url="https://wadetregaskis.com/wp-content/uploads/2024/02/Universal-Clipboard.webp" medium="image" />
<post-id xmlns="com-wordpress:feed-additions:1">7639</post-id>	</item>
		<item>
		<title>-fomit-frame-pointer</title>
		<link>https://wadetregaskis.com/fomit-frame-pointer/</link>
					<comments>https://wadetregaskis.com/fomit-frame-pointer/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Wed, 24 Jan 2024 22:30:30 +0000</pubDate>
				<category><![CDATA[Ancient History]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[-fomit-frame-pointer]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[ARM]]></category>
		<category><![CDATA[backtracing]]></category>
		<category><![CDATA[frame pointers]]></category>
		<category><![CDATA[i386]]></category>
		<category><![CDATA[Instruments]]></category>
		<category><![CDATA[Intel Core Duo]]></category>
		<category><![CDATA[Merom]]></category>
		<category><![CDATA[Shark]]></category>
		<category><![CDATA[Swift Forums]]></category>
		<category><![CDATA[x86-64]]></category>
		<category><![CDATA[Yonah]]></category>
		<guid isPermaLink="false">https://wadetregaskis.com/?p=7536</guid>

					<description><![CDATA[This is an elaboration of a post I made in a Swift Forums thread, SE-0419: Swift Backtracing API. The question was raised whether an official Swift backtracer should try to support code that doesn&#8217;t use frame pointers. Which immediately raised the question &#8211; in my mind &#8211; of if anyone is still using the &#8220;optimisation&#8221;&#8230; <a class="read-more-link" href="https://wadetregaskis.com/fomit-frame-pointer/" data-wpel-link="internal">Read more</a>]]></description>
										<content:encoded><![CDATA[
<p>This is an elaboration of <a href="https://forums.swift.org/t/se-0419-swift-backtracing-api/69595/13" data-wpel-link="external" target="_blank" rel="external noopener">a post I made</a> in a Swift Forums thread, <a href="https://forums.swift.org/t/se-0419-swift-backtracing-api/69595" data-wpel-link="external" target="_blank" rel="external noopener">SE-0419: Swift Backtracing API</a>.</p>



<p>The question was raised whether an official Swift backtracer should try to support code that doesn&#8217;t use frame pointers.  Which immediately raised the question &#8211; in my mind &#8211; of if anyone is still using the &#8220;optimisation&#8221; of omitting frame pointers, anyway.  And perhaps more importantly, whether they <em>should</em> still be omitting frame pointers.</p>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<h4 class="wp-block-heading">What is a frame pointer?</h4>



<p>A pointer to a stack frame, <em>held in a well-known location</em>.  That location can be in the stack itself (forming a linked-list of the stack frames) or in registers (e.g. the x29 register on AArch64, or RBP register on x86-64).</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="806" height="541" src="https://wadetregaskis.com/wp-content/uploads/2024/01/Frame-pointers-explanatory-diagram.webp" alt="Explanatory diagram of frame pointers, showing a link from the x86-64 register %rbp to the start of the current frame, which holds the prior value of %rbp that points to the top of the previous frame, and so on." class="wp-image-7549" srcset="https://wadetregaskis.com/wp-content/uploads/2024/01/Frame-pointers-explanatory-diagram.webp 806w, https://wadetregaskis.com/wp-content/uploads/2024/01/Frame-pointers-explanatory-diagram-256x172.webp 256w, https://wadetregaskis.com/wp-content/uploads/2024/01/Frame-pointers-explanatory-diagram-512x344.webp 512w, https://wadetregaskis.com/wp-content/uploads/2024/01/Frame-pointers-explanatory-diagram@2x.webp 1612w" sizes="auto, (max-width: 806px) 100vw, 806px" /><figcaption class="wp-element-caption">Diagram <a href="https://fedoraproject.org/wiki/Changes/fno-omit-frame-pointer" data-wpel-link="external" target="_blank" rel="external noopener">courtesy of the Fedora Project</a> (specific author unknown).</figcaption></figure>
</div>


<p>The controversial part &#8211; insofar as there is any controversy &#8211; is in dedicating a CPU register to hold a frame pointer (to point to the start of the current stack frame).  It&#8217;s super convenient for a lot of things, but particularly for debuggers and profilers as it gives them a reliable and very fast way to find the top of the current callstack.  But it&#8217;s not <em>technically</em> required for the program to function.</p>



<p>No live CPU architectures, that I&#8217;m aware of, have a dedicated hardware register for frame pointers.  So you nominally have to &#8220;give up&#8221; a GPR (general-purpose register) in order to have a frame pointer.</p>
</div></div>



<p><a href="https://github.com/FranzBusch" data-wpel-link="external" target="_blank" rel="external noopener">Franz Busch</a> <a href="https://forums.swift.org/t/se-0419-swift-backtracing-api/69595/12" data-wpel-link="external" target="_blank" rel="external noopener">pointed out</a> that some notable software <em>still</em> ships with frame pointers omitted, e.g. apparently some major Linux distros.  I suspect it&#8217;s merely some inertia (or simply oversight) that&#8217;s delaying getting people off of that old crutch.  I&#8217;m not remotely surprised that some big Linux distros are in this bucket &#8211; they tend to be absurdly conservative and slow to change<sup data-fn="6e48e51a-6c80-46a9-b2d0-4729eb123f42" class="fn"><a href="#6e48e51a-6c80-46a9-b2d0-4729eb123f42" id="6e48e51a-6c80-46a9-b2d0-4729eb123f42-link">1</a></sup>.  And it&#8217;s mind-boggling how much vitriol restoring frame pointers generates from <a href="https://news.ycombinator.com/item?id=34632677" data-wpel-link="external" target="_blank" rel="external noopener">the peanut gallery</a>.</p>



<p>From watches to servers these days &#8211; and frankly most of the embedded space, since it&#8217;s mostly <a href="https://en.wikipedia.org/wiki/ARM_architecture_family#32-bit_architecture" data-wpel-link="external" target="_blank" rel="external noopener">ARM</a> &#8211; everything generally has an ISA with sufficiently many GPRs to negate any big benefit from omitting frame pointers.  Giving up one of 31 GPRs (for e.g. <a href="https://en.wikipedia.org/wiki/AArch64" data-wpel-link="external" target="_blank" rel="external noopener">AArch64</a>, the dominant CPU architecture family today) is pretty insignificant for the vast majority of code, because almost nothing actually uses all 31 GPRs anyway.  It only makes a significant difference<sup data-fn="188c96e5-8b0d-4e30-84f9-989822dfd065" class="fn"><a href="#188c96e5-8b0d-4e30-84f9-989822dfd065" id="188c96e5-8b0d-4e30-84f9-989822dfd065-link">2</a></sup> when the CPU design is register-starved to begin with, like <a href="https://en.wikipedia.org/wiki/IA-32" data-wpel-link="external" target="_blank" rel="external noopener">i386</a>.  And those architectures are largely dead, in museums, or restricted to <em>very</em> tiny CPUs as used in some microcontrollers (&#8220;embedded&#8221; systems).</p>



<p>Even back when i386 et al were still a concern, the proponents of <code>-fomit-frame-pointer</code> often argued not on the potential merits of the trade-off, but rather that it was a &#8220;free&#8221; performance boost, so even if it was only by a percentage point or two, why not?  They of course were either naively or deliberately overlooking the detrimental effects.</p>



<p>There may still be software for which omitting frame pointers is the right trade-off, even on modern CPUs.  But I find it hard to believe there&#8217;s <em>enough</em> cases like that to warrant accomodation in standard tools.</p>



<h3 class="wp-block-heading">A brief trip back to Apple circa 2007</h3>



<p>Back in the brief window of time when i386 was a thing for the Mac (32-bit Intel, e.g. <a href="https://en.wikipedia.org/wiki/Intel_Core#Core" data-wpel-link="external" target="_blank" rel="external noopener">Core Duos</a><sup data-fn="b67d5fbb-7aa1-4c29-bc93-1341ac28771a" class="fn"><a href="#b67d5fbb-7aa1-4c29-bc93-1341ac28771a" id="b67d5fbb-7aa1-4c29-bc93-1341ac28771a-link">3</a></sup> as used in <a href="https://everymac.com/systems/apple/macbook/specs/macbook_1.83.html" data-wpel-link="external" target="_blank" rel="external noopener">the first MacBooks</a>), I was at Apple in the Performance Tools teams (<a href="https://web.archive.org/web/20100124025810/https://developer.apple.com/tools/sharkoptimize.html" data-wpel-link="external" target="_blank" rel="external noopener">Shark</a> &amp; <a href="https://help.apple.com/instruments/mac/current/#/dev7b09c84f5" data-wpel-link="external" target="_blank" rel="external noopener">Instruments</a>), and it was a frustration of ours that&nbsp;<code>-fomit-frame-pointer</code>&nbsp;<em>was</em>&nbsp;a noticeable performance-booster on the register-starved i386<sup data-fn="29afcd2a-0449-44c0-a274-0b06c9ddce8a" class="fn"><a href="#29afcd2a-0449-44c0-a274-0b06c9ddce8a" id="29afcd2a-0449-44c0-a274-0b06c9ddce8a-link">4</a></sup> architecture<sup data-fn="e0287bfa-c0ab-44b3-8fef-812983216ca6" class="fn"><a href="#e0287bfa-c0ab-44b3-8fef-812983216ca6" id="e0287bfa-c0ab-44b3-8fef-812983216ca6-link">5</a></sup>, so it was hard to just bluntly tell people not to use it… yet, by breaking the ability to profile their code, people who used it often left even&nbsp;<em>bigger</em>&nbsp;performance gains on the table (or otherwise had to invest much more labour into identifying &amp; resolving performance problems).</p>



<p>At one point there was even an Apple-internal debate about whether to abandon kernel-based profiling in favour of user-space profiling<sup data-fn="d563aa47-98d0-4761-9c0f-63194d9f7d20" class="fn"><a href="#d563aa47-98d0-4761-9c0f-63194d9f7d20" id="d563aa47-98d0-4761-9c0f-63194d9f7d20-link">6</a></sup> because <a href="https://developers.redhat.com/articles/2023/07/31/frame-pointers-untangling-unwinding#where_do_frame_pointers_fit_into_this_" data-wpel-link="external" target="_blank" rel="external noopener">implementing backtracing without frame pointers is&nbsp;<em>possible</em></a>&nbsp;but <a href="https://rwmj.wordpress.com/2023/02/14/frame-pointers-vs-dwarf-my-verdict/" data-wpel-link="external" target="_blank" rel="external noopener">very expensive</a> and requires masses of debug metadata (e.g. <a href="https://en.wikipedia.org/wiki/DWARF" data-wpel-link="external" target="_blank" rel="external noopener">DWARF</a>), making it highly unpalatable to put in the kernel. Thankfully there were too many obvious problems with user-space profiling, so that notion never really got its legs, and then x86-64 finally arrived<sup data-fn="3ad966e2-a3a1-41ee-a13a-84e58f5e8981" class="fn"><a href="#3ad966e2-a3a1-41ee-a13a-84e58f5e8981" id="3ad966e2-a3a1-41ee-a13a-84e58f5e8981-link">7</a></sup> and it was mooted.</p>


<ol class="wp-block-footnotes"><li id="6e48e51a-6c80-46a9-b2d0-4729eb123f42">e.g. <a href="https://wadetregaskis.com/how-to-install-imagemagick-7-for-wordpress-under-plesk-obsidian-on-ubuntu-22-04/" data-wpel-link="internal">Ubuntu <em>still</em> not officially supporting ImageMagick 7</a> even though it&#8217;s been out for nearly a decade. <a href="#6e48e51a-6c80-46a9-b2d0-4729eb123f42-link" aria-label="Jump to footnote reference 1">↩︎</a></li><li id="188c96e5-8b0d-4e30-84f9-989822dfd065">Aside from the question of register space, there <em>is</em> additional cost to implementing frame pointers, as additional instructions are required around function entry &amp; exit in order to maintain the frame pointers &#8211; to push &amp; pop them off the stack, etc.  The cost of those is usually insignificant &#8211; especially in <a href="https://en.wikipedia.org/wiki/Superscalar_processor" data-wpel-link="external" target="_blank" rel="external noopener">superscalar</a> microarchitectures, as is the norm &#8211; so that aspect is not typically the focus of the controversy. <a href="#188c96e5-8b0d-4e30-84f9-989822dfd065-link" aria-label="Jump to footnote reference 2">↩︎</a></li><li id="b67d5fbb-7aa1-4c29-bc93-1341ac28771a">Tangentially, I vaguely recall us Apple engineers kinda hating the Core Duo (Yonah), or more specifically Apple&#8217;s choice to use it.  Apple used them only for a tiny window of time, from May 2006 to about November 2006 when the Core 2 Duo (Merom) finally replaced them across the line.  I don&#8217;t recall <em>all</em> the reasons that the Core 2 Duo was superior, but they included that Core 2 Duo corrected the 32-bit regression (for Macs) and performed <em>much</em> better.  Anytime Apple releases a Mac with a dud processor in it, like those Core Duos, a lot of Apple engineers die a little inside because they know they&#8217;re going to be stuck supporting the damn things for many years even after the last cursed one rolls off the assembly line.<br><br>It&#8217;s still a mystery to me why Apple rushed the Intel transition in this regard.  They only had to wait six more months and they could have had a clean start on Intel, with no 32-bit to burden on them for the next seven years. <a href="#b67d5fbb-7aa1-4c29-bc93-1341ac28771a-link" aria-label="Jump to footnote reference 3">↩︎</a></li><li id="29afcd2a-0449-44c0-a274-0b06c9ddce8a">Why do I keep calling it &#8220;i386&#8221;?  Isn&#8217;t it officially &#8220;IA-32&#8221;?  Well, yes, but that&#8217;s (a) only retroactively and (b) only ever used by Intel.  Though I guess &#8220;x86&#8221; is probably the more common name?  Yet &#8220;i386&#8221; is in my mental muscle memory.  Maybe that&#8217;s just how we used to refer to it, at Apple?  Maybe just because that&#8217;s the name used in gcc / clang arch &amp; target flags?<br><br>Incidentally, <code>clang -arch i386 -print-supported-cpus</code> on my M2 MacBook Air still lists Yonah (those damn Core Duos) as supported.  Gah!  They won&#8217;t die! 😆 <a href="#29afcd2a-0449-44c0-a274-0b06c9ddce8a-link" aria-label="Jump to footnote reference 4">↩︎</a></li><li id="e0287bfa-c0ab-44b3-8fef-812983216ca6">It&#8217;s funny how the Intel transition is now heralded as being amazing and how much better Intel Macs were than PPC Macs, but for a while there we lost a <em>lot</em> of things, like a 64-bit architecture, an excellent SIMD implementation, and the notion of more than [effectively] six GPRs. <img loading="lazy" decoding="async" width="20" height="20" src="https://emoji.discourse-cdn.com/apple/stuck_out_tongue_closed_eyes.png?v=12" alt=":stuck_out_tongue_closed_eyes:"> <a href="#e0287bfa-c0ab-44b3-8fef-812983216ca6-link" aria-label="Jump to footnote reference 5">↩︎</a></li><li id="d563aa47-98d0-4761-9c0f-63194d9f7d20">There were at the time already some Apple developer tools that did user-space profiling, most notably Sampler (now a niche feature in Activity Monitor) and early versions of Instruments (in fact Instruments <em>still</em> has the Sampler plug-in which does this, although I can&#8217;t really fathom why anyone would ever intentionally use it over the Time Profiler plug-in). <a href="#d563aa47-98d0-4761-9c0f-63194d9f7d20-link" aria-label="Jump to footnote reference 6">↩︎</a></li><li id="3ad966e2-a3a1-41ee-a13a-84e58f5e8981">In the sense of <em>all</em> Macs adopting it, not just the Mac Pro.  It was easy to ignore i386 at that point because it was then all but officially a dead architecture as far as Apple were concerned. <a href="#3ad966e2-a3a1-41ee-a13a-84e58f5e8981-link" aria-label="Jump to footnote reference 7">↩︎</a></li></ol>]]></content:encoded>
					
					<wfw:commentRss>https://wadetregaskis.com/fomit-frame-pointer/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<media:content url="https://wadetregaskis.com/wp-content/uploads/2024/01/Frame-pointers-explanatory-diagram.webp" medium="image" />
<post-id xmlns="com-wordpress:feed-additions:1">7536</post-id>	</item>
		<item>
		<title>Private Relay is not currently supported in this region</title>
		<link>https://wadetregaskis.com/private-relay-is-not-currently-supported-in-this-region/</link>
					<comments>https://wadetregaskis.com/private-relay-is-not-currently-supported-in-this-region/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Tue, 23 Jan 2024 23:40:18 +0000</pubDate>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[Apple Private Relay]]></category>
		<category><![CDATA[Bugs!]]></category>
		<guid isPermaLink="false">https://wadetregaskis.com/?p=7528</guid>

					<description><![CDATA[I&#8217;ve been getting this notification every morning, on both my Macs, for several days now. System Settings says Private Relay is active like normal, even so. Yet Mail refuses to load any images in emails. Yet Safari works fine. So it&#8217;s not at all apparent if Private Relay actually is working or not. Sometime during&#8230; <a class="read-more-link" href="https://wadetregaskis.com/private-relay-is-not-currently-supported-in-this-region/" data-wpel-link="internal">Read more</a>]]></description>
										<content:encoded><![CDATA[
<p>I&#8217;ve been getting this notification every morning, on both my Macs, for several days now.  System Settings says Private Relay is active like normal, even so.  Yet Mail refuses to load any images in emails.  Yet Safari works fine.  So it&#8217;s not at all apparent if Private Relay actually is working or not.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="582" height="476" src="https://wadetregaskis.com/wp-content/uploads/2024/01/Private-Relay-in-Settings.webp" alt="Screenshot of the macOS 14 Sonoma iCloud Private Relay settings dialog, showing it as ostensibly enabled even when it is not." class="wp-image-7556" srcset="https://wadetregaskis.com/wp-content/uploads/2024/01/Private-Relay-in-Settings.webp 582w, https://wadetregaskis.com/wp-content/uploads/2024/01/Private-Relay-in-Settings-256x209.webp 256w, https://wadetregaskis.com/wp-content/uploads/2024/01/Private-Relay-in-Settings-512x419.webp 512w, https://wadetregaskis.com/wp-content/uploads/2024/01/Private-Relay-in-Settings@2x.webp 1164w" sizes="auto, (max-width: 582px) 100vw, 582px" /><figcaption class="wp-element-caption">Is Private Relay enabled?  Who knows?!  The Settings app thinks it is, even when the rest of the system thinks it is not.</figcaption></figure>
</div>


<p>Sometime during each day I get a follow-up notification telling me that Private Relay is now active.  Even though by all appearances it already was.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="370" height="96" src="https://wadetregaskis.com/wp-content/uploads/2024/01/Private-Relay-is-Active.webp" alt="Screenshot of a macOS notification titled &quot;Private Relay is Active&quot;, with the text &quot;Your IP address is hidden and your Safari browsing activity is protected&quot;." class="wp-image-7554" srcset="https://wadetregaskis.com/wp-content/uploads/2024/01/Private-Relay-is-Active.webp 370w, https://wadetregaskis.com/wp-content/uploads/2024/01/Private-Relay-is-Active-256x66.webp 256w, https://wadetregaskis.com/wp-content/uploads/2024/01/Private-Relay-is-Active@2x.webp 740w" sizes="auto, (max-width: 370px) 100vw, 370px" /></figure>
</div>


<p>This is frustrating on multiple levels &#8211; obviously there&#8217;s the question of why this notification is appearing to begin with, and lying<sup data-fn="7e1d4d3f-9dfc-4bdc-84cb-8d4b6f26630e" class="fn"><a href="#7e1d4d3f-9dfc-4bdc-84cb-8d4b6f26630e" id="7e1d4d3f-9dfc-4bdc-84cb-8d4b6f26630e-link">1</a></sup> about the support status of Private Relay, but it&#8217;s <em>also</em> concerning that it&#8217;s sending mixed messages about whether Private Relay is working or not.</p>


<ol class="wp-block-footnotes"><li id="7e1d4d3f-9dfc-4bdc-84cb-8d4b6f26630e">I mean, I <em>assume</em> it&#8217;s lying about the status &#8211; I suppose it&#8217;s possible that Apple, headquartered in the San Francisco bay area, might have revoked support for Private Relay in their own region.  Seems like an odd decision, though. <a href="#7e1d4d3f-9dfc-4bdc-84cb-8d4b6f26630e-link" aria-label="Jump to footnote reference 1">↩︎</a></li></ol>]]></content:encoded>
					
					<wfw:commentRss>https://wadetregaskis.com/private-relay-is-not-currently-supported-in-this-region/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<media:content url="https://wadetregaskis.com/wp-content/uploads/2024/01/Private-Relay-Not-Supported.webp" medium="image" />
<post-id xmlns="com-wordpress:feed-additions:1">7528</post-id>	</item>
		<item>
		<title>The most unpopular popular websites</title>
		<link>https://wadetregaskis.com/the-most-unpopular-popular-websites/</link>
					<comments>https://wadetregaskis.com/the-most-unpopular-popular-websites/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Sat, 20 Jan 2024 05:08:17 +0000</pubDate>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[Bing]]></category>
		<category><![CDATA[Daring Fireball]]></category>
		<category><![CDATA[DuckDuckGo]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Search]]></category>
		<category><![CDATA[John Gruber]]></category>
		<category><![CDATA[Kagi]]></category>
		<category><![CDATA[Pinterest]]></category>
		<category><![CDATA[Wikipedia]]></category>
		<guid isPermaLink="false">https://wadetregaskis.com/?p=7426</guid>

					<description><![CDATA[Tonight I decided to give Kagi a try, after hearing John Gruber mention it a few times on Daring Fireball. I&#8217;ve used a mix of DuckDuckGo and Bing for over a decade now, and occasionally will still try Google in desperation. What I&#8217;ve noticed is a decade-long trend &#8211; accelerating in the last year or&#8230; <a class="read-more-link" href="https://wadetregaskis.com/the-most-unpopular-popular-websites/" data-wpel-link="internal">Read more</a>]]></description>
										<content:encoded><![CDATA[
<p>Tonight I decided to give Kagi a try, after hearing <a href="https://en.wikipedia.org/wiki/John_Gruber" data-wpel-link="external" target="_blank" rel="external noopener">John Gruber</a> <a href="https://daringfireball.net/linked/2024/01/19/bray-google-kagi" data-wpel-link="external" target="_blank" rel="external noopener">mention</a> <a href="https://daringfireball.net/linked/2023/05/22/neeva-shuts-down" data-wpel-link="external" target="_blank" rel="external noopener">it</a> <a href="https://daringfireball.net/linked/2023/11/14/masnick-google-better" data-wpel-link="external" target="_blank" rel="external noopener">a</a> <a href="https://daringfireball.net/linked/2023/10/12/cue-apple-google" data-wpel-link="external" target="_blank" rel="external noopener">few</a> <a href="https://daringfireball.net/2008/09/podcasters_rejection" data-wpel-link="external" target="_blank" rel="external noopener">times</a> on <a href="https://daringfireball.net" data-wpel-link="external" target="_blank" rel="external noopener">Daring Fireball</a>.  I&#8217;ve used a mix of DuckDuckGo and Bing <a href="https://wadetregaskis.com/do-you-mean-what-you-mean/" data-wpel-link="internal">for over a decade now</a>, and occasionally will still try Google in desperation<sup data-fn="e4dbde6a-2d84-4002-a2cc-2d42ffcc2e90" class="fn"><a href="#e4dbde6a-2d84-4002-a2cc-2d42ffcc2e90" id="e4dbde6a-2d84-4002-a2cc-2d42ffcc2e90-link">1</a></sup>.  What I&#8217;ve noticed is a decade-long trend &#8211; accelerating in the last year or two &#8211; of search quality declining.  I&#8217;m apparently not the <a href="https://www.theatlantic.com/technology/archive/2023/09/google-search-size-usefulness-decline/675409/" data-wpel-link="external" target="_blank" rel="external noopener">only</a> <a href="https://downloads.webis.de/publications/papers/bevendorff_2024a.pdf" data-wpel-link="external" target="_blank" rel="external noopener">one</a>.</p>



<p>At first it was just Google that went to shit, but now even Bing &amp; DuckDuckGo are increasingly filled with SEO spam, garbage results, and ads.  Worst of all, they&#8217;re increasingly unwilling to address my <em>actual</em> queries, preferring instead to serve up uselessly generic results and insulting clickbait.</p>



<p>Is Kagi any better?  Hard to say; I only just started playing with it.  It looks promising at the outset, but only time will tell.</p>



<p>Kagi does have at least one incredibly non-novel yet unique feature:  the ability to permanently customise the ranking of each website in your results.  <em>Personalised search done the right way</em>.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="417" height="694" src="https://wadetregaskis.com/wp-content/uploads/2024/01/Kagi-Search-result-information-settings-dialog.webp" alt="Screenshot of the information &amp; settings dialog for medium.com on Kagi Search" class="wp-image-7434" srcset="https://wadetregaskis.com/wp-content/uploads/2024/01/Kagi-Search-result-information-settings-dialog.webp 417w, https://wadetregaskis.com/wp-content/uploads/2024/01/Kagi-Search-result-information-settings-dialog-154x256.webp 154w, https://wadetregaskis.com/wp-content/uploads/2024/01/Kagi-Search-result-information-settings-dialog-308x512.webp 308w, https://wadetregaskis.com/wp-content/uploads/2024/01/Kagi-Search-result-information-settings-dialog@2x.webp 834w" sizes="auto, (max-width: 417px) 100vw, 417px" /></figure>
</div>


<p>You can give a website a nudge up or down, or take it to the extreme by pinning or blocking the website entirely.  <em>This</em> is what actually got me to sign up for Kagi.  I can&#8217;t tell you how many times I&#8217;ve looked at Bing, DuckDuckGo, or Google search results and said &#8220;for fuck&#8217;s sake, why do you even allow this website in your index?&#8221;.  Over and over again, the top page of results is clogged with those rip-off merchants that clone e.g. Wikipedia or StackOverflow, and just stuff them full of ads and trackers.  I genuinely can&#8217;t fathom how these websites, clearly commercialising industrial-scale copyright infringement, can persist.</p>



<p>We&#8217;ll come back to this feature in a minute.</p>



<h2 class="wp-block-heading">Kagi Search Stats</h2>



<p>While playing with Kagi, I incidentally found their <a href="https://kagi.com/stats" data-wpel-link="external" target="_blank" rel="external noopener">Search Stats</a>.  Which are interesting for several reasons &#8211; for a start, as I write they have just 19,468 &#8220;members&#8221; &#8211; which I take to mean <em>paying</em> customers &#8211; which seems crazy tiny even for a search engine which has essentially <a href="https://blog.kagi.com/kagi-orion-public-beta" data-wpel-link="external" target="_blank" rel="external noopener">only been around for seven months</a>, given they&#8217;ve received some high-profile evangelism (such as the aforementioned by John Gruber).  At least they&#8217;re growing.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="974" height="598" src="https://wadetregaskis.com/wp-content/uploads/2024/01/Kagi-Search-Stats-Members.webp" alt="Screenshot of the Kagi Search Stats web page showing the Member Count section (19,468 members), with a line graph showing a steady increase in members between January 7th and January 20th, of about 500 new members in total." class="wp-image-7431" srcset="https://wadetregaskis.com/wp-content/uploads/2024/01/Kagi-Search-Stats-Members.webp 974w, https://wadetregaskis.com/wp-content/uploads/2024/01/Kagi-Search-Stats-Members-256x157.webp 256w, https://wadetregaskis.com/wp-content/uploads/2024/01/Kagi-Search-Stats-Members-512x314.webp 512w, https://wadetregaskis.com/wp-content/uploads/2024/01/Kagi-Search-Stats-Members@2x.webp 1948w" sizes="auto, (max-width: 974px) 100vw, 974px" /></figure>
</div>


<p>But perhaps the most interesting is what they call &#8220;Domain insights&#8221;, which is a polite way of saying &#8220;best &amp; worst big websites&#8221; &#8211; at least, as expressed by Kagi&#8217;s 19,468 members.  This is the summary of all those ranking customisations Kagi&#8217;s users have made.  As such, I think it&#8217;s an interesting insight into what people consider <em>good</em> websites as opposed to <em>popular</em>.</p>



<p>On the positive (most-favoured) side, there&#8217;s not a lot of surprises.  Wikipedia tops the list by a mile &#8211; specifically the <em>English</em> version of Wikipedia, suggesting Kagi might have a very U.S.-centric user base &#8211; followed by a variety developer-centric websites, with Reddit being really the only other exception.  As one might expect, the early adopters of Kagi are computer geeks.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="422" height="605" src="https://wadetregaskis.com/wp-content/uploads/2024/01/Kagi-Search-Stats-Most-pinned-websites.webp" alt="Screenshot of the Kagi Search Stats page showing Most Pinned websites: (in descending order) Wikipedia, developer.mozilla.org, news.ycombinator.com, reddit.com, stackoverflow.com, wiki.archlinux.org, and github.com." class="wp-image-7440" srcset="https://wadetregaskis.com/wp-content/uploads/2024/01/Kagi-Search-Stats-Most-pinned-websites.webp 422w, https://wadetregaskis.com/wp-content/uploads/2024/01/Kagi-Search-Stats-Most-pinned-websites-179x256.webp 179w, https://wadetregaskis.com/wp-content/uploads/2024/01/Kagi-Search-Stats-Most-pinned-websites-357x512.webp 357w, https://wadetregaskis.com/wp-content/uploads/2024/01/Kagi-Search-Stats-Most-pinned-websites@2x.webp 844w, https://wadetregaskis.com/wp-content/uploads/2024/01/Kagi-Search-Stats-Most-pinned-websites-179x256@2x.webp 358w" sizes="auto, (max-width: 422px) 100vw, 422px" /></figure>
</div>


<p>It&#8217;s the &#8216;negative&#8217; side that&#8217;s most interesting.  Remember that in order to get on these lists you have to actually be a major website, well known and a frequent-enough occurrence in search results that a large number of people have told you to bugger off.  So it&#8217;s essentially revealing the sentiment towards the &#8216;popular&#8217; websites.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="385" height="1055" src="https://wadetregaskis.com/wp-content/uploads/2024/01/Kagi-Search-Stats-Most-blocked-websites.webp" alt="Screenshot of the Kagi Search Stats page showing Most Blocked websites: (in descending order) numerous Pinterest sites, Fox News, Facebook, Breitbart, TikTok, Quora, DailyMail, w3schools, and Instagram." class="wp-image-7439" srcset="https://wadetregaskis.com/wp-content/uploads/2024/01/Kagi-Search-Stats-Most-blocked-websites.webp 385w, https://wadetregaskis.com/wp-content/uploads/2024/01/Kagi-Search-Stats-Most-blocked-websites-93x256.webp 93w, https://wadetregaskis.com/wp-content/uploads/2024/01/Kagi-Search-Stats-Most-blocked-websites-187x512@2x.webp 374w, https://wadetregaskis.com/wp-content/uploads/2024/01/Kagi-Search-Stats-Most-blocked-websites-187x512.webp 187w, https://wadetregaskis.com/wp-content/uploads/2024/01/Kagi-Search-Stats-Most-blocked-websites@2x.webp 770w, https://wadetregaskis.com/wp-content/uploads/2024/01/Kagi-Search-Stats-Most-blocked-websites-93x256@2x.webp 186w" sizes="auto, (max-width: 385px) 100vw, 385px" /></figure>
</div>


<p>It surprised me to see Pinterest at the top.  Not just the top position, but the top <em>seven</em> positions, accounting for their various geo-specific site variants.</p>



<p>I myself resent Pinterest&#8217;s existence because I find that the dominant search engines prioritise Pinterest over far superior matches, to an absurd degree.  I can recall only <em>one</em> time, in my life, where I visited Pinterest and actually got <em>any</em> benefit out of it.  <em>One</em>.</p>



<p>But, I didn&#8217;t realise so many others felt similarly.</p>



<p>The rest of the results are much less surprising to me.  Fox News &amp; Breitbart for their political nature (DailyMail&#8217;s presumably in the same bucket).  Facebook because it&#8217;s a horrible turd on <em>so</em> many levels but most pertinently because it essentially can&#8217;t be viewed without being signed in<sup data-fn="b80b89d2-ce3d-41a1-92d7-275d86090469" class="fn"><a href="#b80b89d2-ce3d-41a1-92d7-275d86090469" id="b80b89d2-ce3d-41a1-92d7-275d86090469-link">2</a></sup>.  Instagram apparently gets marginally less hate from the computer geek community, even though it falls into the same bucket as Facebook in that respect (and others).</p>



<p>I&#8217;m slightly surprised to see <a href="https://www.w3schools.com" data-wpel-link="external" target="_blank" rel="external noopener">w3schools</a> in the list, as though I&#8217;m aware it&#8217;s not &#8220;cool&#8221; to use it as a web developer, frankly I use it all the time because they have <a href="https://www.w3schools.com/cssref/css_selectors.php" data-wpel-link="external" target="_blank" rel="external noopener">better summaries of key CSS features</a> than <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors" data-wpel-link="external" target="_blank" rel="external noopener">Mozilla&#8217;s developer docs</a>.</p>


<ol class="wp-block-footnotes"><li id="e4dbde6a-2d84-4002-a2cc-2d42ffcc2e90">When my primary search engine fails me.  Google has a more extensive index than Bing / DuckDuckGo, so sometimes it&#8217;s the only one of the Big Three that can find a relatively niche or unloved page. <a href="#e4dbde6a-2d84-4002-a2cc-2d42ffcc2e90-link" aria-label="Jump to footnote reference 1">↩︎</a></li><li id="b80b89d2-ce3d-41a1-92d7-275d86090469">Incidentally, if your restaurant&#8217;s menu is only available on a Facebook page, congratulations, you will never count me amongst your customers. <a href="#b80b89d2-ce3d-41a1-92d7-275d86090469-link" aria-label="Jump to footnote reference 2">↩︎</a></li></ol>]]></content:encoded>
					
					<wfw:commentRss>https://wadetregaskis.com/the-most-unpopular-popular-websites/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<media:content url="https://wadetregaskis.com/wp-content/uploads/2024/01/Kagi-Search-home-page.webp" medium="image" />
<post-id xmlns="com-wordpress:feed-additions:1">7426</post-id>	</item>
		<item>
		<title>I was into io_uring before it existed</title>
		<link>https://wadetregaskis.com/i-was-into-io_uring-before-it-existed/</link>
					<comments>https://wadetregaskis.com/i-was-into-io_uring-before-it-existed/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Wed, 17 Jan 2024 08:07:54 +0000</pubDate>
				<category><![CDATA[Ancient History]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Instruments]]></category>
		<category><![CDATA[io_uring]]></category>
		<category><![CDATA[rample]]></category>
		<category><![CDATA[Shark]]></category>
		<guid isPermaLink="false">https://wadetregaskis.com/?p=7419</guid>

					<description><![CDATA[I just read up a bit on io_uring, prompted by a Swift Forums thread relating to it, and it made me laugh. To a lot of people it&#8217;s an amazing new[ish] high-performance I/O system for Linux. Which it is (albeit with some serious security concerns, apparently). A lot of people are very excited by it.&#8230; <a class="read-more-link" href="https://wadetregaskis.com/i-was-into-io_uring-before-it-existed/" data-wpel-link="internal">Read more</a>]]></description>
										<content:encoded><![CDATA[
<p>I just read up a bit on <a href="https://man.archlinux.org/man/io_uring.7" data-wpel-link="external" target="_blank" rel="external noopener">io_uring</a>, prompted by <a href="https://forums.swift.org/t/blocking-i-o-and-concurrency/67276" data-wpel-link="external" target="_blank" rel="external noopener">a Swift Forums thread relating to it</a>, and it made me laugh.  To a lot of people it&#8217;s an amazing new[ish] high-performance I/O system for Linux.  Which it is (albeit <a href="https://security.googleblog.com/2023/06/learnings-from-kctf-vrps-42-linux.html" data-wpel-link="external" target="_blank" rel="external noopener">with some serious security concerns</a>, apparently).  A lot of people are very excited by it.  Which they should be.  But it&#8217;s not new or novel, despite what many folks seem to think.</p>



<p>It immediately reminded me of the Shark 5 re-implementation of the profiling interface between the kernel and Shark.  Shark 5 of course didn&#8217;t actually survive to birth &#8211; it was snuffed out by politics and, admittedly, a bit of our own hubris in the Shark team &#8211; but that underlying infrastructure did, as the guts of <a href="https://help.apple.com/instruments/mac/current/#" data-wpel-link="external" target="_blank" rel="external noopener">Instruments</a>&#8216; Time Profiler and System Trace features.</p>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p>I&#8217;m not even <em>pretending</em> to claim that what we came up with for Shark 5 was novel, either.  As far as we know it was novel to our domain, of profiling tools, but I&#8217;d be amazed if there aren&#8217;t earlier implementations of the same sort of thing many decades prior.</p>
</div></div>



<p>In Shark 4 and earlier, userspace would allocate a single big buffer of memory for the profiling data, hand it [back] to the kernel<sup data-fn="e9992b27-788f-4f5c-9c79-5c6c2396f729" class="fn"><a href="#e9992b27-788f-4f5c-9c79-5c6c2396f729" id="e9992b27-788f-4f5c-9c79-5c6c2396f729-link">1</a></sup>, the kernel &#8211; specifically the Shark kernel extension &#8211; would write into that buffer, then when the buffer was full profiling would end<sup data-fn="eb054551-a35d-4599-9763-bc0d7415909a" class="fn"><a href="#eb054551-a35d-4599-9763-bc0d7415909a" id="eb054551-a35d-4599-9763-bc0d7415909a-link">2</a></sup>.  The userspace driver &#8211; Shark &#8211; <em>could</em> technically start profiling again immediately, but of course you&#8217;d often have a gap in your profiling &#8211; potentially a big one, for the more expensive profiling modes (e.g. System Trace) or on heavily-loaded machines.  Shark didn&#8217;t run with elevated priority, as far as I recall, so it could get crowded off the CPU(s) by other programs.  All communication between user &amp; kernel spaces was via Mach messages, which are ultimately syscalls, and was time-sensitive since kernel- &amp; user-space had to be in lock-step all the time.</p>



<p>For Shark 5, we wanted to up the ante and remove limitations.  We wanted to be able to record indefinitely, limited only by disk space.  More importantly, we also wanted to be able show profiling results <em>live</em>.</p>



<p>So, we &#8211; and I use the term loosely, as I think it was mostly <a href="https://www.linkedin.com/in/mxshift/" data-wpel-link="external" target="_blank" rel="external noopener">Rick Altherr</a> with possibly the help of <a href="https://www.linkedin.com/in/ryandubois/" data-wpel-link="external" target="_blank" rel="external noopener">Ryan du Bois</a> &#8211; came up with a mechanism that&#8217;s very similar to io_uring, but years earlier, in ~2008.  Userspace would allocate multiple smaller buffers &#8211; also easier to acquire given the requirement to be physically contiguous &#8211; and hand those to the kernel somewhat as needed.  Userspace merely needed to stay ahead of the kernel&#8217;s use, which didn&#8217;t necessarily mean pre-allocating all the buffers.  When each of those individual buffers filled up with profiling data from the kernel, they&#8217;d be made available back to the userspace side<sup data-fn="9a13c4b7-e511-4844-815e-13771d10af96" class="fn"><a href="#9a13c4b7-e511-4844-815e-13771d10af96" id="9a13c4b7-e511-4844-815e-13771d10af96-link">3</a></sup>.  Shark (in userspace) would optionally &#8211; if in &#8216;live&#8217; mode or if running short on empty buffers &#8211; process those buffers while profiling was still actively occurring, freeing them up to go back into the ring for the kernel&#8217;s use.  It did mean you slightly increased the probability of perturbing the program(s) under profiling, but that was mostly just a matter of ensuring the buffers were large enough to sufficiently amortise the cost of their processing &amp; handling.  I don&#8217;t recall the extent of the processing, but I think it was not necessarily much more than copying the data out into non-wired memory (maybe even a memory-mapped file?).  That was cheaper than allocating <em>and wiring</em> new buffers.</p>



<p>It worked really well, and is possibly still the implementation used to date &#8211; while it appears a lot of the frameworks (e.g. CoreProfile) have disappeared from macOS, presumably rewritten somewhere else, I&#8217;d be surprised if the kernel-user interface itself has changed much.  It was pretty much perfect.</p>



<p>The creation of this new, superior profiling system also spurred me to create <code>rample</code>, a CLI tool kind of like <code>top</code> which showed you what your CPUs were doing in real time<sup data-fn="4abb5c72-5961-4445-bddf-3ef39ffb6a43" class="fn"><a href="#4abb5c72-5961-4445-bddf-3ef39ffb6a43" id="4abb5c72-5961-4445-bddf-3ef39ffb6a43-link">4</a></sup> as a heavy tree, much like you&#8217;d get in a Time Profile in Shark (and later Instruments).  It was super quick to write &#8211; just a day or two, I believe &#8211; and yet I unexpectedly found that it was more useful than Shark itself.  Being able to see &#8211; practically instantly by virtue of how lightweight it is to launch a simple CLI program &#8211; what&#8217;s chewing on the CPU, <em>including inside the kernel</em>, was incredibly useful.  Instruments is the closest you can get today on a Mac, but it&#8217;s super slow and clunky in comparison.  It&#8217;s one of my top regrets, of my time at Apple, that I didn&#8217;t get <code>rample</code> into Mac OS X, or at least into the Dev Tools.</p>



<p></p>


<ol class="wp-block-footnotes"><li id="e9992b27-788f-4f5c-9c79-5c6c2396f729">I don&#8217;t recall precisely why, but it was apparently better (or only possible?) to allocate the buffer in userspace, even though that was ultimately done with syscalls serviced by the kernel.  I think it had something to do with being easier to handle failures, like being out of memory, in particular <em>contiguous</em> memory &#8211; the memory was wired during use to ensure the kernel wouldn&#8217;t have to deal with the practical nor performance problems of page faults while recording profiling data. <a href="#e9992b27-788f-4f5c-9c79-5c6c2396f729-link" aria-label="Jump to footnote reference 1">↩︎</a></li><li id="eb054551-a35d-4599-9763-bc0d7415909a">Which was a problem because generally profiling sessions were specified to run for a specific time duration, by the end-user.  So the buffer had to be sized to avoid filling prematurely, which meant wasting memory. <a href="#eb054551-a35d-4599-9763-bc0d7415909a-link" aria-label="Jump to footnote reference 2">↩︎</a></li><li id="9a13c4b7-e511-4844-815e-13771d10af96">Technically they were always available &#8211; we didn&#8217;t bother changing access permissions &#8211; but the userspace app would coordinate with the kernel via an elegant lockfree state machine.  That state machine was a superb design &#8211; it deserves its own detailed nostalgia trip. <a href="#9a13c4b7-e511-4844-815e-13771d10af96-link" aria-label="Jump to footnote reference 3">↩︎</a></li><li id="4abb5c72-5961-4445-bddf-3ef39ffb6a43">Well, updated every second or so, like <code>top</code>. <a href="#4abb5c72-5961-4445-bddf-3ef39ffb6a43-link" aria-label="Jump to footnote reference 4">↩︎</a></li></ol>]]></content:encoded>
					
					<wfw:commentRss>https://wadetregaskis.com/i-was-into-io_uring-before-it-existed/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7419</post-id>	</item>
		<item>
		<title>Secret Sonoma design lead: Barbie</title>
		<link>https://wadetregaskis.com/secret-sonoma-design-lead-barbie/</link>
					<comments>https://wadetregaskis.com/secret-sonoma-design-lead-barbie/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Tue, 12 Dec 2023 21:13:50 +0000</pubDate>
				<category><![CDATA[Howto]]></category>
		<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Bugs!]]></category>
		<category><![CDATA[CGContextHighlight2xScaledImages]]></category>
		<category><![CDATA[macOS Sonoma]]></category>
		<category><![CDATA[pink]]></category>
		<category><![CDATA[Retina]]></category>
		<category><![CDATA[Snafu]]></category>
		<guid isPermaLink="false">https://wadetregaskis.com/?p=6579</guid>

					<description><![CDATA[macOS Sonoma is in so many ways a dumpster fire. It&#8217;s the worst Apple OS update I can remember (although admittedly there&#8217;s been some real stinkers over the years, so maybe I&#8217;m overlooking some repressed memories). There was of course the bug whereby encrypted external drives no longer mounted automatically. That was pretty special, because&#8230; <a class="read-more-link" href="https://wadetregaskis.com/secret-sonoma-design-lead-barbie/" data-wpel-link="internal">Read more</a>]]></description>
										<content:encoded><![CDATA[
<p>macOS Sonoma is in <em>so</em> many ways a dumpster fire.  It&#8217;s the worst Apple OS update I can remember (although admittedly there&#8217;s been some real stinkers over the years, so maybe I&#8217;m overlooking some repressed memories).</p>



<p>There was of course the bug whereby encrypted external drives no longer mounted automatically.  That was pretty special, because it reveals that Apple doesn&#8217;t test encrypted external drives anywhere in their QA process &#8211; possibly not even ad-hoc internally, since it&#8217;s hard to image that an Apple employee stumbling on this bug by accident would not bother to report it.  Or maybe they did but even Apple&#8217;s own employees&#8217; bug reports are ignored.  Consistent, at least.</p>



<p>Since virtually <em>every</em> external drive should be encrypted, this suggests Apple either believes nobody actually uses external drives, or that they don&#8217;t care.  At least that bug was mostly fixed in 14.1, although it took Apple a full month to get around to it.</p>



<h2 class="wp-block-heading">Radical pink redesign</h2>



<p>But perhaps the most <em>glaring</em> bug, in a very literal sense, was the rampant pinkification of the GUI.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="960" height="324" src="https://wadetregaskis.com/wp-content/uploads/2023/12/Safari-website-thumbnails.webp" alt="Screenshot of Safari's website thumbnails view showing inconsistent pink tinting of some thumbnails" class="wp-image-6580" style="width:480px" srcset="https://wadetregaskis.com/wp-content/uploads/2023/12/Safari-website-thumbnails.webp 960w, https://wadetregaskis.com/wp-content/uploads/2023/12/Safari-website-thumbnails-256x86.webp 256w, https://wadetregaskis.com/wp-content/uploads/2023/12/Safari-website-thumbnails-512x173.webp 512w" sizes="auto, (max-width: 960px) 100vw, 960px" /><figcaption class="wp-element-caption">Safari website thumbnails</figcaption></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="406" height="164" src="https://wadetregaskis.com/wp-content/uploads/2023/12/Random-UI-elements-in-web-pages-and-native-apps.png" alt="Small screenshot of a section of the Amazon website toolbar showing pink tinting of the gear &quot;settings&quot; icon" class="wp-image-6581" style="width:203px" srcset="https://wadetregaskis.com/wp-content/uploads/2023/12/Random-UI-elements-in-web-pages-and-native-apps.png 406w, https://wadetregaskis.com/wp-content/uploads/2023/12/Random-UI-elements-in-web-pages-and-native-apps-256x103.png 256w" sizes="auto, (max-width: 406px) 100vw, 406px" /><figcaption class="wp-element-caption">Random GUI controls in web pages</figcaption></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="1700" height="1104" src="https://wadetregaskis.com/wp-content/uploads/2023/12/DPReview-article-hero-images.webp" alt="Screenshot of a section of the DPReview homepage showing pink tinting of an article hero image" class="wp-image-6582" style="width:850px" srcset="https://wadetregaskis.com/wp-content/uploads/2023/12/DPReview-article-hero-images.webp 1700w, https://wadetregaskis.com/wp-content/uploads/2023/12/DPReview-article-hero-images-256x166.webp 256w, https://wadetregaskis.com/wp-content/uploads/2023/12/DPReview-article-hero-images-512x332@2x.webp 1024w, https://wadetregaskis.com/wp-content/uploads/2023/12/DPReview-article-hero-images-512x332.webp 512w" sizes="auto, (max-width: 1700px) 100vw, 1700px" /><figcaption class="wp-element-caption">…not to mention many actual images on web pages.</figcaption></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="282" height="242" src="https://wadetregaskis.com/wp-content/uploads/2023/12/Quartz-Debug-1.webp" alt="" class="wp-image-6607" style="object-fit:cover" srcset="https://wadetregaskis.com/wp-content/uploads/2023/12/Quartz-Debug-1.webp 282w, https://wadetregaskis.com/wp-content/uploads/2023/12/Quartz-Debug-1-256x220.webp 256w, https://wadetregaskis.com/wp-content/uploads/2023/12/Quartz-Debug-1@2x.webp 564w" sizes="auto, (max-width: 282px) 100vw, 282px" /><figcaption class="wp-element-caption">Even Apple&#8217;s own apps &#8211; and most poetically of all Quartz Debug &#8211; are afflicted.</figcaption></figure>
</div>


<p>As you can see, Sonoma brought with it a penchant for tinting things a gross light pink colour, including the rectangular extents of images that are otherwise invisible because they&#8217;re transparent.</p>



<h2 class="wp-block-heading">WTF?!</h2>


<div class="wp-block-image">
<figure class="alignright size-full is-resized"><img loading="lazy" decoding="async" width="528" height="1016" src="https://wadetregaskis.com/wp-content/uploads/2023/12/Quartz-Debug-settings-window.webp" alt="Screenshot of Quartz Debug's settings window" class="wp-image-6587" style="width:264px" srcset="https://wadetregaskis.com/wp-content/uploads/2023/12/Quartz-Debug-settings-window.webp 528w, https://wadetregaskis.com/wp-content/uploads/2023/12/Quartz-Debug-settings-window-133x256.webp 133w, https://wadetregaskis.com/wp-content/uploads/2023/12/Quartz-Debug-settings-window-266x512.webp 266w" sizes="auto, (max-width: 528px) 100vw, 528px" /></figure>
</div>


<p>I spent a <em>lot</em> of time debugging this.  Over days, weeks, and months.  Trying out new avenues as they came to me, even repeating some web &amp; forum searches over and over again in frustrated desperation.</p>



<p>I only just today figured out what&#8217;s going on.  84 days later.</p>



<p>One of my first instincts &#8211; right on day 0 &#8211; was that it was some Quartz Debug thing, because it looks a lot like some of the tinting options Quartz Debug has for things like flashing screen updates or showing opaque regions.  But the Quartz Debug app insisted everything was disabled.  I enabled everything anyway, and then disabled it all again, in case that would jog something free.  No bueno.</p>



<p>I then spent the better part of three months trying every superstition, every rumour or snippet of hearsay online, that might in any way related to this problem or conceivably fix it.  Nothing helped.</p>



<h2 class="wp-block-heading">Epiphany</h2>



<p>It was last night, when I was fiddling with some images in a gallery here on my website, that I discovered that adjusting the CSS dimensions of an image by just <em>a single pixel</em> could pinkify them.  Most importantly, restoring the dimensions to the <em>actual image dimensions</em> would fix them.  I&#8217;d already observed something similar to that, in various apps and websites, but it <em>felt</em> different to be directly triggering the problem myself.</p>



<p>That kept me up half the night, tossing and turning in bed, highly suspicious that this was a pivotal clue, but unsure what it pointed to.</p>



<p>Eventually, it led me right back to my very first instinct &#8211; Quartz Debug &#8211; and the tentative conclusion that this <em>was</em> in fact a Quartz Debug problem even if Quartz Debug claimed otherwise.  I become suspicious that the app was either not showing me the full range of settings, or just plain wrong about them.</p>



<p>And that was the insight I needed &#8211; right on the very first page of search results for &#8220;quartz debug defaults&#8221; was a link to <a href="https://developer.apple.com/library/archive/documentation/GraphicsAnimation/Conceptual/HighResolutionOSX/Testing/Testing.html" data-wpel-link="external" target="_blank" rel="external noopener">Testing and Troubleshooting High-Resolution Content</a>.  Buried behind a disclosure triangle near the bottom is the magic string:</p>



<p class="has-text-align-center has-large-font-size" style="font-style:normal;font-weight:500"><code>CGContextHighlight2xScaledImages</code></p>



<p>That was set to YES, on my system.</p>



<p>Deleting it fixes the issue once affected apps are restarted (something Apple&#8217;s own documentation fails to mention &#8211; <em>kind of an important step, Apple!</em>).</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><code>defaults delete -g CGContextHighlight2xScaledImages</code></p>
<cite>The magic incantation to exorcise Barbie</cite></blockquote>



<p>In theory you can also disable this from the Quartz Debug app itself, it&#8217;s just hidden &#8211; in the Tools menu, <em>not</em> the actual settings window, is an item labelled &#8220;Color 1x Artwork&#8221;.  Note how the setting applies even when Quartz Debugging is disabled.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="688" height="596" src="https://wadetregaskis.com/wp-content/uploads/2023/12/Screenshot-of-the-Quartz-Debug-Tools-menu.webp" alt="" class="wp-image-6588" style="width:344px" srcset="https://wadetregaskis.com/wp-content/uploads/2023/12/Screenshot-of-the-Quartz-Debug-Tools-menu.webp 688w, https://wadetregaskis.com/wp-content/uploads/2023/12/Screenshot-of-the-Quartz-Debug-Tools-menu-256x222.webp 256w, https://wadetregaskis.com/wp-content/uploads/2023/12/Screenshot-of-the-Quartz-Debug-Tools-menu-512x444.webp 512w" sizes="auto, (max-width: 688px) 100vw, 688px" /></figure>
</div>


<h2 class="wp-block-heading">So, wait, how did this come about?</h2>



<p>I have no idea why this only cropped up when Sonoma was installed.  Either Sonoma turned this on (unlikely…?) or it was already on yet wasn’t having any effect in prior OS releases (from 2017 onwards, at least, since my iMac Pro never exhibited this issue before Sonoma).</p>



<p>I know for sure that this setting did work at least going back over a decade, as I remember using this &#8211; on a different computer &#8211; for doing then-new-fangled Retina development… but I’m pretty sure I’ve never set this on my iMac Pro since it way post-dates the introduction of Retina.  Conceivably it was pulled across by Apple&#8217;s Migration Assistant.  Though, again, why did no earlier version of the OS, going back over a decade, exhibit this behaviour if it was supposedly enabled the whole time?</p>



<p>I know it&#8217;s not just me that&#8217;s been afflicted by this to date, as I found a sporadic few reports of this going back years, e.g. <a href="https://apple.stackexchange.com/questions/155602/highly-abnormal-graphic-glitch-on-yosemite-retina-all-white-backgrounds-appea" data-wpel-link="external" target="_blank" rel="external noopener">Highly abnormal graphic glitch on yosemite / retina: all white backgrounds appear pink</a>.  It pisses me off immensely that this page has <em>exactly</em> the keywords I was searching for right from the start &#8211; right in its title! &#8211; yet neither Bing nor Google can find it.</p>



<h2 class="wp-block-heading">Apple&#8217;s response?  &#8220;Fuck you&#8221; in mime.</h2>



<p>I actually filed a pretty detailed bug report with Apple about this, the day I discovered it (September 19th, 2023).  FB13190068.</p>



<p>Of course, they never responded in the slightest.</p>



<p>I provided a <em>bunch</em> of example images, even a screen recording to show how the pink comes and goes in certain circumstances.</p>



<p>I studiously tested every new macOS update and updated the bug report to note that they each had not fixed it.</p>



<p>The morale of this is, as always, that filing bug reports with Apple is an infuriating waste of time.  Mea culpa.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wadetregaskis.com/secret-sonoma-design-lead-barbie/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<media:content url="https://wadetregaskis.com/wp-content/uploads/2023/12/Quartz-Debug-1.webp" medium="image" />
<post-id xmlns="com-wordpress:feed-additions:1">6579</post-id>	</item>
		<item>
		<title>Apple&#8217;s timing problem</title>
		<link>https://wadetregaskis.com/apples-timing-problem/</link>
					<comments>https://wadetregaskis.com/apples-timing-problem/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Sun, 19 Nov 2023 06:34:48 +0000</pubDate>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[M1 Ultra]]></category>
		<category><![CDATA[M2 Ultra]]></category>
		<category><![CDATA[M3 Ultra]]></category>
		<category><![CDATA[Sad]]></category>
		<guid isPermaLink="false">https://blog.wadetregaskis.com/?p=5586</guid>

					<description><![CDATA[The M1 was announced in November 2020. The M1 Ultra wasn&#8217;t announced for another sixteen months, in March 2022. It was clearly late. Very late. The M2 was presumed right around the corner (and it was, released just four months later). Why would anyone buy an M1 Ultra, using a two year old CPU architecture&#8230; <a class="read-more-link" href="https://wadetregaskis.com/apples-timing-problem/" data-wpel-link="internal">Read more</a>]]></description>
										<content:encoded><![CDATA[
<p>The M1 was announced in November 2020.  The M1 Ultra wasn&#8217;t announced for another <em>sixteen months</em>, in March 2022.  It was clearly late.  <em>Very</em> late.  The M2 was presumed right around the corner (and it was, released just four months later).  Why would anyone buy an M1 Ultra, using a <em>two year old</em> CPU architecture designed for <em>phones</em>, when its successor was due any day (and would surely be a big leap again in performance)?</p>



<p>So I didn&#8217;t buy an M1 Ultra.</p>



<p>The M2 was announced in July 2022.  The M2 Ultra wasn&#8217;t announced for another <em>eleven</em> months, in June 2023, <em>and</em> offered only a small performance gain over its predecessor.  There were rumours that the M3 was right around the corner (and it was, released just four months later).  Worse, the M3 <em>Pro</em> and <em>Max</em> were released simultaneous to the base M3, and the M3 Max actually outperforms the M2 Ultra in many workloads.</p>



<p>So I didn&#8217;t buy an M2 Ultra.</p>



<p>So now the question is:  when will the M3 Ultra come out?  If it takes eleven to sixteen months, like its predecessors, then we&#8217;ll be expecting the M4 by then, and this sad cycle will have repeated yet again.</p>



<p>Will I buy an M3 Ultra?</p>



<p>I hope so, but it&#8217;s up to Apple.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wadetregaskis.com/apples-timing-problem/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5586</post-id>	</item>
		<item>
		<title>The Abstracted Unreliability Anti-pattern</title>
		<link>https://wadetregaskis.com/the-abstracted-unreliability-anti-pattern/</link>
					<comments>https://wadetregaskis.com/the-abstracted-unreliability-anti-pattern/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Wed, 09 Jun 2021 23:35:49 +0000</pubDate>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[abstraction]]></category>
		<category><![CDATA[anti-pattern]]></category>
		<category><![CDATA[logic]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[reliability]]></category>
		<guid isPermaLink="false">https://blog.wadetregaskis.com/?p=4657</guid>

					<description><![CDATA[I don&#8217;t know if it&#8217;s genuinely on the uptick, or just coincidence, or merely runaway pattern recognition on my part, but I keep seeing the same logical fallacy applied over and over again: if I add more layers to a system it will become more reliable. A recent example: this set of services have poor&#8230; <a class="read-more-link" href="https://wadetregaskis.com/the-abstracted-unreliability-anti-pattern/" data-wpel-link="internal">Read more</a>]]></description>
										<content:encoded><![CDATA[
<p>I don&#8217;t know if it&#8217;s genuinely on the uptick, or just coincidence, or merely runaway pattern recognition on my part, but I keep seeing the same logical fallacy applied over and over again:  if I add more layers to a system it will become more reliable.</p>



<p>A recent example:  this set of services have poor uptime so we need to put <em>another</em> service in front of them, and this will &#8211; apparently, magically &#8211; make them have better uptime.</p>



<p>This <em>might</em> be true in specific cases.  If the abstraction layer utilises caching, for example, it&#8217;s conceivable it&#8217;ll be able to continue operating in at least some capacity while an underlying component is (briefly) unavailable.  Or maybe the reduced load to the downstream service(s) will alleviate pressure on racey code and dodgy GC.  But this is practically never a factor, in the real-world examples I see.  It really does seem to be &#8220;step 1, collect underpants  …  step 3, profit&#8221;.</p>



<p>The best you could say is that it <em>accidentally</em> arrives at a practical benefit, despite itself.</p>



<p>It&#8217;s important to separate the <em>actual</em> causes of improvement from the red herrings.  I can only assume that the confusion between the two is what has allowed this blatantly illogical practice to gain some ground.  &#8220;We implemented better input validation and an extra layer, and things got better&#8221;, and bafflingly nobody ever seems to question how &#8220;and an extra layer&#8221; contributed.</p>



<p>Now, adding an abstraction layer might have <em>other</em> direct benefits &#8211; e.g. the opportunity for use-case-specific APIs, better alignment with organisational structure, etc &#8211; but reliability is unlikely to be one of them.  Particularly if by &#8216;reliability&#8217; one largely means <em>availability</em>.  Again, it&#8217;s crucial to understand the <em>actual</em> causality involved, not miscategorise coincidence.</p>



<p>The <em>logical</em> thing to do in the face of an unreliable component is to simply make it reliable.  Anything else is just making the situation worse.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wadetregaskis.com/the-abstracted-unreliability-anti-pattern/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4657</post-id>	</item>
		<item>
		<title>People vs Products</title>
		<link>https://wadetregaskis.com/people-vs-products/</link>
					<comments>https://wadetregaskis.com/people-vs-products/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Fri, 28 Aug 2020 23:04:28 +0000</pubDate>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Ideas]]></category>
		<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[leadership]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[people manager]]></category>
		<category><![CDATA[Peter Principle]]></category>
		<category><![CDATA[technical lead]]></category>
		<guid isPermaLink="false">https://blog.wadetregaskis.com/?p=4580</guid>

					<description><![CDATA[I&#8217;ve experienced an interesting arc over my twenty or so years (thus far) of software development. I started out as a one-person shop, doing my own things, selling shareware. I had no manager nor technical lead. I had to make all my own decisions, in all aspects, without guidance or assistance. Subsequently, during my four&#8230; <a class="read-more-link" href="https://wadetregaskis.com/people-vs-products/" data-wpel-link="internal">Read more</a>]]></description>
										<content:encoded><![CDATA[
<p>I&#8217;ve experienced an interesting arc over my twenty or so years (thus far) of software development.</p>



<p>I started out as a one-person shop, doing my own things, selling shareware.  I had no manager nor technical lead.  I had to make all my own decisions, in all aspects, without guidance or assistance.</p>



<p>Subsequently, during my four years at Apple, I did have a manager, but they focused on people, not the technical &#8211; myself and/or my colleagues collectively made the technical decisions, and provided technical leadership, and effectively set the product direction.  My managers were there to make that as easy as possible for us.</p>



<p>Over my nearly eight years at Google, I observed the tail half of a major cultural transition for Google.  Long before I started, Google had explicitly laid down a culture where managers were not product / technical leads.  The two roles were physically separated, between different people, and they operated independently.  Managers focused on people &#8211; career growth, happiness, basic productivity, &amp; skills &#8211; while tech leads focused on the technical, the product.  In fact the manager role was so principled about focus on people that managers would sometimes help their direct reports <em>leave the company</em>, if that was simply what was best for those people for their own success &amp; growth.  And, to be clear, not in a &#8220;you aren&#8217;t working out&#8221; sense, but for engineers that were excellent and simply didn&#8217;t have deserved opportunities available to them at Google.</p>



<p>By the time I joined, that culture was half-gone, but still present enough in my division for me to experience it.  But by the time I left the culture was heavily weighted towards managers being technical leads.</p>



<p>In my nearly three years now at LinkedIn, I&#8217;ve completed that arc.  LinkedIn culturally &amp; executively emphasises managers as technical / product leads even moreso than Google ever did.  As far as I&#8217;ve been told, LinkedIn always has (meaning, this is presumably the culture Yahoo had too, from which LinkedIn forked).</p>



<p>Having experienced most of this spectrum, I finally feel qualified to pass judgement on it.</p>



<figure class="wp-block-pullquote"><blockquote><p>Managers should not be leads.</p></blockquote></figure>



<p>I immediately, intuitively recognised &amp; appreciated this at Google, but now I&#8217;m certain of it.</p>



<p>People management &amp; (technical) product leadership are fundamentally at odds with each other.  The needs of individuals are often at odds with the needs of the product.  The product might need Natalie to really focus on churning through a bunch of menial tasks, but to evolve, Natalie might really need design experience &amp; leadership opportunities.</p>



<p>Having one person (in authority) try to wear both hats creates conflict, bias, and inefficiency.  It discourages dialogue, because you can never <em>really</em> trust where the polymorph stands.  The roles require different skillsets, which rarely coexist in a single person and in any case are difficult to keep up to date in parallel.  Context-switching between them is burdensome.  It creates a power imbalance and perverse incentives.</p>



<p>Even if an individual is exceptionally talented at mitigating those problems, they simply don&#8217;t have the time to do both well.  Being a product or technical lead is <em>at least</em> a full-time job.  Likewise, helping a team of any real size grow as individuals requires way more hands-on, one-on-one attention than most people realise.  It&#8217;s hard enough being good at either one of them alone &#8211; anyone that attempts doing both simultaneously ends up doing neither effectively.</p>



<p>I&#8217;ve had the opportunity to be both a technical lead <em>only</em> and a manager <em>only</em>.  This is quite rare in the tech industry.  I deeply appreciated being able to focus on <em>just one</em> of those roles at a time.  I could be consistent, deliberate, and <em>honest</em>.  I could, as a manager, tell people exactly what I thought they should or shouldn&#8217;t work on, irrespective of what the product(s) need, because I knew the technical lead(s) would worry about those angles.  Conversely, when I was a technical lead, I could lay out what was simply, objectively best for the project, uncomplicated by individuals&#8217; interests.  In either case, there was real, other human being that could be debated with, as necessary, to find happy mediums.</p>



<p>Yet beyond just being more efficient and effective, the serendipitous consequence was that it <em>gave agency to the individuals</em> &#8211; whenever a conflict arose between people and products, it was revealed to them, and the implicit decision about it at least in part theirs to make.  Most importantly, they knew that <em>whichever</em> way they leaned they had someone in their corner who had their back.</p>



<p>(Of course, sometimes they didn&#8217;t <em>like</em> having to make that decision, but putting it on them forced them to take control and responsibility for themselves, and evolve into more confident, happy, motivated developers.)</p>



<p>I suppose it&#8217;s no surprise that companies tends this way &#8211; to conflate people with products.  These days, for many big tech companies, people literally <em>are</em> the products, and their humanity inevitably stripped away in the process.  People are &#8220;promoted&#8221; into management from technical positions, and often by way of <a href="https://en.wikipedia.org/wiki/Peter_principle" data-wpel-link="external" target="_blank" rel="external noopener">the Peter Principle</a>, are not actually good people managers, <em>nor</em> able to relinquish their former role and ways of thinking.  A hierarchy of technical leads in manager&#8217;s clothing becomes self-sustaining, self-selecting, and self-enforcing.</p>



<p>The question is:  what&#8217;s the antidote?</p>



<p>Acknowledgement:  I was inspired to pen this post by reading <a href="https://www.linkedin.com/in/rtwortham/" data-wpel-link="external" target="_blank" rel="external noopener">Tanner Wortham</a>&#8216;s <a href="https://worth.am/manager-product-owner-fail/" data-wpel-link="external" target="_blank" rel="external noopener">Why Manager as Product Owner Will Usually Fail</a>, which is essentially positing the same thing albeit in different terminology.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wadetregaskis.com/people-vs-products/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4580</post-id>	</item>
		<item>
		<title>Swift on Raspberry Pi (in 2019)</title>
		<link>https://wadetregaskis.com/swift-on-raspberry-pi/</link>
					<comments>https://wadetregaskis.com/swift-on-raspberry-pi/#comments</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Tue, 15 Oct 2019 20:31:24 +0000</pubDate>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[ARM]]></category>
		<category><![CDATA[Raspberry Pi 4]]></category>
		<category><![CDATA[Raspbian]]></category>
		<category><![CDATA[SATA]]></category>
		<category><![CDATA[Snafu]]></category>
		<category><![CDATA[Swift]]></category>
		<category><![CDATA[USB]]></category>
		<guid isPermaLink="false">https://blog.wadetregaskis.com/?p=4440</guid>

					<description><![CDATA[After the horrible experience just acquiring, installing, &#38; configuring a basic Raspberry Pi, I was anticipating much effort &#8211; likely ending in failure &#8211; to get Swift working. I was pleasantly surprised. There are multiple ways to do it, apparently. One would think that there&#8217;d be the correct &#38; working packages already available through apt,&#8230; <a class="read-more-link" href="https://wadetregaskis.com/swift-on-raspberry-pi/" data-wpel-link="internal">Read more</a>]]></description>
										<content:encoded><![CDATA[
<p>After <a href="https://wadetregaskis.com/the-dumpster-fire-that-is-the-raspberry-pi/" data-wpel-link="internal">the horrible experience just acquiring, installing, &amp; configuring a basic Raspberry Pi</a>, I was anticipating much effort &#8211; likely ending in failure &#8211; to get Swift working.</p>



<p>I was pleasantly surprised.</p>



<p>There are multiple ways to do it, apparently.  One would think that there&#8217;d be the correct &amp; working packages already available through <em>apt</em>, but just as with Docker, one would be wrong.  In the case of Swift, there is <a href="https://swift-arm.com" data-wpel-link="external" target="_blank" rel="external noopener">the Swift-ARM site</a> &amp; group that does provide a package repo with pre-built binaries (and various <a href="https://lickability.com/blog/swift-on-raspberry-pi-e44c79fc32f3" data-wpel-link="external" target="_blank" rel="external noopener">tutorials on using them</a>), but oddly they don&#8217;t provide the current version of Swift.</p>



<p>An alternative is <a href="https://github.com/uraimo/buildSwiftOnARM" data-wpel-link="external" target="_blank" rel="external noopener">the buildSwiftOnARM Github repo</a>.  They merely provide tarballs, which is slightly suboptimal, but very straightforward and they have tarballs for essentially every version &#8211; major and minor &#8211; of Swift to date.  The git history also indicates that they&#8217;re very prompt about building tarballs as new versions are released.</p>



<p>Better yet, they provide a couple of shell scripts to build Swift from scratch from source.  Only a couple of dependencies (e.g. clang) need be pre-installed, which can be done quickly &amp; painlessly via <em>apt</em>.</p>



<p>Installing from source is presumably the least reliable approach, but since I had already resigned myself to a miserable experience, I figured I might as well go all in.</p>



<p>However, it works.  Perfectly.  Sure, it takes some time to pull down the huge source base for Swift and all its core dependencies, and some time to build it (though not that long &#8211; hours, not days, contrary to what I read online).  But the end result was a working toolchain.</p>



<p>It remains to be seen exactly how good or bad Swift development on Linux is, given the absence of the numerous Apple system libraries which are what <em>actually</em> distinguish macOS development above other platforms, but at least getting Swift itself installed is painless.</p>



<h4 class="wp-block-heading">Sidenote:  SATA to USB</h4>



<p>The <em>only</em> real speedbump in the whole process, for me, had nothing actually to do with installing Swift itself, but rather the external storage situation on the Raspberry Pi.</p>



<p>The Raspberry Pi doesn&#8217;t offer SATA directly, unfortunately (let-alone any form of pluggable PCIe).  MicroSD is a low-performance, low-reliability, and high-cost option.  So to attach any significant storage you&#8217;re basically going either through Ethernet (e.g. NAS) or USB.</p>



<p>USB to SATA adaptors are a shitshow.  I&#8217;ve tried at least half a dozen different vendors&#8217; offerings over the years, and <em>every single one</em> has been super buggy.  The one I newly acquired for my Raspberry Pi use proved to be no exception.</p>



<p>Long story short on that, the symptoms were I/Os taking incredibly long times to complete (many seconds each, serialised), and generally unusable performance.  <em>/var/log/messages</em> contained countless pages of:</p>



<pre class="wp-block-preformatted">Oct 13 11:13:45 applepi kernel: [  234.087294] sd 0:0:0:0: [sda] tag#2 uas_eh_abort_handler 0 uas-tag 1 inflight: CMD IN
Oct 13 11:13:45 applepi kernel: [  234.087306] sd 0:0:0:0: [sda] tag#2 CDB: opcode=0x28 28 00 77 3b ce 00 00 00 d0 00
Oct 13 11:13:45 applepi kernel: [  234.126541] scsi host0: uas_eh_device_reset_handler start
Oct 13 11:13:45 applepi kernel: [  234.277450] usb 2-2: reset SuperSpeed Gen 1 USB device number 2 using xhci_hcd
Oct 13 11:13:45 applepi kernel: [  234.312541] scsi host0: uas_eh_device_reset_handler success
Oct 13 11:14:15 applepi kernel: [  264.805760] sd 0:0:0:0: [sda] tag#7 uas_eh_abort_handler 0 uas-tag 2 inflight: CMD IN
Oct 13 11:14:15 applepi kernel: [  264.805778] sd 0:0:0:0: [sda] tag#7 CDB: opcode=0x28 28 00 77 3b d1 b8 00 00 48 00</pre>



<p>Turns out this is an incredibly common problem with USB to SATA adaptor chipsets, that&#8217;s documented as such all over the web.  Finding how to solve it was less trivial, because a lot of the advice given is either outright wrong or at least doesn&#8217;t work on Raspbian.  The solution I found, via <a href="https://forums.raspberrypi.com/viewtopic.php?f=28&amp;t=245931" data-wpel-link="external" target="_blank" rel="external noopener">this random thread</a>, was to simply add:</p>



<pre class="wp-block-preformatted">usb-storage.quirks=152d:1561:u</pre>



<p>…to the end of the existing line in <em>/boot/cmdline.txt</em> (where 152d:1561 is the vendor &amp; device IDs for the particular chipset used in my case).  All other variations on this, involving adding similar magic incantations to files in <em>/etc/modprobe.d</em> etc, simply do not do anything on Raspbian.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wadetregaskis.com/swift-on-raspberry-pi/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			<media:content url="https://wadetregaskis.com/wp-content/uploads/2019/10/Swift-on-Raspberry-Pi.webp" medium="image" />
<post-id xmlns="com-wordpress:feed-additions:1">4440</post-id>	</item>
		<item>
		<title>The dumpster fire that is the Raspberry Pi</title>
		<link>https://wadetregaskis.com/the-dumpster-fire-that-is-the-raspberry-pi/</link>
					<comments>https://wadetregaskis.com/the-dumpster-fire-that-is-the-raspberry-pi/#comments</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Sun, 13 Oct 2019 23:19:09 +0000</pubDate>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[aufs-kdms]]></category>
		<category><![CDATA[balenaEtcher]]></category>
		<category><![CDATA[Broken by design]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[HDMI]]></category>
		<category><![CDATA[Homebridge]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac Mini]]></category>
		<category><![CDATA[overlayfs]]></category>
		<category><![CDATA[Raspberry Pi 4]]></category>
		<category><![CDATA[Raspbian]]></category>
		<category><![CDATA[raspi-config]]></category>
		<category><![CDATA[Snafu]]></category>
		<category><![CDATA[VNC]]></category>
		<guid isPermaLink="false">https://blog.wadetregaskis.com/?p=4431</guid>

					<description><![CDATA[For a couple of little home projects I need an always-on computer. In an ideal world, perhaps, this would be something like a Mac Mini. Powerful [enough], easy to install &#38; maintain, runs anything &#38; everything (including anything Linux through Docker or at worst a straight VM). Unfortunately, Mac Minis are surprisingly expensive &#8211; even&#8230; <a class="read-more-link" href="https://wadetregaskis.com/the-dumpster-fire-that-is-the-raspberry-pi/" data-wpel-link="internal">Read more</a>]]></description>
										<content:encoded><![CDATA[<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="2560" height="1507" src="https://wadetregaskis.com/wp-content/uploads/2019/10/Raspberry-Pi-4-Model-B-Side.webp" alt="" class="wp-image-4438" srcset="https://wadetregaskis.com/wp-content/uploads/2019/10/Raspberry-Pi-4-Model-B-Side.webp 2560w, https://wadetregaskis.com/wp-content/uploads/2019/10/Raspberry-Pi-4-Model-B-Side-512x301@2x.webp 1024w, https://wadetregaskis.com/wp-content/uploads/2019/10/Raspberry-Pi-4-Model-B-Side-2048x1205.webp 2048w, https://wadetregaskis.com/wp-content/uploads/2019/10/Raspberry-Pi-4-Model-B-Side-256x151.webp 256w, https://wadetregaskis.com/wp-content/uploads/2019/10/Raspberry-Pi-4-Model-B-Side-512x301.webp 512w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /><figcaption class="wp-element-caption"><em>The Raspberry Pi 4 (image courtesy of Michael Henzler </em><a href="https://commons.wikimedia.org/wiki/File:Raspberry_Pi_4_Model_B_-_Side.jpg" data-wpel-link="external" target="_blank" rel="external noopener">via Wikimedia Commons</a><em>)</em></figcaption></figure>
</div>


<p>For a couple of little home projects I need an always-on computer.  In an ideal world, perhaps, this would be something like a Mac Mini.  Powerful [enough], easy to install &amp; maintain, runs anything &amp; everything (including anything Linux through Docker or at worst a straight VM).  Unfortunately, Mac Minis are surprisingly expensive &#8211; even <em><a href="https://www.amazon.com/Apple-Mini-MC270LL-Desktop-Renewed/dp/B077JH51B6/ref=sr_1_2?keywords=2010+mac+mini&amp;qid=1571007498&amp;sr=8-2" data-wpel-link="external" target="_blank" rel="external noopener">nine year old</a></em><a href="https://www.amazon.com/Apple-Mini-MC270LL-Desktop-Renewed/dp/B077JH51B6/ref=sr_1_2?keywords=2010+mac+mini&amp;qid=1571007498&amp;sr=8-2" data-wpel-link="external" target="_blank" rel="external noopener"> models are a couple of hundred dollars at a minimum</a>.</p>



<p>So, I decided to instead explore this Raspberry Pi thing.</p>



<p>I very quickly started wishing I hadn&#8217;t.</p>



<p>The whole process thus far has just been a series of absurd errors &amp; frustration.</p>



<h3 class="wp-block-heading">Acquiring a Raspberry Pi</h3>



<p>Step zero, of merely buying a Raspberry Pi, is stupidly difficult.  Virtually all <a href="https://web.archive.org/web/20191120041414/https://www.raspberrypi.org/products/raspberry-pi-4-model-b/?variant=raspberry-pi-4-model-b-4gb" data-wpel-link="external" target="_blank" rel="external noopener">the retailers officially listed on raspberrypi.org</a> did not actually have the Raspberry Pi 4 in stock.  Later I discovered that some of these same retailers, that list no stock on their own websites, are <a href="https://www.amazon.com/gp/product/B07TXKY4Z9/ref=as_li_ss_tl?ie=UTF8&amp;psc=1&amp;linkCode=ll1&amp;tag=wasbl08-20&amp;linkId=976676888ba6d03800f8f4eaabb47166&amp;language=en_US" data-wpel-link="external" target="_blank" rel="external noopener">actively selling the Pi on Amazon</a>.  So I bought one through there, which is fine, but why doesn&#8217;t raspberrypi.org just <em>say</em> to use Amazon, if that&#8217;s really the only way to get them?</p>



<p>Next up was all the peripherals &#8211; the Pi by default doesn&#8217;t even come with a power supply, so it&#8217;s useless out of the box.  A cursory internet search reveals a huge amount of FUD about power supplies for the Pi.  I have no idea if it&#8217;s accurate or not, but given some relevant, <a href="https://www.scorpia.co.uk/2019/06/28/pi4-not-working-with-some-chargers-or-why-you-need-two-cc-resistors/" data-wpel-link="external" target="_blank" rel="external noopener">egregious design flaws in the Raspberry Pi 4</a>, it seems plausible.</p>



<p>Plus you need at a minimum some stand-offs, if not a full case, to prevent the Pi damaging the surface it&#8217;s placed on, or damaging itself through shorts.</p>



<p>And addressing those bootstrapping problems ended up sending me down a rabbit hole trying to find a cooling solution too, since it turns out <a href="https://www.tomshardware.com/reviews/pimoroni-fan-shim-heatsink-raspberry-pi-4,6219.html" data-wpel-link="external" target="_blank" rel="external noopener">the Raspberry Pi 4 is infamous for overheating</a> and suffering severe performance &#8211; and presumably reliability &#8211; problems as a result.</p>



<p>In the end, I spent several hours just figuring out how &amp; what to buy, and what is <a href="https://www.raspberrypi.com/products/raspberry-pi-4-model-b/" data-wpel-link="external" target="_blank" rel="external noopener">nominally &#8220;the $35 computer&#8221;</a> cost over $100.  Still without a case, even.</p>



<p>Sidenote:  the <a href="https://www.amazon.com/gp/product/B07TTTCN8H/ref=as_li_ss_tl?ie=UTF8&amp;linkCode=ll1&amp;tag=wasbl08-20&amp;linkId=a441b91c12e9531c45cf8c8722c32c38&amp;language=en_US" data-wpel-link="external" target="_blank" rel="external noopener">Pimoroni Fan Shim for Raspberry Pi</a>, while a little fiddly to assemble, does seem to work very well, and is quite quiet.</p>



<h3 class="wp-block-heading">Booting a Raspberry Pi</h3>



<p>This is the one part of the process thus far that&#8217;s actually worked mostly as it should.  I downloaded <a href="https://web.archive.org/web/20191011200635/https://www.raspberrypi.org/downloads/raspbian/" data-wpel-link="external" target="_blank" rel="external noopener">the full Raspbian Buster image</a>, following <a href="https://web.archive.org/web/20191011200620/https://www.raspberrypi.org/documentation/installation/installing-images/README.md" data-wpel-link="external" target="_blank" rel="external noopener">the installation guide</a>, and using <a href="https://etcher.balena.io/" data-wpel-link="external" target="_blank" rel="external noopener">balenaEtcher</a> to plop the image onto an SD card.  It all worked, even with the Etcher app being a tad dodgy (e.g. it lets you select non-removable volumes, which you cannot possibly intend to flash Raspbian onto, which is unnecessarily dangerous).  The Raspberry Pi 4 booted first time.</p>



<p>I tried to discern whether booting it headless from its birth would work.  <a href="https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up/2" data-wpel-link="external" target="_blank" rel="external noopener">Officially it does not</a>, but I found that baffling and dug further, reading countless online guides (<a href="https://howtoraspberrypi.com/how-to-raspberry-pi-headless-setup/" data-wpel-link="external" target="_blank" rel="external noopener">e.g.</a>), which seemed to suggest it is possible.</p>



<p>I learnt that there exists <a href="https://www.raspberrypi.com/documentation/computers/configuration.html" data-wpel-link="external" target="_blank" rel="external noopener">the raspi-config tool</a> for headless setup, but it was unclear if it would really work, fully.  Though I did the GUI set up process to be conservative, I&#8217;ve since used raspi-config quite a bit.  Turns out, it not only does work just fine, but it&#8217;s actually <em>necessary</em> because the GUI install doesn&#8217;t do some important things (like resize the root file system to fill the SD card).</p>



<p>One thing which nearly blew the whole enterprise was when it came to join a wifi network.  I have multiple wifi networks, all with [different] emoji for names.  The GUI set up tool can&#8217;t handle emoji, rendering them as octal escape sequences.  I don&#8217;t happen to have memorised the four-character byte codes of each emoji, so it was a tedious game of trial-and-error in which I tried every permutation of unreadable SSID &amp; password.</p>



<p>Worse, it took multiple attempts, too, before it finally worked &#8211; I have no idea why it failed to join the network the first time or two, despite using the right password.  To this day it still arbitrarily fails to join one of the networks, yet joins the other just fine &#8211; both are in the same frequency bands from the exact same router.</p>



<h4 class="wp-block-heading">Aside:  Raspberry Pi 4 as a desktop computer</h4>



<p>Since my intended use is as a headless, touchless server, I played only briefly with it in the GUI, using a makeshift setup involving my TV (the only HDMI viewing device I&#8217;ve ever owned &#8211; lucky I had that at least!).  It&#8217;s fine, but very sluggish &#8211; it was immediately apparent that nobody with any other options would ever try to actually use a Raspberry Pi 4 as a desktop machine.  Just [cold] launching the web browser, before you even navigate to a website, takes up to a minute.  And everything is uncomfortably small, with no apparent system configuration options available to adjust render scaling.  Clearly Raspbian is not really intended to be operated at UHD resolutions.</p>



<h3 class="wp-block-heading">Enabling Remote Access</h3>



<p>Though I ultimately intended to use only SSH to interact with the Pi, I did want to have VNC available as an option in case I ran into anything which required using the GUI (again, based on the heavy bias in all the official documentation, and the uncertainty created by that as to whether GUI interaction is <em>required</em> or merely an option).</p>



<p>Turns out, VNC doesn&#8217;t work out of the box on a Raspberry Pi, unless you buy <a href="https://www.realvnc.com/en/connect/" data-wpel-link="external" target="_blank" rel="external noopener">commercial, proprietary VNC software</a>.  A baffling collusion on the part of the Raspberry Pi / Raspbian people.  You have to <a href="https://raspberrypi.stackexchange.com/questions/59605/access-to-raspberry-pi-vnc-session-from-mac-os-x" data-wpel-link="external" target="_blank" rel="external noopener">do additional work</a> to make it actually work &#8211; work that&#8217;s completely undocumented in any official Raspberry Pi / Raspbian documentation.  (at best you&#8217;ll find the interwebs littered with accounts &amp; instructions on installing a non-proprietary VNC server in replacement, which presumably also works to solve this problem)</p>



<h3 class="wp-block-heading">Installing Homebridge</h3>



<p>It wasn&#8217;t actually my purpose in buying the Raspberry Pi, but I decided that &#8211; before I go down the meat grinder that is presumably getting Swift to work on the Pi, since the Pi sadly lacks support for Swift out of the box &#8211; I figured I&#8217;d just real quickly install <a href="https://github.com/homebridge/homebridge" data-wpel-link="external" target="_blank" rel="external noopener">Homebridge</a>, since I do have a couple of devices I&#8217;ve long wished would work with HomeKit.</p>



<p>Ugh.</p>



<p>What a fucking dumpster fire.</p>



<p>You can install Homebridge raw, but since it&#8217;s written in Node.js, I didn&#8217;t want it going into my real, bare system &#8211; infecting it with npn and JavaScript and all that horror.</p>



<p>This would be a perfect opportunity for Docker, and as one might expect there are many guides on how to install Homebridge via Docker.</p>



<h3 class="wp-block-heading">Installing <s>Homebridge</s> Docker</h3>



<p>Sadly &#8211; and frankly bizarrely &#8211; running Homebridge through Docker <a href="https://github.com/homebridge/homebridge/blob/latest/README.md" data-wpel-link="external" target="_blank" rel="external noopener">isn&#8217;t officially supported</a>.</p>



<p><a href="https://web.archive.org/web/20200804135351/https://stevenbreuls.com/2019/01/homebridge-on-raspberry-pi-using-docker/" data-wpel-link="external" target="_blank" rel="external noopener">This 3rd party guide</a> appeared to be the best, based on <a href="https://github.com/homebridge/docker-homebridge" data-wpel-link="external" target="_blank" rel="external noopener">this third party project to support Homebridge in Docker</a>.  Step zero, of course, is to install Docker itself.  Surely that&#8217;s trivial.  It&#8217;s <em>Docker</em>.  What <em>doesn&#8217;t</em> run Docker these days?  Hell, macOS runs Docker and <em>it doesn&#8217;t even support containers</em>.  I was baffled that Raspbian didn&#8217;t include Docker pre-installed.</p>



<p>Many, <em>many</em> hours later, it still wasn&#8217;t working.  One would think that <em>Docker</em>, of all things, would be a seamless thing to <em>sudo apt install</em>, but far from it.  For example, the <a href="https://download.docker.com/linux/raspbian/" data-wpel-link="external" target="_blank" rel="external noopener">official Docker apt repo for Raspbian</a> tries to install some &#8216;aufs-kdms&#8217; as a dependency, even though &#8211; turns out &#8211; it&#8217;s <em>not</em> a real dependency and doesn&#8217;t even compile on Raspbian.  WTF?!</p>



<p>So that wasted hours, in figuring that out &#8211; predominately consumed in trawling the interwebs for a solution.  After many hours and reading through dozens if not hundreds of StackOverflow, blog, and similar sources quoting similar issues and offering bogus remedies, I <em>finally</em> found <a href="https://github.com/raspberrypi/linux/issues/3021" data-wpel-link="external" target="_blank" rel="external noopener">a thread that&#8217;s actually helpful</a>.</p>



<p>The worst was yet to come.</p>



<p>At some point in this process something <em>also</em> screwed with my Pi&#8217;s boot settings to force the root directory to be mounted &#8211; at boot &#8211; as <a href="https://wiki.archlinux.org/title/Overlay_filesystem" data-wpel-link="external" target="_blank" rel="external noopener">an overlay</a> with writes going to tmpfs (i.e. nowhere).  That wasted yet more hours as I painstakingly root-caused why my Raspberry Pi suddenly had alzheimers (and lost a lot of progress otherwise on installing Homebridge, too).</p>



<p>The web utterly failed in this case, as I couldn&#8217;t even find how to disable overlayfs.  All I got, mockingly, was endless articles explaining how to <em>enable</em> it and voluntarily ruin your day.</p>



<p>Even just figuring out that it <em>was</em> overlayfs that was screwing me took quite some time, since the first failure symptom was a baffling error message when trying to start dockerd:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>failed to start daemon: rename /var/lib/docker/runtimes /var/lib/docker/runtimes-old: invalid cross-device link</p>
<cite>With love and fuck you, dockerd</cite></blockquote>



<p>Ultimately I found a fix, in part thanks to <a href="https://forums.raspberrypi.com/viewtopic.php?p=1044893" data-wpel-link="external" target="_blank" rel="external noopener">this forum post</a> which had enough transparency on enabling this bullshit situation that I could deduce how to <em>disable</em> it &#8211; long story short you need to mount the SD card on another, working computer and remove &#8216;<em>boot=overlay</em>&#8216; from /boot/cmdline.txt and &#8216;<em>initramfs initrd.img-4.19.75-v7l+-overlay</em>&#8216; from /boot/config.txt.</p>



<p>How that ever got enabled I have no idea.  Absolutely no commands I ran had <em>anything</em> to do with that at all.  Evidently something buried inside Docker installation and/or execution performs this system lobotomy.  Even then, I&#8217;ve since reviewed every single command I ran, and nothing seems even remotely like it could nor should have caused that.</p>



<p>Despite ultimately defeating all this failure, I was greeted by merely another fatal failure, just as inscrutable as the last:</p>



<pre class="wp-block-preformatted"><strong>$ docker-compose up -d</strong>
ERROR: Couldn't connect to Docker daemon at http+docker://localhost - is it running?

If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.
<strong>$ ps auxww | grep docker
</strong>root &nbsp; &nbsp; &nbsp; 427&nbsp; 0.6&nbsp; 1.4 966720 58856 ?&nbsp; &nbsp; &nbsp; &nbsp; Ssl&nbsp; 15:42 &nbsp; 0:01 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
pi&nbsp; &nbsp; &nbsp; &nbsp; 1942&nbsp; 0.0&nbsp; 0.0 &nbsp; 7348 &nbsp; 472 pts/0&nbsp; &nbsp; S+ &nbsp; 15:46 &nbsp; 0:00 grep --color=auto docker</pre>



<p>Turns out this was because my user (&#8216;pi&#8217;, the default) wasn&#8217;t a member of the &#8216;docker&#8217; group.  I&#8217;d added it previously, but it must have been under the tyrannical overlayfs regime, and all memory of that event purged.  Adding it again (then logging out &amp; back in) fixed it (<em>sudo usermod -aG docker pi</em> btw).</p>



<h3 class="wp-block-heading">This is why Linux can&#8217;t have nice things</h3>



<p>In summary, Linux in general, and certainly Raspbian specifically, continues to be the same giant clusterfuck it&#8217;s always been.  I&#8217;m no Linux novice &#8211; I&#8217;ve been writing software for Linux for over a decade as my day job.  I&#8217;ve just had the luxury of teams of dozens if not hundreds of other engineers to insulate me from the bare wiring that is installing, configuring, &amp; maintaining a Linux installation.</p>



<p>At this point I&#8217;m <em>two days in</em> and have only <em>just</em> gotten Docker working.  For all the time I&#8217;ve wasted I&#8217;ve completely blown the price savings between a Raspberry Pi and even a <a href="https://www.apple.com/shop/buy-mac/mac-mini" data-wpel-link="external" target="_blank" rel="external noopener">brand new, $800 Mac Mini</a>.</p>



<p>And I still haven&#8217;t even <em>started</em> installing Swift, let-alone actually running my Swift app on the Raspberry Pi, which &#8211; contrary to where all my time has gone on this project &#8211; is the <em>actual</em> purpose of this whole sad enterprise.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wadetregaskis.com/the-dumpster-fire-that-is-the-raspberry-pi/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4431</post-id>	</item>
		<item>
		<title>The Myth of The Web</title>
		<link>https://wadetregaskis.com/the-myth-of-the-web/</link>
					<comments>https://wadetregaskis.com/the-myth-of-the-web/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Wed, 02 Jan 2019 00:31:00 +0000</pubDate>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[Camino]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[competition]]></category>
		<category><![CDATA[Edge]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[monopoly]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[The Web]]></category>
		<category><![CDATA[web browser]]></category>
		<category><![CDATA[YouTube]]></category>
		<guid isPermaLink="false">https://blog.wadetregaskis.com/?p=4321</guid>

					<description><![CDATA[The recent kerfuffle with Microsoft Edge vs YouTube was particularly interesting since while I have no specific knowledge of that instance, I certainly do have some cultural insight from nearly eight years working inside the so-called Chocolate Factory &#8211; though not on any web stuff, to be clear, so my experience is in the broadest&#8230; <a class="read-more-link" href="https://wadetregaskis.com/the-myth-of-the-web/" data-wpel-link="internal">Read more</a>]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img loading="lazy" decoding="async" width="670" height="886" src="https://wadetregaskis.com/wp-content/uploads/2019/01/Web-browser-battle.jpg" alt="" class="wp-image-4329" srcset="https://wadetregaskis.com/wp-content/uploads/2019/01/Web-browser-battle.jpg 670w, https://wadetregaskis.com/wp-content/uploads/2019/01/Web-browser-battle-194x256.jpg 194w, https://wadetregaskis.com/wp-content/uploads/2019/01/Web-browser-battle-194x256@2x.jpg 388w" sizes="auto, (max-width: 670px) 100vw, 670px" /></figure>



<p>The recent kerfuffle with Microsoft Edge vs YouTube was particularly interesting since while I have no specific knowledge of that instance, I certainly do have some cultural insight from nearly eight years working inside the so-called Chocolate Factory &#8211; though not on any web stuff, to be clear, so my experience is in the broadest internal sense.</p>



<p>Like everyone else last week, I was trying to determine how much intent or malice was behind Google&#8217;s actions, but with a marginally more informed perspective &#8211; or at least a relatively unusual one.</p>



<p>Permit me to first provide some larger context, though.</p>



<p>When I worked at Apple, back in ~2006-2010, I insisted on using <a href="https://caminobrowser.org" data-wpel-link="external" target="_blank" rel="external noopener">Camino</a>, because it was superior to Safari at the time (which, among other flaws, was particularly crashtastic in its early years &#8211; an attribute which thankfully is long gone, but has burned itself permanently into my emotional memory).</p>



<p>That choice to not use Safari caused periodic issues because some Apple-operated websites wouldn&#8217;t work properly with anything but Safari.  When I reported those issues internally, the typical response was &#8220;we only support Safari&#8221;.  From the perspective of Apple, once they had their own web browser, that was all that mattered.  Thankfully it wasn&#8217;t a huge issue since the web wasn&#8217;t that important to day-to-day work at Apple, as they used native applications for most things (sidenote:  I still miss Radar… I <em>didn&#8217;t</em> miss Xcode for a long time, until I was forced more recently to use IntelliJ).  And certainly the world outside Apple didn&#8217;t care about this cute little &#8216;Safari&#8217; thing, at the time.</p>



<p>My experience at Google was essentially the same.</p>



<p>The vast majority of Google&#8217;s internal websites do not work properly in any browser except Chrome.  This is a very real problem since it&#8217;s practically impossible to perform any job function at Google without using their internal websites heavily, since Google is so dogmatically opposed to native applications.  Google has worked extremely hard to [try to] make it possible to do almost anything through Chrome (often to the point of absurdity).</p>



<p>Ironically even Microsoft &#8211; whom I currently work for, via LinkedIn &#8211; are on the Chrome bandwagon, as some of their websites &#8211; that I am required to use for work &#8211; require Chrome.</p>



<p>Most interestingly &#8211; and distinct from Apple&#8217;s behaviour, where dysfunction in browsers outside their own was predominately based on actual functional differences between them &#8211; this &#8216;requirement&#8217; to use Chrome is often not because of any <span style="font-style: italic;">actual,</span> functional dependency on Chrome, but because Google&#8217;s (and Microsoft&#8217;s) web developers will specifically require a Chrome user-agent, and explicitly block any other browser.  While this is easily worked around by spoofing the user-agent field &#8211; and is how I know that the purported Chrome requirement is usually a fallacy &#8211; it emphases the mentality at Google:</p>



<p style="text-align:center">There is no web, there is only Chrome.</p>



<p>This is, I believe, the crux of the matter in not just this Edge vs YouTube issue, but with web development broadly in space &amp; time.  The vast majority of web developers don&#8217;t create content for <em>The Web</em>, they create content for a browser.  <em>One</em> browser, usually.</p>



<p>I saw it unashamedly unfiltered inside Google, but it inevitably leaks out in time &#8211; through things like carelessly &amp; needlessly crippling other browsers&#8217; performance on YouTube.</p>



<p>While today that browser happens to be Chrome, before Chrome existed there was still always <em>that</em> browser &#8211; e.g. the 90s and much of the 00s was defined by Microsoft Internet Explorer&#8217;s dominance and the refusal by the majority of so-called web developers to create content for <span style="font-style: italic;">The&nbsp;Web</span> rather than just Internet Explorer.  (Of course, back then The Web really was almost synonymous with Internet Explorer, with ≥90% marketshare for many years, so at least it was more pragmatic back then than Chrome obsession is now.)</p>



<p>So, I&#8217;m actually sceptical that the YouTube team explicitly sabotaged Edge &#8211; rather, I think it&#8217;s just one of endless cases of web developers not really caring about <em>The Web</em> &#8211; ignorance &amp; indifference, in other words, rather than [outright] malice.  But just as caustic &amp; dangerous.</p>



<p>What <em>particularly</em> concerns me today is that it&#8217;s not <em>quite</em> the same as the terrible 90s and 00s.  Then, when Internet Explorer dominated, the vast majority of important websites were <em>not</em> operated by Microsoft.</p>



<p>Today, Google&#8217;s web properties are dominant in mindshare if not marketshare to the point of essentially being monopolies (certainly in the case of YouTube, at least) &#8211; <em>way</em> more than anything Microsoft ever did was.</p>



<p>More to the point, 90s web developers <em>chose</em> to develop for Internet Explorer exclusively &#8211; they were not coerced into it for the most part, nor firmly bound to that choice, because their corporate masters did not have a horse in the browser race and were pragmatically &amp; unemotionally going for audience reach.  A meritocracy was possible, and existed to a degree, and was essential to the rise of Firefox, my nostalgic Camino, and yes, even Chrome.</p>



<p>Google very much does have a horse in that race, and I know &#8211; from many years of experience inside Google seeing their unfiltered opinions &#8211; that they absolutely do want Chrome to become the <em>only</em> horse in that race.  Not because of some comically-evil secret council scheming at the heart of Mountain View, but because they culturally &amp; corporately just don&#8217;t care about anyone else.  Modern Google is just as paranoid, fearful, power-hungry, and ruthless as 90s-era Microsoft ever appeared to be &#8211; Google want <em>control</em>, and the browser today is as fundamental to control as operating systems ever were.</p>



<p>Given all that, my fear is that there&#8217;s no longer a practical way for another browser to compete on merit with Chrome &#8211; anymore so than a third party app store can compete on iOS, for example.</p>



<p>Chrome is open source in the literal sense, but not in the more important governance &amp; existential senses.  The only way to give The Web a chance is to remove any corporate browser bias from the minds of the top websites&#8217; developers &#8211; Google&#8217;s web developers.  (Or, technically, to just supplant Google&#8217;s numerous dominant web properties.  Good luck with that.)</p>



<p>This assuredly won&#8217;t happen anytime soon by way of government intervention, given the current U.S. political circumstance, but it is conceivable that Google themselves would perform this surgical separation voluntarily, for the good of The Web.</p>



<p>Sadly, I fear that&#8217;s unlikely in an era post-&#8220;Do no evil&#8221;.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wadetregaskis.com/the-myth-of-the-web/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4321</post-id>	</item>
	</channel>
</rss>
