<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="https://taoofmac.com/static/css/atom.xslt"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Tao of Mac</title>
<subtitle>The Tao of Mac is the personal wiki of Rui Carmo, featuring a technology-oriented blog, links to articles, several compilations of resources around various key technology topics, and a collection of photos and videos.</subtitle>
<link rel="alternate" type="text/xml" href="https://taoofmac.com"/>
<link rel="self" type="application/atom+xml" href="https://taoofmac.com/atom.xml"/>
<id>https://taoofmac.com/atom.xml</id>
<updated>2026-04-15T10:08:30+00:00</updated>
<rights>CC Attribution-NonCommercial-NoDerivs 3.0</rights>
<entry>
<title>Cydintosh</title>
<id>https://taoofmac.com/space/links/2026/04/15/0718?utm_content=atom</id>
<published>2026-04-15T07:18:00+00:00</published>
<updated>2026-04-15T10:08:30+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/links/2026/04/15/0718?utm_content=atom"/>
<content type="html"><![CDATA[
<p><a href="https://github.com/likeablob/cydintosh?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" title="external link to https://github.com/likeablob/cydintosh" alt="screenshot of https://github.com/likeablob/cydintosh" style="color: #0000cc;"><img class="quicklook" src="https://taoofmac.com/thumb/links/2026/04/15/0718/640,480/d_iWpF56TzLMpOrXyvwWgRJBtv8=/large.jpg" width="320" height="240" style="max-width: 100% !important;height: auto !important;"/></a></p>
<p class="lead">I have a soft spot for tiny Macintosh projects, and this one pushes all the right buttons&#8211;an <a href="/space/hw/esp8266" rel="next" style="color: #0000cc;">ESP32</a> Cheap Yellow Display board running a Mac Plus emulator inside a 3D-printed case. I haven&#8217;t finished hacking my <a href="/space/reviews/2025/11/24/1900" rel="next" style="color: #0000cc;">Maclock</a> yet, but it&#8217;s a perfect fit with my <a href="/space/hw/esp8266" rel="next" style="color: #0000cc;">ESP8266</a> hackery, not to mention the collection of vintage <a href="/space/emulation" rel="next" style="color: #0000cc;">emulation</a> hacks I keep filing away and my never-ending ARM64 JIT for <a href="https://github.com/rcarmo/macemu?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">BasiliskII</a>, so I had to link to it.</p>
<p>The utterly <em>brilliant</em> part is that doesn&#8217;t stop at getting System 3.2 onto a small screen&#8211;it adds little <a href="https://github.com/autc04/Retro68?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Retro68</a> utilities for weather, Wi-Fi status and hardware control, which turns the whole thing into equal parts retrocomputing in-joke, embedded hack and practical home automation gadget.</p>
<p>It&#8217;s already printing (in the obligatory platinum-like PLA I keep around for special occasions), and I am <em>so</em> going to plug this into HomeKit somehow&#8230;</p>
<br/>
]]></content>
<category term="esp32" label="esp32" />
<category term="retrocomputing" label="retrocomputing" />
<category term="apple" label="apple" />
<category term="mac" label="mac" />
<category term="links" label="links" />
</entry>
<entry>
<title>Pi.dev Ecosystem</title>
<id>https://taoofmac.com/space/ai/agentic/pi?utm_content=atom</id>
<published>2026-02-24T11:15:00+00:00</published>
<updated>2026-04-14T21:03:13+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/ai/agentic/pi?utm_content=atom"/>
<content type="html"><![CDATA[
<p class="lead">The <a href="https://pi.dev?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Pi coding agent</a> is a terminal-first assistant focused on interactive workflows, extensibility, and running local agents with practical toolchains. The primary distribution today is <a href="https://github.com/badlogic/pi-mono?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pi-mono</a>, which serves as the core runtime and extension point for the ecosystem.</p>
<p>For background on how Pi.dev and the agent evolved, see <a href="https://mariozechner.at/posts/2025-11-30-pi-coding-agent/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Mario Zechner&#8217;s write-up</a>.</p>
<p>This page tracks the Pi-centric projects, adapters, and clients that extend the core agent, including alternate front-ends, web access tooling, and automation bridges within the wider <a href="/space/ai/agentic" rel="next" style="color: #0000cc;">Agentic Systems</a> collection.</p>
<a class="anchor" id="anchor-ecosystem" rel="anchor" href="/space/ai/agentic/pi#ecosystem" style="color: #0000cc;"><h2 id="ecosystem">Ecosystem</h2></a><p/><div class="message error" role="alert">
    <p><b>Error:</b> Could not parse 'table.yaml'</p>
<pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;">while parsing a block mapping
  in "&lt;byte string&gt;", line 2, column 1
did not find expected key
  in "&lt;byte string&gt;", line 190, column 1
</pre>
</div>
<br/>
]]></content>
<category term="agentic" label="agentic" />
<category term="pi" label="pi" />
<category term="tools" label="tools" />
<category term="ai" label="ai" />
<category term="coding" label="coding" />
</entry>
<entry>
<title>Android</title>
<id>https://taoofmac.com/space/com/google/android?utm_content=atom</id>
<published>2007-11-17T22:36:03+00:00</published>
<updated>2026-04-13T18:32:30+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/com/google/android?utm_content=atom"/>
<content type="html"><![CDATA[
<p class="lead">The mobile platform sponsored by <a href="/space/com/google" rel="next" style="color: #0000cc;">Google</a> as part of the Open Mobile
Alliance, evolved from their 2005 acquisition of the company with the
same name.</p>
<a class="anchor" id="anchor-resources" rel="anchor" href="/space/com/google/android#resources" style="color: #0000cc;"><h3 id="resources">Resources</h3></a><p/><div class="message error" role="alert">
    <p><b>Error:</b> Could not parse 'table.yaml'</p>
<pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;">while parsing a block mapping
  in "&lt;byte string&gt;", line 2, column 1
did not find expected key
  in "&lt;byte string&gt;", line 90, column 1
</pre>
</div>
<a class="anchor" id="anchor-timeline" rel="anchor" href="/space/com/google/android#timeline" style="color: #0000cc;"><h3 id="timeline">Timeline</h3></a><p>Some of the news coverage from the early years of Android:</p>
<p/><table class="compact" style="background: transparent;margin: 0px;padding: 0px;border-collapse: collapse;font-size: 90%;">
<thead>
<tr style="border-top: 1px solid #aaa;">
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Date</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Link</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Notes</th>
</tr>
</thead>
<tbody style="border-top: 2px solid black;border-bottom: 2px solid black;">
<tr style="border-top: 1px solid #aaa;">
<td rowspan="4" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2010-06</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://arstechnica.com/open-source/news/2010/06/google-announces-official-android-22-update-for-nexus-one.ars?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Google Android 2.2 (Froyo) comes to Nexus One</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Not that exciting.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://jkontherun.com/2010/06/21/adobe-flash-player-10-1-for-android-gets-official/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Adobe Flash Player 10.1 for Android Gets Official</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>If that is your thing.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2010/06/06/yep-the-iphone-runs-android-2-2-too/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Yep, the iPhone runs Android 2.2, too</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Still unusable, basically.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2010/06/30/android-3-0-gingerbread-getting-revamped-ui-froyo-living-on-for/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Android 3.0 Gingerbread getting revamped UI, Froyo living on for lower-end phones?</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A bigger chunk for the fragmentation advocates.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="11" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2010-05</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://arstechnica.com/gadgets/news/2010/05/google-fails-to-revolutionize-the-cellphone-market.ars?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Google fails to revolutionize the cellphone market</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Told you it wasn&#8217;t that simple to just sell phones online&#8230;</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://arstechnica.com/open-source/news/2010/05/speedy-android-22-hits-with-tethering-push-framework-morespeedy-android-22-hits-with-tethering-push-framework-more.ars?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Speedy Android 2.2 hits with tethering, push framework, more</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A better overview.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://jkontherun.com/2010/05/20/everything-you-need-to-know-about-android-2-2-froyo/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Everything You Need to Know About Android 2.2 (Froyo)</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A pretty comprehensive overview</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://mediamemo.allthingsd.com/20100510/is-android-really-outselling-apple/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Is Android Really Outselling Apple?</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Hardly a surprise if you take into account that there is only one Apple.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.businessinsider.com/flash-for-smartphones-is-finally-here-and-it-is-terrible-2010-5?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Flash For Smartphones Is Finally Here, And It Is Terrible</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Ha.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.businessinsider.com/the-verdict-on-android-22-froyo-its-sweet-2010-5?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">The Verdict On Android 2.2 "Froyo"-It's Sweet</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>It does <em>look</em> nicer.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.dailywireless.org/2010/05/13/android-2-2-tethering-hotspots/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Android 2.2 Tethering  Hotspots</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>More features, less battery life.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.dailywireless.org/2010/05/24/froyo-speed-test/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Froyo Speed Test</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Faster without Flash.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2010/05/18/android-2-1-becomes-most-used-version-just-in-time-to-be-obviat/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Android 2.1 becomes most used version, just in time to be obviated by Froyo</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>More statistics.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2010/05/21/iphone-3gs-android-port-is-ready-to-download/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">iPhone 3G's Android port is ready to download</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a fully charged iPhone running Android will last only an hour or so.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2010/05/22/entelligence-is-android-fragmented-or-is-this-the-new-rate-of-i/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Is Android fragmented or is this the new rate of innovation?</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>in a nutshell, Google won&#8217;t admit to fragmentation of user experience.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="5" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2010-04</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://gigaom.com/2010/04/13/google-pad-vs-ipad-features/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">5 Things Google Must Do to Make Its Tablet Competitive</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Oh ffs. The thing doesn&#8217;t even exist yet, and they&#8217;re pontificating already?</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://techcrunch.com/2010/04/27/admob-android-passes-iphone-web-traffic-in-u-s/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Jobs detects an imbalance in the force</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Gotta love stats. One little thing, though - Android apps are more likely to be free and ad-driven, so anything coming from an ad server isn&#8217;t necessarily a good market penetration metric for a platform.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.dailywireless.org/2010/04/28/flash-support-in-android-2-2/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Flash Support in Android 2.2</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Oh, the enthusiasm.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2010/04/26/nexus-one-launches-on-vodafone-uk-this-friday-april-30/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Nexus One launches on Vodafone UK this Friday, April 30</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>There you go, mate.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.wired.com/gadgetlab/2010/04/nyt-google-android-tablet-imminent/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Yes they can (potentially kick Apple's ass)</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Don&#8217;t think so, but it&#8217;s sure going to be interesting to watch them try&#8230;</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="7" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2010-02</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://arstechnica.com/gadgets/news/2010/02/google-makes-biggest-gain-in-smartphone-market-share.ars?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Google makes biggest gain in smartphone market share</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>More pretty charts (US-centric, therefore meaningless). The difference here is that there are umpteen versions of Android devces and far fewer of other platforms&#8230;</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://jaap.haitsma.org/2010/02/15/nexus-one-could-be-more-environment-friendly/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Nexus One could be more Environment Friendly</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Why add the charger instead of replacing it?</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.computerworld.com/s/article/9153878/Google_reduces_its_Nexus_One_termination_fee?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Google reduces its Nexus One termination fee</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Interesting.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2010/02/02/nexus-one-gets-a-software-update-enables-multitouch/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Nexus One gets a software update, enables multitouch (updated with video!)</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Will it change anything?</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2010/02/11/nexus-one-3g-problems-persist-after-update-is-it-a-design-pro/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Nexus One 3G problems persist after update &#8212; is it a design problem?</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Oh, yeah, sure. Like baseband firmware fixes poor coverage.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2010/02/14/new-nexus-one-rom-leaks-fixes-more-radio-issues/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">New Nexus One ROM leaks, fixes more radio issues?</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Another try, I guess&#8230;</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2010/02/26/nexus-one-coming-to-vodafone-uk-in-april-says-telegraph/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Nexus One coming to Vodafone UK in April, says Telegraph</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>No comment</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="22" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2010-01</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://android-developers.blogspot.com/2010/01/android-21-sdk.html?utm_source=feedburner%3Dfeed%3DFeed%3A+blogspot%2FhsDu+%28Android+Developers+Blog%29&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Android 2.1 SDK</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>About time.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://arstechnica.com/gadgets/news/2010/01/a-few-days-with-the-nexus-one.ars?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">On-duty with the Nexus One-form factor, battery, Android</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>An odd review.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://arstechnica.com/gadgets/news/2010/01/google-learning-that-users-want-real-support-for-nexus-one.ars?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Google learning that users want real support for Nexus One</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Learning can be painful.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://arstechnica.com/gadgets/news/2010/01/googles-big-news-today-was-not-a-phone-but-a-url.ars?utm_source=rss%3Drss%3Drss&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Google's biggest announcement was not a phone, but a URL</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>I find it amazing that they&#8217;d write this much about ordering a phone online on a third-party store, but that&#8217;s the US mobile market for you.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://arstechnica.com/gadgets/reviews/2010/01/nexus-one-review.ars?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Google at the crossroads - a review of the Nexus One</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Pretty detailed and comprehensive review, as always.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://gigaom.com/2010/01/13/nexus-one-week-one-sales/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">In the First Week, Google May Have Sold 20,000 Nexus One Phones</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Comparing 20K against 1.6 million iPhones on the first week is a bit unfair considering the way it&#8217;s sold.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://mobile.slashdot.org/story/10/01/12/1819214/Google-Charges-ETF-For-Nexus-One-On-Top-of-Carriers?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Google Charges ETF For Nexus One On Top of Carrier&#8217;s</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Interesting. More here and here.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://techdirt.com/articles/20100105/1336457621.shtml?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Google Isn&#8217;t Targeting iPhone Users; It&#8217;s Targeting Everyone Else (Maybe)</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Much ado about nothing in particular, basically.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.dailywireless.org/2010/01/05/google-phone-unveiled-today/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Google Phone Unveiled Today</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A coherent list of specs, although there are plenty of meaningless stats bolted on to beef up the article.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.dailywireless.org/2010/01/11/nexus-one-174-cost-to-build/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Nexus One - $174 Cost to Build</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>About the same estimated production cost than a 3GS, except that Apple has likely done a better bulk deal on parts&#8230; Also, nice comparative tables.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2010/01/02/exclusive-google-nexus-one-hands-on-video-and-first-impressio/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Google Nexus One hands-on, video, and first impressions</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Not an iPhone killer. Hardly capable of killing a fly, apparently.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2010/01/04/nexus-one-review/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Nexus One review</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>not much in terms of review, actually.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2010/01/05/googles-nexus-one-is-official/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Google&#8217;s Nexus One is official</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>$529 unlocked, shipping to the US, UK, Singapore and Hong Kong, or with a two year T-Mobile US contract for $179. There go a lot of pipedreams about it being sold direct to the public at &#8220;astonishingly low&#8221; prices.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2010/01/06/nexus-one-teardown-reveals-possible-802-11n-radio-and-fm-transmi/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Nexus One teardown reveals 802.11n WiFi and FM transmitter</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>This teardown mania is somewhat fun, but one wonders how long it will take until people realise that only a very small minority of what is &#8220;unearthed&#8221; is news&#8230;</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2010/01/06/vodafone-promises-nexus-one-in-a-few-short-weeks/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Vodafone promises Nexus One &#8216;in a few short weeks&#8217;</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>And this is probably where I stop keeping track of this particular device&#8230;</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2010/01/11/t-mobile-makes-mention-of-3g-issues-with-nexus-one-hopes-to-hav/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">T-Mobile makes mention of 3G issues with Nexus One, hopes to have &#8216;more information&#8217; soon</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Here&#8217;s to some heroic debugging.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2010/01/12/t-mobile-gives-reps-troubleshooting-tips-for-nexus-ones-3g-issu/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">T-Mobile gives reps troubleshooting tips for Nexus One&#8217;s 3G issues</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Looks like a baseband issue alright.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2010/01/25/google-nexus-one-3g-issues-result-of-poor-coverage-bugs-patch/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Google - Nexus One 3G issues result of poor coverage, bugs; patch possibly within a week</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Wouldn&#8217;t be surprised if it was a baseband upgrade.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.nytimes.com/2010/01/06/technology/personaltech/06pogue.html?hp=%3Dall&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">State of the Art - Google Shakes but Doesn&#8217;t Upend the Cellphone Market - NYTimes.com</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Pogue doesn&#8217;t seem terribly impressed.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.suntimes.com/technology/ihnatko/ihnatko-nexus-one-google-phone-012110.article?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Google&#8217;s Nexus One is no iPhone - and that&#8217;s OK</a></td>
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A more balanced review.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.uncrate.com/men/gear/cell-phones/nexus-one-phone/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Nexus One Phone</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Hilarious video review.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="8" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2009-11</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://alsop-louie.com/gadgets/droid-doesnt-its-not-ready-for-prime-time/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Droid Doesn&#8217;t - It&#8217;s Not Ready For Prime Time &#183; Alsop Louie Partners</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A month later, reality calls.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://mobile.infoworld.com/device/article.php?CALL_URL=www.infoworld.com%2Fd%2Fmobilize%2Fwant-droid-work-e-mail-itll-cost-you-extra-575&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Exchange Access for Droid - $15 Extra Per Month</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Wow.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.dailywireless.org/2009/11/05/verizon-droid-gets-early-reviews/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Verizon Droid Gets Early Reviews</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A nice summary of the reviews so far.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2009/11/10/analyst-estimates-100-000-droid-smartphones-sold-in-first-weeken/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Analyst estimates 100,000 DROID smartphones sold in first weekend</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>It isn&#8217;t the RAZR, but it&#8217;s a decent figure.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2009/11/11/motorola-droid-torn-down-despite-desperate-cries-of-no-disassem/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Motorola Droid torn down despite desperate cries of &#8216;no disassemble&#8217;</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Worth looking at.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2009/11/23/stats-show-motorola-droid-is-the-new-elephant-in-the-android-roo/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Stats show Motorola Droid is the new elephant in the Android room</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>I&#8217;m still wary of stats (local copy of PDF), but I hear it&#8217;s selling pretty well indeed.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.pheedcontent.com/click.phdo?i=6f000b89255521480cf67ef0cd5eb5cf&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Droid Does&#8230; only have 256MB of storage for apps</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Now that&#8217;s gotta be&#8230; Useful.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.tuaw.com/2009/11/05/andy-ihnatko-on-verizon-droid-idont-ads-baloney-mostly/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Andy Ihnatko on Verizon Droid &#8220;iDon&#8217;t&#8221; ads - baloney (mostly)</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Yep.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="14" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2009-10</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://developer.android.com/sdk/android-2.0-highlights.html?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Android 2.0 Highlights</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>The e-mail client looks nice, but I&#8217;m curious as to usability.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://gigaom.com/2009/10/28/droid-will-not-kill-iphone/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">The Droid Has Landed&#8230;Unboxed! Plus a Few Facts</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Nothing to worry about except that it&#8217;s the start of a trend.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://jkontherun.com/2009/10/07/android-not-iphone-is-bigger-symbian-challenger-says-gartner/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Android, not iPhone, is Bigger Symbian Challenger Says Gartner</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Not rocket science, but a bit exaggerated, since nobody can really look that far into the future in this industry.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://jkontherun.com/2009/10/26/droid-to-be-verizons-android-product-line-not-a-single-phone/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Droid to be Verizon's Android Product Line, Not a Single Phone</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Now this is a clever move.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://jkontherun.com/2009/10/27/android-2-0-is-official-quick-contacts-look-nice/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Android 2.0 is Official - Quick Contacts Look Nice</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>This is just what I think is needed in oh, so many other places.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.cultofmac.com/droid-launches-nov-6-priced-to-match-iphone/19901?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Droid Launches Nov 6 Priced To Match iPhone</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>The price matching approach is interesting, but then again in the US handset prices don&#8217;t work quite the same way as in Europe.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.dailywireless.org/2009/10/28/android-phones-get-free-turn-by-turn-directions/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Android Phones Get Free Turn-By-Turn Directions</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Best overview yet</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.dailywireless.org/2009/10/28/verizon-droid-phone-nov-6th-199/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Verizon Droid Phone - Nov 6th, $199</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A pretty decent feature set overview.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2009/10/23/verizons-droid-is-a-series-not-just-a-phone-droid-eris-coming/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Verizon's Droid is a series, not just a phone; Droid Eris coming from HTC</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Let&#8217;s see how this pans out. I&#8217;m quite curious, actually, to see if Verizon can pull this off in the sense of generating genuine buzz around an operator-specific set of Android devices.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2009/10/28/google-adds-free-turn-by-turn-navigation-car-dock-ui-to-android/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Google adds free turn-by-turn navigation, car dock UI to Android 2.0 (video)</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>The quip about an Apple version is not to be missed.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2009/10/28/google-navigation-video-hands-on-you-want-this/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Google Navigation video hands-on - you want this</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Looks nice indeed, but let&#8217;s wait to see how well map caching works.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2009/10/28/motorola-droid-first-hands-on-update-video-impressions-mor/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Motorola DROID first hands-on! (update - video, impressions, more pics)</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>I can&#8217;t figure out why these people keep wasting space in hardware keyboards.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.osnews.com/story/22401/Google_Releases_Android_2_0_SDK?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Google Releases Android 2.0 SDK</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>But the UI guidelines are still a bit on the loose side.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.russellbeattie.com/blog/android-thoughts-two-years-later?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Android thoughts two years later</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Well worth reading through, and mirrors my own views. One to re-visit a few years from now indeed.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="4" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2009-09</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://android-developers.blogspot.com/2009/09/android-16-sdk-is-here.html?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Android 1.6 SDK is here</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Well, at least compatibility is assured.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://android-developers.blogspot.com/2009/09/some-news-from-android-market.html?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Some News from Android Market</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>It took them this long to add screenshots to apps in the Market?</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.cyanogenmod.com/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Cyanogen</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Modified firmware for some devices. Just had to happen.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2009/09/10/android-battle-cliq-edition/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Android Battle</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A nice summary table of devices</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2009-08</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://daringfireball.net/2009/08/the_android_opportunity?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">The Android Opportunity</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Mostly agree, although this is too US-centric for it to be considered the whole truth.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="3" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2009-06</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2009/06/24/adobe-demos-flash-on-the-htc-hero/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Adobe demos Flash on the HTC Hero</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>This is going to be interesting to watch.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2009/06/24/htc-hero-details-begin-leaking-from-htcs-own-website/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">HTC Hero running Android and Sense UI leaks from HTC's own website</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Flash turns out to not be that exciting. Or useful. Plus the phone is plain ugly, and a lot thicker than what the first shot makes it look.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2009/06/24/htc-hero-hands-on/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">HTC Hero hands-on</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Flash, keyboard and ruminations</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="4" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2009-04</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://android-developers.blogspot.com/2009/04/introducing-home-screen-widgets-and.html?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Introducing home screen widgets and the AppWidget framework</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>An interesting tech note on how Android handles home screen widgets.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://gigaom.com/2009/04/02/how-t-mobile-customers-use-the-google-phone/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Some Fun Facts About The Google Phone</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Interesting stats about usage patterns.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2009/04/27/vodafone-spain-first-to-launch-htc-magic/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Vodafone Spain first to launch HTC Magic</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Loads of fun for various reasons.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2009/04/29/vodafone-suggests-future-android-phones-could-have-less-google/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Vodafone suggests future Android phones could have less Google</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>People keep confusing the platform with the services.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2009-03</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2009/03/05/htc-black-magic-sapphire-hands-on-a-vodafone-exclusive/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">HTC black Magic (Sapphire) hands-on - a Vodafone exclusive</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Very few decent shots</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2009/03/05/htc-magic-hands-on/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">HTC Magic hands-on</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A few more shots</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="8" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2009-02</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://android-developers.blogspot.com/2009/02/android-market-update-support-for.html?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Android Market update - support for priced applications</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Using Google Checkout, of course.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.dailywireless.org/2009/02/12/telenav-does-turn-by-turn-on-android/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">TeleNav Does Turn-By-Turn on Android</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Apparently US-only, which is a pity.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.dailywireless.org/2009/02/13/android-market-open-for-business/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Android Market - Open for Business</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A very nice (if shallow) analysis that bunches together some interesting tidbits of info.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2009/02/17/htc-magic-first-eyes-on/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">HTC Magic first eyes-on!</a></td>
<td rowspan="3" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"/>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2009/02/17/htc-magic-in-depth-hands-on-with-video/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">HTC Magic in-depth hands-on, with video!</a></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2009/02/17/htc-magic-is-official-bringing-android-to-vodafone-sans-keyboar/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">HTC Magic is official, bringing Android to Vodafone sans keyboard</a></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>And after adding these links, this page now merits a direct, obvious, reference to my disclaimer.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.macworld.com/article/139045/2009/02/google_g1.html?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Google blocks paid apps for unlocked G1 users</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Interesting hint of fragmentation.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2009-01</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://venturebeat.com/2009/01/01/android-netbooks-on-their-way-likely-by-2010/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Android netbooks on their way, likely by 2010</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Dubious in both title and subject matter (we&#8217;ve known that Android could be made to run on PCs for a good while now.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="4" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2008-12</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://news.cnet.com/8301-1035_3-10125466-94.html?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Huawei powers up its Android plans</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>For Q3 2009. Let&#8217;s see what they come up with.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.dailywireless.org/2008/12/08/unlocked-android-399/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Unlocked Android - $399</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Development samples, available for purchase.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.openhandsetalliance.com/press_120908.html?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Open Handset Alliance announces 14 new members</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>including Sony Ericsson and Vodafone. Most people missed this last bit, which is fun.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.tbray.org/ongoing/When/200x/2008/12/28/Android-Diary-Intro-Programming?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">AD IV - Programming Newbie</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Tim Bray lists a few interesting resources for new developers</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2008-11</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://blogs.zdnet.com/Burnette/?p=680&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Worst. Bug. Ever.</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Although this was fixed fairly quickly, it is the perfect example of why mobile phones aren&#8217;t exactly trivial to &#8220;improve upon&#8221; using today&#8217;s technology.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="18" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2008-10</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://android-developers.blogspot.com/2008/10/android-is-now-open-source.html?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Android is now Open Source</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Let&#8217;s see if someone will port this to Intel and get it running on a netbook&#8230;</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://androidcommunity.com/first-t-mobile-g1-user-review-20081009/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">First T-Mobile G1 user review</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Not particularly gushing.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://arstechnica.com/reviews/hardware/android-g1-review.ars/1?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Almost Human - a review of Google's Android G1 phone</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Good reading - a thorough appraisal.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://blogs.zdnet.com/cell-phones/?p=179&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Over 260 images and 5 videos of the T-Mobile G1 Google Android device</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A tad overkill, but interesting nonetheless.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://gigaom.com/2008/10/15/google-phone-review-the-good-the-bad-ugly-about-tmobile-g1/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">The Google Phone Review - What I Love  Hate About T-Mobile G-1</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Om Malik weighs in.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://gizmodo.com/5062977/t+mobile-g1-google-android-phone-review?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">T-Mobile G1 Google Android Phone Review</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"/>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://online.wsj.com/article/SB122411880249138993.html?mod=rss_Gadgets&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Google answers the iPhone</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Walt Mossberg&#8217;s take.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://reviews.cnet.com/htc-dream-t-mobile-g1/?tag=newsLeadStoriesArea.0&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">HTC Dream T-Mobile G1 (black) Smartphone review</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"/>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://stevenf.com/archive/iphone-vs-tmobile-g1.php?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">iPhone vs T-Mobile G1</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A short comparison.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://techon.nikkeibp.co.jp/english/NEWS_EN/20081024/160067/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Android Phone Teardown</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>How weird is it that this is in Japan?</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2008/10/15/t-mobile-g1-review/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">T-Mobile G1 review</a></td>
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"/>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2008/10/16/t-mobile-g1-review/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">T-Mobile G1 review</a></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Engadget&#8217;s lengthy two-part article</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.jkontherun.com/2008/10/t-mobile-g1-han.html?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">T-Mobile G1, a hands-on introduction to the first Android phone</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Some interesting videos</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.mobileburn.com/review.jsp?Id=5492&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Review of the T-Mobile G1 Google phone</a></td>
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Pretty comprehensive gallery.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.nytimes.com/2008/10/16/technology/personaltech/16pogue.html?_r=2&amp;adxnnl=1&amp;oref=slogin&amp;oref=slogin&amp;partner=rssnyt&amp;emc=rss&amp;adxnnlx=1224176523-yM0OFN9onDgFct5oOOdDQA&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">State of the Art - A Look at Google's First Phone</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>David Pogue weighs in.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.techcrunch.com/2008/10/15/what-android-can-learn-from-the-iphone-its-the-software-stupid/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">What Android Can Learn From the iPhone - It's the Software, Stupid.</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Brilliant title.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2008-09</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2008/09/16/google-shows-off-masked-android-handset/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Google shows off masked Android handset</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>About a year later, one of the first sightings of actual hardware (but running over Wi-Fi. I don&#8217;t get the &#8220;masked&#8221; bit, though - the hardware&#8217;s pretty obvious.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.engadget.com/2008/09/23/video-android-walkthrough-on-t-mobile-g1/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Video - Android walkthrough on T-Mobile G1</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A few demos</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2007-11</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://code.google.com/android/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Android SDK</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Includes plenty of links to videos and reference information</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://en.wikipedia.org/wiki/Android_%28mobile_phone_platform%29?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Wikipedia</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Background info</p></td>
</tr>
</tbody>
</table>
<br/>
]]></content>
<category term="platforms" label="platforms" />
<category term="android" label="android" />
<category term="mobile" label="mobile" />
<category term="google" label="google" />
</entry>
<entry>
<title>European AI: A Playbook to Own It</title>
<id>https://taoofmac.com/space/links/2026/04/13/0730?utm_content=atom</id>
<published>2026-04-13T07:30:00+00:00</published>
<updated>2026-04-13T07:30:00+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/links/2026/04/13/0730?utm_content=atom"/>
<content type="html"><![CDATA[
<p><a href="https://europe.mistral.ai/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" title="external link to https://europe.mistral.ai/" alt="screenshot of https://europe.mistral.ai/" style="color: #0000cc;"><img class="quicklook" src="https://taoofmac.com/thumb/links/2026/04/13/0730/640,480/BjwME7FzMHkFeX0koGKDLfVUIEo=/large.jpg" width="320" height="240" style="max-width: 100% !important;height: auto !important;"/></a></p>
<p class="lead">Mistral published a 52-minute read on how Europe should build an independent AI stack&#8211;talent pipelines, single-market scale, local infrastructure, sovereign compute, the lot. It reads like a policy brief dressed up as a manifesto, and while it has a glaring flaw and some of the proposals are predictably self-serving (Mistral is, after all, the company that would benefit most from &#8220;buy European AI&#8221; procurement rules), the underlying analysis is hard to argue with.</p>
<p>The five pillars&#8211;attract talent, scale the single market, drive adoption in the real economy, build local infrastructure, and secure sovereign AI capacity&#8211;are all sensible, and the specific measures (an EU AI talent visa, streamlined regulation, public procurement mandates, European cloud infrastructure) are concrete enough to be actionable rather than the usual Brussels hand-wringing. The 40% figure they cite for Europe&#8217;s share of global AI research output versus its minuscule share of commercialisation is the kind of stat that should make policymakers uncomfortable.</p>
<p>Where it completely falls apart, though, is that Mistral, even as an European company, <em>currently doesn&#8217;t hire remotely in Europe</em> &#8211; so the whole thing feels a tad insulting if, like me, you&#8217;re actually in the industry and not in politics.</p>
<p>There is some merit to it, though, and whether any of this actually happens is a different question entirely. Europe&#8217;s track record on turning common sense into working industrial policy is, to put it generously, mixed&#8211;and the current geopolitical climate makes &#8220;digital sovereignty&#8221; feel less like an aspiration and more like an urgent necessity that nobody has quite figured out how to fund. </p>
<br/>
]]></content>
<category term="sovereignty" label="sovereignty" />
<category term="ai" label="ai" />
<category term="europe" label="europe" />
<category term="mistral" label="mistral" />
<category term="policy" label="policy" />
<category term="regulation" label="regulation" />
<category term="infrastructure" label="infrastructure" />
</entry>
<entry>
<title>Notes for April 6-12</title>
<id>https://taoofmac.com/space/notes/2026/04/12/1700?utm_content=atom</id>
<published>2026-04-12T17:00:00+00:00</published>
<updated>2026-04-12T17:00:00+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/notes/2026/04/12/1700?utm_content=atom"/>
<content type="html"><![CDATA[
<p class="lead">Thanks to a bit of spillover from Easter break, this was a calmer, more satisfying week where I could actually get stuff done and even have a bit of fun.</p>
<p/><figure><img alt="My idea of fun, apparently, is to do 3D visualizations in piclaw" src="https://taoofmac.com/media/notes/2026/04/12/1700/SaT1uVe8kVrbx0ni3kbPwykAGWE=/piclaw-3d-visualization.png" width="2040" height="1210" style="max-width: 100% !important;height: auto !important;"/><figcaption>My idea of fun, apparently, is to do 3D visualizations in piclaw</figcaption></figure><p/>
<a class="anchor" id="anchor-getting-organized" rel="anchor" href="/space/notes/2026/04/12/1700#getting-organized" style="color: #0000cc;"><h2 id="getting-organized">Getting Organized</h2></a><p>Now that <a href="https://github.com/rcarmo/piclaw?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;"><code>piclaw</code></a> is in cruise mode, I&#8217;ve started focusing on actually <em>using it</em>.</p>
<p>So I created an instance called Flint, which manages not only my <a href="/space/apps/obsidian" rel="next" style="color: #0000cc;">Obsidian</a> vault but also all of my personal pursuits and most of my homelab: I gave it the API tokens for my <a href="/space/os/linux/distributions/proxmox" rel="next" style="color: #0000cc;">Proxmox</a> cluster and <a href="/space/os/linux/docker/portainer" rel="next" style="color: #0000cc;">Portainer</a>, and over the past week it&#8217;s been busy:</p>
<ul>
<li>It re-tagged most of my notes and drafts (as well as adding reference URLs for ongoing drafts), quizzing me on what to do with specific notes as it went</li>
<li>It rebuilt and redeployed my GPU <code>sandbox</code> (which I broke last week): recreated the VM, mounted the Ubuntu ISO, prompted me to run the installer, and installed the latest NVIDIA drivers, <code>nvidia-docker</code> and a baseline set of utilities.</li>
<li>I then asked it to look at the <a href="/space/os/linux/docker/portainer" rel="next" style="color: #0000cc;">Portainer</a> stacks in my <code>gitea</code> instance, my <a href="/space/apps/obsidian" rel="next" style="color: #0000cc;">Obsidian</a> notes, and what needed to be set up, and it installed the <a href="/space/os/linux/docker/portainer" rel="next" style="color: #0000cc;">Portainer</a> agent and brand new versions of the stacks with tweaked network and volume settings, updated my notes, and upgraded the pinned image versions (troubleshooting as it went).</li>
<li>It developed and published an <a href="https://github.com/rcarmo/bun-opds?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">OPDS server</a> and an <a href="https://github.com/rcarmo/bun-epub?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">EPUB read later service</a> so I can fetch interesting web pages and read them later on the <a href="https://xteink.com/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">XteInk X4</a>, including monitoring the CI pipeline and redeploying the containers</li>
<li>It audited <a href="/space/os/linux/distributions/openwrt" rel="next" style="color: #0000cc;">my Cudy OpenWRT config</a> and set up centralized stats collection in <a href="/space/apps/graphite" rel="next" style="color: #0000cc;">Graphite</a>, which I had been meaning to do for ages (and I intend to have it set up <a href="https://www.influxdata.com/time-series-platform/telegraf/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Telegraf</a> on other machines to collect metrics).</li>
</ul>
<p>So far, Flint is a resounding success (it&#8217;s using GPT-5.4, a fairly sensible and stable model), but it doesn&#8217;t just do notetaking and operations.</p>
<a class="anchor" id="anchor-site-hackery" rel="anchor" href="/space/notes/2026/04/12/1700#site-hackery" style="color: #0000cc;"><h2 id="site-hackery">Site Hackery</h2></a><p>Flint has also become quite useful to help me tidy up my workflow&#8212;I was already using a <a href="https://github.com/rcarmo/piclaw?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;"><code>piclaw</code></a> instance to convert ancient <a href="/space/markup/textile" rel="next" style="color: #0000cc;">Textile</a> and raw HTML posts into <a href="/space/markup/markdown" rel="next" style="color: #0000cc;">Markdown</a> in batches, but there are a few things that have been nagging at me for years and that I can finally make significant progress on:</p>
<ul>
<li>Adding links to my resource pages</li>
<li>Drafting link blog entries</li>
<li>Streamlining static site builds</li>
</ul>
<p>I&#8217;ve had <a href="/space/apps/shortcuts" rel="next" style="color: #0000cc;">Shortcuts</a> to do the first two for ages, but they both relied on adding bits of text to Reminders that were then post-processed and added to <code>git</code> using either the CLI or <a href="https://workingcopy.app/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">WorkingCopy</a>. That worked OK for a while, but my iPad mini&#8217;s increasing slowness has made them quite frustrating, especially since I tend to do that kind of quick posting over breakfast and it was taking up too much time.</p>
<p>As it happens, GitHub has <a href="https://docs.github.com/en/rest/git/trees?apiVersion=2026-03-10&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">a REST API for Git Trees</a>, and what that means in practice is that I can update a JSON changeset with these minor changes, let it accumulate over breakfast, and then apply them in batches&#8211;or, rather, have Flint do that, with all the guidance and steps in a <code>SKILL.md</code> file.</p>
<p>So my new breakfast workflow is to just send links to Flint using the iOS sharing pane or a bookmarklet (still experimenting with both), have it create a JSON changeset for links, and occasionally ask it to screenshot a page and create a blank Markdown document for linkblog posts. That is pre-filled with a title, likely tags and the appropriate image reference, and I just pop open the built-in editor tab in <a href="https://github.com/rcarmo/piclaw?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;"><code>piclaw</code></a>, finish the post and ask it to add the files to the changeset and post them via the API.</p>
<p>So far, it&#8217;s been going swimmingly: zero <code>git</code> fetches/commits/pushes, all handled server side, and very little friction&#8211;<em>and</em> it works on my iPad mini, albeit still slowly.</p>
<a class="anchor" id="anchor-a-new-hope" rel="anchor" href="/space/notes/2026/04/12/1700#a-new-hope" style="color: #0000cc;"><h2 id="a-new-hope">A New Hope</h2></a><p>Another thing I&#8217;ve been working on is porting the <a href="/space/dev/python" rel="next" style="color: #0000cc;">Python</a> site builder to <a href="/space/dev/golang" rel="next" style="color: #0000cc;">Go</a> for both speed and maintainability&#8212;the current codebase has some 20-year old hangovers that I wanted to get rid of, and some kind of reset has been long overdue, so I have been slowly poking at this for the past few months.</p>
<p>As it happens, the overall indexing and rendering process was pretty trivial&#8212;the real challenge has been to make sure that it looks <em>exactly the same</em>, especially given that my engine has some pretty specific Wiki-linking rules and I&#8217;ve accumulated a bunch of rendering helpers and custom plugins over the years.</p>
<p>Plus everything related to HTML rendering has changed: parsing, link resolution, templating, the works. And that&#8217;s enough to juggle already, so I don&#8217;t want to change the front-end design at all (yet).</p>
<p>I decided to be ambitious and aim for full rendering parity. So what did my little army of AI helpers do?</p>
<p>It converged on doing <em>visual diffs</em> out of random sampled pages: Take a locally rendered version, look at the public page, and generate an image that it can easily rate as &#8220;close&#8221; or &#8220;broken&#8221; by just counting the ratio of red pixels:</p>
<p/><figure><img alt="This is both brilliant and scary at the same time" src="https://taoofmac.com/media/notes/2026/04/12/1700/gQWQkx4YNonfUJ6IAAhi7dz6LUc=/visual-diff-comparison.png" width="1528" height="1382" style="max-width: 100% !important;height: auto !important;"/><figcaption>This is both brilliant and scary at the same time</figcaption></figure><p/>
<p>The process is greatly streamlined: sample 100 pages out of the nearly 10,000 we have now, render, batch compare, show me the worst ones, and then discuss and generalize the fixes (which is the only part the LLM is actively involved in). I could probably use <a href="https://github.com/karpathy/autoresearch?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;"><code>autoresearch</code></a> to automate this, but some of the fixes have to do with legacy rendering logic that no AI could ever figure out.</p>
<p>Still, this has converged very quickly to minor typography and spacing differences, and once I&#8217;m happy with the engine I&#8217;ll start looking at optimizing the actual blob uploading part&#8211;which I aim to standardize via <code>rclone</code> to remove my current dependency on <a href="/space/com/microsoft/azure" rel="next" style="color: #0000cc;">Azure</a> storage accounts, but greatly optimize with deltas.</p>
<a class="anchor" id="anchor-remember-ais-are-still-dumb" rel="anchor" href="/space/notes/2026/04/12/1700#remember-ais-are-still-dumb" style="color: #0000cc;"><h2 id="remember-ais-are-still-dumb">Remember, AIs Are Still Dumb</h2></a><p>It turns out that if you tell an AI that empty <code>catch</code> blocks are forbidden, the thing will just&#8230; go and add comments inside them, instead of doing something useful like a warning log message&#8230;</p>
<p>I&#8217;m now doing another code audit pass over the entire <a href="https://github.com/rcarmo/piclaw?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;"><code>piclaw</code></a> codebase, and this kind of mechanical fix is trivial to set up and do reliably with <a href="https://github.com/karpathy/autoresearch?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;"><code>autoresearch</code></a>:</p>
<p/><figure><img alt="An autoresearch session doing a code audit pass" src="https://taoofmac.com/media/notes/2026/04/12/1700/9iRdjZ89ILYVPuTFXlZ4v-SLkjo=/autoresearch-code-audit.png" width="1756" height="838" style="max-width: 100% !important;height: auto !important;"/><figcaption>An autoresearch session doing a code audit pass</figcaption></figure><p/>
<p>Now to see if I can get some reading and 3D printing done as well, since the whole point of using AI in the first place was to have more free time&#8230; right?</p>
<br/>
]]></content>
<category term="homelab" label="homelab" />
<category term="site" label="site" />
<category term="ai" label="ai" />
<category term="dev" label="dev" />
<category term="weekly" label="weekly" />
<category term="projects" label="projects" />
</entry>
<entry>
<title>Apple, Still</title>
<id>https://taoofmac.com/space/blog/2026/04/12/1330?utm_content=atom</id>
<published>2026-04-12T13:30:00+00:00</published>
<updated>2026-04-12T13:30:00+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/blog/2026/04/12/1330?utm_content=atom"/>
<content type="html"><![CDATA[
<p class="lead">I have been having feelings about <a href="/space/com/apple" rel="next" style="color: #0000cc;">Apple</a> lately. This blog may have drifted a fair way from its original focus on <a href="/space/com/apple/macos" rel="next" style="color: #0000cc;">macOS</a>, but I am still, first and foremost, an Apple user &#8211; just not an <em>exclusively</em> Apple user, and perhaps not even a particularly <em>obedient</em> one anymore, since I use both Windows and <a href="/space/os/linux" rel="next" style="color: #0000cc;">Linux</a> every day and have grown used to judging platforms by what they let me get done rather than by whatever story they are trying to tell about themselves.</p>
<p>That makes the current moment a little awkward. Apple is still extraordinarily good at making hardware I want to pick up and use, and still more coherent than most of the industry in the broad strokes, but it also feels increasingly prone to sanding off the wrong edges, reinventing the UX wheel, and constantly adding paper cuts to their software.</p>
<a class="anchor" id="anchor-the-iphone" rel="anchor" href="/space/blog/2026/04/12/1330#the-iphone" style="color: #0000cc;"><h2 id="the-iphone">The iPhone</h2></a><p>The <a href="/space/com/apple/iphone" rel="next" style="color: #0000cc;">iPhone</a> is probably the clearest example of that tension. It is still the phone I would rather carry, and the one whose hardware I trust most, but <a href="/space/com/apple/ios" rel="next" style="color: #0000cc;">iOS</a> has become steadily more fussy without becoming proportionally more capable.</p>
<p>A lot of it has been the constant UI friction and pointless balkanization of features like screen mirroring, which I would very much like to have &#8211; I see zero point in using Messages on my Mac or futzing around with Handoff and AirDrop when I could just, you know, pull up a window into my phone and type stuff in.</p>
<p>And I know Apple could indeed engineer a way to make those features DMA-compliant <em>if it really wanted to</em> &#8211; I suppose breaking the user experience across the board with Liquid Glass had enough priority to preempt allocating engineering resources to, you know, proper features.</p>
<p>Sharing things, moving files around, background activity, browser limitations, the endless little inconsistencies in system UI and the ungainly bloat in Settings &#8211; that friction accumulates. None of it is fatal on its own, but the aggregate effect is that the platform feels far less <em>light</em> than it used to, even while Apple keeps insisting that everything is becoming more seamless.</p>
<a class="anchor" id="anchor-where-the-cracks-show" rel="anchor" href="/space/blog/2026/04/12/1330#where-the-cracks-show" style="color: #0000cc;"><h2 id="where-the-cracks-show">Where The Cracks Show</h2></a><p>I&#8217;m going to say it outright: I found <a href="/space/notes/2025/09/15/2359" rel="next" style="color: #0000cc;">Liquid Glass</a> <em>insulting</em>. Not just visually, but also because it tells me that instead of fixing glaring gaps in things like automation (<a href="/space/apps/shortcuts" rel="next" style="color: #0000cc;">Shortcuts</a> is definitely not in good health, and <a href="/space/dev/applescript" rel="next" style="color: #0000cc;">AppleScript</a> is pretty much dead) that could actually have put Apple in the forefront of automation and AI (never mind the miserable failures in Siri and Apple Intelligence), someone at Apple actually decided breaking visual affordances took priority over stability and providing consistent application intents and hooks across the board.</p>
<p>Even then, <a href="/space/com/apple/macos" rel="next" style="color: #0000cc;">macOS</a> is in a better place than <a href="/space/com/apple/ios" rel="next" style="color: #0000cc;">iOS</a>, but mostly because it still retains enough of its older character to be workable. Remember, I can just <a href="/space/links/2026/03/27/2120" rel="next" style="color: #0000cc;">patch the visual inconsistencies away</a>.</p>
<p>There is still a proper filesystem, there is still a shell (even if Apple seems intent on breaking the userland in very small increments across releases), there are still enough escape hatches to route around bad decisions, and Apple Silicon has papered over a remarkable amount of software bloat simply by being absurdly fast and power-efficient.</p>
<p>But the cracks are visible there too. System Settings remains a mess, cross-platform application quality keeps declining, and the old Mac assumption &#8211; that a user might actually want to understand how their machine works &#8211; seems to matter less every year. Meanwhile <a href="/space/com/apple/ios" rel="next" style="color: #0000cc;">iOS</a> keeps borrowing bits of the Mac&#8217;s vocabulary without acquiring the Mac&#8217;s actual flexibility, which leaves both platforms feeling oddly misaligned.</p>
<a class="anchor" id="anchor-the-ipad" rel="anchor" href="/space/blog/2026/04/12/1330#the-ipad" style="color: #0000cc;"><h2 id="the-ipad">The iPad</h2></a><p>The <a href="/space/com/apple/ipad" rel="next" style="color: #0000cc;">iPad</a> remains the device I most <em>want</em> to use more than I actually do. I may pick one up every morning to read the news and get drafts started, but <a href="/space/blog/2026/03/15/1430" rel="next" style="color: #0000cc;">the Neo nullifies any interest I might still have in upgrading my iPad Pro</a>. The hardware is excellent, the battery life is still absurd, the pencil is useful, and for reading, sketching, note-taking and casual browsing it remains hard to beat. Fine.</p>
<p>But every time I try to push it into being a serious general-purpose computer, it reminds me that Apple still has not decided what it wants the <a href="/space/com/apple/ipad" rel="next" style="color: #0000cc;">iPad</a> to be. It can approximate a laptop for stretches at a time &#8211; and sometimes very convincingly &#8211; but the moment you need proper peripheral support, predictable file handling or sustained tool switching, the abstraction turns into safety glass &#8211; and I&#8217;m back to my long-held opinion that the only good iPad is the iPad mini.</p>
<p>That&#8217;s what I intend to upgrade this year, even if Apple comes out with a decent foldable <a href="/space/com/apple/iphone" rel="next" style="color: #0000cc;">iPhone</a> (and, by the way, I really like the &#8220;leaked&#8221; form factor, because phones have become stupidly tall and unwieldy).</p>
<a class="anchor" id="anchor-fedora-oddly-enough" rel="anchor" href="/space/blog/2026/04/12/1330#fedora-oddly-enough" style="color: #0000cc;"><h2 id="fedora-oddly-enough">Fedora, Oddly Enough</h2></a><p>And this is where <a href="/space/os/linux/distributions/fedora" rel="next" style="color: #0000cc;">Fedora</a> comes in, because it has become my most useful point of comparison. <a href="/space/os/linux" rel="next" style="color: #0000cc;">Linux</a> on the desktop is still Linux on the desktop &#8211; gloriously inconsistent, occasionally infuriating, and always willing to expose its plumbing at the worst possible moment &#8211; but my experience <a href="/space/blog/2022/04/02/2130" rel="next" style="color: #0000cc;">over the past few years</a> is very conclusive: <a href="/space/os/linux/distributions/fedora" rel="next" style="color: #0000cc;">Fedora</a> has reached a point where, for a lot of everyday work, it is simply easier to <em>reason about</em> than either macOS or iOS.</p>
<p>That does not make it better in every respect. It is not. But it does mean that a lot of the breakage in Apple software now has a reference point, and even considering I was always a UNIX user and deeply technical, the creature comforts that Linux now provides give me <em>a lot more</em> confidence than Apple&#8217;s software.</p>
<p>If Qualcomm wasn&#8217;t so obtuse about only supporting Windows and ARM laptops were more open, things would be very interesting indeed.</p>
<a class="anchor" id="anchor-still-an-apple-user" rel="anchor" href="/space/blog/2026/04/12/1330#still-an-apple-user" style="color: #0000cc;"><h2 id="still-an-apple-user">Still an Apple User</h2></a><p>I still like the hardware, still prefer the overall ecosystem in a number of places, and still find myself evaluating a lot of the rest of the industry by standards <a href="/space/com/apple" rel="next" style="color: #0000cc;">Apple</a> set years ago.</p>
<p>But I also think it is getting harder to ignore how much of the original appeal has been traded away due to sheer mismanagement of software QA and Apple&#8217;s refusal to acknowledge the gaps across <a href="/space/com/apple/ipad" rel="next" style="color: #0000cc;">iPad</a>, <a href="/space/com/apple/macos" rel="next" style="color: #0000cc;">macOS</a> core applications, and a consistent user experience.</p>
<p>Come on, Tim, get your people in line.</p>
<br/>
]]></content>
<category term="ipad" label="ipad" />
<category term="fedora" label="fedora" />
<category term="macos" label="macos" />
<category term="linux" label="linux" />
<category term="iphone" label="iphone" />
<category term="apple" label="apple" />
<category term="ios" label="ios" />
</entry>
<entry>
<title>Emulation</title>
<id>https://taoofmac.com/space/emulation?utm_content=atom</id>
<published>2005-06-09T09:38:12+00:00</published>
<updated>2026-04-15T07:48:42+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/emulation?utm_content=atom"/>
<content type="html"><![CDATA[
<p class="lead">Emulation and hardware virtualization software of various descriptions, most of them obsolete by now:</p>
<p/><div class="message error" role="alert">
    <p><b>Error:</b> Could not parse 'table.yaml'</p>
<pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;">while parsing a block mapping
  in "&lt;byte string&gt;", line 2, column 1
did not find expected key
  in "&lt;byte string&gt;", line 421, column 1
</pre>
</div>
<br/>
]]></content>
</entry>
<entry>
<title>The Orange Pi 6 Plus</title>
<id>https://taoofmac.com/space/reviews/2026/04/11/1900?utm_content=atom</id>
<published>2026-04-11T19:00:00+00:00</published>
<updated>2026-04-15T06:13:27+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/reviews/2026/04/11/1900?utm_content=atom"/>
<content type="html"><![CDATA[
<p class="lead">This was a long one&#8211;I spent a fair bit of time with the <a href="http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-6-Plus.html?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Orange Pi 6 Plus</a> over the past few months, and what I expected to be a quick look at another fast ARM board turned into one of those test runs where the hardware looks promising on paper, the software is wonky in exactly the wrong places, and you end up diving far more into boot chains, vendor GPU blobs and inference runtimes than you ever intended.</p>
<p/><figure><img alt="The Orange Pi 6+ on a corner of my desk" src="https://taoofmac.com/media/reviews/2026/04/11/1900/gXPeL88wnWdIRTzHXp4uBm8vFnU=/hero.jpg" width="2048" height="1152" style="max-width: 100% !important;height: auto !important;"/><figcaption>The Orange Pi 6+ on a corner of my desk</figcaption></figure><p/>
<p>Unlike most of the ARM boards I&#8217;ve reviewed until now, this one is not an RK3588 board: The Orange Pi 6 Plus uses the CIX P1 (CD8180/CD8160), with 12 CPU cores, a Mali G720 GPU, a dedicated NPU and a wild set of specs for the form factor. Boards like this promise <em>everything</em> at once&#8211;homelab, edge AI, dual 5GbE, low power&#8211;but they only matter if the software gets out of the way.</p>
<blockquote>
<p><strong>Disclaimer:</strong> <a href="http://www.orangepi.org/?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Orange Pi</a> supplied me with a 6 Plus free of charge, and, as usual, this article follows my <a href="/space/site/review_policy" rel="next" style="color: #0000cc;">review policy</a>.</p>
</blockquote>
<p>And, for a change, I decided to make sure the software did exactly that, and made it my concern from the start&#8211;i.e., I built my own OS images for it (a fork of <a href="https://github.com/rcarmo/orangepi-build?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">orangepi-build</a>) and went in a bit deeper than usual, spending around two months taking notes, benchmark logs and even Graphite telemetry as I went along.</p>
<a class="anchor" id="anchor-hardware" rel="anchor" href="/space/reviews/2026/04/11/1900#hardware" style="color: #0000cc;"><h2 id="hardware">Hardware</h2></a><figure>
<img src="https://taoofmac.com/media/reviews/2026/04/11/1900/vjczoQBD8Mrlv6B85PhVapmLMPg=/orangepi-6-plus-top-view.png" alt="The Orange Pi 6 Plus, top view" width="629" height="539" style="max-width: 100% !important;height: auto !important;"/>
<figcaption>The Orange Pi 6 Plus board (image: Orange Pi)</figcaption>
</figure>

<p>One of the reasons I wanted to test this board is that the SoC is the <a href="https://www.cixtech.com/p1?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">CIX P1</a>, which <a href="http://www.orangepi.org/?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Orange Pi</a> bills as a 12-core part with a combined 45 TOPS across CPU, GPU and NPU. The machine I tested came with:</p>
<ul>
<li>CIX P1 (CD8180/CD8160), 4&#215;Cortex-A520 plus 8&#215;Cortex-A720 cores</li>
<li>16GiB of RAM (roughly 14GiB visible to Linux)</li>
<li>dual Realtek RTL8126 5GbE</li>
<li>Realtek RTL8852BE Wi-Fi and Bluetooth card</li>
<li>Mali G720 / Immortalis-class GPU</li>
<li>A three-core Zhouyi NPU</li>
</ul>
<p>And if you&#8217;ve been paying attention to all my homelab testing, those two 5GbE ports alone make this more interesting than most hobbyist SBCs. But, of course, there is a lot more to expandability than that:</p>
<figure>
<img src="https://taoofmac.com/media/reviews/2026/04/11/1900/fy7-Rax4QttYcY4lg_dk8OVAy2c=/orangepi-6-plus-board-layout.png" alt="Orange Pi 6 Plus annotated board layout" width="1800" height="1570" style="max-width: 100% !important;height: auto !important;"/>
<figcaption>Annotated board layout showing ports, headers and key components (image: Orange Pi)</figcaption>
</figure>

<a class="anchor" id="anchor-hardware-info" rel="anchor" href="/space/reviews/2026/04/11/1900#hardware-info" style="color: #0000cc;"><h3 id="hardware-info">Hardware Info</h3></a><p>The CPU is interesting in itself&#8211;the fastest A720 cluster reaches about 2.6GHz, the A520s top out around 1.8GHz, so like many other big.LITTLE ARM architectures you get asymmetric clusters rather than a uniform twelve-core machine:</p>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><code>Architecture:<span class="w">                         </span>aarch64
CPU<span class="w"> </span>op-mode<span class="o">(</span>s<span class="o">)</span>:<span class="w">                       </span><span class="m">64</span>-bit
Byte<span class="w"> </span>Order:<span class="w">                           </span>Little<span class="w"> </span>Endian
CPU<span class="o">(</span>s<span class="o">)</span>:<span class="w">                               </span><span class="m">12</span>
On-line<span class="w"> </span>CPU<span class="o">(</span>s<span class="o">)</span><span class="w"> </span>list:<span class="w">                  </span><span class="m">0</span>-11
Vendor<span class="w"> </span>ID:<span class="w">                            </span>ARM
Model<span class="w"> </span>name:<span class="w">                           </span>Cortex-A520
Core<span class="o">(</span>s<span class="o">)</span><span class="w"> </span>per<span class="w"> </span>socket:<span class="w">                   </span><span class="m">4</span>
CPU<span class="w"> </span>max<span class="w"> </span>MHz:<span class="w">                          </span><span class="m">1799</span>.9980
CPU<span class="w"> </span>min<span class="w"> </span>MHz:<span class="w">                          </span><span class="m">799</span>.9990
...
Model<span class="w"> </span>name:<span class="w">                           </span>Cortex-A720
Core<span class="o">(</span>s<span class="o">)</span><span class="w"> </span>per<span class="w"> </span>socket:<span class="w">                   </span><span class="m">8</span>
CPU<span class="w"> </span>max<span class="w"> </span>MHz:<span class="w">                          </span><span class="m">2600</span>.1980
CPU<span class="w"> </span>min<span class="w"> </span>MHz:<span class="w">                          </span><span class="m">799</span>.8400
</code></pre></div>

<p><code>lspci</code> is a bit more revealing, especially because you get to see where the dual 5GbE setup and Wi-Fi controller are placed&#8211;each seems to get its own PCI bridge:</p>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><code><span class="m">0000</span>:60:00.0<span class="w"> </span>PCI<span class="w"> </span>bridge:<span class="w"> </span>CIX<span class="w"> </span>Technology<span class="w"> </span>Group<span class="w"> </span>Co.,<span class="w"> </span>Ltd.<span class="w"> </span>CIX<span class="w"> </span>P1<span class="w"> </span>CD8180<span class="w"> </span>PCI<span class="w"> </span>Express<span class="w"> </span>Root<span class="w"> </span>Port
<span class="m">0000</span>:61:00.0<span class="w"> </span>Ethernet<span class="w"> </span>controller:<span class="w"> </span>Realtek<span class="w"> </span>Semiconductor<span class="w"> </span>Co.,<span class="w"> </span>Ltd.<span class="w"> </span>RTL8126<span class="w"> </span>5GbE<span class="w"> </span>Controller
<span class="m">0001</span>:30:00.0<span class="w"> </span>PCI<span class="w"> </span>bridge:<span class="w"> </span>CIX<span class="w"> </span>Technology<span class="w"> </span>Group<span class="w"> </span>Co.,<span class="w"> </span>Ltd.<span class="w"> </span>CIX<span class="w"> </span>P1<span class="w"> </span>CD8180<span class="w"> </span>PCI<span class="w"> </span>Express<span class="w"> </span>Root<span class="w"> </span>Port
<span class="m">0001</span>:31:00.0<span class="w"> </span>Ethernet<span class="w"> </span>controller:<span class="w"> </span>Realtek<span class="w"> </span>Semiconductor<span class="w"> </span>Co.,<span class="w"> </span>Ltd.<span class="w"> </span>RTL8126<span class="w"> </span>5GbE<span class="w"> </span>Controller
<span class="m">0002</span>:00:00.0<span class="w"> </span>PCI<span class="w"> </span>bridge:<span class="w"> </span>CIX<span class="w"> </span>Technology<span class="w"> </span>Group<span class="w"> </span>Co.,<span class="w"> </span>Ltd.<span class="w"> </span>CIX<span class="w"> </span>P1<span class="w"> </span>CD8180<span class="w"> </span>PCI<span class="w"> </span>Express<span class="w"> </span>Root<span class="w"> </span>Port
<span class="m">0002</span>:01:00.0<span class="w"> </span>Network<span class="w"> </span>controller:<span class="w"> </span>Realtek<span class="w"> </span>Semiconductor<span class="w"> </span>Co.,<span class="w"> </span>Ltd.<span class="w"> </span>RTL8852BE<span class="w"> </span>PCIe<span class="w"> </span><span class="m">802</span>.11ax<span class="w"> </span>Wireless<span class="w"> </span>Network<span class="w"> </span>Controller
</code></pre></div>

<p>In the same way, the USB bus is entirely ordinary (this is with it plugged into one of my KVMs):</p>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><code>Bus<span class="w"> </span><span class="m">007</span><span class="w"> </span>Device<span class="w"> </span><span class="m">002</span>:<span class="w"> </span>ID<span class="w"> </span>05e3:0610<span class="w"> </span>Genesys<span class="w"> </span>Logic,<span class="w"> </span>Inc.<span class="w"> </span>Hub
Bus<span class="w"> </span><span class="m">007</span><span class="w"> </span>Device<span class="w"> </span><span class="m">005</span>:<span class="w"> </span>ID<span class="w"> </span>04d9:0006<span class="w"> </span>Holtek<span class="w"> </span>Semiconductor,<span class="w"> </span>Inc.<span class="w"> </span>Wired<span class="w"> </span>Keyboard<span class="w"> </span><span class="o">(</span><span class="m">78</span>/79<span class="w"> </span>key<span class="o">)</span><span class="w"> </span><span class="o">[</span>RPI<span class="w"> </span>Wired<span class="w"> </span>Keyboard<span class="w"> </span><span class="m">5</span><span class="o">]</span>
Bus<span class="w"> </span><span class="m">007</span><span class="w"> </span>Device<span class="w"> </span><span class="m">006</span>:<span class="w"> </span>ID<span class="w"> </span>093a:2510<span class="w"> </span>Pixart<span class="w"> </span>Imaging,<span class="w"> </span>Inc.<span class="w"> </span>Optical<span class="w"> </span>Mouse
Bus<span class="w"> </span><span class="m">011</span><span class="w"> </span>Device<span class="w"> </span><span class="m">002</span>:<span class="w"> </span>ID<span class="w"> </span>05e3:0761<span class="w"> </span>Genesys<span class="w"> </span>Logic,<span class="w"> </span>Inc.<span class="w"> </span>Genesys<span class="w"> </span>Mass<span class="w"> </span>Storage<span class="w"> </span>Device
Bus<span class="w"> </span><span class="m">012</span><span class="w"> </span>Device<span class="w"> </span><span class="m">002</span>:<span class="w"> </span>ID<span class="w"> </span>0bda:b85b<span class="w"> </span>Realtek<span class="w"> </span>Semiconductor<span class="w"> </span>Corp.<span class="w"> </span>Bluetooth<span class="w"> </span>Radio
</code></pre></div>

<p>Nothing exotic, which I rather like. And, by the way, the board ships with Cix Technology Group UEFI, version 1.3, so setting up boot devices and managing (very) basic settings was trivial.</p>
<a class="anchor" id="anchor-building-the-image" rel="anchor" href="/space/reviews/2026/04/11/1900#building-the-image" style="color: #0000cc;"><h2 id="building-the-image">Building the Image</h2></a><p>This is where I took a very large detour from my usual approach: I decided early on that I wasn&#8217;t going to use a vendor image for this board.</p>
<p>Vendor images for SBCs like this always tend to be good enough to boot, occasionally good enough to do basic benchmarks, and almost never something I want to build on&#8211;especially if I&#8217;m doing local AI work, host-native services, or anything that requires me to trust package sources, first-boot behaviour and upgrade paths.</p>
<p>I wanted a server-first layout, reproducible fixes and a place to bake in GPU/NPU prerequisites, so I forked <a href="https://github.com/rcarmo/orangepi-build?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;"><code>orangepi-build</code></a> and started from there, with a fairly high bar:</p>
<ul>
<li>I wanted a fully reproducible Debian 13 / Trixie build with features like <code>/dev/kvm</code> present, not a vendor image with stale software and missing features I wanted.</li>
<li>The build needed to stop treating Ubuntu as the only real target&#8211;<code>add-apt-repository</code>, PPA logic and <code>software-properties-common</code> had to be cleaned out.</li>
<li>Boot fixes had to be baked in from the start, not applied as post-flash rituals.</li>
<li>First boot had to be deterministic. If the root filesystem resize requires me nearby with serial and patience, the image isn&#8217;t finished.</li>
<li>I needed a clean place to stage GPU firmware, vendor userspace and NPU packages.</li>
</ul>
<p>The Orange Pi repository included kernel 6.6.89-cix, so a lot of the above was already &#8220;there&#8221;&#8211;I just needed to hack at it, but instead of doing it entirely by hand I got <a href="https://github.com/rcarmo/piclaw?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;"><code>piclaw</code></a> to set things up on an Ubuntu 22.04 VM.</p>
<p>Over a few weeks (this took a while), the above list translated into a fairly concrete set of changes in the build tree:</p>
<ul>
<li>added Trixie configs under <code>external/config/{cli,desktop,distributions}/trixie</code></li>
<li>patched <code>scripts/distributions.sh</code> for Debian 13 support</li>
<li>fixed the board config to allow <code>trixie</code> under <code>DISTRIB_TYPE_NEXT</code></li>
<li>removed Ubuntu-only dependencies from the package lists</li>
<li>forced standard Debian mirrors</li>
<li>made the kernel build non-interactive</li>
<li>started baking in GPU/NPU prerequisites and development tooling for later testing</li>
</ul>
<p>The package side needed archaeological work too. I patched <code>orangepi-config</code> to stop behaving as though it were on Ubuntu, removed <code>software-properties-common</code> from the Trixie dependency chain, forced regeneration of cached packages, and went hunting through <code>component_cix-next</code> for whatever vendor bits still existed and matched my kernel, taking notes throughout.</p>
<a class="anchor" id="anchor-getting-to-first-boot" rel="anchor" href="/space/reviews/2026/04/11/1900#getting-to-first-boot" style="color: #0000cc;"><h3 id="getting-to-first-boot">Getting To First Boot</h3></a><p>My first boot-related note on this board was short: I flashed my custom Trixie image, got as far as GRUB, and it fell over because the EFI stub was wrong. The image <em>did</em> contain the right DTBs (<code>SKY1-ORANGEPI-6-PLUS.DTB</code> and friends), but the build scripts somehow commented out useful menu entries and the default pointed at the ACPI path.</p>
<p>But getting past GRUB was only half the battle. The first <em>real</em> boot surfaced another annoying issue: the partition resize worked, the root filesystem resize didn&#8217;t, and the machine failed to reboot cleanly at the handoff. I had <a href="https://github.com/rcarmo/piclaw?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;"><code>piclaw</code></a> trace the resize helper, found it was disabling itself <em>before</em> the second stage could run, and patched that too.</p>
<p>The whole thing made for a pretty intensive couple of weeks:
</p><figure><img alt="Build and fix timeline" src="https://taoofmac.com/media/reviews/2026/04/11/1900/u_abn1H59LOA4E65QXaCm1JA9a0=/orangepi-build-timeline.svg" style="max-width: 100% !important;height: auto !important;"/><figcaption>Build and fix timeline</figcaption></figure><p/>
<p>In parallel, I made sure to include GPU/NPU support:</p>
<ul>
<li>firmware symlink so <code>panthor</code> could find <code>mali_csffw.bin</code></li>
<li>baked in <code>cix-noe-umd</code> and <code>cix-npu-onnxruntime</code></li>
<li>and a big pile of dev tooling so the board could bootstrap AI experiments without turning into a scavenger hunt</li>
</ul>
<a class="anchor" id="anchor-nvme-and-swap" rel="anchor" href="/space/reviews/2026/04/11/1900#nvme-and-swap" style="color: #0000cc;"><h2 id="nvme-and-swap">NVMe and Swap</h2></a><p>Once the image was booting reliably, I wanted the board off SD entirely. I had a 512GB NVMe drive sitting about, so I had <a href="https://github.com/rcarmo/piclaw?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;"><code>piclaw</code></a> handle the migration&#8211;even though it had just finished patching <code>orangepi-config</code>, the actual cutover was done manually: partition the NVMe into EFI, root and swap, <code>rsync</code> everything across, patch <code>GRUB.CFG</code> to point at the new PARTUUID, reboot, verify, remove the SD card.</p>
<p/><figure><img alt="Storage migration: SD to NVMe" src="https://taoofmac.com/media/reviews/2026/04/11/1900/eoIkm08pQpSscYxOllH11lTdQ3Q=/orangepi-storage-migration.svg" style="max-width: 100% !important;height: auto !important;"/><figcaption>Storage migration: SD to NVMe</figcaption></figure><p/>
<a class="anchor" id="anchor-software" rel="anchor" href="/space/reviews/2026/04/11/1900#software" style="color: #0000cc;"><h3 id="software">Software</h3></a><p>So, to recap, I had to fix these things for my custom image:</p>
<ul>
<li>Boot chain: initially broken because GRUB defaulted to the wrong path; stable once DTB boot was forced</li>
<li>GPU / Vulkan: initially <code>llvmpipe</code> fallback or panvk failure; working with vendor Vulkan ICD on <code>mali_kbase</code></li>
<li>OpenCL: not useful at first, functional once the vendor userspace was in place</li>
<li>NPU kernel side: visible from the beginning, probe messages reporting three cores</li>
<li>NPU userspace: present only in fragments, inconsistent package references, a lot of manual validation needed</li>
</ul>
<p>But after the first few steps were done, I had zero issues installing or building software on this&#8211;GCC 14.2 from Trixie, Bun as the primary scripting runtime, and the usual complement of build-essential, cmake, clang and ninja for C/C++ projects.</p>
<p>Python 3 and <code>pip</code> are present for the inevitable bits that still need them, and Docker runs cleanly, plus I made sure I had <code>/dev/kvm</code> available for virtualised workloads&#8211;and with the CIX patches for the P1 SoC, everything went swimmingly. The kernel is PREEMPT-enabled, which is pleasant for interactive work and inference latency, though I haven&#8217;t tested RT workloads.</p>
<p>I even got <a href="/space/os/linux/distributions/proxmox" rel="next" style="color: #0000cc;">Proxmox</a> to run reliably on this with zero issues (including creating ARM VMs on it) before wiping the NVMe to do some AI testing.</p>
<p>The one area where the software story gets awkward is the vendor-specific GPU and NPU userspace&#8211;covered in the next two sections. Everything <em>else</em> about running Debian on this board is unremarkable, which is a compliment.</p>
<a class="anchor" id="anchor-gpu" rel="anchor" href="/space/reviews/2026/04/11/1900#gpu" style="color: #0000cc;"><h2 id="gpu">GPU</h2></a><p>Out of the box, the Linux graphics story was absent. The kernel side was in a half-state that looked superficially encouraging&#8211;<code>/dev/dri/*</code> present, both <code>panthor</code> and <code>mali_kbase</code> around, the system clearly aware of a Mali GPU, etc.</p>
<p>But Vulkan fell back to <code>llvmpipe</code>, and forcing the Mesa Panfrost ICD produced <code>Unknown gpu_id (0xc870)</code> errors. So I had <a href="https://github.com/rcarmo/piclaw?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;"><code>piclaw</code></a> go through the Orange Pi and <code>component_cix-next</code> package sources and find the missing pieces: vendor userspace for the CIX stack&#8211;<code>cix-gpu-umd</code>, <code>cix-libglvnd</code>, <code>cix-libdrm</code>, <code>cix-mesa</code> and a Vulkan ICD pointing at <code>libmali.so</code>.</p>
<p>Installing those got me partway&#8211;the userspace reported <code>No mali devices found</code>, because the board was still on the wrong kernel path. Once I rebound the GPU from <code>panthor</code> to the vendor <code>mali</code>/<code>mali_kbase</code> stack, <code>/dev/mali0</code> appeared and Vulkan reported actual hardware:</p>
<ul>
<li><code>deviceName = Mali-G720-Immortalis</code></li>
<li><code>driverID = DRIVER_ID_ARM_PROPRIETARY</code></li>
</ul>
<p>OpenCL also came up correctly afterwards, again via the vendor path.</p>
<p>This was pretty good news as far as typical SBC testing goes, since it means you can get decent (if vendor-specific) GPU support working&#8211;but getting there involved driver rebinding, vendor package archaeology and a persistent module policy to keep the machine on the right stack across reboots.</p>
<p/><figure><img alt="GPU driver stack: open path vs vendor path" src="https://taoofmac.com/media/reviews/2026/04/11/1900/ZWLbiXXaOV5BUAb8de0ulpCz7Ok=/orangepi-gpu-stack.svg" style="max-width: 100% !important;height: auto !important;"/><figcaption>GPU driver stack: open path vs vendor path</figcaption></figure><p/>
<a class="anchor" id="anchor-npu" rel="anchor" href="/space/reviews/2026/04/11/1900#npu" style="color: #0000cc;"><h2 id="npu">NPU</h2></a><p>The NPU story was, if anything, even more typical of this class of hardware.</p>
<p>Linux clearly knew there was an NPU&#8211;<code>dmesg</code> reported three cores during probe&#8211;but the userspace was absent or incomplete and the package references inconsistent enough that I had to validate URLs by hand. One package version was simply gone, another worked, and I only reached a coherent install because <code>component_cix-next</code> still had enough usable artifacts lying about.</p>
<p>Not to say the NPU is fake or useless&#8211;it isn&#8217;t. But the tooling has that familiar feeling of being assembled by several teams who weren&#8217;t speaking to each other as often as they ought&#8211;and if your interest in a board like this is local AI, that matters more than any TOPS figure on a product page.</p>
<p/><figure><img alt="NPU stack status" src="https://taoofmac.com/media/reviews/2026/04/11/1900/Cowf8a--Fc8lxjuY13FuBu7U9s0=/orangepi-npu-status.svg" style="max-width: 100% !important;height: auto !important;"/><figcaption>NPU stack status</figcaption></figure><p/>
<a class="anchor" id="anchor-performance" rel="anchor" href="/space/reviews/2026/04/11/1900#performance" style="color: #0000cc;"><h2 id="performance">Performance</h2></a><p>This is where the board started being interesting.</p>
<p>Since I have been getting more and more involved in low level AI work, I spent most of my time testing local inference&#8211;the Orange Pi 6 Plus is not a universally good AI box, but it <em>is</em> surprisingly usable within a narrow envelope of models and runtimes.</p>
<p>And to make it usable for a few use cases, I needed a model-and-runtime combination that felt like an actual working stack rather than a demo. I ended up trying four inference runtimes&#8211;[PowerInfer], [<code>ik_llama</code>][ikl] (which is a CPU-optimized version of <code>llama.cpp</code>), vanilla <code>llama.cpp</code>, and my own Vulkan-patched version of <code>llama.cpp</code> that for the Orange Pi 6 Plus&#8217;s GPU (the NPU, alas, like many other ARM SoC NPUs, is designed more for vision processing than LLM work, and I spent a few evenings trying).</p>
<p>I ended up running well over a dozen different combinations of models and runtimes, and these five were the ones I invested the most time in, since I wanted a model that was powerful enough for &#8220;production&#8221; use even if it was a little slow in practice:</p>
<p/><figure><img alt="Inference performance by model and runtime|669" src="https://taoofmac.com/media/reviews/2026/04/11/1900/mWH3oMXfwIFJEf1Wp-Rn49kxYUg=/orangepi-inference-chart.svg" style="max-width: 100% !important;height: auto !important;"/><figcaption>Inference performance by model and runtime|669</figcaption></figure><p/>
<p>The dark bars are generation speed, the lighter bars are prompt processing. The verdicts on the right reflect what happened when I pushed each model through a real agent pipeline with tool calls, not just a short benchmark prompt&#8211;and that is where the gap between &#8220;fast on paper&#8221; and &#8220;actually works&#8221; showed up.</p>
<p>The Liquid models posted impressive raw tok/s figures but broke down in practice with blank responses and formatting failures. The 35B sparse model was surprisingly fast under <code>ik_llama.cpp</code> but ate all available RAM and failed roughly 40% of the time.</p>
<p>Only the Qwen 4B on Vulkan held up as something I would actually leave running and the best all-round result was <code>Qwen3.5 4B Q4_K_M</code> on Vulkan:</p>
<table style="background: transparent;margin: 0px;padding: 0px;border-collapse: collapse;font-size: 90%;">
<thead>
<tr style="border-top: 1px solid #aaa;">
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Metric</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Value</th>
</tr>
</thead>
<tbody style="border-top: 2px solid black;border-bottom: 2px solid black;">
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Runtime</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><code>llama.cpp</code> Vulkan</td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Prompt t/s</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><code>8.4</code></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Generation t/s</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><code>9.7</code></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Typical response time</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><code>6-25s</code></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">RSS</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><code>~5.3GB</code></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Stability</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><code>10/10</code> pass at <code>-ub 8</code></td>
</tr>
</tbody>
</table>
<p><br/></p>
<p>Not desktop-GPU territory, but enough to move the board from &#8220;cute&#8221; to &#8220;useful&#8221;. More importantly, it was stable&#8211;it followed my coding assistant&#8217;s <code>AGENTS.md</code> prompt correctly, handled tool calls, and didn&#8217;t chew through all available memory.</p>
<p>The production configuration I eventually settled on was:</p>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><code>llama.cpp<span class="w"> </span>-m<span class="w"> </span>qwen3.5-4b-q4_k_m.bin<span class="w"> </span><span class="se">\</span>
<span class="w">  </span>-c<span class="w"> </span><span class="m">32768</span><span class="w"> </span><span class="se">\</span>
<span class="w">  </span>-ngl<span class="w"> </span><span class="m">99</span><span class="w"> </span><span class="se">\</span>
<span class="w">  </span>-ub<span class="w"> </span><span class="m">8</span><span class="w"> </span><span class="se">\</span>
<span class="w">  </span>-np<span class="w"> </span><span class="m">1</span><span class="w"> </span><span class="se">\</span>
<span class="w">  </span>--reasoning-budget<span class="w"> </span><span class="m">0</span><span class="w"> </span><span class="se">\</span>
<span class="w">  </span>--jinja<span class="w"> </span><span class="se">\</span>
<span class="w">  </span>--cache-ram<span class="w"> </span><span class="m">0</span>
</code></pre></div>

<p>Every flag has a story&#8211;especially (<code>-ub</code>), the micro-batch size, which controls how many tokens <code>llama.cpp</code> tries to process per Vulkan dispatch.</p>
<p>It turns out that the Mali Vulkan backend had a descriptor-set exhaustion issue that needed patching upstream before it stopped crashing (yes, I spent a while debugging Vulkan&#8230;), and I ran a set of benchmarks specifically for that:</p>
<p/><figure><img alt="Vulkan micro-batch tuning sweep|695" src="https://taoofmac.com/media/reviews/2026/04/11/1900/ER_dnvuSeXsmjHlBF_BzWIh_9go=/orangepi-ub-sweep-chart.svg" style="max-width: 100% !important;height: auto !important;"/><figcaption>Vulkan micro-batch tuning sweep|695</figcaption></figure><p/>
<p>Bigger batches should mean better GPU utilisation and faster prompt ingestion, but the Mali G720&#8217;s Vulkan driver has a hard limit on descriptor sets&#8211;exceed it and the backend either crashes or silently degrades.</p>
<p>The green bars are stable configurations, the orange ones are not&#8211;and the dashed box marks where I landed for production. At <code>-ub 16</code>, prompt speed <em>collapsed</em> because the driver was already struggling; at <code>64+</code> it fell over entirely.</p>
<p>The tuning sweep showed where the practical ceiling was rather than the theoretical one:</p>
<ul>
<li>At <code>-ub 2</code>, the setup was stable but underwhelming: about <code>4.3</code> prompt tok/s and <code>9.7</code> generation tok/s.</li>
<li>At <code>-ub 4</code>, prompt speed improved to <code>5.9</code> tok/s with the same <code>9.7</code> generation rate.</li>
<li>At <code>-ub 8</code>, which is where I eventually landed, prompt speed climbed to <code>8.4</code> tok/s and generation stayed at <code>9.7</code> tok/s.</li>
<li>At <code>-ub 16</code>, the whole thing became temperamental and prompt throughput actually collapsed to around <code>2.0</code> tok/s.</li>
<li>At <code>-ub 32</code>, it could survive a test run, but not in a way that inspired confidence.</li>
<li>At <code>64+</code>, it was simply crashy.</li>
</ul>
<p>So the practical production setting was not some elegant theoretical optimum&#8211;it was simply the highest value that stopped the Vulkan backend from crashing. That, in a sentence, sums up a fair bit of the experience of using this board.</p>
<a class="anchor" id="anchor-runtime-rankings" rel="anchor" href="/space/reviews/2026/04/11/1900#runtime-rankings" style="color: #0000cc;"><h3 id="runtime-rankings">Runtime Rankings</h3></a><p>The runtime matters almost as much as the model:</p>
<ul>
<li><code>llama.cpp</code> on Vulkan was the best all-round practical setup, but only after patching and tuning.</li>
<li><code>llama.cpp</code> on CPU was useful as a baseline and for sanity checks, but too slow once model size started to climb.</li>
<li><code>ik_llama.cpp</code> on CPU turned out to be dramatically better for some 2-bit and sparse-ish workloads than I had expected, to the point where it occasionally made GPU offload look silly.</li>
<li>[PowerInfer] remained interesting mostly in theory; in practice it was too awkward and too far behind the other options to matter.</li>
</ul>
<p>GPU offload was not always the right answer. A lot of the marketing gravity around boards like this points you toward the GPU or NPU as the only interesting path, but once you start timing things, the answer is much more conditional.</p>
<p><code>Qwen3.5 35B-A3B IQ2_XXS</code> was instructive. Under stock <code>llama.cpp</code>, far too slow. Under <code>ik_llama.cpp</code>, dramatically faster on CPU&#8211;to the point where it occasionally behaved like a real system rather than a cry for help. But it had a roughly 40% empty-response rate, consumed nearly all RAM and swap, and was slow enough end-to-end that I would only call it &#8220;working&#8221; in the same tone one might describe a vintage British car that has just completed a short journey without shedding visible parts.</p>
<p>For that model, the runtime comparison was actually rather stark:</p>
<ul>
<li>Upstream <code>llama.cpp</code> on pure CPU (<code>-ngl 0</code>) managed about <code>0.63</code> prompt tok/s, <code>1.07</code> generation tok/s and took <code>76.67s</code> end to end.</li>
<li>Upstream <code>llama.cpp</code> with a token amount of offload (<code>-ngl 8</code>) was, if anything, slightly worse at <code>80.03s</code> total.</li>
<li><code>ik_llama.cpp</code> on CPU was the surprise winner by a ridiculous margin: <code>16.24</code> prompt tok/s, <code>5.24</code> generation tok/s and <code>12.75s</code> total.</li>
<li><code>ik_llama.cpp</code> with <code>-ngl 8</code> promptly ruined that advantage and fell back to a miserable <code>71.33s</code> total.</li>
</ul>
<a class="anchor" id="anchor-model-rankings" rel="anchor" href="/space/reviews/2026/04/11/1900#model-rankings" style="color: #0000cc;"><h3 id="model-rankings">Model Rankings</h3></a><p>That is one of the more useful things I learned here: for some quantized models on this machine, CPU inference with the right runtime was not just competitive with GPU offload, it was <em>much</em> better.</p>
<p>The Liquid models were interesting for a different reason. <code>LFM2 8B-A1B Q4_K_M</code> managed roughly 46.7 tok/s prompt and ~32 tok/s generation on Vulkan&#8211;objectively impressive for the active parameter count&#8211;and <code>LFM2.5 1.2B</code> pushed generation to around 45 tok/s. On paper, these look like the hidden sweet spot. In practice both failed when pushed through the full agent pipeline: blank output, formatting failures, over-eager obedience to internal conventions. Useful to know, but not deployable.</p>
<p>For reference, the ranking I ended up with:</p>
<ul>
<li><code>Qwen3.5 4B Q4_K_M</code> on <code>llama.cpp</code> Vulkan at 9.7 generation tok/s was the only setup that felt production-usable.</li>
<li><code>Qwen3.5 35B-A3B IQ2_XXS</code> on <code>ik_llama.cpp</code> CPU at roughly 5.3 generation tok/s was the most surprising result&#8211;impressive, but too flaky and memory-hungry to trust.</li>
<li><code>LFM2 8B-A1B Q4_K_M</code> on Vulkan at roughly 32 tok/s generation posted a great benchmark number but broke down in real agent use.</li>
<li><code>LFM2.5 1.2B Q4_K_M</code> on Vulkan at roughly 45 tok/s generation was quick but not dependable enough to matter.</li>
<li><code>Qwen3.5 0.8B Q4_K_M</code> on CPU at about 46 tok/s sounds good until you ask it to cope with a full agent prompt.</li>
</ul>
<p>So yes, the board can run local models. It cannot run all of them <em>well</em>, and a distressing amount of the work lies in sorting out which bits of the stack are broken on any given day, but it was a much better experience than with Rockchip boards, and I intend to try out Gemma 4 and more recent models soon.</p>
<a class="anchor" id="anchor-fan-noise" rel="anchor" href="/space/reviews/2026/04/11/1900#fan-noise" style="color: #0000cc;"><h3 id="fan-noise">Fan Noise</h3></a><p>While the above was going on, I kept tabs on both thermals and memory, since I expected sustained GPU or inference workloads to need active airflow. But I had to deal with the fan first, since the Orange Pi 6 Plus ships with a pretty beefy cooling solution that, sadly, is very on the loud side.</p>
<p>And there&#8217;s no fan curve&#8211;all you get with the CIX kernel is a sysfs interface via <code>cix-ec-fan</code> with three modes:</p>
<ul>
<li><code>mute</code></li>
<li><code>normal</code></li>
<li><code>performance</code></li>
</ul>
<p>The first leads to the CPU reaching fairly high temperatures under even moderate load, the last is unbearably loud, and the <code>normal</code> setting ranges from moderately quiet to annoying, so for most of the testing I moved the board to my server closet.</p>
<a class="anchor" id="anchor-benchmarks" rel="anchor" href="/space/reviews/2026/04/11/1900#benchmarks" style="color: #0000cc;"><h3 id="benchmarks">Benchmarks</h3></a><p>Again, the CIX P1 has 12 cores, but they are <em>not</em> equal&#8211;four low-power Cortex-A520 cores clocked at 1.8GHz and eight faster Cortex-A720 cores spread across four clusters at different peak speeds (2.2 to 2.6GHz). The kernel&#8217;s <code>cpufreq</code> subsystem treats each cluster independently, which means that it takes a bit of effort to max out <em>all</em> the cores:</p>
<ul>
<li><code>sbc-bench</code> reported no throttling during its run, which was encouraging.</li>
<li>The aggregate 7-Zip score landed around 33k, with the best single A720 core around 3874 and the A520 cluster way behind at about 1617&#8211;a nice reminder that workload placement matters on this SoC.</li>
<li>Memory bandwidth on the A720 cores was respectable: <code>libc memcpy</code> in the 15-17 GB/s range, <code>memset</code> often 35-47 GB/s.</li>
<li>The A520 results were dramatically lower across the board.</li>
</ul>
<h4 id="memory-bandwidth">Memory Bandwidth</h4>
<p>An interesting twist I lost some time exploring is that you can actually see some differences <em>per CPU cluster</em>, which is new for me in ARM machines:</p>
<p/><figure><img alt="Memory bandwidth by CPU cluster" src="https://taoofmac.com/media/reviews/2026/04/11/1900/IwDp5mB47u6kiHmK7CzpkmbpJGQ=/orangepi-membw-chart.svg" style="max-width: 100% !important;height: auto !important;"/><figcaption>Memory bandwidth by CPU cluster</figcaption></figure><p/>
<p>Blue bars are <code>memcpy</code> (read-then-write), red bars are <code>memset</code> (pure write). The A520 cluster is roughly half the bandwidth of the A720s across both. This matters for inference because memory access patterns land on whichever cores the scheduler picks, and a hot path pinned to the efficiency cluster is immediately noticeable.</p>
<h4 id="thermals">Thermals</h4>
<p>On a quiescent system, sensor readings were good&#8211;most blocks hovered in the high twenties to low thirties Celsius:</p>
<ul>
<li><code>GPU_AVE</code>: <code>29&#176;C</code></li>
<li><code>NPU</code>: <code>30&#176;C</code></li>
<li><code>CPU_M1</code>: <code>30&#176;C</code></li>
<li><code>CPU_B0</code>: <code>32&#176;C</code></li>
<li><code>PCB_HOT</code>: <code>33&#176;C</code></li>
</ul>
<p>The thermal logs during the benchmarks were more reassuring than I expected:</p>
<ul>
<li>idle and light-load readings sat mostly around 29-33&#176;C across GPU, NPU and CPU blocks</li>
<li>under the longer benchmark runs, board and package sensors generally rose into the mid-30s to about 40&#176;C range, which is <em>very</em> good (but, as you&#8217;d expect, audibly noticeable from outside the closet)</li>
<li>frequency traces showed the active cluster spending long stretches pinned at its target clocks before later dropping back, which looked much more like workload phase changes than panicked throttling</li>
<li>One benchmark artifact I largely ignored was the <code>iozone</code> run, because it was aimed at <code>/tmp</code> and therefore mostly measuring the memory-backed path rather than telling me anything meaningful about persistent storage.</li>
</ul>
<p>Here&#8217;s a new chart that tries to capture thermals and frequency a little better than my old ones:</p>
<p/><figure><img alt="Thermal and frequency trace during sbc-bench run|653" src="https://taoofmac.com/media/reviews/2026/04/11/1900/X1VttKnjlRaoHCd41evlaqfieCs=/orangepi-thermal-freq.svg" style="max-width: 100% !important;height: auto !important;"/><figcaption>Thermal and frequency trace during sbc-bench run|653</figcaption></figure><p/>
<p>The above covers the full <code>sbc-bench</code> session&#8211;roughly 40 minutes of mixed workloads.</p>
<p>The three shaded phases correspond to what was running at the time: a short <code>iozone</code> burst (memory-backed, not interesting), the main <code>sbc-bench</code> battery (OpenSSL, 7-Zip single and multi-threaded, <code>tinymembench</code> across all clusters), and the trailing cooldown.</p>
<p>The key thing to notice is that frequency stayed pinned at target clocks throughout the heavy phases and only dropped back during transitions&#8211;there was no thermal throttling, which is pretty amazing.</p>
<p>Temperature peaked around 43&#176;C during the sustained multi-threaded 7-Zip run, which is well within spec for a board with active cooling. The idle baseline was around 29&#176;C, and it settled back there fairly quickly once the load came off.</p>
<p>One thing I could <em>not</em> track was fan speed, since the <code>cix-ec-fan</code> interface does not expose current RPM or duty cycle, and I had no way to correlate the thermal curve with what the fan was actually doing at each point. I could hear it spin up and settle, but I have no real data to overlay, and even though I considered setting up a dB meter, I never got around to it.</p>
<a class="anchor" id="anchor-living-with-it" rel="anchor" href="/space/reviews/2026/04/11/1900#living-with-it" style="color: #0000cc;"><h2 id="living-with-it">Living with it</h2></a><p>All of the above covers the first week or so. But I&#8217;ve been running this board as an always-on machine since March 8, and by now have a month&#8217;s data on what it&#8217;s like to live with.</p>
<p>The board now hosts a <a href="https://github.com/rcarmo/piclaw?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;"><code>piclaw</code></a> instance (my personal assistant) that I&#8217;ve been using for development and model testing, since I realized that <code>LFM2-8B-A1B</code> made for a faster thing to experiment with (31 t/s generation, 47 t/s prompt on Vulkan) even if it&#8217;s effectively not that &#8220;smart&#8221;.</p>
<p>Alongside the assistant work, I&#8217;ve been using the board for a real development project: porting the BasiliskII classic Mac emulator&#8217;s JIT to AArch64.</p>
<p>Over the past month that has meant a good deal of compilation, linking, automated experiment runs and testing. The JIT now executes real 68k ROM code with basic optimisations&#8211;interrupt delivery and display rendering are the active frontier, but it boots to a Mac OS desktop every now and then. The constant rebuilds around AArch64 JIT bugs I hit (broken optflag inline <code>asm</code> bindings, various register allocation and flag bugs in <code>codegen_arm64.cpp</code>, <code>VM_MAP_32BIT</code> allocation failures, repeated runs at fixing emulated 68k interrupt delivery) were genuine low-level issues that exercised the board&#8217;s toolchain and memory subsystem in ways no synthetic benchmark would, and it&#8217;s been working great.</p>
<a class="anchor" id="anchor-power-consumption" rel="anchor" href="/space/reviews/2026/04/11/1900#power-consumption" style="color: #0000cc;"><h3 id="power-consumption">Power Consumption</h3></a><p>One thing that came up in every review of the CIX P1 I read&#8211;[Jeff Geerling&#8217;s Orion O6 writeup][jg] being the most prominent&#8211;is power draw, and I have a month&#8217;s worth of data to confirm that it&#8217;s higher than average&#8211;averaging at 15.5W, rather than the usual 13W that I see quoted in other places:</p>
<p/><figure><img alt="Orange Pi 6 Plus wall power over 30 days" src="https://taoofmac.com/media/reviews/2026/04/11/1900/MKAktNh9KfzySU8hTUucK21oC24=/orangepi-power-30d.svg" style="max-width: 100% !important;height: auto !important;"/><figcaption>Orange Pi 6 Plus wall power over 30 days</figcaption></figure><p/>
<p>The flat zeros on the left are the setup period when I was reflashing and debugging offline. Once it came up as an always-on machine the power draw settled into a consistent daily pattern.</p>
<p/><figure><img alt="Orange Pi 6 Plus wall power over 7 days" src="https://taoofmac.com/media/reviews/2026/04/11/1900/BUikAxXMy-nnpsFqJpL7Ix3vp0U=/orangepi-power-7d.svg" style="max-width: 100% !important;height: auto !important;"/><figcaption>Orange Pi 6 Plus wall power over 7 days</figcaption></figure><p/>
<p>Zooming into the last week at 15-minute resolution, the daily idle/load cycle is clearly visible&#8211;overnight the board drops to about 15-16W, and during the day it hovers around 20-27W depending on what I am doing. Compilation and inference bursts push it briefly toward 30W; the rest of the time it sits comfortably in the low twenties.</p>
<p>That said, the idle floor of 15-16W is noticeably higher than what I am used to from other SBCs. A Raspberry Pi 5 idles around 3-4W, an RK3588 board typically settles around 5-8W, and even a Mini PC with an N100 can idle below 10W.</p>
<p>The Orange Pi 6 Plus never really gets below 15W even with nothing running, and that appears to be a common trait of the CIX P1 reference design rather than anything specific to this board&#8211;the Radxa Orion O6 (same SoC) shows a very similar baseline in the reports I have seen.</p>
<p>Whether that is down to the memory controller, the 5GbE PHYs, the always-on fan or some combination of all three, I cannot say for certain. But it does mean the board is less attractive as a low-traffic always-on appliance than the raw compute-per-watt numbers might suggest. At 15W idle you are paying about 130 kWh/year just to keep it breathing, which is not terrible but is not nothing either.</p>
<p/><figure><img alt="Orange Pi 6 Plus current draw over 7 days" src="https://taoofmac.com/media/reviews/2026/04/11/1900/s0UhFbzxxP4IE7loBS3IqPAuY9k=/orangepi-current-7d.svg" style="max-width: 100% !important;height: auto !important;"/><figcaption>Orange Pi 6 Plus current draw over 7 days</figcaption></figure><p/>
<p>I checked, and current draw mirrors the power profile and stays well under 0.2A on the 230V circuit. The board&#8217;s power supply is not doing anything exotic.</p>
<p/><figure><img alt="Mains voltage on the office circuit over 7 days" src="https://taoofmac.com/media/reviews/2026/04/11/1900/UhYxEu8Se2KrhJ3IcbbU8VrQGnI=/orangepi-voltage-7d.svg" style="max-width: 100% !important;height: auto !important;"/><figcaption>Mains voltage on the office circuit over 7 days</figcaption></figure><p/>
<p>The voltage trace is mostly here for completeness&#8211;Lisbon mains hovering around 230-232V with the usual overnight sag and daytime recovery. Nothing that would stress any reasonable power supply, and useful as a sanity check that the power readings are not being skewed by wild grid swings.</p>
<p>Reboots over the month: essentially none that weren&#8217;t my doing. The board has been stable in a way I did not expect from the early boot-chain experience.</p>
<a class="anchor" id="anchor-conclusion" rel="anchor" href="/space/reviews/2026/04/11/1900#conclusion" style="color: #0000cc;"><h2 id="conclusion">Conclusion</h2></a><p>After all of this, the Orange Pi 6 Plus fits a fairly specific set of roles:</p>
<ul>
<li>local inference experiments with carefully chosen models</li>
<li>edge-side telemetry or monitoring</li>
<li>compact Linux services that benefit from dual 5GbE</li>
<li>infrastructure roles where you want something denser and lower-power than x86 but more capable than the usual toy SBC</li>
</ul>
<p>I wouldn&#8217;t use it as a general-purpose desktop, and I wouldn&#8217;t trust the NPU story for anything LLM-related without more soak time. But I would keep it around for the sort of edge-AI and systems work I usually get drawn into&#8211;enough real capability to justify the effort, even if that effort is, right now, unreasonably high.</p>
<p>Even considering that I cut a lot of corners on the software side to get to a usable state, the hardware is still very much ahead of the software.</p>
<p>The GPU works, the NPU stack exists in some recognisable form, and local AI is not only possible but occasionally good, and I like what it can do, even if the power consumption and fan noise are higher than I would like for a board in this class, but compared to Rockchip&#8217;s offerings, it&#8217;s a much more polished experience&#8211;and the fact that I can get it to do useful work at all by myself, with my own OS image, is a testament to the progress ARM boards have made in the last couple of years.</p>
<br/>
]]></content>
<category term="sbc" label="sbc" />
<category term="ai" label="ai" />
<category term="orangepi" label="orangepi" />
<category term="linux" label="linux" />
<category term="arm" label="arm" />
<category term="npu" label="npu" />
<category term="reviews" label="reviews" />
<category term="cix-p1" label="cix-p1" />
<category term="hardware" label="hardware" />
</entry>
<entry>
<title>Shottr</title>
<id>https://taoofmac.com/space/apps/shottr?utm_content=atom</id>
<published>2026-04-11T08:27:00+00:00</published>
<updated>2026-04-11T08:43:20+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/apps/shottr?utm_content=atom"/>
<content type="html"><![CDATA[
<p class="lead"><a href="https://shottr.cc?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Shottr</a> is a lightweight macOS screenshot and annotation tool that manages to stay focused on the useful bits while still packing in a surprising number of editing features: quick capture, measurement, redaction, OCR, scrolling screenshots, pinning, pixelation, arrows, callouts and the usual visual markup without turning into a full design app. It has the right kind of small-tool energy, and is one of those utilities that is easy to justify keeping around all the time.</p>
<p>It also has a free trial mode and is available via Homebrew, which makes it particularly easy to install and keep up to date:</p>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><code>brew<span class="w"> </span>install<span class="w"> </span>--cask<span class="w"> </span>shottr
</code></pre></div>
<br/>
]]></content>
<category term="screenshots" label="screenshots" />
<category term="macos" label="macos" />
<category term="productivity" label="productivity" />
<category term="apps" label="apps" />
<category term="annotation" label="annotation" />
</entry>
<entry>
<title>Markdown</title>
<id>https://taoofmac.com/space/markup/markdown?utm_content=atom</id>
<published>2007-02-28T21:44:57+00:00</published>
<updated>2026-04-11T08:43:20+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/markup/markdown?utm_content=atom"/>
<content type="html"><![CDATA[
<p class="lead"><a href="http://daringfireball.net/projects/markdown?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Markdown</a> is a text-to-HTML idiom, conversion tool and all-out ecosystem for web writers, content editors and&#8230; <a href="/space/ai" rel="next" style="color: #0000cc;">AI</a>, allowing you to write using an easy-to-read, easy-to-write plain text format, then convert it to structurally valid (X)HTML.</p>
<p>Althought I used to prefer <a href="/space/markup/textile" rel="next" style="color: #0000cc;">Textile</a> for its table support and other niceties, Markdown has won that war and enjoys indisputably wider adoption, as well as making for slightly more readable text when writing essays.</p>
<p>Amusingly, it became the <em>lingua franca</em> of <a href="/space/ai/llm" rel="next" style="color: #0000cc;">LLMs</a> and is now the de facto standard for most modern documentation as well.</p>
<a class="anchor" id="anchor-resources" rel="anchor" href="/space/markup/markdown#resources" style="color: #0000cc;"><h2 id="resources">Resources</h2></a><p/><table class="compact" style="background: transparent;margin: 0px;padding: 0px;border-collapse: collapse;font-size: 90%;">
<thead>
<tr style="border-top: 1px solid #aaa;">
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Category</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Date</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Link</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Notes</th>
</tr>
</thead>
<tbody style="border-top: 2px solid black;border-bottom: 2px solid black;">
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Diagrams</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2023</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://pikchr.org/home/doc/trunk/doc/userman.md?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pikchr</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A diagram markup language designed to be embedded into Markdown, used by the SQLite project team</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="7" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Editors</td>
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2026</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/OlaProeis/Ferrite?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Ferrite</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a lightweight text editor for multiple file formats with live preview and syntax highlighting.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/mb21/panwriter?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">panwriter</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a markdown editor with import/export capabilities and a live preview pane.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2025</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/gsantner/markor?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Markor</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A text editor for Android with Markdown support.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2012</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://oscargodson.github.com/EpicEditor?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">EpicEditor</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A themable JavaScript editor.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://uberwriter.wolfvollprecht.de?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Uberwriter</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A nice, clean &#8220;Linux&#8221;:os/Linux editor</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2011</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://mouapp.com?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Mou</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A web developer-oriented app.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2010</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://wmd-editor.com?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">WMD</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an amazing JavaScript editor specifically tailored for Markdown</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="4" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Implementations</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2021</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/github/cmark-gfm?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">cmark-gfm</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>GitHub&#8217;s Markdown flavor in C</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2012</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://strapdownjs.com?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Strapdown</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Yet another JavaScript parser, with some neat themes and GitHub flavour support.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2011</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://fletcherpenney.net/multimarkdown?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">MMD</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A C language implementation of MultiMarkdown</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2010</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.pell.portland.or.us/~orc/Code/discount?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">discount</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A C implementation.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="5" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Libraries</td>
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2025</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/day50-dev/Streamdown?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Streamdown</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A Python library that renders Markdown from streaming LLM replies</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/panphora/overtype?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">OverType</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A lightweight Markdown editor library using an invisible textarea overlay on a styled preview.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="3" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2024</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/mark-when/markwhen?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">markwhen</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Make a cascading timeline from markdown-like text.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/mixmark-io/turndown?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">turndown</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a JavaScript library that can convert HTML to Markdown</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/romansky/dom-to-semantic-markdown?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">dom-to-semantic-markdown</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>another JavaScript library that can convert HTML to semantic Markdown, which is great for LLMs and reading mode</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="6" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Tools</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2026</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/shakedlokits/stash?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">stash</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A CLI tool to bidirectionally sync Markdown files with Apple Notes using front-matter.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2025</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/iamgio/quarkdown?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">quarkdown</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A TeX-like authoring system written in Kotlin that compiles to Markdown.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2024</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/microsoft/markitdown?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">markitdown</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Python tool for converting files and office documents to Markdown.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2014</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/visit1985/mdp?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">mdp</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A very neat terminal presentation tool.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2012</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/drbunsen/formd?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">formd</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A tool to convert between inline and reference Markdown links.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2010</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://johnmacfarlane.net/pandoc?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Pandoc</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A markup converter written in Haskell</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="5" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">macOS</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2026</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/xykong/flux-markdown?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">flux-markdown</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A macOS QuickLook plugin that provides a richer Markdown preview, effectively a more modern take on local file previewing for Markdown documents.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2024</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/sbarex/QLMarkdown?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">QLMarkdown</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A nicer, more full featured QuickLook previewer for Markdown files.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2020</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/Watson1978/QLMarkdownGFM?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">QLMarkdownGFM</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A Quicklook generator for GitHub Flavored Markdown</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2012</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://brettterpstra.com/project/markdown-service-tools?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Markdown Service Tools</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A set of OS X system services to manipulate text.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2011</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://code.google.com/p/readown?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">readown</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A Cocoa viewer that wraps the PHP renderer.</p></td>
</tr>
</tbody>
</table>
<br/>
]]></content>
</entry>
<entry>
<title>Hyperkey</title>
<id>https://taoofmac.com/space/apps/hyperkey?utm_content=atom</id>
<published>2026-04-11T08:13:00+00:00</published>
<updated>2026-04-11T08:16:16+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/apps/hyperkey?utm_content=atom"/>
<content type="html"><![CDATA[
<p class="lead"><a href="https://github.com/feedthejim/hyperkey?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Hyperkey</a> is a tiny macOS menu bar utility that turns Caps Lock into a proper Hyper key, which is one of those small affordances that can make a keyboard-driven setup much more pleasant. The nice bit here is that it does this without dragging in the usual heavier remapping machinery, so it feels like a lightweight answer to a very specific itch.</p>
<p>If you use custom shortcuts or window-management tools, having an easy way to get a full <code>Cmd+Ctrl+Opt+Shift</code> chord out of Caps Lock is surprisingly useful.</p>
<br/>
]]></content>
<category term="productivity" label="productivity" />
<category term="shortcuts" label="shortcuts" />
<category term="macos" label="macos" />
<category term="keyboard" label="keyboard" />
<category term="apps" label="apps" />
</entry>
<entry>
<title>TypeWhisper</title>
<id>https://taoofmac.com/space/apps/typewhisper?utm_content=atom</id>
<published>2026-04-11T08:10:00+00:00</published>
<updated>2026-04-11T08:16:16+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/apps/typewhisper?utm_content=atom"/>
<content type="html"><![CDATA[
<p/><figure><img alt="TypeWhisper screenshot" src="https://taoofmac.com/media/apps/typewhisper/vKGl3wAi6KP7RZItDV3sv_xkCcc=/home.png" width="2124" height="1696" style="max-width: 100% !important;height: auto !important;"/><figcaption>TypeWhisper screenshot</figcaption></figure><p/>
<p class="lead"><a href="https://github.com/TypeWhisper/typewhisper-mac?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">TypeWhisper</a> is a rather pragmatic macOS dictation and speech-processing tool that can use Apple&#8217;s own speech stack as well as other on-device models, which makes it more interesting to me than the usual cloud-first transcription wrappers. It also layers prompt-driven text processing on top of raw transcription, so it sits somewhere between dictation utility and local speech workbench.</p>
<p>The more appealing aspect here is that it can stay local when you want it to, but still gives you a fair amount of flexibility in engines and workflow. That makes it potentially useful not just for transcription, but also as a general accessibility and text-entry aid across the desktop.</p>
<br/>
]]></content>
<category term="speech" label="speech" />
<category term="ai" label="ai" />
<category term="dictation" label="dictation" />
<category term="transcription" label="transcription" />
<category term="accessibility" label="accessibility" />
<category term="macos" label="macos" />
<category term="apps" label="apps" />
</entry>
<entry>
<title>Cotypist</title>
<id>https://taoofmac.com/space/apps/cotypist?utm_content=atom</id>
<published>2026-04-11T07:56:00+00:00</published>
<updated>2026-04-11T08:16:16+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/apps/cotypist?utm_content=atom"/>
<content type="html"><![CDATA[
<p/><figure><img alt="Cotypist screenshot" src="https://taoofmac.com/media/apps/cotypist/0BYxGyJ6LGtNGRZjn_9PtSOH5hY=/cotypist-hero.gif" width="1200" height="221" style="max-width: 100% !important;height: auto !important;"/><figcaption>Cotypist screenshot</figcaption></figure><p/>
<p class="lead"><a href="https://cotypist.app?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Cotypist</a> is one of the more interesting recent takes on system-wide text completion on the Mac, mostly because it appears to keep processing local and to use screenshot-derived context to improve what it suggests. That makes it potentially useful well beyond the usual &#8220;AI writing helper&#8221; niche, especially in situations where the surrounding UI matters as much as the current text field.</p>
<p>It also strikes me as a potentially valuable accessibility tool, since this kind of ambient completion can reduce typing effort, help with repetitive text entry, and provide a softer assistive layer across applications rather than inside a single editor.</p>
<p>It is currently free during the beta period, which lowers the barrier to giving it a try.</p>
<br/>
]]></content>
<category term="productivity" label="productivity" />
<category term="ai" label="ai" />
<category term="text-completion" label="text-completion" />
<category term="writing" label="writing" />
<category term="accessibility" label="accessibility" />
<category term="macos" label="macos" />
<category term="apps" label="apps" />
</entry>
<entry>
<title>The Cudy AX3000 Wi-Fi 6 System (with OpenWRT)</title>
<id>https://taoofmac.com/space/reviews/2025/09/14/1630?utm_content=atom</id>
<published>2025-09-14T16:30:00+00:00</published>
<updated>2026-04-10T20:52:08+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/reviews/2025/09/14/1630?utm_content=atom"/>
<content type="html"><![CDATA[
<p class="lead">As I&#8217;ve been writing about <a href="/space/notes/2025/08/17/1545" rel="next" style="color: #0000cc;">once</a> or <a href="/space/notes/2025/08/31/2200" rel="next" style="color: #0000cc;">twice</a>, I&#8217;ve recently upgraded my Wi-Fi after an attempt to use ISP-provided equipment to replace my remarkably long-lasting (and extremely reliable) <a href="/space/com/apple/airport/extreme" rel="next" style="color: #0000cc;">Airport Extreme</a> base stations.</p>
<p>The short of it is that I ended up getting a few <a href="https://www.amazon.es/gp/product/B0DH5BK26K/ref=as_li_tl?_encoding=UTF8&amp;tag=taoofmac-21&amp;linkCode=ur2&amp;camp=3638&amp;creative=24630&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Cudy M3000</a> and setting up <a href="os/linux/openwrt" rel="nofollow" style="color: #0000cc;">OpenWRT</a> on them:</p>
<p/><figure><img alt="The M3000 standalone router/access point" src="https://taoofmac.com/media/reviews/2025/09/14/1630/QfMA3Rk5ygLOffOJsnLU1sWswV8=/cudy_hero.jpg" width="1280" height="1280" style="max-width: 100% !important;height: auto !important;"/><figcaption>The M3000 standalone router/access point</figcaption></figure><p/>
<blockquote>
<p><strong>Disclaimer:</strong> Although I sought out (and paid for) several <a href="https://www.amazon.es/gp/product/B0DH5BK26K/ref=as_li_tl?_encoding=UTF8&amp;tag=taoofmac-21&amp;linkCode=ur2&amp;camp=3638&amp;creative=24630&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">M3000</a> units myself, I&#8217;m following my standard format and <a href="/space/site/review_policy" rel="next" style="color: #0000cc;">review policy</a> for consistency, since this is more or less a &#8220;review&#8221;.</p>
</blockquote>
<p>The long of it has been a somewhat fun journey, so here&#8217;s the full story.</p>
<a class="anchor" id="anchor-the-story-so-far" rel="anchor" href="/space/reviews/2025/09/14/1630#the-story-so-far" style="color: #0000cc;"><h2 id="the-story-so-far">The Story So Far</h2></a><p>In case you&#8217;ve landed here without any context, I recently <a href="/space/notes/2025/08/10/2100" rel="next" style="color: #0000cc;">switched ISPs</a> and the initial configuration included a set of Wi-Fi 7 extenders to replace my (very) long-lived <a href="/space/com/apple/airport/extreme" rel="next" style="color: #0000cc;">Airport Extreme</a> base stations.</p>
<p>This was a somewhat protracted thing and I had plenty of time to lay down the groundwork by <a href="/space/reviews/2025/08/03/1900" rel="next" style="color: #0000cc;">upgrading my LAN to 2.5GbE Ethernet with a few 10GbE ports</a>, but after a week of living with the system <a href="/space/notes/2025/08/17/1545" rel="next" style="color: #0000cc;">I decided I wanted something I could manage myself</a> due to a bunch of management restrictions and outright compatibility problems I could not re-configure it to overcome, because everything is locked out by my ISP.</p>
<p>My functional requirements were pretty clear:</p>
<ul>
<li><strong>Fully local, browser-based management</strong> (I don&#8217;t mind managing each device individually).</li>
<li><strong>Absolutely <em>zero</em> cloud management features</strong>. Zilch. Nada. No setting up a user account with the vendor or any external dependencies (I don&#8217;t want or need off-site remote management&#8212;and if I did, I could set it up myself.)</li>
<li><strong>No mobile apps required</strong> (or desirable) for either initial setup or daily tweaks (which was something I actually didn&#8217;t like about the <a href="/space/com/apple/airport/extreme" rel="next" style="color: #0000cc;">Airport Extremes</a> even if it was very convenient to have management baked into iOS).</li>
<li><strong>Not an ugly arachnoid eyesore</strong> (we can&#8217;t hang access points off walls or ceilings, and the Airport Extremes became effectively invisible in plain sight).</li>
</ul>
<p>And the <a href="https://www.amazon.es/gp/product/B0DH5BK26K/ref=as_li_tl?_encoding=UTF8&amp;tag=taoofmac-21&amp;linkCode=ur2&amp;camp=3638&amp;creative=24630&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">M3000</a> doesn&#8217;t look half bad compared to an <a href="/space/com/apple/airport/extreme" rel="next" style="color: #0000cc;">Airport Extreme</a>, so that was <em>definitely</em> a reason for me to take a second look (they come in black too, but the white ones were drop-in replacements for the Airports in our decor).</p>
<p/><figure><img alt="As you can see, they are pretty neutral. I will miss the extra LAN and USB ports, though." src="https://taoofmac.com/media/reviews/2025/09/14/1630/GGbDadDDTpNqaZ1XSrsowRmfQSk=/cudy_side_by_side.jpg" width="2048" height="1024" style="max-width: 100% !important;height: auto !important;"/><figcaption>As you can see, they are pretty neutral. I will miss the extra LAN and USB ports, though.</figcaption></figure><p/>
<p>Technically, I had a few more requirements:</p>
<ul>
<li>I wanted &#8220;dumb&#8221; access points. No routing, no meshing, no weird/proprietary vendor features&#8212;just a box able to turn Ethernet packets into radio and back again.</li>
<li>I decided to aim for Wi-Fi 6/6E (I quickly realized that we only have a couple of MacBooks able to do Wi-Fi 7 and that most of our devices are Wi-Fi 6 capable).</li>
<li>Full control over all Wi-Fi features (channel, SSIDs, power, etc.) with support for an arbitrary number of SSIDs (with VLAN mapping of each) on both 2.4/5 GHz (or 6 GHz if available).</li>
<li>No band steering (it does not really work in our scenario, and one of the biggest gripes I had with our ISP setup was that I couldn&#8217;t turn it off).</li>
<li>2.5GbE backhaul (gigabit-plus Wi-Fi is useless if you can&#8217;t pipe it through.)</li>
<li><em>At least one</em> pass-through Ethernet port (the Airport Extreme has three additional GbE ports, which is still apparently a premium configuration over a decade later but has proven very, very handy)</li>
</ul>
<p><a href="os/linux/openwrt" rel="nofollow" style="color: #0000cc;">OpenWRT</a> was not really a requirement, but since my first-ever Wi-Fi access points were indeed <a href="/space/com/linksys/wrt54g" rel="next" style="color: #0000cc;">WRT54G</a> devices and I have <a href="/space/com/linksys/wrt54g3g-eu" rel="next" style="color: #0000cc;">a <em>long</em> history</a> with it, that&#8217;s where I started my research, and <a href="https://www.cudy.com/en-eu?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Cudy</a> hardware had quite a few positive references.</p>
<p>Moreover, they actually provide instructions on how to re-flash their devices with <a href="os/linux/openwrt" rel="nofollow" style="color: #0000cc;">OpenWRT</a>, and there is an upgrade path to the currently supported version (as well as a likely runway of official <a href="os/linux/openwrt" rel="nofollow" style="color: #0000cc;">OpenWRT</a> support for a few years at least), so they soon rose to the top of my list.</p>
<a class="anchor" id="anchor-factory-firmware" rel="anchor" href="/space/reviews/2025/09/14/1630#factory-firmware" style="color: #0000cc;"><h2 id="factory-firmware">Factory Firmware</h2></a><p>The factory firmware is actually <em>very</em> nice, and makes an excellent job of exposing all of the features as well as guiding users through initial setup of the devices either as a router or as an access point in various configurations:</p>
<figure>
  <video controls="" autoplay="" loop="" muted="" playsinline="" style="width: 100%" poster="/media/reviews/2025/09/14/1630/xR9fsWz4QX8oZmxD7Tp-5TggbXE=/cudy_ui.jpg" aria-label="Screen recording of the Cudy web interface being configured">
    <source src="/media/reviews/2025/09/14/1630/rQW1skjHXFdvlWs3ITEGexRtrsw=/cudy_ui.mp4" type="video/mp4">
    <img src="https://taoofmac.com/media/reviews/2025/09/14/1630/xR9fsWz4QX8oZmxD7Tp-5TggbXE=/cudy_ui.jpg" style="max-width: 100%;height: auto;width: 100%" alt="Static screenshot of the Cudy web interface" width="1724" height="1080"/>
  </source></video>
  <figcaption>The base Cudy UI is very comprehensive.</figcaption>
</figure>

<p>I didn&#8217;t run it for long, but it seems to do a very good job of exposing both <a href="os/linux/openwrt" rel="nofollow" style="color: #0000cc;">OpenWRT</a> core functionality and the additional features <a href="https://www.cudy.com/en-eu?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Cudy</a> added. Although I didn&#8217;t install their app or tried to manage it remotely, I&#8217;d say most people would be well served by the factory firmware&#8211;and since it even supports TR069 for carrier remote management, ISPs probably should take a look at it too.</p>
<p>But my objective was to make sure I had full control of the hardware and run these on the latest vanilla <a href="os/linux/openwrt" rel="nofollow" style="color: #0000cc;">OpenWRT</a>, so there were a few more steps involved.</p>
<a class="anchor" id="anchor-conversion-process" rel="anchor" href="/space/reviews/2025/09/14/1630#conversion-process" style="color: #0000cc;"><h2 id="conversion-process">Conversion Process</h2></a><p>The first thing I needed to do was unlock the factory firmware. The white/grey devices I have are &#8220;V2&#8221; hardware, but <a href="https://www.cudy.com/en-eu?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Cudy</a> themselves say that the firmware is identical to the V1 (which is black with red trimming) and provide a vanilla <a href="os/linux/openwrt" rel="nofollow" style="color: #0000cc;">OpenWRT</a> 23.05 image, so I started out with that.</p>
<p>The <a href="https://www.cudy.com/en-eu/blogs/faq/openwrt-software-download?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Cudy support page</a> links to their <a href="https://drive.google.com/drive/folders/1BKVarlwlNxf7uJUtRhuMGUqeCa5KpMnj?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Google Drive</a>, where you can download the <code>M3000 V1.zip</code> file (for both V1/V2).</p>
<p>That ZIP file contains a Windows version of <code>tftpd</code> (which is an extra nice touch, even if it triggers a bunch of virus warnings), a comprehensive set of instructions for Windows users in a PDF and a few firmware files, which we&#8217;ll get to in a moment.</p>
<p>To get the latest supported firmware, I went to the <a href="https://firmware-selector.openwrt.org?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">OpenWRT Firmware Selector</a> and looked for the Cudy M3000, downloading the latest <code>sysupgrade</code> file. I downloaded <code>24.10.2 (r28739-d9340319c6)</code>.</p>
<p>I then set up <code>tftpd</code> on one of my <a href="os/linux/fedora" rel="nofollow" style="color: #0000cc;">Fedora</a> laptops (because, I don&#8217;t have personal Windows machines anymore) and wired it up to the LAN port on the <a href="https://www.amazon.es/gp/product/B0DH5BK26K/ref=as_li_tl?_encoding=UTF8&amp;tag=taoofmac-21&amp;linkCode=ur2&amp;camp=3638&amp;creative=24630&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">M3000</a>.</p>
<p>To enable it to get at the <code>recovery.bin</code> file via TFTP, I copied that file to <code>/var/lib/tftpboot</code>, set my laptop to IP address <code>192.168.1.88</code> and restarted <code>tftpd</code>.</p>
<p>I then held down the power button on the <a href="https://www.amazon.es/gp/product/B0DH5BK26K/ref=as_li_tl?_encoding=UTF8&amp;tag=taoofmac-21&amp;linkCode=ur2&amp;camp=3638&amp;creative=24630&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">M3000</a>, plugged in the barrel jack, waited until the lights settled (solid red in my case) and then reset my laptop to use DHCP, because the next step is to log in to the (now unlocked) <a href="https://www.cudy.com/en-eu?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Cudy</a> web UI at <code>http://192.168.10.1</code>.</p>
<p>Once you&#8217;re there, go to Advanced Settings/Firmware and upload <code>cudy_m3000-v1-sysupgrade.bin</code> (checksum <code>d09cdb39e9544b1d33a4daf28964c50b</code>), which is also provided in the ZIP file.</p>
<p>This gives you a vanilla <a href="os/linux/openwrt" rel="nofollow" style="color: #0000cc;">OpenWRT</a> 23.05 install, and you then go to <code>http://192.168.1.1/cgi-bin/luci/admin/system/flash</code>, upload the 24.10.2 file and&#8230; you&#8217;re done.</p>
<a class="anchor" id="anchor-tl-dr" rel="anchor" href="/space/reviews/2025/09/14/1630#tl-dr" style="color: #0000cc;"><h3 id="tldr">TL;DR</h3></a><ul>
<li>Connect to the LAN port.</li>
<li>Set your IP address to <code>192.168.1.88</code>.</li>
<li>Start <code>tftpd</code> with the <code>recovery.bin</code> file in <code>/var/lib/tftpboot</code>.</li>
<li>Plug in the power jack while holding the power button, wait until the lights settle (solid red in my case).</li>
<li>Reconfigure your machine from <code>192.168.1.88</code> to DHCP.</li>
<li>Log in to the <a href="https://www.cudy.com/en-eu?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Cudy</a> web UI (<code>http://192.168.10.1</code>), go to Advanced Settings/Firmware and upload <code>cudy_m3000-v1-sysupgrade.bin</code> (<code>d09cdb39e9544b1d33a4daf28964c50b</code>).</li>
<li>Wait for it to reboot.</li>
<li>Go to <code>http://192.168.1.1/cgi-bin/luci/admin/system/flash</code> and upload the 24.10.2 sysupgrade image.</li>
</ul>
<a class="anchor" id="anchor-openwrt-configuration" rel="anchor" href="/space/reviews/2025/09/14/1630#openwrt-configuration" style="color: #0000cc;"><h2 id="openwrt-configuration">OpenWRT Configuration</h2></a><p>I initially got a standalone unit to test and then bought a 3-pack and another standalone unit (to keep as a cold spare), so I had a working configuration I could use to set up the new nodes way before I got them all.</p>
<p>Over that initial week with the first unit, I sorted out all of the details:</p>
<ul>
<li>Disabled the built-in DHCP server</li>
<li>Added both Ethernet ports to the <code>br-lan</code> bridge to allow pass-through (this way I can plug an Apple TV or similar directly into the gigabit port)</li>
<li>Set the timezone, checked that NTP worked correctly, etc.</li>
<li>Installed <code>rsync</code> and <code>luci-app-statistics</code> to play around with configuration files and monitoring</li>
<li>Set up the 2.4GHz radio for a &#8220;compatibility mode&#8221; that wouldn&#8217;t frustrate my IoT devices (including the many low bitrate ESP32s lying around)</li>
<li>Set up WPA3 on the 5GHz radio to enable full <code>802.11ax</code> data rates (I also punched up the channel width to 160Mhz and set up <code>802.11r</code> for faster hand-overs)</li>
</ul>
<p>This bit is probably the most interesting for everyone, so here&#8217;s a redacted version of my initial <code>/etc/config/wireless</code>:</p>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><code><span class="na">config wifi-device 'radio0'</span>
<span class="w">    </span><span class="na">option type 'mac80211'</span>
<span class="w">    </span><span class="na">option path 'platform/soc/18000000.wifi'</span>
<span class="w">    </span><span class="na">option channel 'auto'</span>
<span class="w">    </span><span class="na">option band '2g'</span>
<span class="w">    </span><span class="na">option htmode 'HT40'</span>
<span class="w">    </span><span class="na">option legacy_rates '1'</span>
<span class="w">    </span><span class="na">option country 'PT'</span>
<span class="w">    </span><span class="na">option cell_density '1'</span>

<span class="na">config wifi-iface 'default_radio0'</span>
<span class="w">    </span><span class="na">option device 'radio0'</span>
<span class="w">    </span><span class="na">option network 'lan'</span>
<span class="w">    </span><span class="na">option mode 'ap'</span>
<span class="w">    </span><span class="na">option ssid 'my_ssid'</span>
<span class="w">    </span><span class="na">option encryption 'psk-mixed'</span>
<span class="w">    </span><span class="na">option key 'my_key'</span>
<span class="w">    </span><span class="na">option ieee80211r '1'</span>
<span class="w">    </span><span class="na">option mobility_domain 'dead'</span>
<span class="w">    </span><span class="na">option ft_over_ds '0'</span>
<span class="w">    </span><span class="na">option ft_psk_generate_local '1'</span>

<span class="na">config wifi-device 'radio1'</span>
<span class="w">    </span><span class="na">option type 'mac80211'</span>
<span class="w">    </span><span class="na">option path 'platform/soc/18000000.wifi+1'</span>
<span class="w">    </span><span class="na">option channel 'auto'</span>
<span class="w">    </span><span class="na">option band '5g'</span>
<span class="w">    </span><span class="na">option htmode 'HE160'</span>
<span class="w">    </span><span class="na">option cell_density '1'</span>
<span class="w">    </span><span class="na">option country 'PT'</span>

<span class="na">config wifi-iface 'default_radio1'</span>
<span class="w">    </span><span class="na">option device 'radio1'</span>
<span class="w">    </span><span class="na">option network 'lan'</span>
<span class="w">    </span><span class="na">option mode 'ap'</span>
<span class="w">    </span><span class="na">option ssid 'my_5GHz_ssid'</span>
<span class="w">    </span><span class="na">option encryption 'sae'</span>
<span class="w">    </span><span class="na">option key 'my_5GHz_key'</span>
<span class="w">    </span><span class="na">option ocv '1'</span>
<span class="w">    </span><span class="na">option ieee80211r '1'</span>
<span class="w">    </span><span class="na">option mobility_domain 'beef'</span>
<span class="w">    </span><span class="na">option ft_over_ds '0'</span>
<span class="w">    </span><span class="na">option dtim_period '3'</span>
</code></pre></div>

<p>To set up the other nodes, I just uploaded the first one&#8217;s configuration backup, changed the hostname and IP address (given the vagaries of our new home gateway, I opted for static IPs) and plugged them in.</p>
<a class="anchor" id="anchor-performance" rel="anchor" href="/space/reviews/2025/09/14/1630#performance" style="color: #0000cc;"><h2 id="performance">Performance</h2></a><p>My iPhone and MacBook Pro can both do 1.2 Gbps down / 1.5 Gbps up within 2&#8211;3 meters of any of the access points when connecting to our internal OpenSpeedTest instance&#8212;which I&#8217;m hosting on one of my <a href="/space/blog/2024/12/26/2330" rel="next" style="color: #0000cc;">TerraMaster</a>&#8217;s 10GbE interfaces:</p>
<p/><figure><img alt="OpenSpeedTest hosted on my 10GbE NAS" src="https://taoofmac.com/media/reviews/2025/09/14/1630/TFuQON5DiV3TOb37PWsboEHjmsQ=/cudy_speedtest.png" width="1280" height="658" style="max-width: 100% !important;height: auto !important;"/><figcaption>OpenSpeedTest hosted on my 10GbE NAS</figcaption></figure><p/>
<p>Running a second simultaneous test gives obviously lower (but similar) individual results and maxes out the 2.5GbE uplink, so I would say this is about as good as it&#8217;s ever going to get, since I suspect that even if we were using Wi-Fi 7 and 6GHz, physics and the 2.5GbE backhaul would start factoring in.</p>
<p>Again, this is in a pure &#8220;flat&#8221; configuration, with all physical interfaces and radios set as part of the <code>br-lan</code>&#8211;no routing is taking place, and no layer 3 handling is happening.</p>
<p>Our staple latency test (streaming games using Steam Link from a 2.5GbE server) is buttery smooth, but then again it was already good with the <a href="/space/com/apple/airport/extreme" rel="next" style="color: #0000cc;">Airport Extremes</a> (you only really need 30-50Mbps for crisp 1080p streaming), and the <a href="/space/blog/2024/02/03/2000" rel="next" style="color: #0000cc;">Logitech G Cloud</a> (which, ironically, has worse Wi-Fi than any of our iPads) works perfectly.</p>
<p>But I&#8217;ll let the data speak for itself:</p>
<p/><figure><img alt="PHY bitrate in my living room" src="https://taoofmac.com/media/reviews/2025/09/14/1630/5k3iohpY4emdK6Wr-_rKuIFdqJM=/cudy_phy.png" width="931" height="222" style="max-width: 100% !important;height: auto !important;"/><figcaption>PHY bitrate in my living room</figcaption></figure><p/>
<p>This is the same kind of performance I was getting with the Wi-Fi 7 extenders from my ISP, but:</p>
<ul>
<li>I can now <em>see</em> it, monitor it and dive into the nitty-gritty details at will instead of having to guess what was happening.</li>
<li>Even though it&#8217;s not Wi-Fi 6E, it is a massive improvement over the sub-300 Mbps I was getting from the Apple Airport Extremes.</li>
</ul>
<p>So I&#8217;m calling this a success performance-wise.</p>
<a class="anchor" id="anchor-stability" rel="anchor" href="/space/reviews/2025/09/14/1630#stability" style="color: #0000cc;"><h2 id="stability">Stability</h2></a><p>There is some occasional flip-flopping between access points, but that only happens in Linux and in places where coverage has strong overlap, so I&#8217;m not worried about it (I can always turn off <code>802.11r</code> if it becomes a nuisance, and I consider it an experiment, not a requirement):</p>
<p/><figure><img alt="This is a good example--I see a similar pattern in the nearest AP to this one" src="https://taoofmac.com/media/reviews/2025/09/14/1630/FZ9huuu8MOW_JhtK_pbrBUOLC4M=/cudy_flipflop.png" width="931" height="222" style="max-width: 100% !important;height: auto !important;"/><figcaption>This is a good example--I see a similar pattern in the nearest AP to this one</figcaption></figure><p/>
<p>Looking at the logs from both APs involved it seems to be a client issue:</p>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><code>Sun Sep  7 09:50:00 2025 daemon.notice hostapd: phy1-ap0: STA a6:a8:e5:87:20:d0 IEEE 802.11: did not acknowledge authentication response
Sun Sep  7 09:50:46 2025 daemon.notice hostapd: phy1-ap0: STA a6:a8:e5:87:20:d0 IEEE 802.11: did not acknowledge authentication response
Sun Sep  7 09:50:48 2025 daemon.info hostapd: phy1-ap0: STA a6:a8:e5:87:20:d0 IEEE 802.11: associated (aid 5)
Sun Sep  7 09:50:48 2025 daemon.notice hostapd: phy1-ap0: AP-STA-CONNECTED a6:a8:e5:87:20:d0 auth_alg=sae
Sun Sep  7 09:50:48 2025 daemon.info hostapd: phy1-ap0: STA a6:a8:e5:87:20:d0 WPA: pairwise key handshake completed (RSN)
Sun Sep  7 09:50:48 2025 daemon.notice hostapd: phy1-ap0: EAPOL-4WAY-HS-COMPLETED a6:a8:e5:87:20:d0
Sun Sep  7 09:54:34 2025 daemon.info hostapd: phy1-ap0: STA a6:a8:e5:87:20:d0 IEEE 802.11: authenticated
Sun Sep  7 09:54:45 2025 daemon.notice hostapd: phy1-ap0: AP-STA-DISCONNECTED a6:a8:e5:87:20:d0
</code></pre></div>

<p>This hasn&#8217;t recurred, but I will be keeping an eye on things&#8211;and if you want to dig deeper into <code>802.11r</code> configuration, <a href="https://www.libe.net/en/wlan-roaming?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">this great page</a> has a bunch of detail on it.</p>
<p>So far there haven&#8217;t been any unexpected behaviors, and since I am not using band steering (which you can add by installing <code>usteer</code> or <code>dawn</code> and their corresponding <code>luci</code> packages, by the way) everything&#8217;s been fine with my legacy devices.</p>
<a class="anchor" id="anchor-faq" rel="anchor" href="/space/reviews/2025/09/14/1630#faq" style="color: #0000cc;"><h2 id="faq">FAQ</h2></a><p>While I was going through this process, I got a bunch of feedback from people online:</p>
<ul>
<li><strong>Why not UniFi?</strong> Value for money, plain and simple. I have used Ubiquiti devices before, but I wasn&#8217;t going to pay three digits for a &#8220;dumb&#8221; access point and don&#8217;t need most of their features.</li>
<li><strong>Why not Wi-Fi 7?</strong> There isn&#8217;t anything similar with Wi-Fi 6E/7 support and 2.5GbE backhaul yet&#8211;at least not anywhere near this price point. <a href="https://www.cudy.com/en-eu?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Cudy</a> does have other models, but they haven&#8217;t released unlocked <a href="os/linux/openwrt" rel="nofollow" style="color: #0000cc;">OpenWRT</a> firmware (yet, I hope) and besides, I am already getting gigabit-plus speeds for all my devices.</li>
<li><strong>What about meshing?</strong> It&#8217;s useless for me. We have reinforced concrete walls and two lift shafts in the middle of our flat and even 2.4 GHz has issues, which is partly why I made sure we have at least two Ethernet jacks in each room when we renovated over twenty years ago.</li>
<li><strong>What about roaming?</strong> This is a home (office), not an independent country. Standard Wi-Fi handovers work fine even if you walk around the house on a video call. I enabled <code>802.11r</code> anyway but see no need for it.</li>
<li><strong>What about central management?</strong> It&#8217;s <em>just four</em> active devices, and they&#8217;re all set up as &#8220;dumb&#8221; access points, so there isn&#8217;t a lot to manage except when I&#8217;m setting up a new VLAN or need a test SSID. Gathering stats off <a href="https://openwrt.org/docs/guide-user/luci/luci_app_statistics?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;"><code>luci-app-statistics</code></a> via <code>collectd</code> is a wheel that&#8217;s already been invented, so I don&#8217;t need a controller for that.</li>
</ul>
<p>All in all, I don&#8217;t even need the LuCI web UI, and if I need to test a complex configuration I can hack something together with <code>ssh</code> and <code>ansible</code> for reproducibility in around 30 minutes.</p>
<a class="anchor" id="anchor-conclusion" rel="anchor" href="/space/reviews/2025/09/14/1630#conclusion" style="color: #0000cc;"><h2 id="conclusion">Conclusion</h2></a><p>The <a href="https://www.amazon.es/gp/product/B0DDKVHXHL/ref=as_li_tl?_encoding=UTF8&amp;tag=taoofmac-21&amp;linkCode=ur2&amp;camp=3638&amp;creative=24630&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Cudy AX3000/M3000</a> models make for pretty great <a href="/space/com/apple/airport/extreme" rel="next" style="color: #0000cc;">Airport Extreme</a> replacements, and in this age of networking devices with cloud features nobody asked for <a href="os/linux/openwrt" rel="nofollow" style="color: #0000cc;">OpenWRT</a> turns them into very nice locally managed access points that I will never have to worry about again (until I break the configuration myself, of course).</p>
<p>Although it is much too early to weigh in on hardware reliability (some of the <code>802.11ac</code> <a href="/space/com/apple/airport/extreme" rel="next" style="color: #0000cc;">Airport Extremes</a> I was using were manufactured over a decade ago), the price/performance ratio is great, and right now I don&#8217;t mind it not being Wi-Fi 7.</p>
<p>After all, it took almost ten years for the 2.4GHz band to become saturated in my building, and it doesn&#8217;t look as if the 5GHz band is going to be massively swamped anytime soon, so I&#8217;m expecting something like 3-4 years of hassle-free operation if the hardware holds up.</p>
<p>A relevant thing I should point out again is that people who have less need for low-level control might actually be fine with the stock firmware&#8212;I did not use it extensively (nor did I try the <a href="https://www.cudy.com/en-eu?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Cudy</a> app or any of the router/firewall features), but it already exposes a lot more functionality (and seems a lot more flexible) than ISP gear, so I would encourage people to give it a go.</p>
<p>I suspect I will eventually come across some <a href="os/linux/openwrt" rel="nofollow" style="color: #0000cc;">OpenWRT</a> corner cases as I succumb to the temptation to fiddle with the configuration a bit more, but given our particular situation there&#8217;s a very high chance these will just fade into the background and &#8220;just work&#8221;, which was the ideal outcome that Apple pretty much nailed with the <a href="/space/com/apple/airport/extreme" rel="next" style="color: #0000cc;">Airport Extremes</a>&#8230;</p>
<blockquote>
<p><strong>Update, September 24, 2025:</strong> I decided to tweak my settings a little bit and enabled 802.11k/v on both radios, which seems to have improved the flip-flopping. That meant upgrading <code>wpad-basic-mbedtls</code> to the full version (<code>opkg update &amp;&amp; opkg remove wpad-basic-mbedtls &amp;&amp; opkg install wpad-mbedtls</code>) and the following settings:</p>
</blockquote>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><code><span class="na">config wifi-device 'radio0'</span>
<span class="w">        </span><span class="na">option type 'mac80211'</span>
<span class="w">        </span><span class="na">option path 'platform/soc/18000000.wifi'</span>
<span class="w">        </span><span class="na">option channel 'auto'</span>
<span class="w">        </span><span class="na">option band '2g'</span>
<span class="w">        </span><span class="na">option htmode 'HT40'</span>
<span class="w">        </span><span class="na">option legacy_rates '1'</span>
<span class="w">        </span><span class="na">option country 'PT'</span>
<span class="w">        </span><span class="na">option cell_density '1'</span>

<span class="na">config wifi-iface 'default_radio0'</span>
<span class="w">        </span><span class="na">option device 'radio0'</span>
<span class="w">        </span><span class="na">option network 'lan'</span>
<span class="w">        </span><span class="na">option mode 'ap'</span>
<span class="w">        </span><span class="na">option ssid 'my_ssid'</span>
<span class="w">        </span><span class="na">option encryption 'psk-mixed'</span>
<span class="w">        </span><span class="na">option key 'my_key'</span>
<span class="w">        </span><span class="na">option ieee80211r '1'</span>
<span class="w">        </span><span class="na">option mobility_domain 'dead'</span>
<span class="w">        </span><span class="na">option ft_over_ds '0'</span>
<span class="w">        </span><span class="na">option ft_psk_generate_local '1'</span>
<span class="w">        </span><span class="na">option ieee80211k '1'</span>
<span class="w">        </span><span class="na">option wnm_sleep_mode '1'</span>
<span class="w">        </span><span class="na">option wnm_sleep_mode_no_keys '1'</span>
<span class="w">        </span><span class="na">option bss_transition '1'</span>
<span class="w">        </span><span class="na">option proxy_arp '1'</span>

<span class="na">config wifi-device 'radio1'</span>
<span class="w">        </span><span class="na">option type 'mac80211'</span>
<span class="w">        </span><span class="na">option path 'platform/soc/18000000.wifi+1'</span>
<span class="w">        </span><span class="na">option channel 'auto'</span>
<span class="w">        </span><span class="na">option band '5g'</span>
<span class="w">        </span><span class="na">option htmode 'HE160'</span>
<span class="w">        </span><span class="na">option cell_density '1'</span>
<span class="w">        </span><span class="na">option country 'PT'</span>

<span class="na">config wifi-iface 'default_radio1'</span>
<span class="w">        </span><span class="na">option device 'radio1'</span>
<span class="w">        </span><span class="na">option network 'lan'</span>
<span class="w">        </span><span class="na">option mode 'ap'</span>
<span class="w">        </span><span class="na">option ssid 'my_5GHz_ssid'</span>
<span class="w">        </span><span class="na">option encryption 'sae'</span>
<span class="w">        </span><span class="na">option key 'my_5GHz_key'</span>
<span class="w">        </span><span class="na">option ocv '1'</span>
<span class="w">        </span><span class="na">option ieee80211r '1'</span>
<span class="w">        </span><span class="na">option mobility_domain 'beef'</span>
<span class="w">        </span><span class="na">option ft_over_ds '0'</span>
<span class="w">        </span><span class="na">option dtim_period '3'</span>
<span class="w">        </span><span class="na">option ieee80211k '1'</span>
<span class="w">        </span><span class="na">option wnm_sleep_mode '1'</span>
<span class="w">        </span><span class="na">option wnm_sleep_mode_no_keys '1'</span>
<span class="w">        </span><span class="na">option bss_transition '1'</span>
<span class="w">        </span><span class="na">option proxy_arp '1'</span>
</code></pre></div>

<p>I suspect I might have to tweak the <code>802.11k</code> settings a bit more, but so far it seems to be working well.</p>
<blockquote>
<p><strong>Update, December 2025:</strong> I've been told that [Cudy] has updated their [OpenWRT page][cudy_support] with newer firmware versions, so if you're doing this now, make sure to check there first since new hardware revisions (serial numbers starting with 2543) require a different recovery image (good thing I bought a spare unit to keep things uniform). So far, I've had zero issues with any of mine.</p>
</blockquote>

<a class="anchor" id="anchor-one-more-update" rel="anchor" href="/space/reviews/2025/09/14/1630#one-more-update" style="color: #0000cc;"><h2 id="one-more-update">One More Update</h2></a><p>After a few more months of living with these, I ended up revisiting the 5GHz configuration. The main thing I changed was to stop trying to be clever with <code>HE160</code>. It <em>did</em> work, and on paper it looked great (those headline PHY rates are always tempting), but in practice it made the whole setup feel a bit too fussy for a house where I care more about moving around on FaceTime calls and carrying on with work than about wringing the last possible megabit out of a speed test. In hindsight this was fairly obvious: <code>HE160</code> is a lot of channel width to throw at a multi-AP setup, and I was also leaving channel selection on <code>auto</code>, which wasn&#8217;t helping matters.</p>
<p>So I simplified things.</p>
<p>I kept the 5GHz SSID as the &#8220;good&#8221; network &#8211; WPA3, <code>802.11r</code>, <code>802.11k</code>, <code>802.11v</code>, all the usual niceties &#8211; but moved the radios to <code>HE80</code> and assigned fixed channels to each AP. That gave me a much saner setup: lower theoretical peak rates, yes, but much better behaviour in day-to-day use.</p>
<p>The current 5GHz plan is now:</p>
<ul>
<li>AP 1: channel <code>36</code></li>
<li>AP 2: channel <code>52</code></li>
<li>AP 3: channel <code>100</code></li>
<li>AP 4: channel <code>116</code></li>
</ul>
<p>And the relevant <a href="os/linux/openwrt" rel="nofollow" style="color: #0000cc;">OpenWRT</a> configuration now looks like this:</p>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><code><span class="n">config</span><span class="w"> </span><span class="n">wifi</span><span class="o">-</span><span class="n">device</span><span class="w"> </span><span class="s1">'radio1'</span>
<span class="w">        </span><span class="n">option</span><span class="w"> </span><span class="n">type</span><span class="w"> </span><span class="s1">'mac80211'</span>
<span class="w">        </span><span class="n">option</span><span class="w"> </span><span class="n">path</span><span class="w"> </span><span class="s1">'platform/soc/18000000.wifi+1'</span>
<span class="w">        </span><span class="n">option</span><span class="w"> </span><span class="n">channel</span><span class="w"> </span><span class="s1">'36'</span><span class="w">   </span><span class="c1"># vary per AP: 36 / 52 / 100 / 116</span>
<span class="w">        </span><span class="n">option</span><span class="w"> </span><span class="n">band</span><span class="w"> </span><span class="s1">'5g'</span>
<span class="w">        </span><span class="n">option</span><span class="w"> </span><span class="n">htmode</span><span class="w"> </span><span class="s1">'HE80'</span>
<span class="w">        </span><span class="n">option</span><span class="w"> </span><span class="n">cell_density</span><span class="w"> </span><span class="s1">'1'</span>
<span class="w">        </span><span class="n">option</span><span class="w"> </span><span class="n">country</span><span class="w"> </span><span class="s1">'PT'</span>

<span class="n">config</span><span class="w"> </span><span class="n">wifi</span><span class="o">-</span><span class="n">iface</span><span class="w"> </span><span class="s1">'default_radio1'</span>
<span class="w">        </span><span class="n">option</span><span class="w"> </span><span class="n">device</span><span class="w"> </span><span class="s1">'radio1'</span>
<span class="w">        </span><span class="n">option</span><span class="w"> </span><span class="n">network</span><span class="w"> </span><span class="s1">'lan'</span>
<span class="w">        </span><span class="n">option</span><span class="w"> </span><span class="n">mode</span><span class="w"> </span><span class="s1">'ap'</span>
<span class="w">        </span><span class="n">option</span><span class="w"> </span><span class="n">ssid</span><span class="w"> </span><span class="s1">'7 5GHz'</span>
<span class="w">        </span><span class="n">option</span><span class="w"> </span><span class="n">encryption</span><span class="w"> </span><span class="s1">'sae'</span>
<span class="w">        </span><span class="n">option</span><span class="w"> </span><span class="n">key</span><span class="w"> </span><span class="s1">'...'</span>
<span class="w">        </span><span class="n">option</span><span class="w"> </span><span class="n">ocv</span><span class="w"> </span><span class="s1">'1'</span>
<span class="w">        </span><span class="n">option</span><span class="w"> </span><span class="n">ieee80211r</span><span class="w"> </span><span class="s1">'1'</span>
<span class="w">        </span><span class="n">option</span><span class="w"> </span><span class="n">mobility_domain</span><span class="w"> </span><span class="s1">'beef'</span>
<span class="w">        </span><span class="n">option</span><span class="w"> </span><span class="n">ft_over_ds</span><span class="w"> </span><span class="s1">'0'</span>
<span class="w">        </span><span class="n">option</span><span class="w"> </span><span class="n">dtim_period</span><span class="w"> </span><span class="s1">'3'</span>
<span class="w">        </span><span class="n">option</span><span class="w"> </span><span class="n">ieee80211k</span><span class="w"> </span><span class="s1">'1'</span>
<span class="w">        </span><span class="n">option</span><span class="w"> </span><span class="n">wnm_sleep_mode</span><span class="w"> </span><span class="s1">'1'</span>
<span class="w">        </span><span class="n">option</span><span class="w"> </span><span class="n">wnm_sleep_mode_no_keys</span><span class="w"> </span><span class="s1">'1'</span>
<span class="w">        </span><span class="n">option</span><span class="w"> </span><span class="n">bss_transition</span><span class="w"> </span><span class="s1">'1'</span>
<span class="w">        </span><span class="n">option</span><span class="w"> </span><span class="n">proxy_arp</span><span class="w"> </span><span class="s1">'1'</span>
</code></pre></div>

<p>The rationale is simple enough:</p>
<ul>
<li><code>HE160</code> is fine if you care more about peak throughput than roaming, but I don&#8217;t.</li>
<li>Fixed channels make overlap and neighbour relationships much easier to reason about.</li>
<li><code>802.11r</code> only really makes sense if all APs serving a given SSID are configured consistently, so tidiness matters more than &#8220;advanced&#8221; settings.</li>
<li>Keeping the 2.4GHz network as the compatibility lane for older and IoT devices is still the right trade-off here.</li>
</ul>
<p>So far this seems to have paid off. The 5GHz metrics now look much more sensible, and the APs are behaving in a way that feels a lot closer to what I wanted in the first place.</p>
<p>The other thing I finally got around to doing was centralising the AP metrics. I already had <a href="https://openwrt.org/docs/guide-user/luci/luci_app_statistics?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;"><code>luci-app-statistics</code></a> and <code>collectd</code> on all of them, so rather than inventing some sort of controller story for a handful of dumb APs, I just pointed them all at the Graphite instance I already had on the network. This turned out to be mildly more annoying than expected, because although <code>collectd-mod-write-graphite</code> is available, the LuCI-side renderer for it wasn&#8217;t present on these installs &#8211; so adding a UCI block under <code>luci_statistics</code> wasn&#8217;t enough to get a runtime config generated.</p>
<p>The package installation itself is straightforward:</p>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><code>opkg<span class="w"> </span>update
opkg<span class="w"> </span>install<span class="w"> </span>collectd-mod-write-graphite
</code></pre></div>

<p>The part that actually mattered was dropping a native <code>collectd</code> include file into place:</p>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><code>LoadPlugin<span class="w"> </span>write_graphite
<span class="nt">&lt;Plugin</span><span class="w"> </span><span class="err">write_graphite</span><span class="nt">&gt;</span>
<span class="w">  </span><span class="nt">&lt;Node</span><span class="w"> </span><span class="err">"graphite"</span><span class="nt">&gt;</span>
<span class="w">    </span>Host<span class="w"> </span>"192.168.1.250"
<span class="w">    </span>Port<span class="w"> </span>"2003"
<span class="w">    </span>Protocol<span class="w"> </span>"tcp"
<span class="w">    </span>Prefix<span class="w"> </span>"collectd."
<span class="w">    </span>Postfix<span class="w"> </span>""
<span class="w">    </span>StoreRates<span class="w"> </span>true
<span class="w">    </span>AlwaysAppendDS<span class="w"> </span>false
<span class="w">    </span>EscapeCharacter<span class="w"> </span>"_"
<span class="w">  </span><span class="nt">&lt;/Node&gt;</span>
<span class="nt">&lt;/Plugin&gt;</span>
</code></pre></div>

<p>That lives in:</p>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><code>/etc/collectd/conf.d/write_graphite.conf
</code></pre></div>

<p>and after that it was just a matter of restarting <code>collectd</code>:</p>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><code>/etc/init.d/collectd<span class="w"> </span>restart
</code></pre></div>

<p>That was enough to get all the APs reporting centrally, which makes comparing station counts, signal levels and bitrate across the house a lot easier than peering at each box individually.</p>
<p>If anything, this only reinforced my original conclusion: there is still no compelling reason to replace a handful of perfectly good <a href="os/linux/openwrt" rel="nofollow" style="color: #0000cc;">OpenWRT</a> access points with a controller ecosystem when a bit of channel planning and a central metrics sink get you most of the way there.</p>
<br/>
]]></content>
<category term="cudy" label="cudy" />
<category term="homelab" label="homelab" />
<category term="networking" label="networking" />
<category term="openwrt" label="openwrt" />
<category term="ax3000" label="ax3000" />
<category term="hardware" label="hardware" />
<category term="m3000" label="m3000" />
<category term="wifi" label="wifi" />
<category term="reviews" label="reviews" />
</entry>
<entry>
<title>Clojure(Script)</title>
<id>https://taoofmac.com/space/dev/clojure?utm_content=atom</id>
<published>2013-08-20T17:09:00+00:00</published>
<updated>2026-04-11T08:16:16+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/dev/clojure?utm_content=atom"/>
<content type="html"><![CDATA[
<p class="lead">Clojure is a <a href="/space/dev/lisp" rel="next" style="color: #0000cc;">LISP</a> dialect that targets the <a href="/space/dev/java" rel="next" style="color: #0000cc;">Java</a> VM - but that also happens to have a number of other back-ends, including a <a href="/space/dev/javascript" rel="next" style="color: #0000cc;">JavaScript</a> one. </p>
<p/><div class="message error" role="alert">
    <p><b>Error:</b> Could not parse 'table.yaml'</p>
<pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;">while parsing a block mapping
  in "&lt;byte string&gt;", line 2, column 1
did not find expected key
  in "&lt;byte string&gt;", line 438, column 1
</pre>
</div>
<br/>
]]></content>
<category term="lisp" label="lisp" />
<category term="clojurescript" label="clojurescript" />
<category term="clojure" label="clojure" />
<category term="development" label="development" />
</entry>
<entry>
<title>Window Managers</title>
<id>https://taoofmac.com/space/apps/window_managers?utm_content=atom</id>
<published>2010-08-05T21:43:06+00:00</published>
<updated>2026-04-10T11:03:57+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/apps/window_managers?utm_content=atom"/>
<content type="html"><![CDATA[
<p class="lead">Window managers on <a href="/space/com/apple/macos" rel="next" style="color: #0000cc;">macOS</a> (and <a href="/space/com/microsoft/windows" rel="next" style="color: #0000cc;">Windows</a>) are auxiliary programs that try to complement the system&#8217;s own handling of windows, and are not as powerful as <a href="/space/apps/x11" rel="next" style="color: #0000cc;">X11</a> window managers. However, there are a few exceptions, and as I started using bigger and bigger (and more) displays I&#8217;ve been using them on a daily basis.</p>
<p>My requirements change over time and in different circumstances (sometimes I need an automatic tiling window manager, sometimes I just want good window snapping to predefined zones), so I experiment a fair bit&#8211;the listing below contains most of my favorites over time in various operating systems.</p>
<a class="anchor" id="anchor-resources" rel="anchor" href="/space/apps/window_managers#resources" style="color: #0000cc;"><h2 id="resources">Resources</h2></a><p>Apps are listed as <em>primarily</em> keyboard or mouse driven even though most support both kinds of input. What matters in that classification is the <em>fastest</em> way to arrange windows.</p>
<p>Some commercial solutions (and potentially insecure Mac solutions like <code>yabai</code>, which require you to explicitly disable System Integrity Protection) are <em>intentionally</em> ignored.</p>
<p/><table class="compact" style="background: transparent;margin: 0px;padding: 0px;border-collapse: collapse;font-size: 90%;">
<thead>
<tr style="border-top: 1px solid #aaa;">
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Category</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Platform</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Link</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Notes</th>
</tr>
</thead>
<tbody style="border-top: 2px solid black;border-bottom: 2px solid black;">
<tr style="border-top: 1px solid #aaa;">
<td rowspan="12" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Automatic Tiling</td>
<td rowspan="4" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Linux</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/YaLTeR/niri?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">niri</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A scrollable tiling Wayland compositor inspired in PaperWM</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/hyprwm/Hyprland?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Hyprland</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a highly customizable dynamic tiling Wayland compositor</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/leukipp/cortile?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">cortile</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>An auto tiling manager that provides tiling window management atop existing window managers</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/paperwm/PaperWM?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">PaperWM</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A scrollable tiling GNOME Shell extension</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="5" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Windows</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/LGUG2Z/komorebi?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">komorebi</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Seems to support a number of common tiled layouts</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/dalyIsaac/Whim?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Whim</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>i3-inspired, configured using C# scripting</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/glsorre/amethystwindows?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Amethyst Windows</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>An XMonad-like tiling window manager for Windows</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/glzr-io/glazewm?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">glazewm</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>i3-inspired with rules for specific windows or monitors</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/rickbutton/workspacer?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Workspacer</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Also XMonad-like, configurable via C#</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="4" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">macOS</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/acsandmann/rift?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">rift</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>i3-inspired, supports stacking and binary space partitioning as well as Lua scripting</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/ianyh/Amethyst?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Amethyst</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>An XMonad-like tiling window manager for the Mac that I quite like.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://mactiler.com/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">MacTiler</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A simple tiling window manager for macOS with the ability to preserve window layouts between monitors</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">CLI</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/junosan/tile?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">tile</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a CLI tool that can be used to script window manipulation</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="6" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Keyboard Driven</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Windows</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/pit-ray/win-vind?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">win-vind</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>vim keys everywhere</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="6" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">macOS</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/dough654/omachy?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Omachy</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>opinionated Omarchy-inspired macOS setup tool that configures a keyboard-driven tiling workflow.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/jurplel/InstantSpaceSwitcher?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">InstantSpaceSwitcher</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A native utility for instant macOS Space switching that skips the animation without disabling SIP</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/rcarmo/ShiftIt?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">ShiftIt</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>My fork of ShiftIt, which was somewhat popular among my colleagues at SAPO.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://magnet.crowdcafe.com?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Magnet</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>simple, straightforward, very effective, available in the App Store</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://manytricks.com/moom/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Moom</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>My 2012-2021 window manager, which allows you to store predefined layouts but wasn&#8217;t scriptable. The 2024 edition adds FancyZones-like functionality and a bit more flexibility.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Manual Tiling</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/nikitabobko/AeroSpace?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">AeroSpace</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>My 2024 favorite for tiling. Provides a fast, snappy i3-like tiling window manager for macOS with its own workspace support, and the default config uses <code>HJKL</code> as control keys. Only issue I have with it is that it requires relatively new macOS versions, and I sometimes use an older Mac laptop.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="11" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Mouse Driven</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Linux</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/domferr/tilingshell?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">tilingshell</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a GNOME extension that provides an absolutely excellent FancyZones-like functionality</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Windows</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://docs.microsoft.com/en-us/windows/powertoys/fancyzones?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">FancyZones</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Arguably the best Windows 10 PowerToy, has awesome zone snapping features that have (so far) no equivalent. Excellent for multiple displays.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="14" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">macOS</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/MrKai77/Loop?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Loop</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Uses a radial menu to manage windows</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/dgurkaynak/Penc?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Penc</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a trackpad-oriented window manager with gestures for moving, resizing and snapping windows</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/noah-nuebling/mac-mouse-fix?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">mac-mouse-fix</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an open-source utility for improving mouse behavior and button mappings on macOS</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/projectstorm/dynamouse?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Dynamouse</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>not really a window manager, but a way to associate multiple pointing devices with specific displays</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://highlyopinionated.co/swish/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Swish</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a gesture-driven window manager with window snapping and some grid functionality</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://hookshot.app?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Hookshot</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Actually a mix of keyboard and mouse driven actions, but very much mouse driven with quick actions.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://mizage.com/divvy/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Divvy</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>traditional, quick mouse-drawn window snapping (Moom implements a similar approach)</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://thelasso.app?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Lasso</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>mouse-driven, grid-oriented, with support for custom layouts</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://www.folivora.ai/bettersnaptool?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">BetterSnapTool</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>My 2024 favorite for FancyZones-like functionality on the Mac.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="5" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Scriptable</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/J-x-Z/cocoa-way?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Cocoa Way</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>native macOS Wayland compositor written in Rust using Smithay, enabling seamless Linux app streaming on macOS without XQuartz.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/agzam/spacehammer?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">spacehammer</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A prebuilt, highly sophisticated Fennel configuration for Hammerspoon</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/apandhi/Autumn?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Autumn</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a nice, also JavaScript scriptable window manager that includes an IDE. In May 2021, the IDE hangs up weirdly in Big Sur, so I opted for Phoenix instead.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/kasper/phoenix?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Phoenix</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>My 2021 favorite, fully scriptable in JavaScript. Can replace both Moom and Amethyst for me with <a href="https://gist.github.com/rcarmo/5132874cdaf2755e42907508802e864f?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">this config</a>.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://www.hammerspoon.org?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Hammerspoon</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Scriptable in Lua or Fennel</p></td>
</tr>
</tbody>
</table>
<br/>
]]></content>
<category term="mouse" label="mouse" />
<category term="keyboard" label="keyboard" />
<category term="tiling" label="tiling" />
<category term="i3" label="i3" />
<category term="xmonad" label="xmonad" />
<category term="manager" label="manager" />
<category term="window" label="window" />
<category term="gnome" label="gnome" />
</entry>
<entry>
<title>Model Context Protocol</title>
<id>https://taoofmac.com/space/ai/mcp?utm_content=atom</id>
<published>2025-05-01T17:30:00+00:00</published>
<updated>2026-04-10T11:03:57+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/ai/mcp?utm_content=atom"/>
<content type="html"><![CDATA[
<p class="lead">This page is a collection of notes and links related to the Model Context Protocol (<a href="https://modelcontextprotocol.io/introduction?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">MCP</a>), a proposed standard for extending managing context in large language models (<a href="/space/ai/llm" rel="next" style="color: #0000cc;">LLMs</a>) via external tools.</p>
<a class="anchor" id="anchor-resources" rel="anchor" href="/space/ai/mcp#resources" style="color: #0000cc;"><h2 id="resources">Resources</h2></a><p/><table class="compact" style="background: transparent;margin: 0px;padding: 0px;border-collapse: collapse;font-size: 90%;">
<thead>
<tr style="border-top: 1px solid #aaa;">
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Field</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Category</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Date</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Link</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Notes</th>
</tr>
</thead>
<tbody style="border-top: 2px solid black;border-bottom: 2px solid black;">
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Audio Processing</td>
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Integration</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2026</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/shiehn/sas-audio-processor?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">SAS Audio Processor</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Exposes 25 DeclarAgent-based MCP tools for trimming, normalizing, compressing, EQ/reverb/pitch-shift/time-stretch, analysis, and MIDI extraction; accepts WAV inputs and emits structured JSON for Claude/MCP clients.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="3" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Automation</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2025</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/steipete/macos-automator-mcp?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">macos-automator-mcp</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a macOS Node server that exposes AppleScript and JXA to MCP clients</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Server Implementation</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2026</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/mitsuhiko/playwrightess-mcp?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">playwrightess-mcp</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an experimental MCP server that exposes a persistent Playwright JavaScript eval environment via a single <code>playwright_eval</code> tool</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2025</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/hemanth/paws-on-mcp?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">paws-on-mcp</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>yet another Python MCP server</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Context Management</td>
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Integration</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2026</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/mksglu/claude-context-mode?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">claude-context-mode</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an MCP server that adds context mode support and tooling for Claude workflows</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Document Processing</td>
<td rowspan="8" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2025</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/microsoft/markitdown?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">markitdown</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a document-to-Markdown conversion tool/library useful for ingestion pipelines</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Documentation</td>
<td rowspan="6" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Server Implementation</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/Ami3466/tomcp?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">toMCP</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>turns any website or docs into an MCP server by extracting clean Markdown</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Extension Architecture</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/tuananh/hyper-mcp?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">hyper-mcp</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a powerful MCP server that leverages WebAssembly plugins</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Graphics</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/pranav-deshmukh/blender-mcp?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">blender-mcp</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a server that enables real-time interaction between Large Language Models and Blender using JSON over TCP.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/rahulgarg123/openscad-mcp?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">openscad-mcp</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an MCP server for OpenSCAD that enables design automation and AI-assisted 3D modeling</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Integration</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/iosifache/annas-mcp?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">annas-mcp</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an MCP server (and CLI) for searching and downloading documents from Anna&#8217;s Archive</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/santhoshravindran7/Fabric-Analytics-MCP?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Fabric-Analytics-MCP</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an MCP server that integrates with Microsoft Fabric for analytics tasks</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">LLM Interoperability</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Integration</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/bartolli/mcp-llm-bridge?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">mcp-llm-bridge</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a bridge that connects MCP servers to OpenAI-compatible language models through a standardized interface.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="3" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Language Bindings</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Frameworks</td>
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2026</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/PrefectHQ/fastmcp?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">FastMCP</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>the fast, Pythonic way to build MCP servers and clients.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Server Implementation</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/mehmetbaykar/swift-fast-mcp?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">swift-fast-mcp</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Swift builder API for quickly assembling MCP servers</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2025</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/metoro-io/mcp-golang?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">mcp-golang</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Go-based MCP server implementation</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Multi-agent Systems</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Frameworks</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/inngest/agent-kit?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">agent-kit</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an MCP framework for building multi-agent networks</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">RAG</td>
<td rowspan="3" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Server Implementation</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2026</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/tobi/qmd?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">qmd</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>local markdown-first knowledge indexing/search engine with hybrid BM25/vector/reranking and MCP transport for Claude-compatible clients, plus context-aware retrieval via CLI.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2025</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/ggozad/haiku.rag?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">haiku.rag</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an agentic RAG toolkit that can run as an MCP server (document indexing, search, QA)</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Reverse Engineering</td>
<td rowspan="3" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2026</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/bethington/ghidra-mcp?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">ghidra-mcp</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an MCP server that integrates with Ghidra for reverse engineering workflows</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Tooling</td>
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Integration</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/modelcontextprotocol/conformance?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">conformance</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A conformance test framework and GitHub Action for validating MCP clients and servers against the specification</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/postrv/forgemax?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Forgemax</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a code-mode MCP gateway that collapses many tool schemas into two tools (search and execute) via a sandboxed V8 JavaScript runner</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Visual Programming</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Server Implementation</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2025</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/joolui/node-red-mcp?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">node-red-mcp</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Node-RED MCP server with HomeAssistant understanding</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">WebMCP</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Demo</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2026</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/Leanmcp-Community/music-composer-webmcp?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">music-composer-webmcp</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a WebMCP demo that lets agents compose music in a browser-based sequencer via WebMCP tools</p></td>
</tr>
</tbody>
</table>
<br/>
]]></content>
<category term="llm" label="llm" />
<category term="mcp" label="mcp" />
<category term="ai" label="ai" />
</entry>
<entry>
<title>Python</title>
<id>https://taoofmac.com/space/dev/python?utm_content=atom</id>
<published>2007-04-15T10:44:37+00:00</published>
<updated>2026-04-13T18:32:30+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/dev/python?utm_content=atom"/>
<content type="html"><![CDATA[
<p class="lead"><a href="http://www.python.org?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Python</a> is one of my favorite programming languages due to its terseness and amazing flexibility, and after decades using it I find it quite amusing that it is now the language of choice for data science and machine learning.</p>
<a class="anchor" id="anchor-my-stuff" rel="anchor" href="/space/dev/python#my-stuff" style="color: #0000cc;"><h2 id="my-stuff">My Stuff</h2></a><p/><table class="compact" style="background: transparent;margin: 0px;padding: 0px;border-collapse: collapse;font-size: 90%;">
<thead>
<tr style="border-top: 1px solid #aaa;">
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Year</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Item</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Notes</th>
</tr>
</thead>
<tbody style="border-top: 2px solid black;border-bottom: 2px solid black;">
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2016</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/rcarmo/sushy?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Sushy</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>my current wiki engine</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2015</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/rcarmo/rss2imap?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">rss2imap</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>The way I used read my news a while back</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2009</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/Projects/PNGCanvas" rel="nofollow" style="color: #0000cc;">PNG Canvas</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a native Python <a href="PNG" rel="nofollow" style="color: #0000cc;">PNG</a> creation module,
suitable for use in Google App Engine</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2007</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/Projects/Yaki" rel="nofollow" style="color: #0000cc;">Yaki</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>my previous wiki engine</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2006</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/Projects/MailArchive" rel="nofollow" style="color: #0000cc;">MailArchive</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a quick hack to file web pages as <a href="MIME" rel="nofollow" style="color: #0000cc;">MIME</a> compliant e-mail messages.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="3" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2005</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/Projects/PicoStats" rel="nofollow" style="color: #0000cc;">PicoStats</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a minimalist Apache log parser.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/Projects/imapbackup" rel="nofollow" style="color: #0000cc;">IMAP Backup</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>another quick hack that apparently filled a long-standing need.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/Python/Grimoire" rel="nofollow" style="color: #0000cc;">The Python Grimoire</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>which I converted into <a href="http://www.tiddlywiki.com/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">TiddlyWiki</a> format</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="3" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2004</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/Projects/newspipe" rel="nofollow" style="color: #0000cc;">newspipe</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>which I used daily for a couple of years and occasionally contributed to</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/projects/picorendezvous" rel="next" style="color: #0000cc;">PicoRendezvous.py</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a minimalist (and dumb) <a href="/space/com/apple/bonjour" rel="nofollow" style="color: #0000cc;">Bonjour</a> / Rendezvous client</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/apps/growl" rel="next" style="color: #0000cc;">Growl</a> native protocol <a href="/space/projects/netgrowl" rel="next" style="color: #0000cc;">implementation</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>this spawned numerous variants, including a
<a href="/space/projects/regrowl" rel="nofollow" style="color: #0000cc;">proxy</a>.</p></td>
</tr>
</tbody>
</table>
<a class="anchor" id="anchor-resources" rel="anchor" href="/space/dev/python#resources" style="color: #0000cc;"><h2 id="resources">Resources</h2></a><p/><div class="message error" role="alert">
    <p><b>Error:</b> Could not parse 'table.yaml'</p>
<pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;">while parsing a block mapping
  in "&lt;byte string&gt;", line 2, column 1
did not find expected key
  in "&lt;byte string&gt;", line 1682, column 1
</pre>
</div>
<a class="anchor" id="anchor-techniques" rel="anchor" href="/space/dev/python#techniques" style="color: #0000cc;"><h2 id="techniques">Techniques</h2></a><ul>
<li><a href="/media/dev/python/cJjZP8v6tb5vfwv6nP2OCVcwbW4=/daemon.py.txt" rel="media" style="color: #0000cc;">daemon.py</a>, an example daemon script.</li>
<li><a href="http://www.python.org/doc/current/lib/module-pydoc.html?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Pydoc</a>
  built-in Web help, anytime, anywhere</li>
<li><a href="http://www.norvig.com/spell-correct.html?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">How to Write a Spelling Corrector</a> - an
  interesting technique that can come in handy to fix/suggest search
  terms, etc.</li>
<li><a href="http://phillipinbahia.blogspot.com/2006/08/python-webcam-color-track.html?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Python Webcam Color Track</a></li>
<li><a href="http://gumuz.looze.net/wordpress/index.php/archives/2005/06/06/python-webcam-fun-motion-detection/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Python webcam fun - motion detection</a></li>
</ul>
<a class="anchor" id="anchor-notes" rel="anchor" href="/space/dev/python#notes" style="color: #0000cc;"><h2 id="notes">Notes</h2></a><a class="anchor" id="anchor-setting" rel="anchor" href="/space/dev/python#setting" style="color: #0000cc;"><h3 id="setting-distutils-paths-in-os-x">Setting <code>distutils</code> paths in OS X</h3></a><p>Create a file named <code>.pydistutils.cfg</code> in your home directory with the
following contents and set <code>$PATH</code> accordingly:</p>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><span class="k">[install]</span>
<span class="na">install_lib</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">~/Library/Python/$py_version_short/site-packages</span>
<span class="na">install_scripts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">~/Library/Python/$py_version_short/bin</span>
<span class="na">install_data</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">~/Library/Python/$py_version/share</span>
</pre></div><p>This will install packages to your <code>Library</code> folder rather than to the
system directory, saving you the trouble to use <code>sudo</code> or risking
messing with the system installation. Of course <code>virtualenv</code> does a
better job for keeping track of project-specific dependencies, but this
is great for common/complex dependencies and is sure to survive
operating system upgrades.</p>
<p>And then you can use <code>easy_install</code> or <code>pip install --user</code> with
impunity, although you might need to do something like:</p>
<div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><code><span class="nv">ARCHFLAGS</span><span class="o">=</span>-Wno-error<span class="o">=</span>unused-command-line-argument-hard-error-in-future<span class="w"> </span>easy_install<span class="w"> </span>pandas
</code></pre></div>

<p>&#8230;for getting around some <code>clang</code> oddities.</p>
<a class="anchor" id="anchor-instant-web-server-on-port-8000-2-x" rel="anchor" href="/space/dev/python#instant-web-server-on-port-8000-2-x" style="color: #0000cc;"><h3 id="instant-web-server-on-port-8000-2x">Instant Web Server on port 8000 (2.x)</h3></a><div class="highlight"><pre style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Cascadia Code', 'Cascadia Mono', 'Consolas', 'DejaVu Sans Mono', 'Segoe UI Mono', 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro','Fira Code','Fira Mono', 'Droid Sans Mono', 'Courier New', monospace !important;"><span/><span class="ch">#!/bin/sh</span>
python<span class="w"> </span>-c<span class="w"> </span><span class="s1">'__import__("SimpleHTTPServer").test()'</span>
</pre></div><a class="anchor" id="anchor-totally-unrelated" rel="anchor" href="/space/dev/python#totally-unrelated" style="color: #0000cc;"><h2 id="totally-unrelated">Totally Unrelated</h2></a><ul>
<li><a href="http://www.style.org/unladenswallow/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Estimating the Airspeed of an Unladen Swallow</a></li>
</ul>
<br/>
]]></content>
<category term="python" label="python" />
<category term="scripting" label="scripting" />
<category term="programming" label="programming" />
<category term="science" label="science" />
<category term="data" label="data" />
<category term="development" label="development" />
</entry>
<entry>
<title>Xteink X4</title>
<id>https://taoofmac.com/space/hw/xteink/x4?utm_content=atom</id>
<published>2026-04-09T13:19:00+00:00</published>
<updated>2026-04-11T08:16:16+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/hw/xteink/x4?utm_content=atom"/>
<content type="html"><![CDATA[
<p class="lead">The Xteink X4 is a small open e-ink reader that has become more interesting because of the growing CrossPoint ecosystem around it. The hardware itself is attractive mostly as a hackable reading device: simple, portable, and now backed by a fairly active alternative firmware community&#8212;one that feels more relevant now that it is a device <a href="/space/reviews/2026/04/04/1800" rel="next" style="color: #0000cc;">that I recently got</a>.</p>
<p>The most sensible starting point is the upstream CrossPoint Reader firmware, then branch out into more specialized forks only if you need particular UX changes, CJK support, or more experimental features.</p>
<a class="anchor" id="anchor-resources" rel="anchor" href="/space/hw/xteink/x4#resources" style="color: #0000cc;"><h2 id="resources">Resources</h2></a><p/><table class="compact" style="background: transparent;margin: 0px;padding: 0px;border-collapse: collapse;font-size: 90%;">
<thead>
<tr style="border-top: 1px solid #aaa;">
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Category</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Date</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Link</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Notes</th>
</tr>
</thead>
<tbody style="border-top: 2px solid black;border-bottom: 2px solid black;">
<tr style="border-top: 1px solid #aaa;">
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Firmware</td>
<td rowspan="3" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2026</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/crosspoint-reader/crosspoint-reader?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">CrossPoint Reader</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Active upstream firmware for the Xteink X4 with the broadest feature set and the safest place to start before trying more specialized forks.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/yattsu/biscuit?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">biscuit</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Alternative firmware for the ESP32-C3-based Xteink X4 e-paper reader, focused on the device hardware rather than the broader CrossPoint reader stack.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Guides</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://learn.adafruit.com/circuitpython-on-the-xteink-x4-ereader?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">CircuitPython on the Xteink X4 eReader</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Adafruit guide for running CircuitPython on the ESP32-C3-based Xteink X4, including installation, web workflow and display demos</p></td>
</tr>
</tbody>
</table>
<br/>
]]></content>
<category term="crosspoint" label="crosspoint" />
<category term="eink" label="eink" />
<category term="hardware" label="hardware" />
<category term="xteink" label="xteink" />
<category term="ereader" label="ereader" />
</entry>
<entry>
<title>Obsidian</title>
<id>https://taoofmac.com/space/apps/obsidian?utm_content=atom</id>
<published>2022-08-03T12:00:00+00:00</published>
<updated>2026-04-09T18:14:07+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link rel="alternate" xml:base="https://taoofmac.com" type="text/html" href="https://taoofmac.com/space/apps/obsidian?utm_content=atom"/>
<content type="html"><![CDATA[
<p class="lead"><a href="http://obsidian.md?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Obsidian</a> is a very popular cross-platform <a href="/space/gtd/notes" rel="next" style="color: #0000cc;">note-taking</a> application that allows you to use plain <a href="/space/markup/markdown" rel="next" style="color: #0000cc;">Markdown</a> as a very flexible notes database and that I have somewhat begrudgingly adopted as a key part of my workflow during 2025.</p>
<p>I don&#8217;t exactly remember when I started using Obsidian daily&#8212;I suspect it was when I finally figured out how to use it with <a href="/space/apps/syncthing" rel="next" style="color: #0000cc;">SyncThing</a> on my iPad, but another (just as important) milestone I remember was when I got <a href="https://github.com/mgmeyers/obsidian-kanban?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">the Kanban plugin</a> working, since that gave me a sensible cross-platform way to manage my to-dos across Mac and Linux (Reminders just doesn&#8217;t cut it in that scenario).</p>
<p>Don&#8217;t get me wrong, <em>I still don&#8217;t like Obsidian</em>. It is one of the many Electron-based nightmares that we have to run on our devices because, unfortunately, there isn&#8217;t anything demonstrably more developer-friendly (note that I didn&#8217;t say <em>better</em>).</p>
<p>In particular, I don&#8217;t like that it&#8217;s not open source, since despite not minding paying for software I think that anything I commit to using for multiple years should last &#8220;forever&#8221;. I don&#8217;t like how it approaches linking and metadata, and I absolutely didn&#8217;t like that it tries to tie you to a proprietary syncing service.</p>
<p>Despite all that, I use it daily on Linux, macOS, and iOS, and the combination of cross-platform access and the Kanban workflow fits my day-to-day needs perfectly.</p>
<a class="anchor" id="anchor-pluses" rel="anchor" href="/space/apps/obsidian#pluses" style="color: #0000cc;"><h2 id="pluses">Pluses</h2></a><ul>
<li>The Kanban plugin has turned into my master to-do list, and I never managed to get Reminders to work cross-platform in the same way.</li>
<li>There is a plugin that allows me to have my <a href="/space/reviews/2025/06/14/1530" rel="next" style="color: #0000cc;">Supernote Nomad</a> notes show up in Obsidian, which is a nice trick. In fact, I can even run Obsidian on the Nomad itself.</li>
<li>The Markdown editor essentially disappears when you&#8217;re editing, which I like because it lets me focus on the content rather than the formatting. Somehow <a href="/space/apps/ia_writer" rel="next" style="color: #0000cc;">iA Writer</a> feels less polished, which is weird&#8212;I suspect it&#8217;s about it not being truly WYSIWYG.</li>
<li>Obsidian&#8217;s secret power on mobile is the iOS swiping keyboard&#8212;I&#8217;m able to thumb type quite quickly with it, to the point where it&#8217;s just ridiculously easy to take an idle moment to jot down ideas.</li>
<li>The Data Tables feature is stupendously powerful, and I am actively resisting using it too much because I know it will make my notes less portable.</li>
</ul>
<a class="anchor" id="anchor-minuses" rel="anchor" href="/space/apps/obsidian#minuses" style="color: #0000cc;"><h2 id="minuses">Minuses</h2></a><p>There are enough rough edges that I still keep coming up against the same issues:</p>
<ul>
<li>Its WikiLinks can&#8217;t be relative, or link to a page/folder rather than an <code>.md</code> file.</li>
<li>Electron is a resource hog and feels sluggish on older hardware, so I end up editing in <a href="/space/cli/vim" rel="next" style="color: #0000cc;">Vim</a> or another editor quite often.</li>
<li>It cannot deal with front-matter &#8220;properly&#8221; (at least not the way I want it to), so importing this site into it never worked (and it is highly likely that it never will). That also means I can&#8217;t use it as a primary editor for this site directly, or, in fact, for a few <a href="https://www.mkdocs.org?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">MkDocs</a>-based sites I maintain.</li>
<li>It&#8217;s proprietary in key ways (syncing, mobile app limitations, not open source).</li>
<li>The Canvas feature is a nice idea, but it is nowhere near as good as a proper mind-mapping app like <a href="/space/apps/xmind" rel="next" style="color: #0000cc;">XMind</a> (or even Apple&#8217;s Freeform).</li>
<li>The graph view is cute, but not really useful for anything other than showing off.</li>
<li>Setting a common look and feel across platforms is tricky, especially on iOS where CSS tweaks are limited.</li>
<li>Plugins are <em>very</em> brittle, and hit-or-miss in quality. After a few months of trying out various plugins, I have no clue as to whether my current set of plugins will be maintained in the future (a couple that I use already bear deprecation notices, and I certainly don&#8217;t want to maintain them).</li>
<li>It really doesn&#8217;t understand about folders, or about &#8220;one note per folder with all attachments&#8221; approaches. With the right plugins you can just paste an image into a note and it will store the attachment in the same folder, but it still feels hacky.</li>
</ul>
<a class="anchor" id="anchor-workarounds" rel="anchor" href="/space/apps/obsidian#workarounds" style="color: #0000cc;"><h2 id="workarounds">Workarounds</h2></a><p>I eventually worked out a set of alternatives and workarounds that make Obsidian usable for me:</p>
<ul>
<li>On iOS you can use M&#246;bius Sync to keep a local folder and then use <a href="/space/apps/syncthing" rel="next" style="color: #0000cc;">SyncThing</a> to sync a single vault. You do have to be careful about it, since the mobile app is <em>way</em> behind the desktop apps in functionality and feels artificially gimped&#8212;for instance, you cannot pick a vault location at will, so you need to be creative with workarounds (this is even true if, like me, you&#8217;re used to iOS folder sharing).</li>
<li>Thanks to the <a href="https://github.com/platers/obsidian-linter?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Linter plugin</a>, I can enforce a set of formatting and metadata rules that make my notes consistent across platforms and editors, even if Obsidian itself doesn&#8217;t really understand them.</li>
<li>I have a little script that takes an Obsidian note and moves it across to this site, where I finish editing it and publish it using VS Code. In fact, if VS Code had a decent live Markdown editor and a comparable Kanban editor, I might just use that instead of Obsidian altogether.</li>
</ul>
<p>I suspect that some day I will take something like <a href="https://foambubble.github.io/foam/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Foam</a> and hack it into a workable notes system that I can run in <a href="/space/apps/code" rel="next" style="color: #0000cc;">VS Code</a>, but for now Obsidian is &#8220;good enough&#8221; despite its many flaws.</p>
<a class="anchor" id="anchor-resources" rel="anchor" href="/space/apps/obsidian#resources" style="color: #0000cc;"><h2 id="resources">Resources</h2></a><p/><table class="compact" style="background: transparent;margin: 0px;padding: 0px;border-collapse: collapse;font-size: 90%;">
<thead>
<tr style="border-top: 1px solid #aaa;">
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Category</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Date</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Link</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Notes</th>
</tr>
</thead>
<tbody style="border-top: 2px solid black;border-bottom: 2px solid black;">
<tr style="border-top: 1px solid #aaa;">
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Alternatives</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2026</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/Michaelliv/napkin?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Napkin</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>local-first CLI for Obsidian vaults that operates directly on markdown files without the Obsidian app, designed as a memory system for AI agents using progressive disclosure.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2024</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/siyuan-note/siyuan?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">siyuan</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a privacy-first personal knowledge management system that supports block-level references and Markdown WYSIWYG editing.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="6" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Plugins</td>
<td rowspan="4" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2026</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/jrcruciani/obsidian-memory-for-ai?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Memory for AI</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Plugin that gives Obsidian agents a dedicated, persistent memory interface to retain and recall conversation context and project notes across sessions.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/kavinsood/yaos?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">YAOS</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Zero-terminal real-time sync engine for Obsidian using your own Cloudflare Worker instead of conventional file sync or self-hosted database-heavy setups.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/kepano/obsidian-skills?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">obsidian-skills</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Agent Skills bundle for Obsidian that teaches compatible agents to edit Obsidian Markdown, Bases, JSON Canvas, and interact with vaults via the Obsidian CLI.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/vieiraae/obsidian-sidekick?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Sidekick</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>AI-powered assistant panel that plugs into GitHub Copilot or BYOK providers, bundles agents/skills/tools/prompts/triggers, offers ghost-text autocomplete and editor context menu actions, and boots a <code>sidekick/</code> folder with sample configs.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2025</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/glowingjade/obsidian-smart-composer?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Smart Composer</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Probably the nicest, most straightforward LLM plugin for revising grammar and overall formatting. Supports LiteLLM and custom endpoints without any issues.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/vrtmrz/obsidian-livesync?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">livesync</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Obsidian plugin for WebRTC-based real-time collaboration and synchronization</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Publishing</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2026</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/soestin/Obsidian-Web-Sync-R2?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Obsidian Web Sync R2</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Publish an Obsidian vault as a website using Cloudflare Workers and R2, synced via Remotely Sync.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2024</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/quartz.jzhao.xyz" rel="nofollow" style="color: #0000cc;">Quartz</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a static site generator that can directly publish Obsidian vaults. It&#8217;s beautiful, but suffers from the usual PWA stupidity of downloading a <code>contentindex.json</code> <em>with your site&#8217;s entire plaintext</em> to facilitate search.</p></td>
</tr>
</tbody>
</table>
<br/>
]]></content>
<category term="electron" label="electron" />
<category term="notes" label="notes" />
<category term="zettelkasten" label="zettelkasten" />
<category term="markdown" label="markdown" />
</entry>
</feed>


