<?xml version="1.0" encoding="utf-8" standalone="no"?><rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"><channel><title/><copyright>Copyright © 2022</copyright><pubDate>Sat, 5 Mar 2022 15:28:04 GMT</pubDate><language>en-us</language><itunes:explicit>no</itunes:explicit><itunes:category text="Audio Blogs"/><itunes:category text="Technology"><itunes:category text="Tech News"/></itunes:category><item><title>Live Unit Testing</title><pubDate>Sat, 5 Mar 2022 00:00:00 GMT</pubDate><guid isPermaLink="false">/posts/2022-03-05-live-unit-testing</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>I've been dabbling on and off with Visual Studio's <strong>Live Unit Testing</strong> feature. Introduced in 2017, it's arguably a sherlocking of <a href="https://www.ncrunch.net/">NCrunch</a>, with all that entails: a first party implements something that used to be a third party's business model, and also gets to integrate it better (since, y'know, they're the first party). I hope the NCrunch folks are doing well.</p>
<p>In a recent project, I've tried to be more judicious about unit tests, and Live Unit Testing helps not only with that, but also with a Test-Driven Development-like approach. So what is it?</p>
<p>First, of course, there's continuous integration, where the entire suite of tests gets run on a separate machine, typically after source control push or at an interval. You get the added benefit that you know the code works exactly the same as on your local machine (did you forget to check something in? Is your code platform-dependent in a way you didn't expect? Is there a hardcoded path somewhere?). Tools like Jenkins, or these days, perhaps GitHub Actions.</p>
<p>Then there's already the <strong>Test Explorer</strong> pane, which enumerates tests and their current status. A test that ran successfully is green. A test that failed is red. Tests that haven't run recently aren't as saturated. You can make so-called Playlists, where you only want to run a subset of tests, perhaps for performance reasons or because you already know you aren't currently working on a section affecting the other tests.</p>
<figure>
<p><img src="/2022-03-05-live-unit-testing.assets/test-explorer.png" alt="Test Explorer"></p>
<p>A Visual Studio Test Explorer screenshot, showing 39 tests total, 6 of which have recently successfully run, and 4 of which failed on their non-recent run. There's also good use of hierarchy here: first, the assembly containing the tests, then the namespace they're in, then the class, then the concrete test method, and finally multiple inputs (test cases) for the same test.</p>
</figure>
<p>It also integrates with <strong>CodeLens</strong>, a Visual Studio feature where a little line gets inserted in your text editor for additional metadata. The most recent committer, the amount of references to the code (is it perhaps unused?), and, if any, the result of the tests.</p>
<figure>
<p><img src="/2022-03-05-live-unit-testing.assets/code-lens-small.png" alt="CodeLens"></p>
<p>CodeLens above a method named <code>GeneratePassword</code>. Notice how it tells us that only two out of six tests are passing.</p>
</figure>
<p>Wait, which ones are failing, you ask? You can simply click on "2/6 passing" to get a detailed popup. <em>And</em> you can even use that popup to run those tests, or run them in a debugger, if you'd like.</p>
<figure>
<p><img src="/2022-03-05-live-unit-testing.assets/code-lens-popup.png" alt="CodeLens popup"></p>
<p>CodeLens's test popup, which is a more detailed and also slightly interactive view.</p>
</figure>
<p>Live Unit Testing similar to Test Explorer in that its primary UI is a pane right in the IDE. Indeed, much of it looks similarly, occasionally to the point of confusion, because it's <em>not</em> the same.</p>
<figure>
<p><img src="/2022-03-05-live-unit-testing.assets/live-unit-testing.png" alt="Live Unit Testing"></p>
<p>The main Live Unit Testing pane. We get the same hierarchy and similar status indication. One key difference: there are play/pause/stop buttons.</p>
</figure>
<p>Test Explorer interactively requires you to run tests. It <em>encourages</em> it, such as with the CodeLens inline icons, but it won't do it for you.</p>
<p>Live Unit Testing, on the other hand, runs your tests continuously in the background. In fact, it also compiles the code in the background, in its own little sandboxed environment. Your regular compilation isn't affected by this, <em>nor</em> are the results in Test Explorer.<a id="fnref:1" href="/#fn:1" class="footnote-ref"><sup>1</sup></a></p>
<p>I mentioned TDD at the beginning, and in a scenario like this library, this really rocks. You write stubs of code, you write the tests, they all fail, then you start implementing, and you see one test after another begin succeeding — nor not. It's TDD as it should be, with only a few seconds of lag.</p>
<p>But it's also been largely unchanged since 2017, and I really thought Visual Studio 2022 (two major releases later) would've addressed a few issues. Here's my two big ones.</p>
<h2 id="poor-diagnostics">Poor diagnostics</h2>
<p>As mentioned, LUT runs in its separate environment. It does not compile to <code>bin</code>/<code>obj</code>, instead creating its own hierarchy inside the hidden <code>.vs</code> folder. This is good in that it avoids interfering with your regular work. None of building, running the debugger, etc. care about what LUT is currently doing or not doing.</p>
<p>But what if LUT fails? The Error List won't tell you, because that is for the regular toolchain. The Output window <em>will</em> give you a hint, but only if you've explicitly switched to its Live Unit Testing section. Not only does the drop-down not give you a clue that there could be new lines in there; it also likes to automatically switch back to the Build section instead, which doesn't mention LUT at all (again, sort of by design).<a id="fnref:2" href="/#fn:2" class="footnote-ref"><sup>2</sup></a></p>
<figure>
<p><img src="/2022-03-05-live-unit-testing.assets/output-window-section-picker.png" alt="Output window, showing the section picker"></p>
<p>The Output window. This list of sections is… not VS's finest hour in UI.</p>
</figure>
<p>If you're lucky enough to correctly guess that LUT isn't working right, here's what the Output window, with default settings, will tell you:</p>
<figure>
<p><img src="/2022-03-05-live-unit-testing.assets/output-window-lut.png" alt="Output window, showing LUT"></p>
<p>LUT's log.</p>
</figure>
<h3 id="build-errors">Build errors</h3>
<p>Now that we're a few levels deeper in the rabbit hole, we can look in the <code>diag</code> folder, which in turn may contain a log file, which in turn sometimes contains a build error:</p>
<pre><code>[12:41:14.463 Verbose] - BuildManager - D:\PasswordRulesSharp\PasswordRulesSharp\CharacterClass.cs(14,55): error CS0246: The type or namespace name 'NotNullWhenAttribute' could not be found (are you missing a using directive or an assembly reference?)
</code></pre>
<p>(Why didn't you just tell me <em>that</em>?)</p>
<p>Now, that's a very actionable error. But keep in mind that none of this is surfaced in UI. In fact, that very moment, the Live Unit Testing pane will still happily show you all-green checkmark circles for your tests, making it look as though not only are all tests passing, but also, that all tests have run recently. The first is true; the latter is not. Unlike Test Explorer, Live Unit Testing <em>doesn't</em> reliably show you whether a result may be stale.</p>
<h3 id="poor-file-path-behavior">Poor file path behavior</h3>
<p>But sometimes, it also leads a few levels deeper, like LUT complaining about a missing file. What file? The log doesn't say. Does it work in a different project? Indeed.</p>
<p>Remember how LUT uses its own, semi-hidden hierarchy in <code>.vs</code>? Well, that combined with Windows's traditional limit of file paths of 255 characters<a id="fnref:3" href="/#fn:3" class="footnote-ref"><sup>3</sup></a> can easily mean that, if your project hierarchy is just short enough to work, but LUT adds its own internal hierarchy <em>on top</em>, it can fail. Again, the key problem here is not that this happens, but that you'll be spending the next two hours figuring out 1. that LUT hasn't actually been doing anything, 2. that this isn't a build error, as a regular build does work, 3. that it works with a fresh project, 4. so it must be something weird between LUT and this particular project.</p>
<h3 id="broken-standard-template">Broken standard template</h3>
<p>I've had multiple occasions where LUT refuses to run any tests with a freshly-created test project. The cause appears to be that the project, by default, references a Test SDK that isn't binary-compatible with the Visual Studio IDE. Absolutely nothing in the diagnostics seems to hint at that. Instead, you try, randomly, to update your NuGet packages, and suddenly, it works.</p>
<h3 id="suggestions">Suggestions</h3>
<p>Two easy fixes:</p>
<ul>
<li>if <em>anything</em> non-successful occurs, have a yellow bar at the top of the LUT pane that tells me so!</li>
<li>the Test Explorer tests that haven't run in a while have a dimmed icon and text. The same should be true of Live Unit Testing's, <em>especially</em> if (see above) something appears to be wrong.</li>
<li>the Error List already has Build + IntelliSense option. Let me choose to also surface LUT errors here, please.</li>
</ul>
<h2 id="contradictory-information">Contradictory information</h2>
<p>Remember that CodeLens UI? Well, here's a fun one. Another piece of UI LUT nicely adds is a gutter to the side that shows you which lines of code failed in a recent test.</p>
<figure>
<p><img src="/2022-03-05-live-unit-testing.assets/code-lens-plus-lut-hints.png" alt="A method, as well as CodeLens on top, and LUT hints to the left-hand side"></p>
<p>The <code>GeneratePassword</code> method again; this time also with LUT hints to the left-hand side.</p>
</figure>
<p>Except, hang on a second. CodeLens says 2 out of 6 tests are passing, and LUT shows only green checkmarks?</p>
<p>Again, this is a downside to LUT being its own thing. If you stop LUT, its gutter disappears. If not, it runs continuously (unless, of course, it has silently decided to fail) — whereas CodeLens, instead, relies on Test Explorer, which doesn't automatically run at all.</p>
<p>So in other words, LUT's information cannot always be trusted to be recent, because when failures (other than, of course, failing tests) occur, the UI gives you no indication of that. And <em>Test Explorer</em>'s information <em>also</em> cannot be trusted to be recent, because you need to run it manually, but at least <em>that</em> one shows you when a result is stale.<a id="fnref:4" href="/#fn:4" class="footnote-ref"><sup>4</sup></a></p>
<h2 id="in-conclusion">In conclusion</h2>
<p>Live Unit Testing seems to have improved in terms of performance and quality, but it needs work. Even for a relatively simple project like the one in my screenshots, I ran into a multitude of issues that almost made me give up on the feature.</p>
<h2 id="coda-the-mac">Coda: The Mac</h2>
<p>The Mac version of Visual Studio <a href="https://developercommunity.visualstudio.com/t/add-live-unit-testing-to-visual-studio-for-mac/1320192">doesn't offer this feature at all</a>. <a href="https://developercommunity.visualstudio.com/t/code-lens/351847">Nor does it offer CodeLens.</a></p>
<p>It does have a <strong>Test Results</strong> pane, a bit like Test Explorer (but without the ability to create playlists), and also offers to run a test in a debugger.</p>
<p>I'm not sure if there's any Microsoft-internal roadmap at all to get it to feature parity with Windows at least in aspects that aren't platform-specific (the Mac version will likely never get a WPF designer, say) — but if so, it feels like it's easily five years away. It's steadily gotten better, but they sure have their work cut out for them.</p>
<div class="footnotes">
<hr>
<ol>
<li id="fn:1">
<p>Can you see where I'm going with this?<a href="/#fnref:1" class="footnote-back-ref">↩</a></p>
</li>
<li id="fn:2">
<p>In general, the Output window is in need of an overhaul. Developers waste too much time fiddling with "was this logged anywhere? If so, in which section?". How about: 1. eschew the drop-down in favor of a sidebar, with checkboxes so you can show multiple sections at once. 2. for sections not currently enabled, show a badge with how many lines you haven't read yet. (If the Output window is too narrow for a sidebar because you have two panes side-by-side, just show the old UI instead.)<a href="/#fnref:2" class="footnote-back-ref">↩</a></p>
</li>
<li id="fn:3">
<p>Yes, I know about the <code>\\?\</code> paths — but .NET doesn't use them by default. And I know about Windows 10 making further changes to that effect — but those are <a href="https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later">opt-in</a> and obscure.<a href="/#fnref:3" class="footnote-back-ref">↩</a></p>
</li>
<li id="fn:4">
<p>Although CodeLens does <em>not</em>. Remember that CodeLens test popup above? Well, Test Explorer says none of those results are recent!<a href="/#fnref:4" class="footnote-back-ref">↩</a></p>
</li>
</ol>
</div>
]]></content:encoded><description>&lt;p&gt;I've been dabbling on and off with Visual Studio's &lt;strong&gt;Live Unit Testing&lt;/strong&gt; feature. Introduced in 2017, it's arguably a sherlocking of &lt;a href="https://www.ncrunch.net/"&gt;NCrunch&lt;/a&gt;, with all that entails: a first party implements something that used to be a third party's business model, and also gets to integrate it better (since, y'know, they're the first party). I hope the NCrunch folks are doing well.&lt;/p&gt;</description></item><item><title>Chuckellania for November 3rd, 2021</title><pubDate>Thu, 11 Nov 2021 00:00:00 GMT</pubDate><guid isPermaLink="false">/posts/2021-11-03-chuckellania</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><a href="https://twitter.com/boring_cactus/status/1455564346969387023">unicode is complicated because languages are complicated because people are complicated</a></p>
<blockquote>
<p>going &quot;ehh these complexities don't matter in the context i'm working in&quot; is
the same as going &quot;ehh these people don't matter in the context i'm working in&quot;</p>
</blockquote>
<p>I go – somewhat controversially — further than that. If you inadvertently do
that, and your software incidentally doesn't support other cultures well, that's
one thing. Happens to all of us. But if you repeatedly brush off the problems
Unicode was trying to solve because <em>you</em> think they're not important to <em>you</em>,
<a href="https://twitter.com/chucker/status/1455807083073490949">that's a form of racism</a>.</p>
<p>Almost invariably, it's people who write in English, or in another language
using the Latin script, making assertions of the &quot;why is Unicode so
complicated?&quot; or &quot;it could easily fit in 2 bytes if you leave out all the
needless complexity?&quot; kind, where &quot;needless&quot; is needless for <em>them</em>, not for
the people that complexity was designed for. Really, when you interrogate that
any further, you realize what they're asking is &quot;why won't those people just
write in English instead?&quot;</p>
<p>I sympathize that getting Unicode right is hard — so hard that most languages
and frameworks don't even implement something like a <code>string.getLength()</code> API
&quot;correctly&quot;. They look at amount of bytes, or amount of code points, rather than
what you <em>probably</em> want (but is much harder to compute): amount of visible
glyphs on screen.</p>
<p>But just because it's hard doesn't mean we shouldn't strive to do it.</p>
<hr />
<p><a href="https://twitter.com/badamczewski01/status/1455499944987660288">These pseudo-C# annotations to assembler</a>
look nice. For example, <code>add r8d, 64h</code> is commented with <code>r8d += 100</code>, which far
more closely matches the way I think.</p>
<hr />
<p><a href="https://twitter.com/ChristianSelig/status/1455676253336477703">The feeling that others have used your app far more than you ever will is quite
amazing.</a></p>
]]></content:encoded><description>&lt;p&gt;&lt;a href="https://twitter.com/boring_cactus/status/1455564346969387023"&gt;unicode is complicated because languages are complicated because people are complicated&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Chuckellania for November 2nd, 2021</title><pubDate>Thu, 11 Nov 2021 00:00:00 GMT</pubDate><guid isPermaLink="false">/posts/2021-11-02-chuckellania</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><a href="https://ihateregex.io/playground">IHateRegex</a> has another regular expressions
playground. I was more familiar with <a href="https://regexr.com/">RegExr</a> and <a href="https://regex101.com/">regex101</a>,
and, back in the day when Silverlight still ran on macOS, I enjoyed running
<a href="http://regexhero.net/tester/">Regex Hero's online tester</a>. Because it was
written in Silverlight, it matched .NET's regex engine precisely, because, well,
that's what it was running on.</p>
<p>I briefly dabbled in using WebAssembly (mono-wasm<a id="fnref:1" href="/#fn:1" class="footnote-ref"><sup>1</sup></a>) to add .NET
support, and <a href="https://github.com/firasdib/Regex101/issues/156#issuecomment-493606953">made a proof of concept</a>,
but never <a href="https://github.com/firasdib/Regex101/issues/156#issuecomment-493606953">quite</a>
bothered to optimize and merge it into some public website.</p>
<p>IHateRegex looks neat, but has significant differences from .NET (and doesn't
appear to support named groups at all, a feature I use heavily), and has some
very odd/annoying behavior with arrow keys, so, back to one of the two others I
go.</p>
<p>(<a href="https://twitter.com/AmCharlieWills/status/1455239028928917506">via</a>)</p>
<hr>
<p><a href="https://twitter.com/marcoarment/status/1455245820136198150">Today in features so hard to discover, most users (including me) will conclude
they don't exist, so why even bother implementing them at all.</a></p>
<p>(For me, it only shows tabs from one device, which is already broken enough, but
also, that device hasn't been my current phone for weeks.)</p>
<hr>
<p><a href="https://twitter.com/chucker/status/1455616881512128523">I'd love</a> for someone
to benchmark the result of building <code>Roslyn.sln</code> on:</p>
<ul>
<li>macOS, running <code>dotnet</code> CLI</li>
<li>Windows on ARM, virtualized, running <code>dotnet</code> CLI</li>
<li>Windows on ARM, virtualized, running Visual Studio 2022, emulated</li>
</ul>
<p>Haven't yet gotten a clear picture of just how bad the performance drop is.</p>
<p>(Assume a 32 GiB RAM machine with, say, 16 GiB reserved for the VM. Maybe 20, if
that helps.)</p>
<hr>
<p>I remember noticing this with my 2013 MacBook Pro back then, and I also noticed
this much more recently with my iPhone 13: Apple <em>really</em> invests in those
internal speakers, and <a href="https://twitter.com/film_girl/status/1455343411351855108">the 2021 MacBooks Pro are no exception</a>.</p>
<p>Why they care so much, I'm not quite sure. Maybe because they can. Those
speakers aren't good enough for professional needs, and perhaps never will be.
But perhaps they're <em>just</em> good enough now for professional <em>preview</em> purposes?</p>
<div class="footnotes">
<hr>
<ol>
<li id="fn:1">
<p>Mono, yes, but technically <em>not</em> Blazor, because I wanted to keep
it lightweight.<a href="/#fnref:1" class="footnote-back-ref">↩</a></p>
</li>
</ol>
</div>
]]></content:encoded><description>&lt;p&gt;&lt;a href="https://ihateregex.io/playground"&gt;IHateRegex&lt;/a&gt; has another regular expressions
playground. I was more familiar with &lt;a href="https://regexr.com/"&gt;RegExr&lt;/a&gt; and &lt;a href="https://regex101.com/"&gt;regex101&lt;/a&gt;,
and, back in the day when Silverlight still ran on macOS, I enjoyed running
&lt;a href="http://regexhero.net/tester/"&gt;Regex Hero's online tester&lt;/a&gt;. Because it was
written in Silverlight, it matched .NET's regex engine precisely, because, well,
that's what it was running on.&lt;/p&gt;</description></item><item><title>Chuckellania for November 1st, 2021</title><pubDate>Thu, 11 Nov 2021 00:00:00 GMT</pubDate><guid isPermaLink="false">/posts/2021-11-01-chuckellania</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><a href="https://twitter.com/tom_geraghty/status/1453272201898176520?s=21">One <em>healthy</em> way to make a team more productive is when its members feel safe.</a></p>
<blockquote>
<p>When psychological safety exists in a team, people will say more things like:</p>
<ul>
<li>I need some help</li>
<li>I have an idea</li>
<li>I think we have a problem</li>
<li>I disagree</li>
<li>I'd like to challenge our ways of working</li>
<li>I made a mistake</li>
<li>I made a really big mistake</li>
</ul>
</blockquote>
<hr />
<p>If you use <a href="https://brew.sh/">Homebrew</a> on your Mac, you can create a Brewfile
and significantly reduce the time to set up your next Mac. I haven't done this,
but it's tempting. <a href="https://gist.github.com/cliss/74782128b9a35366ecac44a7c4b45752">Here's Casey Liss's.</a></p>
<p>(I <em>have</em> done the equivalent on Windows, using <a href="http://boxstarter.org/">Boxstarter</a>,
which in turn uses <a href="https://chocolatey.org/">Chocolatey</a>. Especially neat on
servers, I find.)</p>
<p>(<a href="https://twitter.com/caseyliss/status/1454902306609172480">via</a>)</p>
]]></content:encoded><description>&lt;p&gt;&lt;a href="https://twitter.com/tom_geraghty/status/1453272201898176520?s=21"&gt;One &lt;em&gt;healthy&lt;/em&gt; way to make a team more productive is when its members feel safe.&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Chuckellania for October 31st, 2021</title><pubDate>Fri, 5 Nov 2021 00:00:00 GMT</pubDate><guid isPermaLink="false">/posts/2021-10-31-chuckellania</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>On the first day of <a href="https://en.wikipedia.org/wiki/2021_United_Nations_Climate_Change_Conference">COP26</a>
(the 2021 United Nations Climate Change Conference), the United Nations
Development Programme <a href="https://twitter.com/JonnyGeller/status/1454568962516267011">releases a rather punchy ad.</a></p>
]]></content:encoded><description>&lt;p&gt;On the first day of &lt;a href="https://en.wikipedia.org/wiki/2021_United_Nations_Climate_Change_Conference"&gt;COP26&lt;/a&gt;
(the 2021 United Nations Climate Change Conference), the United Nations
Development Programme &lt;a href="https://twitter.com/JonnyGeller/status/1454568962516267011"&gt;releases a rather punchy ad.&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Chuckellania for October 30th, 2021</title><pubDate>Fri, 5 Nov 2021 00:00:00 GMT</pubDate><guid isPermaLink="false">/posts/2021-10-30-chuckellania</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>If you're really into the outdoor laptop lifestyle, the 2021 MacBook Pros'
display may not quite be bright enough, but <a href="https://twitter.com/andy_matuschak/status/1446969571370360833">an e-ink display could be.</a></p>
<hr>
<p>Mac OS Classic had an app<a id="fnref:1" href="/#fn:1" class="footnote-ref"><sup>1</sup></a> called <a href="https://en.wikipedia.org/wiki/Scrapbook_(Mac_OS)">Scrapbook</a>.
I never really understood its point as a kid at the time, but <a href="https://twitter.com/uliwitness/status/1454207797189615621?s=21">Uli proposes that
it was an early form of multiple clipboards.</a>
With that, the name and concept suddenly clicks.</p>
<p>Modern macOS still has Finder's Edit → Show Clipboard menu item (is <em>that</em> where
you would have expected it to reside?), but other than syncing the clipboard
across devices, it hasn't changed much.</p>
<hr>
<p><a href="https://twitter.com/TechEmails/status/1454131380905029647">This 2004 e-mail thread between Microsoft execs</a>,
frustrated over the relative progress of Windows Codename Longhorn (a.k.a.
Vista) compared to Mac OS X 10.4 Tiger is interesting, but it also raises some
questions on whether the execs even knew what they were talking about. Longhorn,
of course, was a troubled software project in some of the same ways Apple's
Copland (the original, never-shipped Mac OS 8) had been decade earlier.</p>
<p>Vic bemoans Spotlight being a WinFS rip-off, but Spotlight's focus is on search,
and <a href="https://twitter.com/BrandonLive/status/1454277258722504705">WinFS at the time didn't even <em>have</em> search</a>.</p>
<p>Vic also thinks Core Video and Core Image are an Avalon competitor, but Avalon
(a.k.a. WPF, the Windows Presentation Foundation) is a UI framework akin Apple's
Cocoa/AppKit, whereas Core Video and Core Image are libraries to help build
video and image editors; apps like Acorn and Pixelmator build on Core Image.</p>
<p>In many ways, the thread seems to miss the point. What the Mac OS X team at the
time did was this: they shipped, and then iterated, and then shipped again. The
Windows Vista team, did not; instead, they kept expanding the scope. What was
supposed to be a stop-gap release before Blackcomb instead subsumed all ideas
<em>and</em> the kitchen sink, including pie-in-the-sky projects like WinFS. Meanwhile,
Mac OS X was incomplete: it lacked major features. 10.0 did not play DVDs or
record CDs.<a id="fnref:2" href="/#fn:2" class="footnote-ref"><sup>2</sup></a> 10.1 was extremely slow. 10.4 still did not have a good
answer for "how do I backup?". And so on. But almost every year, Apple iterated,
and delivered, and it felt to users that things kept getting better.</p>
<p>If the Vista team had shown some humility and focused on features that were
actually ready and polished, much like the 7 team successfully did later on, its
story might have been quite different.</p>
<p>Was Vic too far removed from the Vista team(s) to understand its features? Or,
worse, <em>should</em> he have had a better grasp of them but didn't?</p>
<p>I genuinely think (and thought at the time) that WinFS sounds intriguing on
paper. <a href="https://twitter.com/chucker/status/1454362686125445126">All it needed is a good user story.</a></p>
<hr>
<p><a href="https://twitter.com/i/events/1453845623627821057">The San Antonio, TX zoo is debuting a jaguar skywalk</a>,
and I feel like I've seen that movie in 1993.</p>
<hr>
<p>What if Cyan made a game set between Myst and Riven and called it… <a href="https://twitter.com/cmuratori/status/1454327967526514691">Mydst?</a></p>
<hr>
<p>Speaking of Mac OS X, at some point, its Help menu gained a search feature,
which goes through the entire menu bar of the current application and helps you
discover features. <a href="https://twitter.com/alahmnat/status/1454380726019784708">The usefulness is fantastic</a>,
and the way it looks is cute.</p>
<hr>
<p><a href="https://twitter.com/AndrewProjDent/status/1454443270088560643">What if the notch on the MacBook Pro caused the mouse cursor to obscure the
camera?</a></p>
<div class="footnotes">
<hr>
<ol>
<li id="fn:1">
<p>Technically, a desk accessory, which was in one way a hack to
allow mini-applications to multitask even though the OS <em>had</em> no multitasking
yet, but in another way also <a href="https://daringfireball.net/2004/06/dashboard_vs_konfabulator??from=gyagbbb3">a precursor to widgets</a>.<a href="/#fnref:1" class="footnote-back-ref">↩</a></p>
</li>
<li id="fn:2">
<p>Hard to understand today, but this really mattered then.<a href="/#fnref:2" class="footnote-back-ref">↩</a></p>
</li>
</ol>
</div>
]]></content:encoded><description>&lt;p&gt;If you're really into the outdoor laptop lifestyle, the 2021 MacBook Pros'
display may not quite be bright enough, but &lt;a href="https://twitter.com/andy_matuschak/status/1446969571370360833"&gt;an e-ink display could be.&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Chuckellania for October 29th, 2021</title><pubDate>Sun, 31 Oct 2021 00:00:00 GMT</pubDate><guid isPermaLink="false">/posts/2021-10-29-chuckellania</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><a href="https://twitter.com/threadreaderapp/status/1454891683364155397?s=21">A thread</a>
on how 1990s' transphobic humor in shows such as Ace Ventura and South Park has
caused harm to that generation, and how we're risking repeating that mistake
today.</p>
<hr />
<p><a href="https://twitter.com/timbray/status/1453790812332953618">Oh yeah, it's fall.</a></p>
<hr />
<p><a href="https://twitter.com/film_girl/status/1453795969099698200">Rebrands rarely work.</a></p>
<blockquote>
<p>The good news about Meta is that these kinds of rebrands never work. Philip
Morris will never be known as Altria. Alphabet will always be Google, divisions
be damned. Xfinity will always be Comcast. Qwikster, well, Netflix was just
smart and killed Qwikster.</p>
</blockquote>
<p>(As a somewhat tongue-in-cheek counterpoint, <a href="https://twitter.com/chucker/status/1453864694310125573">I bring up</a>
that nobody calls IBM by its original name any more.)</p>
<hr />
<p><a href="https://twitter.com/steve_shives/status/1453797232633946112">Steve Shives discusses</a>
how Trek fans are a fairly broad spectrum, and some may find Lower Decks very
funny, while others barely react at all, and that's OK.</p>
<p>Personally, of the Kurtzman-era Trek shows I've watched, I've found Lower
Decks's characters the most intriguing so far; certainly more so than most of
Discovery's, but also more so than many of Picard's. I want to know more about
people Boimler and Mariner and the others. And I occasionally find the show
quite funny! However, having watched all of season 1, I haven't found any of the
<em>stories</em> particularly interesting, and some of them outright dumb.</p>
<p>And yet: I'm happy there's lots out there for others to enjoy.</p>
<hr />
<p>The first message was sent over ARPANET (which became the Internet) <a href="https://en.wikipedia.org/wiki/ARPANET">52 years
ago today.</a></p>
]]></content:encoded><description>&lt;p&gt;&lt;a href="https://twitter.com/threadreaderapp/status/1454891683364155397?s=21"&gt;A thread&lt;/a&gt;
on how 1990s' transphobic humor in shows such as Ace Ventura and South Park has
caused harm to that generation, and how we're risking repeating that mistake
today.&lt;/p&gt;</description></item><item><title>Chuckellania for October 28th, 2021</title><pubDate>Sun, 31 Oct 2021 00:00:00 GMT</pubDate><guid isPermaLink="false">/posts/2021-10-28-chuckellania</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>The world's first mass-market use of the RISC-V architecture might be <a href="https://security.googleblog.com/2021/10/pixel-6-setting-new-standard-for-mobile.html">Google's
Titan M2, a security chip in the Pixel 6 phones.</a></p>
<p>To be clear, the main application processor continues to be ARM. Moving a
dedicated chip to a different ISA is much easier, as you don't have to support
existing (or any) third-party code. The main process, OTOH, has to run existing
Android apps, and moving those to RISC-V isn't quite as practical — yet.</p>
<p>I suspect we won't see Apple moving to RISC-V. Rather, if they do move away from
ARM — such as because they're unhappy with Nvidia having bought them, or because
they disagree with further the evolution of the ISA — I expect them to diverge,
slowly at first and then very rapidly. They've already started making custom
extensions, and there's no reason we can't eventually have &quot;Apple Silicon&quot; that
is in fact quite dissimilar from ARM. Just not any time soon, as Apple does
benefit from compatibility with existing binaries. Look for this a decade or two
from now.</p>
<p>(<a href="https://twitter.com/stshank/status/1453457588952076289">via</a>)</p>
<hr />
<p>I've been lucky in the 2+ decades of using PayPal, but I've always hurt of the
capricious ways in which it screens transactions or outright bans accounts.</p>
<p>Such as, say, <a href="https://twitter.com/RaniaKassi/status/1453394066222325776">when you mention a trip to Cuba.</a></p>
<p>Or <a href="https://twitter.com/RaniaKassi/status/1453394066222325776">a Persian rug.</a></p>
<hr />
<p>The MacBook Pro &quot;notch&quot; is the gift that keeps on giving. This time: <a href="https://twitter.com/jsngr/status/1453341112635166720">what if
you don't just split the menu bar but rather the entire screen?</a></p>
<p><a href="https://twitter.com/theconfigurator/status/1453418410310873089">TopNotch</a>
(<a href="https://twitter.com/krishnaar21/status/1453344323550863361">via</a>)is a tool
that makes the notch nearly impossible to see, by turning its surrounding menu
bar black as well.</p>
<p><a href="https://twitter.com/theconfigurator/status/1453418410310873089">Xiaomi phones apparently have a similar setting built in.</a></p>
<p>Depending on how popularity of this feature plays out, I wouldn't be shocked to
see a first-party option in 11.1 or 11.2 that simply shifts the menu bar down.</p>
<hr />
<p><a href="https://www.dropboxforum.com/t5/Dropbox-ideas/Apple-Silicon-M1-Desktop-Sync-Compatibility/idi-p/527743">Dropbox still doesn't have an ARM-native client on macOS.</a></p>
<p>Some of the early staff responses in that thread aren't great:</p>
<blockquote>
<p>This idea is going to need a bit more support before we share your suggestion
with our team.</p>
</blockquote>
<p>It's not an &quot;idea&quot;, and there isn't really any discussion to do, other than on
priorities. But it's been a year and a half since Apple announced the
transition.</p>
<p>A later comment announces a timeframe of &quot;first half of 2022&quot;, which is not a
great look, but better than nothing.</p>
<p>I imagine Mac users are no longer the key demographic Dropbox is focusing on,
and haven't been for a while, but such a response will only further accelerate
people moving away.</p>
<p><a href="https://twitter.com/migueldeicaza/status/1453705545886617603">Not great.</a></p>
<hr />
<p>In more bird news, <a href="https://twitter.com/sabri44220662/status/1452793437846130691">you don't quite expect <em>this</em> wingspan.</a></p>
<p>The bird also seems quite aware of how impressed the humans are.</p>
]]></content:encoded><description>&lt;p&gt;The world's first mass-market use of the RISC-V architecture might be &lt;a href="https://security.googleblog.com/2021/10/pixel-6-setting-new-standard-for-mobile.html"&gt;Google's
Titan M2, a security chip in the Pixel 6 phones.&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Chuckellania for October 27th, 2021</title><pubDate>Fri, 29 Oct 2021 00:00:00 GMT</pubDate><guid isPermaLink="false">/posts/2021-10-27-chuckellania</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Quinn Nelson made two little videos (<a href="https://twitter.com/SnazzyQ/status/1453143510111059968">1</a>,
<a href="https://twitter.com/SnazzyQ/status/1453143798251339778%5D">2</a>) that, frankly, I
find sensationalist.<a id="fnref:1" href="/#fn:1" class="footnote-ref"><sup>1</sup></a></p>
<p>Best as I can tell, there are multiple issues at play:</p>
<ol>
<li>if there are more menus (the left-hand portion) and status items/menu extras
(the right-hand portion) than fit in the menu bar, the overflow strategy macOS
employs is to keep removing status items until at least all menus fit; i.e.,
those status items cannot be seen or used, but at least the current app can be
used in its entirety. This strategy, probably introduced in Mac OS X 10.10, was
never great, and maybe it's time for Apple to change it. But it's not a notch-
specific issue; the notch just <em>exacerbates</em> it because it removes horizontal
space. If your screen resolution were low, you would equally have run into it
sooner or later.</li>
<li>if the menus don't fit to the left of the notch, macOS will continue to the
right, which arguably looks and feels a bit awkward.</li>
<li>if the application does custom drawing in the menu bar, macOS won't handle
that at all. In that case, there may be glitches, and for affected apps, <a href="https://www.macrumors.com/2021/10/28/scale-to-fit-below-built-in-camera-setting-notch/">users
can tick the "Scale to fit below built-in camera" checkbox.</a>
This checkbox is only intended (and visible) for apps whose developers haven't
already said that their app <em>is</em> compatible with the notch.</li>
<li>lastly (and keep in mind: none of the above is a bug, just behaviors not
everyone agrees with), we do have what appears to be an outright bug on Apple's
end: if a status item is very wide and <em>some</em> of it fits, but some of it
overlaps with the notch, macOS will partially draw it, rather than discarding
it.</li>
</ol>
<p>For <strong>1</strong>, tools like <a href="https://www.macbartender.com/">Bartender</a> and <a href="https://matthewpalmer.net/vanilla/">Vanilla</a>
exist. Those also make <strong>4</strong> largely moot. I'm hoping for a first-party solution
here, though.</p>
<p>I don't think <em>any</em> of this makes these computers "not shippable" or a poor
"design", as Quinn seems to imply by his two tweets.</p>
<hr>
<p>Regrettably, the macOS TV app still has a lot of issues, including GUI glitches.</p>
<p>I was able to reproduce both of Uli's — <a href="https://twitter.com/uliwitness/status/1453140103883329537">the minimum width is too small to
properly fit the Search field without overlap</a>,
and, on a Retina Display (a.k.a. on virtually all of Apple's recent computers),
<a href="https://twitter.com/uliwitness/status/1453141449470619651">when dragging columns to rearrange them, they suddenly double in size.</a></p>
<hr>
<p>Another macOS annoyance I run into a lot is how it handles desktop backgrounds.
Really, all I want is to set, for <em>all</em> displays, a solid color that matches my
mood. This seems like a System 7 (1991) kind of problem, but I <em>cannot</em>
reliably get macOS 11 Big Sur (2020) to do this.</p>
<p>First, the UI to set backgrounds is glitchy: just the other day, the Folders
section in one display was ordered differently in the other. And the "well" in
which you can drag an image reacted for all displays, but for one of them, the
<em>actual</em> picture didn't change, <em>until</em> I clicked somewhere.</p>
<p>But, more annoyingly, any of the three displays will, at random, show a
different color. I click a shade of blue for all three in the morning, and by
noon, one of them will show yesterday's shade of forest green.</p>
<p>I get the impression that Apple views this as a rather frivolous feature, and
that bugs in it don't matter. In the grand scheme of things, they don't. But a
company that prides itself on how good the selection of Apple Watch bands is
should also be able to show the correct desktop background.</p>
<hr>
<p>Adobe is adding NFT support to Photoshop. <a href="https://twitter.com/arvalis/status/1453139906448936960">This is, of course, easy to
circumvent</a> and mostly
an exercise in pointlessness.</p>
<p>Now, if you <em>do</em> want some kind of digital watermark in your image, <a href="https://twitter.com/boredzo/status/1453428180430118916?s=21">Photoshop
does in fact have tools for that.</a></p>
<hr>
<p>Universal Basic Income trial runs come and go, <a href="https://losangeles.cbslocal.com/2021/10/27/la-city-council-approves-nearly-40-million-guaranteed-basic-income-pilot-program/">but Los Angeles doing one</a>
seems like a fairly big deal. 3,200 households get $1,000 a month for a year.</p>
<p>(<a href="https://twitter.com/PplsCityCouncil/status/1453143991327748101">via</a>)</p>
<div class="footnotes">
<hr>
<ol>
<li id="fn:1">
<p>I do enjoy him on the <a href="https://www.relay.fm/flashback">Flashback</a>
podcast, though.<a href="/#fnref:1" class="footnote-back-ref">↩</a></p>
</li>
</ol>
</div>
]]></content:encoded><description>&lt;p&gt;Quinn Nelson made two little videos (&lt;a href="https://twitter.com/SnazzyQ/status/1453143510111059968"&gt;1&lt;/a&gt;,
&lt;a href="https://twitter.com/SnazzyQ/status/1453143798251339778%5D"&gt;2&lt;/a&gt;) that, frankly, I
find sensationalist.&lt;a id="fnref:1" href="/#fn:1" class="footnote-ref"&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Chuckellania for October 26th, 2021</title><pubDate>Fri, 29 Oct 2021 00:00:00 GMT</pubDate><guid isPermaLink="false">/posts/2021-10-26-chuckellania</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><a href="https://threadreaderapp.com/thread/1452438176996347907.html">Another exploration of the usability of files and folders</a>:</p>
<blockquote>
<p>Because software rarely operate on &quot;files in folders&quot; anymore, &quot;export&quot; is
increasingly the way software exposes data. But usually you don't want a dead
snapshot; you want to &quot;use this data elsewhere&quot;—which requires repeatedly
exporting &amp; reconciling.</p>
</blockquote>
<p>Silos and exporting are less convenient than files if you want multiple apps to
interact with the same data.</p>
<p>(<a href="https://twitter.com/andy_matuschak/status/1452438190405521409">via</a>)</p>
<hr />
<p>A pre-release benchmark <a href="https://wccftech.com/intel-alder-lake-mobility-cpu-benchmarks-leaked-faster-than-the-apple-m1-max-smokes-amd-5980hx-11980hk/">shows</a>
the Intel Alder Lake-P Core i9-12900HK outperforming the M1 Max, by 3.7% at
single-threaded and 3.9% at multi-threaded tasks.</p>
<p>Surprising, but also quite possibly misleading. What does it take to actually
<em>reach</em> that performance? Does it fit in a chassis that passes as a &quot;laptop&quot;?</p>
<p>I suspect these are lab numbers. I do not expect a Dell XPS or a Microsoft
Surface to achieve them. Plus, by the time these ship in volume, we might
already see an Apple M2 — likely with poorer multi-threaded performance, but
perhaps with better single-threaded performance.</p>
<p>That said, competition is good, and I'm glad Intel is seeing the light on a
heterogenous setup.</p>
<p>(<a href="https://twitter.com/migueldeicaza/status/1452682403370176515">via</a>)</p>
<hr />
<p>Almost without fail every year, there's a rumor that <a href="https://www.macrumors.com/2021/10/25/apple-watch-series-8-blood-glucose-sensors/">an upcoming Apple Watch
will feature non-invasive blood glucose monitoring</a>.</p>
<p>Perhaps where there's smoke, there's fire, but also, perhaps wishful thinking
rather than actual information is driving the rumor mill here.</p>
<p>(<a href="https://twitter.com/philiped/status/1452657285952679937">via</a>)</p>
<hr />
<p><a href="https://twitter.com/petersagal/status/1452698959974129669">A Twitter rulebook.</a></p>
<p>I have a few quibbles with it, but perhaps rule 3 applies:</p>
<blockquote>
<p>Never argue with anybody about anything. Really.</p>
</blockquote>
<hr />
<p>The iPod team delivered a shipping product <a href="https://www.loopinsight.com/2021/10/25/tony-fadell-talks-about-steve-jobs-and-inventing-the-ipod/">within about 5 months of Tony Fadell
joining.</a></p>
<p>That's mighty impressive. A &quot;startup&quot;-like team within a company with the kinds
of resources a startup wouldn't have. I cannot help but wonder if Apple would
still be this &quot;agile&quot; today with a new product launch. That's a tough needle to
thread.</p>
<p>(<a href="https://twitter.com/theloop/status/1452643283319021568">via</a>)</p>
<hr />
<p>If you <em>really</em> needed that level of performance (you almost certainly did not),
you could buy the $2,000 Apple Afterburner card for your $6,000 and beyond Mac
Pro two years ago, and accelerate some specialized tasks, such as ProRes.</p>
<p><a href="https://twitter.com/marcoskirsch/status/1452740193317015560">Today, the M1 Pro has that built in, and the entire 14-inch MacBook Pro costs
$2k.</a></p>
<p>The march of progress.</p>
]]></content:encoded><description>&lt;p&gt;&lt;a href="https://threadreaderapp.com/thread/1452438176996347907.html"&gt;Another exploration of the usability of files and folders&lt;/a&gt;:&lt;/p&gt;</description></item></channel></rss>