This is a valid RSS feed.
This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.
line 907, column 359: (8 occurrences) [help]
... le TV+ the sky’s the limit.</p>]]></content:encoded>
^
<?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/"
>
<channel>
<title>Michael Tsai</title>
<atom:link href="https://mjtsai.com/blog/feed/" rel="self" type="application/rss+xml" />
<link>https://mjtsai.com/blog</link>
<description></description>
<lastBuildDate>Fri, 18 Apr 2025 17:29:03 +0000</lastBuildDate>
<language>en-US</language>
<sy:updatePeriod>
hourly </sy:updatePeriod>
<sy:updateFrequency>
1 </sy:updateFrequency>
<generator>https://wordpress.org/?v=6.2.2</generator>
<item>
<title>Returning to macOS After 20+ Years on Windows</title>
<link>https://mjtsai.com/blog/2025/04/18/returning-to-macos-after-20-years-on-windows/</link>
<comments>https://mjtsai.com/blog/2025/04/18/returning-to-macos-after-20-years-on-windows/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Fri, 18 Apr 2025 17:29:03 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[BusyCal]]></category>
<category><![CDATA[ChatGPT]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Messages.app]]></category>
<category><![CDATA[Moom]]></category>
<category><![CDATA[Photoshop Elements]]></category>
<category><![CDATA[Windows]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47430</guid>
<description><![CDATA[Randy Parker (via TidBITS-Talk): For longer replies in Messages, I would often compose my message on my computer, email it to myself, and then copy and paste it from the Mail app on my iPhone into the Messages app.As a Windows user, I’d have to live with this frustration indefinitely unless I considered one of […]]]></description>
<content:encoded><![CDATA[<p><a href="https://emusements.com/there-and-back-again-returning-to-mac-after-over-20-years-on-windows">Randy Parker</a> (via <a href="https://talk.tidbits.com/t/returning-to-macos-after-20-years-on-windows/30636">TidBITS-Talk</a>):</p>
<blockquote cite="https://emusements.com/there-and-back-again-returning-to-mac-after-over-20-years-on-windows"><p>For longer replies in Messages, I would often compose my message on my computer, email it to myself, and then copy and paste it from the Mail app on my iPhone into the Messages app.</p><p>As a Windows user, I’d have to live with this frustration indefinitely unless I considered one of the following options[…]</p><p>[…]</p><p>While looking for Mac video tutorials, I discovered another invaluable resource: Gary Rosenzweig’s <a href="https://macmost.com/"><strong>MacMost</strong></a> YouTube channel. Rosenzweig’s polished and professional tutorials cover topics from the most basic to the most obscure (not only about macOS but also about iOS and more).</p><p>[…]</p><p>Much as I feared, the [Photoshop Elements] data migration didn’t go smoothly. The program’s backup and restore method failed. Instead, I had to experiment with manually copying over my catalog and photos and then converting the catalog format from 2022 to 2025. Eventually, I stumbled on a sequence of steps where everything migrated correctly.</p><p>[…]</p><p>I have absolutely no regrets about finally making the switch back to Mac. In fact, I quickly came to prefer the macOS user experience over Windows.</p><p>One big reason: the user interface congruity between macOS, iOS, and iPadOS.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/13/rumored-redesign-in-ios-19-and-macos-16/">Rumored Redesign in iOS 19 and macOS 16</a></li>
<li><a href="https://mjtsai.com/blog/2025/02/13/gemmell-is-back-to-mac/">Gemmell Is Back to Mac</a></li>
<li><a href="https://mjtsai.com/blog/2024/02/14/the-imessage-halo-effect/">The iMessage Halo Effect</a></li>
<li><a href="https://mjtsai.com/blog/2023/07/28/switching-to-a-mac-after-decades-on-windows/">Switching to a Mac After Decades on Windows</a></li>
<li><a href="https://mjtsai.com/blog/2023/06/23/safari-17-web-apps/">Safari 17 Web Apps</a></li>
<li><a href="https://mjtsai.com/blog/2023/03/01/imessage-on-windows-via-microsofts-phone-link/">iMessage on Windows via Microsoft’s Phone Link</a></li>
<li><a href="https://mjtsai.com/blog/2021/04/09/why-theres-no-imessage-for-android/">Why There’s No iMessage for Android</a></li>
<li><a href="https://mjtsai.com/blog/2018/03/06/a-year-away-from-macos/">A Year Away From macOS</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/18/returning-to-macos-after-20-years-on-windows/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>Investigating MacPaint’s Source Code</title>
<link>https://mjtsai.com/blog/2025/04/18/investigating-macpaints-source-code/</link>
<comments>https://mjtsai.com/blog/2025/04/18/investigating-macpaints-source-code/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Fri, 18 Apr 2025 17:28:53 +0000</pubDate>
<category><![CDATA[Programming]]></category>
<category><![CDATA[Assembly Language]]></category>
<category><![CDATA[Bill Atkinson]]></category>
<category><![CDATA[History]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[MacPaint]]></category>
<category><![CDATA[Pascal]]></category>
<category><![CDATA[QuickDraw]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47428</guid>
<description><![CDATA[Jeffrey Starr (via Stephen Hackett): One of two launch applications for the Apple Macintosh in 1984, MacPaint is emblematic of the Macintosh’s early quirky revolutionary branding, focus on ease of use, and appeal to artistic customers. Using the source code, we examine the design and implementation of the application. We find that the buffer management […]]]></description>
<content:encoded><![CDATA[<p><a href="https://ztoz.blog/posts/macpaint-source-code/">Jeffrey Starr</a> (via <a href="https://512pixels.net/2025/04/exploring-macpaints-source-code/">Stephen Hackett</a>):</p>
<blockquote cite="https://ztoz.blog/posts/macpaint-source-code/">
<p>One of two launch applications for the Apple Macintosh in 1984, MacPaint is emblematic of the Macintosh’s early quirky revolutionary branding, focus on ease of use, and appeal to artistic customers. Using the source code, we examine the design and implementation of the application. We find that the buffer management and bucket filling algorithms demonstrate mechanical empathy with the 68k platform and leverage the limitations of the domain as a means to improve performance. We also find positive and negative aspects in the code style and architecture and its pliability for change. Finally, we dispute some claimed novel aspects of the program while also arguing for its significance and impact on the development of digital graphic systems.</p>
<p>[…]</p>
<p>Atkinson took Polaroids of the user interface as it evolved and drove into work to share them with the team. Fortunately for posterity, Atkinson saved the Polaroids and we have a detailed visual history of the evolution of the Lisa interface and QuickDraw capabilities as shown in the 2022 CHM interview below.</p>
<p>[…]</p>
<p>The Macintosh team used the ‘Monkey’ as a durability and robustness test mechanism. Developed by Steve Capps, the Monkey would randomly type keys, move objects, and interact with menus (Atkinson 2010, pg 14-15). The team used a computer running in Monkey mode to effectively stress-test an application. MacPaint was able to survive two weeks without crashing.</p>
<p>[…]</p>
<p>Performance-critical code, such as that which manipulates the buffers directly, is in assembly. User interface control logic is in Pascal, as well as code that handles initial setup or rare operations. Operating system calls, such as checking the amount of spare space in the disk drive or invoking the system beep, are in assembly.</p>
</blockquote>
<p><a href="https://www.facebook.com/bill.atkinson.9862/posts/pfbid02qwih6yMYUTsx3VmVXM8zbE1Ss6hoGsJkqowAdmeUqupBDG6RRXBndJyrJfyLSRSJl">Bill Atkinson</a>:</p>
<blockquote cite="https://www.facebook.com/bill.atkinson.9862/posts/pfbid02qwih6yMYUTsx3VmVXM8zbE1Ss6hoGsJkqowAdmeUqupBDG6RRXBndJyrJfyLSRSJl">
<p>I am asking friends and well-wishers to pray for me.
I believe that group intention can actually make a difference.</p>
<p>On October first, I was diagnosed with pancreatic cancer. Because of vascular involvement, surgery is not possible. I am taking weekly chemo treatments to shrink the tumor before surgical resection.</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2010/07/20/macpaint-and-quickdraw-source-code/">MacPaint and QuickDraw Source Code</a></li>
<li><a href="https://mjtsai.com/blog/2021/11/19/first-macpaint-and-macwrite-public-demo/">First MacPaint and MacWrite Public Demo</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/18/investigating-macpaints-source-code/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>The Invalid 68030 Instruction That Accidentally Allowed the Mac Classic II to Successfully Boot Up</title>
<link>https://mjtsai.com/blog/2025/04/18/the-invalid-68030-instruction-that-accidentally-allowed-the-mac-classic-ii-to-successfully-boot-up/</link>
<comments>https://mjtsai.com/blog/2025/04/18/the-invalid-68030-instruction-that-accidentally-allowed-the-mac-classic-ii-to-successfully-boot-up/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Fri, 18 Apr 2025 17:28:37 +0000</pubDate>
<category><![CDATA[Programming]]></category>
<category><![CDATA[680x0]]></category>
<category><![CDATA[Assembly Language]]></category>
<category><![CDATA[Debugging]]></category>
<category><![CDATA[Emulator]]></category>
<category><![CDATA[Mac]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47426</guid>
<description><![CDATA[Doug Brown (via Uli Kusterer): This is the story of how Apple made a mistake in the ROM of the Macintosh Classic II that probably should have prevented it from booting, but instead, miraculously, its Motorola MC68030 CPU accidentally prevented a crash and saved the day by executing an undefined instruction.[…]I didn’t get very far […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.downtowndougbrown.com/2025/01/the-invalid-68030-instruction-that-accidentally-allowed-the-mac-classic-ii-to-successfully-boot-up/">Doug Brown</a> (via <a href="https://chaos.social/@uliwitness/113985231065670214">Uli Kusterer</a>):</p>
<blockquote cite="https://www.downtowndougbrown.com/2025/01/the-invalid-68030-instruction-that-accidentally-allowed-the-mac-classic-ii-to-successfully-boot-up/"><p>This is the story of how Apple made a mistake in the ROM of the Macintosh Classic II that probably should have prevented it from booting, but instead, miraculously, its Motorola MC68030 CPU accidentally prevented a crash and saved the day by executing an undefined instruction.</p><p>[…]</p><p>I didn’t get very far while testing the command+power shortcut in MAME’s emulated Classic II, because I observed something very odd. It booted up totally fine in 24-bit addressing mode, but I could not get it to boot at all if I enabled 32-bit addressing, which I needed in order for MacsBug to load. It would just pop up a <a href="https://en.wikipedia.org/wiki/Macintosh_startup#Sad_Mac">Sad Mac</a>, complete with the <a href="https://en.wikipedia.org/wiki/Macintosh_startup#Chimes_of_Death">Chimes of Death</a>.</p><p>[…]</p><p>This meant the bus error handler was at 0x40A026F0, which is also known as <em>GenExcps</em> in the ROM map. I performed a hard reset of the emulated machine, set a breakpoint on that address, and then waited until it hit the breakpoint. It looks like <em>GenExcps</em> is a big list of BSR instructions that all jump to 0x40A026A0, which is common error handling code identified in the ROM map as <em>ToDeepShit</em>. Nice name, Apple!</p><p>[…]</p><p>If you look closely at the table of branches below the JMP instruction at 0x40A43B6E, there are only 16 entries in the table, corresponding to BoxFlags 0 through 15. The Classic II is BoxFlag 17!</p></blockquote>
<p>So it jumped into the middle of an instruction.</p>
<blockquote cite="https://www.downtowndougbrown.com/2025/01/the-invalid-68030-instruction-that-accidentally-allowed-the-mac-classic-ii-to-successfully-boot-up/"><p>The MAME-emulated Classic II was crashing because A1 didn’t change, so it still contained an invalid address. On hardware, this weird instruction, which several disassemblers refused to touch, and wasn’t even intended to be jumped to because it starts in the middle of an actual valid instruction, was changing A1 to a new value that was a good address. Was this crazy instruction accidentally fixing A1 and thus hiding a bug from Apple’s ROM developers in the early 1990s?</p></blockquote>
<p>This is just an amazing story and writeup.</p>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/18/the-invalid-68030-instruction-that-accidentally-allowed-the-mac-classic-ii-to-successfully-boot-up/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>ARC Optimization vs. -fstack-protector</title>
<link>https://mjtsai.com/blog/2025/04/17/arc-optimization-vs-fstack-protector/</link>
<comments>https://mjtsai.com/blog/2025/04/17/arc-optimization-vs-fstack-protector/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Thu, 17 Apr 2025 17:25:19 +0000</pubDate>
<category><![CDATA[Programming]]></category>
<category><![CDATA[Automatic Reference Counting (ARC)]]></category>
<category><![CDATA[Bug]]></category>
<category><![CDATA[Compiler]]></category>
<category><![CDATA[Memory Management]]></category>
<category><![CDATA[Objective-C]]></category>
<category><![CDATA[Objective-C Runtime]]></category>
<category><![CDATA[Optimization]]></category>
<category><![CDATA[Testing]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47424</guid>
<description><![CDATA[Samuel Giddins: After months of painstaking work, we’ve got our apps building, and most of our tests building, and almost most of them passing.Except for some tests that use test fixtures. And assert that those test fixtures get deallocated. And they passed in Xcode. And failed when run via Bazel.[…]However, due to the way the […]]]></description>
<content:encoded><![CDATA[<p><a href="http://blog.segiddins.me/2020/04/15/this-time-it-was-a-compiler-bug/">Samuel Giddins</a>:</p>
<blockquote cite="http://blog.segiddins.me/2020/04/15/this-time-it-was-a-compiler-bug/"><p>After months of painstaking work, we’ve got our apps building, and most of our tests building,
and almost most of them passing.</p><p>Except for some tests that use test fixtures. And assert that those test fixtures get deallocated.
And they passed in Xcode. And failed when run via Bazel.</p><p>[…]</p><p>However, due to the way the stack protector works (by adding instructions at the start and end of function), they can interfere with a call to <code>objc_autoreleaseReturnValue</code> being able to see it’s matching call to <code>objc_retainAutoreleaseReturnValue</code>, and then <code>[object autorelease]</code> will actually have to do an autorelease. Which means that the object will go into the autoreleasepool. And it won’t be deallocated until that pool drains. And <code>XCTestCase</code>’s <code>-setUp</code> and <code>-tearDown</code> methods happen inside the same autoreleasepool.</p><p>[…]</p><p>What made this bug so fun (and infuriating) to investigate was that it sat at the intersection of a bunch of different moving pieces.
Our code was technically wrong (relying on performance optimizations in the runtime isn’t especially safe).
Bazel did something incredibly unexpected (passing <code>-fstack-protector</code> when I didn’t ask it to).
The Objective-C runtime has a performance optimization that does more than optimize (this is valid code under ARC, and yet it’s behavior is different from what ARC’s semantics say it should be).
And, finally, clang allows me to pass a compiler option that changes observable behavior, without documenting that it can do more than catch a small set of bugs.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2014/05/21/why-objc_autoreleasereturnvalue-differs-for-x86_64-and-arm/">Why objc_autoreleaseReturnValue Differs for x86_64 and ARM</a></li>
<li><a href="https://mjtsai.com/blog/2014/01/31/arcs-fast-autorelease/">ARC’s Fast Autorelease</a></li>
<li><a href="https://mjtsai.com/blog/2011/06/15/automatic-reference-counting/">Automatic Reference Counting</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/17/arc-optimization-vs-fstack-protector/feed/</wfw:commentRss>
<slash:comments>1</slash:comments>
</item>
<item>
<title>Performance of the Python 3.14 Tail-Call Interpreter</title>
<link>https://mjtsai.com/blog/2025/04/17/performance-of-the-python-3-14-tail-call-interpreter/</link>
<comments>https://mjtsai.com/blog/2025/04/17/performance-of-the-python-3-14-tail-call-interpreter/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Thu, 17 Apr 2025 17:25:14 +0000</pubDate>
<category><![CDATA[Programming]]></category>
<category><![CDATA[Bug]]></category>
<category><![CDATA[Compiler]]></category>
<category><![CDATA[LLVM]]></category>
<category><![CDATA[Optimization]]></category>
<category><![CDATA[Python]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47422</guid>
<description><![CDATA[Nelson Elhage (via Hacker News): Unfortunately, as I will document in this post, these impressive performance gains turned out to be primarily due to inadvertently working around a regression in LLVM 19. When benchmarked against a better baseline (such GCC, clang-18, or LLVM 19 with certain tuning flags), the performance gain drops to 1-5% or […]]]></description>
<content:encoded><![CDATA[<p><a href="https://blog.nelhage.com/post/cpython-tail-call/">Nelson Elhage</a> (via <a href="https://news.ycombinator.com/item?id=43317592">Hacker News</a>):</p>
<blockquote cite="https://blog.nelhage.com/post/cpython-tail-call/">
<p>Unfortunately, as I will document in this post, these impressive performance gains turned out to be <strong>primarily due to inadvertently working around a regression in LLVM 19.</strong> When benchmarked against a better baseline (such GCC, clang-18, or LLVM 19 with certain tuning flags), the performance gain drops to 1-5% or so depending on the exact setup.</p>
<p>[…]</p>
<p>Historically, the optimization of replicating the bytecode dispatch into each opcode has been cited to speed up interpreters anywhere from <a href="https://github.com/python/cpython/blob/c718c6be0f82af5eb0e57615ce323242155ff014/Misc/HISTORY#L15252-L15255">20%</a> to <a href="https://link.springer.com/content/pdf/10.1007/3-540-44681-8_59.pdf">100%</a>. However, on modern processors with improved branch predictors, <a href="https://inria.hal.science/hal-01100647/document">more recent work</a> finds a much smaller speedup, on the order of 2-4%.</p>
<p>[…]</p>
<p>Still, <code>nix</code> was clearly enormously helpful here, and on net it definitely made this kind of multi-version exploration and debugging <strong>much</strong> saner than any other approach I can imagine.</p>
</blockquote>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/17/performance-of-the-python-3-14-tail-call-interpreter/feed/</wfw:commentRss>
<slash:comments>1</slash:comments>
</item>
<item>
<title>Amazon Web Services Dark Patterns</title>
<link>https://mjtsai.com/blog/2025/04/17/amazon-web-services-dark-patterns/</link>
<comments>https://mjtsai.com/blog/2025/04/17/amazon-web-services-dark-patterns/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Thu, 17 Apr 2025 17:25:03 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Amazon Web Services]]></category>
<category><![CDATA[Dark Patterns]]></category>
<category><![CDATA[Database]]></category>
<category><![CDATA[Documentation]]></category>
<category><![CDATA[PostgreSQL]]></category>
<category><![CDATA[Web]]></category>
<category><![CDATA[Web API]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47420</guid>
<description><![CDATA[Jeff Johnson: As far as I can tell, the confusingly named Aurora PostgreSQL is not actually PostgreSQL but rather an Amazon-specific database designed with one overriding goal: to be infinitely more expensive than PostgreSQL, which is free. In any case, the AWS Free Tier details give the impression to unsuspecting new users that PostgreSQL is […]]]></description>
<content:encoded><![CDATA[<p><a href="https://lapcatsoftware.com/articles/2024/6/7.html">Jeff Johnson</a>:</p>
<blockquote cite="https://lapcatsoftware.com/articles/2024/6/7.html"><p>As far as I can tell, the confusingly named Aurora PostgreSQL is not actually PostgreSQL but rather an Amazon-specific database designed with one overriding goal: to be infinitely more expensive than PostgreSQL, which is free. In any case, the AWS Free Tier details give the impression to unsuspecting new users that PostgreSQL is free, without making an explicit distinction between true PostgreSQL and Amazon’s faux PostgreSQL.</p><p>The worst part is that when you enable Aurora PostgreSQL on the free tier, which I apparently did without knowing exactly what Aurora meant, Amazon does not warn you that you’re about to be charged an obscene amount of money. And I didn’t even <em>use</em> the database, as far as I know.</p><p>[…]</p><p>The AWS documentation is, in a word, massive, just as AWS itself is massive. I would also suggest that there’s something very wrong with an internet service if you have to wade through the fine print of the service’s massive documentation just to discover that you can suddenly and silently incur a cost of hundreds of dollars per month for a feature on a specific tier advertised by the service as free.</p></blockquote>
<p>This post is from last year, but I came across it while going through some old drafts, and it still sounds like something to be aware of.</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2024/04/18/why-has-figma-reinvented-the-wheel-with-postgresql/">Why Has Figma Reinvented the Wheel with PostgreSQL?</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/17/amazon-web-services-dark-patterns/feed/</wfw:commentRss>
<slash:comments>1</slash:comments>
</item>
<item>
<title>Carbon Copy Cloner 7.1</title>
<link>https://mjtsai.com/blog/2025/04/16/carbon-copy-cloner-7-1/</link>
<comments>https://mjtsai.com/blog/2025/04/16/carbon-copy-cloner-7-1/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Wed, 16 Apr 2025 18:04:00 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Apple File System (APFS)]]></category>
<category><![CDATA[Backup]]></category>
<category><![CDATA[Carbon Copy Cloner]]></category>
<category><![CDATA[Icons]]></category>
<category><![CDATA[launchd]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[Mac App]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Spotlight]]></category>
<category><![CDATA[Storage]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47418</guid>
<description><![CDATA[Bombich Software: For Sonoma and Sequoia users, CCC now offers an option to set a custom icon on locally-attached source and destination volumes. Select an image of your own, or get creative with Apple’s new Image Playground. I’ve been doing this manually (dragging into Finder’s Get Info window), and I find that it really helps […]]]></description>
<content:encoded><![CDATA[<p><a href="https://support.bombich.com/hc/en-us/articles/20686469389719-CCC-7-Release-Notes">Bombich Software</a>:</p>
<blockquote cite="https://support.bombich.com/hc/en-us/articles/20686469389719-CCC-7-Release-Notes"><p>For Sonoma and Sequoia users, CCC now offers an option to set a custom icon on locally-attached source and destination volumes. Select an image of your own, or get creative with Apple’s new Image Playground.</p></blockquote>
<p>I’ve been doing this manually (dragging into Finder’s <strong>Get Info</strong> window), and I find that it really helps to have <a href="https://mjtsai.com/blog/2024/04/30/ive-drives-icons/">different icon colors and badges</a> to quickly tell which drive is which.</p>
<blockquote cite="https://support.bombich.com/hc/en-us/articles/20686469389719-CCC-7-Release-Notes">
<p>This version of CCC embraces new macOS functionality that allows us to avoid installing the <a href="https://support.bombich.com/hc/articles/20686388957719-What-is-CCC-s-Privileged-Helper-Tool">CCC helper tool</a> into Macintosh HD > Library > PrivilegedHelperTools. The helper tool will be "registered" with macOS, but will remain inside of the CCC application bundle. This new practice resolves a long list of complications that have arisen over the years with the legacy LaunchDaemon configuration as Apple has improved macOS platform security.</p>
</blockquote>
<p>I’m guessing this uses <a href="https://developer.apple.com/documentation/servicemanagement/smappservice">SMAppService</a>.</p>
<blockquote cite="https://support.bombich.com/hc/en-us/articles/20686469389719-CCC-7-Release-Notes">
<p>The Snapshot Comparison Browser search field now supports wildcard and regular expression searches.</p>
</blockquote>
<p>The biggest backup problem I’ve been seeing lately—and I don’t think it’s really CCC’s fault—is that it’s sometimes unable to automatically prune old APFS snapshots, so the destination volume ends up full, and the backup fails. CCC usually does a better job than Disk Utility at showing the snapshots, though in some cases neither is able to delete them. Disk Utility recommends restarting the Mac, which is a really pain but does sometimes help. It’s unclear to me what causes the problem and why ejecting and remounting the drive isn’t enough. I wonder if there’s some sort of APFS issue because oftentimes the oldest bunch of snapshots show zero for the size, and deleting them doesn’t seem to free up any space. Is this because CCC had started deleting them but was only partially successful? (I would have thought this would be atomic.) Or because they lost data?</p>
<p>And <a href="https://mastodon.social/@mjtsai/114286196549507336">sometimes</a> the snapshots seem to be totally undetectable or even unviewable, with Disk Utility on Sequoia reporting permissions errors if I try to repair the drive. I tried another Sequoia Mac with no luck. A Mac with an older version of macOS made more progress with two of the drives damaged in this way, successfully scanning the snapshots that Sequoia had not been able to see, but ultimately it found errors that it couldn’t fix. With the old snapshots inaccessible, anyway, I ended up reformatting the drives. I never had these types of problems before, so I wonder whether Sequoia somehow damaged these drives or whether it’s just bad luck.</p>
<blockquote cite="https://support.bombich.com/hc/en-us/articles/20686469389719-CCC-7-Release-Notes">
<p>Spotlight will now be disabled on the destination by default when selecting the option to use a destination volume exclusively for the CCC task in the Backup Volume Setup Assistant. Users can also select a volume in the sidebar and disable (or re-enable) Spotlight via a switch. This change will hopefully address the interference that Spotlight and its mediaanalysisd buddy are causing with regard to unmounting CCC destination volumes.</p>
</blockquote>
<p>Yay! I find Spotlight useless with backup drives. It seems to slow things down at best or sometimes cause worse problems like not being able to eject the drive, which also seems to be a <a href="https://mjtsai.com/blog/2025/02/03/what-to-do-when-macos-wont-let-you-unmount-a-volume/">new issue with Sequoia</a>.</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/27/superduper-3-10-beta-works-around-asr-bug/">SuperDuper 3.10 Beta Works Around asr Bug</a></li>
<li><a href="https://mjtsai.com/blog/2025/02/03/what-to-do-when-macos-wont-let-you-unmount-a-volume/">What to Do When macOS Won’t Let You Unmount a Volume</a></li>
<li><a href="https://mjtsai.com/blog/2024/05/17/carbon-copy-cloner-7/">Carbon Copy Cloner 7</a></li>
<li><a href="https://mjtsai.com/blog/2024/04/30/ive-drives-icons/">Ive Drives Icons</a></li>
<li><a href="https://mjtsai.com/blog/2022/10/27/venturas-open-at-login-vs-allow-in-the-background/">Ventura’s “Open at Login” vs. “Allow in the Background”</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/16/carbon-copy-cloner-7-1/feed/</wfw:commentRss>
<slash:comments>2</slash:comments>
</item>
<item>
<title>India’s Repair Culture Gives New Life to Dead Laptops</title>
<link>https://mjtsai.com/blog/2025/04/16/indias-repair-culture-gives-new-life-to-dead-laptops/</link>
<comments>https://mjtsai.com/blog/2025/04/16/indias-repair-culture-gives-new-life-to-dead-laptops/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Wed, 16 Apr 2025 18:03:54 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Environment]]></category>
<category><![CDATA[Hardware]]></category>
<category><![CDATA[India]]></category>
<category><![CDATA[Legal]]></category>
<category><![CDATA[Unauthorized Repair]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47416</guid>
<description><![CDATA[Peter Mommsen: Around the globe, governments are increasingly committed to making the right to repair the law of the land. India’s Ministry of Consumer Affairs is developing a set of rules requiring manufacturers of electronics, farm equipment, and automobiles to let people fix products themselves. France requires tech manufacturers to register their products with a […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.plough.com/en/topics/justice/sustainable-living/in-praise-of-repair-culture">Peter Mommsen</a>:</p>
<blockquote cite="https://www.plough.com/en/topics/justice/sustainable-living/in-praise-of-repair-culture"><p>Around the globe, governments are increasingly committed to making the right to repair the law of the land. India’s Ministry of Consumer Affairs <a href="https://righttorepairindia.gov.in/about-us.php">is developing</a> a set of rules requiring manufacturers of electronics, farm equipment, and automobiles to let people fix products themselves. <a href="https://www.wired.com/story/frances-new-tech-repairability-index-is-a-big-deal/">France requires</a> tech manufacturers to register their products with a national “repairability index.” And in the United States, the Federal Trade Commission <a href="https://www.ftc.gov/system/files/documents/public_statements/1592330/p194400repairrestrictionspolicystatement.pdf">has announced</a> that it will crack down on repair restrictions.</p><p>Whatever the merits of these specific policy measures, they are responding to a growing sense that a consumer economy based on pushing people to discard the old and buy the new is no longer sustainable. Yet in an age in which smartphone models go out of date within months and many clothes are worn once or twice before being binned, the champions of repair face powerful obstacles. After all, obsolescence of consumer goods has been a cornerstone of the growth of developed economies for a century.</p></blockquote>
<p><a href="https://www.theverge.com/tech/639126/india-frankenstein-laptops">Hanan Zaffar and Danish Pandit</a> (<a href="https://news.ycombinator.com/item?id=43618105">Hacker News</a>):</p>
<blockquote cite="https://www.theverge.com/tech/639126/india-frankenstein-laptops"><p>Across India, in metro markets from Delhi’s Nehru Place to Mumbai’s Lamington Road, technicians like Prasad are repurposing broken and outdated laptops that many see as junk. These “Frankenstein” machines — hybrids of salvaged parts from multiple brands — are sold to students, gig workers, and small businesses, offering a lifeline to those priced out of India’s growing digital economy.</p><p>“We take usable components from different older or discarded systems to create a new functioning unit. For instance, we salvage parts from old laptop motherboards, such as capacitors, mouse pads, transistors, diodes, and certain ICs and use them in the newly refurbished ones,” says Prasad.</p><p>[…]</p><p>“A college student or a freelancer can get a good machine for INR 10,000 [about $110 USD] instead of spending INR 70,000 [about $800 USD] on a brand-new one. For many, that difference means being able to work or study at all.”</p><p>[…]</p><p>The Indian government has <a href="https://pib.gov.in/PressReleasePage.aspx?PRID=1841403&utm_">started discussions</a> on right-to-repair laws, inspired by similar efforts in the European Union and the United States. However, progress remains slow, and repair shops continue to operate in legal limbo, often forced to source different parts from informal and e-waste markets.</p></blockquote>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/16/indias-repair-culture-gives-new-life-to-dead-laptops/feed/</wfw:commentRss>
<slash:comments>1</slash:comments>
</item>
<item>
<title>Right to Repair Legislation in 50 States</title>
<link>https://mjtsai.com/blog/2025/04/16/right-to-repair-legislation-in-50-states/</link>
<comments>https://mjtsai.com/blog/2025/04/16/right-to-repair-legislation-in-50-states/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Wed, 16 Apr 2025 18:03:48 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Hardware]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[Legal]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[Unauthorized Repair]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47414</guid>
<description><![CDATA[Jason Koebler: Right to repair legislation has now been introduced in all 50 states, a milestone that, despite not all passing, shows the power of the grassroots political movement. Thursday, Wisconsin became the final state in the country to introduce a right to repair bill. So far, right to repair laws have been passed in […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.404media.co/all-50-states-have-now-introduced-right-to-repair-legislation/">Jason Koebler</a>:</p>
<blockquote cite="https://www.404media.co/all-50-states-have-now-introduced-right-to-repair-legislation/"><p>Right to repair legislation has now been introduced in all 50 states, a milestone that, despite not all passing, shows the power of the grassroots political movement. Thursday, <a href="https://civicmedia.us/news/2025/2/20/right-to-repair-is-already-law-in-five-other-states?ref=404media.co"><u>Wisconsin became the final state</u></a> in the country to introduce a right to repair bill. </p><p>So far, right to repair laws have been passed in Massachusetts, New York, Minnesota, Colorado, <a href="https://www.404media.co/california-assembly-unanimously-passes-right-to-repair-legislation/"><u>California</u></a>, and <a href="https://www.404media.co/oregon-passes-right-to-repair-bill-that-would-make-apple-redesign-the-iphone/"><u>Oregon</u></a>. Another 20 states are formally considering right to repair bills during this current legislative session. The rest have previously introduced bills that have not passed; so far we have seen that many states take several years to move a given right to repair bill through the legislative process. </p></blockquote>
<p><a href="https://www.techdirt.com/2025/03/10/all-50-states-have-now-pushed-right-to-repair-laws-but-actual-enforcement-is-spotty-at-best/">Karl Bode</a>:</p>
<blockquote cite="https://www.techdirt.com/2025/03/10/all-50-states-have-now-pushed-right-to-repair-laws-but-actual-enforcement-is-spotty-at-best/"><p>And in some instances the bills have been watered down post-passage, like in New York, where Governor Kathy Hochul <a href="https://www.techdirt.com/2024/02/07/nys-right-to-repair-law-was-neutered-by-lobbyists-and-governor-hochul-after-passage-now-some-lawmakers-are-trying-to-fix-it/">buckled to company lobbying to make the law much weaker</a> while also exempting many of the most problematic industries.</p><p>Elsewhere, state governments <a href="https://www.techdirt.com/2024/09/03/companies-are-simply-ignoring-many-new-state-right-to-repair-laws/">just aren’t really enforcing the laws so far</a> despite no shortage of corporate violators. Reformers can correct me if I’m wrong, but I’ve yet to see a meaningful enforcement action against a major company in any of the states that have passed such legislation.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2024/06/28/longevity-by-design/">Longevity, by Design</a></li>
<li><a href="https://mjtsai.com/blog/2024/04/02/oregon-passes-right-to-repair-law/">Oregon Passes Right-to-Repair Law</a></li>
<li><a href="https://mjtsai.com/blog/2024/02/09/apple-lobbying-against-right-to-repair/">Apple Lobbying Against Right to Repair</a></li>
<li><a href="https://mjtsai.com/blog/2023/08/25/apple-supports-california-right-to-repair-bill/">Apple Supports California Right-to-Repair Bill</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/16/right-to-repair-legislation-in-50-states/feed/</wfw:commentRss>
<slash:comments>2</slash:comments>
</item>
<item>
<title>dlsym Considered Harmful on iOS 18.4</title>
<link>https://mjtsai.com/blog/2025/04/15/dlsym-considered-harmful-on-ios-18-4/</link>
<comments>https://mjtsai.com/blog/2025/04/15/dlsym-considered-harmful-on-ios-18-4/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Tue, 15 Apr 2025 17:26:34 +0000</pubDate>
<category><![CDATA[Programming]]></category>
<category><![CDATA[Assembly Language]]></category>
<category><![CDATA[Bug]]></category>
<category><![CDATA[dyld]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47412</guid>
<description><![CDATA[Fabien Perigaud (tweet): This time, we will dynamically resolve and use strcmp(). […] Instead of a nice log indicating that the two strings are not the same, our application crashed... […] What just happened? Why is the pointer incorrectly signed? Why do I have a kernel pointer in PC? […] A XPACI instruction is clearly […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.synacktiv.com/en/publications/ios-184-dlsym-considered-harmful">Fabien Perigaud</a> (<a href="https://x.com/Synacktiv/status/1910322452715946224">tweet</a>):</p>
<blockquote cite="https://www.synacktiv.com/en/publications/ios-184-dlsym-considered-harmful">
<p>This time, we will dynamically resolve and use <code>strcmp()</code>.</p>
<p>[…]</p>
<p>Instead of a nice log indicating that the two strings are not the same, our application crashed...</p>
<p>[…]</p>
<p>What just happened? Why is the pointer incorrectly signed? Why do I have a kernel pointer in <code>PC</code>?</p>
<p>[…]</p>
<p>A <code>XPACI</code> instruction is clearly missing here, we can see the return value (<code>X0</code>) from the <code>BLRAAZ</code> being directly converted to an offset by the <code>SUB</code> instruction. In iOS 18.3.2, the <code>XPACI</code> instruction is present.</p>
<p>[…]</p>
<p>Repeated tests showed that in contrast to the specification, the
pointer was considered as a kernel one (during a signature operation) if the bit 63 is set!</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/31/ios-18-4-and-ipados-18-4/">iOS 18.4 and iPadOS 18.4</a></li>
<li><a href="https://mjtsai.com/blog/2023/04/27/zero-click-exploits-against-ios-16/">Zero-Click Exploits Against iOS 16</a></li>
<li><a href="https://mjtsai.com/blog/2020/01/10/project-zero-remote-iphone-exploitation/">Project Zero Remote iPhone Exploitation</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/15/dlsym-considered-harmful-on-ios-18-4/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>How Disk Images and VMs Are More Efficient</title>
<link>https://mjtsai.com/blog/2025/04/15/how-disk-images-and-vms-are-more-efficient/</link>
<comments>https://mjtsai.com/blog/2025/04/15/how-disk-images-and-vms-are-more-efficient/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Tue, 15 Apr 2025 17:26:25 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Apple File System (APFS)]]></category>
<category><![CDATA[Disk Image]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Virtualization]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47410</guid>
<description><![CDATA[Howard Oakley: What happens with an Apple silicon VM is a bit more complicated, and harder to observe. This time the virtualisation app should create the disk image inside the VM bundle as a sparse file to begin with, then copy into that what’s needed for the VM, so skipping the first mount stage and […]]]></description>
<content:encoded><![CDATA[<p><a href="https://eclecticlight.co/2025/04/09/how-disk-images-and-vms-are-more-efficient/">Howard Oakley</a>:</p>
<blockquote cite="https://eclecticlight.co/2025/04/09/how-disk-images-and-vms-are-more-efficient/">
<p>What happens with an Apple silicon VM is a bit more complicated, and harder to observe. This time the virtualisation app should create the disk image inside the VM bundle as a sparse file to begin with, then copy into that what’s needed for the VM, so skipping the first mount stage and Trimming during the second mount.</p>
<p>The result is the same, though, with a 350 GB VM taking just 22 GB on disk. Inspect that disk image using my free utility <a href="https://eclecticlight.co/taccy-signet-precize-alifix-utiutility-alisma/">Precize</a>, and you’ll see that economy confirmed, and the Sparse File flag set.</p>
</blockquote>
<p>He has a summary of the requirements for “plain read-write disk images and those inside VMs to be sparse files.”</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2024/10/16/disk-images-in-sequoia/">Disk Images in Sequoia</a></li>
<li><a href="https://mjtsai.com/blog/2021/03/30/sparse-files-are-common-in-apfs/">Sparse Files Are Common in APFS</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/15/how-disk-images-and-vms-are-more-efficient/feed/</wfw:commentRss>
<slash:comments>1</slash:comments>
</item>
<item>
<title>Git at 20</title>
<link>https://mjtsai.com/blog/2025/04/15/git-at-20/</link>
<comments>https://mjtsai.com/blog/2025/04/15/git-at-20/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Tue, 15 Apr 2025 17:26:23 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Anniversary]]></category>
<category><![CDATA[BitKeeper]]></category>
<category><![CDATA[CVS]]></category>
<category><![CDATA[Git]]></category>
<category><![CDATA[Git Tower]]></category>
<category><![CDATA[History]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[Mac App]]></category>
<category><![CDATA[Macintosh Programmer’s Workshop (MPW)]]></category>
<category><![CDATA[Programming]]></category>
<category><![CDATA[Subversion]]></category>
<category><![CDATA[Version Control]]></category>
<category><![CDATA[VOODOO]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47408</guid>
<description><![CDATA[Taylor Blau: Exactly twenty years ago, on April 7, 2005, Linus Torvalds made the very first commit to a new version control system called Git. Torvalds famously wrote Git in just 10 days after Linux kernel developers lost access to their proprietary tool, BitKeeper, due to licensing disagreements. In fact, in that first commit, he’d […]]]></description>
<content:encoded><![CDATA[<p><a href="https://github.blog/open-source/git/git-turns-20-a-qa-with-linus-torvalds/">Taylor Blau</a>:</p>
<blockquote cite="https://github.blog/open-source/git/git-turns-20-a-qa-with-linus-torvalds/"><p>Exactly twenty years ago, on April 7, 2005, Linus Torvalds made <a href="https://github.com/git/git/commit/e83c5163316f89bfbde7d9ab23ca2e25604af290">the very first commit</a> to a new version control system called Git. Torvalds famously wrote Git in just 10 days after Linux kernel developers lost access to their proprietary tool, BitKeeper, due to licensing disagreements. In fact, in that first commit, he’d written enough of Git to use Git to make the commit!</p><p>Git’s unconventional and decentralized design—nowadays ubiquitous and seemingly obvious—was revolutionary at the time, and reshaped how software teams collaborate and develop. (To wit, GitHub!)</p><p>To celebrate two decades of Git, we sat down with Linus himself to revisit those early days, explore the key design decisions behind Git’s lasting success, and discuss how it forever changed software development.</p></blockquote>
<p>At this point, I’ve now used Git for much longer than any previous version control system (Projector, RCS, CVS, <a href="http://www.atpm.com/7.03/voodoo-personal.shtml">VOODOO</a>, Subversion). It’s worked really well. There are certainly valid complaints to be made about the command-line interface, but these days 99% of my interaction with Git is through Tower, anyway.</p>
<p><a href="https://blog.gitbutler.com/20-years-of-git/">Scott Chacon</a> (via <a href="https://mastodon.social/@film_girl/114298715238326497">Christina Warren</a>, <a href="https://news.ycombinator.com/item?id=43613305">Hacker News</a>):</p>
<blockquote cite="https://blog.gitbutler.com/20-years-of-git/">
<p>I started using Git for something you might not imagine it was intended for, only a few months after it’s first commit. I then went on to cofound <a href="https://github.com/?ref=blog.gitbutler.com" rel="noreferrer">GitHub</a>, write arguably the most widely read <a href="https://git-scm.com/book/en/v2?ref=blog.gitbutler.com">book on Git</a>, build the <a href="https://lore.kernel.org/git/d411cc4a0807251035i7aed2ec9wef7e8f1b3ae4c585@mail.gmail.com/?ref=blog.gitbutler.com">official website</a> of the project, start the <a href="https://github.blog/news-insights/the-library/git-merge-berlin-2013/?ref=blog.gitbutler.com">annual developer conference</a>, etc - this little project has changed the world of software development, but more personally, it has massively changed the course of my life.</p><p>I thought it would be fun today, as the Git project rolls into it’s third <em>decade</em>, to remember the earliest days of Git and explain a bit why I find this project so endlessly fascinating.</p>
</blockquote>
<p><a href="https://about.gitlab.com/blog/2025/04/07/celebrating-gits-20th-anniversary-with-creator-linus-torvalds/">Patrick Steinhardt</a>:</p>
<blockquote cite="https://about.gitlab.com/blog/2025/04/07/celebrating-gits-20th-anniversary-with-creator-linus-torvalds/">
<p>To mark the 20th anniversary of this important project that is nowadays used by almost every single developer, I interviewed Linus about the history of Git, why he handed over maintainership of Git, and what he considers to be its most important milestones.</p>
</blockquote>
<p><a href="https://irreal.org/blog/?p=12906">Irreal</a>:</p>
<blockquote cite="https://irreal.org/blog/?p=12906"><p>There’s an argument to made that BitKeeper is the better solution and McVoy has made that argument in the past but BitKeeper was proprietary software in an age when developers pretty much insisted on open source tools. McVoy, to his credit, has accepted this and is devoting his time to fishing.</p><p>
Whether or not Git is the <i>best</i> solution it has emerged as the default solution and that, I think, is a good thing. It’s definitely a <i>good</i> VCS and having a standardized VCS benefits us all. I have no doubt that its distributed nature is the correct answer and 20 years of Git and BitKeeper before it has proven that to be the case.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/02/20/git-tower-12-5/">Git Tower 12.5</a></li>
<li><a href="https://mjtsai.com/blog/2020/02/04/a-new-hash-algorithm-for-git/">A New Hash Algorithm for Git</a></li>
<li><a href="https://mjtsai.com/blog/2020/01/16/is-git-irreplaceable/">Is Git Irreplaceable?</a></li>
<li><a href="https://mjtsai.com/blog/2018/11/15/version-control-before-git-with-cvs/">Version Control Before Git with CVS</a></li>
<li><a href="https://mjtsai.com/blog/2014/04/26/git-vs-mercurial-vs-bazaar-vs-etc/">Git vs. Mercurial vs. Bazaar vs. Etc.</a></li>
<li><a href="https://mjtsai.com/blog/2008/04/25/svn-mercurial-git/">SVN vs. Mercurial vs. Git For Managing Your Home Directory</a></li>
<li><a href="https://mjtsai.com/blog/2007/07/15/subversion-to-git/">Subversion to Git</a></li>
<li><a href="https://mjtsai.com/blog/2004/08/30/cvs2svn/">cvs2svn</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/15/git-at-20/feed/</wfw:commentRss>
<slash:comments>5</slash:comments>
</item>
<item>
<title>Obituary for Cyc</title>
<link>https://mjtsai.com/blog/2025/04/14/obituary-for-cyc/</link>
<comments>https://mjtsai.com/blog/2025/04/14/obituary-for-cyc/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Mon, 14 Apr 2025 17:39:02 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Artificial Intelligence]]></category>
<category><![CDATA[History]]></category>
<category><![CDATA[Sunset]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47406</guid>
<description><![CDATA[Yuxi Liu (via Hacker News): The legendary Cyc project, Douglas Lenat’s 40-year quest to build artificial general intelligence by scaling symbolic logic, has failed. Based on extensive archival research, this essay brings to light its secret history so that it may be widely known. […] In 1984, he launched Cyc to manually encode millions of […]]]></description>
<content:encoded><![CDATA[<p><a href="https://yuxi-liu-wired.github.io/essays/posts/cyc/">Yuxi Liu</a> (via <a href="https://news.ycombinator.com/item?id=43625474">Hacker News</a>):</p>
<blockquote cite="https://yuxi-liu-wired.github.io/essays/posts/cyc/">
<p>The legendary Cyc project, Douglas Lenat’s 40-year quest to build artificial general intelligence by scaling symbolic logic, has failed. Based on extensive archival research, this essay brings to light its secret history so that it may be widely known.</p>
<p>[…]</p>
<p>In 1984, he launched Cyc to manually encode millions of facts and rules about common sense, predicting that once this “knowledge pump” was primed, the system would begin true machine learning by reading natural language texts and conducting autonomous scientific experiments. Cyc grew to contain approximately 30 million assertions at a cost of $200 million and 2,000 person-years. Yet despite Lenat’s repeated predictions of imminent breakthrough, it never came.</p>
<p>[…]</p>
<p>Cycorp achieved long-term financial stability that is uncommon for a small technology company, but all known commercial uses of its system involve standard methods in expert systems, data integration, and information retrieval, functionally the same as similar services offered by established corporations like Oracle and IBM. No evidence suggests that Cyc’s purported higher intelligence provided any competitive advantage.</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2023/03/15/gpt-4/">GPT-4</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/14/obituary-for-cyc/feed/</wfw:commentRss>
<slash:comments>2</slash:comments>
</item>
<item>
<title>Google Is Winning on Every AI Front</title>
<link>https://mjtsai.com/blog/2025/04/14/google-is-winning-on-every-ai-front/</link>
<comments>https://mjtsai.com/blog/2025/04/14/google-is-winning-on-every-ai-front/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Mon, 14 Apr 2025 17:38:41 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Artificial Intelligence]]></category>
<category><![CDATA[Google]]></category>
<category><![CDATA[Google Gemini/Bard]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47404</guid>
<description><![CDATA[Alberto Romero (via Hacker News): I’d been holding off on writing about Gemini 2.5. Focusing on the AI model didn’t feel like enough to tell the full story of Google’s comeback. Gemini 2.5 is only a piece—albeit a big one—of something much larger. Back in December 2024, I said they would come out on top […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.thealgorithmicbridge.com/p/google-is-winning-on-every-ai-front">Alberto Romero</a> (via <a href="https://news.ycombinator.com/item?id=43661235">Hacker News</a>):</p>
<blockquote cite="https://www.thealgorithmicbridge.com/p/google-is-winning-on-every-ai-front"><p>I’d been holding off on writing about Gemini 2.5. Focusing on the AI model didn’t feel like enough to tell the full story of Google’s comeback. Gemini 2.5 is only a piece—albeit a big one—of something much larger. Back in December 2024, I said they would <a href="https://www.thealgorithmicbridge.com/p/20-predictions-for-ai-in-2025">come out on top by the end of 2025</a>. We’re not even halfway there and it’s already happened.</p>
<p>[…]</p>
<p>Perhaps most importantly, the benchmark scores match the signal I receive from vibes checks, high-taste testers, and firsthand testimonials: <em><a href="https://x.com/MatthewBerman/status/1904714953095078004">people</a> <a href="https://www.reddit.com/r/Bard/s/TTXsRTWJdA">are</a></em> <em><a href="https://x.com/emollick/status/1910208856480768283">reporting</a> <a href="https://artificialanalysis.ai/models/gemini-2-5-pro?models=o1%2Cgpt-4o%2Co3-mini-high%2Cllama-4-maverick%2Cgemini-2-5-pro%2Cclaude-35-sonnet%2Cclaude-3-7-sonnet%2Cdeepseek-r1%2Cgrok-beta#intelligence">en masse</a> </em><a href="https://x.com/cgarciae88/status/1907457306947702925">that</a> <a href="https://www.reddit.com/r/ClaudeAI/s/30nIFOtVMP">Gemini</a> <a href="https://www.reddit.com/r/GeminiAI/s/ihTsYvDxIY">2.5</a> <a href="https://www.reddit.com/r/ClaudeAI/s/khkte9Bq49">Pro</a> <a href="https://x.com/xf1280/status/1904587791868322036">is</a> <a href="https://x.com/emollick/status/1909748270249001248">indeed</a> <a href="https://x.com/daniel_mac8/status/1910058485150269797">the</a> <a href="https://x.com/petergyang/status/1906007718961492391">best</a> <a href="https://www.reddit.com/r/ChatGPTCoding/s/O3qJuHRsWA">model</a> <a href="https://www.reddit.com/r/GeminiAI/s/aLDvqH12oq">today</a>. A rare sight to witness. (Watch <a href="https://x.com/MatthewBerman/status/1904715099862098109">Matthew Berman’s clip</a> below.)</p>
<p>And that's just pure performance. Add to the above that Gemini 2.5, compared to models of its category, is <a href="https://artificialanalysis.ai/models/gemini-2-5-pro?models=o1%2Cgpt-4o%2Co3-mini-high%2Cllama-4-maverick%2Cgemini-2-5-pro%2Cclaude-35-sonnet%2Cclaude-3-7-sonnet%2Cdeepseek-r1%2Cgrok-beta#speed">fast</a> and <a href="https://artificialanalysis.ai/models/gemini-2-5-pro?models=o1%2Cgpt-4o%2Co3-mini-high%2Cllama-4-maverick%2Cgemini-2-5-pro%2Cclaude-35-sonnet%2Cclaude-3-7-sonnet%2Cdeepseek-r1%2Cgrok-beta#pricing">cheap</a>—I mean, they're <a href="https://x.com/sundarpichai/status/1908173216499093625">giving away free access</a>!—has a gigantic <a href="https://artificialanalysis.ai/models/gemini-2-5-pro?models=o1%2Cgpt-4o%2Co3-mini-high%2Cllama-4-maverick%2Cgemini-2-5-pro%2Cclaude-35-sonnet%2Cclaude-3-7-sonnet%2Cdeepseek-r1%2Cgrok-beta#context-window">context window of 1 million tokens</a> (only recently surpassed by Meta’s Llama 4) and it’s connected to the entire Google suite of products (more on that soon).</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/04/14/llama-gaming-ai-benchmarks/">LLaMA Gaming AI Benchmarks</a></li>
<li><a href="https://mjtsai.com/blog/2025/04/14/claude-for-mac/">Claude for Mac</a></li>
<li><a href="https://mjtsai.com/blog/2024/12/16/gemini-2-0/">Gemini 2.0</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/14/google-is-winning-on-every-ai-front/feed/</wfw:commentRss>
<slash:comments>4</slash:comments>
</item>
<item>
<title>Claude for Mac</title>
<link>https://mjtsai.com/blog/2025/04/14/claude-for-mac/</link>
<comments>https://mjtsai.com/blog/2025/04/14/claude-for-mac/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Mon, 14 Apr 2025 17:38:17 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Anthropic]]></category>
<category><![CDATA[Artificial Intelligence]]></category>
<category><![CDATA[ChatGPT]]></category>
<category><![CDATA[Electron]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[Mac App]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[OpenAI]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47402</guid>
<description><![CDATA[Jordan Novet (2024, via Hacker News): OpenAI co-founder John Schulman said in a Monday X post that he would leave the Microsoft-backed company and join Anthropic, an artificial intelligence startup with funding from Amazon.The move comes less than three months after OpenAI disbanded a superalignment team that focused on trying to ensure that people can […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.cnbc.com/2024/08/06/openai-co-founder-john-schulman-says-he-will-join-rival-anthropic.html">Jordan Novet</a> (2024, via <a href="https://news.ycombinator.com/item?id=41168904">Hacker News</a>):</p>
<blockquote cite="https://www.cnbc.com/2024/08/06/openai-co-founder-john-schulman-says-he-will-join-rival-anthropic.html"><p>OpenAI co-founder John Schulman said in a Monday X post that he would leave the Microsoft-backed company and join Anthropic, an artificial intelligence startup with funding from Amazon.</p><p>The move comes less than three months after OpenAI disbanded a superalignment team that focused on trying to ensure that people can control AI systems that exceed human capability at many tasks.</p></blockquote>
<p><a href="https://www.theverge.com/2024/10/31/24284742/claude-ai-macos-windows-desktop-app">Emma Roth</a>:</p>
<blockquote cite="https://www.theverge.com/2024/10/31/24284742/claude-ai-macos-windows-desktop-app"><p>Claude, the AI chatbot made by Anthropic, now has a desktop app. You can download the Mac and Windows versions of the app <a href="https://claude.ai/download">from Anthropic’s website</a> for free.</p><p>Last week, <a href="https://www.theverge.com/2024/10/22/24276822/anthopic-claude-3-5-sonnet-computer-use-ai">Anthropic released its “computer use” feature</a> in public beta, which allows the <a href="https://www.theverge.com/2024/6/20/24181961/anthropic-claude-35-sonnet-model-ai-launch">Claude 3.5 Sonnet model</a> to control a computer by looking at a screen, moving the cursor, clicking buttons, and entering text. This capability isn’t available within the app, however.</p></blockquote>
<p><a href="https://x.com/sdw/status/1852065949312233854">Sebastiaan de With</a>:</p>
<blockquote cite="https://x.com/sdw/status/1852065949312233854"><p>Big miss from Anthropic releasing a super clunky macOS electron app that feels like a bad wrapper of their website. Very weird non-standard UI all over, choppy and sloppy animations.</p><p>OpenAI is really leagues ahead in making good apps (+ has ChatGPT Search rolling out today)</p></blockquote>
<p>Via <a href="https://daringfireball.net/linked/2024/10/31/anthropic-mac-app-electron-turd">John Gruber</a> (<a href="https://mastodon.social/@daringfireball/113405142103129176">Mastodon</a>):</p>
<blockquote cite="https://daringfireball.net/linked/2024/10/31/anthropic-mac-app-electron-turd"><p>There’s much talk that Anthropic’s Claude 3.5 has pulled ahead of OpenAI’s ChatGPT 4o in terms of chatbot “intelligence”, but as an overall experience ChatGPT wins hands-down. For one thing ChatGPT has been able to search the web for answers for a while now, and it works great. For another, just today <a href="https://openai.com/index/introducing-chatgpt-search/">OpenAI launched ChatGPT’s dedicated “search” mode</a>. Claude has nothing like it.</p><p>[…]</p><p><a href="https://openai.com/chatgpt/download/">ChatGPT’s native Mac app</a>, on the other hand, is a truly native Mac app. It looks like a Mac app and feels like a Mac app because it really is a Mac app.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/04/14/llama-gaming-ai-benchmarks/">LLaMA Gaming AI Benchmarks</a></li>
<li><a href="https://mjtsai.com/blog/2025/01/28/deepseek/">DeepSeek</a></li>
<li><a href="https://mjtsai.com/blog/2024/05/20/sutskever-and-leike-out-at-openai/">Sutskever and Leike Out at OpenAI</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/14/claude-for-mac/feed/</wfw:commentRss>
<slash:comments>4</slash:comments>
</item>
<item>
<title>LLaMA Gaming AI Benchmarks</title>
<link>https://mjtsai.com/blog/2025/04/14/llama-gaming-ai-benchmarks/</link>
<comments>https://mjtsai.com/blog/2025/04/14/llama-gaming-ai-benchmarks/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Mon, 14 Apr 2025 17:38:04 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Artificial Intelligence]]></category>
<category><![CDATA[LLaMA]]></category>
<category><![CDATA[Meta]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47400</guid>
<description><![CDATA[Kylie Robison (via Hacker News, Slashdot): Over the weekend, Meta dropped two new Llama 4 models: a smaller model named Scout, and Maverick, a mid-size model that the company claims can beat GPT-4o and Gemini 2.0 Flash “across a broad range of widely reported benchmarks.”[…]The achievement seemed to position Meta’s open-weight Llama 4 as a […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.theverge.com/meta/645012/meta-llama-4-maverick-benchmarks-gaming">Kylie Robison</a> (via <a href="https://news.ycombinator.com/item?id=43620452">Hacker News</a>, <a href="https://tech.slashdot.org/story/25/04/08/133257/meta-got-caught-gaming-ai-benchmarks">Slashdot</a>):</p>
<blockquote cite="https://www.theverge.com/meta/645012/meta-llama-4-maverick-benchmarks-gaming"><p>Over the weekend, Meta dropped two new <a href="https://ai.meta.com/blog/llama-4-multimodal-intelligence/">Llama 4 models</a>: a smaller model named Scout, and Maverick, a mid-size model that the company claims can beat GPT-4o and Gemini 2.0 Flash “across a broad range of widely reported benchmarks.”</p><p>[…]</p><p>The achievement seemed to position Meta’s open-weight Llama 4 as a serious challenger to the state-of-the-art, closed models from OpenAI, Anthropic, and Google. Then, AI researchers digging through Meta’s documentation discovered something unusual.</p><p>In fine print, Meta acknowledges that the version of Maverick tested on LMArena isn’t the same as what’s available to the public. According to Meta’s own materials, it deployed an <a href="https://x.com/natolambert/status/1908913635373842655">“experimental chat version”</a> of Maverick to LMArena that was specifically “optimized for conversationality,” <em>TechCrunch</em> first <a href="https://techcrunch.com/2025/04/06/metas-benchmarks-for-its-new-ai-models-are-a-bit-misleading/">reported</a>.</p></blockquote>
<p>First <a href="https://mjtsai.com/blog/2023/12/11/googles-gemini/">Google</a> demo shenanigans, then <a href="https://mjtsai.com/blog/2025/03/13/rotten/">Apple</a>, and now Meta.</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/04/10/how-apple-fumbled-siris-ai-makeover/">How Apple Fumbled Siri’s AI Makeover</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/25/please-stop-externalizing-your-costs-directly-into-my-face/">Please Stop Externalizing Your Costs Directly Into My Face</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/13/rotten/">Rotten</a></li>
<li><a href="https://mjtsai.com/blog/2025/01/28/deepseek/">DeepSeek</a></li>
<li><a href="https://mjtsai.com/blog/2024/12/16/gemini-2-0/">Gemini 2.0</a></li>
<li><a href="https://mjtsai.com/blog/2024/10/15/understanding-the-limitations-of-mathematical-reasoning-in-large-language-models/">Understanding the Limitations of Mathematical Reasoning in Large Language Models</a></li>
<li><a href="https://mjtsai.com/blog/2023/12/11/googles-gemini/">Google’s Gemini</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/14/llama-gaming-ai-benchmarks/feed/</wfw:commentRss>
<slash:comments>3</slash:comments>
</item>
<item>
<title>Failed Software Update on the External Drive of an Apple Silicon Mac</title>
<link>https://mjtsai.com/blog/2025/04/11/failed-software-update-on-the-external-drive-of-an-apple-silicon-mac/</link>
<comments>https://mjtsai.com/blog/2025/04/11/failed-software-update-on-the-external-drive-of-an-apple-silicon-mac/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Fri, 11 Apr 2025 19:59:36 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[macOS Recovery]]></category>
<category><![CDATA[Security]]></category>
<category><![CDATA[Software Update]]></category>
<category><![CDATA[Startup Disk]]></category>
<category><![CDATA[Startup Security Utility]]></category>
<category><![CDATA[Storage]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47392</guid>
<description><![CDATA[I thought I was out of the woods in setting up new Apple Silicon test macOS systems, after finally working around a Sequoia bug to get old versions of macOS to install on an external drive. Then Apple released the first beta for macOS 15.5, and I found that I couldn’t update to it. After […]]]></description>
<content:encoded><![CDATA[<p>I thought I was out of the woods in setting up new Apple Silicon test macOS systems, after finally working around a Sequoia bug to get <a href="https://mjtsai.com/blog/2025/03/25/error-702-installing-macos-on-an-external-drive/">old versions of macOS to install on an external drive</a>. Then Apple released the first beta for macOS 15.5, and I found that I couldn’t update to it.</p>
<p>After I agreed to the license and entered my password for software update, it would fail saying, “User interaction required. An error occurred while installing the selected updates.” I’ve had lots of problems with the <strong>Software Update</strong> pane of System Settings in recent years, but the command-line tool had always worked. So I tried <code>sudo softwareupdate -irR</code>, but that <em>also</em> kept failing, saying: “Failed to authenticate.”</p>
<p>This seems to have been caused by a problem with the <a href="https://hachyderm.io/@mikeymikey/114309249607161662">LocalPolicy</a>. I was aware that <a href="https://mjtsai.com/blog/2021/07/19/owner-accounts-on-m1-macs/">ownership</a> is an issue with Apple Silicon Macs, but it had never really caused problems for me before. I would just enter the requested information for a prior account when installing macOS, and it seemed to all just work, albeit with some annoying extra steps.</p>
<p>This external Sequoia drive that I was trying to update to macOS 15.5 had been originally created using a different Apple Silicon Mac, so in retrospect it makes sense that the owner information wouldn’t be right for the Mac where I was trying to do the update. But this never occurred to me because the Mac was able to <em>boot</em> from the drive just fine. Apparently, the owner account is not necessary for booting but <em>is</em> necessary for updating.</p>
<p>A visible symptom of ownership problems seems to be that the Mac won’t auto-boot from the drive. It will either boot from the internal drive or take you to the startup manager. I didn’t notice this because I had been intentionally switching back and forth between different boot drives, always holding down the power key and selecting the drive using the startup manager.</p>
<p>I happened to boot into macOS Recovery and look in the <a href="https://support.apple.com/guide/mac-help/change-security-settings-startup-disk-a-mac-mchl768f7291/15.0/mac/15.0">Startup Security Utility</a>, and I saw that it did not have access to change the security policy for the external drive. In order to do that, it said I had to set the drive as the startup disk. This kind of didn’t make sense because don’t the security options get set when booted from Recovery?</p>
<p>Anyway, I went to the Apple menu and chose <strong>Startup Disk</strong> and clicked on the external drive. Then I went back to Startup Security Utility and nothing seemed to have changed. OK, maybe I have to restart and it will use the Recovery from the newly selected startup disk? So I did that but ended up in the same place. It was still acting as though the external drive wasn’t the startup disk, even though I had selected it.</p>
<p>Maybe the startup disk will stick if I click the <strong>Restart</strong> button that’s <em>in the <strong>Startup Disk</strong> window</em>? That turned out to be the key. When I clicked the button, it showed this error:</p>
<blockquote><p>This volume does not have any authorized users for this computer.</p>
<p>The selected system does not have any users that are authorized to administer this computer. You can continue to try to set the startup disk but some features such as software updates will not be functional. If you know the password of one or more users on this system you may authorize the users by clicking on
“Authorize Users…”</p></blockquote>
<p>I don’t know why software update couldn’t tell me this or why there is seemingly no direct GUI command to view or edit the authorized users. But restarting <em>from within</em> <strong>Startup Disk</strong> is apparently the way to get macOS to offer to fix the LocalPolicy. Once I added the user, I was able to do a normal boot from the external drive and software update normally.</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/04/04/how-external-bootable-disks-work-with-apple-silicon-macs/">How External Bootable Disks Work With Apple Silicon Macs</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/25/error-702-installing-macos-on-an-external-drive/">Error 702 Installing macOS on an External Drive</a></li>
<li><a href="https://mjtsai.com/blog/2024/04/03/checking-bootable-systems-using-bputil/">Checking Bootable Systems Using bputil</a></li>
<li><a href="https://mjtsai.com/blog/2021/11/23/booting-an-m1-mac-from-an-external-disk-with-monterey/">Booting an M1 Mac From an External Disk With Monterey</a></li>
<li><a href="https://mjtsai.com/blog/2021/07/19/owner-accounts-on-m1-macs/">Owner Accounts on M1 Macs</a></li>
<li><a href="https://mjtsai.com/blog/2021/01/14/macos-11-2-beta-2-adds-full-custom-kernel-support/">macOS 11.2 Beta 2 Adds Full Custom Kernel Support</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/11/failed-software-update-on-the-external-drive-of-an-apple-silicon-mac/feed/</wfw:commentRss>
<slash:comments>10</slash:comments>
</item>
<item>
<title>AppexIndexer 1.0</title>
<link>https://mjtsai.com/blog/2025/04/11/appexindexer-1-0/</link>
<comments>https://mjtsai.com/blog/2025/04/11/appexindexer-1-0/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Fri, 11 Apr 2025 19:59:17 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[AppexIndexer]]></category>
<category><![CDATA[Extensions]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[Mac App]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47390</guid>
<description><![CDATA[Howard Oakley: App extensions, appexes, have become plentiful and widely used by macOS and third-party software, yet discovering and controlling them is patchy and limited. The most coherent access is in System Settings > General > Login Items & Extensions, where some are gathered in the list of Extensions at the end. Others like Safari […]]]></description>
<content:encoded><![CDATA[<p><a href="https://eclecticlight.co/2025/04/10/discover-appexes-with-appexindexer/">Howard Oakley</a>:</p>
<blockquote cite="https://eclecticlight.co/2025/04/10/discover-appexes-with-appexindexer/">
<p>App extensions, appexes, have become plentiful and widely used by macOS and third-party software, yet discovering and controlling them is patchy and limited. The most coherent access is in <strong>System Settings</strong> > <strong>General</strong> > <strong>Login Items & Extensions</strong>, where some are gathered in the list of <strong>Extensions</strong> at the end. Others like Safari extensions are controlled in app settings, while most remain hidden out of sight.</p>
<p>To take stock of all these appexes, I turned to the <code>pluginkit</code> command tool, but the lists it generates are seemingly ordered at random, and so extensive that it would require some serious scripting to make any sense. Instead, it’s easier and more effective to put together a little app to do that. So I present you with AppexIndexer, an exploratory utility that displays key information about all appexes recognised by macOS.</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2024/11/05/sequoia-no-longer-supports-quicklook-generator-plug-ins/">Sequoia No Longer Supports QuickLook Generator Plug-ins</a></li>
<li><a href="https://mjtsai.com/blog/2024/10/03/finder-sync-extensions-removed-from-system-settings-in-sequoia/">Finder Sync Extensions Removed From System Settings in Sequoia</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/11/appexindexer-1-0/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>Bauhaus Clock Screensaver</title>
<link>https://mjtsai.com/blog/2025/04/11/bauhaus-clock-screensaver/</link>
<comments>https://mjtsai.com/blog/2025/04/11/bauhaus-clock-screensaver/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Fri, 11 Apr 2025 19:59:09 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[Mac App]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Screensaver]]></category>
<category><![CDATA[Time]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47388</guid>
<description><![CDATA[Atilla (via Chris Turner, Reddit): A Bauhaus-inspired clock screensaver for Mac, designed to be present even when you’re not. Watch precision meets digital aesthetics, enhancing your workspace even when you’re away. $19 for lifetime upgrades. Previously: Why Apple Doesn’t Allow Custom Watch Faces Swiss Federal Railways Says Apple Copied Its Iconic Railway Clock]]></description>
<content:encoded><![CDATA[<p><a href="https://bauhausclock.com/">Atilla</a> (via <a href="https://retrophisch.social/@chris">Chris Turner</a>, <a href="https://www.reddit.com/r/macapps/comments/1jvkn1v/bauhaus_clock_elegant_timepiece_screensaver_for/">Reddit</a>):</p>
<blockquote cite="https://bauhausclock.com/">
<p>A Bauhaus-inspired clock screensaver for Mac, designed to be present even when you’re not.
Watch precision meets digital aesthetics, enhancing your workspace even when you’re away.</p>
</blockquote>
<p>$19 for lifetime upgrades.</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2018/10/10/why-apple-doesnt-allow-custom-watch-faces/">Why Apple Doesn’t Allow Custom Watch Faces</a></li>
<li><a href="https://mjtsai.com/blog/2012/09/23/swiss-federal-railways-clock/">Swiss Federal Railways Says Apple Copied Its Iconic Railway Clock</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/11/bauhaus-clock-screensaver/feed/</wfw:commentRss>
<slash:comments>4</slash:comments>
</item>
<item>
<title>CSS “text-wrap: pretty” in WebKit</title>
<link>https://mjtsai.com/blog/2025/04/11/css-text-wrap-pretty-in-webkit/</link>
<comments>https://mjtsai.com/blog/2025/04/11/css-text-wrap-pretty-in-webkit/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Fri, 11 Apr 2025 19:58:59 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[CSS]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Safari]]></category>
<category><![CDATA[Typography]]></category>
<category><![CDATA[WebKit]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47386</guid>
<description><![CDATA[Jen Simmons: Support for text-wrap: pretty just shipped in Safari Technology Preview, bringing an unprecedented level of polish to typography on the web.[…]Now, the web has the ability to evaluate the whole passage of text when figuring out where best to wrap. You can ask browsers to do this by using text-wrap: pretty. WebKit is […]]]></description>
<content:encoded><![CDATA[<p><a href="https://webkit.org/blog/16547/better-typography-with-text-wrap-pretty/">Jen Simmons</a>:</p>
<blockquote cite="https://webkit.org/blog/16547/better-typography-with-text-wrap-pretty/"><p>Support for <code>text-wrap: pretty</code> just shipped in <a href="https://developer.apple.com/safari/resources/">Safari Technology Preview,</a> bringing an unprecedented level of polish to typography on the web.</p><p>[…]</p><p>Now, the web has the ability to evaluate the whole passage of text when figuring out where best to wrap. You can ask browsers to do this by using <code>text-wrap: pretty</code>. WebKit is not the first browser engine to implement, but we are the first browser to use it to evaluate and adjust the entire paragraph. And we are the first browser to use it to improve rag. We chose to take a more comprehensive approach in our implementation because we want you to be able to use this CSS to make your text easier to read and softer on the eyes, to provide your users with better readability and accessibility.</p><p>[…]</p><p>While <a href="https://caniuse.com/mdn-css_properties_text-wrap_pretty">support for <code>pretty</code></a> shipped in Chrome 117, Edge 177, and Opera 103 in Fall 2023, and Samsung Internet 24 in 2024, the Chromium version is more limited in what it accomplishes. According to <a href="https://developer.chrome.com/blog/css-text-wrap-pretty/">an article</a> by the Chrome team, Chromium only makes adjustments to the last four lines of a paragraph. It’s focused on preventing short last lines. It also adjusts hyphenation if consecutive hyphenated lines appear at the end of a paragraph.</p><p>[…]</p><p>Perf concerns emerge as the <code>pretty</code> algorithm takes more and more lines into consideration as it calculates what to do. In WebKit-based browsers or apps, your text element would need to be many hundreds or thousands of lines long to see a performance hit — and that kind of content is unusual on the web. If your content is broken up into typical-length paragraphs, then you have no reason to worry.</p><p>[…]</p><p>Basically, the <code>text-wrap: balance</code> rule tells the browser to wrap in such places to make every line be about the same length as the others. I think of it like folding a piece of paper into halves, or thirds, or quarters.</p></blockquote>
<p><a href="https://blog.stephaniestimac.com/posts/2023/10/css-text-wrap/">Stephanie Stimac</a> (via <a href="https://x.com/ktguru/status/1910218592710451508">ktguru</a>):</p>
<blockquote cite="https://blog.stephaniestimac.com/posts/2023/10/css-text-wrap/"><p>With <code>text-wrap: balance;</code>, because there’s a limit to how many lines the browser will wrap, this should only be used on headlines, headings, and subheadings. Applying it to large paragraphs will have no effect and comes at a performance cost because the browser is trying to calculate optimal balance even though it won’t apply anything.</p></blockquote>
<p><a href="https://daringfireball.net/2025/04/webkit_textwrap_pretty">John Gruber</a> (<a href="https://mastodon.social/@daringfireball/114310553462404463">Mastodon</a>):</p>
<blockquote cite="https://daringfireball.net/2025/04/webkit_textwrap_pretty">
<p>I have mixed feelings about the results. Here are saved PDFs showing the rendering of my “<a href="https://daringfireball.net/2025/04/how_many_iphones_can_fit_on_a_freight_plane">How Many New iPhones Can Fit on a Freight Plane?</a>” article from earlier today: <a href="https://daringfireball.net/misc/2025/04/df-iphones-on-plane-textwrap-auto.pdf">first with traditional <code>text-wrap: auto</code></a> line wrapping, and <a href="https://daringfireball.net/misc/2025/04/df-iphones-on-plane-textwrap-pretty.pdf">second with WebKit’s new <code>text-wrap: pretty</code></a> in <a href="https://developer.apple.com/safari/technology-preview/">STP</a> 216. Looking at each paragraph by itself, there’s no question this new layout algorithm is, well, prettier. The problem I see is going from one paragraph to another. Within a paragraph, WebKit’s new <code>pretty</code> wrapping definitely makes lines a more uniform width. But in some cases it so narrows an entire paragraph that it makes going from one paragraph to the next jarring. Line-to-line the new algorithm looks better, but paragraph-to-paragraph I think it looks worse.</p>
</blockquote>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/11/css-text-wrap-pretty-in-webkit/feed/</wfw:commentRss>
<slash:comments>2</slash:comments>
</item>
<item>
<title>Awaiting APIs</title>
<link>https://mjtsai.com/blog/2025/04/10/awaiting-apis/</link>
<comments>https://mjtsai.com/blog/2025/04/10/awaiting-apis/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Thu, 10 Apr 2025 19:47:41 +0000</pubDate>
<category><![CDATA[Programming]]></category>
<category><![CDATA[Core Data]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Swift Concurrency]]></category>
<category><![CDATA[SwiftUI]]></category>
<category><![CDATA[WWDC]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47377</guid>
<description><![CDATA[Tomáš Kafka: So, this is the first time I am filling a bug report against a whole WWDC talk asking for its retraction for misleading info and describing unimplemented features. It’s the “Efficiency awaits: Background tasks in SwiftUI”. Well, they did say that it “awaits.” The talk describes .backgroundTask(.urlSession("...")) {} modifier, and leaves its body […]]]></description>
<content:encoded><![CDATA[<p><a href="https://x.com/tomaskafka/status/1907003833546657803">Tomáš Kafka</a>:</p>
<blockquote cite="https://x.com/tomaskafka/status/1907003833546657803"><p>So, this is the first time I am filling a bug report against a whole WWDC talk asking for its retraction for misleading info and describing unimplemented features.
It’s the “Efficiency awaits: Background tasks in SwiftUI”.</p></blockquote>
<p>Well, they did say that it “awaits.”</p>
<blockquote cite="https://x.com/tomaskafka/status/1907003833546657803">
<p>The talk describes <code>.backgroundTask(.urlSession("...")) {}</code> modifier, and leaves its body empty - because there is no valid code that could work there. This part seems to be entirely unimplemented, probably planned to be finished for WWDC 22, but never completed even 3 years later.</p>
<p>If you google the code, you will find many developers having spent hours and days trying to implement the solution from this talk, only to end up in dead end.</p>
</blockquote>
<p>More details are in this <a href="https://developer.apple.com/forums/thread/726443?answerId=823711022&page=1#832295022">forum post</a>.</p>
<p>I recently wasted time on a similar issue, trying to get Core Data’s <code>indexed:by:</code> function to work. It’s supposed to be the equivalent of <a href="https://www.sqlite.org/lang_indexedby.html">this</a>. I wasn’t able to find the function in the <a href="https://developer.apple.com/documentation/foundation/nsexpression">documentation</a>, but I had notes on it from WWDC 2017 Session 210, where it was displayed on a slide and also live-demoed. This wouldn’t be the first time the documentation was missing. But in this case it looks like the implementation is also missing, i.e. that the function was pulled after the demo. I don’t know why—it seems like a straightforward feature that they already had working. (Perhaps a hint that it was in flux is that the order of the function’s arguments are backwards in the slide vs. in the demo code.)</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/04/09/soured/#comment-4247732">Soured</a></li>
<li><a href="https://mjtsai.com/blog/2022/06/17/swiftui-changes-at-wwdc-2022/">SwiftUI Changes at WWDC 2022</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/10/awaiting-apis/feed/</wfw:commentRss>
<slash:comments>1</slash:comments>
</item>
<item>
<title>How Apple Fumbled Siri’s AI Makeover</title>
<link>https://mjtsai.com/blog/2025/04/10/how-apple-fumbled-siris-ai-makeover/</link>
<comments>https://mjtsai.com/blog/2025/04/10/how-apple-fumbled-siris-ai-makeover/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Thu, 10 Apr 2025 19:46:32 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Apple]]></category>
<category><![CDATA[Apple Intelligence]]></category>
<category><![CDATA[Artificial Intelligence]]></category>
<category><![CDATA[Craig Federighi]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Siri]]></category>
<category><![CDATA[Tim Cook]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47373</guid>
<description><![CDATA[Wayne Ma (article): Apple’s decision to delay new AI features in Siri came after years of dysfunction and clashes between the AI/ML and software engineering groups. Many blame Siri’s poor leadership for its slow progress. Hartley Charlton: Apple apparently weighed up multiple options for the backend of Apple Intelligence. One initial idea was to build […]]]></description>
<content:encoded><![CDATA[<p><a href="https://x.com/waynema/status/1910318316356534569">Wayne Ma</a> (<a href="https://www.theinformation.com/articles/apple-fumbled-siris-ai-makeover">article</a>):</p>
<blockquote cite="https://x.com/waynema/status/1910318316356534569">
<p>Apple’s decision to delay new AI features in Siri came after years of dysfunction and clashes between the AI/ML and software engineering groups. Many blame Siri’s poor leadership for its slow progress.</p>
</blockquote>
<p><a href="https://www.macrumors.com/2025/04/10/chaos-behind-siri-revealed/">Hartley Charlton</a>:</p>
<blockquote cite="https://www.macrumors.com/2025/04/10/chaos-behind-siri-revealed/"><p>Apple apparently weighed up multiple options for the backend of Apple Intelligence. One initial idea was to build both small and large language models, dubbed “Mini Mouse” and “Mighty Mouse,” to run locally on iPhones and in the cloud, respectively. Siri’s leadership then decided to go in a different direction and build a single large language model to handle all requests via the cloud, before a series of further technical pivots. The indecision and repeated changes in direction reportedly frustrated engineers and prompted some members of staff to leave Apple.</p><p>[…]</p><p>Apple’s AI/ML group has been dubbed “AIMLess” internally, while employees are said to refer to Siri as a “hot potato” that is continually passed between different teams with no significant improvements. There were also conflicts about higher pay, faster promotions, longer vacations, and shorter days for colleagues in the AI group.</p><p>Apple AI chief John Giannandrea was apparently confident he could fix Siri with the right training data and better web-scraping for answers to general knowledge questions. Senior leaders didn’t respond with a sense of urgency to the debut of ChatGPT in 2022; Giannandrea told employees that he didn’t believe chatbots like ChatGPT added much value for users.</p><p>[…]</p><p>The report claims that the demo of Apple Intelligence’s most impressive features at WWDC 2024, such as where Siri accesses a user’s emails to find real-time flight data and provides a reminder about lunch plans using messages and plots a route in maps, was effectively fictitious. The demo apparently came as a surprise to members of the Siri team, who had never seen working versions of the capabilities.</p></blockquote>
<p><a href="https://9to5mac.com/2025/04/10/this-is-how-apples-big-siri-shake-up-happened-per-report/">Ryan Christoffel</a>:</p>
<blockquote cite="https://9to5mac.com/2025/04/10/this-is-how-apples-big-siri-shake-up-happened-per-report/"><p>It’s pretty shocking that Siri’s new design was, per this report at least, the only new feature that was ready for testing within Apple last June.</p></blockquote>
<p>I’m still surprised that they shipped the new UI with the old Siri, thus confusing people and also missing their chance to get people to give the improved version a fresh look.</p>
<blockquote cite="https://9to5mac.com/2025/04/10/this-is-how-apples-big-siri-shake-up-happened-per-report/">
<p>Also, Ma closes with a fascinating tidbit: Federighi has reportedly already changed one big AI policy for its work on Siri.</p>
<p>Whereas Apple engineers previously had been directed to build features only using internal models, now using open-source third-party models has been given the green light.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/04/10/siri-product-knowledge/">Siri Product Knowledge</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/21/apple-shifts-siri-from-giannandrea-to-rockwell/">Apple Shifts Siri From Giannandrea to Rockwell</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/13/rotten/">Rotten</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/12/apple-delays-more-personalized-siri-apple-intelligence-features/">Apple Delays “More Personalized Siri” Apple Intelligence Features</a></li>
<li><a href="https://mjtsai.com/blog/2023/05/01/turmoil-behind-siri/">Turmoil Behind Siri</a></li>
</ul>
<p id="how-apple-fumbled-siris-ai-makeover-update-2025-04-11">Update (<a href="#how-apple-fumbled-siris-ai-makeover-update-2025-04-11">2025-04-11</a>): <a href="https://daringfireball.net/linked/2025/04/10/wayne-ma-the-information-apple-siri-fumble">John Gruber</a>:</p>
<blockquote cite="https://daringfireball.net/linked/2025/04/10/wayne-ma-the-information-apple-siri-fumble">
<p>What Ma describes is a scenario where Walker missed the fact that the whole forest sucked and didn’t work, while focusing on one or two nice trees.</p>
<p>[…]</p>
<p>I’m not even sure eliminating the requirement to use the verbal “hey” prefix was a win at all. It’s purely anecdotal and personal, but I think I get more unwanted invocations now than I did when “Hey Siri” was the required prompt.</p>
</blockquote>
<p>Same here.</p>
<blockquote cite="https://daringfireball.net/linked/2025/04/10/wayne-ma-the-information-apple-siri-fumble">
<p>Hundreds of engineers for a machine learning team outside Apple’s AI/ML division sounds like the definition of dysfunction.</p>
</blockquote>
<p><a href="https://www.macstories.net/linked/how-could-apple-use-open-source-ai-models/">Federico Viticci</a>:</p>
<blockquote cite="https://www.macstories.net/linked/how-could-apple-use-open-source-ai-models/"><p>My read of this part is that Federighi might have instructed his team to use <a href="https://www.ibm.com/think/topics/knowledge-distillation">distillation</a> to better train Apple’s in-house models as a way to accelerate the development of the delayed Siri features and put them back on the company’s roadmap. Given <a href="https://9to5mac.com/2025/03/24/tim-cook-says-chinas-deepseek-ai-is-excellent-during-visit-to-country/">Tim Cook’s public appreciation</a> for DeepSeek and this morning’s <a href="https://www.nytimes.com/2025/04/11/technology/apple-issues-trump-tariffs.html">New York Times report</a> that the delayed features may come this fall, I wouldn’t be shocked to learn that Federighi told Siri’s ML team to <a href="https://medium.com/data-science-in-your-pocket/what-are-deepseek-r1-distilled-models-329629968d5d">distill DeepSeek R1’s reasoning knowledge</a> into a new variant of their <a href="https://machinelearning.apple.com/research/apple-intelligence-foundation-language-models">∼3 billion parameter foundation model</a> that runs on-device. Doing that wouldn’t mean that iOS 19’s Apple Intelligence would be “powered by DeepSeek”; it would just be a faster way for Apple to catch up without throwing away the foundational model they unveiled last year (which, <a href="https://x.com/markgurman/status/1900616400823030024">supposedly</a>, had a ~30% error rate).</p><p></p></blockquote>
<p><a href="https://www.macrumors.com/2025/04/11/apple-ai-struggles-2023-chip-budget-dispute/">Tim Hardwick</a>:</p>
<blockquote cite="https://www.macrumors.com/2025/04/11/apple-ai-struggles-2023-chip-budget-dispute/"><p>Apple’s current struggles with Apple Intelligence and Siri began in early 2023 when AI head John Giannandrea sought approval from CEO Tim Cook to purchase more AI chips for development, according to a new report from <em><a href="https://www.nytimes.com/2025/04/11/technology/apple-issues-trump-tariffs.html">The New York Times</a></em>.</p><p>Cook initially approved doubling the team’s chip budget, but CFO Luca Maestri reportedly reduced the increase to less than half that amount, and instead encouraged the team to make existing chips more efficient.</p><p>The lack of adequate GPU resources meant Apple’s AI team had to negotiate for computing power from providers like Google and Amazon.</p>
<p>At the time, Apple’s data centers had about 50,000 GPUs that were more than five years old – far fewer than the hundreds of thousands of chips being purchased by competitors like Microsoft, Google, and Meta.</p></blockquote>
<p><a href="https://spyglass.org/apple-ai-fail/">M.G Siegler</a>:</p>
<blockquote cite="https://spyglass.org/apple-ai-fail/">
<p>Honestly, reading these reports, even if just <em>some</em> of the details are as bad as they sound, it’s hard to see how Giannandrea and Walker can stay at Apple. Again, it’s undoubtedly not as cut and dry as it may seem on paper, with Mickle getting intel that Giannandrea had long ago asked for the ability to buy up more GPUs to get their AI work done, only to have it <em>blocked</em> by CFO Luca Maestri – someone who is, incidentally, <a href="https://www.cnbc.com/2024/08/26/apple-to-replace-cfo-luca-maestri-on-jan-1.html?ref=spyglass.org">no longer in that role</a>.</p>
<p>[…]</p><p>But really, this all speaks to what is clearly a larger issue: a lot of this falls – <em>or should fall</em> – on Tim Cook.</p><p>There’s just no sugarcoating it. He’s the CEO. The buck literally stops with him – if the CFO overrides him on the GPU request, he should veto that, as he apparently had already signed off. If the CFO changed his mind, okay, but why? <a href="https://spyglass.org/apple-q3-2024/">Just cost?</a> That would indicate a colossal misreading of the situation.</p>
</blockquote>
<p><a href="https://512pixels.net/2025/04/budget-constraints-blamed-for-apples-ai-woes/">Stephen Hackett</a>:</p>
<blockquote cite="https://512pixels.net/2025/04/budget-constraints-blamed-for-apples-ai-woes/">
<p>For a company that says it doesn’t like looking back at its own history, very often, Apple makes decisions like it’s the late 1990s and the company is on the verge of failure.</p>
</blockquote>
<p>Only for core technologies like <a href="https://mjtsai.com/blog/2019/11/07/limits-to-apples-butterfly-keyboard-repair-program/">Macs</a>, <a href="https://mjtsai.com/blog/2025/03/05/apple-m3-ultra/#apple-m3-ultra-update-2025-03-17">high-end processors</a>, QA, and Siri. When it’s the car or Vision Pro or Apple TV+ the sky’s the limit.</p>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/10/how-apple-fumbled-siris-ai-makeover/feed/</wfw:commentRss>
<slash:comments>3</slash:comments>
</item>
<item>
<title>Siri Product Knowledge</title>
<link>https://mjtsai.com/blog/2025/04/10/siri-product-knowledge/</link>
<comments>https://mjtsai.com/blog/2025/04/10/siri-product-knowledge/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Thu, 10 Apr 2025 19:46:22 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Apple Intelligence]]></category>
<category><![CDATA[Files.app]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[Siri]]></category>
<category><![CDATA[Tips.app]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47371</guid>
<description><![CDATA[Joe Rosensteel: Thinking back to Apple’s statement to John Gruber boasting about Siri product knowledge, and Gruber rightfully pointing out on Mastodon that product knowledge isn’t very accurate, or helpful. I figured this was a time where I should at least try to use it. I already knew there was a support document, so it […]]]></description>
<content:encoded><![CDATA[<p><a href="https://joe-steel.com/2025-03-14-Scan-and-Email-a-Document.html">Joe Rosensteel</a>:</p>
<blockquote cite="https://joe-steel.com/2025-03-14-Scan-and-Email-a-Document.html">
<p>Thinking back to <a href="https://daringfireball.net/2025/03/apple_is_delaying_the_more_personalized_siri_apple_intelligence_features">Apple’s statement to John Gruber</a> boasting about Siri product knowledge, and Gruber rightfully pointing out on <a href="https://mastodon.social/@gruber/114127826856052915">Mastodon</a> that product knowledge isn’t very accurate, or helpful. I figured this was a time where I should at least <em>try</em> to use it. I already knew there was a support document, so it should at least send me to that.</p>
<p>That is what product knowledge is, after all, it’s a thing that displays part of the Apple Support document. It’s only display one thing, but it’ll do it with absolute certainty. A deep-link to the Tips app will take you right to the documentation, but you can’t share the document from the Tips app even though it also exists online at Apple’s own website. Also, for some reason, there are differences between Tips and the web, like the part about the Files app is in the web version of the document, but absent from Tips even in the latest iOS 18.3.2. If you’re looking up something on behalf of someone else and plan to send instructions to them it’s better to do that from the web, using a real search engine.</p>
<p>[…]</p>
<p>If I typed “How to scan and email a document?” it gave me some abbreviated, generic instructions from the world famous scannmore.com to open <em>any</em> email app, and add an attachment. This is quite useless because it isn’t <em>relevant</em>.</p>
<p>[…]</p>
<p>This isn’t LLM-AI-AGI-GPT-Multi-Modal stuff. This isn’t trillions in funding and melting a glacier. It’s the kind of logic you’d use in a search engine where relevance comes into play. This doesn’t require years of research into a new field of study. Typing this in the blank address bar of a web browser is the level of technological advancement that outpaces Siri. Siri can’t be this picky about syntax when no one else is.</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/04/10/how-apple-fumbled-siris-ai-makeover/">How Apple Fumbled Siri’s AI Makeover</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/12/apple-delays-more-personalized-siri-apple-intelligence-features/">Apple Delays “More Personalized Siri” Apple Intelligence Features</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/10/siri-product-knowledge/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>Unable to Send Messages With Apple Mail on macOS 15.4</title>
<link>https://mjtsai.com/blog/2025/04/09/unable-to-send-messages-with-apple-mail-on-macos-15-4/</link>
<comments>https://mjtsai.com/blog/2025/04/09/unable-to-send-messages-with-apple-mail-on-macos-15-4/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Wed, 09 Apr 2025 19:57:41 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Apple Mail]]></category>
<category><![CDATA[Bug]]></category>
<category><![CDATA[E-mail]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Spelling]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47365</guid>
<description><![CDATA[Awkward_One_9772: MacOS 15.4 (Sequoia) cannot send email, but it receives email eMail. Using 3 different accounts in apple email it fails for all three. […] When I click “send” on an email created in apple mail or as a draft in apple mail, apple eMail nothing happens, just the airplane send icon grays out, also […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.reddit.com/r/MacOS/comments/1jqa5mp/macos_154_sequoia_cannot_send_email_but_it/">Awkward_One_9772</a>:</p>
<blockquote cite="https://www.reddit.com/r/MacOS/comments/1jqa5mp/macos_154_sequoia_cannot_send_email_but_it/"><p>MacOS 15.4 (Sequoia) cannot send email, but it receives email eMail. Using 3 different accounts in apple email it fails for all three. […] When I click “send” on an email created in apple mail or as a draft in apple mail, apple eMail nothing happens, just the airplane send icon grays out, also Time-to-cancel does not appear in the apple mail’s bottom left column either.</p></blockquote>
<p><a href="https://forums.macrumors.com/threads/macos-15-4-after-update-mail-app-does-not-send-email.2454948/">pajako</a>:</p>
<blockquote cite="https://forums.macrumors.com/threads/macos-15-4-after-update-mail-app-does-not-send-email.2454948/"><p>I can open the mail.app; type and e-mail and hit ‘send’
The send-button turns gray and no email is been send.</p><p>[…]</p><p>It gets even weirder: I saw a reply somewhere about trying to send an e-mail with an attachment; after I tried to attach a file to an e-mail it works again. Not flawless but I can send emails again…</p></blockquote>
<p>One of my customers also encountered this bug, where the <strong>Send</strong> button turns gray and seemingly the only option is to close the draft, discarding changes. He found that the problem was triggered by the <strong>Settings ‣ Composing ‣ Check spelling ‣ When I Click Send</strong> option, which is supposed to bring up the <strong>Spelling and Grammar</strong> panel, but didn’t. I have always used <strong>As I Type</strong>. When I changed it to <strong>When I Click Send</strong>, the first message worked normally, bringing up the panel and then sending the message when I closed it, but the second message didn’t show the panel and got into the reported disabled state.</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/31/macos-15-4/">macOS 15.4</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/09/unable-to-send-messages-with-apple-mail-on-macos-15-4/feed/</wfw:commentRss>
<slash:comments>4</slash:comments>
</item>
<item>
<title>Why Companies Don’t Fix Bugs</title>
<link>https://mjtsai.com/blog/2025/04/09/why-companies-dont-fix-bugs/</link>
<comments>https://mjtsai.com/blog/2025/04/09/why-companies-dont-fix-bugs/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Wed, 09 Apr 2025 19:57:14 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Apple]]></category>
<category><![CDATA[Apple Software Quality]]></category>
<category><![CDATA[Bug]]></category>
<category><![CDATA[Business]]></category>
<category><![CDATA[Craft]]></category>
<category><![CDATA[Game]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[Programming]]></category>
<category><![CDATA[Working]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47362</guid>
<description><![CDATA[Ibrahim Diallo (via Hacker News): A few years ago, a lone programmer named t0st did something extraordinary: he fixed an 8-year-old bug in GTA Online that had been driving players crazy. The bug? Painfully long load times, sometimes up to 20 minutes. While the single-player mode loaded in seconds. His solution was elegant: a 13-line […]]]></description>
<content:encoded><![CDATA[<p><a href="https://idiallo.com/blog/companies-dont-fix-bugs">Ibrahim Diallo</a> (via <a href="https://news.ycombinator.com/item?id=43615346">Hacker News</a>):</p>
<blockquote cite="https://idiallo.com/blog/companies-dont-fix-bugs"><p>A few years ago, a lone programmer named t0st did something extraordinary: he fixed an 8-year-old bug in <em>GTA Online</em> that had been driving players crazy. The bug? Painfully long load times, sometimes up to 20 minutes. While the single-player mode loaded in seconds. His solution was elegant: a 13-line code tweak that cut load times by 70%. Rockstar Games, the studio behind <em>GTA</em>, rewarded him with a $10,000 bounty and patched the game. Problem solved, right? </p><p>Not quite. </p><p>The internet erupted with criticism. How could a billion-dollar company miss something so obvious? Were their developers incompetent? As someone who’s worked in tech, I can tell you the answer isn’t that simple. The real story here isn’t about lazy developers or technical incompetence. It’s about how even the simplest fixes get lost in the labyrinth of corporate priorities.</p></blockquote>
<p>I think these kinds of bugs do drive customers away, but did it really happen if you can’t measure it? I wish Tim Cook would <em>not</em> think about the “<a href="https://www.macobserver.com/tmo/article/tim-cook-soundly-rejects-politics-of-the-ncppr-suggests-group-sell-apples-s">bloody ROI</a>” regarding software quality, too. Apple had the <a href="https://www.brianhertzog.com/blog/cabinets">back of the cabinet</a> mentality as a young company, but now that it has F.U. money it chooses not to care. Shouldn’t it be the other way around? Conversely, there are some small companies who will dig into any issue that you report, even though it may turn out to be a bug that doesn’t affect anyone else. (At bigco scale, odds are that it does.) Not only is this great because it directly solves my problem, but I also know that I’m dealing with craftspeople and that if they treat others the same way the product is probably solid in ways I couldn’t imagine.</p>
<p><a href="https://idiallo.com/blog/companies-dont-fix-bugs#comment-4548">Tim</a>:</p>
<blockquote cite="https://idiallo.com/blog/companies-dont-fix-bugs#comment-4548"><p>There’s some software from a big company that I have to use for a project (not my choice), and it drives me crazy how buggy it is. The same company is running ads for internet service in my city. Given my experience with the software, there is zero chance I’d ever consider them as my ISP. I know it’s not the same team, but they give off a corporate aura of not caring. Even if I knew for certain that the internet service would be perfect, I can’t in good faith reward them with money for their software apathy.</p><p>The best companies realize that the best advertising is a quality product, the easiest customers to sell to are their existing customers, and happy customers are their own free advertising team. All the buggy software I see today is causing me to have absolutely no loyalty to any of these companies. It is unbelievably shortsighted for them not to see this.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/04/09/soured/">Soured</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/28/apple-needs-a-snow-sequoia/">Apple Needs a Snow Sequoia</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/04/premium-hardware-subpar-software/">Premium Hardware, Subpar Software</a></li>
<li><a href="https://mjtsai.com/blog/2023/06/12/investing-10-to-pay-back-technical-debt/">Investing 10% to Pay Back Technical Debt</a></li>
<li><a href="https://mjtsai.com/blog/2022/05/11/problems-with-promotion-oriented-cultures/">Problems With Promotion-Oriented Cultures</a></li>
<li><a href="https://mjtsai.com/blog/2022/03/23/incentives-in-product-design-and-development/">Incentives in Product Design and Development</a></li>
<li><a href="https://mjtsai.com/blog/2020/10/01/priorities/">Priorities</a></li>
<li><a href="https://mjtsai.com/blog/2017/11/29/why-little-bugs-need-to-get-fixed/">Why Little Bugs Need to Get Fixed</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/09/why-companies-dont-fix-bugs/feed/</wfw:commentRss>
<slash:comments>10</slash:comments>
</item>
<item>
<title>Soured</title>
<link>https://mjtsai.com/blog/2025/04/09/soured/</link>
<comments>https://mjtsai.com/blog/2025/04/09/soured/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Wed, 09 Apr 2025 19:57:01 +0000</pubDate>
<category><![CDATA[Programming]]></category>
<category><![CDATA[App Store]]></category>
<category><![CDATA[Apple Software Quality]]></category>
<category><![CDATA[Documentation]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Magic Lasso Adblock]]></category>
<category><![CDATA[Radar and Feedback Assistant]]></category>
<category><![CDATA[Safari Extensions]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47360</guid>
<description><![CDATA[Matthew Bickham (Hacker News): Once upon a time, developing for Apple was an exciting, rewarding challenge. Apple built world-class hardware and software, and developers created incredible apps that made those devices indispensable. It was a win-win. But in 2025, that relationship has soured. […] Sure, they’ll pay lip service to developers. But as in any […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.magiclasso.co/insights/apple-development/">Matthew Bickham</a> (<a href="https://news.ycombinator.com/item?id=43540096">Hacker News</a>):</p>
<blockquote cite="https://www.magiclasso.co/insights/apple-development/">
<p>Once upon a time, developing for Apple was an exciting, rewarding challenge. Apple built world-class hardware and software, and developers created incredible apps that made those devices indispensable. It was a win-win. But in 2025, that relationship has soured.</p>
<p>[…]</p>
<p>Sure, they’ll pay lip service to developers. But as in any relationship, don’t listen to the loving words of the perpetrator, instead observe their hurtful actions. Apple has continually created an environment and policies, along with nurturing a culture, that is detrimental and harmful to developers.</p>
<p>[…]</p>
<p>Developing for Apple isn’t just about writing great code — it’s about navigating a bureaucratic obstacle course filled with red tape, secret handshakes, and hidden pitfalls.</p>
<p>[…]</p>
<p>Now from experience, I know there is a limit on the number of rules that can be loaded. This isn’t documented anywhere. You are just meant to know the limit. […] Unfortunately – and what isn’t documented anywhere – is that although you can load that many rules, you are unlikely to actually be able to do so. There is also a hard, undocumented, memory limit on the extension process that loads the rules. A memory limit that kills the extension and means the app doesn’t work if it’s exceeded. A memory limit that isn’t documented, isn’t defined and isn’t known until you spend weeks trying to determine why your app is not working. An undocumented memory limit that is also different across iOS and macOS.</p>
</blockquote>
<p>He also talks about the annual release cycle and API churn. There are certainly other prioritization and management issues, e.g. with Radar, documentation, and the elevation of “security” over all else, but so many problems come down to the schedule. Apple is trying to do too much too quickly. Major changes are snuck in months after the beta cycle began. Remember when “beta” used to mean that it was feature-complete and had already been extensively tested internally? And, of course, they ship stuff that’s immature (doesn’t work, has bugs or obvious design flaws, isn’t documented, etc.).</p>
<p>In theory, the release interval is arbitrary and not determinative: an annual schedule could be fine if the releases were smaller. But this is not what Apple has been doing. And, recently, they’ve made it worse by announcing stuff that they <em>know</em> won’t ship in the 0.0 release. This is spun as clever planning to deliver new delights throughout the year. But it seems more like a cope for squeezing more into the major release than they should. And the reality is that it means introducing whole new APIs and breakage in the <a href="https://mjtsai.com/blog/2025/03/31/macos-15-4/">0.4</a> <a href="https://mjtsai.com/blog/2025/03/31/ios-18-4-and-ipados-18-4/">release</a>. We no longer get a stable version before the next cycle begins.</p>
<p>The outward manifestation of all this is reduced quality. What’s less seen is that this bad process ultimately wastes time for everyone involved. If Apple ships something with known issues or issues that could have been caught internally, that generates work for external developers. They have to test and file bugs and develop workarounds because there’s no longer an expectation that bugs will be fixed before release to customers. Apple then has to process these bug reports, which it clearly doesn’t have time to do before shipping. As a bug gets out to more people, customers encounter it, which wastes their time and generates more support load and bug reporting for developers and more bug reports and AppleCare calls for Apple. So much of this could have been eliminated by catching problems earlier in the process. But, hey, technically they did hit the schedule.</p>
<p>Ironically, Apple does understand this at the micro level. They continue to make improvements to Xcode’s automated testing support. And Swift is all about catching problems early. Before you get to <em>runtime</em> testing, let’s block you from even <em>compiling</em> code with these potential errors. Let’s restrict what you can do in the interest of being able to <a href="https://mastodon.social/@caseyliss/114304343646106876">prove</a> to the compiler that it’s correct. And if a bug does make it through testing and to a user’s device, <a href="https://en.wikipedia.org/wiki/Fail-fast_system">fail</a> <a href="https://mjtsai.com/blog/2024/10/01/swift-concurrency-and-objective-c/">fast</a>. Yet at the macro level, Apple’s software strategy seems to be the opposite. Ship first, catch later, move fast and break things, just <a href="https://tvtropes.org/pmwiki/pmwiki.php/Main/FixItInPost">fix it in post</a> (or <a href="https://mjtsai.com/blog/2019/10/11/mail-data-loss-in-macos-10-15/">not</a>).</p>
<p><a href="https://x.com/ScooterComputer/status/1909730180282957903">Scott</a>:</p>
<blockquote cite="https://x.com/ScooterComputer/status/1909730180282957903">
<p>Just had a thought: given rumored iPhone 17 designs which are—quite simply—not all that compelling, that the M4 has made it Mac-wide (excepting the Mac Pro), and the tariff situation, now would be a PERFECT TIME for Apple to announce a 1 year ‘pause’ (of sorts) on OSes, ‘SNOW’!</p>
<p>[…]</p>
<p>Could announce at WWDC that they’re extending development on i|PadOS 18 and macOS 15 another 12 months; squashing bugs, solidifying features, not dropping any additional Intel Macs or iPhones, and eventually, finally, really bringing promised Apple Intelligence/Siri features.</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/04/08/locked-out-of-apple-developer-accounts/">Locked Out of Apple Developer Accounts</a></li>
<li><a href="https://mjtsai.com/blog/2025/04/01/xcode-16-3/">Xcode 16.3</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/31/ios-18-4-and-ipados-18-4/">iOS 18.4 and iPadOS 18.4</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/31/macos-15-4/">macOS 15.4</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/28/apple-needs-a-snow-sequoia/">Apple Needs a Snow Sequoia</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/24/tim-dont-kill-my-vibe/">Tim, Don’t Kill My Vibe</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/13/rotten/">Rotten</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/12/apple-delays-more-personalized-siri-apple-intelligence-features/">Apple Delays “More Personalized Siri” Apple Intelligence Features</a></li>
<li><a href="https://mjtsai.com/blog/2025/02/27/our-changing-relationship-with-apple/">Our Changing Relationship With Apple</a></li>
<li><a href="https://mjtsai.com/blog/2024/10/02/local-network-privacy-on-sequoia/">Local Network Privacy on Sequoia</a></li>
<li><a href="https://mjtsai.com/blog/2024/09/18/feedback-feedback/">Feedback Feedback</a></li>
<li><a href="https://mjtsai.com/blog/2024/05/29/cloudkit-throttles-and-debugging/">CloudKit Throttles and Debugging</a></li>
<li><a href="https://mjtsai.com/blog/2022/03/23/incentives-in-product-design-and-development/">Incentives in Product Design and Development</a></li>
<li><a href="https://mjtsai.com/blog/2020/10/01/priorities/">Priorities</a></li>
<li><a href="https://mjtsai.com/blog/2020/06/19/have-you-contributed-any-revenue/">Have You Contributed Any Revenue?</a></li>
<li><a href="https://mjtsai.com/blog/2019/09/03/icloud-drive-features-removedpostponed/">iCloud Drive Features Removed/Postponed</a></li>
<li><a href="https://mjtsai.com/blog/2018/02/05/sandbox-limitation-on-number-of-files-that-can-be-opened/">Sandbox Limitation on Number of Files That Can Be Opened</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/09/soured/feed/</wfw:commentRss>
<slash:comments>16</slash:comments>
</item>
<item>
<title>Reflecting on 18 Years at Google</title>
<link>https://mjtsai.com/blog/2025/04/09/reflecting-on-18-years-at-google/</link>
<comments>https://mjtsai.com/blog/2025/04/09/reflecting-on-18-years-at-google/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Wed, 09 Apr 2025 19:56:43 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Business]]></category>
<category><![CDATA[Google]]></category>
<category><![CDATA[Google Search]]></category>
<category><![CDATA[Layoffs]]></category>
<category><![CDATA[Programming]]></category>
<category><![CDATA[Working]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47358</guid>
<description><![CDATA[Ian Hickson (2023, via Hacker News): I feel very lucky to have experienced the early post-IPO Google; unlike most companies, and contrary to the popular narrative, Googlers, from the junior engineer all the way to the C-suite, were genuinely good people who cared very much about doing the right thing. The oft-mocked “don’t be evil“ […]]]></description>
<content:encoded><![CDATA[<p><a href="https://ln.hixie.ch/?start=1700627373&count=1">Ian Hickson</a> (2023, via <a href="https://news.ycombinator.com/item?id=38381573">Hacker News</a>):</p>
<blockquote cite="https://ln.hixie.ch/?start=1700627373&count=1"><p>I feel very lucky to have experienced the early post-IPO Google; unlike most companies, and contrary to the popular narrative, Googlers, from the junior engineer all the way to the C-suite, were genuinely good people who cared very much about doing the right thing. The oft-mocked “<a href="https://en.wikipedia.org/wiki/Don%27t_be_evil">don’t be evil</a>“ truly was the guiding principle of the company at the time (largely a reaction to contemporaries like Microsoft whose operating procedures put profits far above the best interests of customers and humanity as a whole).</p><p>[…]</p><p>Early Google was also an excellent place to work. Executives gave frank answers on a weekly basis, or were candid about their inability to do so (e.g. for legal reasons or because some topic was too sensitive to discuss broadly). Eric Schmidt regularly walked the whole company through the discussions of the board. The successes and failures of various products were presented more or less objectively, with successes celebrated and failures examined critically with an eye to learning lessons rather than assigning blame. The company had a vision, and deviations from that vision were explained. Having experienced <a href="https://en.wikipedia.org/wiki/List_of_Dilbert_characters#Pointy-haired_Boss">Dilbert-level management</a> during my internship at Netscape five years earlier, the uniform competence of people at Google was very refreshing.</p><p>[…]</p><p>Flutter grew in a bubble, largely insulated from the changes Google was experiencing at the same time. Google’s culture eroded. Decisions went from being made for the benefit of users, to the benefit of Google, to the benefit of whoever was making the decision. Transparency evaporated. Where previously I would eagerly attend every company-wide meeting to learn what was happening, I found myself now able to predict the answers executives would give word for word. Today, I don’t know anyone at Google who could explain what Google’s vision is. Morale is at an all-time low. If you talk to therapists in the bay area, they will tell you all their Google clients are unhappy with Google.</p><p>Then Google had layoffs. The layoffs were an unforced error driven by a short-sighted drive to ensure the stock price would keep growing quarter-to-quarter, instead of following Google’s erstwhile strategy of prioritising long-term success even if that led to short-term losses (the very essence of “don’t be evil”). </p></blockquote>
<p><a href="https://social.clawhammer.net/blog/posts/2005-09-25-FirstWeekAtGoogle/">Ben Collins-Sussman</a> (2005, via <a href="https://news.ycombinator.com/item?id=39035233">Hacker News</a>):</p>
<blockquote cite="https://social.clawhammer.net/blog/posts/2005-09-25-FirstWeekAtGoogle/"><p>I sent this email to my wife and friends as I was wrapping up my first week of “noogler” orientation at Google’s headquarters in 2005. It’s a bit of a glimpse into Silicon Valley at the start of its peak ‘creative culture’ era.</p></blockquote>
<p><a href="https://social.clawhammer.net/blog/posts/2024-01-10-GoogleExitLetter/">Ben Collins-Sussman</a> (2024, via <a href="https://news.ycombinator.com/item?id=39034277">Hacker News</a>, <a href="https://x.com/danluu/status/1747844679671140708">Dan Luu</a>):</p>
<blockquote cite="https://social.clawhammer.net/blog/posts/2024-01-10-GoogleExitLetter/"><p>When I was laid off from Google, I knew I’d be deluged with questions. I wrote this FAQ to share with friends and family, to prevent repeated explanation. But my other goal was to help so many of my co-workers process and understand the repeated waves of mass layoffs.</p></blockquote>
<p>Collins-Sussman was a co-founder of both the Subversion project and Google’s Chicago office.</p>
<p><a href="https://social.clawhammer.net/blog/posts/2024-01-19-CultureChange/">Ben Collins-Sussman</a> (<a href="https://news.ycombinator.com/item?id=39051655">Hacker News</a>):</p>
<blockquote cite="https://social.clawhammer.net/blog/posts/2024-01-19-CultureChange/"><p>Google is still a great place to work -- far better than most companies -- and still doing amazing things. My goal here is to call out a unique, beautiful thing that happened… put it out into the universe, with the hope that it can come back again someday, somewhere.</p><p>[…]</p><p>And so, when priorities would change, Google <strong>did not fire people</strong>,
but rather <em>moved</em> them carefully between projects. The unstated
cultural principle was: “products come and go, but we worked <em>so hard</em>
to get our employees… so we should preserve them at all costs. They
are our most precious resource.” And so a tremendous amount of energy
was put into high-touch resettlement of each employee into new
projects. They were generalists. We knew they’d thrive, and that
Google would continue to make use of their talent in new ways.</p><p>But things change. In my first month at Google, I remember a
co-worker whispering to me, “the day Google revenue stops growing
without bound, is also the day all of this will change.” The change
was very gradual for a long time -- but then things accelerated during
the pandemic. Revenue began to slow, and now, coming out of the
pandemic, we’re seeing waves of layoffs. Yes, we knew things would
change, but we didn’t expect it would accelerate <em>this quickly</em>, in
the span of just a couple of years. The academic founders are gone,
much of the C-suite is now former Wall Street execs; combine that with
revenue flattening toward a stable horizontal asymptote, and the
obvious, expected thing happens: the company suddenly moves from a
”culture of infinite abundance” to a standard “culture of limited
resources.” It’s a predictable regression toward becoming a ‘normal’
company.</p></blockquote>
<p><a href="https://www.tbray.org/ongoing/When/202x/2024/01/15/Google-2024">Tim Bray</a> (<a href="https://news.ycombinator.com/item?id=39051508">Hacker News</a>, <a href="https://daringfireball.net/linked/2024/01/19/bray-google-kagi">John Gruber</a>):</p>
<blockquote cite="https://www.tbray.org/ongoing/When/202x/2024/01/15/Google-2024"><p>On March 15, 2010, I
<a href="https://www.tbray.org/ongoing/When/201x/2010/03/15/Joining-Google">started a new job at Google</a>. The fourteen years since that day feel like
a century.
The title of my announcement
was <cite>Now A No-Evil Zone</cite> and, OK, I can hear the laughing from ten timezones away. I tried, then, to be restrained,
but there are hardly words to describe how happy and excited I was. I had escaped from the accretion disk the former Sun
Microsystems was forming around Oracle, that blackest of holes. And Google, in 2010, was the coolest place in the world to
work.</p><p>[…]</p><p>This is in my mind these days as I’m on a retired-Googlers mailing list where the current round of layoffs is under
discussion and, well, it really seems like the joy has well and truly departed the Googleplex.</p><p>[…]</p><p>For my money, that was the center of Google’s problem. Larry and Sergey were smart guys who recognized they didn’t know shit
about corporateness and quickly got into a pattern of hiring and empowering psychotic pricks who were presumably “good at
business”. Not gonna talk about some of the things I saw because these
people are wealthy and litigious.</p>
<p>[…]</p>
<p>And now, in Anno Domini 2024, Google has lost its edge in search. There are plenty of things it can’t find. There are compelling alternatives. To me this feels like a big inflection point, because around the stumbling feet of the Big Tech dinosaurs, the Web’s mammals, agile and flexible, still scurry. They exhibit creative energy and strongly-flavored voices, and those voices still sometimes find and reinforce each other without being sock puppets of shareholder-value-focused private empires.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/04/09/why-companies-dont-fix-bugs/">Why Companies Don’t Fix Bugs</a></li>
<li><a href="https://mjtsai.com/blog/2024/12/27/vlad-prelovac-on-kagi-search-and-orion/">Vlad Prelovac on Kagi Search and Orion</a></li>
<li><a href="https://mjtsai.com/blog/2022/03/23/incentives-in-product-design-and-development/">Incentives in Product Design and Development</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/09/reflecting-on-18-years-at-google/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>Swiftly 1.0</title>
<link>https://mjtsai.com/blog/2025/04/08/swiftly-1-0/</link>
<comments>https://mjtsai.com/blog/2025/04/08/swiftly-1-0/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Tue, 08 Apr 2025 18:27:09 +0000</pubDate>
<category><![CDATA[Programming]]></category>
<category><![CDATA[Compiler]]></category>
<category><![CDATA[Developer Tool]]></category>
<category><![CDATA[Linux]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Open Source]]></category>
<category><![CDATA[Swift Programming Language]]></category>
<category><![CDATA[Xcode]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47354</guid>
<description><![CDATA[Chris McGee: Today we’re delighted to introduce the first stable release of swiftly, a Swift version manager that takes the pain out of installing, managing and updating your Swift toolchain.The latest version of Swift is bundled with Xcode for writing apps for Apple platforms. But perhaps you want to install Swift on a different platform […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.swift.org/blog/introducing-swiftly_10/">Chris McGee</a>:</p>
<blockquote cite="https://www.swift.org/blog/introducing-swiftly_10/"><p>Today we’re delighted to introduce the first stable release of swiftly, a Swift version manager that takes the pain out of installing, managing and updating your Swift toolchain.</p><p>The latest version of Swift is bundled with Xcode for writing apps for Apple platforms. But perhaps you want to install Swift on a different platform like Linux, or use a different version of the toolchain for building services or command line tools. Downloading, extracting and installing a trusted build of Swift along with the relevant dependencies for your operating system can require quite a few manual and error-prone steps.</p><p>swiftly has been around for some years as a community-supported tool for Swift developers using Linux. With this release, we’re officially supporting it as part of the core Swift toolchain, including hosting it as part of the <a href="https://github.com/swiftlang">Swift GitHub organization</a>. We’ve also added macOS support to make it easier to install Swift separately from Xcode.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/04/01/xcode-16-3/">Xcode 16.3</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/08/swiftly-1-0/feed/</wfw:commentRss>
<slash:comments>1</slash:comments>
</item>
<item>
<title>Kaleidoscope 5.4</title>
<link>https://mjtsai.com/blog/2025/04/08/kaleidoscope-5-4/</link>
<comments>https://mjtsai.com/blog/2025/04/08/kaleidoscope-5-4/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Tue, 08 Apr 2025 18:27:03 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Debugging]]></category>
<category><![CDATA[Developer Tool]]></category>
<category><![CDATA[Kaleidoscope]]></category>
<category><![CDATA[LLDB]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[Mac App]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Programming]]></category>
<category><![CDATA[Xcode]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47352</guid>
<description><![CDATA[Florian Albrecht: [The ksdiff] command (called ksp in earlier versions) captures the output from any LLDB command and sends it to Kaleidoscope. Key features include:Designed for repeated use to compare debugger output over timeAutomatically groups related calls into a single Kaleidoscope windowSeparates output from different debug targets into distinct windows[The kspo] command offers enhanced visualization […]]]></description>
<content:encoded><![CDATA[<p><a href="https://blog.kaleidoscope.app/2025/03/20/kaleidoscope-5-4-enhanced-xcode-debugger-output-comparisons/">Florian Albrecht</a>:</p>
<blockquote cite="https://blog.kaleidoscope.app/2025/03/20/kaleidoscope-5-4-enhanced-xcode-debugger-output-comparisons/"><p>[The <code>ksdiff</code>] command (called <code>ksp</code> in earlier versions) captures the output from any LLDB command and sends it to Kaleidoscope. Key features include:</p><ul><li>Designed for repeated use to compare debugger output over time</li><li>Automatically groups related calls into a single Kaleidoscope window</li><li>Separates output from different debug targets into distinct windows</li></ul><p>[The <code>kspo</code>] command offers enhanced visualization capabilities:</p><ol><li>It attempts to produce an object description similar to LLDB’s <code>po</code> command</li><li>For supported classes, it generates visual representations instead of just text</li></ol><p>[…]</p><p>Rather than manually stopping execution and typing commands, you can set up breakpoints with automatic <code>ksdiff</code> or <code>kspo</code> actions.</p><p>This approach enables automated logging at specific execution points without interrupting your debug flow. Combined with automatic continuation, this technique dramatically streamlines debugging of complex behaviors by capturing state at critical moments without manual intervention.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/02/20/kaleidoscope-5-3/">Kaleidoscope 5.3</a></li>
<li><a href="https://mjtsai.com/blog/2021/04/22/kaleidoscope-2-4-1/">Kaleidoscope 2.4.1</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/08/kaleidoscope-5-4/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>Locked Out of Apple Developer Accounts</title>
<link>https://mjtsai.com/blog/2025/04/08/locked-out-of-apple-developer-accounts/</link>
<comments>https://mjtsai.com/blog/2025/04/08/locked-out-of-apple-developer-accounts/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Tue, 08 Apr 2025 18:26:28 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Apple Developer Account]]></category>
<category><![CDATA[Apple ID]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[Programming]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47350</guid>
<description><![CDATA[Dave DeLong: In the past 24 hours I’ve heard of four different developers who have been entirely locked out of their Apple Developer accounts for seemingly no reason whatsoever, with no help from support and no apparent way to escalate.No idea what’s going on, but this for sure does not seem good. Janie Larson: Last […]]]></description>
<content:encoded><![CDATA[<p><a href="https://mastodon.social/@davedelong/114298274966216722">Dave DeLong</a>:</p>
<blockquote cite="https://mastodon.social/@davedelong/114298274966216722"><p>In the past 24 hours I’ve heard of four different developers who have been entirely locked out of their Apple Developer accounts for seemingly no reason whatsoever, with no help from support and no apparent way to escalate.</p><p>No idea what’s going on, but this for sure does not seem good.</p></blockquote>
<p><a href="https://appdot.net/@RedQueenCoder/114298310257909727">Janie Larson</a>:</p>
<blockquote cite="https://appdot.net/@RedQueenCoder/114298310257909727"><p>Last year I had my developer account labeled as inactive in spite of it being paid at the time. It wouldn’t give me the option to reactivate it because it was paid in full. I eventually just let it lapse and now I don’t publish anything on Apple platforms. 😅</p></blockquote>
<p><a href="https://mastodon.social/@JonathanGerlach/114298567398605395">Jonathan Gerlach</a>:</p>
<blockquote cite="https://mastodon.social/@JonathanGerlach/114298567398605395">
<p>I’m a developer who was locked out of my developer account, btw. I can’t log in or reset my password.</p>
</blockquote>
<p><a href="https://mastodon.social/@st3fan/114298709517909197">Stefan Arentz</a>:</p>
<blockquote cite="https://mastodon.social/@st3fan/114298709517909197">
<p>It happened to me last year. After a bunch of one way communication it was suddenly restored. No explanation.</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/02/27/our-changing-relationship-with-apple/">Our Changing Relationship With Apple</a></li>
<li><a href="https://mjtsai.com/blog/2025/02/03/2024-six-colors-apple-report-card/">2024 Six Colors Apple Report Card</a></li>
<li><a href="https://mjtsai.com/blog/2023/08/24/digital-will-sues-apple-over-developer-account-termination/">Digital Will Sues Apple Over Developer Account Termination</a></li>
<li><a href="https://mjtsai.com/blog/2022/10/05/developer-account-in-limbo-due-to-popularity/">Developer Account In Limbo Due to Popularity</a></li>
<li><a href="https://mjtsai.com/blog/2021/12/07/apple-accounts-permanently-blocked/">Apple Accounts “Permanently” Blocked</a></li>
<li><a href="https://mjtsai.com/blog/2021/02/10/students-developer-account-mistakenly-terminated/">Student’s Developer Account Mistakenly Terminated</a></li>
<li><a href="https://mjtsai.com/blog/2020/10/02/another-developer-account-nearly-terminated/">Another Developer Account Nearly Terminated</a></li>
<li><a href="https://mjtsai.com/blog/2020/09/09/epic-barred-from-sign-in-with-apple/">Epic Barred From “Sign in With Apple”</a></li>
<li><a href="https://mjtsai.com/blog/2020/08/25/developer-accounts-nearly-terminated/">Developer Accounts Nearly Terminated</a></li>
<li><a href="https://mjtsai.com/blog/2020/08/17/apple-to-cut-epic-off-from-ios-and-mac-developer-tools/">Apple to Cut Epic Off From iOS and Mac Developer Tools</a></li>
<li><a href="https://mjtsai.com/blog/2019/11/20/guilherme-rambo-locked-out-of-apple-developer-account/">Guilherme Rambo Locked Out of Apple Developer Account</a></li>
<li><a href="https://mjtsai.com/blog/2016/10/05/apple-removed-dash-from-the-mac-app-store/">Apple Removed Dash From the Mac App Store</a></li>
</ul>
<p id="locked-out-of-apple-developer-accounts-update-2025-04-10">Update (<a href="#locked-out-of-apple-developer-accounts-update-2025-04-10">2025-04-10</a>): <a href="https://mastodon.social/@davedelong/114314583142959467">Dave DeLong</a>:</p>
<blockquote cite="https://mastodon.social/@davedelong/114314583142959467"><p>I’m happy to report that <em>everyone I’ve heard about</em> has managed to regain access to their accounts. Kudos to the folks in WWDR who helped them through the hoops to make that happen. 👏</p><p>And shame on whatever caused this to happen on the first place.</p></blockquote>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/08/locked-out-of-apple-developer-accounts/feed/</wfw:commentRss>
<slash:comments>2</slash:comments>
</item>
<item>
<title>Abysmal Services</title>
<link>https://mjtsai.com/blog/2025/04/08/abysmal-services/</link>
<comments>https://mjtsai.com/blog/2025/04/08/abysmal-services/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Tue, 08 Apr 2025 18:26:21 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[App Store]]></category>
<category><![CDATA[Apple Music]]></category>
<category><![CDATA[Apple Services]]></category>
<category><![CDATA[E-mail]]></category>
<category><![CDATA[iCloud]]></category>
<category><![CDATA[iCloud Drive]]></category>
<category><![CDATA[iCloud Keychain]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Reminders]]></category>
<category><![CDATA[Safari]]></category>
<category><![CDATA[Siri]]></category>
<category><![CDATA[Syncing]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47348</guid>
<description><![CDATA[Cory Dransfeldt (via Paweł Grzybek, Hacker News): They range from mediocre to outright unusable and none of them are reliable. I’ve written about Apple Music. That one launched and cost me a phone battery. Duplicate tracks, halting playback and heat.[…]I used iCloud Mail for a bit, configured rules, deleted the rules and — well — […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.coryd.dev/posts/2025/all-of-apples-services-are-abysmal/">Cory Dransfeldt</a> (via <a href="https://mastodon.social/@pawelgrzybek/114301131452331593">Paweł Grzybek</a>, <a href="https://news.ycombinator.com/item?id=43605020">Hacker News</a>):</p>
<blockquote cite="https://www.coryd.dev/posts/2025/all-of-apples-services-are-abysmal/"><p>They range from mediocre to outright unusable and <em>none of them are reliable</em>. <a href="https://www.coryd.dev/posts/2022/apple-music-a-tale-of-woe/">I’ve written about Apple Music.</a> That one launched and cost me a phone battery. Duplicate tracks, halting playback and heat.</p><p>[…]</p><p>I used iCloud Mail for a bit, configured rules, deleted the rules and — well — the rules kept on executing. Nothing in the UI, no user control and filter filter filter. I contacted support and they asked me to restart macOS’ Mail.app before asking me for a screenshot of the phantom rule firing.</p><p>[…]</p><p>Can’t sync bookmarks, can sync passwords. The last time I tried this and changed an email address on an entry, I got an extra entry with the new email.</p><p>[…]</p><p>[iCloud Drive] works until it doesn’t and when it doesn’t it locks your entire machine up. Slowly. How do you write the file system, the file system browser and the sync service and have the sync service freeze the whole damn thing? Not slow down, make it completely unusable.</p></blockquote>
<p>He’s had a good experience with iMessage. I still find that it sometimes doesn’t deliver messages. Syncing and search mostly don’t work.</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/28/apple-needs-a-snow-sequoia/">Apple Needs a Snow Sequoia</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/13/rotten/">Rotten</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/12/apple-delays-more-personalized-siri-apple-intelligence-features/">Apple Delays “More Personalized Siri” Apple Intelligence Features</a></li>
<li><a href="https://mjtsai.com/blog/2025/02/03/2024-six-colors-apple-report-card/">2024 Six Colors Apple Report Card</a></li>
<li><a href="https://mjtsai.com/blog/2024/07/22/taboola-apple-news/">Taboola + Apple News</a></li>
<li><a href="https://mjtsai.com/blog/2024/02/15/apple-news-you-cant-use/">Apple News You Can’t Use</a></li>
<li><a href="https://mjtsai.com/blog/2023/12/07/tv-app-in-tvos-17-2/">TV.app in tvOS 17.2</a></li>
<li><a href="https://mjtsai.com/blog/2023/10/26/apple-services-price-hikes/">Apple Services Price Hikes</a></li>
<li><a href="https://mjtsai.com/blog/2023/04/25/ads-in-the-windows-11-start-menu-and-in-ios/">Ads in the Windows 11 Start Menu and in iOS</a></li>
<li><a href="https://mjtsai.com/blog/2023/03/10/music-to-no-ones-ears/">Music to No One’s Ears</a></li>
<li><a href="https://mjtsai.com/blog/2023/03/06/ios-announcements-and-offers/">iOS Announcements and Offers</a></li>
<li><a href="https://mjtsai.com/blog/2022/09/14/gass-on-apple-services/">Gassée on Apple Services</a></li>
<li><a href="https://mjtsai.com/blog/2022/05/12/the-apple-services-experience-is-not-good-enough/">The Apple Services Experience Is Not Good Enough</a></li>
<li><a href="https://mjtsai.com/blog/2019/07/23/trusting-icloud-drive/">Trusting iCloud Drive</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/08/abysmal-services/feed/</wfw:commentRss>
<slash:comments>18</slash:comments>
</item>
<item>
<title>iOS 18.4: Ambient Music</title>
<link>https://mjtsai.com/blog/2025/04/07/ios-18-4-ambient-music/</link>
<comments>https://mjtsai.com/blog/2025/04/07/ios-18-4-ambient-music/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Mon, 07 Apr 2025 19:52:15 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Audio]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Music]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47334</guid>
<description><![CDATA[Tim Hardwick: In Apple’s iOS 18.4 software update, there’s a new Ambient Music feature available in the Control Center options on iPhone. It’s free to use, and does not require an Apple Music subscription. It’s also more customizable than most users probably realize. This is accessed via Control Center and seems to be iOS-only, unlike […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.macrumors.com/how-to/ios-18-4-access-hidden-ambient-music-playlists/">Tim Hardwick</a>:</p>
<blockquote cite="https://www.macrumors.com/how-to/ios-18-4-access-hidden-ambient-music-playlists/"><p>In Apple’s iOS 18.4 software update, there’s a new Ambient Music feature available in the Control Center options on iPhone. It’s free to use, and does not require an Apple Music subscription. It’s also more customizable than most users probably realize.</p></blockquote>
<p>This is accessed via Control Center and seems to be iOS-only, unlike the similar Background Sounds feature that still exists for <a href="https://support.apple.com/guide/iphone/play-background-sounds-iphb2cfa052c/ios">iOS</a> and <a href="https://support.apple.com/guide/mac-help/play-background-sounds-mchl3061cdc6/mac">Mac</a> under Accessibility.</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/31/ios-18-4-and-ipados-18-4/">iOS 18.4 and iPadOS 18.4</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/31/macos-15-4/">macOS 15.4</a></li>
<li><a href="https://mjtsai.com/blog/2021/10/07/ios-15-tips-and-tricks/">iOS 15 Tips and Tricks</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/07/ios-18-4-ambient-music/feed/</wfw:commentRss>
<slash:comments>1</slash:comments>
</item>
<item>
<title>Numbers 14.4</title>
<link>https://mjtsai.com/blog/2025/04/07/numbers-14-4/</link>
<comments>https://mjtsai.com/blog/2025/04/07/numbers-14-4/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Mon, 07 Apr 2025 19:51:44 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Apple Intelligence]]></category>
<category><![CDATA[Documentation]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[iOS App]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[Mac App]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Numbers.app]]></category>
<category><![CDATA[Programming]]></category>
<category><![CDATA[Spreadsheet]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47332</guid>
<description><![CDATA[Joe Rossignol: Apple today updated its iWork apps Keynote, Numbers, and Pages with new features that require iOS 18.4, iPadOS 18.4, or macOS 15.4.For example, in the latest version of each app, you can now make text edits using Writing Tools directly in a presentation, spreadsheet, or document.[…]Each app also received a few other enhancements […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.macrumors.com/2025/04/03/iwork-ios-18-4-and-macos-15-4-features/">Joe Rossignol</a>:</p>
<blockquote cite="https://www.macrumors.com/2025/04/03/iwork-ios-18-4-and-macos-15-4-features/"><p>Apple today updated its iWork apps <a href="https://apps.apple.com/us/app/-/id361285480">Keynote</a>, <a href="https://apps.apple.com/us/app/-/id361304891">Numbers</a>, and <a href="https://apps.apple.com/us/app/-/id361309726">Pages</a> with new features that require iOS 18.4, iPadOS 18.4, or macOS 15.4.</p><p>For example, in the latest version of each app, you can now make text edits using Writing Tools directly in a presentation, spreadsheet, or document.</p><p>[…]</p><p>Each app also received a few other enhancements that are not tied to the latest software updates.</p></blockquote>
<p><a href="https://www.reddit.com/r/AppleNumbers/comments/1jrkpfo/whats_new_in_numbers_on_mac/">Reddit</a>:</p>
<blockquote cite="https://www.reddit.com/r/AppleNumbers/comments/1jrkpfo/whats_new_in_numbers_on_mac/"><p>Perform complex calculations with over 30 new functions. For example, you can use a LAMBDA function to create and name custom functions, the SORT function to organize the contents of a range or array, or the LET function to perform calculations using defined variables. See the <a href="https://support.apple.com/guide/functions/welcome/web">Formula and Functions user guide</a>. </p></blockquote>
<p>There’s a whole family of higher order functions: <a href="https://support.apple.com/guide/functions/lambda-ffa81643bf11/14.4/web/1.0">LAMBDA</a>, <a href="https://support.apple.com/guide/functions/lambdaapply-ffa22df3f7fa/14.4/web/1.0">LAMBDA.APPLY</a>, <a href="https://support.apple.com/guide/functions/bycol-ffac4a58c129/14.4/web/1.0">BYCOL</a>, <a href="https://support.apple.com/guide/functions/byrow-ffab278e2547/14.4/web/1.0">BYROW</a>, <a href="https://support.apple.com/guide/functions/map-ffa7bf25643c/web">MAP</a>, <a href="https://support.apple.com/guide/functions/reduce-ffa73f21c26a/14.4/web/1.0">REDUCE</a>, and <a href="https://support.apple.com/guide/functions/scan-ffa751b39cef/14.4/web/1.0">SCAN</a> (via <a href="https://news.ycombinator.com/item?id=43581137">Hacker News</a>).</p>
<p>This is cool, but I’ve never really gotten into using Numbers, despite repeatedly trying. There are definitely some things that it does better than Excel, but others, like tables not expanding to fill the window, still feel weird to me after all these years. Anything with interactive collaboration I do with Google Sheets. Anything with manual collaboration I do with Excel. Any time I need to keep important records for a long time, I feel more comfortable with the Excel file format. Same with <a href="https://mjtsai.com/blog/2020/04/02/opening-large-csv-files-in-numbers-10-0/">large data sets</a>. That doesn’t leave much for Numbers, and I haven’t found anything that hooked me.</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/31/macos-15-4/">macOS 15.4</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/31/ios-18-4-and-ipados-18-4/">iOS 18.4 and iPadOS 18.4</a></li>
</ul>
<p id="numbers-14-4-update-2025-04-08">Update (2025-04-08): <a href="https://mastodon.social/@atomicbird/114299363149105287">Tom Harrington</a>:</p>
<blockquote cite="https://mastodon.social/@atomicbird/114299363149105287"><p>Apple Numbers is making a strong push for the most useless, incomprehensible error message of the year. It might as well say “Stuff might or might not be different, good luck finding the differences (if any)”</p></blockquote>
<p><a href="https://sixcolors.com/post/2025/04/upgrading-my-accounting-spreadsheet-with-numberss-latest-update/">Dan Moren</a>:</p>
<blockquote cite="https://sixcolors.com/post/2025/04/upgrading-my-accounting-spreadsheet-with-numberss-latest-update/"><p>I get that maybe most people don’t get as excited about an update to Apple’s spreadsheets app, but I am, frankly, a Numbers enthusiast.</p><p>[…]</p><p>Fortunately, the addition of the FILTER function solves this problem by letting me simply ignore months that haven’t happened yet, and instead just run my calculations on the subset of applicable values. I was not only able to create a median measurement I never have to update, but I could also remove that hidden month field and replace the AVERAGEIF function with a simpler filtered version too. All of that saves time and means less manual tweaking of the sheet.</p><p>[…]</p><p>It’s true that Numbers still doesn’t let you include a link to a file, even though it has long had a HYPERLINK function that can make text into a clickable link.[…] However, it occurred to me that I <em>could</em> use a URL scheme to run a shortcut. And surely I could create a shortcut that could simply open a specific file?</p><p>While I didn’t, strictly speaking, <em>need</em> any of Numbers’s new powers to do this, the LET function ended up being a timesaver, since it let me avoid having to do lengthy operations either in a separate, hidden field, or repeated within in a single cell.</p></blockquote>
<p id="numbers-14-4-update-2025-04-09">Update (<a href="#numbers-14-4-update-2025-04-09">2025-04-09</a>): <a href="https://sixcolors.com/post/2025/04/a-full-list-of-new-functions-in-numbers-14-4/">Dan Moren</a>:</p>
<blockquote cite="https://sixcolors.com/post/2025/04/a-full-list-of-new-functions-in-numbers-14-4/">
<p>Fortunately reader Neil came to the rescue: using the <a href="https://archive.org">Internet Archive’s Wayback machine</a>, he retrieved an older version of Apple’s <a href="https://support.apple.com/guide/functions/list-of-functions-by-category-ffa148e9cd0/14.4/web/1.0">list of functions</a> and compared it to the new version, thus isolating all the new functions.</p>
</blockquote>
<p>I don’t know why Apple couldn’t just document which functions are new, but great work from Neil.</p>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/07/numbers-14-4/feed/</wfw:commentRss>
<slash:comments>11</slash:comments>
</item>
<item>
<title>The Signal Chat Leak and the NSA</title>
<link>https://mjtsai.com/blog/2025/04/07/the-signal-chat-leak-and-the-nsa/</link>
<comments>https://mjtsai.com/blog/2025/04/07/the-signal-chat-leak-and-the-nsa/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Mon, 07 Apr 2025 19:49:42 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Artificial Intelligence]]></category>
<category><![CDATA[Contacts]]></category>
<category><![CDATA[Design]]></category>
<category><![CDATA[iMessage]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[iOS App]]></category>
<category><![CDATA[National Security Agency (NSA)]]></category>
<category><![CDATA[Privacy]]></category>
<category><![CDATA[Signal]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47329</guid>
<description><![CDATA[Bruce Schneier (March 31, Hacker News): “I didn’t see this loser in the group,” Waltz told Fox News about Atlantic editor in chief Jeffrey Goldberg, whom Waltz invited to the chat. “Whether he did it deliberately or it happened in some other technical mean, is something we’re trying to figure out.”Waltz’s implication that Goldberg may […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.schneier.com/blog/archives/2025/03/the-signal-chat-leak-and-the-nsa.html">Bruce Schneier</a> (March 31, <a href="https://news.ycombinator.com/item?id=43560336">Hacker News</a>):</p>
<blockquote cite="https://www.schneier.com/blog/archives/2025/03/the-signal-chat-leak-and-the-nsa.html"><p>“I didn’t see this loser in the group,” Waltz <a href="https://abcnews.go.com/Politics/trump-admins-shifting-explanations-journalist-added-signal-chat/story?id=120179649">told</a> Fox News about <em>Atlantic</em> editor in chief Jeffrey Goldberg, whom Waltz <a href="https://www.theatlantic.com/politics/archive/2025/03/trump-administration-accidentally-texted-me-its-war-plans/682151/">invited</a> to the chat. “Whether he did it deliberately or it happened in some other technical mean, is something we’re trying to figure out.”</p><p>Waltz’s implication that Goldberg may have hacked his way in was followed by a <a href="https://www.cbsnews.com/news/nsa-signal-app-vulnerabilities-before-houthi-strike-chat/">report</a> from CBS News that the US National Security Agency (NSA) had sent out a bulletin to its employees last month warning them about a security “vulnerability” identified in Signal.</p><p>The truth, however, is much more interesting. If Signal has vulnerabilities, then China, Russia, and other US adversaries suddenly have a new incentive to discover them. At the same time, the NSA urgently needs to find and fix any vulnerabilities quickly as it can—and similarly, ensure that commercial smartphones are free of backdoors—access points that allow people other than a smartphone’s user to bypass the usual security authentication methods to access the device’s contents.</p></blockquote>
<p>There’s a debate over whether the information shared constituted “war plans” and whether it was technically classified. But putting that aside, there are some interesting privacy and design questions here. Did they use Signal simply because it’s more <a href="https://news.ycombinator.com/item?id=43614059">convenient</a> than the official government system? Because they didn’t trust the government system? Because they wanted to evade record-keeping requirements?</p>
<p>Did Waltz add Goldberg by mistake, e.g. picking the wrong name in auto-complete, in which case maybe there was someone intended to be in the chat who never actually got added? Did he add Goldberg on purpose, to sabotage, without knowing it would be traced back to him? If, as he insists, he never met or communicated with Goldberg, how did the number get into his phone? Can they really figure out whether Waltz did it and where the phone number came from?</p>
<p>It has always seemed to me that the privacy danger with systems like Signal and iMessage is not that someone would be able to decrypt the messages but that there would be a vulnerability that allows covert participants to be injected into the conversation, i.e. become part of the E2EE group. But if there is such a vulnerability in Signal, it’s hard to see why an adversary country or rogue elements within the NSA would want to waste it in this manner. It’s got to just be a mistake.</p>
<p>I was thinking about how this might have worked differently with iMessage. Would iOS ever look up Goldberg’s name or address or would he only show up as a phone number for participants who didn’t have him in their contacts?</p>
<p>The main issue with iMessage is that I don’t trust the <a href="https://talk.tidbits.com/t/device-added-to-your-account-message/28560">device added to your account</a> notifications. I get these all the time, and they’re seemingly unrelated to when I’m actually logging into iMessage or updating a device that uses it. Even assuming that there’s no way to add a device to an iMessage account without triggering this alert, device names can be spoofed and I don’t see how I would be able to detect if someone removed a device that I don’t frequently use and added a fake device with the same name. Without checking the serial number (which itself could perhaps be spoofed) or checking that the original device was still logged in, how do you know that the listed devices are what they claim to be? And how many people even check the device list every time this notification pops up?</p>
<p><a href="https://www.theguardian.com/us-news/2025/apr/06/signal-group-chat-leak-how-it-happened">Hugo Lowell</a> (April 6, via <a href="https://news.ycombinator.com/item?id=43601213">Hacker News</a>):</p>
<blockquote cite="https://www.theguardian.com/us-news/2025/apr/06/signal-group-chat-leak-how-it-happened">
<p>According to three people briefed on the internal investigation, Goldberg had emailed the campaign about a story that criticized Trump for his attitude towards wounded service members. To push back against the story, the campaign enlisted the help of Waltz, their national security surrogate.</p>
<p>Goldberg’s email was forwarded to then Trump spokesperson Brian Hughes, who then copied and pasted the content of the email – including the signature block with Goldberg’s phone number – into a text message that he sent to Waltz, so that he could be briefed on the forthcoming story.</p>
<p>Waltz did not ultimately call Goldberg, the people said, but in an extraordinary twist, inadvertently ended up saving Goldberg’s number in his iPhone – under the contact card for Hughes, now the spokesperson for the national security council.</p>
<p>[…]</p>
<p>According to the White House, the number was erroneously saved during a “contact suggestion update” by Waltz’s iPhone, which one person described as the function where an iPhone algorithm adds a previously unknown number to an existing contact that it detects may be related.</p>
</blockquote>
<p>This seems plausible, though it’s unclear to me how they were able to track down this history with any certainty. I don’t think we can discount the possibility that Waltz really <a href="https://chriscillizza.substack.com/p/heres-what-mike-waltz-wont-tell-you">did</a> <a href="https://nypost.com/2025/03/30/us-news/jeffrey-goldberg-says-mike-waltz-lied-about-talking-to-him-numbers-dont-just-get-sucked-into-other-phones/">know</a> Goldberg. But the data detectors explanation does have the advantage of explaining both how Golberg’s number got into his phone and how he inadvertently added Goldberg to the conversation without realizing his mistake. His phone, I guess, would have shown Hughes’ name in the conversation.</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2024/12/05/us-officials-recommend-encrypted-apps/">US Officials Recommend Encrypted Messaging Apps</a></li>
<li><a href="https://mjtsai.com/blog/2024/05/14/criticism-of-signal/">Criticism of Signal</a></li>
<li><a href="https://mjtsai.com/blog/2023/12/22/beepers-final-fixes-and-government-investigations/">Beeper’s Final Fixes and Government Investigations</a></li>
<li><a href="https://mjtsai.com/blog/2023/03/24/google-accused-of-violating-retention-obligations/">Google Accused of Violating Retention Obligations</a></li>
<li><a href="https://mjtsai.com/blog/2008/07/29/turning-off-apple-data-detectors-in-mail/">Turning Off Apple Data Detectors in Mail</a></li>
</ul>
<p id="the-signal-chat-leak-and-the-nsa-update-2025-04-08">Update (<a href="#the-signal-chat-leak-and-the-nsa-update-2025-04-08">2025-04-08</a>): <a href="https://mastodon.online/@octothorpe/114298503227870142">CM Harrington</a>:</p>
<blockquote cite="https://mastodon.online/@octothorpe/114298503227870142"><p>I still find the data detectors idea implausible. You can try and recreate that scenario, and it won’t work (admittedly, in my limited single test). </p><p>Also, how does signal do the rectifying between phone number and <em>internal</em> contacts (ie, in the app, not the initial contacts.app dump). If it doesn’t do any server lookup, it should still have Hughes’ name in the chat list. If it does server verification matching, you would see that immediately. </p><p>It doesn’t add up.</p></blockquote>
<p><a href="https://pxlnv.com/linklog/signalgate-iphone-contact-update/">Nick Heer</a>:</p>
<blockquote cite="https://pxlnv.com/linklog/signalgate-iphone-contact-update/">
<p>Presumably, this is related to <a href="https://www.reddit.com/r/Scams/comments/1bk8hh5/this_person_added_themselves_to_my_iphone_contacts/">Siri suggestions</a>. This version of events sounds plausible to me, if a little too perfect, but stranger things have happened.</p>
<p>The distrustful and cynical voice deep inside me wants to think Waltz has been a source or contact for Goldberg, and that this is a neat way to keep that secret. There is no evidence for this.</p>
</blockquote>
<p><a href="https://sixcolors.com/link/2025/04/white-house-ios-helpfully-added-atlantic-editor-to-signal-chat/">Jason Snell</a>:</p>
<blockquote cite="https://sixcolors.com/link/2025/04/white-house-ios-helpfully-added-atlantic-editor-to-signal-chat/">
<p>I’ve seen a lot of people doubt this report and suggest that Waltz was secretly leaking stuff to Goldberg and that’s why he was in his iPhone to be added to the Signal chat, but the explanation that it was an unthinking “tap yes to add” tap that led to a ticking time bomb in Waltz’s contacts file rings true to me.</p>
</blockquote>
<p><a href="https://x.com/mjtsai/status/1909334666458677319">Adam Maxwell</a>:</p>
<blockquote cite="https://x.com/mjtsai/status/1909334666458677319"><p>As a Mac user since the ’90s, it pretty sad that the explanation for this as a data detector failure is immediately believable to me, whereas it would have been part of a Switcher commercial in the early 00s.</p></blockquote>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/07/the-signal-chat-leak-and-the-nsa/feed/</wfw:commentRss>
<slash:comments>7</slash:comments>
</item>
<item>
<title>Delta at 10</title>
<link>https://mjtsai.com/blog/2025/04/04/delta-at-10/</link>
<comments>https://mjtsai.com/blog/2025/04/04/delta-at-10/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Fri, 04 Apr 2025 21:13:23 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Anniversary]]></category>
<category><![CDATA[Delta Emulator]]></category>
<category><![CDATA[Game]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[iOS App]]></category>
<category><![CDATA[Nintendo 3DS]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47318</guid>
<description><![CDATA[Riley Testut: Some personal news: this month marks 10 years since I first started developing Delta! So much has changed since then — when Delta launched it didn’t even support DS! — but I couldn’t be more thankful to still be working on it after all this time 💜 The first commit includes the obligatory […]]]></description>
<content:encoded><![CDATA[<p><a href="https://mastodon.social/@rileytestut/114258584125131569">Riley Testut</a>:</p>
<blockquote cite="https://mastodon.social/@rileytestut/114258584125131569">
<p>Some personal news: this month marks 10 years since I first started developing Delta!</p>
<p>So much has changed since then — when Delta launched it didn’t even support DS! — but I couldn’t be more thankful to still be working on it after all this time 💜</p></blockquote>
<p>The <a href="https://github.com/rileytestut/Delta/commit/aeed83fca59f7422cf2772d1eef72b4c944054cc">first commit</a> includes the obligatory <tt>.gitignore</tt> for <tt>.DS_Store</tt>.</p>
<p><a href="https://www.macrumors.com/2025/04/01/delta-emulator-online-multiplayer-nintendo-ds/">Tim Hardwick</a>:</p>
<blockquote cite="https://www.macrumors.com/2025/04/01/delta-emulator-online-multiplayer-nintendo-ds/">
<p>The popular iOS game emulator <a href="https://apps.apple.com/app/delta-game-emulator/id1048524688">Delta</a> has received a major update that adds online multiplayer functionality for Nintendo DS games. Version 1.7 of the app now allows players to compete against each other in classic DS titles like <em>Mario Kart DS</em>, <em>Bomberman</em>, and <em>Animal Crossing</em>.</p>
<p>Nintendo officially shut down the original DS online services back in 2014, so Delta relies on alternative Nintendo Wi-Fi Connection servers maintained by the community.</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2024/05/30/ios-retro-console-game-emulators/">iOS Retro Console Game Emulators</a></li>
<li><a href="https://mjtsai.com/blog/2024/05/16/deltas-10-year-journey-to-the-top-of-the-app-store/">Delta’s 10-Year Journey to the Top of the App Store</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/04/delta-at-10/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>Zelle Is Shutting Down Payments via Its App</title>
<link>https://mjtsai.com/blog/2025/04/04/zelle-is-shutting-down-payments-via-its-app/</link>
<comments>https://mjtsai.com/blog/2025/04/04/zelle-is-shutting-down-payments-via-its-app/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Fri, 04 Apr 2025 21:13:11 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Financial]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[iOS App]]></category>
<category><![CDATA[Payments]]></category>
<category><![CDATA[Sunset]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47316</guid>
<description><![CDATA[Zelle (via Slashdot): When Zelle first launched, we also created a standalone Zelle-branded app for consumers whose banks or credit unions had not yet joined the network. With the strong growth of adoption by banks and credit unions, we now see just ~2% of transactions on the standalone app. As a result of our growth, […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.zellepay.com/press-releases/were-evolving-how-consumers-send-money-zelle">Zelle</a> (via <a href="https://news.slashdot.org/story/25/04/02/0654238/zelle-is-shutting-down-its-app">Slashdot</a>):</p>
<blockquote cite="https://www.zellepay.com/press-releases/were-evolving-how-consumers-send-money-zelle"><p>When Zelle first launched, we also created a standalone Zelle-branded app for consumers whose banks or credit unions had not yet joined the network. With the strong growth of adoption by banks and credit unions, we now see just ~2% of transactions on the standalone app. </p><p>As a result of our growth, and because most people are now using Zelle in their financial institution’s mobile app or website, we are making a change to the Zelle standalone app.</p></blockquote>
<p>This all makes sense, I suppose. I never even knew that Zelle had an app; I just use it through my bank’s app. But I find it amusing that they won’t directly say they’re shutting down the app.</p>
<ul>
<li>“We’re evolving how consumers send money with Zelle®”</li>
<li>“we are making a change to our Zelle standalone app”</li>
<li>“we will be phasing out the ability to enroll and transact within the standalone app”</li>
</ul>
<p>So then what can you still do with it? It’s being repurposed to display “consumer education about scams and fraud and provide a list of the more than 2,200 banks and credit unions that offer Zelle.”</p>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/04/zelle-is-shutting-down-payments-via-its-app/feed/</wfw:commentRss>
<slash:comments>2</slash:comments>
</item>
<item>
<title>Windows 11 Install to Require Internet and Microsoft Account</title>
<link>https://mjtsai.com/blog/2025/04/04/windows-11-install-to-require-internet-and-microsoft-account/</link>
<comments>https://mjtsai.com/blog/2025/04/04/windows-11-install-to-require-internet-and-microsoft-account/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Fri, 04 Apr 2025 21:12:11 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Windows]]></category>
<category><![CDATA[Windows 11]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47314</guid>
<description><![CDATA[Microsoft (via Will Dormann, Hacker News): We’re removing the bypassnro.cmd script from the build to enhance security and user experience of Windows 11. This change ensures that all users exit setup with internet connectivity and a Microsoft Account. Lawrence Abrams: A previously unknown trick lets you easily bypass using a Microsoft Account in Windows 11, […]]]></description>
<content:encoded><![CDATA[<p><a href="https://blogs.windows.com/windows-insider/2025/03/28/announcing-windows-11-insider-preview-build-26200-5516-dev-channel/">Microsoft</a> (via <a href="https://infosec.exchange/@wdormann/114242475168860209">Will Dormann</a>, <a href="https://news.ycombinator.com/item?id=43512660">Hacker News</a>):</p>
<blockquote cite="https://blogs.windows.com/windows-insider/2025/03/28/announcing-windows-11-insider-preview-build-26200-5516-dev-channel/"><p>We’re removing the bypassnro.cmd script from the build to enhance security and user experience of Windows 11. This change ensures that all users exit setup with internet connectivity and a Microsoft Account.</p></blockquote>
<p><a href="https://www.bleepingcomputer.com/news/microsoft/new-windows-11-trick-lets-you-bypass-microsoft-account-requirement/">Lawrence Abrams</a>:</p>
<blockquote cite="https://www.bleepingcomputer.com/news/microsoft/new-windows-11-trick-lets-you-bypass-microsoft-account-requirement/"><p>A previously unknown trick lets you easily bypass using a Microsoft Account in Windows 11, just as Microsoft tries to make it harder to use local accounts.</p><p>[…]</p><p>When installing Windows 11 and you reach the screen asking, “Let’s connect you to a network,” you can use the <strong>Shift+F10</strong> keyboard combination to open a Windows command prompt.</p><p>At this prompt, type <code>start ms-cxh:localonly</code> and press <strong>Enter </strong>on your keyboard to open a “Microsoft account” window where you can create a new local user for the Windows 11 install.</p></blockquote>
<p>During my recent <a href="https://mjtsai.com/blog/2025/03/25/error-702-installing-macos-on-an-external-drive/">adventure</a> reinstalling old versions of macOS, I found that it’s now commonly recommended that Mac users have an Internet connection when installing, even if they’ve made a full installer disk. Otherwise it may not succeed. I also found that, even when using a freshly downloaded <tt>.pkg</tt> of the latest version (of that cycle), the installer would often download what seemed like gigabytes of files. I have little confidence that Mac users still have control over reinstalling archived versions of the OS onto their own hardware without Apple’s verification/meddling. This seems to <a href="https://www.reddit.com/r/macsysadmin/comments/1gvq32j/ipsw_restore_without_internet_and_second_mac/">also</a> be the case when restoring an IPSW file.</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/04/04/how-external-bootable-disks-work-with-apple-silicon-macs/">How External Bootable Disks Work With Apple Silicon Macs</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/25/error-702-installing-macos-on-an-external-drive/">Error 702 Installing macOS on an External Drive</a></li>
<li><a href="https://mjtsai.com/blog/2024/06/06/windows-11-requires-microsoft-account/">Windows 11 Requires Microsoft Account</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/04/windows-11-install-to-require-internet-and-microsoft-account/feed/</wfw:commentRss>
<slash:comments>9</slash:comments>
</item>
<item>
<title>How External Bootable Disks Work With Apple Silicon Macs</title>
<link>https://mjtsai.com/blog/2025/04/04/how-external-bootable-disks-work-with-apple-silicon-macs/</link>
<comments>https://mjtsai.com/blog/2025/04/04/how-external-bootable-disks-work-with-apple-silicon-macs/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Fri, 04 Apr 2025 21:11:29 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Apple File System (APFS)]]></category>
<category><![CDATA[Backup]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 11.0 Big Sur]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Solid-State Drive (SSD)]]></category>
<category><![CDATA[Storage]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47312</guid>
<description><![CDATA[Howard Oakley: Unlike Intel Macs (including those with T2 chips), all Apple silicon Macs always start their boot process from their internal SSD, even when they are set to start up from a bootable external disk. This ensures the security and integrity of that process and prevents an attacker from starting that Mac up without […]]]></description>
<content:encoded><![CDATA[<p><a href="https://eclecticlight.co/2025/02/21/how-external-bootable-disks-work-with-apple-silicon-macs/">Howard Oakley</a>:</p>
<blockquote cite="https://eclecticlight.co/2025/02/21/how-external-bootable-disks-work-with-apple-silicon-macs/">
<p>Unlike Intel Macs (including those with T2 chips), all Apple silicon Macs always start their boot process from their internal SSD, even when they are set to start up from a bootable external disk. This ensures the security and integrity of that process and prevents an attacker from starting that Mac up without credentials.</p>
</blockquote>
<p>However, this is a problem if the internal SSD isn’t working properly, as happened to me.</p>
<blockquote cite="https://eclecticlight.co/2025/02/21/how-external-bootable-disks-work-with-apple-silicon-macs/">
<p>In addition to normal requirements for a macOS installation on an external disk to be able to boot a Mac, <em>ownership</em> of the boot volume group on that disk is required. This is normally performed when installing macOS on that disk, as <a href="https://eclecticlight.co/2025/01/15/create-an-external-bootable-disk-for-apple-silicon-and-intel-macs/">explained here</a>, and results in the ownership of that boot volume group by an authorised user of that Mac. This is incorporated into a <em>LocalPolicy</em> that is saved to the internal SSD of that Mac.</p>
<p>[…]</p>
<p>To accommodate the more advanced Secure Boot of Apple silicon Macs, their internal SSDs are divided into three partitions, with an extra six volumes beyond the boot volume group.</p>
<p>[…]</p>
<p>Because restoring in DFU mode erases the whole of the internal SSD, it also blows away all saved LocalPolicy for that Mac. Following the restore process, any bootable external disk used with that Mac will need to have its ownership re-established so that a new LocalPolicy can be created for it.</p>
</blockquote>
<p><a href="https://eclecticlight.co/2025/03/31/external-boot-disks-structure-and-problems/">Howard Oakley</a>:</p>
<blockquote cite="https://eclecticlight.co/2025/03/31/external-boot-disks-structure-and-problems/">
<p>It’s a common misunderstanding that trying to change Boot Security in Startup Security Utility can help solve Apple silicon boot problems, but if anything it only complicates them. Almost the only good reason for reducing boot security of an Apple silicon bootable system is when third-party kernel extensions are required. Otherwise don’t tamper with Startup Security Utility, as it will only confuse, as we’ll see later.</p>
<p>[…]</p>
<p>One important functional difference, which remains relevant to Big Sur boot disks, is that Apple silicon Macs don’t use the paired Recovery volume as their primary Recovery system: booting an Apple silicon Mac running Big Sur into Recovery should instead use the Recovery system installed in their internal SSD, in the Apple_APFS_Recovery partition. In subsequent versions of macOS, that’s used instead for secondary or Fallback Recovery. Thus Big Sur can be a problem when it comes to Recovery, and for this reason is best avoided on Apple silicon Macs. If it’s essential to install a copy of Big Sur, then be prepared for problems with Recovery mode.</p>
<p>[…]</p>
<p>Although APFS should be backward compatible, making it relatively safe to make changes to an older version of APFS from a newer system, forward compatibility is more limited. Using older versions of Disk Utility or tools like <code>fsck</code> on newer versions of APFS risks errors, failure and at worst damage. The Appendix at the end of this article summarises version numbering in APFS and major changes to beware of.</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/04/04/windows-11-install-to-require-internet-and-microsoft-account/">Windows 11 Install to Require Internet and Microsoft Account</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/25/error-702-installing-macos-on-an-external-drive/">Error 702 Installing macOS on an External Drive</a></li>
<li><a href="https://mjtsai.com/blog/2023/11/27/a-short-history-of-recovery-in-macos/">A Short History of Recovery in macOS</a></li>
<li><a href="https://mjtsai.com/blog/2021/12/16/how-recovery-works-on-m1-series-macs/">How Recovery Works on M1 Series Macs</a></li>
<li><a href="https://mjtsai.com/blog/2021/07/19/owner-accounts-on-m1-macs/">Owner Accounts on M1 Macs</a></li>
<li><a href="https://mjtsai.com/blog/2020/12/22/booting-an-m1-mac-from-an-external-disk/">Booting an M1 Mac From an External Disk</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/04/how-external-bootable-disks-work-with-apple-silicon-macs/feed/</wfw:commentRss>
<slash:comments>4</slash:comments>
</item>
<item>
<title>Altair Basic Source Code</title>
<link>https://mjtsai.com/blog/2025/04/03/altair-basic-source-code/</link>
<comments>https://mjtsai.com/blog/2025/04/03/altair-basic-source-code/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Thu, 03 Apr 2025 19:06:43 +0000</pubDate>
<category><![CDATA[Programming]]></category>
<category><![CDATA[BASIC]]></category>
<category><![CDATA[Bill Gates]]></category>
<category><![CDATA[History]]></category>
<category><![CDATA[Microsoft]]></category>
<category><![CDATA[Open Source]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47308</guid>
<description><![CDATA[Bill Gates (via Slashdot): It feels like just yesterday that Paul and I were hunched over the PDP-10 in Harvard’s computer lab, writing the code that would become the first product of our new company. That code remains the coolest code I’ve ever written to this day—and you can see it for yourself at the […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.gatesnotes.com/meet-bill/source-code/reader/microsoft-original-source-code?WT.mc_id=20250331100000_Microsoft-50th_MED-MED">Bill Gates</a> (via <a href="https://slashdot.org/story/25/04/02/2145238/bill-gates-celebrates-microsofts-50th-by-releasing-altair-basic-source-code">Slashdot</a>):</p>
<blockquote cite="https://www.gatesnotes.com/meet-bill/source-code/reader/microsoft-original-source-code?WT.mc_id=20250331100000_Microsoft-50th_MED-MED">
<p>It feels like just yesterday that Paul and I were hunched over the PDP-10 in Harvard’s computer lab, writing the code that would become the first product of our new company.</p>
<p>That code remains the coolest code I’ve ever written to this day—and you can see it for yourself at the bottom of this page.</p>
<p>[…]</p>
<p>Paul and I set out to create a BASIC interpreter, which would translate code into instructions the computer understood line by line as the program runs.</p>
<p>[…]</p>
<p>Paul and I decided to divide and conquer. We didn’t have the Intel 8080 chip that the Altair computer ran on, so Paul got to work writing a program that would simulate one on Harvard’s PDP-10 mainframe. This allowed us to test our software without needing an actual Altair. Meanwhile, I focused on writing the main code for the program while another friend, Monte Davidoff, worked on a portion called the math package. We coded day and night for the two months to create the software we had said already existed.</p>
</blockquote>
<p><a href="https://www.theregister.com/2025/04/03/bill_gates_altair_basic/">Richard Speed</a>:</p>
<blockquote cite="https://www.theregister.com/2025/04/03/bill_gates_altair_basic/"><p>The source code is provided as a 157-page PDF [<a href="https://images.gatesnotes.com/12514eb8-7b51-008e-41a9-512542cf683b/34d561c8-cf5c-4e69-af47-3782ea11482e/Original-Microsoft-Source-Code.pdf">link</a>] of scanned fan-fold paper rather than as source in a <a href="https://www.theregister.com/2024/04/26/ms_dos_4_open_source/">convenient repository</a>. An annotated disassembly of Altair BASIC 3.2 can be found on <a href="https://github.com/option8/Altair-BASIC/tree/master">GitHub</a>.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2024/12/02/microsoft-at-50/">Microsoft at 50</a></li>
<li><a href="https://mjtsai.com/blog/2014/03/26/ms-dos-and-word-for-windows-source-code-published/">MS-DOS and Word for Windows Source Code Published</a></li>
</ul>
<p id="altair-basic-source-code-update-2025-04-07">Update (2025-04-07): See also: <a href="https://news.ycombinator.com/item?id=43575884">Hacker News</a>.</p>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/03/altair-basic-source-code/feed/</wfw:commentRss>
<slash:comments>1</slash:comments>
</item>
<item>
<title>France Fines Apple Over App Tracking Transparency</title>
<link>https://mjtsai.com/blog/2025/04/03/france-fines-apple-over-app-tracking-transparency/</link>
<comments>https://mjtsai.com/blog/2025/04/03/france-fines-apple-over-app-tracking-transparency/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Thu, 03 Apr 2025 19:06:37 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Antitrust]]></category>
<category><![CDATA[App Tracking Transparency]]></category>
<category><![CDATA[France]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[Legal]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47306</guid>
<description><![CDATA[Reuters (PDF, Slashdot): Apple was hit with a 150 million euro ($162.4 million) fine by French antitrust regulators on Monday for abusing its dominant position in mobile app advertising on its devices via a privacy control tool. […] “While we are disappointed with today’s decision, the French Competition Authority has not required any specific changes […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.fastcompany.com/91308494/apple-faces-162-million-fine-from-french-regulators-heres-why">Reuters</a> (<a href="https://www.autoritedelaconcurrence.fr/sites/default/files/2025-03/Diapo_ATT5_eng_0.pdf#page=9">PDF</a>, <a href="https://apple.slashdot.org/story/25/03/31/1531201/apple-fined-162-million-for-app-privacy-system-that-harms-developers">Slashdot</a>):</p>
<blockquote cite="https://www.fastcompany.com/91308494/apple-faces-162-million-fine-from-french-regulators-heres-why">
<p><a href="https://www.fastcompany.com/91110830/apple-datakalab-acquisition">Apple</a> was hit with a 150 million euro ($162.4 million) fine by French <a href="https://www.fastcompany.com/91296231/apple-successfully-blocks-match-data-india-antitrust-case">antitrust</a> regulators on Monday for abusing its dominant position in mobile app advertising on its devices via a privacy control tool.</p>
<p>[…]</p>
<p>“While we are disappointed with today’s decision, the French Competition Authority has not required any specific changes to ATT,” Apple said in a statement.</p>
<p>Coeuré told reporters the regulator had not spelled out how Apple should change its app, but that it was up to the company to make sure it now complied with the ruling.</p>
</blockquote>
<p><a href="https://9to5mac.com/2025/03/31/apple-bizarrely-fined-162m-for-app-tracking-transparency-after-advertisers-complained/">Ben Lovejoy</a>:</p>
<blockquote cite="https://9to5mac.com/2025/03/31/apple-bizarrely-fined-162m-for-app-tracking-transparency-after-advertisers-complained/"><p>Both advertisers and developers of free ad-funded apps <a href="https://9to5mac.com/2022/04/29/meta-blasts-app-tracking-transparency/">complained loudly</a> at the impact of ATT, as it was estimated that it would cost <a href="https://9to5mac.com/2021/11/01/apples-app-privacy-policy/">social media companies</a> alone <a href="https://9to5mac.com/2022/04/13/apples-app-tracking-transparency-crackdown-estimated-to-cost-facebook-another-13-billion-in-2022/">tens of billions of dollars</a>.</p><p>Complaints were made <a href="https://9to5mac.com/2023/04/11/apple-app-tracking/">in a number of countries</a> – some arguing that it was unfair because <a href="https://9to5mac.com/2022/06/14/app-tracking-transparency-antitrust/">Apple exempts its own apps</a> (which are in reality subject to even tighter controls), others saying the loss of revenue <a href="https://9to5mac.com/2022/09/13/app-tracking-transparency-increases-in-app-purchase-prices/">forced developers to raise prices</a> to compensate.</p></blockquote>
<p><a href="https://arstechnica.com/tech-policy/2025/03/france-fines-apple-e150m-for-excessive-pop-ups-that-let-users-reject-tracking/">Jon Brodkin</a> (<a href="https://news.ycombinator.com/item?id=43537593">Hacker News</a>):</p>
<blockquote cite="https://arstechnica.com/tech-policy/2025/03/france-fines-apple-e150m-for-excessive-pop-ups-that-let-users-reject-tracking/"><p>The intent of ATT “is not problematic in terms of the likely benefits for users as regards privacy protection,” but “how the framework is implemented is abusive within the meaning of competition law,” the agency said. Apple’s “implementation methods artificially complicate the use of third-party applications and distort the neutrality of the framework to the detriment of small publishers financed by advertising,” it said.</p><p>Third-party publishers “cannot rely on the ATT framework to comply with their legal obligations,” so they “must continue to use their own consent collection solution,” the French agency said. “The result is that multiple consent pop-ups are displayed, making the use of third-party applications in the iOS environment excessively complex.”</p><p>[…]</p><p>The agency said there is an “asymmetry” in which user consent for Apple’s own data collection is obtained with a single pop-up, but other publishers are “required to obtain double consent from users for tracking on third-party sites and applications.”</p><p>[…]</p><p>Apple said in a statement that the ATT “prompt is consistent for all developers, including Apple[…]”</p></blockquote>
<p>Is this actually true? It sounds like when <a href="https://mjtsai.com/blog/2020/07/29/tim-cooks-app-store-testimony/">Tim Cook told Congress</a> that Apple’s own apps have to follow the same guidelines as third-party apps. I don’t think I’ve ever seen an Apple app display the “Allow ‘App’ to track your activity across other companies’ apps and websites?” prompt. Apple has defined tracking in such a way that it <a href="https://mjtsai.com/blog/2021/05/07/does-apple-news-track-you/">doesn’t count</a> if you own the app store, so why would they ever show that prompt? I <em>have</em> seen Apple apps show <em>different</em> prompts, and the French Competition Authority includes a <a href="https://www.autoritedelaconcurrence.fr/sites/default/files/2025-03/Diapo_ATT5_eng_0.pdf#page=9">screenshot of one</a>.</p>
<p><a href="https://pxlnv.com/linklog/french-competition-app-tracking-transparency/">Nick Heer</a>:</p>
<blockquote cite="https://pxlnv.com/linklog/french-competition-app-tracking-transparency/">
<p>Because the ATT prompt does not allow developers to specify which third-parties are receiving tracking data, developers must include a second opt-in screen that provides more details about how their data will be used. This is fairly granular — arguably too much — but Apple’s version lacks detail. If a user agrees to third-party tracking, <a href="https://pxlnv.com/linklog/informed-consent-privacy/">is their consent fully informed</a> if they do not know with which advertisers their information is being shared, or even how many? I am not sure they do.</p>
<p>They also seemed to disagree with how Apple defines tracking. German regulators are <a href="https://pxlnv.com/linklog/german-app-tracking-transparency-antitrust-followup/">also interested</a> in what amounts to self-preferencing, even if that is not Apple’s intent. The authority has not yet published the text of the decision, which will hopefully answer many of the questions I have.</p>
<p>One thing I am curious about is how the regulator reconciles Apple’s apparently “not problematic” attempts at improving user privacy with the callous disregard toward the same shown by ad tech companies. Trade groups representing those companies, including the French offices of the <a href="https://iabeurope.eu/directory/alliance-digitale/">IAB</a> and <a href="https://www.mmaglobal.com/local-council/france">MMA</a>, were among those who filed this complaint. Both trade groups are loathsome; their inability and failure to self-govern is one reason for this very privacy legislation. Yet Apple’s <a href="https://www.apple.com/legal/privacy/data/en/apple-advertising/#:~:text=Apple%E2%80%99s%20advertising%20platform%20does%20not%20track%20you">particular definition of “tracking”</a> is something only relevant to very large platform operators like itself. There is very clearly a conflict of interest in Apple trying to apply these kinds of policies to competitors, especially as Apple <a href="https://www.axios.com/2024/11/19/apple-news-ads-direct-sales-publishers">expands its ads business</a>.</p>
</blockquote>
<p><a href="https://daringfireball.net/2025/03/france_merde_decision_app_tracking_transparency">John Gruber</a> (<a href="https://mastodon.social/@daringfireball/114258786578975677">Mastodon</a>):</p>
<blockquote cite="https://daringfireball.net/2025/03/france_merde_decision_app_tracking_transparency">
<p>It’s ostensibly “not necessary” because French and EU privacy laws are supposedly enough, and all that’s needed. And it’s unfair because now, under ATT, third-party surveillance advertisers who seek to track users across apps on iOS need to ask permission twice — first through the clear-as-a-bell “Ask App Not to Track” / “Allow Tracking” prompt required by Apple, and again through the byzantine but ultimately toothless permission requirements of France and the EU. ATT has had measurable effects because users understand it, and they prefer not to be tracked. EU and French privacy laws are largely ineffective because, in practice, they <a href="https://hep.physics.illinois.edu/home/g-gollin/1984_commercial_dialogue.html">bury users with confusion</a>.</p>
</blockquote>
<p>I’m not sure these last two sentences are really true, as <a href="https://pxlnv.com/linklog/french-competition-app-tracking-transparency/">Heer</a> also discusses.</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/21/apple-under-german-antitrust-scrutiny/">Apple Under German Antitrust Scrutiny</a></li>
<li><a href="https://mjtsai.com/blog/2022/12/22/french-court-fines-apple-over-abusive-app-store-practices/">French Court Fines Apple Over Abusive App Store Practices</a></li>
<li><a href="https://mjtsai.com/blog/2022/08/11/french-publishers-make-app-store-antitrust-complaint/">French Publishers Make App Store Antitrust Complaint</a></li>
<li><a href="https://mjtsai.com/blog/2022/06/29/german-antitrust-probe-into-app-tracking-transparency/">German Antitrust Probe Into App Tracking Transparency</a></li>
<li><a href="https://mjtsai.com/blog/2022/04/20/plenty-of-tracking-despite-app-tracking-transparency/">Plenty of Tracking Despite App Tracking Transparency</a></li>
<li><a href="https://mjtsai.com/blog/2022/04/15/more-users-opting-in-to-app-tracking/">More Users Opting in to App Tracking</a></li>
<li><a href="https://mjtsai.com/blog/2022/02/04/facebook-blames-apple-usage-declines/">Facebook Blames Apple, Usage Declines</a></li>
<li><a href="https://mjtsai.com/blog/2021/12/17/expectations-when-opting-out-of-tracking/">Expectations When Opting Out of Tracking</a></li>
<li><a href="https://mjtsai.com/blog/2021/10/19/app-tracking-transparency-helps-apples-ads/">App Tracking Transparency Helps Apple’s Ads</a></li>
<li><a href="https://mjtsai.com/blog/2021/09/29/app-tracking-transparency-doesnt-stop-trackers/">App Tracking Transparency Doesn’t Stop Trackers</a></li>
<li><a href="https://mjtsai.com/blog/2021/05/07/does-apple-news-track-you/">Does Apple News Track You?</a></li>
<li><a href="https://mjtsai.com/blog/2018/03/15/france-to-take-legal-action-against-app-stores/">France to Take Legal Action Against App Stores</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/03/france-fines-apple-over-app-tracking-transparency/feed/</wfw:commentRss>
<slash:comments>5</slash:comments>
</item>
<item>
<title>France Rejects Backdoor Mandate</title>
<link>https://mjtsai.com/blog/2025/04/03/france-rejects-backdoor-mandate/</link>
<comments>https://mjtsai.com/blog/2025/04/03/france-rejects-backdoor-mandate/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Thu, 03 Apr 2025 19:05:40 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[France]]></category>
<category><![CDATA[Legal]]></category>
<category><![CDATA[Privacy]]></category>
<category><![CDATA[Signal]]></category>
<category><![CDATA[WhatsApp]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47304</guid>
<description><![CDATA[Joe Mullin: In a moment of clarity after initially moving forward a deeply flawed piece of legislation, the French National Assembly has done the right thing: it rejected a dangerous proposal that would have gutted end-to-end encryption in the name of fighting drug trafficking. Despite heavy pressure from the Interior Ministry, lawmakers voted Thursday night […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.eff.org/deeplinks/2025/03/win-encryption-france-rejects-backdoor-mandate">Joe Mullin</a>:</p>
<blockquote cite="https://www.eff.org/deeplinks/2025/03/win-encryption-france-rejects-backdoor-mandate"><p>In a moment of clarity after initially moving forward a deeply flawed piece of legislation, the French National Assembly has done the right thing: it rejected a dangerous proposal that would have gutted end-to-end encryption in the name of fighting drug trafficking. Despite heavy pressure from the Interior Ministry, <a href="https://www.lemonde.fr/societe/article/2025/03/21/l-assemblee-vote-pour-le-maintien-de-la-confidentialite-des-messageries-cryptees-lors-d-une-nuit-agitee_6584121_3224.html">lawmakers voted Thursday night</a> (article in French) to strike down a provision that would have forced messaging platforms like Signal and WhatsApp to allow hidden access to private conversations.</p></blockquote>
<p>Via <a href="https://irreal.org/blog/?p=12883">Irreal</a>:</p>
<blockquote cite="https://irreal.org/blog/?p=12883">
<p>One of my favorite stories is the probably apocryphal story of <a href="https://en.wikipedia.org/wiki/Indiana_pi_bill">some legislature trying to legislate the value of pi</a>. The same mindset is in play with legislators who believe that they can simply will a secure backdoor into existence. The fact that experts everywhere say, “No you can’t.” makes no impression.</p>
</blockquote>
<p><a href="https://therecord.media/european-commission-takes-aim-encryption-europol-fbi-proposal">Alexander Martin</a> (via <a href="https://pxlnv.com/linklog/protecteu-end-to-end-encryption/">Nick Heer</a>):</p>
<blockquote cite="https://therecord.media/european-commission-takes-aim-encryption-europol-fbi-proposal">
<p>The European Commission announced on Tuesday its intention to join the ongoing debate about lawful access to data and end-to-end encryption while unveiling a new internal security strategy aimed to address ongoing threats.</p>
<p>[…]</p>
<p>The aim is to “identify and assess technological solutions that would enable law enforcement authorities to access encrypted data in a lawful manner, safeguarding cybersecurity and fundamental rights,” said the Commission.</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/02/07/uk-orders-apple-to-break-icloud-advanced-data-protection/">UK Orders Apple to Break iCloud Advanced Data Protection</a></li>
<li><a href="https://mjtsai.com/blog/2024/06/04/proposed-eu-chat-control/">Proposed EU Chat Control</a></li>
<li><a href="https://mjtsai.com/blog/2023/08/24/u-k-proposal-to-weaken-messaging-security/">UK Proposal to Weaken Messaging Security</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/03/france-rejects-backdoor-mandate/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>Apple Intelligence Available in EU</title>
<link>https://mjtsai.com/blog/2025/04/03/apple-intelligence-available-in-eu/</link>
<comments>https://mjtsai.com/blog/2025/04/03/apple-intelligence-available-in-eu/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Thu, 03 Apr 2025 19:05:20 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Apple Intelligence]]></category>
<category><![CDATA[Digital Markets Act (DMA)]]></category>
<category><![CDATA[European Union]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Siri]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47302</guid>
<description><![CDATA[Apple: Starting today, with the availability of iOS 18.4, iPadOS 18.4, and macOS Sequoia 15.4, Apple Intelligence features are now available in many new languages, including French, German, Italian, Portuguese (Brazil), Spanish, Japanese, Korean, and Chinese (simplified) — as well as localized English for Singapore and India — and are accessible in nearly all regions […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.apple.com/ca/newsroom/2025/03/apple-intelligence-features-expand-to-new-languages-and-regions-today/">Apple</a>:</p>
<blockquote cite="https://www.apple.com/ca/newsroom/2025/03/apple-intelligence-features-expand-to-new-languages-and-regions-today/">
<p>Starting today, with the availability of iOS 18.4, iPadOS 18.4, and macOS Sequoia 15.4, Apple Intelligence features are now available in many new languages, including French, German, Italian, Portuguese (Brazil), Spanish, Japanese, Korean, and Chinese (simplified) — as well as localized English for Singapore and India — and are accessible in nearly all regions around the world.</p>
<p>In addition, iPhone and iPad users in the EU have access to Apple Intelligence features for the first time[…]</p>
</blockquote>
<p>I’m not sure why the Mac is absent from that list.</p>
<p><a href="https://wien.rocks/@noheger/114263840406669364">Norbert Heger</a>:</p>
<blockquote cite="https://wien.rocks/@noheger/114263840406669364">
<p>Wasn’t macOS 15.4 supposed to bring support for additional languages like German to Apple Intelligence?</p>
</blockquote>
<p>He has the system language set to English (which Apple Intelligence already supported) and is getting an error that Apple Intelligence is not available when <em>Siri</em> is set to German. But it works after changing the <em>system language</em> to German.</p>
<p><a href="https://pxlnv.com/linklog/new-ai-features-languages/">Nick Heer</a>:</p>
<blockquote cite="https://pxlnv.com/linklog/new-ai-features-languages/">
<p>I remain skeptical that Apple Intelligence was ever “delayed” in the region. Until today, it was only available in variations of English. When Apple <a href="https://pxlnv.com/linklog/apple-intelligence-eu-april/">announced in November</a> it would be bringing these features to the E.U., it sure seemed like it also needed the time to train its models on a range of new languages reflecting the regions where it would be used.</p>
<p>If Apple was so worried about the wrath of regulators, it could have made accessing Apple Intelligence in the E.U. as complicated as it does E.U.-specific features outside the region. <a href="https://c.im/@nickheer/113104779813614367">But it did not</a>.</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/31/macos-15-4/">macOS 15.4</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/31/ios-18-4-and-ipados-18-4/">iOS 18.4 and iPadOS 18.4</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/12/apple-delays-more-personalized-siri-apple-intelligence-features/">Apple Delays “More Personalized Siri” Apple Intelligence Features</a></li>
<li><a href="https://mjtsai.com/blog/2025/02/17/on-the-undesign-of-apple-intelligence-features/">On the Undesign of Apple Intelligence Features</a></li>
<li><a href="https://mjtsai.com/blog/2024/11/13/questioning-eu-geo-blocking-restrictions/">Questioning EU Geo-Blocking Restrictions</a></li>
<li><a href="https://mjtsai.com/blog/2024/10/31/ios-apple-intelligence-in-eu-in-april-2025/">iOS Apple Intelligence in EU in April 2025</a></li>
<li><a href="https://mjtsai.com/blog/2024/09/10/eu-ios-envy/">EU iOS Envy</a></li>
<li><a href="https://mjtsai.com/blog/2024/06/21/no-apple-intelligence-or-iphone-mirroring-in-eu-at-launch/">No Apple Intelligence or iPhone Mirroring in EU at Launch</a></li>
</ul>
<p>Update (2025-04-03): <a href="https://mastodon.social/@stroughtonsmith/114275617141123435">Steve Troughton-Smith</a>:</p>
<blockquote cite="https://mastodon.social/@stroughtonsmith/114275617141123435"><p>[The] Mac doesn’t qualify as a VLOP, only iOS and iPadOS. Even if it did, though, it meets most if not all of the DMA requirements anyway, because it’s not locked down like iOS.</p></blockquote>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/03/apple-intelligence-available-in-eu/feed/</wfw:commentRss>
<slash:comments>7</slash:comments>
</item>
<item>
<title>Moving Targets</title>
<link>https://mjtsai.com/blog/2025/04/02/moving-targets/</link>
<comments>https://mjtsai.com/blog/2025/04/02/moving-targets/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Wed, 02 Apr 2025 19:34:09 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[AirDrop]]></category>
<category><![CDATA[Apple Intelligence]]></category>
<category><![CDATA[Apple Mail]]></category>
<category><![CDATA[Design]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47296</guid>
<description><![CDATA[Nick Lockwood: Airdrop on macOS has this “great” feature where it displays receivers asynchronously as it finds them and they are sorted alphabetically, so the order shuffles randomly under the mouse as you are trying to clickBrought to you by the guy who sent a file to a random colleague when trying to share it […]]]></description>
<content:encoded><![CDATA[<p><a href="https://mastodon.social/@nicklockwood/114256003166649379">Nick Lockwood</a>:</p>
<blockquote cite="https://mastodon.social/@nicklockwood/114256003166649379"><p>Airdrop on macOS has this “great” feature where it displays receivers asynchronously as it finds them <em>and</em> they are sorted alphabetically, so the order shuffles randomly under the mouse as you are trying to click</p><p>Brought to you by the guy who sent a file to a random colleague when trying to share it between two machines 😩</p></blockquote>
<p><a href="https://wien.rocks/@noheger/114264190051215506">Norbert Heger</a>:</p>
<blockquote cite="https://wien.rocks/@noheger/114264190051215506">
<p>Hey Apple, I found a layout bug in Mail.app. The rightmost category button is always truncated…</p>
</blockquote>
<p>I assume this is intentional because otherwise there would be no indication that you could scroll to find more buttons.</p>
<p><a href="https://mastodon.social/@marioguzman/114263344800439318">Mario Guzmán</a>:</p>
<blockquote cite="https://mastodon.social/@marioguzman/114263344800439318"><p>Lesson 1 in #UIUX… your buttons should not be moving targets. Especially if they’re toggles.</p><p>Look at how if I toggle on “Transactions” and then toggle it off, I am no longer in the bounds of that button. TF?!</p><p>I have a feeling this was designed for touch and touch only. It wouldn’t matter there because you lift your finger after tapping… </p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2024/10/24/apple-intelligence-in-macos-15-2-and-ios-18-2/">Apple Intelligence in macOS 15.2 and iOS 18.2</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/02/moving-targets/feed/</wfw:commentRss>
<slash:comments>9</slash:comments>
</item>
<item>
<title>Swift Testing: Return Errors From #expect(throws:)</title>
<link>https://mjtsai.com/blog/2025/04/02/swift-testing-return-errors-from-expectthrows/</link>
<comments>https://mjtsai.com/blog/2025/04/02/swift-testing-return-errors-from-expectthrows/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Wed, 02 Apr 2025 19:34:04 +0000</pubDate>
<category><![CDATA[Programming]]></category>
<category><![CDATA[Language Design]]></category>
<category><![CDATA[Swift Programming Language]]></category>
<category><![CDATA[Testing]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47294</guid>
<description><![CDATA[Also new in Swift 6.1, ST-0006: We offer three variants of #expect(throws:):One that takes an error type, and matches any error of the same type;One that takes an error instance (conforming to Equatable) and matches any error that compares equal to it; andOne that takes a trailing closure and allows test authors to write arbitrary […]]]></description>
<content:encoded><![CDATA[<p><a href="https://mjtsai.com/blog/2025/04/01/swift-testing-test-scoping-traits/">Also</a> new in <a href="https://mjtsai.com/blog/2025/03/03/swift-6-1/">Swift 6.1</a>, <a href="https://github.com/swiftlang/swift-evolution/blob/main/proposals/testing/0006-return-errors-from-expect-throws.md">ST-0006</a>:</p>
<blockquote cite="https://github.com/swiftlang/swift-evolution/blob/main/proposals/testing/0006-return-errors-from-expect-throws.md"><p>We offer three variants of <code>#expect(throws:)</code>:</p><ul><li>One that takes an error type, and matches any error of the same type;</li><li>One that takes an error <em>instance</em> (conforming to <code>Equatable</code>) and matches any
error that compares equal to it; and</li><li>One that takes a trailing closure and allows test authors to write arbitrary
validation logic.</li></ul><p>The third overload has proven to be somewhat problematic. First, it yields the
error to its closure as an instance of <code>any Error</code>, which typically forces the
developer to cast it before doing any useful comparisons. Second, the test
author must return <code>true</code> to indicate the error matched and <code>false</code> to indicate
it didn’t, which can be both logically confusing and difficult to express
concisely[…]</p></blockquote>
<p>Note that, with Swift 6.0, only the third variant actually lets you access the thrown error. So that’s what I always used, but I found it awkward. I’d been using a helper method to make it a little better:</p>
<pre>
func expect<T, E>(sourceLocation: SourceLocation = #_sourceLocation,
_ performing: () throws -> T,
throws errorChecker: (E) -> Void) {
// @SwiftIssue: Must write this separately or it won't type-check.
func errorMatcher(_ e: any Error) throws -> Bool {
let error = try #require(e as? E, sourceLocation: sourceLocation)
errorChecker(error)
return true
}
#expect(sourceLocation: sourceLocation,
performing: performing,
throws: errorMatcher)
}
</pre>
<p>This would do the cast, but I think it was still not great:</p>
<pre>
expect {
try // something
} throws: { (error: MJTError) in
// check `error`
}
</pre>
<p>With Swift 6.1, the first two variants return the matched error, so I can just write:</p>
<pre>
let error = try #require(throws: MJTError.self) {
try // something
}
// check `error`
</pre>
<p>Much better! Note that I’ve switched from <code>#expect</code> to <code>#require</code> because it doesn’t really work to do:</p>
<pre>if let error = #expect(throws: MJTError.self) // ...</pre>
<p>The <code>if</code> doesn’t interact well with the trailing closure syntax, so I think I would have to write it like:</p>
<pre>
let error = #expect(throws: MJTError.self) {
try // something
}
if let error {
// check `error`
}
</pre>
<p>if I really wanted to continue after the error didn’t match.</p>
<p>Note that if you don’t care what the error is but do want to look at it, you can pass <code>(any Error).self</code> as the error type.</p>
<p>I was also wondering, now that we have <a href="https://mjtsai.com/blog/2023/11/28/swift-proposal-typed-throws/">typed <code>throws</code></a>, why doesn’t it check at compile time that the test code throws the right type of error? The <a href="https://github.com/swiftlang/swift-evolution/blob/main/proposals/testing/0006-return-errors-from-expect-throws.md">answer</a>:</p>
<blockquote cite="https://github.com/swiftlang/swift-evolution/blob/main/proposals/testing/0006-return-errors-from-expect-throws.md">
<p>If we adopted typed throws in the signatures of these macros, it would force adoption of typed throws in the code under test even when it may not be appropriate. For example, if we adopted typed throws, the following code would not compile[…]</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/04/01/xcode-16-3/">Xcode 16.3</a></li>
<li><a href="https://mjtsai.com/blog/2025/04/01/swift-testing-test-scoping-traits/">Swift Testing: Test Scoping Traits</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/03/swift-6-1/">Swift 6.1</a></li>
<li><a href="https://mjtsai.com/blog/2024/12/17/issues-adopting-swift-testing/">Issues Adopting Swift Testing</a></li>
<li><a href="https://mjtsai.com/blog/2023/11/28/swift-proposal-typed-throws/">Swift Proposal: Typed Throws</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/02/swift-testing-return-errors-from-expectthrows/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>Severed Edits</title>
<link>https://mjtsai.com/blog/2025/04/02/severed-edits/</link>
<comments>https://mjtsai.com/blog/2025/04/02/severed-edits/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Wed, 02 Apr 2025 19:33:44 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Apple TV+]]></category>
<category><![CDATA[Avid]]></category>
<category><![CDATA[Cloud]]></category>
<category><![CDATA[Jump Desktop]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Screen Sharing]]></category>
<category><![CDATA[TV Show]]></category>
<category><![CDATA[Video]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47292</guid>
<description><![CDATA[Ernie Smith (via Hacker News): But it of course raises the question: Do they make Apple‘s shows on Macs? As the second season of Severance ended in dramatic fashion, Apple decided to answer that question, and the answer was … surprisingly confusing. […] In the video Apple released, which highlights the Mac-driven editing process that […]]]></description>
<content:encoded><![CDATA[<p><a href="https://tedium.co/2025/03/29/severance-apple-remote-editing-weirdness/">Ernie Smith</a> (via <a href="https://news.ycombinator.com/item?id=43517301">Hacker News</a>):</p>
<blockquote cite="https://tedium.co/2025/03/29/severance-apple-remote-editing-weirdness/">
<p>But it of course raises the question: Do they <em>make</em> Apple‘s shows on Macs? As the second season of <em>Severance</em> ended in dramatic fashion, Apple decided to answer that question, and the answer was … surprisingly confusing.</p>
<p>[…]</p>
<p><a href="https://www.youtube.com/watch?v=TXNQ01Sy6Xw">In the video Apple released</a>, which highlights the Mac-driven editing process that Ben Stiller's team is using, something stood out to me: Wait, the video is super-jittery—this makes the Mac Mini look rough. What's going on?</p><p>Then, after about 10 minutes of watching, I saw it: The show’s lead editor, Geoffrey Richman, was working on a remote Mac through <a href="https://www.jumpdesktop.com">Jump Desktop</a>, a screen sharing tool known for its high-speed “fluid remote desktop” feature. </p>
<p>[…]</p>
<p>To me, though, it highlights a huge issue with Apple’s current professional offerings. They are built to work on a single machine. At least for high-end use cases, the remote workflow threatens to cut them out of the equation entirely, as cloud devices with access to nearly unlimited resources gradually outpace individual machines. In fact, there is a version of the editor he was using, Avid Media Composer, <a href="https://www.avid.com/products/avid-edit-on-demand">that is cloud-based</a> and built specifically for this very use case.</p>
</blockquote>
<p>See also: <a href="https://daringfireball.net/linked/2025/03/28/chatgpt-4o-adds-image-generation-and-its-fun-as-hell">John Gruber</a>.</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/26/apple-tv-losing-1-billion-per-year/">Apple TV+ Losing $1 Billion Per Year</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/02/severed-edits/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>Rebuilding the Social Security Administration’s Codebase</title>
<link>https://mjtsai.com/blog/2025/04/02/rebuilding-the-social-security-administrations-codebase/</link>
<comments>https://mjtsai.com/blog/2025/04/02/rebuilding-the-social-security-administrations-codebase/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Wed, 02 Apr 2025 19:32:47 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[COBOL]]></category>
<category><![CDATA[Elon Musk]]></category>
<category><![CDATA[Financial]]></category>
<category><![CDATA[PayPal]]></category>
<category><![CDATA[Programming]]></category>
<category><![CDATA[Software Rewrite]]></category>
<category><![CDATA[Testing]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47290</guid>
<description><![CDATA[Makena Kelly (Hacker News): The project is being organized by Elon Musk lieutenant Steve Davis, multiple sources who were not given permission to talk to the media tell WIRED, and aims to migrate all SSA systems off COBOL, one of the first common business-oriented programming languages, and onto a more modern replacement like Java within […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.wired.com/story/doge-rebuild-social-security-administration-cobol-benefits/">Makena Kelly</a> (<a href="https://news.ycombinator.com/item?id=43505659">Hacker News</a>):</p>
<blockquote cite="https://www.wired.com/story/doge-rebuild-social-security-administration-cobol-benefits/"><p>The project is being organized by Elon Musk lieutenant Steve Davis, multiple sources who were not given permission to talk to the media tell WIRED, and aims to migrate all SSA systems off COBOL, one of the first common business-oriented programming languages, and onto a more modern replacement like Java within a scheduled tight timeframe of a few months.</p><p>[…]</p><p>This proposed migration isn’t the first time SSA has tried to move away from COBOL: In 2017, SSA announced a plan to receive hundreds of millions in funding to replace its core systems. The <a href="https://www.ssa.gov/open/materials/IT-Modernization-Plan.pdf">agency predicted</a> that it would take around five years to modernize these systems. Because of the coronavirus pandemic in 2020, the agency pivoted away from this work to focus on more public-facing projects.</p><p>[…]</p><p>As recently as 2016, SSA’s infrastructure contained more than 60 million lines of code written in COBOL, with millions more written in other legacy coding languages, <a href="https://oig.ssa.gov/congressional-testimony/2016-07-14-newsroom-congressional-testimony-july14-ssa-modernization/">the agency’s Office of the Inspector General found</a>. In fact, SSA’s core programmatic systems and architecture haven’t been “substantially” updated since the 1980s when the agency developed its own database system called MADAM, or the Master Data Access Method, which was written in COBOL and Assembler, <a href="https://www.ssa.gov/open/materials/IT-Modernization-Plan.pdf">according to SSA’s 2017 modernization plan</a>.</p></blockquote>
<p>When the original X.com merged with PayPal, Musk wanted to rewrite the code and switch everything from Unix to Windows. Part of the thinking, if I recall, was that it would be easier to hire Windows developers. The original PayPal engineering team rejected this and maneuvered to have him replaced as CEO.</p>
<p>It probably <em>is</em> a good idea to modernize old government systems and get them off COBOL, but Musk is not known for the careful approach that doing this properly would require. Still, it’s interesting to think about how this <em>should</em> be done. I wonder if they could run the new system in a sandbox for a year, feeding it all the same inputs, and see whether it generates the same outputs.</p>
<p>Note that the existing system is tested but not problem-free. It seems to be pretty reliable about dispensing payments, but there have been multiple multi-month periods where I was not able to log into my account or I could log in but it wasn’t functional.</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2020/07/27/e-verifys-ssn-lock-is-nothing-of-the-sort/">E-Verify’s “SSN Lock” Is Nothing of the Sort</a></li>
<li><a href="https://mjtsai.com/blog/2020/04/08/calling-for-cobol-programmers/">Calling for COBOL Programmers</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/02/rebuilding-the-social-security-administrations-codebase/feed/</wfw:commentRss>
<slash:comments>8</slash:comments>
</item>
<item>
<title>Swift Testing: Test Scoping Traits</title>
<link>https://mjtsai.com/blog/2025/04/01/swift-testing-test-scoping-traits/</link>
<comments>https://mjtsai.com/blog/2025/04/01/swift-testing-test-scoping-traits/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Tue, 01 Apr 2025 20:23:46 +0000</pubDate>
<category><![CDATA[Programming]]></category>
<category><![CDATA[Swift Concurrency]]></category>
<category><![CDATA[Swift Programming Language]]></category>
<category><![CDATA[Testing]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47271</guid>
<description><![CDATA[Holly Borla: Swift 6.1 enables custom Swift Testing traits to perform logic before or after tests run in order to share set-up or tear-down logic. If you write a custom trait type which conforms to the new TestScoping protocol, you can implement a method to customize the scope in which each test or suite the […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.swift.org/blog/swift-6.1-released/">Holly Borla</a>:</p>
<blockquote cite="https://www.swift.org/blog/swift-6.1-released/">
<p>Swift 6.1 enables custom Swift Testing traits to perform logic before or after tests run in order to share set-up or tear-down logic. If you write a custom trait type which conforms to the new <code>TestScoping</code> protocol, you can implement a method to customize the scope in which each test or suite the trait is applied to will execute. For example, you could implement a trait which binds a task local value to a mocked resource:</p>
<pre>struct MockAPICredentialsTrait: TestTrait, TestScoping {
func provideScope(for test: Test, testCase: Test.Case?, performing function: @Sendable () async throws -> Void) async throws {
let mockCredentials = APICredentials(apiKey: "fake")
try await APICredentials.$current.withValue(mockCredentials) {
try await function()
}
}
}
extension Trait where Self == MockAPICredentialsTrait {
static var mockAPICredentials: Self { Self() }
}
@Test(.mockAPICredentials)
func example() {
// Validate API usage, referencing `APICredentials.current`...
}</pre>
</blockquote>
<p>Because task locals cannot be separated into set-up and tear-down portions, they were previously only usable in Swift Testing if you repeated them within each test function. <code>TestScoping</code> gets rid of the indentation that entails and can also be applied at the suite level, so you don’t have to repeat it for each test. It’s great to have this functionality, though I think the implementation via traits feels a bit convoluted compared with XCTest’s <code>invokeTest()</code>.</p>
<p><a href="https://github.com/swiftlang/swift-evolution/blob/main/proposals/testing/0007-test-scoping-traits.md">ST-0007</a>:</p>
<blockquote cite="https://github.com/swiftlang/swift-evolution/blob/main/proposals/testing/0007-test-scoping-traits.md"><p>Some test authors have expressed interest in allowing custom traits to access
the instance of a suite type for <code>@Test</code> instance methods, so the trait could
inspect or mutate the instance. Currently, only instance-level members of a
suite type (including <code>init</code>, <code>deinit</code>, and the test function itself) can access
<code>self</code>, so this would grant traits applied to an instance test method access to
the instance as well. This is certainly interesting, but poses several technical
challenges that puts it out of scope of this proposal.</p></blockquote>
<p>It seems like a major limitation that any code factored out in this way can’t access properties or helper functions in the type that contains the test.</p>
<blockquote cite="https://github.com/swiftlang/swift-evolution/blob/main/proposals/testing/0007-test-scoping-traits.md"><p>Some reviewers of this proposal pointed out that the hypothetical usage example shown earlier involving setting a task local value while a test is executing will likely become a common use of these APIs. To streamline that pattern, it would be very natural to add a built-in trait type which facilitates this. I have prototyped this idea and plan to add it once this new trait functionality lands.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/04/01/xcode-16-3/">Xcode 16.3</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/03/swift-6-1/">Swift 6.1</a></li>
<li><a href="https://mjtsai.com/blog/2024/12/17/issues-adopting-swift-testing/">Issues Adopting Swift Testing</a></li>
</ul>
<p id="swift-testing-test-scoping-traits-update-2025-04-02">Update (2025-04-02): <a href="https://mastodon.social/@ctietze/114260919230044068">Christian Tietze</a>:</p>
<blockquote cite="https://mastodon.social/@ctietze/114260919230044068">
<p>I really like how Swift Testing Traits turns into how Emacs Lisp implements <a href="https://www.gnu.org/software/emacs/manual/html_node/elisp/Advising-Functions.html">function advising</a>.</p>
<p>You basically decorate a function call with a macro.</p>
<p>Unlike (Emacs) Lisp, you can't fiddle with the context of the called function and pass data along.</p>
</blockquote>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/01/swift-testing-test-scoping-traits/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>Xcode 16.3</title>
<link>https://mjtsai.com/blog/2025/04/01/xcode-16-3/</link>
<comments>https://mjtsai.com/blog/2025/04/01/xcode-16-3/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Tue, 01 Apr 2025 20:22:54 +0000</pubDate>
<category><![CDATA[Programming]]></category>
<category><![CDATA[C++ Programming Language]]></category>
<category><![CDATA[Instruments]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Swift Concurrency]]></category>
<category><![CDATA[Swift Programming Language]]></category>
<category><![CDATA[Testing]]></category>
<category><![CDATA[Xcode]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47269</guid>
<description><![CDATA[Apple (security, downloads): Clang now defines TARGET_OS_* conditionals as built-in macros based on the provided target triple.[…]Searching in the documentation viewer may start an indexing process which makes no progress. This may result in missing search results and increased CPU usage.[…]Fixed: Foundation encoders/decoders user info dictionaries now require Sendable values. This may cause build errors […]]]></description>
<content:encoded><![CDATA[<p><a href="https://developer.apple.com/documentation/xcode-release-notes/xcode-16_3-release-notes">Apple</a> (<a href="https://support.apple.com/en-us/122380">security</a>, <a href="https://developer.apple.com/download/all/">downloads</a>):</p>
<blockquote cite="https://developer.apple.com/documentation/xcode-release-notes/xcode-16_3-release-notes"><p>Clang now defines <code>TARGET_OS_*</code> conditionals as built-in macros based on the provided target triple.</p><p>[…]</p><p>Searching in the documentation viewer may start an indexing process which makes no progress. This may result in missing search results and increased CPU usage.</p><p>[…]</p><p>Fixed: Foundation encoders/decoders user info dictionaries now require <code>Sendable</code> values. This may cause build errors even in the Swift 5 language mode in small edge cases where the userInfo property is set to a value like <code>init(myCustomInitializer:)</code> where the initializer is defined in an extension on <code>Dictionary</code> with a <code>Value == Any</code> constraint.</p><p>[…]</p><p>Instruments 16.3 includes a new Processor Trace Instrument which uses hardware-supported, low-overhead CPU execution tracing to accurately reconstruct execution of the program.</p><p>[…]</p><p>In Xcode when you are in a test context you are now able to query for your test plan name and scheme name in the environment with the keys <code>XCODE_TEST_PLAN_NAME</code> and <code>XCODE_SCHEME_NAME</code>.</p><p>[…]</p><p><code>xcodebuild</code> supports constraining the tests run through tests actions by tags. Use <code>-only-testing-tags</code> to include tests identified by a tags and <code>-skip-testing-tags</code> to omit tests identified by tags.</p></blockquote>
<p>There are also lots of C++ and Swift/C++ improvements. It does not look like the issues with linking to certain frameworks on older versions of macOS (<a href="https://mjtsai.com/blog/2024/09/12/xcode-16/">FB14667312</a>) or calling async functions bridged from Objective-C (<a href="https://mjtsai.com/blog/2024/12/13/xcode-16-2/">134442168</a>) have been fixed yet.</p>
<p><a href="https://techhub.social/@xcodereleases/114258522457495826">Xcode Releases</a>:</p>
<blockquote cite="https://techhub.social/@xcodereleases/114258522457495826">
<p>It is identical to RC2 that came out a couple of days ago.</p>
</blockquote>
<p><a href="https://www.massicotte.org/dynamic-isolation">Matt Massicotte</a> (via <a href="https://christiantietze.de/posts/2024/04/dynamic-actor-isolation-help-transition/">Christian Tietze</a>):</p>
<blockquote cite="https://www.massicotte.org/dynamic-isolation">
<p>No, dynamic isolation is <strong>not bad</strong>.</p>
<p>But, I think we can also agree that static isolation is <em>preferable</em>. If you find yourself using dynamic isolation solely because it is a familiar pattern, that’s something to think about more deeply. Static isolation is a safer, clearer way to express what you need. That doesn’t mean you can always or even should start with it. Adopting concurrency will be a long process. Dynamic isolation is a very handy tool for getting there, I just don’t think it should typically be an end-state.</p>
</blockquote>
<p><a href="https://mastodon.social/@cocoaphony/114259011197550138">Rob Napier</a>:</p>
<blockquote cite="https://mastodon.social/@cocoaphony/114259011197550138"><p>I’m wondering if there are changes to how DynamicActorIsolation works in Xcode 16.3. I’m seeing crashes due to running on a background thread that I don’t have with 16.2. The closure in question isn’t intended to be MainActor even though it’s defined in a View. With DynamicActorIsolation turned on, it seems to be getting MainActor assertions added, even if I mark it Sendable.</p></blockquote>
<p><a href="https://mastodon.social/@twostraws/114261602978817975">Paul Hudson</a>:</p>
<blockquote cite="https://mastodon.social/@twostraws/114261602978817975"><p>If you upgraded to Xcode 16.3, be warned: there appears to be a simulator bug that causes network access to fail regularly. It doesn’t affect devices, just the simulator. You can work around it by using <code>URLSession(configuration: .ephemeral)</code> rather than <code>URLSession.shared</code>.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/04/01/swift-testing-test-scoping-traits/">Swift Testing: Test Scoping Traits</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/31/macos-15-4/">macOS 15.4</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/26/the-future-of-swift-serialization-and-deserialization-apis/">The Future of Swift Serialization and Deserialization APIs</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/12/whither-swift-assist/">Whither Swift Assist?</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/03/swift-6-1/">Swift 6.1</a></li>
<li><a href="https://mjtsai.com/blog/2024/12/13/xcode-16-2/">Xcode 16.2</a></li>
<li><a href="https://mjtsai.com/blog/2024/10/01/swift-concurrency-and-objective-c/">Swift Concurrency and Objective-C</a></li>
</ul>
<p id="xcode-16-3-update-2025-04-02">Update (2025-04-02): <a href="https://mastodon.social/@bigzaphod/114263271408384073">Sean Heber</a>:</p>
<blockquote cite="https://mastodon.social/@bigzaphod/114263271408384073"><p>Xcode 16.3 is seemingly refusing to remember the width of the canvas panel where SwiftUI previews live between tab switches and it is driving me bonkers and I’ve only had this version of Xcode a few hours.</p></blockquote>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/01/xcode-16-3/feed/</wfw:commentRss>
<slash:comments>2</slash:comments>
</item>
<item>
<title>SpamSieve 3.1.2</title>
<link>https://mjtsai.com/blog/2025/04/01/spamsieve-3-1-2/</link>
<comments>https://mjtsai.com/blog/2025/04/01/spamsieve-3-1-2/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Tue, 01 Apr 2025 20:22:21 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Core Data]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Migration Assistant]]></category>
<category><![CDATA[Notarization]]></category>
<category><![CDATA[Optimization]]></category>
<category><![CDATA[Programming]]></category>
<category><![CDATA[SpamSieve]]></category>
<category><![CDATA[Swift Programming Language]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47267</guid>
<description><![CDATA[SpamSieve 3.1.2 improves the filtering accuracy of my Mac e-mail spam filter, amongst other enhancements and fixes. Some interesting issues were: I made some more table view improvements enabled by the lazy Core Data collections mentioned in the previous release. Since it no longer loads the whole selection into RAM, it’s now possible to operate […]]]></description>
<content:encoded><![CDATA[<p><a href="https://c-command.com/blog/2025/03/31/spamsieve-3-1-2/">SpamSieve 3.1.2</a> improves the filtering accuracy of my Mac e-mail spam filter, amongst other enhancements and fixes.</p>
<p>Some interesting issues were:</p>
<ul>
<li><p>I made some more table view improvements enabled by the lazy Core Data collections mentioned in the <a href="https://mjtsai.com/blog/2025/02/07/spamsieve-3-1-1/">previous release</a>. Since it no longer loads the whole selection into RAM, it’s now possible to operate on any size of selection in the <a href="https://c-command.com/spamsieve/help/log">Log window</a>. The collection also adjusts the fetch batch size and the relationship prefetching based on what type of work is being done. For example, if you’re just scrolling the window it fetches less data than before until you actually select something to view. If you’re copying to the clipboard or it’s exporting the log for a diagnostic report, it fetches <em>more</em> rows and more relationships to reduce the number of trips to the database.</p></li>
<li><p>SpamSieve’s launch agent detects when Mail or Outlook launches, and then it launches the main SpamSieve app in response so that it can start filtering. This has worked without issue until recently, but now it seems that sometimes, if the user has set an <em>app</em> like Mail or Outlook as a login item, it will get launched <em>before</em> background launch agents. The fix is for the launch agent to look at which apps are already running when it launches, rather than only observing subsequent launches and quits.</p></li>
<li><p>Apple Mail’s scripting interface can get confused if there are multiple accounts with the same name. What I learned this month is that an account that doesn’t even show up in <strong>Mail ‣ Settings ‣ Accounts</strong>, e.g. it’s only in <strong>System Settings ‣ Internet Accounts</strong>, can also cause conflicts.</p></li>
<li><p>In <a href="https://stackoverflow.com/questions/1918841/how-can-i-convert-an-ascii-character-to-cgkeycode">mapping characters to key codes</a>, I’ve found that the common advice to build up a table is problematic because sometimes there’s more than one key that corresponds to a given character. For example, <code>'0'</code> could map to either <code>kVK_ANSI_0</code> or <code>kVK_ANSI_Keypad0</code>. In some cases, maybe the app should be aware of this and handle both options. For now, I’m building up the table in reverse order so that the lower numbered key codes (e.g. not on the numeric keypad) have precedence.</p></li>
<li><p>I got a new Mac, but the Migration Assistant did not preserve the notarization credentials in the keychain. <code>notarytool</code> started failing, which was detectable from looking at the logged output, but at first I didn’t realize it because part of my build script didn’t use <code>set -e</code> and so it kept running after commands had that failed. The script now checks for errors, and I also made some tune-ups to my automated <a href="https://developer.apple.com/forums/thread/130560">notarization checks</a> (e.g. using the newer <code>syspolicy_check</code>).</p></li>
</ul>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/02/07/spamsieve-3-1-1/">SpamSieve 3.1.1</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/01/spamsieve-3-1-2/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>xAI Acquires X/Twitter</title>
<link>https://mjtsai.com/blog/2025/04/01/xai-acquires-x-twitter/</link>
<comments>https://mjtsai.com/blog/2025/04/01/xai-acquires-x-twitter/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Tue, 01 Apr 2025 20:22:16 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Acquisition]]></category>
<category><![CDATA[Artificial Intelligence]]></category>
<category><![CDATA[Business]]></category>
<category><![CDATA[Elon Musk]]></category>
<category><![CDATA[Twitter]]></category>
<category><![CDATA[Web]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47265</guid>
<description><![CDATA[Elon Musk (Hacker News): @xAI has acquired @X in an all-stock transaction. The combination values xAI at $80 billion and X at $33 billion ($45B less $12B debt). Since its founding two years ago, xAI has rapidly become one of the leading AI labs in the world, building models and data centers at unprecedented speed […]]]></description>
<content:encoded><![CDATA[<p><a href="https://x.com/elonmusk/status/1905731750275510312">Elon Musk</a> (<a href="https://news.ycombinator.com/item?id=43509923">Hacker News</a>):</p>
<blockquote cite="https://x.com/elonmusk/status/1905731750275510312"><p>@xAI
has acquired
@X
in an all-stock transaction. The combination values xAI at $80 billion and X at $33 billion ($45B less $12B debt). </p><p>Since its founding two years ago, xAI has rapidly become one of the leading AI labs in the world, building models and data centers at unprecedented speed and scale.</p><p>X is the digital town square where more than 600M active users go to find the real-time source of ground truth and, in the last two years, has been transformed into one of the most efficient companies in the world, positioning it to deliver scalable future growth.</p><p>xAI and X’s futures are intertwined. Today, we officially take the step to combine the data, models, compute, distribution and talent. This combination will unlock immense potential by blending xAI’s advanced AI capability and expertise with X’s massive reach.</p></blockquote>
<p><a href="https://www.cnbc.com/2025/03/28/elon-musk-says-xai-has-acquired-x-in-deal-that-values-social-media-site-at-33-billion.html">CNBC</a>:</p>
<blockquote cite="https://www.cnbc.com/2025/03/28/elon-musk-says-xai-has-acquired-x-in-deal-that-values-social-media-site-at-33-billion.html">
<p>Musk launched xAI less than two years ago with a stated goal to “understand the true nature of the universe.” The startup has been trying to compete directly with OpenAI, the richly valued AI startup that Musk co-founded in 2015 as a non-profit research lab. He later left OpenAI and has recently been involved in a public relations and legal spat with the company and CEO Sam Altman over the direction that it’s taken.</p>
<p>[…]</p>
<p>X and xAI have already been intertwined, with xAI’s Grok chatbot available to users of the social media app.</p>
</blockquote>
<p>It’s not clear to me whether this is essentially just a clever refinancing or whether something material has changed. On paper, Twitter is now profitable, and the business was sold for more than the original acquisition price. But the investors haven’t actually made a profit yet. They just own untradeable shares in a different private company. xAI, which seemed to come out of nowhere, is propped up by even more capital that it <a href="https://techcrunch.com/2025/03/31/openai-raises-40b-at-300b-post-money-valuation/?guccounter=1">raised on the back of the AI boom</a>, probably at more favorable terms. The ownership is now different, and perhaps the corporate structure and control are, too.</p>
<p><a href="https://www.theregister.com/2025/03/31/xai_acquires_x/">Richard Speed</a>:</p>
<blockquote cite="https://www.theregister.com/2025/03/31/xai_acquires_x/"><p>Looking into the future requires speculation. More Grok is likely, although Musk had already been heavily promoting xAI’s chatbot on X. As such, the service would have been further integrated regardless of the acquisition.</p><p>The main beneficiaries of the acquisition are X investors, who have endured years of turbulence since Musk acquired the platform. Owning shares in a growing AI startup is far more appealing than shares in a declining – though still significant – social media platform.</p><p><a href="https://www.gartner.com/en/newsroom/press-releases/2025-03-31-gartner-forecasts-worldwide-genai-spending-to-reach-644-billion-in-2025">According to Gartner</a>, worldwide generative AI spending is set to hit $644 billion in 2025, up 76.4 percent from 2024.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2024/07/30/social-media-ai-training/">Social Media AI Training</a></li>
<li><a href="https://mjtsai.com/blog/2024/07/10/calling-ai-a-bubble/">Calling AI a Bubble</a></li>
<li><a href="https://mjtsai.com/blog/2023/03/03/openai-is-today-unrecognizable/">OpenAI Is Today Unrecognizable</a></li>
<li><a href="https://mjtsai.com/blog/2022/10/28/elon-musk-finalizes-twitter-acquisition/">Elon Musk Finalizes Twitter Acquisition</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/04/01/xai-acquires-x-twitter/feed/</wfw:commentRss>
<slash:comments>4</slash:comments>
</item>
<item>
<title>macOS 15.4</title>
<link>https://mjtsai.com/blog/2025/03/31/macos-15-4/</link>
<comments>https://mjtsai.com/blog/2025/03/31/macos-15-4/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Mon, 31 Mar 2025 20:49:29 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Apple Intelligence]]></category>
<category><![CDATA[Apple Mail]]></category>
<category><![CDATA[Dark Patterns]]></category>
<category><![CDATA[Extensions]]></category>
<category><![CDATA[FSKit]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[macOS Release]]></category>
<category><![CDATA[Music.app]]></category>
<category><![CDATA[Networking]]></category>
<category><![CDATA[Software Update]]></category>
<category><![CDATA[System Integrity Protection]]></category>
<category><![CDATA[URL]]></category>
<category><![CDATA[Virtualization]]></category>
<category><![CDATA[Wallpaper]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47249</guid>
<description><![CDATA[Juli Clover (release notes, security, enterprise, developer, full installer, IPSW): With macOS 15.4, Apple is bringing Mail Categorization to the Mac. The Mail app features dedicated categories like transactions, updates, and promotions, with important emails organized into a primary section.Apple News+ subscribers now have access to an Apple News Food section with recipes, food articles, […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.macrumors.com/2025/03/31/apple-releases-macos-sequoia-15-4/">Juli Clover</a> (<a href="https://support.apple.com/en-us/120283">release notes</a>, <a href="https://support.apple.com/en-us/122373">security</a>, <a href="https://support.apple.com/en-us/121011">enterprise</a>, <a href="https://developer.apple.com/documentation/macos-release-notes/macos-15_4-release-notes">developer</a>, <a href="https://swcdn.apple.com/content/downloads/43/58/082-16524-A_VHRNGIT194/ksdv19dcxx90ja7nronzpb4kr4val0imsz/InstallAssistant.pkg">full installer</a>, <a href="https://updates.cdn-apple.com/2025SpringFCS/fullrestores/082-16517/AACDDC33-9683-4431-98AF-F04EF7C15EE3/UniversalMac_15.4_24E248_Restore.ipsw">IPSW</a>):</p>
<blockquote cite="https://www.macrumors.com/2025/03/31/apple-releases-macos-sequoia-15-4/"><p>With macOS 15.4, Apple is bringing Mail Categorization to the Mac. The Mail app features dedicated categories like transactions, updates, and promotions, with important emails organized into a primary section.</p><p>Apple News+ subscribers now have access to an Apple News Food section with recipes, food articles, and more. There’s a new Sketch style for Image Playground, Memory Movie support in the Photos app for custom slideshows, and new emoji characters.</p></blockquote>
<p>See also: <a href="https://mrmacintosh.com/macos-sequoia-15-4-update-everything-you-need-to-know/">Mr. Macintosh</a> and <a href="https://eclecticlight.co/2025/03/31/apple-has-released-macos-sequoia-15-4-and-14-7-5-13-7-5/">Howard Oakley</a>.</p>
<p><a href="https://developer.apple.com/documentation/macos-release-notes/macos-15_4-release-notes">Apple</a>:</p>
<blockquote cite="https://developer.apple.com/documentation/macos-release-notes/macos-15_4-release-notes"><p><a href="https://developer.apple.com/documentation/fskit">FSKit</a> is now available, enabling delivery of user space file systems as Application Extensions. These file systems support integration with DiskArbitration.</p>
<p>[…]</p>
<p>To enable the new HTTP loading mode, set <code>usesClassicLoadingMode</code> to false on <code>URLSessionConfiguration</code>. The new loading mode will become the default in a future release.</p>
<p>[…]</p>
<p>Fixed: M4 Macs are unable to launch virtual machine, and attempts result in a system restart.</p></blockquote>
<p><a href="https://mastodon.tz.is/@khaost/114253800150747924">Khaos Tian</a>:</p>
<blockquote cite="https://mastodon.tz.is/@khaost/114253800150747924"><p>FSKit on macOS 15.4 doesn’t seem to work without manually writing some files to a place where we shouldn’t… Did anyone at Apple tested this before shipping it 🫠</p><p>TIL they put this toggle under “General -> Login Items & Extensions -> File System Extensions”… macOS settings is a mess 😛</p>
</blockquote>
<p><a href="https://toot.community/@justkwin/114220234478701209">Quinn</a>:</p>
<blockquote cite="https://toot.community/@justkwin/114220234478701209">
<p>Historically the boundary was at the transport layer. When you enable the new loader, <code>URLSession</code> uses Network framework’s HTTP implementation.</p>
</blockquote>
<p><a href="https://lapcatsoftware.com/articles/2025/3/4.html">Jeff Johnson</a>:</p>
<blockquote cite="https://lapcatsoftware.com/articles/2025/3/4.html"><p>Incidentally, before updating my Mac mini, I got an “Upgrade to macOS Sequoia” notification even though the Mac was already running Sequoia (15.3.2).</p><p>[…]</p><p>After the updates, both my Mac mini and my iPad showed one of the most confusing “welcome” screens that I’ve ever seen. Indeed, they confused even me!</p><p>[…]</p><p>The two options given were “Continue” and “Only Download Automatically”. Which of those two did I want? Confused, I selected Continue.</p><p>I turns out that I wanted <em>neither</em>.</p></blockquote>
<p>It looks like a dark pattern to encourage people to auto-update.</p>
<p><a href="https://derflounder.wordpress.com/2025/03/31/suppressing-the-software-update-screen-with-a-configuration-profile-on-macos-sequoia/">Rich Trouton</a>:</p>
<blockquote cite="https://derflounder.wordpress.com/2025/03/31/suppressing-the-software-update-screen-with-a-configuration-profile-on-macos-sequoia/">
<p>I have not found a way to suppress this screen using a <a href="https://ss64.com/mac/defaults.html">defaults</a> command, but it is possible to suppress the <strong>Update Your Mac Automatically</strong> screen on macOS Sequoia using a configuration profile.</p>
</blockquote>
<p><a href="https://tapbots.social/@paul/114258995132737590">Paul Haddad</a>:</p>
<blockquote cite="https://tapbots.social/@paul/114258995132737590">
<p> Our long Apple Intelligence nightmare is over, I upgraded to 15.4 on two machines and neither turned that stuff back on! Still wasting several GB of storage, but it’s progress.</p>
</blockquote>
<p><a href="https://x.com/krzyzanowskim/status/1906765368867119460">Marcin Krzyzanowski</a>:</p>
<blockquote cite="https://x.com/krzyzanowskim/status/1906765368867119460">
<p>The release of macOS 15.4 builds is different from that of RC2. YET my computer does not update.</p>
</blockquote>
<p><a href="https://derflounder.wordpress.com/2025/03/31/managing-apple-intelligence-features-on-macos-sequoia-15-4/">Rich Trouton</a>:</p>
<blockquote cite="https://derflounder.wordpress.com/2025/03/31/managing-apple-intelligence-features-on-macos-sequoia-15-4/">
<p>Apple has added new management options for Apple Intelligence as part of the release of macOS Sequoia 15.4.</p>
</blockquote>
<p><a href="https://x.com/krzyzanowskim/status/1905631052858548461">Marcin Krzyzanowski</a>:</p>
<blockquote cite="https://x.com/krzyzanowskim/status/1905631052858548461"><p>PSA: don’t upgrade macOS to 15.4 if you need to use Xcode 16.2 - the lldb debugger is <a href="https://developer.apple.com/forums/thread/775563?page=1#831850022">crashing on start</a>.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/28/macos-15-4-adds-tcc-events-to-endpoint-security/">macOS 15.4 Adds TCC Events to Endpoint Security</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/11/macos-15-3-2/">macOS 15.3.2</a></li>
<li><a href="https://mjtsai.com/blog/2025/01/27/apple-intelligence-enabled-automatically/">Apple Intelligence Enabled Automatically</a></li>
<li><a href="https://mjtsai.com/blog/2024/11/15/m4-macs-cant-virtualise-older-macos/">M4 Macs Can’t Virtualize Older macOS</a></li>
<li><a href="https://mjtsai.com/blog/2024/10/24/apple-intelligence-in-macos-15-2-and-ios-18-2/">Apple Intelligence in macOS 15.2 and iOS 18.2</a></li>
<li><a href="https://mjtsai.com/blog/2024/08/05/beta-for-apple-intelligence-in-apple-mail/">Beta for Apple Intelligence in Apple Mail</a></li>
<li><a href="https://mjtsai.com/blog/2024/06/14/wwdc-2024-links/">WWDC 2024 Links</a></li>
</ul>
<p id="macos-15-4-update-2025-04-01">Update (2025-04-01): <a href="https://www.macintouch.com/post/46511/home-folder-bug-persists-in-macos-15-4/">Ric Ford</a>:</p>
<blockquote cite="https://www.macintouch.com/post/46511/home-folder-bug-persists-in-macos-15-4/">
<p>Apple apparently has no interest in fixing its recurring bugs with home folder relocation, forcing security compromises in unacceptable workarounds. Lee Mendoza emailed us about his latest tests of the longstanding <a href="https://www.macintouch.com/post/tag/home-directory/">problem</a>.</p>
<blockquote><p>The issue with System Integrity Protection (SIP) preventing users whose home directories are not on the boot volume has not been resolved in the macOS Sequoia 15.4 release. This is a recurring issue that most recently started with macOS Sequoia 15.3 and has persisted in the 15.3.1, 15.3.2, and 15.4 releases.</p></blockquote>
</blockquote>
<p><a href="https://x.com/krzyzanowskim/status/1907001560116113648">Marcin Krzyzanowski</a>:</p>
<blockquote cite="https://x.com/krzyzanowskim/status/1907001560116113648"><p>damn it, the macOS 15.4 and iOS 18.4 may be the worst release for app developers so far. It is “just” a minor update, but it feels like if some major changed in the platform.</p><p>this time <a href="https://developer.apple.com/forums/thread/777999">broken URLSession</a></p></blockquote>
<p><a href="https://x.com/sdw/status/1907090543869583687">Sebastiaan de With</a>:</p>
<blockquote cite="https://x.com/sdw/status/1907090543869583687">
<p>Things are super broken for me and users are seeing it too.</p>
</blockquote>
<p><a href="https://x.com/mpweiher/status/1907005038121058767">Marcel</a> <a href="https://x.com/mpweiher/status/1907016191924732363">Weiher</a>:</p>
<blockquote cite="https://x.com/mpweiher/status/1907005038121058767">
<p>Anyone else encountering the problem with that Seqouia 15.4 update simply not installing?</p>
<p>For me it downloaded (I think, at least it was busy for a while), reboots as if applying the update (but that goes too quick) and then comes back as 15.3.2 with an update available.</p>
<p>[…]</p>
<p>It was insufficient disk space. No warning, no message. Just fails.</p><p>[…]</p><p>And why was there insufficient disk space? 100s of GBs of Xcode simulator detritus.</p></blockquote>
<p id="macos-15-4-update-2025-04-02">Update (2025-04-02): <a href="https://weblog.rogueamoeba.com/2025/04/02/macos-15-4-brings-a-key-audio-bug-fix/">Paul Kafasis</a>:</p>
<blockquote cite="https://weblog.rogueamoeba.com/2025/04/02/macos-15-4-brings-a-key-audio-bug-fix/">
<p>Though MacOS 15.3 didn’t include any known audio fixes, today’s update includes a key audio-related bug fix to the operating system.</p>
</blockquote>
<p><a href="https://mindly.social/@geoffduncan/114263275752311406">Geoff Duncan</a>:</p>
<blockquote cite="https://mindly.social/@geoffduncan/114263275752311406"><p>So, macOS Sequoia 15.4 arbitrarily turned on automatic installation of operating system and security updates. These are things that are enabled by default on a new install—which I think is understandable. However, I had previously deliberately disabled automatic updates, and Apple decided to override my explicit actions.</p><p>[…]</p><p>I don’t have automatic software updates enabled because I’ve had Apple’s operating system updates effectively brick my machine. I do a lot of music/audio work, and there’s basically no telling when Apple is going to do something that will make the drivers for your music/audio hardware unusable.</p></blockquote>
<p><a href="https://leancrew.com/all-this/2025/04/a-macos-18-4-walpaper-bug/">Dr. Drang</a>:</p>
<blockquote cite="https://leancrew.com/all-this/2025/04/a-macos-18-4-walpaper-bug/"><p>I updated my Mac to macOS 15.4 last night and after the reboot, my desktop was white. Pure white.</p><p>[…]</p><p>I opened System Settings, chose Wallpaper from the list along the right edge, and saw that although my custom color was displaying properly in the little box on the right, the miniature desktop on the left was white.</p></blockquote>
<p><a href="https://www.macintouch.com/post/46531/more-apple-update-follies/#more-46531">Ric Ford</a>:</p>
<blockquote cite="https://www.macintouch.com/post/46531/more-apple-update-follies/#more-46531">
<p>We encountered desktop background corruption and new crashes with third-party software after installing macOS 15.4.</p>
<p>[…]</p>
<p>Meanwhile, we and others see macOS 15.4 continuing to steal gigabytes of disk space for “Apple Intelligence” even <em>if it is turned <strong>off.</strong></em></p>
</blockquote>
<p><a href="https://mastodon.social/@lapcatsoftware/114269416529834894">Jeff Johnson</a>:</p>
<blockquote cite="https://mastodon.social/@lapcatsoftware/114269416529834894"><p>The Music app now pinwheels for about 5 seconds every launch on macOS 15.4.</p><p>It doesn’t happen if my internet is disconnected.</p></blockquote>
<p>It’s probably trying to load an ad for Apple Music.</p>
<p id="macos-15-4-update-2025-04-03">Update (2025-04-03): <a href="https://mastodon.social/@lapcatsoftware/114274008301633415">Jeff Johnson</a>:</p>
<blockquote cite="https://mastodon.social/@lapcatsoftware/114274008301633415"><p>Using Little Snitch, I discovered why Music app was pinwheeling for about 5 seconds every launch on macOS 15.4:</p><p>For some reason, it was waiting—on the main thread, naturally—for mobileactivationd to connect to humb.apple.com, which I was blocking in Little Snitch.</p><p>I allowed the connection once, and the problem is now solved, seemingly permanently.</p><p>According to Apple, humb.apple.com is used for “Device setup”.</p></blockquote>
<p id="macos-15-4-update-2025-04-07">Update (2025-04-07): <a href="https://mstdn.social/@nriley/114276026055827284">Nicholas Riley</a>:</p>
<blockquote cite="https://mstdn.social/@nriley/114276026055827284">
<p>Wow, macOS 15.4 is rough. Lost secondary click settings on my Magic Mouse, issues with App Store apps not recognizing prior purchases…</p>
</blockquote>
<p><a href="https://www.macintouch.com/post/46643/macos-15-4-vm-update-problem/">Ric Ford</a>:</p>
<blockquote cite="https://www.macintouch.com/post/46643/macos-15-4-vm-update-problem/">
<p>Adding one more problem to the list of issues with Apple’s latest software updates (with their critical <a href="https://www.macintouch.com/post/46427/apple-security-patches-mar-31-2025/">security patches</a>), <a href="https://eclecticlight.co/2025/04/04/apple-silicon-vms-struggle-to-update-to-sequoia-15-4/">Howard Oakley</a> reports that the macOS 15.4 update fails when attempted in a virtual machine.</p>
</blockquote>
<p><a href="https://c.im/@nickheer/114286108017824712">Nick Heer</a>:</p>
<blockquote cite="https://c.im/@nickheer/114286108017824712">
<p>Used to be if you were running an x.4 release (or later) instead of the y.0, you could be confident you were running a stable OS even if you were missing out on new features. But there is no longer that stability plateau. The OS never matures.</p>
</blockquote>
<p id="macos-15-4-update-2025-04-08">Update (2025-04-08): <a href="https://www.macintouch.com/post/46694/apple-intelligence-disabling-trick/">Ric Ford</a>:</p>
<blockquote cite="https://www.macintouch.com/post/46694/apple-intelligence-disabling-trick/">
<p>A MacInTouch reader emailed us about a neat trick for disabling Apple Intelligence (which he also posted in an online forum), and we confirmed that it works on a Mac running macOS 15.4.</p>
<blockquote><p>There is another ‘feature’ regarding Apple Intelligence: If the languages used for your Mac and Siri are <em><strong>not the same</strong></em>, there is <em><strong>no</strong></em> Apple Intelligence.</p></blockquote>
</blockquote>
<p><a href="https://eclecticlight.co/2025/04/06/last-week-on-my-mac-sequoia-spring/">Howard Oakley</a>:</p>
<blockquote cite="https://eclecticlight.co/2025/04/06/last-week-on-my-mac-sequoia-spring/">
<p>Although the 15.4 update wasn’t quite as large as 11.3, at 6.2 GB for Apple silicon, it has comfortably surpassed it in the number of vulnerabilities fixed, 131 in all, and came close to the size of the 15.0 upgrade at 6.6 GB. What’s most disappointing is that, while the first release of Sequoia merited long and detailed accounts of much of what had changed, for 15.4 there’s precious little information beyond its lengthy security release notes.</p>
</blockquote>
<p><a href="https://lapcatsoftware.com/articles/2025/4/1.html">Jeff Johnson</a> (<a href="https://mastodon.social/@lapcatsoftware/114297417376512811">Mastodon</a>):</p>
<blockquote cite="https://lapcatsoftware.com/articles/2025/4/1.html">
<p>More or less forever—I’ve tested all the way back to macOS High Sierra—the return value of the method <code>[NSURLComponents string]</code> was <code>https://example.org/</code> in this case. However, unfortunately, the return value is now <code>https%3A//example.org/</code> in macOS 15.4. For some reason, the <code>:</code> character has been percent-encoded. The new return value is not a valid URL, and thus Link Unshortener could not open it.</p>
</blockquote>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/31/macos-15-4/feed/</wfw:commentRss>
<slash:comments>4</slash:comments>
</item>
<item>
<title>macOS 14.7.5 and macOS 13.7.5</title>
<link>https://mjtsai.com/blog/2025/03/31/macos-14-7-5-and-macos-13-7-5/</link>
<comments>https://mjtsai.com/blog/2025/03/31/macos-14-7-5-and-macos-13-7-5/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Mon, 31 Mar 2025 20:49:09 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 13 Ventura]]></category>
<category><![CDATA[macOS 14 Sonoma]]></category>
<category><![CDATA[macOS Release]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47247</guid>
<description><![CDATA[macOS 14.7.5 (full installer, security): This update provides important security fixes and is recommended for all users. macOS 13.7.5 (full installer, security): This update provides important security fixes and is recommended for all users. Previously: macOS 14.7.4 and macOS 13.7.4]]></description>
<content:encoded><![CDATA[<p><a href="https://support.apple.com/en-us/109035">macOS 14.7.5</a> (<a href="https://swcdn.apple.com/content/downloads/40/16/082-11498-A_J7T1GLHFVZ/chr3rxmbukm8zmyun90r1gz1wodsaeuzda/InstallAssistant.pkg">full installer</a>, <a href="https://support.apple.com/en-us/122374">security</a>):</p>
<blockquote cite="https://support.apple.com/en-us/109035"><p>This update provides important security fixes and is recommended for all users.</p></blockquote>
<p><a href="https://support.apple.com/en-us/106337">macOS 13.7.5</a> (<a href="https://swcdn.apple.com/content/downloads/61/08/082-11327-A_JKF2NNDDY8/aaxgevztdm1i5v6q6xousfc44xa90ykmk0/InstallAssistant.pkg">full installer</a>, <a href="https://support.apple.com/en-us/122375">security</a>):</p>
<blockquote cite="https://support.apple.com/en-us/106337">
<p>This update provides important security fixes and is recommended for all users.</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/02/11/macos-14-7-4-and-macos-13-7-4/">macOS 14.7.4 and macOS 13.7.4</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/31/macos-14-7-5-and-macos-13-7-5/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>iOS 18.4 and iPadOS 18.4</title>
<link>https://mjtsai.com/blog/2025/03/31/ios-18-4-and-ipados-18-4/</link>
<comments>https://mjtsai.com/blog/2025/03/31/ios-18-4-and-ipados-18-4/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Mon, 31 Mar 2025 20:49:06 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[CarPlay]]></category>
<category><![CDATA[Emoji]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[iOS Release]]></category>
<category><![CDATA[iPadOS]]></category>
<category><![CDATA[iPadOS 18]]></category>
<category><![CDATA[iPadOS Release]]></category>
<category><![CDATA[Safari]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47245</guid>
<description><![CDATA[Juli Clover (no iOS/iPadOS release notes, security, enterprise, no developer): iOS 18.4 adds Priority notifications for Apple Intelligence-capable devices, showing you your most notification first. There’s a dedicated Apple Vision Pro app for Vision Pro owners, and a new Apple News Food feature for Apple News+ subscribers. There’s lots more quoted in her article, though […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.macrumors.com/2025/03/31/apple-releases-ios-18-4/">Juli Clover</a> (no <a href="https://support.apple.com/en-us/121161">iOS</a>/<a href="https://support.apple.com/en-us/121162">iPadOS</a> release notes, <a href="https://support.apple.com/en-us/122371">security</a>, <a href="https://support.apple.com/en-us/121158">enterprise</a>, no <a href="https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-18_3-release-notes">developer</a>):</p>
<blockquote cite="https://www.macrumors.com/2025/03/31/apple-releases-ios-18-4/"><p>iOS 18.4 adds Priority notifications for Apple Intelligence-capable devices, showing you your most notification first. There’s a dedicated Apple Vision Pro app for Vision Pro owners, and a new Apple News Food feature for Apple News+ subscribers.</p></blockquote>
<p>There’s lots more quoted in her article, though they do not yet appear on Apple’s site.</p>
<p>See also: <a href="https://www.macstories.net/news/apple-updates-its-oses-with-mail-parity-across-platforms-recipes-in-news-apple-intelligence-on-visionos-and-more/">John Voorhees</a>.</p>
<p><a href="https://blog.emojipedia.org/apple-ios-18-4-emoji-changelog/">Keith Broni</a>:</p>
<blockquote cite="https://blog.emojipedia.org/apple-ios-18-4-emoji-changelog/">
<p>Today Apple has officially debuted 8 new emoji designs within iOS 18.4, bringing the likes of a paint splatter, a harp, and a face with bags under its eyes to iPhones, iPads, and all other Apple devices across the world. Plus, Genmoji in the EU and a redesigned Syrian flag emoji.</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/11/ios-18-3-2-and-ipados-18-3-2/">iOS 18.3.2 and iPadOS 18.3.2</a></li>
</ul>
<p id="ios-18-4-and-ipados-18-4-update-2025-04-01">Update (2025-04-01): <a href="https://www.macrumors.com/2025/02/26/ios-18-4-safari-search-history/">Juli Clover</a>:</p>
<blockquote cite="https://www.macrumors.com/2025/02/26/ios-18-4-safari-search-history/">
<p>With iOS 18.4, Apple made a small tweak to Safari that could be polarizing because it puts your search history front and center. When you open up a new Safari tab and then tap into the search field, Safari shows your recent search history.</p>
</blockquote>
<p><a href="https://x.com/rjonesy/status/1906864653134688359">Ryan Jones</a>:</p>
<blockquote cite="https://x.com/rjonesy/status/1906864653134688359">
<p>iOS 18.4 headlines: new style in image playground, recipes in News+, and organization in Photos….</p>
<p>Priority notifications must not work well. Photos redesign must be on hotseat. Apple must still think image playgrounds isn’t terrible.</p>
</blockquote>
<p id="ios-18-4-and-ipados-18-4-update-2025-04-02">Update (2025-04-02): <a href="https://www.macrumors.com/guide/ios-18-4-features-2/">Juli Clover</a>:</p>
<blockquote cite="https://www.macrumors.com/guide/ios-18-4-features-2/">
<p>This guide covers everything new in iOS 18.4.</p>
</blockquote>
<p><a href="https://www.macintouch.com/post/46531/more-apple-update-follies/#more-46531">Ric Ford</a>:</p>
<blockquote cite="https://www.macintouch.com/post/46531/more-apple-update-follies/#more-46531"><p>And, <em>two days</em> later, Apple still hadn’t updated its <a href="https://support.apple.com/en-us/121161#a18.4">web pages</a> to acknowledge and document the iOS/iPadOS 18.4 updates.</p></blockquote>
<p><a href="https://www.macrumors.com/2025/04/02/ios-18-4-update-deleted-apps-returning/">Tim Hardwick</a>:</p>
<blockquote cite="https://www.macrumors.com/2025/04/02/ios-18-4-update-deleted-apps-returning/"><p>Several Reddit threads (<a href="https://www.reddit.com/r/ios/s/MwYoHRvTUy">1</a>,<a href="https://www.reddit.com/r/ios/s/7BCTZDM56x">2</a>,<a href="https://www.reddit.com/r/ios/s/4J2gl2nDUg">3</a>,<a href="https://www.reddit.com/r/ios/s/LhDkeudJnn">4</a>) and posts on <a href="https://discussions.apple.com/thread/256029403?sortBy=rank">Apple’s Community Support</a> pages over the last 24 hours are filled with reports from users who, after having updated to iOS 18.4, immediately discovered third-party apps and/or games installed on their device that were not there before. </p><p>Going on the reports, the iOS 18.4 update has manifested a bug that is causing apps to reappear – since in most cases it appears that the apps had been deleted by the users months or even years ago and long forgotten. </p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2024/05/20/ios-17-5-resurfacing-deleted-photos/">iOS 17.5 Resurfacing Deleted Photos</a></li>
</ul>
<p id="ios-18-4-and-ipados-18-4-update-2025-04-07">Update (2025-04-07): <a href="https://developer.apple.com/forums/thread/775660">neohoangokg</a> (via <a href="https://x.com/krzyzanowskim/status/1907308329682018800">Marcin Krzyzanowski</a>):</p>
<blockquote cite="https://developer.apple.com/forums/thread/775660">
<p>UITextView crash when setting attributed text that contains substring <code>ffi</code> and attributedText contains NSFontAttributeName, NSForegroundColorAttributeName</p>
</blockquote>
<p><a href="https://www.macintouch.com/post/46614/ios-18-4-causes-carplay-problems/">Ric Ford</a>:</p>
<blockquote cite="https://www.macintouch.com/post/46614/ios-18-4-causes-carplay-problems/"><p>Along with its other <a href="https://www.macintouch.com/post/46531/more-apple-update-follies/">quality problems</a>, iOS 18.4 (with its critical <a href="https://www.macintouch.com/post/46427/apple-security-patches-mar-31-2025/">security patches</a>) is breaking CarPlay, according to a number of reports, with no easy solution and no acknowledgement or promise of a fix for Apple’s bug, apparently confirmed by at least one car company.</p></blockquote>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/31/ios-18-4-and-ipados-18-4/feed/</wfw:commentRss>
<slash:comments>3</slash:comments>
</item>
<item>
<title>tvOS 18.4</title>
<link>https://mjtsai.com/blog/2025/03/31/tvos-18-4/</link>
<comments>https://mjtsai.com/blog/2025/03/31/tvos-18-4/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Mon, 31 Mar 2025 20:49:00 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[TV.app]]></category>
<category><![CDATA[tvOS]]></category>
<category><![CDATA[tvOS 18]]></category>
<category><![CDATA[tvOS Release]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47243</guid>
<description><![CDATA[Juli Clover (release notes, security, no developer): Apple shares full release notes for tvOS in its tvOS support document, which is updated after each new version of tvOS comes out. But all it says is “performance and stability improvements.” Previously: tvOS 18.3.1 Update (2025-04-02): Ryan Christoffel: At the top of the TV app’s interface, the […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.macrumors.com/2025/03/31/apple-releases-tvos-18-4/">Juli Clover</a> (<a href="https://support.apple.com/en-us/106336">release notes</a>, <a href="https://support.apple.com/en-us/122377">security</a>, no <a href="https://developer.apple.com/documentation/tvos-release-notes/tvos-18_3-release-notes">developer</a>):</p>
<blockquote cite="https://www.macrumors.com/2025/03/31/apple-releases-tvos-18-4/">
<p>Apple shares full release notes for tvOS <a href="https://support.apple.com/en-us/106336">in its tvOS support document</a>, which is updated after each new version of tvOS comes out.</p>
</blockquote>
<p>But all it says is “performance and stability improvements.”</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/11/tvos-18-3-1/">tvOS 18.3.1</a></li>
</ul>
<p id="tvos-18-4-update-2025-04-02">Update (2025-04-02): <a href="https://9to5mac.com/2025/03/31/tvos-18-4-now-available-with-new-design-changes-for-apple-tv-app/">Ryan Christoffel</a>:</p>
<blockquote cite="https://9to5mac.com/2025/03/31/tvos-18-4-now-available-with-new-design-changes-for-apple-tv-app/"><p>At the top of the TV app’s interface, the featured carousel has three noteworthy changes:</p><ol><li>there’s a large plus button for easily adding titles to your Watchlist</li><li>next to it is a big ‘i’ button for accessing a title’s information page</li><li>finally, details on a show’s release schedule is now a lot more prominent</li></ol></blockquote>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/31/tvos-18-4/feed/</wfw:commentRss>
<slash:comments>2</slash:comments>
</item>
<item>
<title>watchOS 11.4</title>
<link>https://mjtsai.com/blog/2025/03/31/watchos-11-4/</link>
<comments>https://mjtsai.com/blog/2025/03/31/watchos-11-4/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Mon, 31 Mar 2025 20:48:58 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[watchOS]]></category>
<category><![CDATA[watchOS 11]]></category>
<category><![CDATA[watchOS Release]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47241</guid>
<description><![CDATA[Ryan Christoffel (release notes, security, developer): After initially listing watchOS 11.4 on its website as released, the site has since been updated to remove the update. It’s unknown when it will return. Previously: watchOS 11.3.1 Update (2025-04-01): Juli Clover: Apple today released watchOS 11.4[…] With watchOS 11.4, Apple has added an option for a Sleep […]]]></description>
<content:encoded><![CDATA[<p><a href="https://9to5mac.com/2025/03/31/watchos-11-4-now-available-with-three-new-features-for-apple-watch/">Ryan Christoffel</a> (<a href="https://support.apple.com/en-us/121163">release notes</a>, <a href="https://support.apple.com/en-us/122376">security</a>, <a href="https://developer.apple.com/documentation/watchos-release-notes/watchos-11_4-release-notes">developer</a>):</p>
<blockquote cite="https://9to5mac.com/2025/03/31/watchos-11-4-now-available-with-three-new-features-for-apple-watch/">
<p>After initially listing watchOS 11.4 on its website as released, the site has since been updated to remove the update. It’s unknown when it will return.</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/02/11/watchos-11-3-1/">watchOS 11.3.1</a></li>
</ul>
<p id="watchos-11-4-update-2025-04-01">Update (2025-04-01): <a href="https://www.macrumors.com/2025/04/01/apple-releases-watchos-11-update/">Juli Clover</a>:</p>
<blockquote cite="https://www.macrumors.com/2025/04/01/apple-releases-watchos-11-update/"><p>Apple today released watchOS 11.4[…] With watchOS 11.4, Apple has added an option for a Sleep Wake Up alarm to break through Silent Mode, so you can have your Apple Watch make a sound in addition to haptic tapping when a morning alarm goes off. There’s also support for Matter-compatible robot vacuum cleaners in the Home app.</p></blockquote>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/31/watchos-11-4/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>visionOS 2.4</title>
<link>https://mjtsai.com/blog/2025/03/31/visionos-2-4/</link>
<comments>https://mjtsai.com/blog/2025/03/31/visionos-2-4/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Mon, 31 Mar 2025 20:48:54 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Apple Intelligence]]></category>
<category><![CDATA[visionOS]]></category>
<category><![CDATA[visionOS 2]]></category>
<category><![CDATA[visionOS Release]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47239</guid>
<description><![CDATA[Juli Clover (no release notes, security, developer, enterprise): The visionOS 2.4 update brings Apple Intelligence to the Vision Pro for the first time, putting it on par with the iPhone, iPad, and Mac. […] Along with Apple Intelligence, Apple added a Spatial Gallery app for the Vision Pro. The Spatial Gallery app offers a curated […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.macrumors.com/2025/03/31/apple-releases-visionos-2-4/">Juli Clover</a> (no <a href="https://support.apple.com/en-us/121164">release notes</a>, <a href="https://support.apple.com/en-us/122378">security</a>, <a href="https://developer.apple.com/documentation/visionos-release-notes/visionos-2_4-release-notes">developer</a>, <a href="https://support.apple.com/en-us/121160">enterprise</a>):</p>
<blockquote cite="https://www.macrumors.com/2025/03/31/apple-releases-visionos-2-4/">
<p>The visionOS 2.4 update brings Apple Intelligence to the Vision Pro for the first time, putting it on par with the iPhone, iPad, and Mac.</p>
<p>[…]</p>
<p>Along with Apple Intelligence, Apple added a Spatial Gallery app for the Vision Pro. The Spatial Gallery app offers a curated assortment of spatial videos, spatial photos, and panorama images from artists, filmmakers, and photographers. Apple plans to offer a range of content featuring sports, culture, arts, lifestyle, nature, travel, entertainment, and more.</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/11/visionos-2-3-2/">visionOS 2.3.2</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/31/visionos-2-4/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>audioOS 18.4</title>
<link>https://mjtsai.com/blog/2025/03/31/audioos-18-4/</link>
<comments>https://mjtsai.com/blog/2025/03/31/audioos-18-4/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Mon, 31 Mar 2025 20:48:40 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[audioOS]]></category>
<category><![CDATA[audioOS 18]]></category>
<category><![CDATA[audioOS Release]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47237</guid>
<description><![CDATA[Apple: This update includes performance and stability improvements. Previously: audioOS 18.3]]></description>
<content:encoded><![CDATA[<p><a href="https://support.apple.com/en-us/108045">Apple</a>:</p>
<blockquote cite="https://support.apple.com/en-us/108045">
<p>This update includes performance and stability improvements.</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/01/27/audioos-18-3/">audioOS 18.3</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/31/audioos-18-4/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>macOS 15.4 Adds TCC Events to Endpoint Security</title>
<link>https://mjtsai.com/blog/2025/03/28/macos-15-4-adds-tcc-events-to-endpoint-security/</link>
<comments>https://mjtsai.com/blog/2025/03/28/macos-15-4-adds-tcc-events-to-endpoint-security/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Fri, 28 Mar 2025 18:56:21 +0000</pubDate>
<category><![CDATA[Programming]]></category>
<category><![CDATA[Endpoint Security]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Malware]]></category>
<category><![CDATA[Transparency Consent and Control (TCC)]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47235</guid>
<description><![CDATA[Patrick Wardle (tweet): Since TCC is designed to protect these resources, it poses a challenge for malware that often tries to access them. Generally malware takes one of two approaches: exploiting TCC bugs, or obtaining explicit user permission access to the TCC protected item. The former is rather uncommon, while the latter is much more […]]]></description>
<content:encoded><![CDATA[<p><a href="https://objective-see.org/blog/blog_0x7F.html">Patrick Wardle</a> (<a href="https://x.com/patrickwardle/status/1905363186305335321">tweet</a>):</p>
<blockquote cite="https://objective-see.org/blog/blog_0x7F.html"><p>Since TCC is designed to protect these resources, it poses a challenge for malware that often tries to access them. Generally malware takes one of two approaches: exploiting TCC bugs, or obtaining explicit user permission access to the TCC protected item. The former is rather uncommon, while the latter is much more widespread as TCC can be trivially “circumvented” if the user acquiesces (sometimes as simply as clicking ‘Allow’ on a single TCC alert).</p><p>[…]</p><p>Since the majority of macOS malware circumvents TCC through explicit user approval, it would be incredibly helpful for any security tool to detect this — and possibly override the user’s risky decision. Until now the best (only?) option was to ingest log messages generated by the TCC subsystem.</p><p>[…]</p><p>In the macOS 15.4 SDK files, specifically <code>EndpointSecurity/ESTypes.h</code> we find a brand new Endpoint Security event: <code>ES_EVENT_TYPE_NOTIFY_TCC_MODIFY</code>[…]</p></blockquote>
<p>This sounds good for anti-malware software, but I still think we need basic APIs for apps to query, request, and reset the permissions they need.</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2024/10/21/tcc-and-gatekeeper-bypasses/">TCC and Gatekeeper Bypasses</a></li>
<li><a href="https://mjtsai.com/blog/2023/02/09/resetting-tcc/">Resetting TCC</a></li>
<li><a href="https://mjtsai.com/blog/2019/02/05/mojave-privacy-protection-aftermath/">Mojave Privacy Protection Aftermath</a></li>
<li><a href="https://mjtsai.com/blog/2018/09/10/mojaves-new-security-and-privacy-protections-face-usability-challenges/">Mojave’s New Security and Privacy Protections Face Usability Challenges</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/28/macos-15-4-adds-tcc-events-to-endpoint-security/feed/</wfw:commentRss>
<slash:comments>1</slash:comments>
</item>
<item>
<title>ChangeTheHeaders 1.0</title>
<link>https://mjtsai.com/blog/2025/03/28/changetheheaders-1-0/</link>
<comments>https://mjtsai.com/blog/2025/03/28/changetheheaders-1-0/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Fri, 28 Mar 2025 18:56:06 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[ChangeTheHeaders]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[iOS App]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[Mac App]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Safari]]></category>
<category><![CDATA[Safari Extensions]]></category>
<category><![CDATA[Web]]></category>
<category><![CDATA[WebP]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47233</guid>
<description><![CDATA[Jeff Johnson: ChangeTheHeaders is a Safari extension for iOS, iPadOS, macOS, and visionOS that allows you to customize HTTP request headers such as Accept, Accept-Language, Cookie, and User-Agent. ChangeTheHeaders is available now in the App Store. […]You might ask, why didn’t I just add this feature to StopTheMadness Pro? On macOS, StopTheMadness Pro is a […]]]></description>
<content:encoded><![CDATA[<p><a href="https://underpassapp.com/news/2025/3/4.html">Jeff Johnson</a>:</p>
<blockquote cite="https://underpassapp.com/news/2025/3/4.html"><a href="https://underpassapp.com/ChangeTheHeaders/">ChangeTheHeaders</a> is a Safari extension for iOS, iPadOS, macOS, and visionOS that allows you to customize HTTP request headers such as Accept, Accept-Language, Cookie, and User-Agent. ChangeTheHeaders is available now in the <a href="https://apps.apple.com/app/changetheheaders-for-safari/id6743129567">App Store</a>.
<p>[…]</p><p>You might ask, why didn’t I just add this feature to StopTheMadness Pro? On macOS, StopTheMadness Pro is a Safari app extension, but the API to modify HTTP headers is available only to Safari web extensions, unfortunately. This is the same reason that StopTheMadness Pro doesn’t currently support <a href="/news/2025/2/3.html">Safari web apps</a>.</p><p>[…]</p><p>What can you do with ChangeTheHeaders? I suspect the biggest selling point will be to spoof the User-Agent. The extension allows you to customize your User-Agent by URL domain. For example, you can make Safari pretend that it’s Chrome on Google web apps that give special treatment to Chrome. You can also customize the <a href="https://developer.mozilla.org/docs/Web/HTTP/Reference/Headers/Accept-Language">Accept-Language</a> header if you don’t like the default language handling of some website, such as YouTube. (Why is the problem on the web always Google?) Or if you just want to deprioritize WebP images in Safari, you can do that, of course. It’s a simple matter of removing <code>image/webp</code> from the list. You probably don’t want to stop WebP entirely, because it may be the only image type available on some websites, but if you remove <code>image/webp</code> from the Accept header, then it no longer has the default quality value of 1. Instead, <code>image/webp</code> would fall under the wildcard <code>image/*;q=0.8</code> specification, with a lower priority than explicit image types such as <code>image/png</code>. More information on how to configure ChangeTheHeaders is in <a href="https://underpassapp.com/ChangeTheHeaders/Popup.html">the fine manual.</a></p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/03/stopthemadness-for-safari-web-apps/">StopTheMadness for Safari Web Apps?</a></li>
<li><a href="https://mjtsai.com/blog/2024/09/13/stopthemadness-pro-9/">StopTheMadness Pro 9</a></li>
<li><a href="https://mjtsai.com/blog/2023/04/26/the-four-types-of-safari-extension/">The Four Types of Safari Extension</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/28/changetheheaders-1-0/feed/</wfw:commentRss>
<slash:comments>8</slash:comments>
</item>
<item>
<title>Controlling Launch Services in Sequoia</title>
<link>https://mjtsai.com/blog/2025/03/28/controlling-launch-services-in-sequoia/</link>
<comments>https://mjtsai.com/blog/2025/03/28/controlling-launch-services-in-sequoia/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Fri, 28 Mar 2025 18:55:57 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Launch Services]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Spotlight]]></category>
<category><![CDATA[System Preferences]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47231</guid>
<description><![CDATA[Howard Oakley: LaunchServices compiles a large registry database of apps and their associations with and capabilities for handling different document types. Its records determine which app opens a document when you double-click on its icon in the Finder, and most prominently which are listed when you open the Open With… item in the Finder’s contextual […]]]></description>
<content:encoded><![CDATA[<p><a href="https://eclecticlight.co/2025/03/27/controlling-launchservices-in-macos-sequoia/">Howard Oakley</a>:</p>
<blockquote cite="https://eclecticlight.co/2025/03/27/controlling-launchservices-in-macos-sequoia/"><p>LaunchServices compiles a large registry database of apps and their associations with and capabilities for handling different document types. Its records determine which app opens a document when you double-click on its icon in the Finder, and most prominently which are listed when you open the <strong>Open With…</strong> item in the Finder’s contextual menu. Apps are registered there automatically, and their details are updated each time they’re run. Although the user can’t interact directly with LaunchServices, there is a command tool that offers control over it, <code>lsregister</code>, although it’s buried deep in the system frameworks, doesn’t have a <code>man</code> page, and now works differently.</p><p>[…]</p><p>In the past, apps used to populate the LaunchServices registry were those located in the traditional Applications folders, but recent versions of macOS have extended that to cover almost any accessible folder. This has been <a href="https://lapcatsoftware.com/articles/2023/10/4.html">explored by Jeff Johnson</a>, who has shown that excluding folders and volumes from Spotlight indexing, by adding them to the list in <strong>Search Privacy…</strong> in Spotlight settings, will exclude those apps from LaunchServices’ list.</p><p>[…]</p><p>Running [<code>lsregister -kill</code>] in recent versions of macOS including Sequoia is likely to wreak havoc, though. While this appears to be effective with the <strong>Open With…</strong> list, its effects on System Settings can be catastrophic. This can remove its entire contents, and even blow the wallpaper away. Normal function should start to return after restarting the Mac, but even then problems can persist.</p></blockquote>
<p>See also: Oakley’s posts on <a href="https://eclecticlight.co/2023/10/14/launchservices-problems-and-ventura/">Ventura</a> and <a href="https://eclecticlight.co/2023/10/11/launchservices-problems-in-sonoma-14-0/">Sonoma</a>.</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2023/07/20/fixing-launch-services-problems/">Fixing Launch Services Problems</a></li>
<li><a href="https://mjtsai.com/blog/2020/07/20/launch-services-browser-2-1/">Launch Services Browser 2.1</a></li>
<li><a href="https://mjtsai.com/blog/2013/04/23/rebuilding-the-launch-services-database/">Rebuilding the Launch Services Database</a></li>
</ul>
<p id="controlling-launch-services-in-sequoia-update-2025-04-02">Update (2025-04-02): <a href="https://eclecticlight.co/2025/03/30/last-week-on-my-mac-bring-back-the-magic/">Howard Oakley</a>:</p>
<blockquote cite="https://eclecticlight.co/2025/03/30/last-week-on-my-mac-bring-back-the-magic/"><p>Recognising that we often want to open a document using a different app rather than the default, the Finder’s contextual menu offers a list of suitable apps in its <strong>Open With</strong> command. That list is built and maintained by LaunchServices, and has changed in recent versions of macOS. Whereas those lists used to consist of apps installed in the traditional Application folders, LaunchServices now scours every accessible volume and folder using Spotlight’s indexes to build the biggest lists possible. If you happen to have an old copy of an app tucked away in a dusty corner, LaunchServices will find it and proudly display it alongside those in everyday use, like a game dog triumphantly presenting not one dead pheasant but every one from miles around.</p><p>[…]</p><p>Unfortunately, there’s no lasting way to block unwanted apps from being added to the list LaunchServices builds for this <strong>Open With</strong> feature. You can gain temporary relief by excluding them from Spotlight search, but should you ever open the folder they’re in using the Finder, those are all added back. This also afflicts apps in folders shared with a Virtual Machine, where the list includes App Store apps that can’t even be run from within that VM.</p><p>[…]</p><p>[Why] not empower me to determine which of those 70 apps should be offered in the <strong>Open With</strong> list? This is such a radical idea that it used to be possible with the <code>lsregister</code> command that has become progressively impotent, as LaunchServices has cast its net further in quest of more apps to flood me with.</p></blockquote>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/28/controlling-launch-services-in-sequoia/feed/</wfw:commentRss>
<slash:comments>1</slash:comments>
</item>
<item>
<title>Apple Needs a Snow Sequoia</title>
<link>https://mjtsai.com/blog/2025/03/28/apple-needs-a-snow-sequoia/</link>
<comments>https://mjtsai.com/blog/2025/03/28/apple-needs-a-snow-sequoia/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Fri, 28 Mar 2025 18:54:24 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Apple Mail]]></category>
<category><![CDATA[Apple Software Quality]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[Mac OS X 10.6 Snow Leopard]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Messages.app]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47228</guid>
<description><![CDATA[Timothy R. Butler (Hacker News, Slashdot): The latest releases — MacOS Sequoia and iOS/iPadOS 18 — are screaming for such a reset. Yes, they work and are still smoother and less glitchy than Windows 11, but they feel like software developed by people who don’t actually use that software. In the 22 years since I […]]]></description>
<content:encoded><![CDATA[<p><a href="https://reviews.ofb.biz/safari/article/1300.html">Timothy R. Butler</a> (<a href="https://news.ycombinator.com/item?id=43498984">Hacker News</a>, <a href="https://apple.slashdot.org/story/25/03/28/0634230/apple-needs-a-snow-sequoia">Slashdot</a>):</p>
<blockquote cite="https://reviews.ofb.biz/safari/article/1300.html"><p>The latest releases — MacOS Sequoia and iOS/iPadOS 18 — are <em>screaming</em> for such a reset. Yes, they work and are still smoother and less glitchy than Windows 11, but they feel like software developed by people who don’t actually use that software. In the 22 years since I became <a href="https://en.wikipedia.org/wiki/Switch_(advertising_campaign)">a “switcher”</a>, this is the worst state I can remember Apple’s platforms being in.</p><p>Some bugs are inevitable with major releases, sure. The troubling aspect is that many are easily reproducible across devices and show up in high-traffic areas, not just forgotten nooks. <em>How do Apple’s engineers not notice these problems?</em></p><p>[…]</p><p>A year focused on cleaning up these and a thousand similar issues big and small is the single step Apple could take that would most enhance its products.</p></blockquote>
<p><a href="https://taoofmac.com/space/links/2025/03/28/0644">Rui Carmo</a>:</p>
<blockquote cite="https://taoofmac.com/space/links/2025/03/28/0644"><p>The whole situation shines a… Spotlight (ha!) into frustrations about a platform that seems to become more and more brittle to the point of actively neglecting the basics it rose to prominence on.</p><p>Yes, there will always be a bit of rose-tinted longing for the methodical, almost surgical improvements of the Jobs era. But I honestly have no idea <a href="https://taoofmac.com/space/blog/2025/03/14/1830">how Apple can keep pushing AI features without cleaning house</a>, and whatever they’re doing in the platform teams just isn’t working.</p></blockquote>
<p><a href="https://pxlnv.com/linklog/myth-of-snow-leopard/">Nick Heer</a>:</p>
<blockquote cite="https://pxlnv.com/linklog/myth-of-snow-leopard/">
<p>What I desperately miss is that period of stability after a few rounds of bug fixes. As I have <a href="https://pxlnv.com/linklog/macos-sonoma-compatibility/">previously complained about</a>, my iMac cannot run any version of MacOS newer than Ventura, released in 2022. It is <a href="https://support.apple.com/en-ca/106337">still getting bug and security fixes</a>. In theory, this should mean I am running a solid operating system despite missing some features.</p>
<p>It is not. Apple’s engineering efforts quickly moved toward shipping MacOS Sonoma in 2023, and then Sequoia last year. It seems as though any bug fixes were folded into these new major versions and, even worse, <em>new</em> bugs were introduced late in the Ventura release cycle that have no hope of being fixed. My iMac <a href="https://pxlnv.com/linklog/2023-report-card/">seizes up</a> when I try to view HDR media; because this Extended Dynamic Range is an <a href="https://pxlnv.com/linklog/extended-dynamic-range/">undocumented enhancement</a>, there is no preference to turn it off. Recent Safari releases have contained several bugs related to page rendering and scrolling. Weather sometimes does not display for my current location.</p>
<p>[…]</p>
<p>Ventura was by no means bug-free when it shipped, and I am disappointed even its final form remains a mess.</p>
</blockquote>
<p><a href="https://birchtree.me/blog/the-snow-leopard-weve-built-up-in-our-heads/">Matt Birchler</a>:</p>
<blockquote cite="https://birchtree.me/blog/the-snow-leopard-weve-built-up-in-our-heads/"><p>Snow Leopard would receive 8 updates over the next 2 years before its successor (Lion) was released, and I think that Snow Leopard 10.6.8 is what most people have in their minds as what Snow Leopard was from the start. Imagine if Apple released an update and sent 2 years refining it over and over, instead of what feels like getting it out in the fall and then immediately shifting focus to the next year’s update. On the other hand, do you want the Mac to lag behind iOS in terms of features?</p></blockquote>
<p>iOS could use a Snow Leopard, too.</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/25/error-702-installing-macos-on-an-external-drive/">Error 702 Installing macOS on an External Drive</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/13/rumored-redesign-in-ios-19-and-macos-16/">Rumored Redesign in iOS 19 and macOS 16</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/13/rotten/">Rotten</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/04/linus-sebastian-switches-to-iphone-for-30-days/">Linus Sebastian Switches to iPhone for 30 Days</a></li>
<li><a href="https://mjtsai.com/blog/2024/09/04/snow-leopard-at-15/">Snow Leopard at 15</a></li>
<li><a href="https://mjtsai.com/blog/2023/11/16/the-myth-and-reality-of-mac-os-x-snow-leopard/">The Myth and Reality of Mac OS X Snow Leopard</a></li>
<li><a href="https://mjtsai.com/blog/2022/05/11/problems-with-promotion-oriented-cultures/">Problems With Promotion-Oriented Cultures</a></li>
<li><a href="https://mjtsai.com/blog/2022/03/23/incentives-in-product-design-and-development/">Incentives in Product Design and Development</a></li>
<li><a href="https://mjtsai.com/blog/2021/02/22/a-retrospective-look-at-mac-os-x-snow-leopard/">A Retrospective Look at Mac OS X Snow Leopard</a></li>
<li><a href="https://mjtsai.com/blog/2020/10/02/quality-management-in-apples-system-updates-over-time/">Quality Management in Apple’s System Updates Over Time</a></li>
<li><a href="https://mjtsai.com/blog/2020/03/16/the-pace-of-macos-updates/">The Pace of macOS Updates</a></li>
<li><a href="https://mjtsai.com/blog/2018/01/30/apple-delays-features-to-focus-on-reliability-performance/">Apple Delays Features to Focus on Reliability, Performance</a></li>
<li><a href="https://mjtsai.com/blog/2017/11/29/why-little-bugs-need-to-get-fixed/">Why Little Bugs Need to Get Fixed</a></li>
<li><a href="https://mjtsai.com/blog/2015/02/10/snowsemite/">Snowsemite</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/28/apple-needs-a-snow-sequoia/feed/</wfw:commentRss>
<slash:comments>28</slash:comments>
</item>
<item>
<title>SuperDuper 3.10 Beta Works Around asr Bug</title>
<link>https://mjtsai.com/blog/2025/03/27/superduper-3-10-beta-works-around-asr-bug/</link>
<comments>https://mjtsai.com/blog/2025/03/27/superduper-3-10-beta-works-around-asr-bug/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Thu, 27 Mar 2025 20:08:41 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Backup]]></category>
<category><![CDATA[Bug]]></category>
<category><![CDATA[Kernel Extensions]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[Mac App]]></category>
<category><![CDATA[macOS 13 Ventura]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[SuperDuper]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47221</guid>
<description><![CDATA[Dave Nanian (Mastodon): Since a given APFS container can hold multiple copies of the OS, Preboot and Recovery have folder structures that include UUIDs corresponding to the volume that “owns” that part of their shared volumes in the group. Inside that UUID-named folder are the files that “pair” with the system you’re trying to boot.In […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.shirtpocket.com/blog/index.php/shadedgrey/comments/improving_boot_on_ventura_and_later/">Dave Nanian</a> (<a href="https://mas.to/@dnanian/114225533550466156">Mastodon</a>):</p>
<blockquote cite="https://www.shirtpocket.com/blog/index.php/shadedgrey/comments/improving_boot_on_ventura_and_later/"><p>Since a given APFS container can hold multiple copies of the OS, Preboot and Recovery have folder structures that include UUIDs corresponding to the volume that “owns” that part of their shared volumes in the group. Inside that UUID-named folder are the files that “pair” with the system you’re trying to boot.</p><p>In Ventura and later, for some reason, one set of Cryptexes <strong>also</strong> appear <strong>outside</strong> this structure, at the top of Preboot.</p><p>[…]</p><p>On top of that, <code>asr</code> didn’t (and doesn’t) copy the Cryptexes. So we thought “well, there’s got to be a reason for this; they’re probably generating and grafting the right folder during the boot process”. And, indeed, that’s what it does.</p>
</blockquote>
<p>But only sometimes.</p>
<blockquote cite="https://www.shirtpocket.com/blog/index.php/shadedgrey/comments/improving_boot_on_ventura_and_later/">
<p>Those extensions are necessary for some things I run, but they seem to interfere with boot. On the “plain” systems, you don’t even need the “root level” Cryptexes folder and yet it boots (using, I assume, the existing Cryptexes inside the UUID-based folder). But on others, you absolutely do need them at the top of Preboot, or you get a kernel panic.</p><p>[…]</p><p>We’ve decided to not wait for <code>asr</code> to be fixed by TBTB. […] Instead, to improve bootability, and save user’s time (not to mention sanity), we’re decided to copy over the Cryptexes to the root of Preboot.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/01/27/macos-15-3/">macOS 15.3</a></li>
<li><a href="https://mjtsai.com/blog/2024/12/16/macos-15-2-breaks-bootable-backups/">macOS 15.2 Breaks Bootable Backups</a></li>
<li><a href="https://mjtsai.com/blog/2024/06/20/superduper-3-9-beta/">SuperDuper 3.9 Beta</a></li>
<li><a href="https://mjtsai.com/blog/2022/12/05/mac-cryptexes/">Mac Cryptexes</a></li>
</ul>
<p id="superduper-3-10-beta-works-around-asr-bug-update-2025-04-10">Update (<a href="#superduper-3-10-beta-works-around-asr-bug-update-2025-04-10">2025-04-10</a>): <a href="https://www.shirtpocket.com/blog/index.php/shadedgrey/wgth_ssds_redux/">Dave Nanian</a>:</p>
<blockquote cite="https://www.shirtpocket.com/blog/index.php/shadedgrey/wgth_ssds_redux/">
<p>People who are having trouble are typically using slow destination devices. If they're too slow, not only does the boot process take a very long time, it can fail due to kernel watchdog timeout errors. (It's quite clear that these watchdogs are expecting fast storage operation.)</p>
</blockquote>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/27/superduper-3-10-beta-works-around-asr-bug/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>Double-Tap Kindle to Turn Page</title>
<link>https://mjtsai.com/blog/2025/03/27/double-tap-kindle-to-turn-page/</link>
<comments>https://mjtsai.com/blog/2025/03/27/double-tap-kindle-to-turn-page/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Thu, 27 Mar 2025 20:08:34 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Kindle]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47219</guid>
<description><![CDATA[Andrew Liszewski: Amazon has released a software update for the current-generation Colorsoft and Paperwhite that lets you double-tap on the sides or back of your Kindle to turn the page. The new feature, as spotted by The eBook Reader, is listed in the release notes for the 5.18.1 update and can be found in Settings […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.theverge.com/news/636726/amazon-kindle-paperwhite-colorsoft-update-double-tap-turn-pages">Andrew Liszewski</a>:</p>
<blockquote cite="https://www.theverge.com/news/636726/amazon-kindle-paperwhite-colorsoft-update-double-tap-turn-pages"><p>Amazon has released a software update for the current-generation <a href="https://www.theverge.com/24303322/amazon-kindle-colorsoft-e-reader-review">Colorsoft</a> and <a href="https://www.theverge.com/24326185/amazon-kindle-paperwhite-signature-edition-2024-e-reader-review">Paperwhite</a> that lets you double-tap on the sides or back of your Kindle to turn the page. The new feature, as spotted by <a href="https://blog.the-ebook-reader.com/2025/03/26/kindle-software-update-5-18-1-released-with-unusual-new-feature/"><em>The eBook Reader</em></a>, is listed in the <a href="https://www.amazon.com/gp/help/customer/display.html?nodeId=GKMQC26VQQMM8XSW&ref_=hp_201733150_Kindle-E-Reader-Software-Updat&tag=theverge02-20">release notes for the 5.18.1 update</a> and can be found in Settings > Device Options.</p><p>[…]</p><p>The feature works well using relatively light taps anywhere on the Colorsoft, and since it requires two taps in rapid succession, it’s not easy to trigger by mistake. Unfortunately, it’s limited to just one direction. You can either use it to jump to the next page, or scroll down a long list of books. Perhaps a future update will enable triple-taps as a way to scroll up or go back to a previous page.</p></blockquote>
<p>Sounds like a great idea, but hopefully it works more reliably than iOS’s <a href="https://support.apple.com/en-us/111772">Back Tap</a>.</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/02/26/amazon-removes-direct-downloads-of-kindle-books/">Amazon Removes Direct Downloads of Kindle Books</a></li>
<li><a href="https://mjtsai.com/blog/2024/10/17/kindle-colorsoft-and-2024-updates/">Kindle Colorsoft and 2024 Updates</a></li>
<li><a href="https://mjtsai.com/blog/2021/12/03/triple-tap-to-capture-from-omnifocus/">Triple Tap to Capture From OmniFocus</a></li>
<li><a href="https://mjtsai.com/blog/2020/12/10/upgrading-from-an-iphone-xr-to-an-iphone-12-mini/">Upgrading From an iPhone XR to an iPhone 12 mini</a></li>
<li><a href="https://mjtsai.com/blog/2020/08/27/ios-14-hidden-features/">iOS 14 Hidden Features</a></li>
<li><a href="https://mjtsai.com/blog/2020/07/01/upgrade-inteviews-bob-borchers-and-ronak-shah/">Upgrade Interviews Bob Borchers and Ronak Shah</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/27/double-tap-kindle-to-turn-page/feed/</wfw:commentRss>
<slash:comments>4</slash:comments>
</item>
<item>
<title>Google Moves Android Development to Internal Branches</title>
<link>https://mjtsai.com/blog/2025/03/27/google-moves-android-development-to-internal-branches/</link>
<comments>https://mjtsai.com/blog/2025/03/27/google-moves-android-development-to-internal-branches/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Thu, 27 Mar 2025 20:08:12 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Android]]></category>
<category><![CDATA[Google]]></category>
<category><![CDATA[Open-source Software]]></category>
<category><![CDATA[Programming]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47217</guid>
<description><![CDATA[Ben Schoon (via Hacker News): The Android Open Source Project (AOSP) has left most of Google’s work in developing Android as an operating system visible to the public eye. But, starting next week, Google is moving that work behind closed doors.Google confirmed to Android Authority that “all Android development will occur within Google’s internal branches,” […]]]></description>
<content:encoded><![CDATA[<p><a href="https://9to5google.com/2025/03/26/google-android-aosp-developement-private/">Ben Schoon</a> (via <a href="https://news.ycombinator.com/item?id=43484927">Hacker News</a>):</p>
<blockquote cite="https://9to5google.com/2025/03/26/google-android-aosp-developement-private/"><p>The Android Open Source Project (AOSP) has left most of Google’s work in developing Android as an operating system visible to the public eye. But, starting next week, Google is moving that work behind closed doors.</p><p>Google confirmed to <em><a href="https://www.androidauthority.com/google-android-development-aosp-3538503/">Android Authority</a></em> that “all Android development will occur within Google’s internal branches,” the publication says. This is a shift from how Android has been developed for a very long time, but also aligns with more recent moves Google has been making.</p></blockquote>
<p><a href="https://www.androidauthority.com/google-android-development-aosp-3538503/">Mishaal Rahman</a>:</p>
<blockquote cite="https://www.androidauthority.com/google-android-development-aosp-3538503/"><p>Because Google develops large portions of Android in its internal branch, the public AOSP branch often lags far behind what’s available privately. This difference is apparent when comparing feature and API availability between a clean AOSP build and Google’s latest <a href="https://www.androidauthority.com/android-16-features-3484159/">Android 16</a> beta, which was built from its internal branch. While the shift to <a href="https://www.androidauthority.com/android-trunk-stable-explained-3495640/">trunk-based development</a> reduced this discrepancy, it persists and continues to pose challenges for Google.</p><p>This discrepancy forces Google to spend time and effort merging patches between the public AOSP branch and its internal branch. Due to how different the branches are, merge conflicts often arise.</p><p>[…]</p><p>External developers who enjoy reading or contributing to AOSP will likely be dismayed by this news, as it reduces their insight into Google’s development efforts. Without a GMS license, contributing to Android OS development becomes more challenging, as the available code will consistently lag behind by weeks or months. This news will also make it more challenging for some developers to keep up with new Android platform changes, as they’ll no longer be able to track changes in AOSP.</p></blockquote>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/27/google-moves-android-development-to-internal-branches/feed/</wfw:commentRss>
<slash:comments>2</slash:comments>
</item>
<item>
<title>The Future of Swift Serialization and Deserialization APIs</title>
<link>https://mjtsai.com/blog/2025/03/26/the-future-of-swift-serialization-and-deserialization-apis/</link>
<comments>https://mjtsai.com/blog/2025/03/26/the-future-of-swift-serialization-and-deserialization-apis/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Wed, 26 Mar 2025 19:50:22 +0000</pubDate>
<category><![CDATA[Programming]]></category>
<category><![CDATA[Cocoa]]></category>
<category><![CDATA[JSON]]></category>
<category><![CDATA[Language Design]]></category>
<category><![CDATA[Macros]]></category>
<category><![CDATA[Optimization]]></category>
<category><![CDATA[Swift Codable]]></category>
<category><![CDATA[Swift Programming Language]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47214</guid>
<description><![CDATA[Kevin Perry: It’s clear from community adoption and feedback that Codable has had a lot of success in the years since it was added to Swift 4, but that it doesn’t satisfy some important needs. One of the foremost of those needs is performance more in line with programming environments that compete with Swift. As […]]]></description>
<content:encoded><![CDATA[<p><a href="https://forums.swift.org/t/the-future-of-serialization-deserialization-apis/78585">Kevin Perry</a>:</p>
<blockquote cite="https://forums.swift.org/t/the-future-of-serialization-deserialization-apis/78585"><p>It’s clear from community adoption and feedback that <code>Codable</code> has had a lot of success in the years since it was added to Swift 4, but that it doesn’t satisfy some important needs. One of the foremost of those needs is performance more in line with programming environments that compete with Swift. As such, the main goal for this effort is to unlock higher levels of performance during both serialization and deserialization without sacrificing the ease of use that <code>Codable</code> provides.</p><p>[…]</p><p>Even with all of its strengths, the existing API’s design has some unavoidable performance penalties. For instance, its use of existentials implies additional runtime and memory costs as existential values are boxed, unboxed, retained, released, and dynamic dispatch is performed.</p><p>Also, because a client can decode dictionary values in arbitrary orders, a <code>KeyedDecodingContainer</code> is effectively required to proactively parse the payload into some kind of intermediate representation, necessitating allocations for internal temporary dictionaries, and <code>String</code> values.</p><p>[…]</p><p>In Swift, when a client needs to do more than just alter the default <code>CodingKey</code> representations, developers are often faced with a large cliff where they’re forced to manually replicate the whole <code>Codable</code> implementation just to do so.</p><p>[…]</p><p>In this new design I aim to leverage Swift’s macro features to meet or exceed Serde’s level of support for customization of synthesized conformances. Moving code synthesis from the compiler to a macro will enable us to use attribute-like macros as targeted customization mechanisms, which was not something we could easily accomplish with the compiler-based <code>Codable</code> synthesis.</p><p>[…]</p><p>There is no <code>encode(_: Date)</code> function present in the <code>Encoder</code> interface, which means <code>PropertyListEncoder</code> has to <a href="https://github.com/swiftlang/swift-foundation/blob/be44158fd9cbfd4a39ae1d671ad912afd2207567/Sources/FoundationEssentials/PropertyList/XMLPlistEncodingFormat.swift#L478">attempt to dynamically cast</a> every <code>some Encodable</code> type it receives to <code>Date</code> in order to handle these natively. This helps keep the <code>Encodable</code> type format-agnostic, but it has a negative impact on performance, even if you never actually encode any <code>Date</code>s.</p><p>I believe that fully and formally embracing format-specialization where appropriate is the best solution to this problem. Specifically, we should encourage each serialization format that has native support for data types that aren’t represented in the format-agnostic interface to produce its own protocol variant that includes explicit support for these types, e.g. <code>JSONCodable</code> or <code>PropertyListCodable</code>.</p></blockquote>
<p><a href="https://forums.swift.org/t/the-future-of-serialization-deserialization-apis/78585/10">Dave DeLong</a> (<a href="https://mastodon.social/@davedelong/114181020726588694">Mastodon</a>):</p>
<blockquote cite="https://forums.swift.org/t/the-future-of-serialization-deserialization-apis/78585/10"><p>One of the big flaws of <code>Codable</code> is that it was built on the wrong abstraction. 99.9% of the time, developers who are interested in serializing a struct to data and back are doing so to a single, well-known format. However, the <code>Codable</code> API was built so that the abstraction point is the encoder itself, under the assumption that you would want to serialize a type to <em>multiple</em> formats. This is not the case.</p><p>That design flaw has been the #1 source of Codable’s woes. It makes properly implementing custom coders almost impossible; no one implements <code>superEncoder</code> properly, since most people don’t deal with inheritance of reference types, and some formats are fundamentally incompatible with the Encoder/Decoder APIs. (XML and CSV are two that spring to mind off the top of my head)</p><p>[…]</p><p>IMO we should be encouraging packages that provide format-specific coders (<code>JSONCodable</code>, <code>PlistCodable</code>, <code>CSVCodable</code>, <code>XMLCodable</code>, etc) so that each encoder and decoder can provide format-specific functionality. Then we should provide a system level API to ask types to encode into an <em>opaque</em> format (ie “please turn yourself into a <code>Data</code> and back again”).</p><p>[…]</p><p>Foundation should provide an updated replacement for <code>NSCoding</code> and leave the type-specific encoders to type-specific packages to implement.</p></blockquote>
<p><a href="https://forums.swift.org/t/the-future-of-serialization-deserialization-apis/78585/33">Kevin Perry</a>:</p>
<blockquote cite="https://forums.swift.org/t/the-future-of-serialization-deserialization-apis/78585/33"><p><code>JSONCodable</code>, <code>PlistCodable</code>, etc. should have full freedom to craft their interface around each format’s individuals needs and specialities.</p><p>At one stage, the “format specialized” protocols was the entirety of the design. However, while looking at adoption scenarios, I realized that this design presented a problem with “currency” types that are owned by frameworks/libraries, but used by application-level serializable types.</p>
<p>[…]</p>
<p>Hence the introduction of the format-agnostic protocols in parallel with the format-specialized ones. <code>Range</code> and <code>CGRect</code> can, in similar fashion to <code>Codable</code>, describe their serializable members abstractly, allowing a specific encoder/decoder to interpret those instructions. The difference from <code>Codable</code> being that we avoid all the OTHER downsides of <code>Codable</code> the OP describes.</p></blockquote>
<p><a href="https://forums.swift.org/t/the-future-of-serialization-deserialization-apis/78585/37">Dave DeLong</a>:</p>
<blockquote cite="https://forums.swift.org/t/the-future-of-serialization-deserialization-apis/78585/37"><p>That’s why I’m suggesting that we split the API to support the cases separately. We have one API that can be very general and support the whole “A type can be serialized to an opaque format” use-case, and then packages to support particular formats and all of their respective idiosyncrasies. I think we’d be repeating past mistakes to try and make those two use cases be the <em>same</em> API again.</p></blockquote>
<p><a href="https://forums.swift.org/t/the-future-of-serialization-deserialization-apis/78585/13">Lincoln Wu</a>:</p>
<blockquote cite="https://forums.swift.org/t/the-future-of-serialization-deserialization-apis/78585/13"><p>I think there’s one common use case which is not covered by the current <code>Codable</code> design: heterogeneous/dynamic decoding/encoding.</p><p>Many times in my developing, I wanted to decode part of a json into an intermediate representation, and later further decode that thing into a specific type.</p></blockquote>
<p><a href="https://forums.swift.org/t/the-future-of-serialization-deserialization-apis/78585/17">Matt Gallagher</a>:</p>
<blockquote cite="https://forums.swift.org/t/the-future-of-serialization-deserialization-apis/78585/17">
<p>The problem with <code>Codable</code> – and what I think you’re getting at when you suggest we need <code>JSONCodable</code>/<code>PlistCodable</code> – is there’s no sane custom implementation of <code>init(from:)</code> and <code>encode(to:)</code> without being archive-specific. These functions are generally a mashup of two different ideas:</p>
<ol>
<li>migration and versioning</li>
<li>archive-specific choices like which fields to include and what order</li>
</ol>
<p>But moreover, while you might make archive-specific choices, you don’t always have archive-specific knowledge.</p>
<p>[…]</p>
<p>We have no lookahead. We can’t peek to see if the next char is a double-quote, a digit or a bracket. Without overloading the <code>Decoder</code> to emit lookahead metadata as decodable types, you simply need to try each possibility, in turn, incurring the overhead and disruption of thrown errors.</p>
</blockquote>
<p><a href="https://forums.swift.org/t/the-future-of-serialization-deserialization-apis/78585">Kevin Perry</a>:</p>
<blockquote cite="https://forums.swift.org/t/the-future-of-serialization-deserialization-apis/78585"><p>This design does not include support for encoding and decoding cyclical objects graphs. Relatedly, there’s still no intention to include encoding of runtime type information in serialization formats for any purpose—all concrete types must be specified by the client doing the encoding or decoding.</p></blockquote>
<p><a href="https://forums.swift.org/t/the-future-of-serialization-deserialization-apis/78585/20">Nick Lockwood</a>:</p>
<blockquote cite="https://forums.swift.org/t/the-future-of-serialization-deserialization-apis/78585/20"><p>I was really disappointed to see this, because these are probably my two major pain points with <code>Codable</code>.</p><p>If we are going to the trouble of making a brand new, backwards-incompatible replacement for <code>Codable</code> then it should try to correct all the major deficiencies of the existing design, not just performance.</p><p><code>NSCoding</code> (for all its faults) supports both or heterogeneous data and cyclical references. If this new system doesn’t support those then we are saying from the outset that it is still isn’t going to be capable of dealing with a lot of real-world use-cases.</p><p>[…]</p><p>Also (related) some kind of built-in support for schema updates and migrations (similar to CoreData/SwiftData) would be a great feature, as this is another pain point in Codable.</p><p>Even just a way to specify a default value for new non-optional properties would reduce a lot of the need for adding manual decoder implementations to apps in post-1.0 releases.</p></blockquote>
<p><a href="https://mastodon.social/@helge/114185459437518079">Helge Heß</a>:</p>
<blockquote cite="https://mastodon.social/@helge/114185459437518079">
<p><code>NSCoder</code>/<code>NSArchiver</code> was actually pretty good for what it was intended for, archiving object graphs. How can I do that today? SwiftData? 🙈</p>
</blockquote>
<p><a href="https://forums.swift.org/t/the-future-of-serialization-deserialization-apis/78585/40">Nick Lockwood</a>:</p>
<blockquote cite="https://forums.swift.org/t/the-future-of-serialization-deserialization-apis/78585/40"><p>Another issue I’ve run into with <code>Codable</code> is that a given object may have more than one serialized representation in a given application.</p></blockquote>
<p><a href="https://forums.swift.org/t/the-future-of-serialization-deserialization-apis/78585/46">Zev Eisenberg</a>:</p>
<blockquote cite="https://forums.swift.org/t/the-future-of-serialization-deserialization-apis/78585/46"> I’d like to put in a request to please consider <strong>error handling</strong>. A common source of grief for beginners is difficulty in reading the error messages thrown by Codable. Some information is missing, and it’s formatted such that you really have to do some digging to understand it.</blockquote>
<p><a href="https://mastodon.social/@helge/114185578351988532">Helge Heß</a>:</p>
<blockquote cite="https://mastodon.social/@helge/114185578351988532"><p>It seems the new macro based approach will solve some major performance problems 👍 But it doesn’t seem to address what makes serialisation actually hard: different formats, mappings, versioning and preservation. It still seems to be bonusware, w/ “now it does the demos fast”, not something addressing actual serialisation issues.
Think Protobuf, that does.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/19/lifetime-dependencies-in-swift-6-2-and-beyond/">Lifetime Dependencies in Swift 6.2 and Beyond</a></li>
<li><a href="https://mjtsai.com/blog/2020/05/08/resilient-decoding-in-swift/">Resilient Decoding in Swift</a></li>
<li><a href="https://mjtsai.com/blog/2019/09/18/serializing-heterogenous-arrays-with-codable/">Serializing Heterogenous Arrays With Codable</a></li>
<li><a href="https://mjtsai.com/blog/2019/01/18/even-more-about-swifts-codable/">Even More About Swift’s Codable</a></li>
<li><a href="https://mjtsai.com/blog/2018/02/27/decoding-dictionaries-in-swift/">Decoding Dictionaries in Swift</a></li>
<li><a href="https://mjtsai.com/blog/2017/10/06/when-jsondecoder-meets-the-real-world/">When JSONDecoder Meets the Real World</a></li>
<li><a href="https://mjtsai.com/blog/2017/07/28/a-binary-coder-for-swift/">A Binary Coder for Swift</a></li>
<li><a href="https://mjtsai.com/blog/2017/07/14/swift-codable/">Swift.Codable</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/26/the-future-of-swift-serialization-and-deserialization-apis/feed/</wfw:commentRss>
<slash:comments>3</slash:comments>
</item>
<item>
<title>Apple TV+ Losing $1 Billion Per Year</title>
<link>https://mjtsai.com/blog/2025/03/26/apple-tv-losing-1-billion-per-year/</link>
<comments>https://mjtsai.com/blog/2025/03/26/apple-tv-losing-1-billion-per-year/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Wed, 26 Mar 2025 19:50:01 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Apple]]></category>
<category><![CDATA[Apple TV]]></category>
<category><![CDATA[Apple TV+]]></category>
<category><![CDATA[Business]]></category>
<category><![CDATA[Eddy Cue]]></category>
<category><![CDATA[Netflix]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47212</guid>
<description><![CDATA[Ryan Christoffel: Wayne Ma writes today at The Information about the state of Apple TV+ as a business, analyzing where the streamer stands in terms of revenue and subscribers after five years.In the heavily-paywalled article, Ma reports that Apple’s losses on TV+ amount to over $1 billion per year. While it’s long been known that […]]]></description>
<content:encoded><![CDATA[<p><a href="https://9to5mac.com/2025/03/20/apple-tv-is-losing-1-billion-every-year-per-report/">Ryan Christoffel</a>:</p>
<blockquote cite="https://9to5mac.com/2025/03/20/apple-tv-is-losing-1-billion-every-year-per-report/"><p><a href="https://www.theinformation.com/articles/apple-streaming-losses-top-1-billion-year">Wayne Ma writes today at <em>The Information</em></a> about the state of Apple TV+ as a business, analyzing where the streamer stands in terms of revenue and subscribers after five years.</p><p>In the heavily-paywalled article, Ma reports that Apple’s losses on TV+ amount to over $1 billion per year. While it’s long been known that the streamer was not yet profitable, this is the first time I can recall that we’ve had a solid number to quantify the losses.</p><p>The report also claims Apple TV+ had 45 million subscribers last year.</p></blockquote>
<p><a href="https://x.com/counternotions/status/1902478904574799901">Kontra</a>:</p>
<blockquote cite="https://x.com/counternotions/status/1902478904574799901">
<p>Co-CEO of Netflix and Spotify board member Ted Sarandos on Apple TV+:</p>
<p>“I don’t understand it beyond a marketing play, but they’re really smart people. Maybe they see something we don’t.”</p>
</blockquote>
<p><a href="https://daringfireball.net/linked/2025/03/21/apple-tv-spend-loss-or-cost">John Gruber</a> (<a href="https://mastodon.social/@daringfireball/114201345561454930">Mastodon</a>):</p>
<blockquote cite="https://daringfireball.net/linked/2025/03/21/apple-tv-spend-loss-or-cost">
<p>But is it a <em>loss</em> when Apple expected the business to be unprofitable for a decade or more?</p>
<p>[…]</p>
<p>The insinuation here is that Apple’s pissing this money away and doesn’t know what they’re doing. Maybe they are! But if so it was exactly Eddy Cue and Tim Cook’s strategy to piss this money away. If Apple had expected TV+ to be profitable or break-even in 2024, then a $1 billion operating loss would be a story. But as it stands it’s just a cost.</p>
</blockquote>
<p><a href="https://daringfireball.net/linked/2025/03/21/belloni-apple-tv">John Gruber</a>:</p>
<blockquote cite="https://daringfireball.net/linked/2025/03/21/belloni-apple-tv">
<p>One interesting nugget is <a href="https://daringfireball.net/misc/2025/03/puck-apple-tv+-signups.png">this chart</a>, which suggests that subscriptions to TV+ have boomed since Apple and Amazon <a href="https://www.aboutamazon.com/news/entertainment/apple-tv-shows-amazon-prime-video-subscription">worked out a deal to sell TV+ subscriptions</a> through Amazon Channels in Prime Video at the end of last year. That deal has, seemingly, moved the needle. Another interesting nugget is that TV+ seems to suffer from a higher churn rate than other streaming services. Said Belloni’s Puck colleague Julia Alexander, “Fewer than 35 percent of all subscribers keep the service for longer than six months.”</p>
</blockquote>
<p><a href="https://spyglass.org/apple-tv-plus-strategy/">M.G. Siegler</a>:</p>
<blockquote cite="https://spyglass.org/apple-tv-plus-strategy/"><p>I mean, my god could you imagine if Apple had bought Netflix? Who knows if they even would have been allowed to from a regulatory perspective, or if Netflix would have sold, but if it’s true that Cue argued against it simply because he viewed their business as being bolstered by borrowing (financing content spend through debt) that’s a huge strategic blunder. Yes, this was the common criticism of Netflix at the time, though – with the benefit of hindsight – it clearly misunderstood what would happen if and when Netflix reached escape velocity with regard to scale.</p><p>[…]</p><p>Why would the availability of an Apple TV+ show on a Samsung TV prompt a person to buy Apple hardware? Just halo effect stuff? The argument for making these shows widely available is to sell Apple TV+ subscriptions and spread the cost (and content) far beyond the Apple ecosystem base, not the other way around.</p><p>[…]</p><p>Apple thought that creating great Apple TV+ shows would lead people to buy Apple TV set top boxes. That didn’t happen. Instead, they just kept their Rokus and stayed happy with Netflix and Prime Video and Disney+ and didn’t think much about Apple TV+.</p><p>[…]</p><p>Apple just needs to make the content side of the equation actually work, strategically. I don’t care how much it costs, necessarily. It’s more that those costs – in particular those <em>losses</em> not going down over time – actually indicated that they’re strategy was broken.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2024/11/26/apples-movie-theater-beef-with-hollywood/">Apple’s Movie Theater Beef With Hollywood</a></li>
<li><a href="https://mjtsai.com/blog/2024/07/23/scaling-back-apple-tv-content/">Scaling Back Apple TV+ Content</a></li>
</ul>
<p id="apple-tv-losing-1-billion-per-year-update-2025-04-01">Update (2025-04-01): <a href="https://bzamayo.com/apple-tv-plus-costs-billion-dollars-a-year-to-run">Benjamin Mayo</a>:</p>
<blockquote cite="https://bzamayo.com/apple-tv-plus-costs-billion-dollars-a-year-to-run">
<p>It may be starting from a small base, but TV+ does have upward trajectory. Frankly, on most metrics aside from the bottom line, the Apple TV+ plan is working. Apple is making a lot of good shows that people like, and is garnering millions of subscribers with ever-increasing viewership (given the increasing frequency of appearances of Apple shows on the Nielsen streaming charts). Over time, I see Apple TV+ as a big asset of the Apple One bundle.</p>
<p>[…]</p>
<p>Alongside reducing churn, the ongoing brand prestige and self-aggrandising awards recognition is also an added bonus for the company. If it really has accrued 45 million subscribers to date with a catalog of just ~280 originals, it doesn’t seem too far-fetched that they could eventually break even on the effort.</p>
</blockquote>
<p><a href="https://daringfireball.net/2025/03/the_studio">John Gruber</a>:</p>
<blockquote cite="https://daringfireball.net/2025/03/the_studio">
<p><em>The Studio</em> is, thus far, engaging, surprising, funny, gorgeous, clever, and cinematically ambitious. It’s really quite a thing. I have no idea what’s coming in episodes 3–10, so maybe this piece will look a bit premature, if not foolish, in two months. But if the rest of season one is anything like the first two episodes, <em>The Studio</em> is a classic in the making.</p>
<p>The thought also occurs to me that this might be the don’t-over-think-it answer to <a href="https://daringfireball.net/linked/2025/03/21/apple-tv-spend-loss-or-cost">just what the hell Apple is doing making original shows and movies</a> in the first place. Perhaps Apple’s leadership simply believes, as I do, that cinema is the grandest and greatest form of art the world has ever seen — one that encompasses acting, writing, photography and/or illustration, and music — and but that great cinema is expensive and delicate and needs, from deep-pocketed studios and their deeper-pocketed corporate parents, more than patrons, but <em>champions</em>. And that in a media landscape where such champions of cinema-as-art and art-as-an-essential-public-good are fewer and fewer, it is Apple’s not just opportunity but <em>obligation</em> to step up to the plate.</p>
</blockquote>
<p>It’s a pity that they don’t see it as their obligation to champion the art of <em>software</em>, e.g. by ensuring that individuals can build and distribute their creations without interference.</p>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/26/apple-tv-losing-1-billion-per-year/feed/</wfw:commentRss>
<slash:comments>15</slash:comments>
</item>
<item>
<title>Updates on HP Printers</title>
<link>https://mjtsai.com/blog/2025/03/26/updates-on-hp-printers/</link>
<comments>https://mjtsai.com/blog/2025/03/26/updates-on-hp-printers/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Wed, 26 Mar 2025 19:49:50 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[DRM]]></category>
<category><![CDATA[HP]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[Lawsuit]]></category>
<category><![CDATA[Legal]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[Printing]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47210</guid>
<description><![CDATA[Nathan Edwards (2023, via Nick Heer): It was fine until my yellow ink cartridge (allegedly) ran out, and the printer stopped printing in color. I soldiered on with the black cartridge. Until one day I tried to print a return label (in black and white!) and the printer decided it wouldn’t. Not until I replaced […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.theverge.com/23648726/hp-officejet-printer-region-how-to-change-why">Nathan Edwards</a> (2023, via <a href="https://pxlnv.com/linklog/hp-printers-are-bad/">Nick Heer</a>):</p>
<blockquote cite="https://www.theverge.com/23648726/hp-officejet-printer-region-how-to-change-why"><p>It was fine until my yellow ink cartridge (allegedly) ran out, and the printer stopped printing in color. I soldiered on with the black cartridge. Until one day I tried to print a return label (in black and white!) and the printer decided it wouldn’t. Not until I replaced the yellow ink cartridge. Fine. I paid 207 <em>goddamn</em> dollars for replacement cartridges, put them in, and discovered that HP region-locks its printers. </p><p>[…]</p><p>The genuine HP ink cartridges, for which I paid as much as I paid for the <em>actual printer</em>, would not work with the printer they were designed to work with because I bought it in a different part of the world. It wasn’t even a <em>cheaper</em> part of the world unless we’re talking healthcare or midcentury furniture.</p><p>[…]</p><p>Now, I realize this is an edge case. Most people don’t move across the world and bring a printer with them. But region-locking is only one of <em>many</em> ways printer companies use DRM to squeeze money out of their customers, and if you have an inkjet printer you might have already run into one of them.</p></blockquote>
<p><a href="https://www.telegraph.co.uk/money/consumer-affairs/hp-printers-computers-ink-cartridges-rivals/">Charlotte Gifford</a> (2023, via <a href="https://news.ycombinator.com/item?id=35930518">Hacker News</a>):</p>
<blockquote cite="https://www.telegraph.co.uk/money/consumer-affairs/hp-printers-computers-ink-cartridges-rivals/">
<p>Hewlett-Packard, or HP, has sparked fury after issuing a recent “firmware” update which blocks customers from using cheaper, non-HP ink cartridges in its printers.</p>
<p>[…]</p>
<p>The printer company said it issued the update to reduce the risk of malware attacks, saying “third-party cartridges that use non-HP chips or circuitry can pose risks to the hardware performance, print quality, and security.”</p>
</blockquote>
<p><a href="https://arstechnica.com/gadgets/2025/03/firmware-update-bricks-hp-printers-makes-them-unable-to-use-hp-cartridges/">Scharon Harding</a> (<a href="https://news.ycombinator.com/item?id=43323923">Hacker News</a>):</p>
<blockquote cite="https://arstechnica.com/gadgets/2025/03/firmware-update-bricks-hp-printers-makes-them-unable-to-use-hp-cartridges/"><p>In a new form of frustration, HP is now being accused of issuing a firmware update that broke customers’ laser printers—even though the devices are loaded with HP-brand toner.</p><p>The firmware update in question is version 20250209, which HP issued on March 4 for its LaserJet MFP M232-M237 models. Per HP, the update includes “security updates,” a “regulatory requirement update,” “general improvements and bug fixes,” and fixes for <a href="https://www.pwg.org/ipp/everywhere.html">IPP Everywhere</a>. Looking back to older updates’ fixes and changes, which the new update includes, doesn’t reveal anything out of the ordinary. The older updates mention things like “fixed print quality to ensure borders are not cropped for certain document types,” and “improved firmware update and cartridge rejection experiences.” But there’s no mention of changes to how the printers use or read toner.</p><p>However, users have been <a href="https://h30434.www3.hp.com/t5/Printing-Errors-or-Lights-Stuck-Print-Jobs/Error-Code-11/td-p/9333546">reporting</a> sudden problems using HP-brand toner in their M232–M237 series printers since their devices updated to 20250209. Users on HP’s support forum say they see Error Code 11 and the hardware’s toner light flashing when trying to print. Some said they’ve cleaned the contacts and reinstalled their toner but still can’t print.</p></blockquote>
<p><a href="https://arstechnica.com/gadgets/2025/03/hp-avoids-monetary-damages-over-bricked-printers-in-class-action-settlement/">Scharon Harding</a> (<a href="https://news.ycombinator.com/item?id=43458759">Hacker News</a>):</p>
<blockquote cite="https://arstechnica.com/gadgets/2025/03/hp-avoids-monetary-damages-over-bricked-printers-in-class-action-settlement/"><p>In December 2020, Mobile Emergency Housing Corp. and a company called Performance Automotive & Tire Center filed a class-action complaint against HP [<a href="https://cdn.arstechnica.net/wp-content/uploads/2025/03/complaint.pdf">PDF</a>], alleging that the company “wrongfully compels users of its printers to buy and use only HP ink and toner supplies by transmitting firmware updates without authorization to HP printers over the Internet that lock out its competitors’ ink and toner supply cartridges.” The complaint centered on a firmware update issued in November 2020; it sought a court ruling that HP’s actions broke the law, an injunction against the firmware updates, and monetary and punitive damages.</p><p>[…]</p><p>After years of litigation, in August 2024, HP and the plaintiffs reached a settlement agreement that Judge Susan Van Keulen approved on Tuesday [<a href="https://cdn.arstechnica.net/wp-content/uploads/2025/03/settlement.pdf">PDF</a>].</p><p>Under the settlement agreement, HP doesn’t admit to any wrongdoing. It also won’t pay any monetary relief to customers impacted by the November 2020 firmware update.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/07/brother-denies-blocking-third-party-toner/">Brother Denies Blocking Third-Party Toner</a></li>
<li><a href="https://mjtsai.com/blog/2024/07/26/hp-discontinues-online-only-laserjet-printers/">HP Discontinues Online-Only LaserJet Printers</a></li>
<li><a href="https://mjtsai.com/blog/2024/03/06/hp-all-in-plan/">HP All-In Plan</a></li>
<li><a href="https://mjtsai.com/blog/2023/12/27/just-get-a-brother/">Just Get a Brother</a></li>
<li><a href="https://mjtsai.com/blog/2020/10/23/hp-printer-driver-certificate-revoked/">HP Printer Driver Certificate Revoked</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/26/updates-on-hp-printers/feed/</wfw:commentRss>
<slash:comments>6</slash:comments>
</item>
<item>
<title>Apple’s Dormant CUPS</title>
<link>https://mjtsai.com/blog/2025/03/26/apples-dormant-cups/</link>
<comments>https://mjtsai.com/blog/2025/03/26/apples-dormant-cups/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Wed, 26 Mar 2025 19:49:43 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[Linux]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 10.15 Catalina]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Open Source]]></category>
<category><![CDATA[Printing]]></category>
<category><![CDATA[Unix]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47208</guid>
<description><![CDATA[Wikipedia: Michael Sweet, who owned Easy Software Products, started developing CUPS in 1997 and the first public betas appeared in 1999. The original design of CUPS used the Line Printer Daemon protocol (LPD), but due to limitations in LPD and vendor incompatibilities, the Internet Printing Protocol (IPP) was chosen instead. CUPS was initially called “The […]]]></description>
<content:encoded><![CDATA[<p><a href="https://en.wikipedia.org/wiki/CUPS">Wikipedia</a>:</p>
<blockquote cite="https://en.wikipedia.org/wiki/CUPS"><p><a href="https://en.wikipedia.org/wiki/Michael_Sweet_(programmer)" title="Michael Sweet (programmer)">Michael Sweet</a>, who owned <a href="https://en.wikipedia.org/wiki/Easy_Software_Products" title="Easy Software Products">Easy Software Products</a>, started developing CUPS in 1997 and the first public betas appeared in 1999. The original design of CUPS used the <a href="https://en.wikipedia.org/wiki/Line_Printer_Daemon_protocol" title="Line Printer Daemon protocol">Line Printer Daemon protocol</a> (LPD), but due to limitations in LPD and vendor incompatibilities, the <a href="https://en.wikipedia.org/wiki/Internet_Printing_Protocol" title="Internet Printing Protocol">Internet Printing Protocol</a> (IPP) was chosen instead. CUPS was initially called “The Common UNIX Printing System”. This name was shortened to just “CUPS” beginning with CUPS 1.4 due to legal concerns with the UNIX trademark. CUPS was quickly adopted as the default printing system for most <a href="https://en.wikipedia.org/wiki/Linux_distribution" title="Linux distribution">Linux distributions</a>. In March 2002, <a href="https://en.wikipedia.org/wiki/Apple_Inc." title="Apple Inc.">Apple Inc.</a> adopted CUPS as the printing system for <a href="https://en.wikipedia.org/wiki/Mac_OS_X" title="Mac OS X">Mac OS X</a> 10.2. In February 2007, <a href="https://en.wikipedia.org/wiki/Apple_Inc." title="Apple Inc.">Apple Inc.</a> hired chief developer Michael Sweet and purchased the CUPS source code.</p></blockquote>
<p><a href="https://www.theregister.com/2020/10/15/apple_cups_develoment/">Tim Anderson</a> (2020):</p>
<blockquote cite="https://www.theregister.com/2020/10/15/apple_cups_develoment/"><p>The official public repository for CUPS, an Apple open-source project widely used for printing on Linux, is all-but dormant since the lead developer left Apple at the end of 2019.</p><p>[…]</p><p>Asked at the time about the future of CUPS, <a href="https://www.msweet.org/blog/2019-12-20-left-apple.html">he said</a>: “CUPS is still owned and maintained by Apple. There are two other engineers still in the printing team that are responsible for CUPS development, and it will continue to have new bug fix releases (at least) for the foreseeable future.”</p><p>[…]</p><p>Till Kamppeter, leader of the Linux Foundation’s <a href="https://openprinting.github.io/about-us/">OpenPrinting</a> effort and organizer of the printing micro-conference at Linux Plumbers, commented on Larabel’s observations, pointing to <a href="https://openprinting.github.io/OpenPrinting-News-September-2020/">this post</a> where he says: “Due to dormant upstream development, we have discussed to creating a temporary fork on OpenPrinting [of CUPS] for bug fixes and distribution patches, and Michael Sweet has done it now.”</p><p>The “dormant” bit refers to Apple’s <a href="https://github.com/apple/cups">CUPS project</a>; and OpenPrinting’s CUPS fork is <a href="https://github.com/OpenPrinting/cups">here</a>. Kamppeter added that “in case that Apple does finally cease CUPS development, I will continue the project together with Michael Sweet on OpenPrinting. CUPS will still be needed in Linux.” </p></blockquote>
<p><a href="https://linuxreviews.org/Apple%27s_CUPS_Repository_Has_Died_A_Quiet_Death">LinuxReviews</a> (<a href="https://hardware.slashdot.org/story/20/10/16/1450252/has-apple-abandoned-cups-linuxs-widely-used-open-source-printing-system-seems-so">Slashdot</a>, <a href="https://news.ycombinator.com/item?id=24831162">Hacker News</a>):</p>
<blockquote cite="https://linuxreviews.org/Apple%27s_CUPS_Repository_Has_Died_A_Quiet_Death"><p>Apple’s <a href="https://github.com/apple/cups/commits/master">CUPS git repository</a> at <a href="https://linuxreviews.org/Microsoft" title="Microsoft">Microsoft</a> <a href="https://linuxreviews.org/GitHub" title="GitHub">GitHub</a> become a ghost-town after Mr Sweet’s departure. There is a <i><a href="https://github.com/apple/cups/commit/82e3ee0e3230287b76a76fb8f16b92ca6e50b444">single commit</a></i> bumping the version and fixing minor issues in 2020 and that’s it, that’s all that happened in the CUPS git repository this year. That’s a stark contrast to the activity there previous years[…]</p></blockquote>
<p>It looks like nothing has happened with Apple’s code since a <a href="https://github.com/apple/cups/commit/859ea4481c85a2dd6157396a22b3c8b3b726e06b">security fix in 2022</a>, and the <a href="https://github.com/apple/cups">repo comment</a> makes it sound like Apple is intentionally leaving its support stuck at an old version:</p>
<blockquote cite="https://github.com/apple/cups">
<p>Apple CUPS is the version of CUPS that is shipped with macOS and iOS. For the current version of CUPS that is used on other operating systems, see <a href="https://openprinting.github.io/cups">https://openprinting.github.io/cups</a> for details.</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2024/10/28/macos-15-1/">macOS 15.1</a></li>
<li><a href="https://mjtsai.com/blog/2020/10/23/hp-printer-driver-certificate-revoked/">HP Printer Driver Certificate Revoked</a></li>
<li><a href="https://mjtsai.com/blog/2019/06/04/scripting-languages-to-be-removed/">Scripting Languages to Be Removed</a></li>
<li><a href="https://mjtsai.com/blog/2019/01/04/mojaves-rsync-from-the-days-of-tiger/">Mojave’s rsync From the Days of Tiger</a></li>
<li><a href="https://mjtsai.com/blog/2014/10/11/an-aging-collection-of-unix-tools/">An Aging Collection of Unix Tools</a></li>
<li><a href="https://mjtsai.com/blog/2004/04/03/cups_and_usability/">CUPS and Usability</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/26/apples-dormant-cups/feed/</wfw:commentRss>
<slash:comments>7</slash:comments>
</item>
<item>
<title>AirPods Max Lossless and Low Latency Audio Over USB-C</title>
<link>https://mjtsai.com/blog/2025/03/25/airpods-max-lossless-and-low-latency-audio-over-usb-c/</link>
<comments>https://mjtsai.com/blog/2025/03/25/airpods-max-lossless-and-low-latency-audio-over-usb-c/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Tue, 25 Mar 2025 18:26:36 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Airplane]]></category>
<category><![CDATA[AirPods]]></category>
<category><![CDATA[Audio]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47201</guid>
<description><![CDATA[Tim Hardwick: Apple will bring lossless audio and ulta-low latency audio to AirPods Max in its upcoming iOS 18.4 software update arriving in April, according to the company.[…]Apple also said that today it is making a USB-C to 3.5mm audio cable available to buy for $39 from its online store, Apple Store app, and authorized […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.macrumors.com/2025/03/24/airpods-max-lossless-audio-coming-april/">Tim Hardwick</a>:</p>
<blockquote cite="https://www.macrumors.com/2025/03/24/airpods-max-lossless-audio-coming-april/"><p>Apple will bring lossless audio and ulta-low latency audio to AirPods Max in its upcoming iOS 18.4 software update arriving in April, according to the company.</p><p>[…]</p><p>Apple also said that today it is making a <a href="https://www.apple.com/shop/product/MDV84AM/A/usb-c-to-35-mm-audio-cable-12-m">USB-C to 3.5mm audio cable</a> available to buy for $39 from its online store, Apple Store app, and authorized resellers. The cable lets users connect AirPods Max to 3.5mm audio sources like airplane audio ports or connect their iPhone or iPad to speakers or car stereos with 3.5mm inputs.</p></blockquote>
<p><a href="https://www.macstories.net/news/airpods-max-to-gain-lossless-and-low-latency-audio-support-over-usb-c-next-month/">John Voorhees</a>:</p>
<blockquote cite="https://www.macstories.net/news/airpods-max-to-gain-lossless-and-low-latency-audio-support-over-usb-c-next-month/">
<p>The update will enable 24-bit, 48 kHz lossless audio, which Apple says is supported by over 100 million songs on Apple Music. Using the headphones’ USB-C cable, musicians will enjoy ultra-low latency and lossless audio in their Logic Pro workflows. The USB-C cable will allow them to produce Personalized Spatial Audio, too.</p>
</blockquote>
<p><a href="https://mastodon.social/@film_girl/114218278601156553">Christina Warren</a>:</p>
<blockquote cite="https://mastodon.social/@film_girl/114218278601156553">
<p>As someone who was dumb enough to buy the AirPods Max USB-C edition even after bitching for 4 years about the Lightning Version -- and who had to spend $60 on an AirFly to use it in business class -- this update is overdue but welcome.</p>
</blockquote>
<p><a href="https://pxlnv.com/linklog/airpods-max-lossless-audio-usb/">Nick Heer</a>:</p>
<blockquote cite="https://pxlnv.com/linklog/airpods-max-lossless-audio-usb/">
<p>Allow me to recap the absurd timeline of lossless support for AirPods models.</p>
</blockquote>
<p><a href="https://www.curbcuts.co/blog/2025324looming-airpods-max-update-reminds-accessibility-applies-to-hardware-too">Steven Aquino</a>:</p>
<blockquote cite="https://www.curbcuts.co/blog/2025324looming-airpods-max-update-reminds-accessibility-applies-to-hardware-too">
<p>Whatever Apple’s rationale for the delay, the reason I’m covering the ostensibly esoteric and unrelated bit of AirPods Max news is because it dawned on me while reading Apple’s announcement that I’ve never written about them in an accessibility context.</p>
<p>[…]</p>
<p>A magnetic USB-C port surely would go a long way in shaping an even better user experience for myself (and others).</p>
</blockquote>
<p>See also: <a href="https://talk.tidbits.com/t/airpods-max-to-support-lossless-audio-and-ultra-low-latency-audio/30589">TidBITS-Talk</a>.</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2021/05/17/apple-music-spatial-audio-and-lossless-audio/">Apple Music Spatial Audio and Lossless Audio</a></li>
<li><a href="https://mjtsai.com/blog/2020/12/08/airpods-max/">AirPods Max</a></li>
</ul>
<p id="airpods-max-lossless-and-low-latency-audio-over-usb-c-update-2025-04-02">Update (2025-04-02): <a href="https://www.macrumors.com/2025/03/31/apple-airpods-max-firmware-7e99/">Juli Clover</a>:</p>
<blockquote cite="https://www.macrumors.com/2025/03/31/apple-airpods-max-firmware-7e99/"><p>Apple has updated an <a href="https://support.apple.com/en-us/106340">AirPods support page</a> to indicate that the AirPods Max (USB-C) firmware update version 7E99 is now “coming soon.” The original article continues below.</p></blockquote>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/25/airpods-max-lossless-and-low-latency-audio-over-usb-c/feed/</wfw:commentRss>
<slash:comments>4</slash:comments>
</item>
<item>
<title>Error 702 Installing macOS on an External Drive</title>
<link>https://mjtsai.com/blog/2025/03/25/error-702-installing-macos-on-an-external-drive/</link>
<comments>https://mjtsai.com/blog/2025/03/25/error-702-installing-macos-on-an-external-drive/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Tue, 25 Mar 2025 18:26:30 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Apple Configurator]]></category>
<category><![CDATA[Apple File System (APFS)]]></category>
<category><![CDATA[Installer]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 12 Monterey]]></category>
<category><![CDATA[macOS 13 Ventura]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[macOS Recovery]]></category>
<category><![CDATA[Storage]]></category>
<category><![CDATA[Thunderbolt]]></category>
<category><![CDATA[USB-C]]></category>
<category><![CDATA[Wi-Fi]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47199</guid>
<description><![CDATA[My Intel MacBook Pro died, and even though I have an M1 MacBookAir ready to replace it, it’s taken several days to get back to the point where I can run older versions of macOS for testing my apps. I had all the old versions installed in separate partitions on an external SSD. Prior to […]]]></description>
<content:encoded><![CDATA[<p>My Intel MacBook Pro died, and even though I have an <a href="https://mjtsai.com/blog/2024/03/17/walmart-selling-m1-macbook-air-for-699/">M1 MacBookAir</a> ready to replace it, it’s taken several days to get back to the point where I can run older versions of macOS for testing my apps. I had all the old versions installed in separate partitions on an external SSD. Prior to Apple Silicon, I could just plug this drive into a new Mac and continue as if nothing had happened. But Apple Silicon Macs can’t use Intel boot drives, so that won’t work with the new test Mac. Although externally booting Apple Silicon Macs has been a bit <a href="https://mjtsai.com/blog/2020/12/22/booting-an-m1-mac-from-an-external-disk/">dodgy</a> in the past, I figured that <a href="https://mjtsai.com/blog/2020/11/10/one-more-thing-apple-silicon-macs/">4+ years</a> into the transition the issues had mostly been ironed out. My M1 test Mac already had an external SSD set up with partitions for testing different versions of macOS Sequoia. I figured I could just reformat the other SSD and install fresh copies of all the old versions on it. I eventually succeeded, but the process was anything but straightforward and I’m left feeling like <a href="https://mastodon.social/@lapcatsoftware/114200898833096368">Jeff Johnson</a>:</p>
<blockquote cite="https://mastodon.social/@lapcatsoftware/114200898833096368"><p>I don’t understand Macs anymore.</p></blockquote>
<p>I was already aware of <a href="https://eclecticlight.co/2025/03/22/a-brief-history-of-installing-mac-os-mac-os-x-and-beyond/">this limitation</a>:</p>
<blockquote cite="https://eclecticlight.co/2025/03/22/a-brief-history-of-installing-mac-os-mac-os-x-and-beyond/">
<p>There are further complications to this. For instance, an older macOS Installer app can’t be run in a newer major version of macOS. The workaround for that is to create a bootable installer volume, and boot from that to run its older installer.</p>
</blockquote>
<p>so I created a bootable installer <a href="https://c-command.com/dropdmg/help/create-macos-install-di">with DropDMG</a>. The main problem I ran into is that, after rebooting and running the installer, a good way into the process it would fail with this error:</p>
<blockquote>
<p>com.apple.OSinstallerSetup.error error 702</p>
</blockquote>
<p>The detailed error log showed a <a href="https://discussions.apple.com/thread/252424160?sortBy=rank">problem</a> <a href="https://www.reddit.com/r/MacOS/comments/kavrhp/please_help_big_sur_update_failing_error_702/">mounting</a> the <tt>InstallESDDmg.pkg</tt> file: “Couldn't mount dmg! (error code 12).” I searched for the 702 error code and various text from the error log and came up with nothing useful. There <a href="https://support.apple.com/en-us/102531">are</a> <a href="https://discussions.apple.com/thread/255855449?sortBy=rank">a</a> <a href="https://www.mac4xp.com/fix-com-apple-osinstallersetup-error-error-702-on-bir-sur-ventura-monterey-sonoma/">bunch</a> <a href="https://www.macobserver.com/tips/how-to/fix-macos-ventura-installer-error-702/">of</a> <a href="https://discussions.apple.com/thread/252390811?sortBy=rank">pages</a> <a href="https://discussions.apple.com/thread/254620641?sortBy=rank">with</a> <a href="https://www.reddit.com/r/MacOS/comments/1fj1191/unable_to_install_macos_sequoia/">generic</a> <a href="https://discussions.apple.com/thread/254320560?sortBy=rank">advice</a> that didn’t apply to me. I’m not using MDM, the Internet connection is working, the <a href="https://www.alansiu.net/2020/08/05/setting-the-date-time-in-macos-10-14-recovery-mode/">clock</a> is correct, there’s plenty of disk space, the installer isn’t damaged, M1 Macs don’t have <a href="https://support.apple.com/en-us/102539">NVRAM</a> to zap, Find My is disabled, etc.</p>
<p>I tried multiple installers from different major and minor versions of macOS and multiple different destination drives. I tried running the installer with two different Macs, reformatting both the source and destination drives, and repartitioning the destination to have a single partition/container. I kept getting error 702. Both of these Macs had previously successfully created and booted from external drives. What was different now?</p>
<p>I found a promising comment on <a href="https://eclecticlight.co/2025/01/14/thunderbolt-ports-arent-all-the-same/#comment-103101">Howard Oakley</a>’s site:</p>
<blockquote cite="https://eclecticlight.co/2025/01/14/thunderbolt-ports-arent-all-the-same/#comment-103101">
<p>I tried to install onto an external plugged into the DFU and got a message “The operation couldn’t be completed.(com.apple.OSinstallerSetup.error error 702.)”</p>
<p>I suspect Apple have made a recent change to firmware/hidden volumes which requires the non-DFU port.</p>
</blockquote>
<p>This reminded me of one of his <a href="https://eclecticlight.co/2025/01/14/thunderbolt-ports-arent-all-the-same/">earlier posts</a>:</p>
<blockquote cite="https://eclecticlight.co/2025/01/14/thunderbolt-ports-arent-all-the-same/"><p>On each Intel Mac with a T2 chip, or Apple silicon Mac, one of its USB-C+Thunderbolt 3 ports is designated for use in DFU mode. That port isn’t labelled, and System Information doesn’t tell you which is the DFU port on that Mac. Instead, Apple lists them <a href="https://support.apple.com/120694">for each model here</a>. Beware when reading that support article, as it isn’t internally consistent: for instance, it shows the DFU port as being that on the left of the left side of a MacBook Pro, but states in the text that on a MacBook Pro 14-inch 2024 with an M4 chip, the DFU port is that on the right of the left side instead.</p><p>DFU mode is seldom required in T2 or Apple silicon Macs, as it’s how you can refresh or restore the firmware in them. But if you do need to use it, you’ll need to connect a USB-C (not Thunderbolt) cable to the DFU port and perform the procedure from another Mac connected to the other end. However, there is another more common situation in which you need to know the DFU port on an Apple silicon Mac: that’s when you want to create an external bootable disk.</p>
<p>[…]</p>
<p>If the external drive you’re trying to install macOS onto is connected to that Apple silicon Mac’s DFU port, then the procedure is almost certainly doomed to fail. The solution is to connect that external drive to a different port, where it’s likely to succeed.</p></blockquote>
<p><a href="https://support.apple.com/en-us/111336">Apple</a> finally documented this:</p>
<blockquote cite="https://support.apple.com/en-us/111336"><p>If you’re using a <a href="https://support.apple.com/en-us/116943">Mac with Apple silicon</a>, plug your storage device into any compatible port except the DFU port. <a href="https://support.apple.com/en-us/120694">Learn how to identify the DFU port</a>. After macOS installation is complete, you can connect your storage device to any compatible port, including the DFU port.</p></blockquote>
<p><a href="https://eclecticlight.co/2025/01/15/create-an-external-bootable-disk-for-apple-silicon-and-intel-macs/">Howard Oakley</a>:</p>
<blockquote cite="https://eclecticlight.co/2025/01/15/create-an-external-bootable-disk-for-apple-silicon-and-intel-macs/"><p>For example, on my Mac mini M4, that’s either the left or right Thunderbolt port, as the middle one is its DFU port. On all other Apple silicon Mac minis, that’s either the centre or right port as you look from the rear, as their DFU port is the one on the left.</p><p>[…]</p><p>Reformat that disk as you want to use it, with at least one APFS container containing a single APFS volume in regular APFS format (not encrypted).</p></blockquote>
<p>But, alas, that was not the cause of my problem. Several of the failed installations <em>had</em> been to drives that were not connected to the DFU port.</p>
<p>I did find one other suggestion from <a href="https://support.apple.com/en-us/108900">Apple</a>:</p>
<blockquote cite="https://support.apple.com/en-us/108900">
<p>Reviving or restoring firmware might also help if your Mac experiences a persistent macOS installation error not resolved by other solutions for macOS installation errors.</p>
</blockquote>
<p>I was skeptical that <em>reviving</em> would help. It seemed unlikely that <em>both</em> M1 Macs had bad firmware. <em>Restoring</em> an IPSW file for an old version of macOS <em>should</em> definitely work, but I didn’t want to erase either Mac’s internal SSD. And I wanted to install <em>multiple</em> old versions of macOS <em>externally</em>.</p>
<p>But this did give me an idea: could there be something wrong with the recovery partition on the internal SSD? I <em>had</em> noticed something unexpected. Apple <a href="https://support.apple.com/en-us/102655">says</a>:</p>
<blockquote cite="https://support.apple.com/en-us/102655"><p>On a <a href="https://support.apple.com/en-us/116943">Mac with Apple silicon</a>:</p><ul><li><p>Recovery installs the current version of the most recently installed macOS.</p></li><li><p>If you installed a macOS upgrade and then <a href="https://support.apple.com/en-us/102506">used Disk Utility to erase the disk</a>, you might get the macOS that you were using before upgrading.</p></li></ul></blockquote>
<p>I had not erased the disks, but both M1 Macs had Sonoma recovery partitions even though they had been updated to Sequoia. It’s possible to <a href="https://www.reddit.com/r/macsysadmin/comments/1cx33qu/how_do_i_upgrade_the_macos_version_recovery_mode/">upgrade the recovery partition</a>, but before doing this I figured I should see whether the existing one worked. I might as well try to make a Sonoma boot drive before blowing away the Sonoma recovery partition.</p>
<p>Installing Sonoma from recovery to the external drive worked normally! It then occurred to me that the original 702 error might be related to creating the Ventura recovery partition. But my external drive now had a fresh Sonoma recovery partition. Maybe that would be enough. I added a volume to the SSD and ran the Ventura installer again, and it worked! The Mac could now boot from either Ventura or Sonoma on the external drive. I don’t know whether my analysis is correct, but I tried installing a few more times to prove that it wasn’t something on Apple’s server that had changed. Installing Ventura consistently worked when there was already another version of macOS installed but failed when installing into a fresh drive/container.</p>
<p>I also tried using the DFU port, which isn’t supposed to work, to see what would happen. Installing from recovery to a blank drive <em>said</em> it succeeded, but then booting from the fresh installation failed, saying “Unable to verify startup disk.” However, installing using the DFU port to a drive that already had a bootable partition <em>did</em> work.</p>
<p>More than a dozen installations later, I still don’t fully understand what’s going on here, but I was able to create my external boot drive.</p>
<p>However, around the same time, I discovered a new Mac storage problem, which is that APFS doesn’t seem to be fully backward compatible. I hadn’t read about any problems with this and have in the past used APFS drives formatted from newer versions of macOS on a Mac running macOS 15 Catalina. However, now I have two drives that don’t work on the Catalina Mac. One of them shows up in Disk Utility but doesn’t show the volume’s actual name and doesn’t mount. The other doesn’t show up in Disk Utility at all. Both drives work normally, with the same enclosure, when connected to a Mac with a newer version of macOS. A mystery for another day…</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2024/12/05/mist-macos-installer-super-tool/">MIST (macOS Installer Super Tool)</a></li>
<li><a href="https://mjtsai.com/blog/2024/09/23/sequoias-spctl-and-csrutil/">Sequoia’s spctl and csrutil</a></li>
<li><a href="https://mjtsai.com/blog/2024/06/04/macos-installers-failed-to-personalize-error/">macOS Installer’s “Failed to Personalize” Error</a></li>
<li><a href="https://mjtsai.com/blog/2023/08/17/macos-14-simplifies-restoring-a-mac-in-dfu-mode/">macOS 14 Simplifies Restoring a Mac in DFU Mode</a></li>
<li><a href="https://mjtsai.com/blog/2021/12/16/how-recovery-works-on-m1-series-macs/">How Recovery Works on M1 Series Macs</a></li>
<li><a href="https://mjtsai.com/blog/2021/07/19/owner-accounts-on-m1-macs/">Owner Accounts on M1 Macs</a></li>
<li><a href="https://mjtsai.com/blog/2020/12/22/booting-an-m1-mac-from-an-external-disk/">Booting an M1 Mac From an External Disk</a></li>
<li><a href="https://mjtsai.com/blog/2020/12/08/reviving-or-restoring-a-mac-with-apple-silicon/">Reviving or Restoring a Mac With Apple Silicon</a></li>
<li><a href="https://mjtsai.com/blog/2019/08/28/installing-old-versions-of-macos/">Installing Old Versions of macOS</a></li>
<li><a href="https://mjtsai.com/blog/2017/10/14/the-impossible-dream-of-usb-c/">The Impossible Dream of USB-C</a></li>
</ul>
<p id="error-702-installing-macos-on-an-external-drive-update-2025-03-26">Update (2025-03-26): I installed a macOS Sequoia beta on a different external SSD, and this somehow updated the internal recovery partition to Sequoia. Now I am once again getting the 702 error when trying to install a previous version of macOS on an external drive. I can no longer even install Sonoma.</p>
<p id="error-702-installing-macos-on-an-external-drive-update-2025-03-27">Update (2025-03-27): I used Apple Configurator to restore my M1 MacBook Air to an older version of macOS, in the hope that an older recovery partition would let me install other old macOS versions. Getting the Air into DFU mode took several tries, but I eventually got the timing of the keypresses right. Restoring the Big Sur (11.5) IPSW failed several times with errors such as:</p>
<blockquote>
<p>The System cannot be restored on this device.</p>
<p>The operation couldn’t be completed. (AMRestoreErrorDomain error 9 - Failed to receive message from device, might be connection problem with USB host. (Communication error, possibly USB disconnection)) [AMRestoreErrorDomain – 0x9 (9)]</p>
</blockquote>
<p>and:</p>
<blockquote>
<p>The System cannot be restored on this device.</p>
<p>Failed to restore device in recovery mode, libusbrestore error:21 [com.apple.MobileDevice.MobileRestore – 0x15 (21)]</p>
</blockquote>
<p>It had to stay watch on the restore process because otherwise it would be halted when the Mac kept asking for permission to allow the accessory (the Mac being restored) to connect.</p>
<p>I gave up and tried restoring a Monterey IPSW, and that worked the first time.</p>
<p>I was then able to boot from Monterey on the internal SSD and partition an external drive with separate volumes for Big Sur, Monterey, Ventura, Sonoma, and Sequoia.</p>
<p>I installed Big Sur (11.7.10) on the external drive, which succeeded except that when booted from Big Sur it acts as if the Mac has no Wi-Fi. I can enable it in Control Center, but it doesn’t see any networks, and Wi-Fi doesn’t show up in the Network pane of System Preferences. I erased the Big Sur volume and installed it again and got the same problem. Maybe I should try again with 11.6 or something?</p>
<p>Installing Monterey, Ventura, and Sonoma on the external SSD went smoothly.</p>
<p id="error-702-installing-macos-on-an-external-drive-update-2025-03-28">Update (2025-03-28): <a href="https://eclecticlight.co/2025/03/28/macos-15-3-2-sequoia-wont-install-older-macos-on-apple-silicon-macs/">Howard Oakley</a> (<a href="https://x.com/howardnoakley/status/1905348163227050023">tweet</a>):</p>
<blockquote cite="https://eclecticlight.co/2025/03/28/macos-15-3-2-sequoia-wont-install-older-macos-on-apple-silicon-macs/">
<p>Installing macOS on external bootable disks connected to Apple silicon Macs has been one of the most frustrating experiences of my life, and has driven some more experienced than me to abandon their attempts altogether.</p>
<p>[…]</p>
<p>In each test, I entered the external installer from Recovery mode as detailed by Apple, and started installation to one of the two APFS volumes in the first APFS container on the external SSD. After long periods attempting the installations, both failed with exactly the same error reported by Michael Tsai: <code>com.apple.OSinstallerSetup.error error 702</code></p>
<p>[…]</p>
<p>I therefore conclude that, in Sequoia 15.3.2 at least, it’s not possible to install any version of macOS prior to Sequoia 15.0 on an external SSD connected to an Apple silicon Mac.</p>
</blockquote>
<p id="error-702-installing-macos-on-an-external-drive-update-2025-04-01">Update (2025-04-01): <a href="https://www.macintouch.com/post/46388/arcane-mac-problems-dfu-external-boot-etc/">Ric Ford</a>:</p>
<blockquote cite="https://www.macintouch.com/post/46388/arcane-mac-problems-dfu-external-boot-etc/"><p>In the early days of the Macintosh, Mac enthusiasts would laugh at the arcane problems and workarounds characteristic of the Microsoft Windows platform. Now that kind of misery pervades the Apple “ecosystem” as well.</p><p>One of the craziest examples of this revolves around extremely arcane “DFU” hardware and software in today’s “Apple Silicon” Macs. Details no normal users know or see documented have posed major challenges to even Mac technical experts with decades of experience as they try to resolve bizarre problems with software installation and compatibility.</p></blockquote>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/25/error-702-installing-macos-on-an-external-drive/feed/</wfw:commentRss>
<slash:comments>17</slash:comments>
</item>
<item>
<title>Please Stop Externalizing Your Costs Directly Into My Face</title>
<link>https://mjtsai.com/blog/2025/03/25/please-stop-externalizing-your-costs-directly-into-my-face/</link>
<comments>https://mjtsai.com/blog/2025/03/25/please-stop-externalizing-your-costs-directly-into-my-face/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Tue, 25 Mar 2025 18:26:24 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Artificial Intelligence]]></category>
<category><![CDATA[Book]]></category>
<category><![CDATA[Copyright]]></category>
<category><![CDATA[GitLab]]></category>
<category><![CDATA[Lawsuit]]></category>
<category><![CDATA[Legal]]></category>
<category><![CDATA[LLaMA]]></category>
<category><![CDATA[Meta]]></category>
<category><![CDATA[Open-source Software]]></category>
<category><![CDATA[Web]]></category>
<category><![CDATA[Web Crawlers]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47197</guid>
<description><![CDATA[Drew DeVault: Over the past few months, instead of working on our priorities at SourceHut, I have spent anywhere from 20-100% of my time in any given week mitigating hyper-aggressive LLM crawlers at scale. […] If you think these crawlers respect robots.txt then you are several assumptions of good faith removed from reality. These bots […]]]></description>
<content:encoded><![CDATA[<p><a href="https://drewdevault.com/2025/03/17/2025-03-17-Stop-externalizing-your-costs-on-me.html">Drew DeVault</a>:</p>
<blockquote cite="https://drewdevault.com/2025/03/17/2025-03-17-Stop-externalizing-your-costs-on-me.html">
<p>Over the past few months, instead of working on our priorities at SourceHut, I have spent anywhere from 20-100% of my time in any given week mitigating hyper-aggressive LLM crawlers at scale.</p>
<p>[…]</p>
<p>If you think these crawlers respect robots.txt then you are several assumptions of good faith removed from reality. These bots crawl everything they can find, robots.txt be damned, including expensive endpoints like git blame, every page of every git log, and every commit in every repo, and they do so using random User-Agents that overlap with end-users and come from tens of thousands of IP addresses – mostly residential, in unrelated subnets, each one making no more than one HTTP request over any time period we tried to measure – actively and maliciously adapting and blending in with end-user traffic and avoiding attempts to characterize their behavior or block their traffic.</p>
<p>We are experiencing dozens of brief outages per week, and I have to review our mitigations several times per day to keep that number from getting any higher.</p>
</blockquote>
<p>Via <a href="https://thelibre.news/foss-infrastructure-is-under-attack-by-ai-companies/">Niccolò Venerandi</a> (via <a href="https://news.ycombinator.com/item?id=43422413">Hacker News</a>):</p>
<blockquote cite="https://thelibre.news/foss-infrastructure-is-under-attack-by-ai-companies/">
<p>Then, yesterday morning, KDE GitLab infrastructure was overwhelmed by another AI crawler, with IPs from an Alibaba range; this caused GitLab to be temporarily inaccessible by KDE developers.</p>
<p>I then discovered that, one week ago, an Anime girl started appearing on the GNOME GitLab instance, as the page was loaded. It turns out that it's the default loading page for Anubis, a proof-of-work challenger that blocks AI scrapers that are causing outages.</p>
<p>By now, it should be pretty clear that this is no coincidence. AI scrapers are getting more and more aggressive, and - since FOSS software relies on public collaboration, whereas private companies don't have that requirement - this is putting some extra burden on Open Source communities.</p>
</blockquote>
<p><a href="https://www.theatlantic.com/technology/archive/2025/03/libgen-meta-openai/682093/">Alex Reisner</a> (via <a href="https://news.ycombinator.com/item?id=43445616">Hacker News</a>, <a href="https://www.reddit.com/r/artificial/comments/1jgsf11/the_unbelievable_scale_of_ais_piratedbooks_problem/">Reddit</a>):</p>
<blockquote cite="https://www.theatlantic.com/technology/archive/2025/03/libgen-meta-openai/682093/"><p>When employees at Meta started developing their flagship AI model, Llama 3, they faced a simple ethical question. The program would need to be trained on a huge amount of high-quality writing to be competitive with products such as ChatGPT, and acquiring all of that text legally could take time. Should they just pirate it instead?</p><p>Meta employees spoke with multiple companies about licensing books and research papers, but they weren’t thrilled with their options. This “seems unreasonably expensive,” <a href="https://storage.courtlistener.com/recap/gov.uscourts.cand.415175/gov.uscourts.cand.415175.449.4.pdf">wrote</a> one research scientist on an internal company chat, in reference to one potential deal, according to court records. A Llama-team senior manager added that this would also be an “incredibly slow” process: “They take like 4+ weeks to deliver data.” In a message found in another <a href="https://storage.courtlistener.com/recap/gov.uscourts.cand.415175/gov.uscourts.cand.415175.417.6.pdf">legal filing</a>, a director of engineering noted another downside to this approach: “The problem is that people don’t realize that if we license one single book, we won’t be able to lean into fair use strategy,” a reference to a possible legal defense for using copyrighted books to train AI.</p><p>Court documents <a href="https://storage.courtlistener.com/recap/gov.uscourts.cand.415175/gov.uscourts.cand.415175.482.0.pdf">released</a> last night show that the senior manager felt it was “really important for [Meta] to get books ASAP,” as “books are actually more important than web data.” Meta employees turned their attention to Library Genesis, or LibGen, one of the largest of the pirated libraries that circulate online. It currently contains more than 7.5 million books and 81 million research papers. Eventually, the team at Meta got <a href="https://storage.courtlistener.com/recap/gov.uscourts.cand.415175/gov.uscourts.cand.415175.391.24.pdf">permission</a> from “MZ”—an apparent reference to Meta CEO Mark Zuckerberg—to download and use the data set.</p><p></p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2024/06/24/ai-companies-ignoring-robots-txt/">AI Companies Ignoring Robots.txt</a></li>
</ul>
<p id="please-stop-externalizing-your-costs-directly-into-my-face-update-2025-03-28">Update (2025-03-28): <a href="https://arstechnica.com/ai/2025/03/devs-say-ai-crawlers-dominate-traffic-forcing-blocks-on-entire-countries/">Benj Edwards</a> (via <a href="https://news.ycombinator.com/item?id=43476337">Hacker News</a>):</p>
<blockquote cite="https://arstechnica.com/ai/2025/03/devs-say-ai-crawlers-dominate-traffic-forcing-blocks-on-entire-countries/">
<p>Software developer Xe Iaso <a href="https://xeiaso.net/notes/2025/amazon-crawler/">reached a breaking point</a> earlier this year when aggressive AI crawler traffic from Amazon overwhelmed their Git repository service, repeatedly causing instability and downtime. Despite configuring standard defensive measures—adjusting robots.txt, blocking known crawler user-agents, and filtering suspicious traffic—Iaso found that AI crawlers continued evading all attempts to stop them, spoofing user-agents and cycling through residential IP addresses as proxies.</p>
<p>[…]</p>
<p>Kevin Fenzi, a member of the Fedora Pagure project's sysadmin team, <a href="https://www.scrye.com/blogs/nirik/posts/2025/03/15/mid-march-infra-bits-2025/">reported on his blog</a> that the project had to block all traffic from Brazil after repeated attempts to mitigate bot traffic failed. GNOME GitLab implemented Iaso's "Anubis" system, requiring browsers to solve computational puzzles before accessing content. GNOME sysadmin Bart Piotrowski <a href="https://social.treehouse.systems/@barthalion/114190930216801561">shared</a> on Mastodon that only about 3.2 percent of requests (2,690 out of 84,056) passed their challenge system, suggesting the vast majority of traffic was automated.</p>
</blockquote>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/25/please-stop-externalizing-your-costs-directly-into-my-face/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>Matching Drop Shadows</title>
<link>https://mjtsai.com/blog/2025/03/25/matching-drop-shadows/</link>
<comments>https://mjtsai.com/blog/2025/03/25/matching-drop-shadows/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Tue, 25 Mar 2025 18:26:20 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Android]]></category>
<category><![CDATA[CSS]]></category>
<category><![CDATA[Figma]]></category>
<category><![CDATA[Firefox]]></category>
<category><![CDATA[Google Chrome]]></category>
<category><![CDATA[Graphic Design]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[Safari]]></category>
<category><![CDATA[Sketch]]></category>
<category><![CDATA[WebKit]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47195</guid>
<description><![CDATA[Mark Edwards: The image above shows the same drop shadow values, rendered by CSS on the web, Android, and iOS. It’s a dark and extreme shadow, to make the differences more pronounced. The shadows are black, with no X offset, 24px Y offset, and a 24px blur radius. I’ve used “px” when noting the values, […]]]></description>
<content:encoded><![CDATA[<p><a href="https://bjango.com/articles/matchingdropshadows/">Mark Edwards</a>:</p>
<blockquote cite="https://bjango.com/articles/matchingdropshadows/">
<p>The image above shows the same drop shadow values, rendered by CSS on the web, Android, and iOS. It’s a dark and extreme shadow, to make the differences more pronounced. The shadows are black, with no X offset, 24px Y offset, and a 24px blur radius. I’ve used “px” when noting the values, but when building each test app to generate the images for this article, I used the platform’s equivalent unit — dp on Android, and points on iOS.</p>
<p>The CSS and Android examples may look the same, but they’re slightly different. The image below demonstrates that the Android shadow is slightly blurrier.</p>
<p>[…]</p>
<p>The Android blur radius scale factor isn’t quite as straight forward. Android uses Skia for a lot of its rendering, and the <a href="https://github.com/google/skia/blob/de4799f97cd0b4bd971d016ed179f8c854ef4c29/src/core/SkBlurMask.cpp#L28-L39">source code mentions scaling the blur by 1 / sqrt(3)</a> because “Safari does the same”, and that “it actually should be 1”. Those comments are quite old, and Safari has since changed to be in line with the CSS spec. That means Android’s shadows don’t match CSS, because of Safari. Wild.</p>
</blockquote>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/25/matching-drop-shadows/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>Fantastical 4.0.7</title>
<link>https://mjtsai.com/blog/2025/03/24/fantastical-4-0-7/</link>
<comments>https://mjtsai.com/blog/2025/03/24/fantastical-4-0-7/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Mon, 24 Mar 2025 20:39:07 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Calendar]]></category>
<category><![CDATA[Fantastical]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[Mac App]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47180</guid>
<description><![CDATA[Flexibits: Multiple Windows! See your schedule from different views or dates at the same time. Open new windows at File > New Window Finally. The main use case for me is to compare the same month for different years. I have been doing this by opening one of them using the macOS Calendar app, but […]]]></description>
<content:encoded><![CDATA[<p><a href="https://flexibits.com/fantastical/releasenotes">Flexibits</a>:</p>
<blockquote cite="https://flexibits.com/fantastical/releasenotes">
<p>Multiple Windows! See your schedule from different views or dates at the same time. Open new windows at File > New Window</p>
</blockquote>
<p>Finally. The main use case for me is to compare the same month for different years. I have been doing this by opening one of them using the macOS Calendar app, but it will nice to be able to use Fantastical for both.</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2024/11/01/fantastical-4-and-windows-version/">Fantastical 4 and Windows Version</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/24/fantastical-4-0-7/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>Google Maps Timeline Data Loss</title>
<link>https://mjtsai.com/blog/2025/03/24/google-maps-timeline-data-loss/</link>
<comments>https://mjtsai.com/blog/2025/03/24/google-maps-timeline-data-loss/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Mon, 24 Mar 2025 20:39:02 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Datacide]]></category>
<category><![CDATA[Google Maps]]></category>
<category><![CDATA[Web]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47178</guid>
<description><![CDATA[Simon Sharwood: Over the weekend, users noticed their Timelines went missing.Google seems to have noticed, too, as The Register has seen multiple social media posts in which Timelines users share an email from the search and ads giant in which it admits “We briefly experienced a technical issue that caused the deletion of Timeline data […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.theregister.com/2025/03/24/google_maps_timeline_data_loss/">Simon Sharwood</a>:</p>
<blockquote cite="https://www.theregister.com/2025/03/24/google_maps_timeline_data_loss/"><p>Over the weekend, users noticed their Timelines went missing.</p><p>Google seems to have noticed, too, as <i>The Register</i> has seen <a href="https://x.com/forensico/status/1903214519855259891">multiple</a> social media <a href="https://www.reddit.com/r/GooglePixel/comments/1jgs0ur/google_accidentally_deletes_google_maps_timelines/">posts</a> in which Timelines users share an email from the search and ads giant in which it admits “We briefly experienced a technical issue that caused the deletion of Timeline data for some people.”</p><p>The email goes on to explain that most users that availed themselves of a feature that enables encrypted backups will be able to restore their Maps Timelines data.</p><p>Users who did not make those backups can’t restore their data. Those who did make backups need to manually restore their info using a procedure Google included in its email.</p></blockquote>
<p>Via <a href="https://pxlnv.com/linklog/google-lost-user-data-timelines/">Nick Heer</a>:</p>
<blockquote cite="https://pxlnv.com/linklog/google-lost-user-data-timelines/">
<p>Once <a href="https://pxlnv.com/blog/forums-of-pain/">again</a>, Google provides no explanation for why it is incapable of reliably storing user data, and no customer support.</p>
</blockquote>
<p>It seems this was the data that Google was trying to get users to <a href="https://mjtsai.com/blog/2024/07/10/google-maps-is-killing-timeline-for-web/">move to their own devices</a>. Originally, it said it would keep the data in the cloud until December 2024. But then the date was <a href="https://www.reddit.com/r/GoogleMaps/comments/1gvkz79/i_have_received_an_email_about_keep_your_timeline/">changed to May 18, 2025</a>. Now, in March, some of the data has been deleted from the cloud <em>and</em> from users’ devices.</p>
<p><a href="https://www.reddit.com/r/GooglePixel/comments/1jgs0ur/comment/mj2qkrc/">Throwaway-Card79</a>:</p>
<blockquote cite="https://www.reddit.com/r/GooglePixel/comments/1jgs0ur/comment/mj2qkrc/"><p>This non-apology is such a joke. I switched to local device storage in December after receiving the email even though it said I had until May to do it. Apparently I didn’t turn on cloud backup. Probably because I figured it would be fine to do it later as long as it was before the May deadline. But it seems they deleted my data from their servers straight away? How have they managed to delete data stored on my phone? This sucks so much and is concerning given how much I rely on other Google products. Shocking mistake to make and then just say “oopsie.”</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2024/07/10/google-maps-is-killing-timeline-for-web/">Google Maps Is Killing Timeline for Web</a></li>
<li><a href="https://mjtsai.com/blog/2024/05/15/google-cloud-accidentally-deletes-customers-account/">Google Cloud Accidentally Deletes Customer’s Account</a></li>
<li><a href="https://mjtsai.com/blog/2022/08/22/google-account-deleted-due-to-csam-false-positive/">Google Account Deleted Due to CSAM False Positive</a></li>
<li><a href="https://mjtsai.com/blog/2018/07/24/relying-on-google-cloud/">Relying on Google Cloud</a></li>
<li><a href="https://mjtsai.com/blog/2016/01/05/google-docs-data-loss/">Google Docs Data Loss</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/24/google-maps-timeline-data-loss/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>Tim, Don’t Kill My Vibe</title>
<link>https://mjtsai.com/blog/2025/03/24/tim-dont-kill-my-vibe/</link>
<comments>https://mjtsai.com/blog/2025/03/24/tim-dont-kill-my-vibe/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Mon, 24 Mar 2025 20:38:51 +0000</pubDate>
<category><![CDATA[Programming]]></category>
<category><![CDATA[App Review]]></category>
<category><![CDATA[App Store]]></category>
<category><![CDATA[Artificial Intelligence]]></category>
<category><![CDATA[Developer Tool]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[React Native]]></category>
<category><![CDATA[Swift Assist]]></category>
<category><![CDATA[Visual Studio Code]]></category>
<category><![CDATA[Xcode]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47176</guid>
<description><![CDATA[Bryan Irace: It’s one thing for Apple’s AI product offerings to be non-competitive. Perhaps even worse is that as Apple stands still, software development is moving forward faster than ever before. Like it or not, LLMs—both through general chat interfaces and purpose-built developer tools—have meaningfully increased the rate at which new software can be produced. […]]]></description>
<content:encoded><![CDATA[<p><a href="https://irace.me/vibe">Bryan Irace</a>:</p>
<blockquote cite="https://irace.me/vibe"><p>It’s one thing for Apple’s AI <em>product offerings</em> to be non-competitive. Perhaps even worse is that as Apple stands still, software development is moving forward faster than ever before. Like it or not, LLMs—both through general chat interfaces and purpose-built developer tools—have meaningfully increased the rate at which new software can be produced. And they’ve done so both by making skilled developers more productive while also lowering the bar for less-experienced participants.</p><p>Barring a sharp correction, Apple looks increasingly likely to miss out on a generation of developers conditioned to first reach for tools like <a href="https://cursor.com">Cursor</a>, <a href="https://replit.com">Replit</a>, or <a href="https://v0.dev">v0</a>—especially as Apple’s own AI tooling <a href="https://dimillian.medium.com/where-is-swift-assist-6ea348767cf3">remains notably absent</a>. This goes well beyond enabling new entrants to “<a href="https://x.com/karpathy/status/1886192184808149383">vibe code</a>”—experienced mobile developers who, despite history with Xcode and a predilection for building native apps, are begrudgingly swapping out their tools in acknowledgement of the inarguable productivity benefits.</p><p>Sure, AI-assisted developer tools <em>can</em> be used to generate native iOS apps, but they’re not nearly as good at this as they are at generating e.g. React, whose developer experience advantage predates the LLM wave and has only since accelerated.</p><p>[…]</p><p>App Review has always long been a major source of developer frustration. Authoritarian yet inconsistent policy enforcement aside, it’s simply too hard to distribute software <em>even to your own Apple devices</em>, let alone someone else’s. This isn’t new by any means, but as the time to build an app shrinks from weeks/months to hours/days, it feels more egregious—and thus like more of a liability—than ever before.</p></blockquote>
<p><a href="https://mastodon.social/@gruber/114207025569844968">John Gruber</a>:</p>
<blockquote cite="https://mastodon.social/@gruber/114207025569844968"><p>Basically, the threat to Apple the App Store poses is NOT regulators coming for it. That’s a distraction. The threat, as I’ve always tried to argue, perhaps unsuccessfully, is that market forces will work against it eventually. The App Store should have been making developers (mostly) happy all along, not mostly miserable.</p><p>And AI might be the disruption that brings about the “eventually”.</p></blockquote>
<p><a href="https://mister.computer/@kyle/114218372288334831">Kyle Hughes</a>:</p>
<blockquote cite="https://mister.computer/@kyle/114218372288334831">
<p>The speed with which I abandoned a decade of manicured Xcode project & window management muscle memory in favor of a mess of VS Code clones taught me something about myself and my work and what is important.</p>
</blockquote>
<p><a href="https://blog.replit.com/fourth">Jon Stokes</a>:</p>
<blockquote cite="https://blog.replit.com/fourth">
<p>In normieland, where I still spend plenty of time both online and IRL, software’s newfound ability to write, draw, and speak like we humans is often taken as evidence that the machines are about to remake our entire society (again) and totally change the nature and value of labor (again). I don’t think the normies are wrong about this, but as flashy as <a href="https://www.jonstokes.com/p/getting-started-with-stable-diffusion">Stable Diffusion</a> and <a href="https://openai.com/blog/chatgpt/">ChatGPT</a> are, old heads know that the Robot Apocalypse has exactly <a href="https://www.jonstokes.com/p/when-software-writes-the-software">one and only one horseman</a>: <strong>computer programs that can write computer programs</strong>.</p>
<p>[…]</p>
<p>If you were going to design a platform for the express purpose of teaching machines to code, it would probably be a cloud-hosted IDE plus execution environment that looks a lot like Replit. So while most of what you’ll read in this article and followups is applicable to all AI code generation tools more generally, I’ll be focusing on Replit’s toolset because right now it’s the richest and most advanced, and has the most potential for advancing the state-of-the-art.</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/21/vibe-coding/">Vibe Coding</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/14/app-review-never-change/">App Review, Never Change</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/13/rotten/">Rotten</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/12/whither-swift-assist/">Whither Swift Assist?</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/12/chatgpt-now-integrates-directly-with-xcode/">ChatGPT Now Integrates Directly With Xcode</a></li>
<li><a href="https://mjtsai.com/blog/2024/11/04/how-to-use-cursor-for-ios-development/">How to Use Cursor for iOS Development</a></li>
<li><a href="https://mjtsai.com/blog/2025/02/27/our-changing-relationship-with-apple/">Our Changing Relationship With Apple</a></li>
<li><a href="https://mjtsai.com/blog/2024/10/31/github-copilot-for-xcode/">GitHub Copilot for Xcode</a></li>
<li><a href="https://mjtsai.com/blog/2023/05/12/llm-coding-tools-in-xcode/">LLM Coding Tools in Xcode</a></li>
<li><a href="https://mjtsai.com/blog/2021/06/03/developer-relations/">Apple Developer Relations</a></li>
</ul>
<p id="tim-dont-kill-my-vibe-update-2025-03-25">Update (2025-03-25): <a href="https://daringfireball.net/linked/2025/03/24/irace-vibe-killing">John Gruber</a> (<a href="https://mastodon.social/@daringfireball/114219885665093335">Mastodon</a>):</p>
<blockquote cite="https://daringfireball.net/linked/2025/03/24/irace-vibe-killing">
<p>17 years is a long time, though. And developers long ago stopped seeing the App Store as something that makes them happy, or that <em>reduces</em> friction and hassle from their lives. Instead they view it as a major source of friction and hassle. Apple should have focused on keeping the App Store as a thing that makes developers (mostly) happy all along, not (as things stand today) mostly miserable.</p>
<p>[…]</p>
<p>Apple should move mountains to refocus itself on making the experience of developing for (and on) Apple platforms the best in the world, including distribution and monetization. Instead, they seem to be resting on the assumption that it’s a privilege, self-evident to all, just to be allowed to develop for Apple platforms.</p>
</blockquote>
<p>See also: <a href="https://mjtsai.com/blog/2025/03/24/mobile-app-revenue-in-2025/#comment-4242119">Bri</a> and <a href="https://news.ycombinator.com/item?id=43470725">Hacker News</a>.</p>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/24/tim-dont-kill-my-vibe/feed/</wfw:commentRss>
<slash:comments>1</slash:comments>
</item>
<item>
<title>Mobile App Revenue in 2025</title>
<link>https://mjtsai.com/blog/2025/03/24/mobile-app-revenue-in-2025/</link>
<comments>https://mjtsai.com/blog/2025/03/24/mobile-app-revenue-in-2025/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Mon, 24 Mar 2025 20:38:38 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Android]]></category>
<category><![CDATA[App Store]]></category>
<category><![CDATA[App Subscriptions]]></category>
<category><![CDATA[Business]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[RevenueCat]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47174</guid>
<description><![CDATA[Scharon Harding (Hacker News): If you’re frustrated by some of your favorite apps pestering you to sign up for a subscription, some new data may help you empathize with their developers more. According to revenue data from “over 75,000" mobile apps, the vast majority have a hard time making $1,000 per month.The data is detailed […]]]></description>
<content:encoded><![CDATA[<p><a href="https://arstechnica.com/gadgets/2025/03/sobering-revenue-stats-of-70k-mobile-apps-show-why-devs-beg-for-subscriptions/">Scharon Harding</a> (<a href="https://news.ycombinator.com/item?id=43394099">Hacker News</a>):</p>
<blockquote cite="https://arstechnica.com/gadgets/2025/03/sobering-revenue-stats-of-70k-mobile-apps-show-why-devs-beg-for-subscriptions/"><p>If you’re frustrated by some of your favorite apps pestering you to sign up for a subscription, some new data may help you empathize with their developers more. According to revenue data from “over 75,000" mobile apps, the vast majority have a hard time making $1,000 per month.</p><p>The data is detailed in RevenueCat’s 2025 <a href="http://www.revenuecat.com/report">State of Subscription Apps</a> report. RevenueCat makes a mobile app subscription tool kit and gathered the report’s data from apps using its platform.</p><p>[…]</p><p>Some app categories with the smallest percentage of newly launched apps hitting the $1,000 mark are shopping, travel, and utilities. Photo, video, and gaming apps are the most likely to hit $1,000/month within two years.</p></blockquote>
<p><a href="https://www.revenuecat.com/state-of-subscription-apps-2025/">RevenueCat</a>:</p>
<blockquote cite="https://www.revenuecat.com/state-of-subscription-apps-2025/">
<p>The gap between winners and the rest is growing – At $8,880 the top 5% of newly launched apps make over 400x as much money after their first year, compared to the bottom 25% who make no more than $19. This gap has grown significantly since last year’s 200x.</p>
</blockquote>
<p>However, they are also analyzing more than twice as many apps as last year. Presumably, most of the apps new to the list are towards the bottom in revenue.</p>
<blockquote cite="https://www.revenuecat.com/state-of-subscription-apps-2025/">
<p>Churn hits hard and fast – Nearly 30% of annual subscriptions are canceled in the first month. If you don’t win them back over, at the end of that first year, they’re gone. Retention starts on day one.</p>
<p>Low prices keep users locked in – Most apps with cheap annual plans keep up to 36.0% of users subscribed after a year. High-priced monthly plans? Just 6.7% stick around.</p>
</blockquote>
<p>But even 36% retention sounds terrible.</p>
<blockquote cite="https://www.revenuecat.com/state-of-subscription-apps-2025/">
<p>The CPI gap between iOS and Play Store in North America is striking, with iOS CPIs reaching nearly 3x those of Play Store in some categories.</p>
</blockquote>
<p>Does this mean that iOS users don’t want more apps? Or that the ad system doesn’t work very well?</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2024/03/13/most-subscriptions-apps-do-not-make-money/">Most Subscriptions Apps Do Not Make Money</a></li>
<li><a href="https://mjtsai.com/blog/2023/05/12/more-app-store-studies/">More App Store Studies</a></li>
<li><a href="https://mjtsai.com/blog/2016/05/23/94-of-app-store-revenue-comes-from-the-top-1/">94% of App Store Revenue Comes From the Top 1%</a></li>
<li><a href="https://mjtsai.com/blog/2016/04/14/over-70-of-app-store-purchases-are-for-games/">Over 70% of App Store Purchases Are for Games</a></li>
<li><a href="https://mjtsai.com/blog/2015/01/20/the-shape-of-the-app-store/">The Shape of the App Store</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/24/mobile-app-revenue-in-2025/feed/</wfw:commentRss>
<slash:comments>3</slash:comments>
</item>
<item>
<title>Swift Testing Proposal: Exit Tests</title>
<link>https://mjtsai.com/blog/2025/03/21/swift-testing-proposal-exit-tests/</link>
<comments>https://mjtsai.com/blog/2025/03/21/swift-testing-proposal-exit-tests/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Fri, 21 Mar 2025 20:17:58 +0000</pubDate>
<category><![CDATA[Programming]]></category>
<category><![CDATA[Language Design]]></category>
<category><![CDATA[Swift Programming Language]]></category>
<category><![CDATA[Testing]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47157</guid>
<description><![CDATA[ST-0008: One of the first enhancement requests we received for Swift Testing was the ability to test for precondition failures and other critical failures that terminate the current process when they occur. […] This proposal introduces new overloads of the #expect() and #require() macros that take, as an argument, a closure to be executed in […]]]></description>
<content:encoded><![CDATA[<p><a href="https://github.com/swiftlang/swift-evolution/blob/main/proposals/testing/0008-exit-tests.md">ST-0008</a>:</p>
<blockquote cite="https://github.com/swiftlang/swift-evolution/blob/main/proposals/testing/0008-exit-tests.md">
<p>One of the first enhancement requests we received for Swift Testing was the ability to test for precondition failures and other critical failures that terminate the current process when they occur.</p>
<p>[…]</p>
<p>This proposal introduces new overloads of the <code>#expect()</code> and <code>#require()</code>
macros that take, as an argument, a closure to be executed in a child process.
When called, these macros spawn a new process using the relevant
platform-specific interface (<code>posix_spawn()</code>, <code>CreateProcessW()</code>, etc.), call
the closure from within that process, and suspend the caller until that process
terminates. The exit status of the process is then compared against a known
value passed to the macro, allowing the test to pass or fail as appropriate.</p>
</blockquote>
<p>I had heard talk about changing the behavior of preconditions and assertions during tests so that they would signal back to the testing system instead of actually terminating the process. This is a much more ambitious solution and should be more widely useful. For example, I’ve written tests to reproduce crashes that are triggered by a bug, but I can’t leave these enabled with XCTest because they’ll crash the whole testing system.</p>
<blockquote cite="https://github.com/swiftlang/swift-evolution/blob/main/proposals/testing/0008-exit-tests.md">
<p>Exit tests cannot capture any state originating in the parent process or from the enclosing lexical context.</p>
</blockquote>
<p>This is an unsurprising limitation. I’m guessing that it won’t be much of a problem, but I’m not sure without trying it.</p>
<blockquote cite="https://github.com/swiftlang/swift-evolution/blob/main/proposals/testing/0008-exit-tests.md">
<p>It is often interesting to examine what is written to the standard output and
standard error streams by code running in an exit test. Callers can request that
either or both stream be captured and included in the result of the call to
<code>#expect(exitsWith:)</code> or <code>#require(exitsWith:)</code>.</p>
<p>[…]</p>
<p>The technical constraints preventing recursive exit test invocation can be resolved if there is a need to do so. However, we don't anticipate that this constraint will be a serious issue for developers.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2024/12/17/issues-adopting-swift-testing/">Issues Adopting Swift Testing</a></li>
<li><a href="https://mjtsai.com/blog/2024/07/17/swift-testing-in-xcode-16/">Swift Testing in Xcode 16</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/21/swift-testing-proposal-exit-tests/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>SwiftUI Fundamentals</title>
<link>https://mjtsai.com/blog/2025/03/21/swiftui-fundamentals/</link>
<comments>https://mjtsai.com/blog/2025/03/21/swiftui-fundamentals/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Fri, 21 Mar 2025 20:17:48 +0000</pubDate>
<category><![CDATA[Programming]]></category>
<category><![CDATA[Book]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[SwiftUI]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47155</guid>
<description><![CDATA[Natalia Panferova (tweet): This book distills the core principles and foundational concepts behind SwiftUI, the modern UI framework for building apps across Apple platforms. My goal is to help you go beyond surface-level understanding and develop a deep, practical knowledge of how SwiftUI works under the hood. SwiftUI provides a simple, declarative way to build […]]]></description>
<content:encoded><![CDATA[<p><a href="https://books.nilcoalescing.com/swiftui-fundamentals">Natalia Panferova</a> (<a href="https://x.com/natpanferova/status/1902118120044818449">tweet</a>):</p>
<blockquote cite="https://books.nilcoalescing.com/swiftui-fundamentals">
<p>This book distills the core principles and foundational concepts behind SwiftUI, the modern UI framework for building apps across Apple platforms. My goal is to help you go beyond surface-level understanding and develop a deep, practical knowledge of how SwiftUI works under the hood.</p>
<p>SwiftUI provides a simple, declarative way to build user interfaces, but behind that simplicity is a carefully designed architecture that can be tricky to grasp without the right perspective. In this book, we’ll explore the key APIs and design patterns that power SwiftUI, giving you a solid foundation to write more efficient, maintainable, and expressive code.</p>
<p>I’ve been working with SwiftUI since it was first released and later had the privilege of contributing to its development as a member of the core SwiftUI team at Apple, where I helped design and build some of the framework’s most widely used APIs. I wrote this book to share the insights I gained during that time, insights that will help you better understand how SwiftUI is built and how you can use it more effectively in your own projects.</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2024/12/19/swiftuwhy/">SwiftUWhy</a></li>
<li><a href="https://mjtsai.com/blog/2024/07/24/swiftui-at-wwdc24/">SwiftUI at WWDC24</a></li>
<li><a href="https://mjtsai.com/blog/2024/02/16/the-swiftui-field-guide/">The SwiftUI Field Guide</a></li>
<li><a href="https://mjtsai.com/blog/2023/10/04/thinking-in-swiftui-2023/">Thinking in SwiftUI (2023)</a></li>
<li><a href="https://mjtsai.com/blog/2023/06/30/macos-apprentice/">macOS Apprentice</a></li>
<li><a href="https://mjtsai.com/blog/2022/10/13/integrate-swiftui-into-a-uikit-app/">Integrate SwiftUI Into a UIKit App</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/21/swiftui-fundamentals/feed/</wfw:commentRss>
<slash:comments>6</slash:comments>
</item>
<item>
<title>Apple Shifts Siri From Giannandrea to Rockwell</title>
<link>https://mjtsai.com/blog/2025/03/21/apple-shifts-siri-from-giannandrea-to-rockwell/</link>
<comments>https://mjtsai.com/blog/2025/03/21/apple-shifts-siri-from-giannandrea-to-rockwell/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Fri, 21 Mar 2025 20:17:43 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Apple]]></category>
<category><![CDATA[Apple Intelligence]]></category>
<category><![CDATA[Apple Software Quality]]></category>
<category><![CDATA[Apple Vision Pro]]></category>
<category><![CDATA[Artificial Intelligence]]></category>
<category><![CDATA[Craig Federighi]]></category>
<category><![CDATA[Firing]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[Music]]></category>
<category><![CDATA[Reminders]]></category>
<category><![CDATA[Siri]]></category>
<category><![CDATA[Top Posts]]></category>
<category><![CDATA[visionOS]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47153</guid>
<description><![CDATA[John Gruber (Mastodon): Whole Reddit thread examining this simple question: “What month is it?” and Siri’s “I’m sorry, I don’t understand” response (which I just reproduced on my iPhone 16 Pro running iOS 18.4b4). One guy changed the question to “What month is it currently?” and got the answer “It is 2025.” David Price: I’d […]]]></description>
<content:encoded><![CDATA[<p><a href="https://daringfireball.net/linked/2025/03/19/hey-siri-what-month-is-it">John Gruber</a> (<a href="https://mastodon.social/@daringfireball/114191794351946075">Mastodon</a>):</p>
<blockquote cite="https://daringfireball.net/linked/2025/03/19/hey-siri-what-month-is-it">
<p>Whole <a href="https://www.reddit.com/r/iphone/comments/1jehkpm/apple_intelligence_this_apple_intelligence_that/">Reddit thread</a> examining this simple question: “What month is it?” and Siri’s “I’m sorry, I don’t understand” response (which I just reproduced on my iPhone 16 Pro running iOS 18.4b4). One guy changed the question to “What month is it currently?” and got the answer “It is 2025.”</p>
</blockquote>
<p><a href="https://www.macworld.com/article/2643682/is-siri-really-that-bad-yes-yes-it-is.html">David Price</a>:</p>
<blockquote cite="https://www.macworld.com/article/2643682/is-siri-really-that-bad-yes-yes-it-is.html"><p>I’d like it to be known that I hated Siri before it was cool. I’ve <a href="https://www.macworld.com/article/1501250/homepod-second-generation-siri-voice-assistant.html">written</a><a href="https://www.macworld.com/article/1957801/siri-disaster-apple-doesnt-care.html">numerous</a><a href="https://www.macworld.com/article/2582521/why-doesnt-siri-know-what-it-doesnt-know.html">articles</a> on the subject. I’m an anti-Siri hipster. But when a bandwagon comes along, you better believe I’ll be sitting up front.</p>
<p>[…]</p>
<p>What is surprising is that it’s actually getting worse. And people are noticing. This needs to change, and soon.</p></blockquote>
<p>I’m not sure whether it’s getting <em>worse</em> for my purposes, but after so many years it doesn’t seem to be getting better. I personally don’t care that much about the world knowledge questions. What bothers me is the service itself. It still feels slow in the normal case and sometimes takes 10 or more seconds to fail and do nothing. After a sequence of commands when controlling it with AirPods, it still sometimes stops working, saying that I need to unlock my iPhone (which is not easily reachable—that’s why I was using the AirPods). Reminders still get split, with words lost, or mangled as it tries to parse what was meant to be literal text. Music controls still seem worse than pre-Siri.</p>
<p><a href="https://x.com/markgurman/status/1902752739936829807">Mark Gurman</a> (<a href="https://www.bloomberg.com/news/articles/2025-03-20/apple-vision-pro-chief-mike-rockwell-named-siri-head-giannandrea-keeps-ai-role">article</a>, <a href="https://www.macrumors.com/2025/03/20/siri-leadership-shakeup/">MacRumors</a>):</p>
<blockquote cite="https://x.com/markgurman/status/1902752739936829807"><p>Apple Vision Pro Chief Mike Rockwell will take over Siri, which is being removed from AI Chief John Giannandrea, I’m told. Rockwell & Siri will report to Craig Federighi. Giannandrea is staying in larger AI role.</p><p>The moves have been several months in the making and were planned before Apple confirmed the Siri AI delays earlier this month.</p></blockquote>
<p><a href="https://x.com/rjonesy/status/1902761545286771056">Ryan Jones</a>:</p>
<blockquote cite="https://x.com/rjonesy/status/1902761545286771056"><p>Told ya.</p><p>Tim didn’t “fire” JG “immediately”. Just took away his team.</p><p>(Followed by mutually parting ways in a few months.)</p></blockquote>
<p>I would have assumed they’d keep him around running AI research, but Jones has good instincts on this stuff.</p>
<p><a href="https://finance.yahoo.com/news/apple-shuffles-ai-executive-ranks-162500488.html">Mark Gurman</a> (<a href="https://news.ycombinator.com/item?id=43431675">Hacker News</a>):</p>
<blockquote cite="https://finance.yahoo.com/news/apple-shuffles-ai-executive-ranks-162500488.html">
<p>Siri — the AI division’s main consumer product — has had a number of bosses over the years. When Apple first launched the voice assistant in 2011, it was overseen by software executive Scott Forstall. It was then given to services chief Eddy Cue in 2012 and transferred to the current software head, Federighi, in 2017. Giannandrea took it over a year later. Now it will be led by Rockwell, with oversight returning again to Federighi.</p>
</blockquote>
<p><a href="https://daringfireball.net/linked/2025/03/20/gurman-rockwell-siri">John Gruber</a> (<a href="https://mastodon.social/@daringfireball/114195714706764138">Mastodon</a>):</p>
<blockquote cite="https://daringfireball.net/linked/2025/03/20/gurman-rockwell-siri">
<p>My quick take on this is that it’s a turf battle that Craig Federighi just won. It’s not just putting a new executive in charge of Siri, it’s moving Siri under Federighi’s group.</p>
</blockquote>
<p>Somehow, <a href="https://www.reddit.com/r/apple/comments/7h0vy4/teflon_craig_federighi_we_love_him_too_much/">Teflon Federighi</a> never seems to get blamed for Apple’s software failures, even though they extend way behind Siri and seem to coincide with his tenure. Siri has always been a mess, but macOS used to be really solid and better designed.</p>
<p><a href="https://libertynode.net/@mike/114195793212621119">Mike Rockwell</a> (not the one above):</p>
<blockquote cite="https://libertynode.net/@mike/114195793212621119">
<p>It’s wild to me that there are so many people that see the Apple Intellegence thing as the indication that Apple fell off.</p>
</blockquote>
<p><a href="https://appdot.net/@jgordon/114195750716198243">John Gordon</a>:</p>
<blockquote cite="https://appdot.net/@jgordon/114195750716198243">
<p>The volume of Apple bugs I encounter continues to increase. I think it is going exponential.</p>
</blockquote>
<p><a href="https://mastodon.social/@lapcatsoftware/114196171125152504">Jeff Johnson</a>:</p>
<blockquote cite="https://mastodon.social/@lapcatsoftware/114196171125152504"><p>I think the question Gruber didn’t explore is, why doesn’t Mike Rockwell now report directly to Tim Cook, when John Giannandrea ran Siri and reports directly to Tim Cook?</p><p>To me it looks like a tacit admission that Tim Cook failed in directly overseeing the Siri group.</p></blockquote>
<p><a href="https://x.com/rjonesy/status/1902763651896950925">Ryan Jones</a>:</p>
<blockquote cite="https://x.com/rjonesy/status/1902763651896950925">
<p>Fascinating how certain people are just 10x. Rockwell has lead AR, VR, Vision Pro, and now Siri.</p>
<p>Rockwell (53) is the new Mansfield (65).</p>
</blockquote>
<p><a href="https://mastodon.social/@stroughtonsmith/114196350654074633">Steve Troughton-Smith</a>:</p>
<blockquote cite="https://mastodon.social/@stroughtonsmith/114196350654074633"><p>The anecdotes I’ve been told about Mike Rockwell don’t bode well for third party developer support and Siri’s AI efforts</p></blockquote>
<p><a href="https://spyglass.org/siri-shakeup/">M.G. Siegler</a>:</p>
<blockquote cite="https://spyglass.org/siri-shakeup/"><p>First and foremost, while <a href="https://x.com/mgsiegler/status/1902754868638396450?ref=spyglass.org">I made</a> the quick, cheap, and obvious joke yesterday that Apple was putting the person in charge of the Vision Pro in charge of Siri, this does actually seem like <em>good news</em> for all involved – including us, the end users. While these two projects are linked as two largely unsuccessful ones for Apple, they’re really almost the opposite of one another. Vision Pro isn’t a huge hit for Apple because <a href="https://spyglass.org/vision-pro-launch-disaster/">the strategy around the device was a mess</a>. But the product itself does everything it aims to do and <a href="https://spyglass.org/vision-pro-metallica-concert/">does it increasingly well</a>. Siri, meanwhile, has a strategy that makes sense, especially in our age of AI. But the product is <a href="https://spyglass.org/apple-bad-siri/">a complete and utter mess</a>. And has been <a href="https://spyglass.org/this-is-the-year-of-siri/">for 14 years running</a>.</p><p>[…]</p><p>Rockwell doesn’t have the clout needed to recruit (and retain) the top AI talent that Apple will need here, but JG still does. The mistake seemed to be putting him in charge of the entire org, including the AI user-facing products, when he should have probably been more behind-the-scenes, managing the more technical aspects. He’ll apparently now be able to do that.</p></blockquote>
<p><a href="https://pxlnv.com/linklog/apple-head-computers/">Nick Heer</a>:</p>
<blockquote cite="https://pxlnv.com/linklog/apple-head-computers/">
<p>Unlike the Siri feature delay, I do not think the Vision Pro’s launch affects the company’s credibility at all. It can keep pushing that thing and trying to turn it into something more mass-market. This Siri stuff is going to make me look at WWDC in a whole different light this year.</p>
</blockquote>
<p><a href="https://mastodon.social/@stroughtonsmith/114195315028049064">Steve Troughton-Smith</a>:</p>
<blockquote cite="https://mastodon.social/@stroughtonsmith/114195315028049064"><p>There’s no doubt that Apple sacrificed the Vision Pro’s launch in favor of putting all its effort and energy into Apple Intelligence — that pull-back was clear in the months leading up to it shipping to stores as the company got cold feet.</p><p>There was an awful lot of hubris, arrogance in how Apple treated developers and potential partners (no surprise), but a complete lack of buy-in from the rest of Apple’s engineering.</p></blockquote>
<p><a href="https://mastodon.social/@stroughtonsmith/114195655628698371">Steve Troughton-Smith</a>:</p>
<blockquote cite="https://mastodon.social/@stroughtonsmith/114195655628698371"><p>Also, of note, Apple’s Vision Pro group has lost its leadership in the change, which underscores what I was saying earlier. Apple made a decade-long bet on AR/VR then threw it all away for some snake oil.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/17/leaked-apple-siri-meeting/">Leaked Apple Siri Meeting</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/17/how-apple-could-help-with-ai-and-llms/">How Apple Could Help With AI and LLMs</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/13/rotten/">Rotten</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/12/whither-swift-assist/">Whither Swift Assist?</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/12/apple-delays-more-personalized-siri-apple-intelligence-features/">Apple Delays “More Personalized Siri” Apple Intelligence Features</a></li>
<li><a href="https://mjtsai.com/blog/2025/01/28/siri-super-bowl-regression/">Siri Super Bowl Regression</a></li>
<li><a href="https://mjtsai.com/blog/2018/04/04/apple-hires-john-giannandrea/">Apple Hires John Giannandrea</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/21/apple-shifts-siri-from-giannandrea-to-rockwell/feed/</wfw:commentRss>
<slash:comments>13</slash:comments>
</item>
<item>
<title>Vibe Coding</title>
<link>https://mjtsai.com/blog/2025/03/21/vibe-coding/</link>
<comments>https://mjtsai.com/blog/2025/03/21/vibe-coding/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Fri, 21 Mar 2025 20:17:32 +0000</pubDate>
<category><![CDATA[Programming]]></category>
<category><![CDATA[Artificial Intelligence]]></category>
<category><![CDATA[Developer Tool]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47151</guid>
<description><![CDATA[Andrej Karpathy: There’s a new kind of coding I call “vibe coding”, where you fully give in to the vibes, embrace exponentials, and forget that the code even exists. It’s possible because the LLMs (e.g. Cursor Composer w Sonnet) are getting too good. Also I just talk to Composer with SuperWhisper so I barely even […]]]></description>
<content:encoded><![CDATA[<p><a href="https://x.com/karpathy/status/1886192184808149383">Andrej Karpathy</a>:</p>
<blockquote cite="https://x.com/karpathy/status/1886192184808149383"><p>There’s a new kind of coding I call “vibe coding”, where you fully give in to the vibes, embrace exponentials, and forget that the code even exists. It’s possible because the LLMs (e.g. Cursor Composer w Sonnet) are getting too good. Also I just talk to Composer with SuperWhisper so I barely even touch the keyboard. I ask for the dumbest things like “decrease the padding on the sidebar by half” because I’m too lazy to find it. I “Accept All” always, I don’t read the diffs anymore. When I get error messages I just copy paste them in with no comment, usually that fixes it. The code grows beyond my usual comprehension, I’d have to really read through it for a while. Sometimes the LLMs can’t fix a bug so I just work around it or ask for random changes until it goes away. It’s not too bad for throwaway weekend projects, but still quite amusing. I’m building a project or webapp, but it’s not really coding - I just see stuff, say stuff, run stuff, and copy paste stuff, and it mostly works.</p></blockquote>
<p>Via <a href="https://simonwillison.net/2025/Mar/19/vibe-coding/">Simon Willison</a>:</p>
<blockquote cite="https://simonwillison.net/2025/Mar/19/vibe-coding/">
<p>I’m concerned that the definition is already escaping its original intent. I’m seeing people apply the term “vibe coding” to all forms of code written with the assistance of AI. I think that both dilutes the term and gives a false impression of what’s possible with responsible <a href="https://simonwillison.net/tags/ai-assisted-programming/">AI-assisted programming</a>.</p>
<p>Vibe coding is <em>not</em> the same thing as writing code with the help of LLMs!</p>
<p>[…]</p>
<p>Andrej is an extremely talented and experienced programmer—he has no need for AI assistance at all. He’s using LLMs like this because it’s fun to try out wild new ideas, and the speed at which an LLM can produce code is an order of magnitude faster than even the most skilled human programmers. For low stakes projects and prototypes why not just <em>let it rip</em>?</p>
<p>When I talk about vibe coding I mean <strong>building software with an LLM without reviewing the code it writes</strong>.</p>
</blockquote>
<p><a href="https://x.com/iamdevloper/status/1902628884278894941">I Am Devloper</a>:</p>
<blockquote cite="https://x.com/iamdevloper/status/1902628884278894941">
<p>vibe coding, where 2 engineers can now create the tech debt of at least 50 engineers</p>
</blockquote>
<p><a href="https://cdevroe.com/2025/03/20/the-vibe-coding-litmus-test/">Colin Devroe</a> (<a href="https://mastodon.social/@cdevroe/114195662040757497">Mastodon</a>):</p>
<blockquote cite="https://cdevroe.com/2025/03/20/the-vibe-coding-litmus-test/"><p>But I just want to quickly recommend; do not hire anyone (a person or an agency) that thinks vibe coding is a good idea for production level products.</p><p>Experimenting? Playing? Thinking through ideas rapidly? Absolutely.</p><p>Think I’m crazy? Look at this email I just received from “Ian Foster” of Grayphite – a supposed “Cutting-Edge Software & AI solutions” business.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/12/whither-swift-assist/">Whither Swift Assist?</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/12/chatgpt-now-integrates-directly-with-xcode/">ChatGPT Now Integrates Directly With Xcode</a></li>
<li><a href="https://mjtsai.com/blog/2024/10/31/github-copilot-for-xcode/">GitHub Copilot for Xcode</a></li>
<li><a href="https://mjtsai.com/blog/2023/05/12/llm-coding-tools-in-xcode/">LLM Coding Tools in Xcode</a></li>
</ul>
<p id="vibe-coding-update-2025-03-25">Update (2025-03-25): <a href="https://x.com/karpathy/status/1903671737780498883">Andrej Karpathy</a>:</p>
<blockquote cite="https://x.com/karpathy/status/1903671737780498883"><p>I just vibe coded a whole iOS app in Swift (without having programmed in Swift before, though I learned some in the process) and now ~1 hour later it’s actually running on my physical phone. It was so ez… I had my hand held through the entire process. Very cool.</p></blockquote>
<p><a href="https://sourcegraph.com/blog/revenge-of-the-junior-developer">Steve Yegge</a> (via <a href="https://news.ycombinator.com/item?id=43446695">Hacker News</a>, <a href="https://sourceforge.net/articles/the-evolution-and-future-of-ai-coding-sourcegraph-sourceforge-podcast-episode-24/">interview</a>, <a href="https://developers.slashdot.org/story/24/11/07/1926221/interview-with-programmer-steve-yegge-on-the-future-of-ai-coding">Slashdot</a>):</p>
<blockquote cite="https://sourcegraph.com/blog/revenge-of-the-junior-developer"><p>In this post, I assume that <strong>vibe coding will grow up</strong> and people will use it for real engineering, with the “turn your brain off” version of it sticking around just for prototyping and fun projects. For me, vibe coding just means letting the AI do the work. How closely you choose to <em>pay attention</em> to the AI’s work depends solely on the problem at hand. For production, you pay attention; for prototypes, you chill. Either way, it’s vibe coding if you didn’t write it by hand.</p><p>[…]</p><p>Vibe coding is currently going batshit viral, growing like crazy on a dramatic exponential curve, hitting major media outlets like the NYT, flooding social media, celebrated by some, decried by others. A bunch of companies were busy banishing it just as <a href="https://www.searchenginejournal.com/why-google-may-adopt-vibe-coding-for-search-algorithms/541641/">Google was unofficially adopting it</a>. Everyone’s still arguing about what “vibe coding” even means. But a ton of people, more every day, think it’s the future right now.</p><p>[…]</p><p>The chart in Figure 1 depicts six overlapping waves of programming: traditional (2022), completions-based (2023), chat-based (2024), coding agents (2025 H1), agent clusters (2025 H2), and agent fleets (2026). </p><p>In the figure, traditional and completions-based coding – the two manual modalities – are on the decline, and the others are rising exponentially. Beginning with chat, each new wave rises much faster than previous waves. Finally the figure depicts vibe coding as also increasing exponentially, but on a dotted line alongside the others, because as we’ll see in a bit, vibe coding is not a modality.</p></blockquote>
<p><a href="https://cendyne.dev/posts/2025-03-19-vibe-coding-vs-reality.html">Cendyne</a> (via <a href="https://news.ycombinator.com/item?id=43448432">Hacker News</a>):</p>
<blockquote cite="https://cendyne.dev/posts/2025-03-19-vibe-coding-vs-reality.html">
<p>The execution of agents today is over-hyped and does not hold up to the needs of any functioning businesses which need experts to develop and maintain their technical capabilities instead of single points of failure on the internet.</p>
<p>These models are trained on average sloppy code, wrong answers on Stack Overflow, and the junk that ends up on Quora. Despite the power and capability Claude 3.7 Sonnet has in small contexts, when faced with even a small codebase it makes constant silly mistakes that no normal developer would repeat and continue to repeat every hour of its operation.</p>
<p>[…]</p>
<p>Without expert intervention, the best these tools can do today is produce a somewhat functional mockup, where every future change beyond that risks destroying existing functionality.</p>
</blockquote>
<p><a href="https://martinfowler.com/articles/exploring-gen-ai.html#memo-13">Birgitta Böckeler</a>:</p>
<blockquote cite="https://martinfowler.com/articles/exploring-gen-ai.html#memo-13">
<p>In the past few months, I have regularly used the agentic modes in <a href="https://www.cursor.com/">Cursor</a>, <a href="https://codeium.com/windsurf">Windsurf</a> and <a href="https://cline.bot/">Cline</a>, almost exclusively for changing existing codebases (as opposed to creating Tic Tac Toe from scratch). I am overall very impressed by the recent progress in IDE integration and how those integrations massively boost the way in which the tools can assist me.</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/24/tim-dont-kill-my-vibe/">Tim, Don’t Kill My Vibe</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/21/vibe-coding/feed/</wfw:commentRss>
<slash:comments>6</slash:comments>
</item>
<item>
<title>LogUI 1.0</title>
<link>https://mjtsai.com/blog/2025/03/21/logui-1-0/</link>
<comments>https://mjtsai.com/blog/2025/03/21/logui-1-0/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Fri, 21 Mar 2025 20:17:18 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Developer Tool]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[Mac App]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[os_log]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47149</guid>
<description><![CDATA[Howard Oakley: For most, Console isn’t the right tool. It only offers the options of viewing its live stream, or making an archive of the whole log and wading through that when you need to look at an event in the past. Although my log browser Ulbow gives much better access, for many it’s still […]]]></description>
<content:encoded><![CDATA[<p><a href="https://eclecticlight.co/2025/03/14/browse-your-macs-log-with-logui/">Howard Oakley</a>:</p>
<blockquote cite="https://eclecticlight.co/2025/03/14/browse-your-macs-log-with-logui/">
<p>For most, Console isn’t the right tool. It only offers the options of viewing its live stream, or making an archive of the whole log and wading through that when you need to look at an event in the past. Although my log browser <a href="https://eclecticlight.co/consolation-t2m2-and-log-utilities/">Ulbow</a> gives much better access, for many it’s still a daunting task. I’ve now switched almost entirely to using my new lightweight log browser, LogUI, and here explain how you can use it.</p>
<p>[…]</p>
<p>Before opening LogUI, generate an event that you can examine in the log.</p>
</blockquote>
<p>Whereas with Console it’s important to generate the event <em>after</em>.</p>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/21/logui-1-0/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>Two Decades of Bjango</title>
<link>https://mjtsai.com/blog/2025/03/21/two-decades-of-bjango/</link>
<comments>https://mjtsai.com/blog/2025/03/21/two-decades-of-bjango/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Fri, 21 Mar 2025 20:17:01 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Anniversary]]></category>
<category><![CDATA[Business]]></category>
<category><![CDATA[Dashboard]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iStat Menus]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[Mac App]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47147</guid>
<description><![CDATA[Bjango: In the beginning, Bjango was just a couple of friends making free OS X Dashboard widgets. We started working on those widgets prior to OS X 10.4 Tiger’s release on 29 April 2005, so my best guess is we started working together some time in March 2005.After releasing a few successful widgets, we moved […]]]></description>
<content:encoded><![CDATA[<p><a href="https://bjango.com/articles/twodecades/">Bjango</a>:</p>
<blockquote cite="https://bjango.com/articles/twodecades/"><p>In the beginning, Bjango was just a couple of friends making free OS X Dashboard widgets. We started working on those widgets prior to OS X 10.4 Tiger’s release on 29 April 2005, so my best guess is we started working together some time in March 2005.</p><p>After releasing a few successful widgets, we moved on to what we really wanted to create — full Mac apps. iStat Menus 1.0 was released May 2007, and has seen constant updates since. I can’t believe we’ve been working on iStat Menus for almost 18 years.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/02/24/provue-at-the-first-macworld-expo/">ProVUE at the First Macworld Expo</a></li>
<li><a href="https://mjtsai.com/blog/2022/09/08/indie-anniversaries/">Indie Anniversaries</a></li>
<li><a href="https://mjtsai.com/blog/2024/08/01/istat-menus-7/">iStat Menus 7</a></li>
<li><a href="https://mjtsai.com/blog/2021/11/29/snowflake-weather-1-3-for-ios/">Snowflake Weather 1.3 for iOS</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/21/two-decades-of-bjango/feed/</wfw:commentRss>
<slash:comments>5</slash:comments>
</item>
<item>
<title>Apple Under German Antitrust Scrutiny</title>
<link>https://mjtsai.com/blog/2025/03/21/apple-under-german-antitrust-scrutiny/</link>
<comments>https://mjtsai.com/blog/2025/03/21/apple-under-german-antitrust-scrutiny/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Fri, 21 Mar 2025 20:16:50 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Antitrust]]></category>
<category><![CDATA[App Tracking Transparency]]></category>
<category><![CDATA[Apple]]></category>
<category><![CDATA[Germany]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[Legal]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47145</guid>
<description><![CDATA[Karin Matussek (Hacker News): The judges on Tuesday said the Federal Cartel Office was right to find that the iPhone maker’s footprint across markets meets the threshold for more oversight.[…]Apple was attempting to topple a May 2023 decision by the German antitrust watchdog, which subjected it to the so-called 19a rules on the grounds that […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.bloomberg.com/news/articles/2025-03-18/apple-loses-top-court-fight-against-german-antitrust-crackdown">Karin Matussek</a> (<a href="https://news.ycombinator.com/item?id=43410247">Hacker News</a>):</p>
<blockquote cite="https://www.bloomberg.com/news/articles/2025-03-18/apple-loses-top-court-fight-against-german-antitrust-crackdown"><p>The judges on Tuesday said the Federal Cartel Office was right to find that the iPhone maker’s footprint across markets meets the threshold for more oversight.</p><p>[…]</p><p>Apple was attempting to topple a May 2023 <a href="https://archive.is/o/GAJzw/https://www.bloomberg.com/news/terminal/RSMWC6DWX2PS">decision</a> by the German antitrust watchdog, which subjected it to the so-called 19a rules on the grounds that its strong position in digital markets could threaten competition.</p></blockquote>
<p><a href="https://www.reuters.com/technology/apple-loses-german-antitrust-appeal-opening-door-greater-controls-2025-03-18/">Ursula Knapp</a>:</p>
<blockquote cite="https://www.reuters.com/technology/apple-loses-german-antitrust-appeal-opening-door-greater-controls-2025-03-18/"><p>With that, Apple joins Google parent Alphabet, and Facebook owner Meta, on Germany’s growing list of tech giants subject to possible measures curbing their dominance.</p><p>[…]</p><p>“Our ongoing review of Apple’s tracking regulation for third-party apps is therefore on a solid footing, and we are working flat out on this case and other cases against the major internet companies,” [Mundt] added.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/19/dma-compliance-watch-and-headphone-interoperability/">DMA Compliance: Watch and Headphone Interoperability</a></li>
<li><a href="https://mjtsai.com/blog/2022/06/29/german-antitrust-probe-into-app-tracking-transparency/">German Antitrust Probe Into App Tracking Transparency</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/21/apple-under-german-antitrust-scrutiny/feed/</wfw:commentRss>
<slash:comments>1</slash:comments>
</item>
<item>
<title>Lifetime Dependencies in Swift 6.2 and Beyond</title>
<link>https://mjtsai.com/blog/2025/03/19/lifetime-dependencies-in-swift-6-2-and-beyond/</link>
<comments>https://mjtsai.com/blog/2025/03/19/lifetime-dependencies-in-swift-6-2-and-beyond/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Wed, 19 Mar 2025 19:18:22 +0000</pubDate>
<category><![CDATA[Programming]]></category>
<category><![CDATA[Language Design]]></category>
<category><![CDATA[Memory Management]]></category>
<category><![CDATA[Swift Programming Language]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47141</guid>
<description><![CDATA[John McCall: SE-0446 added basic language support in Swift for non-escapable types, whose values are restricted in scope. However, it intentionally left out the ability for functions and properties to return values of these types, pending a future proposal to add lifetime dependencies. The design and implementation of that proposal is still in progress. In […]]]></description>
<content:encoded><![CDATA[<p><a href="https://forums.swift.org/t/experimental-support-for-lifetime-dependencies-in-swift-6-2-and-beyond/78638">John McCall</a>:</p>
<blockquote cite="https://forums.swift.org/t/experimental-support-for-lifetime-dependencies-in-swift-6-2-and-beyond/78638"><p><a href="https://github.com/swiftlang/swift-evolution/blob/main/proposals/0446-non-escapable.md">SE-0446</a> added basic language support in Swift for non-escapable types, whose values are restricted in scope. However, it intentionally left out the ability for functions and properties to return values of these types, pending a future proposal to add <a href="https://github.com/swiftlang/swift-evolution/blob/main/proposals/0446-non-escapable.md#initializers-and-lifetime-dependencies">lifetime dependencies</a>. The design and implementation of that proposal is still in progress. In the meantime, <a href="https://github.com/swiftlang/swift-evolution/blob/main/proposals/0456-stdlib-span-properties.md">SE-0456</a> added multiple properties to the standard library which return <code>Span</code>, a non-escapable type. These properties have been defined using a feature, <code>@lifetime</code>, that is not yet officially in the language.</p><p>[…]</p><p>However, we’re conscious that the development of that feature may take a few releases, and we want developers to be able to take advantage of non-escapable types like <code>Span</code> in their own code and APIs in the meantime.</p><p>[…]</p><p>The Language Steering Group is therefore considering introducing <code>@lifetime</code> as a <em>supported experimental feature</em> in Swift 6.2.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2023/03/22/swift-proposal-noncopyable-structs-and-enums/">Swift Proposal: Noncopyable Structs and Enums</a></li>
<li><a href="https://mjtsai.com/blog/2022/11/29/introduction-to-move-only-types-in-swift/">Introduction to Move-Only Types in Swift</a></li>
<li><a href="https://mjtsai.com/blog/2022/07/26/swift-proposal-move-function/">Swift Proposal: Move Function</a></li>
<li><a href="https://mjtsai.com/blog/2021/12/23/roadmap-for-improving-swift-performance-predictability/">Roadmap for Improving Swift Performance Predictability</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/19/lifetime-dependencies-in-swift-6-2-and-beyond/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>DMA Compliance: Watch and Headphone Interoperability</title>
<link>https://mjtsai.com/blog/2025/03/19/dma-compliance-watch-and-headphone-interoperability/</link>
<comments>https://mjtsai.com/blog/2025/03/19/dma-compliance-watch-and-headphone-interoperability/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Wed, 19 Mar 2025 19:18:03 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[AirDrop]]></category>
<category><![CDATA[Airplane]]></category>
<category><![CDATA[AirPods]]></category>
<category><![CDATA[Antitrust]]></category>
<category><![CDATA[Digital Markets Act (DMA)]]></category>
<category><![CDATA[European Union]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[Notification Center]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47138</guid>
<description><![CDATA[Benjamin Mayo (Hacker News): The EU has followed up on its Digital Markets Act specification procedures for Apple regarding the iPhone’s interoperability with third-party connected devices like smartwatches and headphones, as announced last fall. Today’s announcement details exactly what third-party integrations the EU commission expects Apple to implement. This includes giving third-party devices access to […]]]></description>
<content:encoded><![CDATA[<p><a href="https://9to5mac.com/2025/03/19/eu-order-apple-interoperability/">Benjamin Mayo</a> (<a href="https://news.ycombinator.com/item?id=43413426">Hacker News</a>):</p>
<blockquote cite="https://9to5mac.com/2025/03/19/eu-order-apple-interoperability/"><p>The EU has followed up on its Digital Markets Act specification procedures for Apple regarding the iPhone’s interoperability with third-party connected devices like smartwatches and headphones, <a href="https://9to5mac.com/2024/09/19/eu-apple-iphone-third-party-watch-accessories/">as announced last fall</a>. </p><p><a href="https://ec.europa.eu/commission/presscorner/detail/en/ip_25_816">Today’s announcement</a> details exactly what third-party integrations the EU commission expects Apple to implement. This includes giving third-party devices access to iOS notifications, as well as way for companies to make like-for-like competitors to AirDrop file sharing, AirPlay streaming, and much more. </p><p>The list of features that the EU commission has ordered Apple to implement is vast, as well as signalling that any future Apple features with first-party hardware integrations must also be made available to third-party companies.</p><p>[…]</p><p>Headphone makers will be given access to system features that support AirPods, like proximity auto-pairing and automatic audio switching.</p></blockquote>
<p><a href="https://www.macrumors.com/2025/03/19/apple-eu-interoperability-bad-for-products-users/">Tim Hardwick</a>:</p>
<blockquote cite="https://www.macrumors.com/2025/03/19/apple-eu-interoperability-bad-for-products-users/"><p>“Today’s decisions wrap us in red tape, slowing down Apple’s ability to innovate for users in Europe and forcing us to give away our new features for free to companies who don’t have to play by the same rules,” said Apple in a statement given to MacRumors. “It’s bad for our products and for our European users. We will continue to work with the European Commission to help them understand our concerns on behalf of our users.”</p></blockquote>
<p><a href="https://mastodon.social/@amyworrall/114190421400972534">Amy Worrall</a>:</p>
<blockquote cite="https://mastodon.social/@amyworrall/114190421400972534"><p>“Europe forces Apple to compete by actually innovating, rather than holding back competitors through their monopoly” doesn’t make as good a sound bite, I guess.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/19/apple-restricts-pebble-from-being-awesome-with-iphones/">Apple Restricts Pebble From Being Awesome With iPhones</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/14/dma-compliance-default-maps-app-in-eu/">DMA Compliance: Default Maps App in EU</a></li>
<li><a href="https://mjtsai.com/blog/2024/12/23/metas-ios-interoperability-requests/">Meta’s iOS Interoperability Requests</a></li>
<li><a href="https://mjtsai.com/blog/2024/09/30/european-commission-specification-proceedings/">European Commission Specification Proceedings</a></li>
<li><a href="https://mjtsai.com/blog/2024/01/26/dma-compliance-interoperability-requests/">DMA Compliance: Interoperability Requests</a></li>
</ul>
<p id="dma-compliance-watch-and-headphone-interoperability-update-2025-03-24">Update (2025-03-24): See also: <a href="https://news.ycombinator.com/item?id=43421740">Hacker News</a>.</p>
<p><a href="https://iosdev.space/@adam/114191134700271579">Adam Overholtzer</a>:</p>
<blockquote cite="https://iosdev.space/@adam/114191134700271579">
<p>Why should Apple, a platform maker, have to do all the work of making a platform?</p>
</blockquote>
<p><a href="https://daringfireball.net/linked/2025/03/19/eu-apple-interop-requirements">John Gruber</a>:</p>
<blockquote cite="https://daringfireball.net/linked/2025/03/19/eu-apple-interop-requirements">
<p>My interpretation of the adopted decision is that the EU is requiring Apple to treat iOS like a PC operating system, like MacOS or Windows, where users can install third-party software that runs, unfettered, in the background.</p>
</blockquote>
<p><a href="https://pxlnv.com/linklog/apple-third-party-hardware-restrictions/">Nick Heer</a>:</p>
<blockquote cite="https://pxlnv.com/linklog/apple-third-party-hardware-restrictions/">
<p>There is a free market argument that can be made about how Apple gets to design its own ecosystem and, if it is so restrictive, people will be more hesitant to buy an iPhone since they can get more choices with an Android phone. I get that. But I think it is unfortunate so much of our life coalesces around devices which are so restrictive compared to those which came before.</p>
<p>[…]</p>
<p>The iPhone repositioned that in two ways. First, the introduction of iCloud was a way to “demote” the Mac to a device at an equivalent level to everything else. Second, and just as importantly, is how it converged all that third-party hardware into a single device: it is the digital camera, the camcorder, and the music player. As a result, its hub-iness comes mostly in the form of software. If a developer can assume the existence of particular hardware components, they have extraordinary latitude to build on top of that. However, because Apple exercises control over this software ecosystem, it limits its breadth.</p>
<p>[…]</p>
<p>Even if you believe Apple is doing this not out of anticompetitive verve, but instead for reasons of privacy, security, API support, and any number of other qualities, it still sucks. What it means is that Apple is mostly competing against itself, particularly in smartwatches.</p>
</blockquote>
<p><a href="https://take.surf/2025/03/19/bad-for-our-users">Jesper</a>:</p>
<blockquote cite="https://take.surf/2025/03/19/bad-for-our-users"><p>It’s <a href="/2025/03/13/michael-tsai-rotten">like I said</a>. What matters to Apple isn’t the products. What’s matters to Apple… is Apple.</p><p>[…]</p><p>Then they should make it a standard, document it and build it in, because that’s what it means to be a platform. That’s what it means to care for and about the user. That’s what it means to be a technology company working not for technology’s sake, but for the betterment of the world.</p><p>But they sat on their hands and acted like a monopoly. They let sales and marketing make product decisions. They listened to users and developers ask for the same thing more evenly distributed, and they called them names, or dismissed their wishes as lunacy.</p><p>[…]</p><p>As a user, I would have preferred that Apple would just have done the right thing from the beginning. As a user, I do not prefer that this is what happened. Much like, as a user, I do not prefer that car manufacturers are legally held to emission standards, or that factories are forced by regulation instead of driven by ideals to not pollute – or that governmental agencies step in, in the face of monopolistic practices screwing the customer. The world would be much better if there would have to be no intervention at all. Compliance is seldom as passionate and genuine as drive and goals.</p></blockquote>
<p id="dma-compliance-watch-and-headphone-interoperability-update-2025-03-25">Update (2025-03-25): <a href="https://www.theverge.com/news/633765/ios-eu-interoperability-smartwatches-headphones">Victoria Song</a>:</p>
<blockquote cite="https://www.theverge.com/news/633765/ios-eu-interoperability-smartwatches-headphones"><p>For years, I’d ask device makers why this feature wasn’t available. Every single time, from companies large and small, the answer was that Apple didn’t allow it. So, I was hardly surprised when Android smartwatch makers started kissing iOS goodbye in 2021 with Wear OS 3. In the years since, the number of platform-agnostic wearable makers <a href="https://www.theverge.com/2024/1/26/24052275/fossil-quitting-smartwatches-android-wear-os">continues to dwindle</a>.</p><p>This is a big reason why it’s a good thing that the European Commission recently gave Apple marching orders <a href="https://www.theverge.com/news/632718/europe-digital-markets-act-apple-interoperability-smartwatches">to open up iOS interoperability</a> to other gadget makers. You can read <a href="https://www.theverge.com/news/633493/apple-ios-eu-dma-iphone-interoperability-requirements">our explainer</a> on the nitty gritty of what this means, but the gist is that it’s going to be harder for Apple to gatekeep iOS features to its own products. Specific</p><p>[…]</p><p>These days, I receive far more queries about smart rings and smart glasses — because everyone knows that if you have an iPhone, you get an Apple Watch, and if you have an Android, you get a Galaxy Watch or a Pixel Watch. (Maybe a <a href="https://www.theverge.com/24132998/one-plus-watch-2-review-smartwatches-wearables">OnePlus Watch 2</a> or <a href="https://www.theverge.com/hands-on/612965/oneplus-watch-3-hands-on-smartwatch-wearables">3</a> if you really care about battery.) If you’re an endurance athlete, you get a Garmin. There’s not much incentive for any of these companies to zhuzh up designs or think out of the box when <a href="https://www.theverge.com/2024/3/22/24107984/apple-watch-smartwatch-ecosystems">ecosystem lock-in all but ensures they don’t have to</a>. There’s no urgency. The result is smartwatches have become boring as we wait for the next Big Health Feature to get FDA clearance.</p></blockquote>
<p><a href="https://www.macstories.net/linked/opening-ios-is-good-news-for-smartwatches/">Federico Viticci</a>:</p>
<blockquote cite="https://www.macstories.net/linked/opening-ios-is-good-news-for-smartwatches/">
<p>Can you imagine if your expensive Mac desktop had, say, some latency if you decided to enter text with a non-Apple keyboard? Or if the USB-C port only worked with proprietary Apple accessories? Clearly, those restrictions would be absurd on computers that cost thousands of dollars. And yet, similar restrictions have long existed on iPhones and the iOS ecosystem, and it’s time to put an end to them.</p>
</blockquote>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/19/dma-compliance-watch-and-headphone-interoperability/feed/</wfw:commentRss>
<slash:comments>23</slash:comments>
</item>
<item>
<title>Apple Restricts Pebble From Being Awesome With iPhones</title>
<link>https://mjtsai.com/blog/2025/03/19/apple-restricts-pebble-from-being-awesome-with-iphones/</link>
<comments>https://mjtsai.com/blog/2025/03/19/apple-restricts-pebble-from-being-awesome-with-iphones/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Wed, 19 Mar 2025 19:17:52 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Antitrust]]></category>
<category><![CDATA[App Store]]></category>
<category><![CDATA[Apple Watch]]></category>
<category><![CDATA[Battery Life]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[Pebble]]></category>
<category><![CDATA[Strategy Tax]]></category>
<category><![CDATA[watchOS]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47136</guid>
<description><![CDATA[Eric Migicovsky (via Dare Obasanjo, Hacker News): During Pebble v1, I learned how much harder it is to build a great smartwatch experience on iPhone than it is on Android. It sounds like things have actually gotten worse over the last 8 years. I want to set expectations accordingly. We will build a good app […]]]></description>
<content:encoded><![CDATA[<p><a href="https://ericmigi.com/blog/apple-restricts-pebble-from-being-awesome-with-iphones">Eric Migicovsky</a> (via <a href="https://mas.to/@carnage4life/114186470843799866">Dare Obasanjo</a>, <a href="https://news.ycombinator.com/item?id=43401245">Hacker News</a>):</p>
<blockquote cite="https://ericmigi.com/blog/apple-restricts-pebble-from-being-awesome-with-iphones">
<p>During Pebble v1, I learned how much harder it is to build a great smartwatch experience on iPhone than it is on Android. It sounds like things have actually gotten worse over the last 8 years.</p>
<p>I want to set expectations accordingly. We will build a good app for iOS, but be prepared - there is no way for us to support all the functionality that Apple Watch has access to. It’s impossible for a 3rd party smartwatch to send text messages, or perform actions on notifications (like dismissing, muting, replying) and many, many other things.</p>
<p>Here are the things that are harder or impossible for 3rd party smartwatches (ie non Apple Watches) to do on iPhone[…]</p>
<p>[…]</p>
<p>Apple closed off the ability of smartwatches after Pebble to negotiate with carriers to provide messaging services, and now requires users to turn off iMessage (disabling iOS’s core messaging platform) if they want to take advantage of such contracts between a third-party smartwatch maker and cellular carriers.</p>
</blockquote>
<p>Recall that, in addition to restricting the actual integration between Pebble and iPhones, Apple <a href="https://mjtsai.com/blog/2015/04/24/mentioning-pebble-in-the-app-store/">rejected</a> third-party iPhone apps from the App Store for mentioning that they were compatible with Pebble watches.</p>
<p><a href="https://www.macstories.net/linked/pebbles-inherent-disadvantages-on-the-iphone/">John Voorhees</a>:</p>
<blockquote cite="https://www.macstories.net/linked/pebbles-inherent-disadvantages-on-the-iphone/">
<p>The Apple Watch is great. There isn’t another smartwatch that I’ve even been tempted to try in recent years, but is that because no one has been able to make a good alternative or hasn’t because the disadvantages third-party wearables face are too great?</p>
<p>I’d like to see Apple focus on finding ways to better integrate other devices with the iPhone. There are undoubtedly security and privacy issues that need to be carefully considered, but figuring those things out should be a priority because choice and competition are better for Apple’s customers in the long run.</p>
</blockquote>
<p>Have we gotten to the point yet where it’s quaint to argue that Apple should do something because it’s better for <em>customers</em>? In what universe would they choose to better integrate with third-party hardware (thus helping either a small startup or Google/Samsung) when they’ll <a href="https://mjtsai.com/blog/2025/03/14/dma-compliance-default-maps-app-in-eu/">hide</a> the default maps app setting if you live in the wrong country?</p>
<p><a href="https://iosdev.space/@adam/114189736908867713">Adam Overholtzer</a>:</p>
<blockquote cite="https://iosdev.space/@adam/114189736908867713">
<p>Would those first few versions of Apple Watch have driven Pebble and FitBit out of the market without Apple’s lock-in? I think the Watch’s later success has made folks forget what a product design misfire that first Watch was.</p>
</blockquote>
<p><a href="https://ericmigi.com/blog/introducing-two-new-pebbleos-watches">Eric Migicovsky</a>:</p>
<blockquote cite="https://ericmigi.com/blog/introducing-two-new-pebbleos-watches">
<p>We’re excited to announce two new smartwatches that run open source PebbleOS and are compatible with thousands of your beloved Pebble apps. </p><ul><li><strong>Core 2</strong> <strong>Duo</strong> has an ultra crisp black and white display, polycarbonate frame, costs $149 and starts shipping in July.</li><li><strong>Core Time 2</strong> has a larger 64-colour display, metal frame, costs $225 and starts shipping in December.</li></ul><p></p>
</blockquote>
<p><a href="https://taoofmac.com/space/links/2025/03/18/1700">Rui Carmo</a>:</p>
<blockquote cite="https://taoofmac.com/space/links/2025/03/18/1700">
<p>I love these, and reading past the watch specs it’s clear that the project is driven by personal passion more than commercial polish, with the reasoning behind each design choice – from sensor selections to display trade-offs – in a refreshingly candid manner.</p>
</blockquote>
<p><a href="https://toot.iamkonstantin.eu/@konstantin/114189791270305606">Konstantin</a>:</p>
<blockquote cite="https://toot.iamkonstantin.eu/@konstantin/114189791270305606">
<p>These cute little pebbles have 30 day battery life!</p>
</blockquote>
<p><a href="https://mastodon.social/@roryprior/114190238151576843">Rory Prior</a>:</p>
<blockquote cite="https://mastodon.social/@roryprior/114190238151576843">
<p>I loved my Pebbles and backed a couple of them on Kickstarter. I’m an Apple Watch convert now but the idea of a 30 day battery life sure is tempting as daily charging is a pain. PebbleOS was/is lovely too</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/19/dma-compliance-watch-and-headphone-interoperability/">DMA Compliance: Watch and Headphone Interoperability</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/14/dma-compliance-default-maps-app-in-eu/">DMA Compliance: Default Maps App in EU</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/14/app-review-never-change/">App Review, Never Change</a></li>
<li><a href="https://mjtsai.com/blog/2025/01/29/google-open-sources-pebbleos/">Google Open Sources PebbleOS</a></li>
<li><a href="https://mjtsai.com/blog/2024/05/29/can-anyone-but-a-tech-giant-build-the-next-big-thing/">Can Anyone But a Tech Giant Build the Next Big Thing?</a></li>
<li><a href="https://mjtsai.com/blog/2022/05/02/success-and-failure-at-pebble/">Success and Failure at Pebble</a></li>
<li><a href="https://mjtsai.com/blog/2015/04/24/mentioning-pebble-in-the-app-store/">Mentioning Pebble in the App Store</a></li>
</ul>
<p id="apple-restricts-pebble-from-being-awesome-with-iphones-update-2025-03-24">Update (2025-03-24): <a href="https://daringfireball.net/linked/2025/03/19/repebble-watches">John Gruber</a>:</p>
<blockquote cite="https://daringfireball.net/linked/2025/03/19/repebble-watches">
<p>If the experience as a Pebble owner can be a lot better paired with an Android phone than an iPhone, lean into that. Show how much better it is on Android than iOS.</p>
</blockquote>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/19/apple-restricts-pebble-from-being-awesome-with-iphones/feed/</wfw:commentRss>
<slash:comments>14</slash:comments>
</item>
<item>
<title>Apple Passwords Phishing Vulnerability</title>
<link>https://mjtsai.com/blog/2025/03/19/apple-passwords-phishing-vulnerability/</link>
<comments>https://mjtsai.com/blog/2025/03/19/apple-passwords-phishing-vulnerability/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Wed, 19 Mar 2025 19:16:02 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Apple Password Manager]]></category>
<category><![CDATA[Apple Security Bounty]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[Phishing]]></category>
<category><![CDATA[Security]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47134</guid>
<description><![CDATA[Arin Waichulis (Hacker News, MacRumors): It’s now been revealed that a serious HTTP bug left Passwords users vulnerable to phishing attacks for nearly three months, from the initial release of iOS 18 until the patch in iOS 18.2.Security researchers at Mysk first discovered the flaw after noticing that their iPhone’s App Privacy Report showed Passwords […]]]></description>
<content:encoded><![CDATA[<p><a href="https://9to5mac.com/2025/03/18/apples-passwords-app-was-vulnerable-to-phishing-attacks-for-nearly-three-months-after-launch/">Arin Waichulis</a> (<a href="https://news.ycombinator.com/item?id=43406536">Hacker</a> <a href="https://news.ycombinator.com/item?id=43414395">News</a>, <a href="https://www.macrumors.com/2025/03/19/apple-passwords-app-phishing-vulnerability/">MacRumors</a>):</p>
<blockquote cite="https://9to5mac.com/2025/03/18/apples-passwords-app-was-vulnerable-to-phishing-attacks-for-nearly-three-months-after-launch/"><p>It’s now been revealed that a serious HTTP bug left Passwords users vulnerable to phishing attacks for nearly three months, from the initial release of iOS 18 until the patch in iOS 18.2.</p><p>Security researchers at <a href="https://x.com/mysk_co">Mysk</a> first discovered the flaw after noticing that their iPhone’s <a href="https://support.apple.com/en-us/102188">App Privacy Report</a> showed Passwords had contacted a staggering 130 different websites over insecure HTTP traffic. This prompted the duo to investigate further, finding that not only was the app fetching account logos and icons over HTTP—it also defaulted to opening password reset pages using the unencrypted protocol. “This left the user vulnerable: an attacker with privileged network access could intercept the HTTP request and redirect the user to a phishing website,” Mysk told <em>9to5Mac</em>.</p><p>[…]</p><p>However, it becomes a problem when the attacker is connected to the same network as the user (i.e. Starbucks, airport, or hotel Wi-Fi) and intercepts the initial HTTP request before it redirects.</p><p>[…]</p><p>While this was <a href="https://9to5mac.com/2024/12/11/ios-18-2-release-notes/">quietly patched in December</a> of last year, Apple only just <a href="https://support.apple.com/en-us/121837">disclosed</a> it in the last 24 hours.</p></blockquote>
<p><a href="https://x.com/mysk_co/status/1902162695073493435">Mysk</a>:</p>
<blockquote cite="https://x.com/mysk_co/status/1902162695073493435"><p>“Unfortunately, this issue didn’t qualify for a bounty because it didn’t meet the impact criteria or fall into any of the eligible categories”</p></blockquote>
<p><a href="https://x.com/mysk_co/status/1902350663058907436">Mysk</a>:</p>
<blockquote cite="https://x.com/mysk_co/status/1902350663058907436"><p>Yes, it feels like doing charity work for a $3 trillion company. We didn’t do this primarily for money, but this shows how Apple appreciates independent researchers. We had spent a lot of time since September 2024 trying to convince Apple this was a bug.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/02/21/icons-in-passwords-app-and-app-privacy-report/">Icons in Passwords.app and App Privacy Report</a></li>
<li><a href="https://mjtsai.com/blog/2024/12/13/ios-18-2-and-ipados-18-2/">iOS 18.2 and iPadOS 18.2</a></li>
<li><a href="https://mjtsai.com/blog/2024/05/14/no-bounty-for-kernel-vulnerability/">No Bounty for Kernel Vulnerability</a></li>
</ul>
<p id="apple-passwords-phishing-vulnerability-update-2025-03-24">Update (2025-03-24): <a href="https://hachyderm.io/@rmondello/114190912857645304">Ricky Mondello</a>:</p>
<blockquote cite="https://hachyderm.io/@rmondello/114190912857645304">
<p>The icons issue was present for some time and affected all platforms. The “Change Password” bug only appeared in the Passwords app for iOS, and was quickly fixed.</p>
<p>Some of the discussions I’ve seen around both of these promptly fixed bugs are mixing up details.</p>
</blockquote>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/19/apple-passwords-phishing-vulnerability/feed/</wfw:commentRss>
<slash:comments>4</slash:comments>
</item>
<item>
<title>Mac SSD Performance</title>
<link>https://mjtsai.com/blog/2025/03/18/mac-ssd-performance/</link>
<comments>https://mjtsai.com/blog/2025/03/18/mac-ssd-performance/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Tue, 18 Mar 2025 18:26:34 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Activity Monitor]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[Mac mini]]></category>
<category><![CDATA[MacBook Pro]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Solid-State Drive (SSD)]]></category>
<category><![CDATA[Storage]]></category>
<category><![CDATA[Thunderbolt]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47128</guid>
<description><![CDATA[Ric Ford: Apple’s exhorbitantly-priced Mac storage comes with impressive benchmark claims but has some serious, hidden bottlenecks in certain scenarios, as do other SSDs. David Harry illustrated this clearly in a video, using Activity Monitor as a novel window into dramatic SSD slowdowns when moving large amounts of data to an Apple internal SSD from […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.macintouch.com/post/46034/ssd-issues/">Ric Ford</a>:</p>
<blockquote cite="https://www.macintouch.com/post/46034/ssd-issues/">
<p>Apple’s exhorbitantly-priced Mac storage comes with impressive benchmark claims but has some serious, hidden bottlenecks in certain scenarios, as do other SSDs. <a href="https://www.youtube.com/watch?v=NrJ36oPmXgM">David Harry</a> illustrated this clearly in a video, using Activity Monitor as a novel window into dramatic SSD slowdowns when moving large amounts of data to an Apple internal SSD from a third-party Thunderbolt 5 SSD.</p>
</blockquote>
<p>He actually finds that the external SSD, connected via Thunderbolt 4, is faster at reading than the MacBook Pro’s internal one. Write performance drops once the SLC cache is full.</p>
<p><a href="https://eclecticlight.co/2025/03/17/why-ssds-slow-down-and-how-to-avoid-it/">Howard Oakley</a>:</p>
<blockquote cite="https://eclecticlight.co/2025/03/17/why-ssds-slow-down-and-how-to-avoid-it/">
<p>In normal use, there are three potential causes of reduced write speed in an otherwise healthy SSD:</p>
<ul>
<li>thermal throttling,</li>
<li>SLC write cache depletion,</li>
<li>the need for Trimming and/or housekeeping.</li>
</ul>
<p>[…]</p>
<p>To achieve their high storage density, almost all consumer-grade SSDs store multiple bits in each of their memory cells, and most recent products store three in Triple-Level Cell or <em>TLC.</em> Writing all three bits to a single cell takes longer than it would to write them to separate cells, so most TLC SSDs compensate by using caches. Almost all feature a smaller static cache of up to 16 GB, used when writing small amounts of data, and a more substantial dynamic cache borrowed from main storage cells by writing single bits to them as if they were SLC (single-level cell) rather than TLC.</p>
<p>[…]</p>
<p>Keep ample free space on the SSD so the whole of its SLC write cache can be used.</p>
</blockquote>
<p><a href="https://www.youtube.com/watch?v=dqaDaPjWKoE">SomeTechGuy</a>:</p>
<blockquote cite="https://www.youtube.com/watch?v=dqaDaPjWKoE"><p>The price on added memory and SSD capacity on the otherwise excellent Mac Mini is horrible. I wanted to avoid paying the apple tax on that storage, so I am using an external SSD and it means I can get twice the storage for less than half the price. But I wanted to find out what it would mean for performance, and I couldn’t believe what I found.</p></blockquote>
<p>The Mac mini also has Thunderbolt 4, but he finds it limiting performance. The internal 256 SSD seems to be slow, despite what was <a href="https://www.macrumors.com/2024/11/08/m4-mac-mini-modular-storage/">reported earlier</a> about it using multiple chips like the larger versions.</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2024/10/30/macbook-pro-2024/">MacBook Pro 2024</a></li>
<li><a href="https://mjtsai.com/blog/2024/10/29/mac-mini-2024/">Mac mini 2024</a></li>
<li><a href="https://mjtsai.com/blog/2018/11/27/poor-mac-performance-without-a-ssd/">Poor Mac Performance Without an SSD</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/18/mac-ssd-performance/feed/</wfw:commentRss>
<slash:comments>6</slash:comments>
</item>
<item>
<title>Mark Klein, RIP</title>
<link>https://mjtsai.com/blog/2025/03/18/mark-klein-rip/</link>
<comments>https://mjtsai.com/blog/2025/03/18/mark-klein-rip/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Tue, 18 Mar 2025 18:26:30 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[AT&T]]></category>
<category><![CDATA[National Security Agency (NSA)]]></category>
<category><![CDATA[Privacy]]></category>
<category><![CDATA[Rest in Peace]]></category>
<category><![CDATA[The Media]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47126</guid>
<description><![CDATA[EFF (Hacker News): When the New York Times reported in late 2005 that the NSA was engaging in spying inside the U.S., Mark realized that he had witnessed how it was happening. He also realized that the President was not telling Americans the truth about the program. And, though newly retired, he knew that he […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.eff.org/deeplinks/2025/03/memoriam-mark-klein-att-whistleblower-about-nsa-mass-spying">EFF</a> (<a href="https://news.ycombinator.com/item?id=43347662">Hacker News</a>):</p>
<blockquote cite="https://www.eff.org/deeplinks/2025/03/memoriam-mark-klein-att-whistleblower-about-nsa-mass-spying">
<p>When the New York Times reported in late 2005 that the NSA was engaging in spying inside the U.S., Mark realized that he had witnessed how it was happening. He also realized that the President was not telling Americans the truth about the program. And, though newly retired, he knew that he had to do something. He showed up at EFF’s front door in early 2006 with a simple question: “Do you folks care about privacy?” </p>
<p>We did. And what Mark told us changed everything. Through his work, Mark had learned that the National Security Agency (NSA) had installed a secret, secure room at AT&T’s central office in San Francisco, called <a href="https://en.wikipedia.org/wiki/Room_641A">Room 641A</a>. Mark was assigned to connect circuits carrying Internet data to optical “splitters” that sat just outside of the secret NSA room but were hardwired into it. Those splitters—as well as similar ones in cities around the U.S.—<a href="https://www.eff.org/files/2014/07/24/backbone-3c-color.jpg">made a copy</a> of all data going through those circuits and delivered it into the secret room.</p>
</blockquote>
<p><a href="https://www.theregister.com/2025/03/15/rip_mark_klein/">Iain Thomson</a>:</p>
<blockquote cite="https://www.theregister.com/2025/03/15/rip_mark_klein/"><p>The evidence he gathered and shared led to two lawsuits that exposed the extent to which US citizens were being spied on by their own government in the post-9/11 world. Klein faced legal pressure, death threats, and the constant fear of ruin, to get his story out and tell the public what was going on. But Klein regretted nothing.</p><p>[…]</p><p>He went to one newspaper, which strung him along for months promising a big front-page splash and then spiked the story. Other media outlets refused to touch it, although he did get some TV time (see below). Having heard about the EFF, which also had the bonus of being in San Francisco, he decided to drop in unannounced.</p><p>[…]</p><p>He wrote a book about his experiences, <a href="https://www.amazon.com/Wiring-Big-Brother-Machine-Fighting/dp/1439229961#detailBullets_feature_div">Wiring Up The Big Brother Machine And Fighting It</a>; it’s a cracking read.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/02/25/fbi-also-wants-to-break-icloud-advanced-data-protection/">FBI Also Wants to Break iCloud Advanced Data Protection</a></li>
<li><a href="https://mjtsai.com/blog/2024/10/09/china-possibly-hacking-us-lawful-access-backdoor/">China Possibly Hacking US “Lawful Access” Backdoor</a></li>
<li><a href="https://mjtsai.com/blog/2024/04/24/extending-section-702-of-fisa/">Extending Section 702 of FISA</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/18/mark-klein-rip/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>Alexa Removing “Do Not Send Voice Recordings” Feature</title>
<link>https://mjtsai.com/blog/2025/03/18/alexa-removing-do-not-send-voice-recordings-feature/</link>
<comments>https://mjtsai.com/blog/2025/03/18/alexa-removing-do-not-send-voice-recordings-feature/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Tue, 18 Mar 2025 18:26:22 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Alexa]]></category>
<category><![CDATA[Amazon Echo]]></category>
<category><![CDATA[HomePod]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[Privacy]]></category>
<category><![CDATA[Siri]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47124</guid>
<description><![CDATA[Amazon: You can opt out of sending voice recordings to the cloud for devices that can process the audio of your Alexa requests locally (Echo (4th Gen), Echo Show 10 or Echo Show 15) or supported devices that are able to communicate with the devices in your house on the same network (Echo (3rd Gen), […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.amazon.com/gp/help/customer/display.html?nodeId=GQXLLWHBCVL6L5QD">Amazon</a>:</p>
<blockquote cite="https://www.amazon.com/gp/help/customer/display.html?nodeId=GQXLLWHBCVL6L5QD">
<p>You can opt out of sending voice recordings to the cloud for devices that can process the audio of your Alexa requests locally (Echo (4th Gen), Echo Show 10 or Echo Show 15) or supported devices that are able to communicate with the devices in your house on the same network (Echo (3rd Gen), Echo Dot (3rd Gen), Echo Dot (4th Gen), Echo Dot (4th Gen) with clock, Echo Dot (5th Gen), Echo Dot (5th Gen) with clock).</p>
<p>[…]</p>
<p>Some Alexa features and capabilities such as Adaptive Listening, Live Translations, Dynamic Language Switching, and Reading Sidekick are unavailable when Do Not Send Voice Recordings is turned on.</p>
<p>Alexa will still send audio to the cloud for features that require the transmission of audio, such as when you make a call or send a message or announcement via Alexa. And, if you create a voice ID, the audio recordings used to teach Alexa your voice will be sent to the cloud. Alexa will also send audio to the cloud if you enable Alexa Guard, including for Smart Alerts and emergency calling with Alexa Emergency Assist.</p>
</blockquote>
<p>I was not aware of this feature, but it turns out that my Echo Dot supports it. As far as I can tell, recent versions of Siri already do this on iPhone—HomePod presumably doesn’t have enough processing power—sending only transcripts of the text to Apple. An ongoing issue is that many of these requests seem like they <em>could</em> be processed locally but are instead sent to Apple.</p>
<p><a href="https://arstechnica.com/gadgets/2025/03/everything-you-say-to-your-echo-will-be-sent-to-amazon-starting-on-march-28/">Scharon Harding</a> (<a href="https://news.ycombinator.com/item?id=43385268">Hacker News</a>, <a href="https://www.reddit.com/r/privacy/comments/1jb8qwx/psa_amazon_alexa_discontinuing_do_not_send_voice/?rdt=43190">Reddit</a>, <a href="https://yro.slashdot.org/story/25/03/14/2113257/everything-you-say-to-your-echo-will-be-sent-to-amazon-starting-on-march-28">Slashdot</a>):</p>
<blockquote cite="https://arstechnica.com/gadgets/2025/03/everything-you-say-to-your-echo-will-be-sent-to-amazon-starting-on-march-28/"><p>Since Amazon announced plans for a generative AI version of Alexa, we were <a href="https://arstechnica.com/gadgets/2023/09/amazons-generative-ai-powered-alexa-is-as-big-a-privacy-red-flag-as-old-alexa/">concerned about user privacy</a>. With <a href="https://arstechnica.com/gadgets/2025/02/amazons-subscription-based-alexa-looks-highly-capable-and-questionable/">Alexa+</a> rolling out to Amazon Echo devices in the coming weeks, we’re getting a clearer view of the privacy concessions people will have to make to maximize usage of the AI voice assistant and avoid bricking functionality of already-purchased devices.</p><p>In an email sent to customers today, Amazon said that Echo users will no longer be able to set their devices to process Alexa requests locally and, therefore, avoid sending voice recordings to Amazon’s cloud. Amazon apparently sent the email to users with “Do Not Send Voice Recordings” enabled on their Echo. Starting on March 28, recordings of every command spoken to the Alexa living in Echo speakers and smart displays will automatically be sent to Amazon and processed in the cloud.</p>
<p>[…]</p>
<p>Amazon is forcing Echo users to make a couple of tough decisions: Grant Amazon access to recordings of everything you say to Alexa or stop using an Echo; let Amazon save voice recordings and have employees listen to them or lose a feature set to become more advanced and central to the next generation of Alexa.</p>
</blockquote>
<p>Amazon’s explanation for the change is rather disappointing. The main issue is apparently a more powerful Alexa Voice ID that can’t run locally, but I’m not sure that people really care about that.</p>
<p><a href="https://www.malwarebytes.com/blog/news/2025/03/amazon-disables-option-to-store-echo-voice-recordings-on-your-device">Pieter Arntz</a>:</p>
<blockquote cite="https://www.malwarebytes.com/blog/news/2025/03/amazon-disables-option-to-store-echo-voice-recordings-on-your-device">
<p>Basically, the processing requests that rely on AI features can’t be done within the limited processing power of the Echo device itself. This means that voice recordings will be sent to and processed in the cloud.</p>
<p>[…]</p>
<p>This change confirms existing fears about user privacy with the implementation of the generative AI version of Alexa. Due to financial losses that came with Alexa’s operation, Amazon introduced the AI-powered Alexa+ which has far more capabilities and should generate more cash-flow. Alexa+ is based on several major language models such as the in-house development Nova, and Claude from Anthropic.</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/06/alexa-plus/">Alexa Plus</a></li>
<li><a href="https://mjtsai.com/blog/2022/02/11/bug-opted-users-back-in-to-sharing-siri-recordings/">Bug Opted Users Back In to Sharing Siri Recordings</a></li>
<li><a href="https://mjtsai.com/blog/2021/09/30/the-disappointment-of-on-device-siri/">The Disappointment of On-Device Siri</a></li>
<li><a href="https://mjtsai.com/blog/2021/06/15/ios-15-on-device-siri/">iOS 15: On-Device Siri</a></li>
<li><a href="https://mjtsai.com/blog/2020/05/21/lack-of-action-on-siri-recordings/">“Lack of Action” on Siri Recordings</a></li>
<li><a href="https://mjtsai.com/blog/2019/10/13/opting-out-of-sharing-siri-audio-recordings/">Opting Out of Sharing Siri Audio Recordings</a></li>
<li><a href="https://mjtsai.com/blog/2019/07/29/apple-contractors-regularly-hear-confidential-details-on-siri-recordings/">Apple Contractors “Regularly Hear Confidential Details” on Siri Recordings</a></li>
<li><a href="https://mjtsai.com/blog/2019/04/11/amazon-employees-review-small-sample-of-alexa-audio/">Amazon Employees Review “Small Sample” of Alexa Audio</a></li>
<li><a href="https://mjtsai.com/blog/2018/12/21/amazon-sends-alexa-voice-recordings-to-a-random-person/">Amazon Sends Alexa Voice Recordings to a Random Person</a></li>
<li><a href="https://mjtsai.com/blog/2016/12/28/amazon-echo-privacy/">Amazon Echo Privacy</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/18/alexa-removing-do-not-send-voice-recordings-feature/feed/</wfw:commentRss>
<slash:comments>1</slash:comments>
</item>
<item>
<title>Firefox Benefits From Browser Choice Screens</title>
<link>https://mjtsai.com/blog/2025/03/18/firefox-benefits-from-browser-choice-screens/</link>
<comments>https://mjtsai.com/blog/2025/03/18/firefox-benefits-from-browser-choice-screens/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Tue, 18 Mar 2025 18:26:02 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Android]]></category>
<category><![CDATA[Digital Markets Act (DMA)]]></category>
<category><![CDATA[European Union]]></category>
<category><![CDATA[Firefox]]></category>
<category><![CDATA[France]]></category>
<category><![CDATA[Germany]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[Web Browser]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47122</guid>
<description><![CDATA[Christina Petrova: The first DMA browser choice screens started rolling out in the EU in March 2024. Since then, they have slowly started appearing for:New and existing Android smartphones and tablet users with Chrome pre-set as a default browser (though rollout has been fairly inconsistent)New and existing iOS users with Safari as their default browser, […]]]></description>
<content:encoded><![CDATA[<p><a href="https://blog.mozilla.org/en/products/firefox/eu-digital-markets-act/">Christina Petrova</a>:</p>
<blockquote cite="https://blog.mozilla.org/en/products/firefox/eu-digital-markets-act/"><p>The first DMA browser choice screens started rolling out in the EU in March 2024. Since then, they have slowly started appearing for:</p><ul><li>New and existing Android smartphones and tablet users with Chrome pre-set as a default browser (though rollout has been fairly inconsistent)</li><li>New and existing iOS users with Safari as their default browser, who have iOS 18.2 and iPadOS 18.2 or later iOS versions installed on their device (initial roll out in iOS 17.4 was poorly designed)</li></ul><p>[…]</p><p>Firefox daily active users in Germany alone have increased by 99%. And in France, Firefox’s daily active users on iOS grew by 111%.</p><p>[…]</p><p>And we’ve found that when people choose Firefox via a DMA choice screen, they stick with it.</p></blockquote>
<p>Via <a href="https://pxlnv.com/linklog/firefox-france-germany/">Nick Heer</a>:</p>
<blockquote cite="https://pxlnv.com/linklog/firefox-france-germany/">
<p>I have confirmed with Petrova these numbers reflect growth in iOS users only. They are impressive, but my interpretation of statistics like these is that one often finds percentages used like this when neither actual number is very large.</p>
</blockquote>
<p>I would have liked to see a comparison vs. usage in countries without the DMA.</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/13/mozilla-also-defends-google-revenue-sharing-agreement/">Mozilla Also Defends Google Revenue Sharing Agreement</a></li>
<li><a href="https://mjtsai.com/blog/2025/02/28/mozilla-changes-firefox-terms-of-use/">Mozilla Changes Firefox Terms of Use</a></li>
<li><a href="https://mjtsai.com/blog/2024/12/04/uk-cma-vs-apples-browser-rules/">UK CMA vs. Apple’s Browser Rules</a></li>
<li><a href="https://mjtsai.com/blog/2024/10/25/testing-eu-ios-features-in-ios-18-2/">Testing EU iOS Features in iOS 18.2</a></li>
<li><a href="https://mjtsai.com/blog/2024/09/10/apple-denies-evidence-of-hiding-browser-choice-setting/">Apple Denies Evidence of Hiding Browser Choice Setting</a></li>
<li><a href="https://mjtsai.com/blog/2024/08/22/ios-18-browser-choice-and-default-app-controls-in-eu/">iOS 18: Browser Choice and Default App Controls in EU</a></li>
<li><a href="https://mjtsai.com/blog/2024/04/12/effects-of-the-dmas-browser-choice-requirement/">Effects of the DMA’s Browser Choice Requirement</a></li>
</ul>
<p id="firefox-benefits-from-browser-choice-screens-update-2025-03-24">Update (2025-03-24): <a href="https://daringfireball.net/linked/2025/03/19/firefox-ios-doubling-france-and-germany">John Gruber</a>:</p>
<blockquote cite="https://daringfireball.net/linked/2025/03/19/firefox-ios-doubling-france-and-germany">
<p>The best case scenario is that this growth for Firefox (and presumably for <a href="https://daringfireball.net/2024/09/the_ios_continental_drift_widens">other alternate browsers that qualified for the EU choice screens</a>) means that alternative browsers have gone from a tiny usage share to a twice-as-large-but-still-tiny share, and that most of the growth comes from happy users. I see no proof, though, that the growth hasn’t at least significantly come from confused users who now wonder what happened to Safari.</p>
</blockquote>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/18/firefox-benefits-from-browser-choice-screens/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>Encrypted RCS Standard</title>
<link>https://mjtsai.com/blog/2025/03/17/encrypted-rcs-standard/</link>
<comments>https://mjtsai.com/blog/2025/03/17/encrypted-rcs-standard/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Mon, 17 Mar 2025 19:54:53 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Android]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Messages.app]]></category>
<category><![CDATA[Privacy]]></category>
<category><![CDATA[Rich Communication Services (RCS)]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47110</guid>
<description><![CDATA[Jess Weatherbed (Hacker News, MacRumors, ArsTechnica): iPhone and Android users will be able to exchange end-to-end encrypted (E2EE) RCS messages in the near future thanks to newly updated RCS specifications. The GSM Association announced that the latest RCS standard includes E2EE based on the Messaging Layer Security (MLS) protocol, enabling interoperable encryption between different platform […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.theverge.com/news/629620/apple-iphone-e2ee-encryption-rcs-messaging-android">Jess Weatherbed</a> (<a href="https://news.ycombinator.com/item?id=43361822">Hacker News</a>, <a href="https://www.macrumors.com/2025/03/14/apple-encrypted-rcs-messaging-software-update/">MacRumors</a>, <a href="https://arstechnica.com/gadgets/2025/03/rcs-texting-updates-will-bring-end-to-end-encryption-to-green-bubble-chats/">ArsTechnica</a>):</p>
<blockquote cite="https://www.theverge.com/news/629620/apple-iphone-e2ee-encryption-rcs-messaging-android"><p>iPhone and Android users will be able to exchange end-to-end encrypted (E2EE) RCS messages in the near future thanks to newly updated RCS specifications. <a href="https://www.gsma.com/newsroom/article/rcs-encryption-a-leap-towards-secure-and-interoperable-messaging/">The GSM Association</a> announced that the latest RCS standard includes E2EE based on the Messaging Layer Security (MLS) protocol, enabling interoperable encryption between different platform providers for the first time.</p><p>The GSM Association said it had started working to enable E2EE on messages sent between Android and iPhone <a href="/2024/9/17/24247414/rcs-texts-iphone-e2ee-android-gsma">in September last year</a>.</p></blockquote>
<p><a href="https://sixcolors.com/link/2025/03/apple-to-add-end-to-end-encryption-support-for-rcs/">Dan Moren</a>:</p>
<blockquote cite="https://sixcolors.com/link/2025/03/apple-to-add-end-to-end-encryption-support-for-rcs/">
<p>Personally, I never really thought it made sense for Apple, a company whose brand is about security and privacy, to withhold support for encryption on RCS. But the real issue was that the RCS standard did not include support for cross-platform encryption, even though other providers, like Google, enabled encryption on their platforms.</p>
</blockquote>
<p><a href="https://www.macrumors.com/2025/03/15/ios-19-rcs-upgrades/">Joe Rossignol</a>:</p>
<blockquote cite="https://www.macrumors.com/2025/03/15/ios-19-rcs-upgrades/"><p>As noted <a href="https://9to5mac.com/2025/03/15/apple-rcs-texting-feature-upgrades-ios-19/">by <em>9to5Mac</em>’s Michael Burkhardt</a>, Apple has indirectly confirmed that it will be adopting the RCS Universal Profile 3.0 specification, which includes not only end-to-end encryption, but also several other iMessage-like enhancements that were originally introduced in version 2.7 of the specification. iOS 18 supports RCS Universal Profile 2.4.</p></blockquote>
<p><a href="https://daringfireball.net/linked/2025/03/15/rcs-e2ee-apple-google">John Gruber</a>:</p>
<blockquote cite="https://daringfireball.net/linked/2025/03/15/rcs-e2ee-apple-google"><p>I have also noticed recently that Google Messages and Apple Messages now do a pretty good job of supporting each other’s tapbacks.</p><p>[…]</p><p>But what happens when new/updated Android phones support the new RCS encryption spec, and older devices don’t? A lock icon for the encrypted chats? If it were up to me, iOS would drop support for non-encrypted RCS — iOS should use RCS with E2EE for every device that supports it, and fall back to dumb old no-encryption-at-all SMS for all devices that do not.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2024/12/06/rcs-in-ios-18/">RCS in iOS 18</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/17/encrypted-rcs-standard/feed/</wfw:commentRss>
<slash:comments>1</slash:comments>
</item>
<item>
<title>How Apple Could Help With AI and LLMs</title>
<link>https://mjtsai.com/blog/2025/03/17/how-apple-could-help-with-ai-and-llms/</link>
<comments>https://mjtsai.com/blog/2025/03/17/how-apple-could-help-with-ai-and-llms/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Mon, 17 Mar 2025 19:54:47 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Apple Intelligence]]></category>
<category><![CDATA[Artificial Intelligence]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[Mac]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47108</guid>
<description><![CDATA[treblewoe: A modest proposal for how Apple can come to dominate the AI race without ever actually matching with the current leaders[…][…]So what is Apple the platform vendor to do? Stop thinking like an app ecosystem participant or even an app store referee, and start thinking like a platform vendor again. Apple’s value-add here will […]]]></description>
<content:encoded><![CDATA[<p><a href="https://x.com/treblewoe/status/1885397317043269644">treblewoe</a>:</p>
<blockquote cite="https://x.com/treblewoe/status/1885397317043269644"><p>A modest proposal for how Apple can come to dominate the AI race without ever actually matching with the current leaders[…]</p><p>[…]</p><p>So what is Apple the platform vendor to do? Stop thinking like an app ecosystem participant or even an app store referee, and start thinking like a platform vendor again. Apple’s value-add here will never be by producing its own “frontier” model that does everything best.</p><p>[…]</p><p>Right now all these AI providers are returning documents in response to user intent, and everyone is treating those documents like the finished product. Here’s your poem. Here’s your picture. Anything else?.</p><p>The brilliance of OpenDoc was that each of those were raw material.</p></blockquote>
<p><a href="https://shapeof.com/archives/2025/3/how_apple_could_help_developers_with_ai_and_llms.html">Gus Mueller</a>:</p>
<blockquote cite="https://shapeof.com/archives/2025/3/how_apple_could_help_developers_with_ai_and_llms.html">
<p>Build a semantic index (SI), and allow apps to access it via permissions given similar to what we do for Address Book or Photos.</p>
<p>[…]</p>
<p>And similar to the Spotlight indexing API, developers should be able to provide data to the SI along with rich metadata.</p>
<p>[…]</p>
<p>But give developers the opportunity, and then customers will have something to choose from. Make the Mac and iOS the best platform to build personalized LLMs.</p>
<p>Let the apps die and live based on their own merit and reputation. Apple can build the platform, and maybe expand on it over time and use it themselves.</p>
</blockquote>
<p>Apple Intelligence has so far been the opposite of the platform strategy that had previously served it so well. Modern Apple is more about providing closed solutions and services.</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/17/leaked-apple-siri-meeting/">Leaked Apple Siri Meeting</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/13/rotten/">Rotten</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/12/apple-delays-more-personalized-siri-apple-intelligence-features/">Apple Delays “More Personalized Siri” Apple Intelligence Features</a></li>
</ul>
<p id="how-apple-could-help-with-ai-and-llms-update-2025-03-25">Update (2025-03-25): <a href="https://daringfireball.net/linked/2025/03/19/apple-needs-to-get-out-of-the-way-with-ai">John Gruber</a>:</p>
<blockquote cite="https://daringfireball.net/linked/2025/03/19/apple-needs-to-get-out-of-the-way-with-ai">
<p>But Apple didn’t make any of the actual apps. Companies like Adobe and Macromedia and Aldus did. Independent small developers made niche extensions for use inside apps like Photoshop, FreeHand, and QuarkXPress. When a new app came along like InDesign — which quickly ate Quark’s lunch — the Mac remained the dominant platform to use.</p>
<p>Making a great platform where <em>other developers</em> can innovate is one of Apple’s core strengths.</p>
<p>[…]</p>
<p>Apple should be laser focused on doing this for AI now. Where I quibble with Mueller is that I don’t want Apple to get out of the way. I want Apple to pave the roads to create the way. Apple doesn’t have to make the cars (<a href="https://www.npr.org/2024/02/27/1234315814/apple-cancels-electric-car">literally</a>) — just pave the best roads. Make the Mac <em>the</em> best platform for outside developers to create innovative AI systems and experiences. Make iOS <em>the</em> best consumer device to use AI apps from any outside developer. Work on APIs and frameworks for the AI age.</p>
</blockquote>
<p><a href="https://daringfireball.net/linked/2025/03/20/healthkit-as-a-model-for-an-open-semantic-index-from-apple">John Gruber</a> (<a href="https://mastodon.social/@daringfireball/114190956767338020">Mastodon</a>):</p>
<blockquote cite="https://daringfireball.net/linked/2025/03/20/healthkit-as-a-model-for-an-open-semantic-index-from-apple">
<p>Do it like Health — a model that has proven to be:</p>
<ul>
<li>profitable (for Apple itself, selling devices like Watches);</li>
<li>popular (with users, who actually use it, understand it, and like it);</li>
<li>private;</li>
<li>and open to third-party developers, device makers, and medical service providers.</li>
</ul>
</blockquote>
<p><a href="https://pxlnv.com/blog/apple-could-build-great-platforms-for-third-party-ai/">Nick Heer</a>:</p>
<blockquote cite="https://pxlnv.com/blog/apple-could-build-great-platforms-for-third-party-ai/"><p>One of Apple’s specialties is in improving the experience of using many of the same technologies as everyone else. I would like to see that in A.I., too, but I have been disappointed by its <a href="https://pxlnv.com/blog/undesign-of-apple-intelligence-features/">lacklustre</a> efforts so far. Even long-running projects where it has had time to learn and grow have not paid off, as anyone can see in Siri’s legacy.</p><p>What if you could replace these features? What if Apple’s operating systems were great platforms by which users could try third-party A.I. services and find the ones that fit them best? What if Apple could provide certain privacy promises, too? I bet users would want to try alternatives in a heartbeat. Apple ought to welcome the challenge.</p></blockquote>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/17/how-apple-could-help-with-ai-and-llms/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>Leaked Apple Siri Meeting</title>
<link>https://mjtsai.com/blog/2025/03/17/leaked-apple-siri-meeting/</link>
<comments>https://mjtsai.com/blog/2025/03/17/leaked-apple-siri-meeting/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Mon, 17 Mar 2025 19:54:45 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Apple]]></category>
<category><![CDATA[Apple Intelligence]]></category>
<category><![CDATA[Artificial Intelligence]]></category>
<category><![CDATA[Craig Federighi]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Siri]]></category>
<category><![CDATA[Tim Cook]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47106</guid>
<description><![CDATA[Mark Gurman (Hacker News, MacRumors): Robby Walker, who serves as a senior director at Apple, delivered the stark comments during an all-hands meeting for the Siri division, saying that the team was facing a bad period. Walker also said that it’s unclear when the enhancements will actually launch, according to people with knowledge of the […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.bloomberg.com/news/articles/2025-03-14/apple-s-siri-chief-calls-ai-delays-ugly-and-embarrassing-promises-fixes">Mark Gurman</a> (<a href="https://news.ycombinator.com/item?id=43365517">Hacker News</a>, <a href="https://www.macrumors.com/2025/03/14/apple-siri-team-reassurance/">MacRumors</a>):</p>
<blockquote cite="https://www.bloomberg.com/news/articles/2025-03-14/apple-s-siri-chief-calls-ai-delays-ugly-and-embarrassing-promises-fixes">
<p>Robby Walker, who serves as a senior director at Apple, delivered the stark comments during an all-hands meeting for the Siri division, saying that the team was facing a bad period. Walker also said that it’s unclear when the enhancements will actually launch, according to people with knowledge of the matter, who asked not to be identified because the gathering was private.</p>
<p>[…]</p>
<p>But when Apple demonstrated the features at WWDC using a video mock-up, it only had a barely working prototype, Bloomberg has reported.</p>
<p>[…]</p>
<p>Walker defended his Siri group, telling them that they should be proud. Employees poured their “hearts and souls into this thing,” he said.</p>
</blockquote>
<p><a href="https://www.theverge.com/news/629940/apple-siri-robby-walker-delayed-ai-features">Chris Welch</a> (<a href="https://news.ycombinator.com/item?id=43382014">Hacker News</a>):</p>
<blockquote cite="https://www.theverge.com/news/629940/apple-siri-robby-walker-delayed-ai-features">
<p>He also said it’s not a given that the missing Siri features will make it into iOS 19 this year; that’s the company’s current target, but “doesn’t mean that we’re shipping then,” he told employees.</p>
</blockquote>
<p><a href="https://9to5mac.com/2025/03/14/apple-exec-slams-ugly-and-embarrassing-siri-delays-in-all-hands-meeting/">Chance Miller</a>:</p>
<blockquote cite="https://9to5mac.com/2025/03/14/apple-exec-slams-ugly-and-embarrassing-siri-delays-in-all-hands-meeting/"><p>As far as accountability is concerned, Walker told staffers that there is “intense personal accountability” shared by John Giannandrea, Apple’s Senior Vice President of Machine Learning and AI Strategy, and software boss Craig Federighi. </p><p><em>Bloomberg</em> reports that Apple “doesn’t plan to immediately fire any top executives over the AI crisis.” It is, however, planning “management adjustments” in response to the problems, including “moving more senior executives under Giannandrea to assist with a turnaround effort.”</p></blockquote>
<p><a href="https://www.macrumors.com/2025/03/15/personalized-siri-features-working-to-some-extent/">Joe Rossignol</a>:</p>
<blockquote cite="https://www.macrumors.com/2025/03/15/personalized-siri-features-working-to-some-extent/"><p>While it may sound obvious that at least some of the features are now functional within Apple, this was not entirely clear, as the company has not shown any public demos of the features being in a working state. Apple now faces the task of ensuring that the features not only work, but work well, before making them available to customers. Walker reportedly said the features were only working “up to two-thirds to 80% of the time.”</p></blockquote>
<p><a href="https://x.com/bzamayo/status/1900625397688963457">Benjamin Mayo</a>:</p>
<blockquote cite="https://x.com/bzamayo/status/1900625397688963457">
<p>Two thirds to eighty percent success rate is like half of the Siri feature set tho</p>
</blockquote>
<p><a href="https://x.com/rjonesy/status/1900626537180774566">Ryan Jones</a>:</p>
<blockquote cite="https://x.com/rjonesy/status/1900626537180774566"><ul><li>not held by JG, Tim, or Craig</li><li>AI only works 66-80% of the time (that’s VERY low, the last 20% is 80% of the work, even 95% is un-shippable) So it basically didn’t exist at WWDC. Ouch.</li><li>also blamed MarCom, fairly, for the tv ad</li></ul><p>[…]</p><ul><li>“As of Friday, Apple doesn’t plan to immediately fire any top executives over the AI crisis”. Notice the word immediately.</li><li>“It has discussed moving more senior executives under Giannandrea to assist with a turnaround effort.” That’s setup for “this was the plan, but we mutually decided new leadership would be beneficial”</li></ul></blockquote>
<p><a href="https://x.com/SnazzyLabs/status/1900696864724545564">Quinn Nelson</a>:</p>
<blockquote cite="https://x.com/SnazzyLabs/status/1900696864724545564">
<p>This is wild. Every part of it. How none of the three heads responsible were there is unreal.</p>
</blockquote>
<p><a href="https://x.com/jdalrymple/status/1900674006719631563">Jim Dalrymple</a>:</p>
<blockquote cite="https://x.com/jdalrymple/status/1900674006719631563">
<p>Two of these need to be fired immediately. Doesn’t matter which two.</p>
</blockquote>
<p><a href="https://x.com/handleym99/status/1900785638217269710">Maynard Handley</a>:</p>
<blockquote cite="https://x.com/handleym99/status/1900785638217269710">
<p>Do we have a TECHNICAL analysis? Examples of TECHNICAL analysis include:</p>
<ul>
<li><p>is the problem lousy models, or that Apple is trying to integrate models into APIs in ways never done before, or that the models are crippled by DNC levels of political correctness?</p></li>
<li><p>are the models limited by being forced to run on hardware that’s not powerful enough (because of local execution mandate?)</p></li>
<li><p>has a deliberate choice been made (if so why?) to not use open source even when that provides better models (eg the claim that Whisper provides much better text to speech than Apple Dictation)?</p></li>
</ul>
</blockquote>
<p><a href="https://x.com/UltravioletRain/status/1900887268866269679">Ultraviolet</a>:</p>
<blockquote cite="https://x.com/UltravioletRain/status/1900887268866269679">
<p>Remember the system prompt where they asked it not to hallucinate? That was a massive red flag.</p>
</blockquote>
<p><a href="https://daringfireball.net/linked/2025/03/14/all-hands-siri-team-meeting-leaks-to-bloomberg">John Gruber</a> (<a href="https://mastodon.social/@daringfireball/114162908707298379">Mastodon</a>):</p>
<blockquote cite="https://daringfireball.net/linked/2025/03/14/all-hands-siri-team-meeting-leaks-to-bloomberg">
<p>The quotes are juicy AF, but don’t really start until the 10th paragraph. Like, for example, <em>which</em> Siri features does Walker think are “incredibly impressive”?</p>
<p>[…]</p>
<blockquote>
<p>Walker compared the endeavor to an attempt to swim to Hawaii. “We swam hundreds of miles — we set a Guinness Book for World Records for swimming distance — but we still didn’t swim to Hawaii,” he said. “And we were being jumped on, not for the amazing swimming that we did, but the fact that we didn’t get to the destination.”</p>
</blockquote>
<p>I’d say it’s a little more like selling customers tickets for a cruise that includes a stop in Hawaii, then never actually getting to Hawaii, and hoping they didn’t notice when the ship returns to port to disembark.</p>
</blockquote>
<p><a href="https://spyglass.org/siri-apple-ai-trouble/">M.G. Siegler</a>:</p>
<blockquote cite="https://spyglass.org/siri-apple-ai-trouble/"><p>Robby Walker is not a name most people will know, but <a href="https://www.linkedin.com/in/robbywalker/details/experience/?ref=spyglass.org">he has been at Apple for 11 and a half years</a>. In fact, he came over when Apple acquired the startup he co-founded, Cue (originally named Greplin – <a href="https://techcrunch.com/2011/02/14/greplin-grabs-4-million-from-sequoia-for-social-search/?ref=spyglass.org">one of the OG “social search” products</a>) <a href="https://techcrunch.com/2013/10/03/cue-acquired-for-over-40m-likely-by-apple-to-compete-with-google-now/?ref=spyglass.org">back in 2013</a>. Why did Apple acquire that company? Because Google – specifically, the product known as ‘Google Now’ – was destroying Siri, <a href="https://techcrunch.com/2013/10/03/why-did-apple-buy-cue-because-google-now-eats-siris-lunch/?ref=spyglass.org">as Matthew Panzarino noted at the time</a>. Siri, of course, was still not good, way back then. And Walker has been working to try to fix that within Apple ever since.</p><p>[…]</p><p>This is seemingly a “well, we tried, but it didn’t work, so we’re back-burnering those ideas and moving forward”. It raises a question that sounds like a troll but is actually legitimate at this point: are we <em>ever</em> going to see these features? Is this truly the AirPower of Apple Intelligence?</p></blockquote>
<p><a href="https://pxlnv.com/linklog/siri-ugly-and-embarrassing/">Nick Heer</a>:</p>
<blockquote cite="https://pxlnv.com/linklog/siri-ugly-and-embarrassing/">
<p>Based on my experience in an Apple Store this week, this disappointment has not trickled down to retail employees. I was in for an appointment after I shattered my fifteen year record of keeping my screen intact, and I was told that even though my iPhone 15 Pro was “fine” because it supports Apple Intelligence, I could get nearly $700 towards a newer one after I had mine repaired. This was something I should at least consider, apparently. And, by the way, had I tried the new Apple Intelligence features?</p>
</blockquote>
<p><a href="https://daringfireball.net/2025/03/a_postscript_on_the_singular_nature_of_mark_gurmans_reporting">John Gruber</a> (<a href="https://mastodon.social/@daringfireball/114172593585969246">Mastodon</a>):</p>
<blockquote cite="https://daringfireball.net/2025/03/a_postscript_on_the_singular_nature_of_mark_gurmans_reporting">
<p>So let’s just examine how extraordinary and singular Gurman’s Friday report was.</p>
</blockquote>
<p><a href="https://www.bloomberg.com/news/newsletters/2025-03-16/apple-iphone-17-air-foldable-iphone-details-ai-crisis-to-haunt-top-100-event-m8bl3a9c">Mark Gurman</a> (<a href="https://x.com/markgurman/status/1901283736148443488">tweet</a>):</p>
<blockquote cite="https://www.bloomberg.com/news/newsletters/2025-03-16/apple-iphone-17-air-foldable-iphone-details-ai-crisis-to-haunt-top-100-event-m8bl3a9c"><p>The company’s <a href="https://www.bloomberg.com/news/articles/2025-03-14/apple-s-siri-chief-calls-ai-delays-ugly-and-embarrassing-promises-fixes">AI crisis</a> will be the talk of its “Top 100” offsite meeting this week, and it’s planning some of the <a href="https://origin.www.bloomberg.com/news/articles/2025-03-10/apple-readies-dramatic-design-overhauls-for-ios-19-ipados-19-and-macos-16?srnd=undefined">biggest iOS and macOS redesigns</a> in its history.</p></blockquote>
<p><a href="https://x.com/heyyoudvd/status/1901287355731923434">Dave B.</a>:</p>
<blockquote cite="https://x.com/heyyoudvd/status/1901287355731923434">
<p>If Apple’s takeaway from
@gruber’s piece was merely that they need to improve their AI, then it seems Apple missed the whole point.</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/13/rumored-redesign-in-ios-19-and-macos-16/">Rumored Redesign in iOS 19 and macOS 16</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/13/rotten/">Rotten</a></li>
<li><a href="https://mjtsai.com/blog/2025/03/12/apple-delays-more-personalized-siri-apple-intelligence-features/">Apple Delays “More Personalized Siri” Apple Intelligence Features</a></li>
<li><a href="https://mjtsai.com/blog/2024/08/23/apples-hidden-ai-prompts/">Apple’s Hidden AI Prompts</a></li>
<li><a href="https://mjtsai.com/blog/2018/04/04/apple-hires-john-giannandrea/">Apple Hires John Giannandrea</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/17/leaked-apple-siri-meeting/feed/</wfw:commentRss>
<slash:comments>22</slash:comments>
</item>
<item>
<title>Strongbox Acquired by Applause Group</title>
<link>https://mjtsai.com/blog/2025/03/14/strongbox-acquired-by-applause-group/</link>
<comments>https://mjtsai.com/blog/2025/03/14/strongbox-acquired-by-applause-group/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Fri, 14 Mar 2025 18:06:20 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Acquisition]]></category>
<category><![CDATA[Business]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[iOS App]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[Mac App]]></category>
<category><![CDATA[macOS 15 Sequoia]]></category>
<category><![CDATA[Passwords]]></category>
<category><![CDATA[Strongbox]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47092</guid>
<description><![CDATA[Applause (Reddit): After years of working on Strongbox independently, Mark McGuill has made the decision to entrust the future of this exceptional product to our team at Applause.Applause is a team of indie developers who’ve been building iOS and macOS apps since 2010.[…]Our goal isn’t to change what makes Strongbox special—it’s to build on it. […]]]></description>
<content:encoded><![CDATA[<p><a href="https://strongboxsafe.com/strongbox-joins-applause/">Applause</a> (<a href="https://www.reddit.com/r/strongbox/comments/1jaljzn/strongbox_was_taken_over_by_the_company_applause/">Reddit</a>):</p>
<blockquote cite="https://strongboxsafe.com/strongbox-joins-applause/"><p>After years of working on Strongbox independently, Mark McGuill has made the decision to entrust the future of this exceptional product to our team at Applause.</p><p><a href="https://applause.dev">Applause</a> is a team of indie developers who’ve been building iOS and macOS apps since 2010.</p><p>[…]</p><p>Our goal isn’t to change what makes Strongbox special—it’s to build on it.</p></blockquote>
<p><a href="https://duck.haus/@joesteel/114157704870888525">Joe Rosensteel</a>:</p>
<blockquote cite="https://duck.haus/@joesteel/114157704870888525"><p>At least they said what was happening this time… that’s an improvement, I guess</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/02/21/secrets-4-4-and-passkey-credential-exchange/">Secrets 4.4 and Passkey Credential Exchange</a></li>
<li><a href="https://mjtsai.com/blog/2024/06/05/bartender-acquired-by-applause-group/">Bartender Acquired by Applause Group</a></li>
</ul>
<p id="strongbox-acquired-by-applause-group-update-2025-03-17">Update (2025-03-17): <a href="https://strongboxsafe.com/founders-message/">Mark McGuill</a>:</p>
<blockquote cite="https://strongboxsafe.com/founders-message/">
<p>I started working on Strongbox as my first ever iOS app a very, very long time ago (more than 10 years!). It has obviously grown far beyond my wildest expectations. What originally began as an app purely for my own use, so that I could open those old Password Safe .dat files on my iPhone, has turned into my (and many others) indispensable password manager app.</p>
<p>[…]</p>
<p>However, ten years is a very long time, and, for me personally, it is time to move on to something different. I’ll continue to use Strongbox every day and look forward to the developments and passion the team at Applause will bring. It is hard to maintain motivation for a project for so long and recently I began to feel that Strongbox needed more attention and resources than I could ever hope to bring to it. It has orders of magnitude more users now than what it had even in the last 2 or 3 years and really requires a very dedicated team. Even someone with the most generous imagination in world would struggle to call me a great product manager. I’m a dev at heart. I’m not the right person to properly build out an enterprise like Strongbox. Our users deserve a professional, dedicated team and an enthusiastic and fresh approach.</p>
</blockquote>
<p>See also: <a href="https://news.ycombinator.com/item?id=43356283">Hacker News</a>.</p>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/14/strongbox-acquired-by-applause-group/feed/</wfw:commentRss>
<slash:comments>14</slash:comments>
</item>
<item>
<title>DMA Compliance: Default Maps App in EU</title>
<link>https://mjtsai.com/blog/2025/03/14/dma-compliance-default-maps-app-in-eu/</link>
<comments>https://mjtsai.com/blog/2025/03/14/dma-compliance-default-maps-app-in-eu/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Fri, 14 Mar 2025 18:06:15 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Antitrust]]></category>
<category><![CDATA[Digital Markets Act (DMA)]]></category>
<category><![CDATA[European Union]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[Maps]]></category>
<category><![CDATA[Strategy Tax]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47090</guid>
<description><![CDATA[Joe Rossignol: The upcoming iOS 18.4 update introduces an option to set a default navigation app, other than Apple Maps, but unfortunately this new setting is limited to users in the EU. There, you can now set an app like Google Maps or Waze as your default navigation app on the iPhone by opening the […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.macrumors.com/2025/03/12/ios-18-4-new-setting/">Joe Rossignol</a>:</p>
<blockquote cite="https://www.macrumors.com/2025/03/12/ios-18-4-new-setting/"><p>The <a href="https://www.macrumors.com/2025/03/11/apple-seeds-ios-18-4-public-beta-3/">upcoming iOS 18.4 update</a> introduces an option to set a default navigation app, other than Apple Maps, but unfortunately this new setting is limited to users in the EU. There, you can now set an app like Google Maps or Waze as your default navigation app on the iPhone by opening the Settings app and tapping Apps → Default Apps → Navigation.</p><p>Apple made this change <a href="https://www.macrumors.com/2024/11/04/ios-18-4-default-maps-translate-apps-in-eu/">in response to the EU’s Digital Markets Act</a>.</p></blockquote>
<p>This one seems kind of spiteful. I get that Apple doesn’t want to make <em>sideloading</em> available throughout the world just because the EU and Brazil have mandated it, but they’re going to hide the very useful maps <em>setting</em> in countries that don’t have a DMA?</p>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/07/brazilian-court-mandates-ios-sideloading/">Brazilian Court Mandates iOS Sideloading</a></li>
<li><a href="https://mjtsai.com/blog/2025/02/10/how-safari-search-engine-extensions-work/">How Safari Search Engine Extensions Work</a></li>
<li><a href="https://mjtsai.com/blog/2024/08/22/ios-18-browser-choice-and-default-app-controls-in-eu/">iOS 18: Browser Choice and Default App Controls in EU</a></li>
<li><a href="https://mjtsai.com/blog/2020/06/26/mkbhd-interviews-craig-federighi/">MKBHD Interviews Craig Federighi</a></li>
<li><a href="https://mjtsai.com/blog/2020/03/06/ios-default-apps-and-competing-with-built-in-apps/">iOS Default Apps and Competing With Built-in Apps</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/14/dma-compliance-default-maps-app-in-eu/feed/</wfw:commentRss>
<slash:comments>5</slash:comments>
</item>
<item>
<title>Rewriting the TypeScript Compiler in Go</title>
<link>https://mjtsai.com/blog/2025/03/14/rewriting-the-typescript-compiler-in-go/</link>
<comments>https://mjtsai.com/blog/2025/03/14/rewriting-the-typescript-compiler-in-go/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Fri, 14 Mar 2025 18:06:10 +0000</pubDate>
<category><![CDATA[Programming]]></category>
<category><![CDATA[Compiler]]></category>
<category><![CDATA[Go Programming Language]]></category>
<category><![CDATA[JavaScript]]></category>
<category><![CDATA[Open Source]]></category>
<category><![CDATA[Optimization]]></category>
<category><![CDATA[Software Rewrite]]></category>
<category><![CDATA[TypeScript]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47088</guid>
<description><![CDATA[Anders Hejlsberg (tweet, video, Hacker News): To meet those goals, we’ve begun work on a native port of the TypeScript compiler and tools. The native implementation will drastically improve editor startup, reduce most build times by 10x, and substantially reduce memory usage. By porting the current codebase, we expect to be able to preview a […]]]></description>
<content:encoded><![CDATA[<p><a href="https://devblogs.microsoft.com/typescript/typescript-native-port/">Anders Hejlsberg</a> (<a href="https://x.com/ahejlsberg/status/1899468706218160591">tweet</a>, <a href="https://www.youtube.com/watch?v=pNlq-EVld70">video</a>, <a href="https://news.ycombinator.com/item?id=43332830">Hacker News</a>):</p>
<blockquote cite="https://devblogs.microsoft.com/typescript/typescript-native-port/"><p>To meet those goals, we’ve begun work on a native port of the TypeScript compiler and tools.
The native implementation will <strong>drastically improve editor startup, reduce most build times by 10x, and substantially reduce memory usage</strong>.
By porting the current codebase, we expect to be able to preview a native implementation of <code>tsc</code> capable of command-line typechecking by mid-2025, with a feature-complete solution for project builds and a language service by the end of the year.</p><p>You can <strong><a href="https://github.com/microsoft/typescript-go">build and run the Go code from our new working repo</a></strong>, which is offered under the same license as the existing TypeScript codebase.</p><p>[…]</p><p>Again using the Visual Studio Code codebase as a benchmark, the current time to load the entire project in the editor on a fast computer is about 9.6 seconds.
This drops down to about 1.2 seconds with the native language service, an <strong>8x improvement in project load time</strong> in editor scenarios.</p></blockquote>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/14/rewriting-the-typescript-compiler-in-go/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>App Review, Never Change</title>
<link>https://mjtsai.com/blog/2025/03/14/app-review-never-change/</link>
<comments>https://mjtsai.com/blog/2025/03/14/app-review-never-change/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Fri, 14 Mar 2025 18:05:55 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[App Review]]></category>
<category><![CDATA[App Store]]></category>
<category><![CDATA[App Store Rejection]]></category>
<category><![CDATA[Emulator]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[iOS 18]]></category>
<category><![CDATA[iOS App]]></category>
<category><![CDATA[Iran]]></category>
<category><![CDATA[Push Notifications]]></category>
<category><![CDATA[Pythonista]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47086</guid>
<description><![CDATA[Brandon Titus: Instead of rejecting apps over tiny wording disputes, mentions of android, and business model disagreements could Apple PLEASE enforce 4.5.4:“Push Notifications should not be used for promotions or direct marketing purposes unless customers have explicitly opted in to receive them” Ole Zorn: Apple has just rejected my beta of Pythonista Lab because they […]]]></description>
<content:encoded><![CDATA[<p><a href="https://mastodon.social/@bjtitus/113742628372148563">Brandon Titus</a>:</p>
<blockquote cite="https://mastodon.social/@bjtitus/113742628372148563"><p>Instead of rejecting apps over tiny wording disputes, mentions of android, and business model disagreements could Apple PLEASE enforce 4.5.4:</p><p>“Push Notifications should not be used for promotions or direct marketing purposes unless customers have explicitly opted in to receive them”</p></blockquote>
<p><a href="https://mastodon.social/@olemoritz/114124022803074952">Ole Zorn</a>:</p>
<blockquote cite="https://mastodon.social/@olemoritz/114124022803074952"><p>Apple has just rejected my beta of Pythonista Lab because they have “recently identified that the app is subject to US sanctions regulations”. No real further explanation. 🤬</p><p>[…]</p><p>I suspect that it was this Iranian URL in the source code of the <code>faker</code> module that triggered it, and I’ve re-submitted without it, still waiting though…</p></blockquote>
<p><a href="https://mastodon.social/@eternalstorms/114148177841166405">Matthias Gansrigler</a>:</p>
<blockquote cite="https://mastodon.social/@eternalstorms/114148177841166405">
<p>Hey Apple AppReview, over 5 days of “In Review” for an app that has a single button that does a single thing is a bit much, wouldn’t you agree? Approve, or approve not. Kthxbye.</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2023/04/25/pythonista-3-4-update-rejected/">Pythonista 3.4 Update Rejected</a></li>
<li><a href="https://mjtsai.com/blog/2020/05/13/monkeys-push-notifications/">Monkey’s Push Notifications</a></li>
<li><a href="https://mjtsai.com/blog/2020/03/05/new-app-store-guidelines-for-push-notifications-and-more/">New App Store Guidelines for Push Notifications and More</a></li>
<li><a href="https://mjtsai.com/blog/2018/12/19/more-push-notification-spam-from-apple/">More Push Notification Spam From Apple</a></li>
<li><a href="https://mjtsai.com/blog/2014/06/27/still-yanking-pythonista-around/">Still Yanking Pythonista Around</a></li>
<li><a href="https://mjtsai.com/blog/2014/06/12/pythonista-in-app-store-peril/">Pythonista in App Store Peril</a></li>
</ul>
<p id="app-review-never-change-update-2025-03-19">Update (2025-03-19): <a href="https://www.manton.org/2025/03/18/i-know-im-a-broken.html">Manton Reece</a>:</p>
<blockquote cite="https://www.manton.org/2025/03/18/i-know-im-a-broken.html">
<ul><li>Wait for Apple to approve TestFlight beta.</li>
<li>Wait even longer if the build is stuck “processing” for unknown reasons.</li>
<li>Wait for Apple to approve final version.</li>
<li>Release to customers.</li>
</ul>
<p>Just a stark difference. ☹️</p>
</blockquote>
<p><a href="https://www.reddit.com/r/EmulationOniOS/comments/1jeax6p/mame4ios_resubmitted_to_appstore_with_roms/">EmulationOniOS</a>:</p>
<blockquote cite="https://www.reddit.com/r/EmulationOniOS/comments/1jeax6p/mame4ios_resubmitted_to_appstore_with_roms/"><p>Yoshi and team are creating their own ROMs for review to work around Apple’s insane demands that they limit the emulator to ROMs they own the license to.</p></blockquote>
<p>Via <a href="https://mastodon.social/@craiggrannell/114185125342314505">Craig Grannell</a>:</p>
<blockquote cite="https://mastodon.social/@craiggrannell/114185125342314505">
<p>There’s no way this is going to get past app review, surely?</p>
</blockquote>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/14/app-review-never-change/feed/</wfw:commentRss>
<slash:comments>7</slash:comments>
</item>
<item>
<title>Swift Proposal: Import Objective-C Completion Handler Parameters As @Sendable</title>
<link>https://mjtsai.com/blog/2025/03/13/swift-proposal-import-objective-c-completion-handler-parameters-as-sendable/</link>
<comments>https://mjtsai.com/blog/2025/03/13/swift-proposal-import-objective-c-completion-handler-parameters-as-sendable/#respond</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Thu, 13 Mar 2025 19:52:03 +0000</pubDate>
<category><![CDATA[Programming]]></category>
<category><![CDATA[Language Design]]></category>
<category><![CDATA[Objective-C]]></category>
<category><![CDATA[Swift Concurrency]]></category>
<category><![CDATA[Swift Programming Language]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47068</guid>
<description><![CDATA[SE-0463: The @Sendable annotation indicates that closure parameters are passed over an isolation boundary before they’re called. A missing @Sendable annotation in a library has negative effects on clients who call the function; the caller can unknowingly introduce data races, and SE-0423: Dynamic actor isolation enforcement from non-strict-concurrency contexts injects runtime assertions for non-Sendable closure […]]]></description>
<content:encoded><![CDATA[<p><a href="https://github.com/swiftlang/swift-evolution/blob/main/proposals/0463-sendable-completion-handlers.md">SE-0463</a>:</p>
<blockquote cite="https://github.com/swiftlang/swift-evolution/blob/main/proposals/0463-sendable-completion-handlers.md"><p>The <code>@Sendable</code> annotation indicates that closure parameters are passed over an isolation boundary before they’re called. A missing <code>@Sendable</code> annotation in a library has negative effects on clients who call the function; the caller can unknowingly introduce data races, and <a href="https://github.com/swiftlang/swift-evolution/blob/main/proposals/0423-dynamic-actor-isolation.md">SE-0423: Dynamic actor isolation enforcement from non-strict-concurrency contexts</a> injects runtime assertions for non-<code>Sendable</code> closure parameters that are passed into libraries that don’t have data-race safety checking. This means that a missing <code>@Sendable</code> annotation can lead to a runtime crash for any code that calls the API from an actor isolated context, which is extremely painful for projects that are migrating to the Swift 6 language mode.</p><p>There’s a large category of APIs with closure parameters that can be automatically identified as <code>@Sendable</code> functions, even if the annotation is missing: Objective-C methods with completion handler parameters. <code>@Sendable</code> is nearly always the right default for Objective-C completion handlers, and <a href="https://forums.swift.org/t/clang-sendability-audit-for-closures/75557">programmers have already been searching for an automatic way for completion handlers to be <code>@Sendable</code> by default when auditing Clang headers</a>.</p><p>[…]</p><p>If a completion handler does not cross an isolation boundary before it’s called, the parameter can be annotated in the header with the <code>@nonSendable</code> attribute using <code>__attribute__((swift_attr("@nonSendable")))</code>.</p><p>[…]</p><p>Changing this proposal later to use <code>sending</code> instead will pose source compatibility issues, because it would become invalid to have a protocol requirement that is imported with a <code>sending</code> completion handler and implement the requirement with a <code>@Sendable</code> completion handler. The same source compatibility issue exists for overridden class methods.</p></blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/03/03/swift-6-1/">Swift 6.1</a></li>
<li><a href="https://mjtsai.com/blog/2024/11/25/swift-vision-improving-the-approachability-of-data-race-safety/">Swift Vision: Improving the Approachability of Data-Race Safety</a></li>
<li><a href="https://mjtsai.com/blog/2024/10/01/swift-concurrency-and-objective-c/">Swift Concurrency and Objective-C</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/13/swift-proposal-import-objective-c-completion-handler-parameters-as-sendable/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
<item>
<title>Mozilla Also Defends Google Revenue Sharing Agreement</title>
<link>https://mjtsai.com/blog/2025/03/13/mozilla-also-defends-google-revenue-sharing-agreement/</link>
<comments>https://mjtsai.com/blog/2025/03/13/mozilla-also-defends-google-revenue-sharing-agreement/#comments</comments>
<dc:creator><![CDATA[Michael Tsai]]></dc:creator>
<pubDate>Thu, 13 Mar 2025 19:51:57 +0000</pubDate>
<category><![CDATA[Technology]]></category>
<category><![CDATA[Antitrust]]></category>
<category><![CDATA[Business]]></category>
<category><![CDATA[Department of Justice (DOJ)]]></category>
<category><![CDATA[Firefox]]></category>
<category><![CDATA[Google]]></category>
<category><![CDATA[Google Search]]></category>
<category><![CDATA[iOS]]></category>
<category><![CDATA[Lawsuit]]></category>
<category><![CDATA[Legal]]></category>
<category><![CDATA[Mac]]></category>
<category><![CDATA[Mozilla]]></category>
<guid isPermaLink="false">https://mjtsai.com/blog/?p=47066</guid>
<description><![CDATA[Thomas Claburn: Mozilla, which in 2023 received about 75 percent of its revenue from royalties paid by Google and other search providers for search engine usage in Firefox, worries that the US Justice Department’s proposed ban on the very same Google Search payments would be rather harmful.[…]Google’s payments to Apple for making its search service […]]]></description>
<content:encoded><![CDATA[<p><a href="https://www.theregister.com/2025/03/12/mozilla_doj_google_search_payments/">Thomas Claburn</a>:</p>
<blockquote cite="https://www.theregister.com/2025/03/12/mozilla_doj_google_search_payments/"><p>Mozilla, which in 2023 received about 75 percent of its revenue from royalties paid by Google and other search providers for search engine usage in Firefox, worries that the US Justice Department’s proposed ban on the very same Google Search payments would be rather harmful.</p><p>[…]</p><p>Google’s payments to Apple for making its search service the default in the Safari browser, which reached <a href="https://www.theregister.com/2023/10/10/google_pays_apple_18_20_claims_bernstein/">around $20 billion</a> in 2022, discouraged competition, as the Justice Department argued and the court agreed. However, by banning such payments to browser makers, the government’s remedy could choke off Mozilla’s primary revenue source, putting its operations (and non-trivial <a href="https://www.theregister.com/2024/02/09/mozilla_ceo_mitchell_baker_departs/">executive paychecks</a>) at risk.</p><p>“These proposed remedies prohibiting search payments to small and independent browsers miss the bigger picture – and the people who will suffer most are everyday internet users,” said Mark Surman, president of Mozilla, in <a href="https://blog.mozilla.org/en/mozilla/internet-policy/proposed-remedies-browsers/">a statement</a> Monday.</p></blockquote>
<p><a href="https://mozillapetition.com/">Alexander Pushkov at al.</a> (<a href="https://news.ycombinator.com/item?id=43340948">Hacker News</a>):</p>
<blockquote cite="https://mozillapetition.com/">
<p>While Mozilla has always championed user privacy and an open web, the increasing reliance on Google for revenue raises important questions about our shared commitment to these values.</p>
<p>Now is the time for Mozilla to take bold steps to reinforce its identity as a privacy-centric nonprofit and to prioritize the Firefox browser as the heart of your mission.</p>
<p>It is time to reevaluate the partnership with Google and seek alternatives that align with Mozilla’s values. By distancing itself from Google, Mozilla can reaffirm its commitment to user privacy and autonomy, fostering trust among its user base.</p>
</blockquote>
<p>Previously:</p>
<ul>
<li><a href="https://mjtsai.com/blog/2025/02/28/mozilla-changes-firefox-terms-of-use/">Mozilla Changes Firefox Terms of Use</a></li>
<li><a href="https://mjtsai.com/blog/2024/12/27/apple-to-defend-google-revenue-sharing-agreement/">Apple to Defend Google Revenue Sharing Agreement</a></li>
<li><a href="https://mjtsai.com/blog/2024/11/19/doj-wants-google-to-sell-chrome-and-de-google-android/">DOJ Wants Google to Sell Chrome and De-Google Android</a></li>
<li><a href="https://mjtsai.com/blog/2024/11/15/the-state-of-mozilla/">The State of Mozilla</a></li>
</ul>]]></content:encoded>
<wfw:commentRss>https://mjtsai.com/blog/2025/03/13/mozilla-also-defends-google-revenue-sharing-agreement/feed/</wfw:commentRss>
<slash:comments>3</slash:comments>
</item>
</channel>
</rss>
If you would like to create a banner that links to this page (i.e. this validation result), do the following:
Download the "valid RSS" banner.
Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)
Add this HTML to your page (change the image src
attribute if necessary):
If you would like to create a text link instead, here is the URL you can use:
http://www.feedvalidator.org/check.cgi?url=http%3A//mjtsai.com/blog/feed/rss2/