<?xml version="1.0" encoding="UTF-8" standalone="no"?><?xml-stylesheet type="text/xsl" href="https://taoofmac.com/static/css/atom.xslt"?><feed xmlns="http://www.w3.org/2005/Atom">
<title>The Tao of Mac</title>
<subtitle>Complete Wiki/Blog feed</subtitle>
<link href="https://taoofmac.com" rel="alternate" type="text/xml"/>
<link href="https://taoofmac.com/atom.xml" rel="self" type="application/atom+xml"/>
<id>https://taoofmac.com/atom.xml</id>
<updated>2026-08-01T07:14:59+00:00</updated>
<rights>CC Attribution-NonCommercial-NoDerivs 3.0</rights>
<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-07-31T07:19:41+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link href="https://taoofmac.com/space/emulation?utm_content=atom" rel="alternate" type="text/html" xml:base="https://taoofmac.com"/>
<content type="html"><![CDATA[
<p class="lead">Emulation and hardware virtualization software of various descriptions, most of them obsolete by now:</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;">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;">8-bit</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/Jean-MarcHarvengt/MCUME?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">MCUME</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a multi-system emulator for microcontrollers</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/floooh/chips-test?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">chips-test</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a collection of <a href="https://floooh.github.io/tiny8bit/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Tiny Emus</a> for
8-bit systems</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;">Amiga</td>
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2008</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://sourceforge.net/projects/maxuae/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">MaxUAE</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Somewhat dead, with only Power PC binaries available.</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.rcdrummond.net/uae/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">UAE</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Cross-platform Amiga emulator</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;">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/midwan/amiberry?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">amiberry</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>optimized for ARM cpus</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;">Arcade</td>
<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://openemu.sourceforge.net?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Open Emu</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A modular emulator that can be used as a Quartz Composer plug-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;">2011</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.emulaunch.com/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Emulaunch</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A multi-emulator front-end suitable for use on a TV</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;">2022</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/Provenance-Emu/Provenance?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Provenance</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an iOS and tvOS multi-emulator frontend</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;">C64</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2019</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/randyrossi/bmc64?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">bmc64</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a &#8220;bare metal&#8221; C64 emulator for the Raspberry Pi</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/SensoriumEmbedded/TeensyROM?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">TeensyROM</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a ROM emulator, fast loader, MIDI and internet cartridge for Commodore 64/128</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;">DEC</td>
<td rowspan="2" 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/rscott2049/DECstation2040?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">DECstation2040</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A RP2040 based DECstation emulator (the workstations I used in college)</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;">Emulation</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/86Box/86Box?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">86Box</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a low level x86 emulator for running older operating systems and software.</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;">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/amcchord/M5Tab-Macintosh?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">M5Tab-Macintosh</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>68040 emulator on an ESP32-P4 with video rendering and input handling capabilities.</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/kstenerud/Musashi?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Musashi</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A portable Motorola 68000 CPU emulator core used in many classic system emulators</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/rkindustriesYT/Anemoia-NES-Emulator-fixes?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Anemoia NES Emulator fixes</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>fixes for the ESP32 port of the Anemoia NES emulator</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;">Gameboy</td>
<td rowspan="4" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2008</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.bannister.org/software/ba.htm?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Boycott Advance</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>GBA emulator. Universal binary.</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;">Gaming</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.bannister.org/software/kigb.htm?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">KiGB</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Gameboy/Gameboy colour emulator.</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;">Generic x86</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/apps/Q" rel="nofollow" style="color: #0000cc;">QEMU</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Q</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/com/microsoft/virtual_pc" rel="nofollow" style="color: #0000cc;">Virtual PC</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Used to be the best option for running Windows on Power PC</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="/space/links/2011/03/25/1840" rel="nofollow" style="color: #0000cc;">DOSBox</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Boxer</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;">Graphics</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/carlosefr/retroarch-shaders?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">retroarch-shaders</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a collection of finetuned shaders to replicate CRT looks on Retroarch</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;">IBM PC</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://github.com/dbalsom/martypc?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">martypc</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a cycle-accurate IBM PC/XT emulator written in Rust</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;">2025</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://cmaiolino.wordpress.com/dosbian?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Dosbian</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a lightweight distribution for Raspberry Pi that boots directly into DOSBox</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://felix86.com/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">felix86</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a low-level x86 emulator for RISC-V platforms</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/ericjenott/Evertop?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Evertop</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an ultra low power, ultra long battery solar PC</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/jhhoward/Faux86?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Faux86</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>designed to be run &#8216;bare metal&#8217; on a Raspberry Pi</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="21" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Mac</td>
<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="https://github.com/cebix/macemu?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Basilisk II and SheepShaver</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>the most stable emulators for Motorola-based Macs, but maintained and
released via an obscure forum, so quite annoying to keep up to date</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;">2023</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/InvisibleUp/uvmac?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">&#181;vMac</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>An attempt to modernize the vMac source code</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/macmade/Macintosh-ROMs?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Macintosh ROMs</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>quite amazed to see these in the wild</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.gryphel.com/c/minivmac?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Mini vMac</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>The most straightforward Mac emulator out there</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;">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/TaraHoleInIt/MinivMacArduino?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">MinivMacArduino</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Port of Mini vMac to the Arduino framework (Kind of)</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/clehner/macemu?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">nacemu</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>for of Basilisk and SheepShaver with networking 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;"><a href="https://github.com/evansm7/pico-mac?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pico-umac</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>embeds the umac emulator into a Rasbperry Pi Pico, complete with VGA mono output</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/evansm7/umac?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">umac</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a minimalist Apple Macintosh 128K/512K emulator</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/noshbar/Ultibo-Mini_vMac?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Ultibo-Mini_vMac</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A minivmac fork to be built against Ultibo instead of out-of-date SDL2</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.macrelix.org?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">MacRelix</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Unix-like environment that runs in classic Mac OS</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;">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/all2coolnick/pico-mac-nano?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pico-mac-nano</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a minimal Mac emulator using an RP2040 and a tiny LCD</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/ekbann/rpi-basilisk2-sdl2-nox?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">rpi-basilisk2-sdl2-nox</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a script to build Basilisk II on a Raspberry Pi with no X11 dependencies</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/twvd/snow?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">snow</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a new classic 68K Mac emulator that emphasises accurate emulation and debugging features</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.macintoshrepository.org/44146-mr-browser?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">MR Browser</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a package manager for emulated classic Macs</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;">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/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></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A GCC-based cross-compilation environment for building 68K and PowerPC Macintosh software, including modern hobby projects and tiny utilities for classic Mac emulators.</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/likeablob/cydintosh?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Cydintosh</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A Macintosh Plus emulator port for the Cheap Yellow Display ESP32 board, bundled with a few tiny 68k Mac applications and repurposed as a smart-home status display.</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/mplsllc/macsurf?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">MacSurf</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a modern web browser for Classic Mac OS 9 PowerPC with CSS3, ES5 JavaScript, and native HTTPS</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/retrotheory/pico-mac?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pico-mac</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Runs the umac emulator on a Raspberry Pi Pico, with VGA output.</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/vitorallo/macframe-releases?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Macframe</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>An IBM mainframe emulator for macOS distributed as release downloads</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.gryphel.com/c/sw/sysutils/speedmtr/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">speedmtr</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A classic Mac benchmarking utility distributed via Gryphel (archive of classic Mac software)</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.v68k.org/advanced-mac-substitute/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Advanced Mac Substitute</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>An API-level reimplementation of classic 68K Mac OS that runs old Mac applications without an Apple ROM or original system software.</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-system</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/JMBeresford/retrom?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">retrom</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a centralized management service that serves up web-based emulated games</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;">N64</td>
<td rowspan="2" 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://code.google.com/p/mupen64plus?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">mupen64plus</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a less polished but cross-platform alternative</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.sixtyforce.com/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Sixtyforce</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A N64 emulator with the ability to render games in high resolution.</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;">Newton</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/pguyot/Einstein?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Einstein</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Newton MessagePad emulator for multiple platforms</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;">Nintendo 3DS</td>
<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://citra-emu.org?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Citra</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>formerly available for Android with motion controls</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="9" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Other</td>
<td rowspan="4" 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/buserror/libmui?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">libmui</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a <em>brilliant</em> Classic MacOS &amp; GS/OS widget library for linux used in the
Apple IIe emulator</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/buserror/mii_emu?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">mii_emu</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an Apple IIe Emulator for Linux</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/pdewacht/oberon-risc-emu?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">oberon-risc-emu</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Emulator for the Oberon RISC machine</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://twisteros.com?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Twister OS</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 UI themes and prebuilt ARM images to turn XFCE into faithful
reproductions of older OSes</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;">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/habedi/rocket68?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">rocket68</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>C11 Motorola 68000 CPU emulator library focused on correctness, precise
cycle counting, and easy embedding into retro projects.</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/jevonlipsey/pico-ios?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Pocket8 / pico-ios</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Native PICO-8 companion for iOS that embeds the official engine via WASM, adding instant save/load states, adaptive controls, and a smart library for cartridges.</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/rochus-keller/OberonSystem3Native?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">OberonSystem3Native</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Native port of Oberon System 3 for modern Windows units, complete with
build scripts, packaging artifacts, and usage notes.</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://oberon.ethz.ch/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Oberon System (ETH)</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Official ETH Zurich archive for the Oberon language and operating system,
including System 3 downloads, documentation, and research notes.</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.projectoberon.com/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Project Oberon</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Niklaus Wirth&#8217;s Project Oberon site: the book, FPGA schematics, and step-
by-step guides to recreate Oberon hardware.</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;">PalmOS</td>
<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/cloudpilot-emu/cloudpilot-emu?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">cloudpilot-emu</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a cloud-based emulator for running PalmOS applications that works on the iPhone</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/meepingsnesroms/Mu?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Mu</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>PalmOS Emulator</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;">Psion</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/Treeki/WindEmu?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">WindEmu</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>emulator for Psion Series 5mx (Windermere)</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;">RISC-V</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/ringtailsoftware/uvm32?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">uvm32</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a minimalist, dependency-free virtual machine sandbox that emulates a 32-bit RISC-V CPU that can run DooM</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;">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/wkoszek/emuko?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Emuko</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Fast RISC-V emulator written in Rust that can boot Linux and targets modern systems.</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;">Retrocomputing</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://github.com/TomHarte/CLK?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Clock Signal</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a multi-system emulator that works beautifully on a Mac</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://benbridle.com/projects/bedrock?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Bedrock</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>8-bit virtual computer system specification with assembler/emulators for PC, web, and Nintendo DS</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;">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/rommapp/romm?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">RomM</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A beautiful self-hosted ROM manager and player with metadata scraping, browser-based UI, and built-in EmulatorJS/RuffleRS players for hosting and sharing emulation collections.</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;">Sinclair</td>
<td rowspan="2" 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://fuse-for-macosx.sourceforge.net/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Fuse</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A recent port of the cross-platform ZX Spectrum emulator</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://k1.dyndns.org/Develop/projects/zxsp-osx/distributions/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">zxsp</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Emulates a range of Z80-based devices, including the ZX81 I started out 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;">2023</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/fruit-bat/pico-zxspectrum?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pico-zxspectrum</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a ZX Spectrum emulator for for the Raspberry Pico RP2040 MCU</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/antirez/zx2040?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">zx2040</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a ZX Spectrum emulator for the Raspberry Pi Pico</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://zxmini.speccy.org/en/index.html?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">ZXBaremulator</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a complete ZX Spectrum 48K/128K/+2A bare-metal emulator</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;">Switch</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://github.com/Ryujinx/Ryujinx?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Ryujinx</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Very good performance on Apple Silicon</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/sudachi-emu/sudachi?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">sudachi</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Another yuzu fork</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;">Terminals</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/mmastrac/blaze?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Blaze</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a VT420 terminal emulator written in Rust</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;">Tools</td>
<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/retronas/retronas?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">retronas</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>network storage for different retro computers and consoles</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;">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/MemoireMorte/Memo-1?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Memo-1</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>simple 6502-based computer project</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;">Wii U</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2022</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/cemu-project/Cemu?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Cemu</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Very good performance on Apple Silicon</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;">Wii/GameCube</td>
<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://www.dolphin-emulator.com/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Dolphin</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>An amazing Wii and GameCube emulator</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;">Windows</td>
<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/AndreRH/hangover?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">hangover</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>enables running Win32 applications on aarch64 Linux using various DLLs
for improved performance.</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/PluMGMK/vbesvga.drv?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">vbesvga.drv</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="https://github.com/TibixDev/winboat?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">winboat</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Windows VM wrapper that uses RDP and RemoteApp to render apps on Linux</p></td>
</tr>
</tbody>
</table>
<br/>
]]></content>
</entry>
<entry>
<title>The Return Of The Passport Phone</title>
<id>https://taoofmac.com/space/links/2026/07/30/0703?utm_content=atom</id>
<published>2026-07-30T07:03:00+00:00</published>
<updated>2026-07-30T07:11:30+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link href="https://taoofmac.com/space/links/2026/07/30/0703?utm_content=atom" rel="alternate" type="text/html" xml:base="https://taoofmac.com"/>
<content type="html"><![CDATA[
<p><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" title="external link to https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win" alt="screenshot of https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win" style="color: #0000cc;"><img class="quicklook" src="https://taoofmac.com/thumb/links/2026/07/30/0703/640,480/mgSgYVBGGWVhTg4eJArjejnjyqs=/large.jpg" width="320" height="240" style="max-width: 100% !important;height: auto !important;"/></a></p>
<p class="lead">I find it highly amusing that it has taken this long for people to realise that the passport form factor is actually more usable&#8211;if only because you can reach across the entire screen with your thumb&#8211;and that a 4:3 foldable makes far more sense both ergonomically and content-wise than the tall, narrow monstrosities we have had to put up with.</p>
<p>I was actually a big fan of the <a href="/space/links/2020/08/13/0823" rel="next" style="color: #0000cc;">Microsoft Surface Duo</a> during the pandemic years, and look forward to seeing what Apple comes up with in October. But my real interest is the opportunity for someone to make a <em>smaller</em>, more compact single-screen device with exactly these dimensions and ergonomics.</p>
<p>I have never been a fan of the huge bricks we have had to carry around since <a href="/space/blog/2017/09/10/1702" rel="next" style="color: #0000cc;">the iPhone X</a>, and am not likely to get a foldable until hinge and screen reliability are truly solved (not to mention affordability). But I would buy a single-screen iPhone shaped like this <em>now</em>. Well, maybe not in mauve.</p>
<br/>
]]></content>
<category label="apple" term="apple"/>
<category label="foldables" term="foldables"/>
<category label="ergonomics" term="ergonomics"/>
<category label="samsung" term="samsung"/>
<category label="smartphones" term="smartphones"/>
</entry>
<entry>
<title>Project</title>
<id>https://taoofmac.com/space/apps/project?utm_content=atom</id>
<published>2008-09-04T22:10:00+00:00</published>
<updated>2026-07-29T07:43:07+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link href="https://taoofmac.com/space/apps/project?utm_content=atom" rel="alternate" type="text/html" xml:base="https://taoofmac.com"/>
<content type="html"><![CDATA[
<p class="lead">See <a href="/space/corporate/project_management" rel="next" style="color: #0000cc;">Project Management</a>.</p>
<br/>
]]></content>
<category label="productivity" term="productivity"/>
<category label="project management" term="project management"/>
</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-07-29T07:43:07+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link href="https://taoofmac.com/space/dev/python?utm_content=atom" rel="alternate" type="text/html" xml:base="https://taoofmac.com"/>
<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/><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;">Astronomy</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://rhodesmill.org/skyfield?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Skyfield</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>An astronomical library for Python</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;">Audio</td>
<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/spotify/pedalboard?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pedalboard</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a library for audio processing</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;">Authentication</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://github.com/lepture/authlib?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">authlib</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>OAuth, OpenID Connect and other niceties</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;">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/aliev/aioauth?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">aioauth</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Oauth 2.0 framework and provider for asyncio</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;">Automation</td>
<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/mherrmann/helium?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">helium</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a library for automating browsers such as Chrome and Firefox</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;">CAD</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://gitlab.com/nobodyinperson/sdfcad?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">sdfCAD</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Simple 3D mesh generation with Python based on SDFs</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/gumyr/build123d?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">build123d</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a parametric BREP modeling framework for 2D and 3D CAD built on OpenCascade</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;">2023</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/fogleman/sdf?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">sdf</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Generate 3D meshes based on SDFs (signed distance functions)</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://gitlab.com/nobodyinperson/sdf?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">sdf (Gitlab)</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Another version of the <code>sdf</code> library with additional functionality</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="10" 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;">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/niedakh/pqdm?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pqdm</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>parallel tqdm</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;">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/hauntsaninja/pyp?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pyp</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a clever shell tool to do inline Python</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/tiangolo/typer?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">typer</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A <tt>click</tt>-like library for building CLI applications</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;">2019</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/tqdm/tqdm?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">tqdm</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a configurable progress bar</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;">2018</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/google/python-fire?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">python-fire</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a CLI wrapper for any Python object</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;"/>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://click.pocoo.org?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">click</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 way to do composable CLI tools (see also argh, defopt, docopt, python-fire, etc.)</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://pypi.python.org/pypi/clint/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Clint</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A great module for developing CLI apps</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/amoffat/pbs?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pbs</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A nice, simple and consistent generic command wrapper.</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/jonathanslenders/python-prompt-toolkit?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">ptpython</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>The Python Prompt Toolkit</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/tomerfiliba/plumbum?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">plumbum</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Another command wrapper, with SSH 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;">Cloud</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/stelviodev/stelvio?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Stelvio</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a pure-Python framework for building and deploying AWS apps with the stlv 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;">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/Fizzadar/pyinfra?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pyinfra</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a fabric-like agentless automation 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;">Coding</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/ludo-technologies/pyscn?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pyscn</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an intelligent python code quality analyzer</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;">Compilers</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2022</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/exaloop/codon?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">codon</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an LLVM compiler for a Python subset</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;">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/python/mypy/tree/master/mypyc?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">mypyc</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a compiler for a subset of type-annotated Python</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;"/>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://www.transcrypt.org/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Transcrypt</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Another JavaScript transpiler</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;">Compression</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/BuzonIO/zipfly?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">zipfly</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a library for doing on-the-fly zip compression with low memory footprint</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="16" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Concurrency</td>
<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/Bogdanp/dramatiq?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">dramatiq</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>background queueing/task processing library</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/proteanhq/protean?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">protean</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>framework for building event-driven applications using the CQRS pattern</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/pyrustic/asyncpal?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">asyncpal</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a unified approach at providing elastic task pools</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;">2023</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/sybrenjansen/mpire?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">mpire</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a <code>multiprocessing</code> replacement with a number of additional features</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;">2020</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://aiomultiprocess.omnilib.dev/en/stable/index.html?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">aiomultiprocess</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an asyncio Pool implementation to manage multiple processes with independent event loops</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/python-trio/trio?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Trio</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a friendlier wrapper around asyncio for concurrent tasks</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="10" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;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://openreplica.org/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">OpenReplica</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A coordination service that provides replication and
synchronization support for large-scale distributed systems</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://python-rq.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-rq</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A simpler queueing library</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://pythonhosted.org/pulsar?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Pulsar</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Another actor-based multiprocessing library with <code>asyncio</code>
support and a fair degree of network transparency</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.celeryproject.org?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Celery</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>My current go-to library for task queueing</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.pykka.org/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Pykka</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>An implementation of the Actor model, with gevent 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;"><a href="https://github.com/benoitc/offset?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">offset</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>ports of the <a href="/space/dev/golang" rel="nofollow" style="color: #0000cc;">Go</a> concurrency model</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/dano/aioprocessing?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">aioprocessing</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 <code>asyncio</code> equivalents of the <code>multiprocessing</code> library</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/ray-project/ray?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">ray</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A distributed execution engine that implements a <code>pandas</code> clone</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/rgalanakis/goless?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">goless</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>ports of the <a href="/space/dev/golang" rel="nofollow" style="color: #0000cc;">Go</a> concurrency model</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/toastdriven/littleworkers?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Littleworkers</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Parallel job management without the hassles.</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;">Console</td>
<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/willmcgugan/rich?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">rich</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a console library with various layout options</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;"/>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://bpython-interpreter.org?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">bpython</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>My favorite REPL</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://tartley.com/?p=1062&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Colorama</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Making <a href="/space/standards/ansi/escape_codes" rel="nofollow" style="color: #0000cc;">ANSI</a> color sequences
work cross-platform (see also <a href="https://gist.github.com/758430?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">this gist</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://crate.io/packages/fabulous/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">fabulous</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Prints images to console</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/urwid/urwid?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">urwid</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A <code>curses</code> based library for building console UIs</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="13" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Data Engineering</td>
<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/Filimoa/polars-h3?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">polars-h3</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Polars extension that adds support for the H3 discrete global grid system</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;">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/benedekrozemberczki/littleballoffur?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Little Ball of Fur</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a graph sampling library that works with NetworkX</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/rtosholdings/riptable?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">riptable</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a multithreaded array processing library</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="10" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;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://code.google.com/p/happy/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Happy</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A Hadoop library to run map-reduce jobs via Jython</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://explorapp.com/biplist/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">biplist</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A library that can manage Mac binary <code>.plist</code> 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;"><a href="http://sourceforge.net/projects/pyparsing/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pyparsing</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a handy, flexible parser library that does away with lex/yacc.</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://spotify.github.io/snakebite/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">snakebite</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A native HDFS client to access the Hadoop datastore.</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://xlwings.org/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">xlwings</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>An <a href="/space/apps/excel" rel="nofollow" style="color: #0000cc;">Excel</a> plugin</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/RaRe-Technologies/bounter?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Bounter</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A fast probabilistic counter</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/alecthomas/voluptuous?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">voluptuous</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A data schema validation library.</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/seatgeek/fuzzywuzzy?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">fuzzywuzzy</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A fuzzy string matching library</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/twitter/pycascading?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">PyCascading</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A better way to write Hadoop jobs.</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://secure.simplistix.co.uk/svn/xlwt/trunk?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">xlwt</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a library to parse Excel documents
(<a href="http://panela.blog-city.com/pyexcelerator_xlwt_cheatsheet_create_native_excel_from_pu.htm]?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">cheatsheet</a>.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="17" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Data Science</td>
<td rowspan="5" 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/DataResponsibly/DataSynthesizer?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">DataSynthesizer</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a library for generating synthetic data</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/Goldziher/kreuzberg?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">kreuzberg</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a text extraction library supporting PDFs, images, office documents and more</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/lk-geimfari/mimesis?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">mimesis</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a library for generating fake data</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/salesforce/Merlion?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Merlion</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A time series forecasting library</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/tirthajyoti/pydbgen?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pydbgen</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>another library for generating synthetic data</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;">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/lakehq/sail?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">sail</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>unifies stream and batch processing with a drop-in replacement for Spark SQL</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/rapidsai/cudf?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">cuDF</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a GPU DataFrame library leveraging CUDA</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;">2023</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/Kanaries/pygwalker?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pygwalker</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Tableau-like dataframe exploration tool for Jupyter</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/datapane/datapane?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">datapane</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a data and reporting and analisys framework</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/fugue-project/fugue?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">fugue</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a unified interface for executing SQL, Python and Pandas code on Spark, Dask and Ray</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;">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/facebookresearch/kats?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Kats</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a time series analysis library</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/joouha/euporie?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">euporie</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a text-based interface for Jupyter notebooks</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/jupyter-xeus/xeus-sql?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">xeus-sql</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Jupyter kernel for SQL databases</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/salimfadhley/eztable?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">eztable</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a simple table library</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/sedthh/pyxelate?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pyxelate</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a pixelation/dithering algorithm that uses a mix of algorithmic and ML approaches</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/nteract/papermill?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">papermill</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a way to parameterize and automate Jupyter notebooks</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;"/>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.scipy.org/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">SciPy</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>scientific (including plotting) libraries for Python</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;">Data Validation</td>
<td rowspan="2" 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/keleshev/schema?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">schema</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>another data validation library</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/samuelcolvin/pydantic?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pydantic</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Data validation using type hinting</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;"/>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/schematics/schematics?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Schematics</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A validation/schema handling library.</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="15" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Database</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/microsoft/mssql-python?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">mssql-python</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Microsoft SQL Server driver for Python</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/slaily/aiosqlitepool?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">aiosqlitepool</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a connection pool for <code>aiosqlite</code></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;">2023</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/hvuhsg/mongolite?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">mongolite</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>another MongoDB-like database</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;">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/brainix/pottery?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pottery</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Redis library with Pythonic syntactic sugar</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/pudo/dataset?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">dataset</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>trivial abstraction layer over SQLAlchemy</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/scottrogowski/mongita?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Mongita</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a MongoDB-like database library for in-process use</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;">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/cwida/duckdb?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">DuckDB</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an embeddable SQL database with OLAP features</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/davidlatwe/montydb?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">montydb</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a tiny MongoDB implementation in pure Python</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/dpapathanasiou/simple-graph?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">simple-graph</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A simple graph database in SQLite</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;"/>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://pymssql.sourceforge.net/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pymssql</a></td>
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>SQL Server and Sybase driver</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.freetds.org/userguide/index.htm?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">FreeTDS</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;"><a href="http://www.rmunn.com/sqlalchemy-tutorial/tutorial.html?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">SQLAlchemy</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>tutorial</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/coleifer/peewee?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Peewee</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A small, very flexible ORM</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/msiemens/tinydb/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">tinydb</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A (very) lightweight document oriented database</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/stochastic-technologies/goatfish?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Goatfish</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>An even smaller schemaless ORM</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;">Debugging</td>
<td rowspan="2" 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/emeryberger/scalene?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Scalene</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A high-performance CPU and memory profiler</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/onelivesleft/PrettyErrors?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">PrettyErrors</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an error handler that prettifies output</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;"/>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://eww.io?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Eww</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Insert a REPL into a running application</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://pycallgraph.slowchop.com/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Pycallgraph</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Generate a program flow graph <a href="/space/apps/graphviz" rel="nofollow" style="color: #0000cc;">Graphviz</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://github.com/HypothesisWorks/hypothesis-python?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Hypothesis</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A <code>very</code> nice testing framework</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/inducer/pudb?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pudb</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A console debugger</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/khamidou/lptrace?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">lptrace</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A pretty amazing single-file strace-like tool for Python</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/whit537/assertEquals?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">assertEquals</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a testing framework with a great <a href="http://www.zetadev.com/software/testosterone/screencast.html?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">screncast</a></p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="13" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Django</td>
<td rowspan="5" 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/aruseni/django-qrauth?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">django-qrauth</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Django library for QR code-based authentication</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/django-tastypie/django-tastypie?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">django-tastypie</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Django library for building RESTful APIs</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/dropseed/plain?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">plain</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an opinionated fork of Django</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/encode/django-rest-framework?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">django-rest-framework</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>another Django library for building RESTful APIs</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/jazzband/django-admin-sortable?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">django-admin-sortable</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a library for adding drag-and-drop sorting to Django admin</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/bennylope/django-organizations?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">django-organizations</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Django library for managing organization accounts</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;">2023</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/adamghill/django-unicorn?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">django-unicorn</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Reactive framework for Django that uses minimal JavaScript</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;">2022</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/vitalik/django-ninja?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">django-ninja</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>for building APIs with Django and Python 3.6+ type hints</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;">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/grantjenks/python-diskcache?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">diskcache</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Django-compatible caching library</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;"/>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://wid.gy?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">wid.gy</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A Django-based CMS framework</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.djangoproject.com/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Django</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Probably the best app framework I&#8217;ve every used.</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/wagtail/wagtail?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Wagtail</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Another Django-based CMS framework</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/zenwalker/django-micro?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">django-micro</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A lightweight wrapper to use Django as you would Bottle</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;">Electronics</td>
<td rowspan="2" 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/micropython-IMU/micropython-fusion?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">micropython-fusion</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a sensor fusion library for MicroPython</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/rocheparadox/Kalman-Filter-Python-for-mpu6050?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Kalman-Filter-Python-for-mpu6050</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Kalman filter for the MPU6050 IMU</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;">2023</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/BrianPugh/belay?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">belay</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a library and helper for developing MicroPython projects, including an on-device REPL</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;">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/j0ono0/pinout?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pinout</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Helps create SVG pin-out diagrams for electronic hardware</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;">Embedded</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/MicroPythonOS/MicroPythonOS?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">MicroPythonOS</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a MicroPython-based operating system for embedded devices that can run on ESP32 (and likely the CYD)</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/PineTreeLabs/archimedes?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">archimedes</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Python framework that lets you develop and analyze algorithms in NumPy and automatically generate optimized C code for embedded systems</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;">Enterprise</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;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/bd2kgenomics/toil?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">toil</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A cross-platform pipeline management system with Common Workflow
Language 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;">Environments</td>
<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/joshiemoore/snakeware?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">snakeware</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Python userspace for Linux</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;">Frameworks</td>
<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://platypush.tech/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Platypush</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a modular platform for home automation with easy MQTT event handling
and a graphical editor</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;">Functional Programming</td>
<td rowspan="4" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;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://hylang.org/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Hy</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>An awesome LISP dialect that sits atop the runtime.</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/Suor/funcy?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">funcy</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A nice, fairly complete functional library</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/pytoolz/toolz/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Toolz</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A functional complement to the standard library.</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/tobgu/pyrsistent?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pyrsistent</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A persistent data structure library</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;">GIS</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/marceloprates/prettymaps?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">prettymaps</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A minimal Python library to draw customized maps from
OpenStreetMap data</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;"/>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://exogen.case.edu/projects/geopy/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">geopy</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an amazingly flexible geocoding library.</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/thampiman/reverse-geocoder?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">reverse-geocoder</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A fast offline reverse geocoder</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;">GUI</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/pytauri/pytauri?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pytauri</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Tauri binding for Python</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;">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/TomSchimansky/CustomTkinter?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">CustomTkinter</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>offers customizable widgets and supports system appearance modes across platforms</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/google/mesop?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">mesop</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a rapid web development framework for Python</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/peterhinch/micropython-nano-gui?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">micropython-nano-gui</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A lightweight MicroPython GUI library</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/zauberzeug/nicegui?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">nicegui</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a library for creating Web UIs</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;">2022</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/flet-dev/flet?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">flet</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>creates realtime web, mobile and desktop apps using Flutter</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;">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/sgall17a/encodermenu?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">encodermenu</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a MicroPython library for GUI creation, using uasyncio</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;">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/chriskiehl/Gooey?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Gooey</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a wxWidgets wrapper for quickly building GUI versions of CLI tools</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/hoffstadt/DearPyGui?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">DearPyGui</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Linux/Windows GUI library atop ImGUI (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;">2019</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://build-system.fman.io/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">fman build system</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a complete build system for Qt applications</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;">2018</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/pybee/toga?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Toga</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a cross-platform GUI that works on the Mac</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;"/>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://kivy.org/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">kivy</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A sophisticated UI/UX library with Android 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;"><a href="http://pythoncard.sourceforge.net/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">PythonCard</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A bit basic, but 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://vpython.org/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">VPython</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>3D OpenGL libraries for quick visualization</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.brunningonline.net/simon/blog/archives/winGuiAuto.py.html?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">winGuiAuto.py</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>for Windows automation</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.pyglet.org/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pyglet</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a cross-platform windowing and multimedia library with OpenGL 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;"><a href="http://www.pyside.org/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">PySide</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A recent Qt binding (up to and including 4.7) with QML 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;"><a href="https://github.com/MikeTheWatchGuy/PySimpleGUI?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">PySimpleGUI</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a simple tkinter-based GUI wrapper</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="27" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Graphics</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/Robertleoj/slamd?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">slamd</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a lightweight Python 3D visualization library with a GPU-accelerated viewer for point clouds, meshes, camera frustums, and scene-graph style transforms</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/junevm/splathash?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">splathash</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Encodes any image into 16 bytes (22-char base64url) and decodes to a 32&#215;32 preview orders of magnitude faster than BlurHash, with Go/TS/Python reference libs and identical hashes across languages.</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;">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/EeeMoon/piligraphs?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">piligraphs</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a library for creating charts using PIL</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/francozanardi/html2pic?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">html2pic</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a library for rendering HTML/CSS to images using pictex</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/francozanardi/pictex?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pictex</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a layout library for creating component-based graphics in Python, using skia</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/jacobaustin123/renderer?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">renderer</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>rendering and rasterizing library for STL</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/mmatl/pyrender?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pyrender</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>glTF 2.0-compliant OpenGL renderer for visualization of 3D scenes</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://pygfx.com?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pygfx</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>render engine targeting Vulkan/Metal/DX12</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;">2023</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/kitao/pyxel?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pyxel</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A retro game engine for Python</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;">2022</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/taichi-dev/taichi?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">taichi</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a high-performance graphics library</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;">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/psd-tools/image-blender?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">image-blender</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Cython implementation of Adobe Photoshop blend modes</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;">2020</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://blurha.sh?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">blurhash</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A way to encode image placeholders as strings</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/facebookresearch/hiplot?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">hiplot</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>high dimensional interactive plotting</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/mingrammer/diagrams?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">diagrams</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a library for drawing cloud architecture diagrams (Azure, AWS, k8s, etc.)</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;">2019</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/CIRCL/douglas-quaid?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">douglas-quaid</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a library for image matching and correlation</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/idealo/imagededup?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">imagededup</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>uses several different algorithms (including NNs) to detect duplicate images</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/paultopia/plottyprint?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">plottyprint</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>printable formatting for matplotlib</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="17" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;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://developer.berlios.de/projects/smcfreeimage/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">smc.freeimage</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A wrapper for the freeimage library that can handle various TIFF and
fax formats as well as ICC color profiles</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://graphite.wikidot.com/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Graphite</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a real-time graphing system similar to <code>RRDTool</code></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://manatee.mojam.com/%7Eskip/python/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Skip's Python Bits</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>lots of useful snippets</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://pygal.org?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Pygal</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>An SVG charting library with a variety of built-in formats.</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://pyx.sourceforge.net/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Pyx</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Oldie, but goodie.</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.pygame.org/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pygame</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a game-oriented library with SDL 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;"><a href="https://code.google.com/p/pyprocessing/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pyprocessing</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A Processing clone in Python.</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/Zulko/vapory?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Vapory</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A library to generate photorealistic renderings using POV-Ray</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/asciimoo/drawille?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">drawille</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Uses Braille characters for TTY charting</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/ufoym/cropman?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Cropmap</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Face-aware image cropping.</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;">HTML</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://codespeak.net/lxml/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">lxml</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a different <code>libxml</code> binding, with excellent HTML parsing performance</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://cthedot.de/cssutils/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">cssutils</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a CSS 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="http://gnosis.cx/download/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Gnosis Utilities</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>all sorts of XML goodies</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://pygments.pocoo.org/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pygments</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>syntax highlighter able to handle multiple nested languages</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://pypi.python.org/pypi/pyquery?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pyquery</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A jQuery-like library for manipulating 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;"><a href="http://www.crummy.com/software/BeautifulSoup/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">BeautifulSoup</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>The most powerful HTML parser out there.</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/samarudge/Squeezeit?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">squeezeit</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A CSS and JavaScript bundler/minifier</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;">Interpreters</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/pydantic/monty?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">monty</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a minimal, secure Python interpreter written in Rust for running AI-generated code</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/RustPython/RustPython?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">RustPython</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A Python Interpreter written in Rust</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;">2023</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/blueloveTH/pocketpy?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pocketpy</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an embeddable C-based interpreter in 5000 LOC</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://pyscript.net?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">PyScript</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a WASM runtime using Pyodide for web embedding</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;">Languages</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/spylang/spy?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">SPy</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a variant of Python designed to be statically compilable with an interpreter and compiler</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="20" 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;">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/arc53/fast-ebook?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">fast-ebook</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A Rust-powered Python EPUB2/EPUB3 library for reading, writing, validation and Markdown conversion</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/nickponline/shreg?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">shreg</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 for regularizing line segments and closed contours using various algorithms.</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;">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/CyranoB/readability-python?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">readability-python</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an implementation of Mozilla&#8217;s readability algorithm for extracting the
main content from HTML 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;"><a href="https://github.com/adbar/trafilatura?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">trafilatura</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>another readability variant for extracting text from HTML 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;"><a href="https://github.com/automerge/automerge-py?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">automerge-py</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 for building collaborative applications with CRDTs</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/hbmartin/pythonista-stubs?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pythonista-stubs</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a collection of type stubs for the Pythonista app, useful for writing
scripts that run on iOS 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="https://github.com/koaning/smartfunc?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">smartfunc</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a library for using LLMs via docscrings and introspection and introspection</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/telekinesis-inc/aiopandas?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">aiopandas</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a library for using Pandas with asyncio</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;">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/DavidBuchanan314/unsafe-python?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">unsafe-python</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A library to assist writing memory-unsafe code, without any imports</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/slava-vishnyakov/domscribe?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">domscribe</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>converts HTML to semantic Markdown while preserving structure and meaning</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/thyeem/foc?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">foc</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an intriguing collection of higher-level functions using operators for composability</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/xhluca/bm25s?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">BM25S</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an ultrafast implementation of BM25 in pure Python</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;">2023</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/airtai/fastkafka?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">fastkafka</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A Kafka library inspired by fastapi</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/lemon24/reader?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">reader</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A modern RSS/Atom/JSON feed reader library.</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;">2022</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/DonDebonair/slack-machine?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">slack-machine</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A Slack bot library that uses socket mode and <code>asyncio</code></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/susam/mintotp?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">mintotp</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a tiny TOTP library</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;">2021</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://www.grantjenks.com/docs/sortedcontainers?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Sorted Containers</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a fast C-backed collections library</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/earnestt1234/seedir?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">seedir</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A utility library to render filesystem tree diagrams</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;">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/giannitedesco/minotaur?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">minotaur</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an asynchronous inotify interface</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/omegaml/minibatch?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">minibatch</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a simple stream processing library</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;">Machine Learning</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;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.tensorflow.org?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Tensorflow</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Usual staple, largely superseded by PyTorch</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;">Mail</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/imapautofiler/imapautofiler?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">imapautofiler</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an IMAP mailbox sorter that I unwittingly replicated (with less features)</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;">2018</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/aio-libs/aiosmtpd?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">aiosmtpd</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an asyncio version of smtpd.py</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/moggers87/salmon?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Salmon</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an SMTP mail 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;"><a href="https://github.com/slimta/python-slimta?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">slimta</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a mail app framework for building MTAs</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;">Messaging</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://github.com/Lancetnik/Propan?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Propan</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a declarative Python MQ framework inspired by <code>fastapi</code></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;">Music</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://www.music21.org/music21docs?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">music21</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a library for computer-aided musicology</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;">2023</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/Rainbow-Dreamer/musicpy?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">musicpy</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A domain-specific language for writing music</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;">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/luvsound/pippi?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pippi</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an audio processing/music library</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/mik3y/pymidi?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pymidi</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a library for building MIDI over IP/RTP applications (compatible with Apple specs)</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="23" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Networking</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://github.com/robertsdotpm/p2pd?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">p2pd</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an async networking library with P2P and UDP 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;">2019</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/seemoo-lab/opendrop?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">opendrop</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a partial implementation of AirDrop</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;">2018</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/asphalt-framework/asphalt?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">asphalt</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>An <code>asyncio</code> framework for network oriented applications,
with a considerable number of modules</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="20" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;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/SourceForge:projects/pyzeroconf" rel="nofollow" style="color: #0000cc;">PyRendezvous</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>neat little Bonjour module I use a lot</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://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/152043?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">telnetscript</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a simple module to do scripted <code>telnet</code> 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="http://c0re.23.nu/c0de/IPy/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">IPy</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an IP address manipulation library.</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://code.google.com/p/pyvnc/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pyvnc</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A <code>ctypes</code> interface to the <a href="/space/protocols/vnc" rel="nofollow" style="color: #0000cc;">VNC</a> libraries</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://dev.guardedcode.com/projects/ircutils/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">ircutils</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A relatively modern async IRC framework</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://eventlet.net/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Eventlet</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Amazing event-oriented framework</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://ftputil.sschwarzer.net/trac/wiki/Documentation?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link#introduction" rel="external" style="color: #0000cc;">ftputil</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a high-level interface to the <code>ftplib</code> module</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://gumuz.nl/weblog/python-smtplib-progress-indication/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Python smtplib progress indication</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Might come in useful some day.</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://gunicorn.org/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">gunicorn</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A WSGI server that supports a number of different worker daemons and
is highly customizable.</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://monkey.org/%7Edugsong/dpkt/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">dpkt</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>packet creation and parsers</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://oss.coresecurity.com/projects/pcapy.html?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Pcapy</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a packet manipulation library</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://projects.unbit.it/uwsgi/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">uwsgi</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A C application container that speaks WSGI and is seriously good.</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://pussh.sourceforge.net/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">PuSSH</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>SSH wrapper</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://rpyc.wikidot.com/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">RPyC</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an awesome RPC library</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://sleekxmpp.com/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">SleekXMPP</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A more modern XMPP library</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://sourceforge.net/projects/tftpy/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Tftpy</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a pure Python TFTP library, useful for implementing UDP file transfer testbeds.</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/Eleme/thriftpy?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">ThriftPy</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A pure Python implementation of Apache Thrift</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/Jajcus/pyxmpp2?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pyxmpp2</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>another one, probably more 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="https://github.com/appnexus/pyrobuf?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pyrobuf</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Cython implementation of Google&#8217;s <code>protobuf</code> library</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/samuraisam/pyapns?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pyapns</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>An Apple Push Notification Service provider based on Twisted.</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;">OCR</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/allenai/olmocr?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">olmocr</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A toolkit for training language models to work with PDF documents in the wild.</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/VikParuchuri/surya?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">surya</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>OCR library supporting 90+ languages</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="9" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">PDF</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/plutoprint/plutoprint?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">plutoprint</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>another PDF generation library</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/VikParuchuri/marker?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">marker</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a PDF to markdown converter optimized for books and scientific papers, using surya</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;">2023</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/jesparza/peepdf?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">peepdf</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Python tool to explore PDF files in order to find out if the file can be harmful or not.</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;">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/jorisschellekens/borb?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">borb</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a library for creating and manipulating PDF 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/camelot-dev/camelot?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">camelot</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a library to extract tabular data from PDFs</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;"/>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://code.enthought.com/kiva/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Kiva</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Display PDF library</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://pybrary.net/pyPdf/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">PyPdf</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a PDF toolkit</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://weasyprint.org?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">WeasyPrint</a></td>
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Alternatives to PrinceXML for generating formated PDF documentation.</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/chrisglass/xhtml2pdf?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">xhtml2pdf</a></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;">Packaging</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/simonw/go-to-wheel?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">go-to-wheel</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>build Python wheels that bundle cross-compiled Go CLI binaries</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;">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/indygreg/PyOxidizer?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">PyOxidizer</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a better way to distribute Python bundled apps than pyinstaller</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/linkedin/shiv?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">shiv</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>builds self-contained applications for easy deployment</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;">2019</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://poetry.eustace.io/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Poetry</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a dependency management and packaging 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;">Presentations</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;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/isnowfy/pydown?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pydown</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>An HTML presentation generator</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;">Reference</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://gto76.github.io/python-cheatsheet?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">python-cheatsheet</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a modern reference, useful for kids</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;">Reporting</td>
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;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://relatorio.openhex.org/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Relatorio</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 reporting library with multiple output formats</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.reportlab.org/downloads.html?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">ReportLab Toolkit</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a pure Python PDF library that includes a presentation tool.</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;">Resources</td>
<td rowspan="2" 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/mcauser/awesome-micropython?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">awesome-micropython</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>another curated list of MicroPython resources</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/pfalcon/awesome-micropython?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">awesome-micropython</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a curated list of MicroPython resources</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;">2023</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/python-package-template?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">python-package-template</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a template project for building packages</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;">Robotics</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/3D-aslan/cozmo-direct-control?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Cozmo Direct Control</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>PyCozmo-powered GUI with AI chat, keyboard/mouse driving, visual node lab, MediaPipe face tracking, and procedural speech/animation pipelines for commanding Cozmo over WiFi without the official 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;"><a href="https://github.com/GrinningHermit/Cozmo-Explorer-Tool?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Cozmo Explorer Tool</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Flask-powered GUI that combines Cozmo&#8217;s camera feed, keyboard remote controls, event monitor, and animation explorer for prototyping behaviors without the stock 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;"><a href="https://github.com/anki/cozmo-python-sdk?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Cozmo Python SDK</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Official Anki SDK for the Cozmo robot, with the <code>cozmo</code> module, sample scripts, an event monitor, simulation support, and documentation at cozmosdk.anki.com/docs for wiring your own behaviors over Wi&#8209;Fi.</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/zayfod/pycozmo?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">PyCozmo</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Pure-Python alternative SDK and app that speaks Cozmo&#8217;s UDP protocol directly, bundles tools for dumps/replay/animation updates, and exposes docs/examples for firmware, OTA, and Wi-Fi based control.</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;"/>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://github.com/dastultz/micropython-kabuki?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">kabuki</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A declarative control library for MicroPython</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;">Runtimes</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/can1357/pon?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pon</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Python 3.14 native compiler/runtime in Rust with JIT and AoT 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;">2022</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/pikasTech/pikascript?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pikascript</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an embedded Python runtime for the STM32 and other tiny MCUs</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;">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/tonybaloney/Pyjion?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Pyjion</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Pyjion, a JIT extension for CPython that compiles your Python code into
native CIL and executes it using the .NET 5 CLR.</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/pfalcon/pycopy?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Pycopy</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a fork of MicroPython</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;"/>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://nuitka.net?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Nuitka</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>An interesting batch compiler.</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://pyjs.org/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Pyjamas</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Some interesting twists on using <a href="/space/dev/python" rel="nofollow" style="color: #0000cc;">Python</a> on the way to <a href="/space/dev/javascript" rel="nofollow" style="color: #0000cc;">JavaScript</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="http://www.brython.info?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Brython</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a fairly complete in-browser runtime</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.skulpt.org/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Skulpt</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Some interesting twists on using Python on the way to JavaScript.</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.tinypy.org/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">tinypy</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Python in 64K of code.</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/PiotrDabkowski/Js2Py?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Js2Py</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A JavaScript interpreter written in pure Python</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/cosmo-ethz/hope?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Hope</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A specialized JIT compiler</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;">Scraping</td>
<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/naiveHobo/InvoiceNet?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">InvoiceNet</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a neural network for extracting invoice information from PDFs</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;"/>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://wwwsearch.sourceforge.net/mechanize/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Mechanize</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a programmatic web browser for screen scraping.</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/Diaoul/subliminal?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">subliminal</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A library for looking up movie subtitles in various languages.</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/bbrodriges/pholcidae?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pholcidae</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A web crawler library.</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/thp/urlwatch?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">urlwatch</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A flexible page modification monitor</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;">Site Generators</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://github.com/meeb/django-distill?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">django-distill</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Minimal configuration static site generator for Django</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/Mini-Conf/Mini-Conf?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">MiniConf</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a lovely site generator for managing conferences</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;">2019</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/timothycrosley/portray?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">portray</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 for Python project documenntation</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;">TUI</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/NSPC911/rovr?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">rovr</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a post-modern terminal file manager built in Python with Textual, offering themed navigation, configurable layouts, and modern packaging via uv/pipx.</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;">2023</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/Textualize/trogon?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">trogon</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a genius way to automatically generate a TUI for <code>click</code>-based applications</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/ceccopierangiolieugenio/pyTermTk?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pyTermTk</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an impressive text UI toolkit</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;">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/willmcgugan/textual?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">textual</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Text user interface widgets and fields</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;">Task management</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/pydoit/doit?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">doit</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a task runner that can replace <tt>make</tt> for many use cases</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;">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/burninc0de/helowrite?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">HeloWrite</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a distraction-free terminal writing environment built with Python</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/darrenburns/posting?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">posting</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an amazing terminal-based Postman replacement</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;">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/aappleby/hancho?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">hancho</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a simple, pleasant build system</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/beryllium-org/OS?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">berylliumOS</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Python-based shell for CircuitPython devices</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;">2023</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/Sets88/ssh-crypt?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">ssh-crypt</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a clever way to manage secrets on remote servers</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/Textualize/frogmouth?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">frogmouth</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a TUI Markdown browser</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/bugen/pypipe?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pypipe</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Python command-line tool for pipeline processing that can export pipelines as standalone scripts</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/geophile/marcel?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">marcel</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a shell that can pipe structured data (like PowerShell, but done right)</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/laixintao/flameshow?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">flameshow</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a terminal flamegraph viewer</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/mkaz/termgraph?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">termgraph</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>simple terminal charting</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/reloadware/reloadium?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">reloadium</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>advanced hot reloading and profiling</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;">2022</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/julvo/reloading?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">reloading</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a decorator for hot reloading code</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/karteum/Doctool?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Doctool</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 manipulate .docx 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;"><a href="https://github.com/nickstenning/honcho?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">honcho</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a process supervisor that uses <code>Procfiles</code> and can be used for multi-process Docker containers</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;">Tutorials</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://www.leshenko.net/p/ugit?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">ugit</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a step-by-step git 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;">Unicode</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;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://code.zemanta.com/tsolc/unidecode/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Unidecode</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Does character transliterations.</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;">Video</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/jashandeep-sohi/webcam-filters?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">webcam-filters</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 GStream filters for doing live webcam background segmentation and blurring</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;">Visual Programming</td>
<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/IndiePython/nodezator?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">nodezator</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a graphical node workflow editor based on PyGame</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;">2022</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/Bycelium/PyFlow?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">PyFlow</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a another (confusingly, identically named) visual programming environment</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/leon-thomm/Ryven?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Ryven</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a flow-based programming environment with a Qt front-end</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/wonderworks-software/PyFlow?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">PyFlow</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a desktop-based visual programming environment</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;">WASM</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/bytecodealliance/wasmtime-py?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">wasmtime-py</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Python bindings for the Wasmtime WebAssembly runtime.</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;">Web</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/EmilStenstrom/justhtml?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">justhtml</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a pure Python HTML5 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;">2022</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/kotartemiy/newscatcher?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">newscatcher</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a cute scraper database/fetcher combo</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="31" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Web 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/kritishmohapatra/micropidash?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">micropidash</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>An asynchronous MicroPython web dashboard library for Raspberry Pi Pico 2 W and ESP32, built around non-blocking updates, dark mode, and simple hardware integration via <code>uasyncio</code>.</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/reflex-dev/xy?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Reflex</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Python web app framework for building UIs with pure Python</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/allmonday/fastapi-voyager?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">fastapi-voyager</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a FastAPI extension for visualizing endpoints</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/feldroy/air?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">air</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a FastAPI-backed HTML framework</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;">2023</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/cirospaciari/socketify.py?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">socketify.py</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>another <code>libuv</code> wrapper</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/litestar-org/litestar?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">litestar</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>another high-performance ASGI API framework with rigorous typing</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/sparckles/Robyn?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">robyn</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an async Python framework with a <a href="/space/dev/rust" rel="nofollow" style="color: #0000cc;">Rust</a> connection handler</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/sysid/sse-starlette?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">sse-starlette</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Server-Sent Events for Starlette and FastAPI</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/unum-cloud/ucall?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">ucall</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a JSON-RPC library that claims to be 100x faster than FastAPI</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;">2022</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/pynecone-io/pynecone?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pynecone</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a full-stack Python web framework that automatically renders Next.js components</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;">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/tiangolo/fastapi?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">FastAPI</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>decorator-based, runs under uvicorn</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;">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/Neoteroi/BlackSheep?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">blacksheep</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an ASGI web framework that uses decorators</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.starlette.io?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">starlette</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an ASGI web framework that runs under uvicorn</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;">2019</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://appkernel.readthedocs.io/en/latest/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">appkernel</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a microservices framework</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;">2018</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/simonacca/zatt?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">zatt</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>An <code>asyncio</code> implementation of the Raft consensus algorithm
(some of the forks add significant enhancements)</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="16" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;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://bottlepy.org/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Bottle</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Tiny, flexible, awesome. My favorite since 2011.</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://draco.boskant.nl/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Draco</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Old and busted, to various extents.</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://falconframework.org?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Falcon</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A Cythonizable framework with little magic and good performance</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://karrigell.sf.net?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Karrigell</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Old and busted, to various extents.</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://pecanpy.org?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">pecan</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Based on object dispatching</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://python-eve.org/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">eve</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Another RESTful foundation framework</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://pythonhosted.org/wheezy.web?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">wheezy.web</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A high-performance framework that seems to get along well with PyPy</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://snakelets.sourceforge.net/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Snakelets</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A minimalistic app server, my old web platform of choice.</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://twistedmatrix.com/products/twisted?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Twisted</a></td>
<td rowspan="3" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Old and busted, to various extents.</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.amk.ca/python/code/medusa.html?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">medusa</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;"><a href="http://www.cherrypy.org/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">CherryPy</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;"><a href="http://www.tornadoweb.org/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Tornado</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>non-blocking, which is pretty 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.zope.org?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Zope</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Old and busted, to various extents.</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/jeffknupp/sandman?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">sandman</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A simple RESTful wrapper</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/vibora-io/vibora?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Vibora</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>An <code>asyncio</code> framework that seems to beat Sanic in static performance</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.moyaproject.com?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Moya</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a new(ish), template-centric web framework with some interesting twists</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;">Wikis</td>
<td rowspan="2" 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/cu/silicon?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">silicon</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>another Markdown-focused wiki</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/redimp/otterwiki?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">otterwiki</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a nice git-backed wiki</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;">Writing</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://github.com/amperser/proselint?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">proselint</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a linter for prose</p></td>
</tr>
</tbody>
</table>
<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 label="data" term="data"/>
<category label="science" term="science"/>
<category label="python" term="python"/>
<category label="programming" term="programming"/>
<category label="development" term="development"/>
<category label="scripting" term="scripting"/>
</entry>
<entry>
<title>No G Cloud 2 Coming, Apparently</title>
<id>https://taoofmac.com/space/links/2026/07/29/0725?utm_content=atom</id>
<published>2026-07-29T07:25:00+00:00</published>
<updated>2026-07-29T07:42:49+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link href="https://taoofmac.com/space/links/2026/07/29/0725?utm_content=atom" rel="alternate" type="text/html" xml:base="https://taoofmac.com"/>
<content type="html"><![CDATA[
<p><a href="https://www.theverge.com/games/971651/logitech-handheld-business-g-cloud-robin-piispanen-interview?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" title="external link to https://www.theverge.com/games/971651/logitech-handheld-business-g-cloud-robin-piispanen-interview" alt="screenshot of https://www.theverge.com/games/971651/logitech-handheld-business-g-cloud-robin-piispanen-interview" style="color: #0000cc;"><img class="quicklook" src="https://taoofmac.com/thumb/links/2026/07/29/0725/640,480/AH8tDxoog8xh1jFs_Uj60D49sYc=/large.jpg" width="320" height="240" style="max-width: 100% !important;height: auto !important;"/></a></p>
<p class="lead">I don&#8217;t usually link to <em>The Verge</em> twice over breakfast, but I do want to go on record as saying that I am still pretty happy with <a href="/space/blog/2024/02/03/2000" rel="next" style="color: #0000cc;">my G Cloud</a>.</p>
<p>Yes, it is slower than most modern gaming handhelds, but it has a glorious 7-inch 1080p screen, great ergonomics and enough power to run PS1 games locally (I am finally blundering my way through <em>Metal Gear Solid</em>, albeit slowly). Since we mostly stream games over the LAN here at home&#8211;our gaming setup is an Xbox and a dedicated Steam Link/retro emulation server&#8211;I have got plenty of use out of it.</p>
<p>But my particular circumstances and spotty gaming habits very likely do not make me a profitable enough niche. There are a gazillion cheaper Chinese handhelds that can do much the same with less polish&#8211;or, rather, there were before hardware prices ballooned&#8211;so I can hardly blame Logitech for not building another one&#8230;</p>
<br/>
]]></content>
<category label="emulation" term="emulation"/>
<category label="handhelds" term="handhelds"/>
<category label="streaming" term="streaming"/>
<category label="gaming" term="gaming"/>
<category label="logitech" term="logitech"/>
</entry>
<entry>
<title>Replaceable Batteries, But Only In Europe</title>
<id>https://taoofmac.com/space/links/2026/07/29/0706?utm_content=atom</id>
<published>2026-07-29T07:06:00+00:00</published>
<updated>2026-07-29T07:17:54+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link href="https://taoofmac.com/space/links/2026/07/29/0706?utm_content=atom" rel="alternate" type="text/html" xml:base="https://taoofmac.com"/>
<content type="html"><![CDATA[
<p><a href="https://www.theverge.com/tech/971963/logitech-user-replacable-batteries-europe?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" title="external link to https://www.theverge.com/tech/971963/logitech-user-replacable-batteries-europe" alt="screenshot of https://www.theverge.com/tech/971963/logitech-user-replacable-batteries-europe" style="color: #0000cc;"><img class="quicklook" src="https://taoofmac.com/thumb/links/2026/07/29/0706/640,480/IpKebBnN0-zBqQPr9LA7sK4af7Q=/large.jpg" width="320" height="240" style="max-width: 100% !important;height: auto !important;"/></a></p>
<p class="lead">This is one of those exceedingly rare cases where EU legislation has produced an unambiguously good outcome: from February 2027, Logitech&#8217;s European wireless devices will ship with hard-pack, user-replaceable batteries, and Logitech will sell certified replacements.</p>
<p>Of course, Logitech plans to keep shipping sealed versions everywhere else. Its gaming chief cites cost and extra weight, adding that few people will bother replacing the batteries in $50-100 mice&#8211;which is wonderfully circular reasoning when the current products do not give them the option. The inexorable drive towards profit keeps manufacturers from doing the right thing until legislation forces them to, and apparently only in the countries where it applies.</p>
<p>I do worry that enough regional splits like this will eventually balkanise hardware, spares and support, although I would find it highly amusing if Americans started &#8220;smuggling&#8221; European Logitech mice after realising they no longer had to throw them away when the battery died. Apple will certainly not bring back the <a href="/space/links/2024/10/29/0754" rel="next" style="color: #0000cc;">AA-powered Magic Mouse</a> or its earlier keyboard designs, even though they had already solved this problem&#8230;</p>
<br/>
]]></content>
<category label="logitech" term="logitech"/>
<category label="hardware" term="hardware"/>
<category label="batteries" term="batteries"/>
<category label="repairability" term="repairability"/>
<category label="eu" term="eu"/>
<category label="right-to-repair" term="right-to-repair"/>
</entry>
<entry>
<title>The Chuwi MiniBook X N150, One Year Later</title>
<id>https://taoofmac.com/space/reviews/2026/07/25/1700?utm_content=atom</id>
<published>2026-07-25T17:00:00+00:00</published>
<updated>2026-07-25T17:00:00+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link href="https://taoofmac.com/space/reviews/2026/07/25/1700?utm_content=atom" rel="alternate" type="text/html" xml:base="https://taoofmac.com"/>
<content type="html"><![CDATA[
<p class="lead">It&#8217;s been a little over a year since I <a href="/space/reviews/2025/05/15/2230" rel="next" style="color: #0000cc;">reviewed the MiniBook X</a>, and it remains one of the very few modern machines to preserve the netbook form factor&#8211;so, given the attention the original review garnered, I thought folk might be interested in how it has fared.</p>
<p>Since then, it has spent enough time in bags, on desks and hooked up to odd displays to make the honeymoon period irrelevant&#8211;and in the process it has become one of those machines I reach for without thinking too much about it.</p>
<blockquote>
<p><strong>Disclaimer:</strong> Even though this is a long-term review, the machine was originally sent by <a href="https://www.chuwi.com/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Chuwi</a>, and the usual <a href="/space/site/review_policy" rel="next" style="color: #0000cc;">review policy</a> still applies.</p>
</blockquote>
<figure>
  <img src="https://taoofmac.com/media/reviews/2026/07/25/1700/g6Pg-1-hv9rvMbJtqqi1tTmQBc4=/chuwi-hero.jpg" alt="The Chuwi MiniBook X connected to an external display" width="2048" height="1536" style="max-width: 100% !important;height: auto !important;"/>
  <figcaption>Livin' the life</figcaption>
</figure>

<a class="anchor" id="anchor-hardware" rel="anchor" href="/space/reviews/2026/07/25/1700#hardware" style="color: #0000cc;"><h2 id="hardware">Hardware</h2></a><p>I have very few complaints&#8211;in fact, practically none. The keyboard is still perfectly usable, if a little stiffer than some of my other mobile devices, and the screen&#8217;s higher pixel density remains one of the main reasons I enjoy using it. The machine&#8217;s responsiveness, even in power-saving mode, has made it a great writing and coding device.</p>
<p>Over time, and after a few software upgrades, minor niggles like trackpad smoothness and the slight excess sensitivity I occasionally noticed also faded away. Mostly.</p>
<p>When my hands feel slightly dry I still notice some &#8220;noise&#8221; and pointer tremors, but other than when using an external display (where a mouse is slightly handier for flicking the pointer across a lot more pixels), I have had no need to use anything to compensate for the trackpad size&#8211;partly because the touch screen works fine for quick focus changes and tablet-like text selections, and partly because my workflow on it has become very keyboard-centric.</p>
<p>I&#8217;ve since plugged it into various USB-C displays, and it can drive a 5K panel with ease. That also makes it a useful thin client when I want to sit somewhere else and remote into bigger machines. The battery does not last me as long as an ARM machine, but I haven&#8217;t noticed any degradation yet.</p>
<p>Quality-wise, the only issue I have had so far is that most of the rubber feet came off, which led me down a small AliExpress rabbit hole to find <a href="https://pt.aliexpress.com/item/1005007247599206.html?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">suitable replacements</a>. The ones I bought are even a little better for airflow, since they are slightly taller.</p>
<p>There are also minor scuffs in the metal cover, but that&#8217;s hardly surprising given how much I use it, and I&#8217;d rather have a metal cover with a few scuffs than a plastic one that would have cracked or marred by now:</p>
<figure class="full-width">
  <img src="https://taoofmac.com/media/reviews/2026/07/25/1700/10PAXU2xvXit-omAodWu6EMXM_4=/chuwi-case.jpg" alt="Scuffs on the MiniBook X metal cover" width="2048" height="576" style="max-width: 100% !important;height: auto !important;"/>
  <figcaption>This is fine</figcaption>
</figure>

<a class="anchor" id="anchor-software" rel="anchor" href="/space/reviews/2026/07/25/1700#software" style="color: #0000cc;"><h2 id="software">Software</h2></a><p>I&#8217;m now running <a href="/space/os/linux/distributions/silverblue" rel="next" style="color: #0000cc;">Fedora Silverblue</a> 44, after upgrading from 43 with no real drama other than the LUKS decryption screen still having the same text-rendering bug. Since GNOME was not making good use of the screen real estate and could be a bit heavy in power-saving mode, I switched to <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> and <a href="https://gitlab.com/nicofee/noctalia-shell?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Noctalia Shell</a> as my primary desktop environment&#8211;which then cascaded &#8220;up&#8221; into my other Linux machines.</p>
<figure>
  <img src="https://taoofmac.com/media/reviews/2026/07/25/1700/TIl5mK3cBJoy1pHyncobXhXWJbs=/chuwi-desktop.png" alt="Niri and Noctalia Shell running on the MiniBook X" width="1920" height="1200" style="max-width: 100% !important;height: auto !important;"/>
  <figcaption>Why would I ever need more than two windows at once?</figcaption>
</figure>

<p><a href="/space/apps/obsidian" rel="next" style="color: #0000cc;">Obsidian</a>, <a href="https://zen-browser.app/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Zen Browser</a> to access a local <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, and <a href="/space/apps/ghostty" rel="next" style="color: #0000cc;">Ghostty</a> now cover 99% of what I need from it. Anything else I need tends to become a small <a href="https://github.com/rcarmo/pi-noctalia-shell-plugin?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Noctalia Shell extension</a>, which sometimes makes the whole setup feel like a tailored appliance.</p>
<p>I have felt little need to install much else&#8211;<a href="/space/apps/blender" rel="next" style="color: #0000cc;">Blender</a>, <a href="/space/apps/openscad" rel="next" style="color: #0000cc;">OpenSCAD</a> and the rest of my CAD tools are there when I need them, and although the hardware imposes obvious limits, they are quite usable for minor edits.</p>
<p>I still get occasional Wi-Fi fluttering in one spot of the house due to the Linux driver bugs I discovered when setting up guided handover on the <a href="/space/reviews/2025/09/14/1630" rel="next" style="color: #0000cc;">Cudy</a> APs. <a href="/space/blog/2026/05/26/1730" rel="next" style="color: #0000cc;">Fine-tuning roaming settings</a> on the Wi-Fi side mostly fixed that, so I do not really consider it a MiniBook problem anymore.</p>
<a class="anchor" id="anchor-verdict" rel="anchor" href="/space/reviews/2026/07/25/1700#verdict" style="color: #0000cc;"><h2 id="verdict">Verdict</h2></a><p>The main change since the original review is that the <a href="/space/reviews/2025/05/15/2230" rel="next" style="color: #0000cc;">MiniBook X</a> stopped being a cute novelty and faded into the background as a reliable everyday tool.</p>
<p>It is still small enough to feel slightly improbable, but at least to me it never feels compromised in the &#8220;netbooks are too small to be useful&#8221; sense&#8211;the display is excellent, the keyboard is good enough, and the N150 is more than adequate for the mix of writing, coding, browsing and remote access I use it for. It is also <em>very</em> quiet in power-saving mode.</p>
<p>I would still like better Linux polish around the first-boot and decryption-screen oddities (both <a href="/space/os/linux/distributions/fedora" rel="next" style="color: #0000cc;">Fedora</a> issues), and the rubber feet should have lasted longer&#8211;the only wear issue I can ascribe to <a href="https://www.chuwi.com/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Chuwi</a>, and that is also very much on me given how much I use it.</p>
<p>But it has aged very well for a machine this size, especially one that can run a modern Linux desktop without making me think about performance all the time&#8211;although it certainly helps that it shipped with 12GB of RAM&#8230;</p>
<br/>
]]></content>
<category label="intel" term="intel"/>
<category label="chuwi" term="chuwi"/>
<category label="minibook" term="minibook"/>
<category label="review" term="review"/>
<category label="fedora" term="fedora"/>
<category label="linux" term="linux"/>
<category label="n150" term="n150"/>
<category label="noctalia" term="noctalia"/>
<category label="laptop" term="laptop"/>
<category label="niri" term="niri"/>
</entry>
<entry>
<title>Notes for July 19-25</title>
<id>https://taoofmac.com/space/notes/2026/07/25/1530?utm_content=atom</id>
<published>2026-07-25T15:30:00+00:00</published>
<updated>2026-07-25T15:30:00+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link href="https://taoofmac.com/space/notes/2026/07/25/1530?utm_content=atom" rel="alternate" type="text/html" xml:base="https://taoofmac.com"/>
<content type="html"><![CDATA[
<p class="lead">I have been mildly unsuccessful at doing stuff in my free time this week due to personal and family concerns that somewhat limited <a href="/space/blog/2026/07/23/1030" rel="next" style="color: #0000cc;">my ability to sit in my office</a>, so it was only sometime around Thursday evening that I realized <a href="https://www.noagendashow.net/listen/1888/transcript?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">John Dvorak passed away</a>. It was weird to read about that since I (well, along with a small coterie of local geeks) had dinner with him when he visited Lisbon in late 2009, and at the time I was preoccupied with <a href="/space/blog/2009/11/24/0800" rel="next" style="color: #0000cc;">loads of other things</a> besides the start of the arc that would eventually make me leave Vodafone, so I don&#8217;t even have photos (but they&#8217;re out there).</p>
<p>For those tuning in today, almost two decades after that happened, going through my notes from 2009 brought home <a href="/space/blog/2009/11/08/1030" rel="next" style="color: #0000cc;">how <em>tired</em> I was of Vodafone at that time</a>, and how my career change <a href="/space/blog/2010/09/01/2155" rel="next" style="color: #0000cc;">the year after</a> was essentially driven by a period of exhaustion that is not that different from what is going on right now, and that I tried to &#8220;fix&#8221; by <a href="/space/blog/2009/11/17/0030" rel="next" style="color: #0000cc;">running into the fire and taking on Vodafone 360</a>.</p>
<p>Well, that was a mistake I&#8217;ve definitely learned from. <a href="/space/blog/2021/10/15/1830" rel="next" style="color: #0000cc;">Mostly</a>.</p>
<p>The good news is that unlike my near-burnouts in recent years, I am now both mentally <em>and</em> physically tired but with very clear ideas of what I want to do next, so I&#8217;m taking advantage of summertime and preparing to batten down the hatches and finish/pause some of my ongoing projects to focus on more hardware stuff, which takes longer and is less glamorous but has two primary advantages: it gets me off the AI treadmill a bit in my personal space and should hopefully be healthier overall.</p>
<p>Oh, and I have loads of gadgets to write about. I&#8217;m making a conscious effort to finish all of my pending <a href="/space/site/review_policy" rel="next" style="color: #0000cc;">reviews</a> and long-term follow-ups even as I endeavor, once again, to clean up my office.</p>
<br/>
]]></content>
<category label="notes" term="notes"/>
<category label="hardware" term="hardware"/>
<category label="weekly" term="weekly"/>
<category label="reviews" term="reviews"/>
</entry>
<entry>
<title>A Day In The Life</title>
<id>https://taoofmac.com/space/blog/2026/07/23/1030?utm_content=atom</id>
<published>2026-07-23T10:30:00+00:00</published>
<updated>2026-07-23T10:53:55+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link href="https://taoofmac.com/space/blog/2026/07/23/1030?utm_content=atom" rel="alternate" type="text/html" xml:base="https://taoofmac.com"/>
<content type="html"><![CDATA[
<p class="lead">It&#8217;s been a while since I wrote one of these, so I thought it would be interesting to record how <strike>miserable</strike> fascinating things have been of late &#8211; and what better time to do so and get my mind off stuff while I recover from another bout of back pain?</p>
<p>All times are GMT/Lisbon, but you can adjust them to your favorite time zone of quiet despair.</p>
<p><strong>4:30</strong> - Either due to insomnia, back pain, or both, I decide that rolling over and lying in various positions that would best befit a contortionist is not a strategy conducive to sleep, so I leave the bedroom and sit in the living room. During the heat wave I also make it a point to check whether my office window is open to make sure it cools down overnight, and then settle on the couch. Trying to read with a light on doesn&#8217;t work well (this is when I really regret that the <a href="/space/reviews/2025/01/18/2335" rel="next" style="color: #0000cc;">Nomad</a> has no backlight), so my life hack is to don my <a href="/space/blog/2020/11/21/1930" rel="next" style="color: #0000cc;">Oculus Quest</a> and, depending on my mood, either use the browser to check on my agents and RSS feeds or watch stuff that might help me go back to sleep. James Bond movies, which I have been slowly watching in chronological order, are kitsch and distracting enough that I sometimes actually doze off wearing the headset and bear a red imprint on my forehead until mid-morning.</p>
<p><strong>6:30-7:30</strong> - All attempts at staying asleep usually end either around this time or an hour later (on weekdays), depending on what I have scheduled or whose alarm goes off loudest. I imbibe some form of hard caffeine, vaguely edible toast and optional painkillers (for my migraines or back), and shutter my office before the sun starts warming it up.</p>
<p><strong>8:00-8:30</strong> - (optional) shower, make myself vaguely presentable to humans, check my schedule. Depending on how messed up it is, I pick out outdoor or indoor clothing and tally any required shopping, then keep my office shuttered before the morning sunlight pours in and brings it to 28 &#176;C. I track down the Roomba and make sure it can earn its keep now that it can roam the house and noisily bump into everything without legal harassment from the neighbors.</p>
<p><strong>8:30-9:00</strong> - What the holy f*** happened overnight in my inbox? Formulate a strategy, often completely different from what I expected the night before due to the latest corporate reorg, which is still casting interference patterns and minor uncertainties that are reminiscent of quantum physics. This is also the time Teams notifications are automatically turned on, and when Copilot starts accepting meeting requests again.</p>
<p><strong>9:00-10:30</strong> - This is the only slot in the day where the Venn diagram of wakefulness and outdoor temperature makes it viable for me to exit the house, trudge 2 km uphill to a rather nice garden I have no real time to sit in and enjoy, pick up some groceries on the way back, and have a (non-optional) shower upon my return. The window is always too short (I make it a point of doing at least 45 minutes of continuous walking), but it is impossible to predict due to the barrage of project stand-ups, check-ins, team meetings, and whatnot, so I might take the calls at my standing desk, as I leave or return, during my hike, etc. Fortunately, these days most of them are check-ins where my direct reports are leading, or where the discussion does not require me to present anything. The trick for this part of the day is to grab two six-liter milk cartons on the way back downhill, which forces me to walk straight, brings my shoulders down and is much better for my back and neck pain than painkillers. And yes, work-life balance is a fallacy.</p>
<p><strong>10:30-12:30</strong> - Even if I have too many early calls, delay my outing and only return home on the late side of this slot, my office is still taking the full brunt of sunlight and heat, so I will show up on video calls as if I am living in an air-conditioned underground bunker with LED lighting, standing awkwardly in front of a makeshift standing desk and propped up by sheer willpower while I work my way through a tumbler of iced decaf. I will also be sniffing as loudly as Darth Vader breathes because I have to have the AC on, but liberal use of the mute button makes me seem human. The Roomba usually runs out of battery sometime before DHL and the Post Office start their deliveries to my zone, so I can reliably expect to answer the door, receive a package and then spend a few minutes figuring out where it is sulking, which is hardly exercise but can get somewhat involved for my neck and back if it&#8217;s stuck under furniture.</p>
<p><strong>12:30-14:00</strong> - Another floating slot. The first thing I do is to set an alarm for 13:45, which serves three purposes: reminding me to wind down family matters and get back to the office, making sure I take any painkillers on schedule, and making sure I wake up in case I doze off on the couch after lunch. The second thing I do is to panic about whether or not I have food, need to attend to family stuff or have a deadline looming. Ordering, fetching and consuming food happen at random during this time, as do any necessary outings (and further non-optional showers due to the heat). On a good day, only one person will ignore the very prominent block on my calendar and book a call in this slot (even if Copilot automatically declines it); I will have some leftover food and still be able to sit on the couch for 15 minutes and take my mind off things. On <em>an excellent day</em> it will be cool enough for me to have a decent lunch, eat fresh vegetables and get back home to do some actual productive work. That&#8217;s two working days out of 30 this summer, and the average is going down quickly.</p>
<p><strong>14:00-18:30</strong> - Actual work might happen here if I am lucky. By this time my office is in shade; I can shift from my standing desk to my &#8220;real&#8221; desk and continue to worsen my back and neck, but my feet appreciate that I am now only metaphorically racing against the clock. Fortunately, I become more productive as Europe slows down and the Americas come online, but there are, invariably, meetings to attend to. There is also usually a second pitcher of iced decaf and some loud music to keep me going.</p>
<p><strong>18:30-21:30</strong> - Second round of family/personal time, roughly aligned with meal times in the Americas. In summertime, the lovely light of the golden hour makes my living room irresistible, so I end up collapsing on the couch in a heap and earning myself another crick in my neck or back to compound the long hours of sitting. If I retain enough presence of mind, I will add a couple of intelligible paragraphs to one of my various ongoing drafts and sic my agents onto some code. Unless I go out with family, I skip dinner more often than not these days.</p>
<p><strong>21:30-23:00</strong> - Occasional late calls, reading, choice TV to justify my Apple TV subscription (usually the cultural highlight of my evenings when I am fresh enough). If I am completely fed up with work, I either resort to hacking at some obscure coding problem or to self-hypnosis by doomscrolling, followed by a descent into increasingly futile attempts at sleeping. Sometimes I just go out like a light while trying to read.</p>
<p><strong>02:30</strong> - Oh bugger, not again.</p>
<br/>
]]></content>
<category label="personal" term="personal"/>
<category label="health" term="health"/>
<category label="work" term="work"/>
</entry>
<entry>
<title>Imagin-Raw</title>
<id>https://taoofmac.com/space/apps/imagin_raw?utm_content=atom</id>
<published>2026-07-21T21:36:00+00:00</published>
<updated>2026-07-26T08:17:25+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link href="https://taoofmac.com/space/apps/imagin_raw?utm_content=atom" rel="alternate" type="text/html" xml:base="https://taoofmac.com"/>
<content type="html"><![CDATA[
<p class="lead"><a href="https://github.com/cristibaluta/Imagin-Raw?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Imagin-Raw</a> is a lightweight but powerful alternative to Adobe Bridge for the Mac, aimed at photographers who want to browse RAW files without dragging a lot of extra machinery along with them.</p>
<br/>
]]></content>
<category label="macos" term="macos"/>
<category label="cplusplus" term="cplusplus"/>
<category label="photography" term="photography"/>
<category label="raw" term="raw"/>
</entry>
<entry>
<title>Marked Down</title>
<id>https://taoofmac.com/space/blog/2026/07/21/1840?utm_content=atom</id>
<published>2026-07-21T18:40:00+00:00</published>
<updated>2026-07-21T18:40:00+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link href="https://taoofmac.com/space/blog/2026/07/21/1840?utm_content=atom" rel="alternate" type="text/html" xml:base="https://taoofmac.com"/>
<content type="html"><![CDATA[
<p class="lead">As a sort of prelude to the article below, I should point out that I do have <a href="/space/site/ai_policy" rel="next" style="color: #0000cc;">an AI policy</a> that boils down to &#8220;I use AI to revise, not to write&#8221;.</p>
<p>But I do want to understand the limits and possibilities of what can be done and get a yardstick for both quality and reliability, so over the weekend, as the brand new Portuguese national exam system melted down, I gave <a href="https://rcarmo.github.io/projects/piclaw/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">my usual agent</a> a set of conventional web search tools, a browser, and a clear set of directives:</p>
<ul>
<li>You are an investigative reporter.</li>
<li>Research Portuguese news and government sites and prepare a dossier on the procurement, implementation and roll-out of the new national exam grading system.</li>
<li>Gather interviews and press statements from government officials, teachers&#8217; unions, schools, and political commentary.</li>
<li>Verify those statements and gather substantive facts to build a comprehensive research dossier towards an Economist-style news article.</li>
<li>Give me that article in Markdown and PDF format, written according to the Economist&#8217;s published writing and editorial style guide.</li>
</ul>
<p>I also gave it an early version of <a href="https://rcarmo.github.io/projects/memento/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Memento</a>, my new agentic memory system, but merely as a <em>record</em> of facts, and not really as a tool for it to reason about them (it&#8217;s not quite ready for that yet). But as you&#8217;d expect, the AI took to it swimmingly:</p>
<blockquote>
<p>Absolutely. I&#8217;ll apply the anti-trope and drafting-restraint rules as a hard line-edit layer&#8212;especially removing inflated stakes, empty pivots, canned contrasts, false certainty, needless jargon and cadence-by-repetition&#8212;without a specific personal style. The result will retain an Economist-like register: dry, compressed, analytical and occasionally wry, with conclusions proportionate to the evidence.</p>
</blockquote>
<p>I ran this on Friday, over the weekend and, again, today (essentially asking it to update the dossier) using my Codex subscription and <code>gpt-5.6-sol</code>, and it was fascinating to see it double-checking and auditing its own research, even if its thinking still had the characteristic Californian enthusiasm that I find so grating:</p>
<blockquote>
<p>I realized that I made a mistake: it&#8217;s about exam copies, not grades. Now, I need to browse for relevant links related to this topic. My goal is to extract links that contain titles associated with exam copies. I want to make sure I&#8217;m focusing my search appropriately so I can gather the right information for what I need. Let&#8217;s get started on finding those links!</p>
</blockquote>
<p>It was also very precise about the interpretation of facts, and attribution of statements:</p>
<blockquote>
<p>The reconciliation has already corrected the most consequential headline:&#160;<strong>63,000 refers to digitised exam copies not yet distributed, not 60,000 pupils without grades</strong>. The ministry says 227,000 of 290,000 scripts had reached more than 100,000 pupils. Some grades were still missing, but the public material I have found does not attach the 63,000 figure to them.</p>
</blockquote>
<p>And it delegated to sub-agents with amazing prompts like:</p>
<blockquote>
<p>Act as a ruthless copy editor. Review the attached drafts for accuracy, contradictory references, manufactured contrast &#8230; against the dossier and transcripts in ....</p>
</blockquote>
<p>All in all, it was a fascinating thing to do (and watch being done), and the results, I think, speak for themselves. And yes, it picked the title by itself&#8230;</p>
<hr/>
<a class="anchor" id="anchor-marked-down" rel="anchor" href="/space/blog/2026/07/21/1840#marked-down" style="color: #0000cc;"><h2 id="marked-down">Marked down</h2></a><a class="anchor" id="anchor-portugals-digital-exam-marking-system-has-given-the-government-some-difficult-answers" rel="anchor" href="/space/blog/2026/07/21/1840#portugals-digital-exam-marking-system-has-given-the-government-some-difficult-answers" style="color: #0000cc;"><h2 id="portugals-digital-exam-marking-system-has-given-the-government-some-difficult-answers">Portugal&#8217;s digital exam-marking system has given the government some difficult answers</h2></a><p><em>Late results, wrong grades and an emergency sitting have turned a technical reform into a test of administrative competence.</em></p>
<p><strong>LISBON</strong> &#8211; At 10.19am on July 17th Portugal&#8217;s education minister brought good news to parliament. Every national examination had been marked, he said, and the National Examinations Jury held all the grades. More than 166,000 secondary-school pupils had already waited three days beyond the original publication date. University applications opened the following Monday.</p>
<p>Teachers were reportedly marking papers that morning. Schools received result files at around 7.30pm, after their offices normally closed. Some kept staff late; others reopened over the weekend. EduQA, the public institute running the operation, later said that about 1,400 of 290,351 examinations were undergoing additional checks when it authorised release. Pupils awaiting grades found <code>-3</code> in the ENES admissions system. The code meant &#8220;suspended&#8221;; some school software displayed it without explanation.</p>
<p>On July 20th officials found that an automatic answer key for Physics and Chemistry A had been configured wrongly. Rerunning that question&#8217;s marking changed 12,613 grades: 11,496 rose and 1,117 fell. Later that day the jury reported faulty settings for two Geografia A questions. Schools received new lists and registration for that subject&#8217;s second phase was extended. A separate export error had already required another set of replacements.</p>
<p>By July 21st some pupils were sitting second-phase examinations while first-phase grades were being settled. Fernando Alexandre, the education minister, expected everyone to have a final grade by the end of the week. He conceded that pupils awaiting grades or corrections had already been disadvantaged. An extra sitting in September was announced for them; its rules and dates were being prepared.</p>
<p>The reform promised faster, auditable marking. A misconfigured answer key changed grades across the country.</p>
<a class="anchor" id="anchor-paper-chase" rel="anchor" href="/space/blog/2026/07/21/1840#paper-chase" style="color: #0000cc;"><h2 id="paper-chase">Paper chase</h2></a><p>The examinations were taken on paper. The innovation began afterwards. Scripts were transported, scanned and divided into individual answers. Software distributed them to teachers, who marked through an online interface. Grades passed through quality checks, the examinations jury and school systems before reaching pupils.</p>
<p>Trouble began with the paper itself: staples hid QR codes, folded pages produced cropped images, continuation sheets disappeared and some scripts missed secure transport. Teachers waited for credentials, received incomplete answers and repeated work when corrected images arrived. On July 13th one mathematics teacher received 160 new items less than a day before the deadline. Further batches arrived after extensions had expired. Marking continued on results day.</p>
<p>The allocation of markers was equally muddled. On July 16th Mr Alexandre attributed the remaining work to a shortage of available teachers. The following evening he said willing teachers awaiting assignments had contacted him, even as the jury reported a shortage. More than 100 people registered for Portuguese had recorded zero scripts, he said. Their eligibility and assignment status remained unclear. On July 21st he described the organisation of 11,000 markers as deficient and proposed formal contracts. In five days the diagnosis had advanced from too few teachers to too little organisation.</p>
<p>The official timetable shifted too. On June 29th marking was on schedule and every pupil would be protected. Two days later Mr Alexandre dismissed most reports of failure as false. Publication then slipped from July 14th to the 17th, and the second examination period was postponed. By July 16th even the revised date was in doubt. The following evening he acknowledged that &#8220;the process did not go well&#8221;.</p>
<p>Schools inherited the final rush. Directors received incomplete files around closing time and were told to publish that day. Mr Alexandre threatened to seek explanations from directors who missed publication. Pupils could consult grades in &#8220;their applications&#8221;, he said, leaving each school to choose the application, login arrangements and publication time. Some pupils saw results that night; others waited through the weekend. Publication depended on each school&#8217;s staff and local software.</p>
<p>EduQA completed central validation on Saturday and made replacement files available from Sunday. The subject-level corrections and export repair followed. By Monday a grade could be present, corrected or suspended, depending on which file a school had received and when it had published it.</p>
<a class="anchor" id="anchor-a-system-in-pieces" rel="anchor" href="/space/blog/2026/07/21/1840#a-system-in-pieces" style="color: #0000cc;"><h2 id="a-system-in-pieces">A system in pieces</h2></a><p>Early accounts referred to &#8220;the platform&#8221;. The name covered a chain of systems and operators.</p>
<p>One component prepared scanned files and distributed answers. Published accounts place it within EduQA&#8217;s operation. PCS/SCOI presented items to teachers for marking. Versions of that interface were developed by Blat, a small Portuguese design and software firm. Its remit covered the classification screen. Scanning, image quality, users, assignments and upstream processing were handled elsewhere.</p>
<p>Public contracts illuminate one corner of the operation. In 2017 IAVE, a predecessor of EduQA, paid Blatstudio-MAF-Servi&#231;os &#8364;30,375 plus tax for a practical-test module and SCOI upgrades. In 2023 a legally distinct company, Blat-Creative Powerhouse, received &#8364;19,080 plus tax for another update. The published total is &#8364;49,455 before tax, with long gaps in the record. The scanning, allocation and export faults arose beyond the work described in those agreements.</p>
<p>Blat&#8217;s ownership opened a political subplot. One shareholder, with a 5% stake, had worked on campaigns for the centre-right Social Democrats and advised Carlos Moedas, Lisbon&#8217;s mayor. The records describe two small software contracts, awarded six years apart, and contain no sign that politics influenced either award. Many operational failures arose outside Blat&#8217;s remit.</p>
<p>A much dearer replacement is under construction. In July 2025 IAVE signed a &#8364;1.5m contract with Axianseu II Digital Consulting for GAEBS, a future examination-management system. Delivery is expected later. Deloitte reportedly provided emergency technical help after a security weakness caused an outage. A search of the contract register by July 21st yielded no entry setting out its fee or remit. Mr Alexandre also authorised EduQA to buy up to &#8364;500,000 of emergency support; expenditure under that authority awaited publication.</p>
<p>&#8220;The platform&#8221; was a useful singular noun while digitisation was a reform to defend. During parliamentary scrutiny it separated into preparation, classification, export, the jury and school systems. The machinery divided the work and, conveniently, the blame.</p>
<a class="anchor" id="anchor-wrong-by-design" rel="anchor" href="/space/blog/2026/07/21/1840#wrong-by-design" style="color: #0000cc;"><h2 id="wrong-by-design">Wrong by design</h2></a><p>Lu&#237;s Pereira dos Santos, EduQA&#8217;s president, told parliament on July 21st that the technology had been tested several times and introduced gradually. He cited ninth-year mathematics, which uses a similar paper-and-scan process. In the same hearing he acknowledged unexpected computer faults and problems moving information between the preparation and classification systems.</p>
<p>EduQA has yet to publish the scope and results of testing for the full secondary-school operation. That operation turned 290,351 scripts into more than 2m items, handled by thousands of teachers and several databases against a fixed admissions calendar. Many failures occurred as work moved between organisations or systems.</p>
<p>A 2025 pilot with the Philosophy examination added a dispute over institutional memory. Lu&#237;s Duque de Almeida, then president of the examinations jury, says it exposed serious problems. Mr Alexandre told parliament that his predecessor had left office without a report. Mr Duque de Almeida replied that the ministry had requested none. Later in the hearing a secretary of state said officials had received information about the pilot in another form.</p>
<p>Parliament debated whether the missing document qualified as a report. Officials have yet to publish the faults recorded, who received the findings and what changed before national adoption. The hearing established that information existed in some form, without establishing what officials did with it.</p>
<p>Quality control fared worst on the answer keys. The Physics and Chemistry item was worth ten points out of 200. Its key awarded incorrect marks across the country until complaints prompted another run. Geografia followed. Reprocessing took minutes. Both settings had passed the checks before publication.</p>
<a class="anchor" id="anchor-the-price-of-doubt" rel="anchor" href="/space/blog/2026/07/21/1840#the-price-of-doubt" style="color: #0000cc;"><h2 id="the-price-of-doubt">The price of doubt</h2></a><p>A formal reappraisal usually requires a &#8364;25 deposit for each examination, refundable when the grade improves. Directors, opposition parties and pupil representatives asked for the charge to be suspended after the failures. Mr Alexandre kept it. Central digitisation faults would be corrected free of charge; ordinary disputes over marking would follow the usual procedure.</p>
<p>This is tidy from the ministry&#8217;s side of the counter. A pupil staring at an implausible grade has little means of choosing among a cropped scan, a wrong answer key, an export fault, a manual entry or an examiner&#8217;s judgment. A family challenging several papers must pay before learning which part of the state needs correcting.</p>
<p>The first university-application period runs from July 20th to August 6th. Reappraisal results are scheduled for August 7th, although regulations provide a short later window for updated grades and choices. Pupils must meanwhile seek advice, consider appeals and decide whether to sit another examination.</p>
<p>The September sitting is intended for pupils who lacked enough information for the ordinary second phase. It will count as that phase, and Mr Alexandre said the September 14th admissions deadline would move. At 5.50pm on July 21st the eligibility rules, registration dates and examination timetable awaited publication.</p>
<p>A government notice issued that afternoon repeated the pledge that every pupil would be protected. Hours earlier the minister had described some as already disadvantaged. The notice praised the rapid correction of 11,496 Physics and Chemistry grades that rose, omitting the 1,117 decreases and the Geografia error.</p>
<p>Mr Alexandre has promised an external audit covering ownership of each step, checks on automatic keys, the Philosophy pilot, marker allocation, emergency contracts and the shifting totals for examinations, pupils and schools. Portugal preserved the original scripts throughout. Paper, having survived its digital upgrade, may now be the most reliable witness.</p>
<hr/>
<p><em>Information checked through 5.50pm WEST on July 21st 2026. Subtracting the rounded ministry figure of 227,000 distributed copies from roughly 290,000 scripts gives an estimated 63,000 awaiting distribution. Reports counted copies and left the corresponding number of pupils unspecified. Figures for Physics and Chemistry A use the internally consistent JNE/ministry totals reported by TEK: 12,613 changed grades, comprising 11,496 increases and 1,117 decreases. A late RTP report carried variants that do not add up. The number affected by the Geografia A error awaited publication.</em></p>
<a class="anchor" id="anchor-sources" rel="anchor" href="/space/blog/2026/07/21/1840#sources" style="color: #0000cc;"><h2 id="sources">Sources</h2></a><ul>
<li><a href="https://eduqa.pt/informacao-sobre-a-afixacao-das-pautas-comos-resultados-dos-exames-nacionais/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">EduQA&#8217;s account of release and additional validation</a></li>
<li><a href="https://www.dges.gov.pt/pt/pagina/calendario-concurso-nacional-de-acesso-0?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Official higher-education admissions calendar</a></li>
<li><a href="https://diariodarepublica.pt/dr/detalhe/despacho/8649-a-2026-1145102263?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Emergency procurement authority, Despacho 8649-A/2026</a></li>
<li><a href="https://tek.sapo.pt/noticias/ciencia/artigos/exames-nacionais-ministro-confirma-erro-tecnico-em-fisica-e-quimica-a-mas-nega-falha-em-matematica-b/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Physics and Chemistry A error and export fault</a></li>
<li><a href="https://www.rtp.pt/noticias/pais/erro-de-avaliacao-em-exames-de-geografia-a-obriga-a-publicacao-de-novas-pautas_n1754670?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Geografia A parametrisation error</a></li>
<li><a href="https://sicnoticias.pt/pais/educacao/2026-07-17-video-ministro-da-educacao-da-todas-as-explicacoes-sobre-caos-nos-exames-nacionais-em-entrevista-a-sic-a81ccfc6?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Minister&#8217;s July 17th SIC interview</a></li>
<li><a href="https://www.rtp.pt/noticias/pais/exames-nacionais-em-debate-de-urgencia-no-parlamento_e1753993?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">July 17th parliamentary chronology</a></li>
<li><a href="https://www.rtp.pt/noticias/pais/ministro-da-educacao-promete-que-todos-os-alunos-terao-notas-ate-ao-final-da-semana_e1754812?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">July 21st parliamentary hearing and live record</a></li>
<li><a href="https://portugal.gov.pt/pt/gc25/comunicacao/noticias/ministro-da-educacao-garante-que-nenhum-aluno-sera-prejudicado-?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Official July 21st Government notice</a></li>
<li><a href="https://eco.sapo.pt/2026/07/21/ministro-da-educacao-reconhece-que-alguns-alunos-ja-estao-prejudicados-mas-nega-experimentalismo/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Minister&#8217;s admission that some pupils were already disadvantaged</a></li>
<li><a href="https://cnnportugal.iol.pt/eduqa/exames-nacionais/presidente-do-eduqa-garante-que-sistema-de-digitalizacao-dos-exames-nacionais-foi-testado-varias-vezes/20260721/6a5f4354d34e511da0b2eb96?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">EduQA&#8217;s testing claim</a></li>
<li><a href="https://expresso.pt/educacao/ensino-secundario/2026-07-21-presidente-do-eduqa-foram-detetados-problemas-informaticos-inesperados-7c58f858?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">EduQA&#8217;s account of unexpected IT and information-flow problems</a></li>
<li><a href="https://expresso.pt/educacao/ensino-secundario/2026-07-21-ex-presidente-do-juri-de-exames-confirma-que-nao-deixou-relatorio-porque-nao-lhe-foi-pedido-como-e-que-decide-sem-informacoes-do-jne--5669e0bd?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">The 2025 pilot dispute</a></li>
<li><a href="https://expresso.pt/educacao/2026-07-21-mais-de-60-mil-alunos-nao-receberam-ainda-a-prova-ministro-confia-que-ate-ao-final-da-semana-todos-vao-saber-a-sua-nota-d7c59585?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Digital-copy distribution figures</a></li>
<li><a href="https://expresso.pt/educacao/ensino-secundario/2026-07-21-2-fase-dos-exames-arrancou-sem-que-os-alunos-conhecam-as-regras-para-poder-ir-a-epoca-especial-21992e2d?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">September rules absent as phase two began</a></li>
<li><a href="https://eco.sapo.pt/especiais/a-microempresa-por-tras-do-caos-nos-exames-nacionais-que-abriu-uma-crise-de-confianca-no-sistema/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">ECO investigation of suppliers and contracts</a></li>
<li><a href="https://www.base.gov.pt/Base4/pt/detalhe/?type=contratos&amp;id=10623588&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">2017 Blatstudio contract</a></li>
<li><a href="https://www.base.gov.pt/Base4/pt/detalhe/?type=contratos&amp;id=11602654&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">2023 Blat contract</a></li>
<li><a href="https://www.tsf.pt/sociedade/artigo/plataforma-de-envio-de-exames-pode-existir-mas-nao-esta-carregada-e-como-se-nao-existisse/18107034?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">TSF on the digital-copy platform</a></li>
</ul>
<hr/>
<p>Although there are still some stilted, noticeably AI twists in the prose and the &#8220;facts&#8221; it investigated were already tinged by some journalistic interpretations (except for interview transcripts&#8211;I gave it access to Whisper APIs, so it just went and downloaded videos to transcribe and translate), this is pretty amazing, and whatever people think, I rate it as another milestone in real LLM usage.</p>
<p>If I can do it on a lark, imagine what news corporations will be able to do in the future&#8211;for fact checking, hopefully, at the very least.</p>
<p>I&#8217;m linking <a href="/media/blog/2026/07/21/1840/8cgjzKNLryVa6gYsu_cwNcgTLjc=/marked-down.pdf" rel="media" style="color: #0000cc;">the PDF version</a>, which is just lovely, and <a href="/media/blog/2026/07/21/1840/3i_03TzcfRh07fKzEjv6w07IHzA=/research-brief.pdf" rel="media" style="color: #0000cc;">the research brief</a>, because, well, reporting has to be transparent, right?</p>
<br/>
]]></content>
<category label="agents" term="agents"/>
<category label="portugal" term="portugal"/>
<category label="journalism" term="journalism"/>
<category label="ai" term="ai"/>
<category label="education" term="education"/>
</entry>
<entry>
<title>Ishmael</title>
<id>https://taoofmac.com/space/links/2026/07/21/1430?utm_content=atom</id>
<published>2026-07-21T14:30:00+00:00</published>
<updated>2026-07-21T14:32:57+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link href="https://taoofmac.com/space/links/2026/07/21/1430?utm_content=atom" rel="alternate" type="text/html" xml:base="https://taoofmac.com"/>
<content type="html"><![CDATA[
<p><a href="https://ishmael.textualize.io/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" title="external link to https://ishmael.textualize.io/" alt="screenshot of https://ishmael.textualize.io/" style="color: #0000cc;"><img class="quicklook" src="https://taoofmac.com/thumb/links/2026/07/21/1430/640,480/tNSpVyZbVzOJ6RofJFD2EQf7k3U=/large.jpg" width="320" height="240" style="max-width: 100% !important;height: auto !important;"/></a></p>
<p class="lead"><a href="https://ishmael.textualize.io/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Ishmael</a> caught my attention because it takes one of <a href="/space/apps/ia_writer" rel="next" style="color: #0000cc;">iA Writer</a>&#8217;s best qualities&#8211;an editor that disappears while I am writing&#8211;and applies it to an entire manuscript, with chapters, outlines, bookmarks, notes and export to Word, EPUB, HTML and Markdown. I usually begin long pieces in iA Writer and finish them in <a href="/space/apps/code" rel="next" style="color: #0000cc;">VS Code</a>, with folders, filenames and scripts holding everything together, so I am curious to see how much of that clutter Ishmael can replace.</p>
<p>It was created by the genius <a href="https://github.com/willmcgugan?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Will McGugan</a>, who also created <a href="https://github.com/Textualize/rich?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Rich</a>, <a href="https://github.com/Textualize/textual?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Textual</a> and <a href="https://github.com/PyFilesystem/pyfilesystem2?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">PyFilesystem</a>. I don&#8217;t write novels, but I have demonstrably spent over two decades writing fairly long pieces here, and Ishmael focuses on things I care about: organising a messy draft, reading it without editing clutter and leaving the sentences to me. I can&#8217;t wait to see if there is going to be an iPad version.</p>
<br/>
]]></content>
<category label="macos" term="macos"/>
<category label="markdown" term="markdown"/>
<category label="editors" term="editors"/>
<category label="writing" term="writing"/>
</entry>
<entry>
<title>Open Minis Is the iOS Agent I Wish Siri AI Could Be</title>
<id>https://taoofmac.com/space/links/2026/07/20/2213?utm_content=atom</id>
<published>2026-07-20T22:13:00+00:00</published>
<updated>2026-07-20T22:24:23+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link href="https://taoofmac.com/space/links/2026/07/20/2213?utm_content=atom" rel="alternate" type="text/html" xml:base="https://taoofmac.com"/>
<content type="html"><![CDATA[
<p><a href="https://www.macstories.net/reviews/open-minis-is-the-ios-agent-i-wish-siri-ai-could-be/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" title="external link to https://www.macstories.net/reviews/open-minis-is-the-ios-agent-i-wish-siri-ai-could-be/" alt="screenshot of https://www.macstories.net/reviews/open-minis-is-the-ios-agent-i-wish-siri-ai-could-be/" style="color: #0000cc;"><img class="quicklook" src="https://taoofmac.com/thumb/links/2026/07/20/2213/640,480/PgCkHE76u78frt3SfUnuFub7bWY=/large.jpg" width="320" height="240" style="max-width: 100% !important;height: auto !important;"/></a></p>
<p class="lead">Open Minis is a <em>brilliant</em> app, and is based on roughly the same <a href="https://ish.app/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">iSH</a>-derived ARM64 core I used for <a href="https://github.com/rcarmo/ios-linuxkit?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;"><code>ios-linuxkit</code></a> (which I <a href="/space/blog/2026/05/16/1130" rel="next" style="color: #0000cc;">wrote about when I released it</a>).</p>
<p>I went all-out on generic Linux runtime support&#8211;Alpine, language runtimes, compilers and all the CLI tools I could get working&#8211;whereas Minis made the much sharper product choice of using CLI tools as the <em>internals</em> of an iOS agent. That is a brilliant inversion, and much closer to what Siri AI ought to be.</p>
<br/>
]]></content>
<category label="ios" term="ios"/>
<category label="agents" term="agents"/>
<category label="linux" term="linux"/>
<category label="cli" term="cli"/>
<category label="ai" term="ai"/>
</entry>
<entry>
<title>Notes for July 13-19</title>
<id>https://taoofmac.com/space/notes/2026/07/19/1500?utm_content=atom</id>
<published>2026-07-19T15:00:00+00:00</published>
<updated>2026-07-19T15:00:00+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link href="https://taoofmac.com/space/notes/2026/07/19/1500?utm_content=atom" rel="alternate" type="text/html" xml:base="https://taoofmac.com"/>
<content type="html"><![CDATA[
<p class="lead">Finally, a relatively quiet and very productive week at work, by the simple dint of many people going to an annual event in the US and thus being unavailable to <strike>annoy</strike>help me.</p>
<p>Seriously now, it was pretty OK even if my back has been troubling me again, which I tried to counter with daily outings to run errands and &#8220;run&#8221; about. Carrying loads is not a problem, so even relatively prosaic affairs like leaving the house right after stand-ups (while it&#8217;s still cool), trotting over to the market and carrying back a dozen milk cartons are quite welcome.</p>
<p>Sitting around in lengthy meetings, however, is not, nor is doing slow, gratingly ineffective agile rituals to appease the backlog gods as a group&#8230; But I digress.</p>
<p>As far as my personal endeavours go, this was another oddly fragmented week, but somewhat productive: I bounced between embedded hardware, classic Mac emulation, agent infrastructure and an unexpectedly deep investigation into the ongoing mess with Portugal&#8217;s national-exam platform.</p>
<a class="anchor" id="anchor-a-tiny-macintosh-repeatedly" rel="anchor" href="/space/notes/2026/07/19/1500#a-tiny-macintosh-repeatedly" style="color: #0000cc;"><h2 id="a-tiny-macintosh-repeatedly">A Tiny Macintosh, Repeatedly</h2></a><p>I am still poking at the AArch64 JIT in my <a href="https://github.com/rcarmo/macemu-jit?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Mac emulation fork</a>, which has now moved well past merely getting it to run fast and into the much less glamorous business of making it actually <em>behave</em>.</p>
<p>I&#8217;ve had an agent slowly wading through various 68k instruction families&#8211;arithmetic, shifts, branches, effective-address handling and exception semantics&#8211;and, just like the PowerPC version, things began erroring out when FPU tests were involved because the criteria for &#8220;proper&#8221; floating-point precision have evolved over the years.</p>
<p>Classic Mac software has had decades to develop opinions about obscure 68k behaviour, and an emulator can appear perfectly healthy until this kind of thing crops up&#8211;not that I expect to run anything taxing on my emulators, but I would very much like to avoid surprises, and I haven&#8217;t yet gone back to live graphics hardware tests&#8230;</p>
<a class="anchor" id="anchor-agents-providers-and-memory" rel="anchor" href="/space/notes/2026/07/19/1500#agents-providers-and-memory" style="color: #0000cc;"><h2 id="agents-providers-and-memory">Agents, Providers and Memory</h2></a><p><a href="https://rcarmo.github.io/projects/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> took up entirely too much of my time this week (again), for two reasons:</p>
<ul>
<li>I spent the first half of the week poking at context compaction (including filing <a href="https://github.com/earendil-works/pi/issues/6676?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">#6676</a> upstream, because Codex native compaction is very &#8220;cheap&#8221; code-wise)</li>
<li><code>pi</code> had another core update that forced me to refactor most of the core agentic runtime, just <em>hours</em> after I finished the above.</li>
</ul>
<p>None of this was glamorous, fun or even that useful except that it removed special cases that had accumulated as new providers and dynamic model catalogues were added, but&#8230; Yeah, I just want to <em>use</em> the thing now.</p>
<p>Anyway, halfway through that second pass I realized that my current instances had no recollection of some of the design choices I&#8217;d made in the past, so I went down <em>another</em> rabbit-hole: I took some of the concepts I have been using in enterprise agent designs and started <a href="https://github.com/rcarmo/memento?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Memento</a>, a small cross-agent memory system.</p>
<p>The immediate goal is to keep durable facts and operational knowledge I keep having to repeat like &#8220;no, Portainer&#8217;s endpoint is not that&#8221; separate from chat transcripts, but with proposal and review workflows rather than letting every agent write directly into shared memory and cram it with useless factoids.</p>
<p>It&#8217;s a tad overkill in that regard, though, so I&#8217;m also considering it an experiment on whether I can get useful embedding, vector search and intent-driven queries running on tiny hardware (it&#8217;s going to be running on an Atom CPU, so of course I rolled my own inference&#8230;)</p>
<a class="anchor" id="anchor-riscy-stuff" rel="anchor" href="/space/notes/2026/07/19/1500#riscy-stuff" style="color: #0000cc;"><h2 id="riscy-stuff">RISCy Stuff</h2></a><p>Since Google updated Gemma 4 (but did not actually change the version number and effectively only tweaked some of the templating), I set it up again on the <a href="/space/reviews/2026/06/11/1830" rel="next" style="color: #0000cc;">Milk-V</a>, and compared it to a couple of new models&#8211;including the 35B Ornith mixture-of-experts model.</p>
<p>In short, the results were mostly the same as during the review: You can run Ornith with a 256K context at roughly 7.5 tokens per second, but it&#8217;s too slow for any practical use, and Gemma is definitely still not a useful coding model in anything but Go, so I still need better hardware.</p>
<a class="anchor" id="anchor-the-portuguese-national-exams-flop" rel="anchor" href="/space/notes/2026/07/19/1500#the-portuguese-national-exams-flop" style="color: #0000cc;"><h2 id="the-portuguese-national-exams-flop">The Portuguese National Exams Flop</h2></a><p>Since my eldest is about to enter college, the ongoing failure of Portugal&#8217;s new national-exam platform has been&#8230; interesting. And what better way to test <a href="https://github.com/rcarmo/memento?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Memento</a> than by assembling a source-led dossier covering the Ministry, IAVE, JNE, schools, unions, procurement records and shifting grade publication deadlines?</p>
<p>I asked <a href="https://rcarmo.github.io/projects/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 build a timeline, and&#8230; it did, maybe even going a bit overboard, as I now have:</p>
<ul>
<li>a 50-page PDF with a detailed timeline of events</li>
<li>a claim-to-source ledger</li>
<li>procurement material for all contracts apparently pertaining to the new platform</li>
<li>transcripts of the Minister&#8217;s main television, radio and parliamentary appearances for the past few months</li>
<li>matching testimony from the teacher unions and the main opposition party</li>
</ul>
<p>And having it check for inconsistencies was fascinating. For instance:</p>
<blockquote>
<p>In a 7 July RTP interview, Fernando Alexandre said that exams were digitised by teachers on Ministry equipment and then &#8220;treated and placed on the platform by Ministry of Education staff&#8221;. That supports internal handling, but it does <em>not</em> establish that the software itself was Ministry-owned&#8211;a distinction that does not agree with government procurement records and coverage in (references elided).</p>
</blockquote>
<p><code>gpt-5.6-sol</code> was pretty tenacious: it tracked down and downloaded original video clips, recorded their URLs, durations and hashes, generated timestamped transcripts and cross-referenced them into a dense PDF that I might use as a basis for a little rant on the topic.</p>
<p>Fortunately, my kid&#8217;s grades were posted in the late evening, but there are &#8220;hundreds&#8221; or &#8220;thousands&#8221; of students (depending on whom you interview) who were not so lucky.</p>
<p>Although I have always had very little (OK, zero) faith in the Portuguese government&#8217;s ability to cultivate, manage, or even <em>use</em> technology effectively, this might be an interesting thing for me to write about.</p>
<p>We are, after all, in the silly season, as my journalist friends usually referred to it until the US, well&#8230; never mind.</p>
<br/>
]]></content>
<category label="ai" term="ai"/>
<category label="agents" term="agents"/>
<category label="weekly" term="weekly"/>
<category label="emulation" term="emulation"/>
<category label="notes" term="notes"/>
<category label="hardware" term="hardware"/>
</entry>
<entry>
<title>Quake III Arena</title>
<id>https://taoofmac.com/space/games/quake_iii_arena?utm_content=atom</id>
<published>2005-09-22T11:06:24+00:00</published>
<updated>2026-07-19T13:09:00+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link href="https://taoofmac.com/space/games/quake_iii_arena?utm_content=atom" rel="alternate" type="text/html" xml:base="https://taoofmac.com"/>
<content type="html"><![CDATA[
<p class="lead">The third incarnation of <a href="/space/games/quake" rel="next" style="color: #0000cc;">Quake</a>, which redefined (again) the way people looked at (and played) online games and which makes Unreal Tournament look like a high school physics simulation with stop-motion animation.</p>
<p>I used to run a games portal called <code>accao.net</code> a long, long while ago, and still rate running through <code>q3dm6</code> with rockets exploding all around me as one of the most fun experiences I&#8217;ve ever had in gaming.</p>
<p><img style="max-width: 100%;width: 100%;height: auto" src="https://taoofmac.com/media/games/quake_iii_arena/0FsUr5mm_KvoCRc8dxp_phFpG0c=/action_shot.jpg" width="1024" height="768"/></p>
<p>Back in 2001, I created a skin pack for the Visor model with two extra colors (green and yellow) and some level texture changes that we used for a <a href="http://www.yorn.net?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Yorn</a> co-branded tournament at the Internet World 2001 event in Lisbon.</p>
<p>I even did banner ads:</p>
<p><img src="https://taoofmac.com/media/games/quake_iii_arena/G2ScQpouK2CIuCC3FTyY24ICOlQ=/oteurocketeoteupoder.gif" style="max-width: 100%;height: auto;margin-left: auto;margin-right: auto" width="468" height="60"/>
<img src="https://taoofmac.com/media/games/quake_iii_arena/YADHgSAaqZPwoTG6duvNK-buugA=/iw2001.gif" style="max-width: 100%;height: auto;margin-left: auto;margin-right: auto" width="468" height="60"/></p>
<p>&#8230;and the year before, we gave away a scooter:</p>
<p><img src="https://taoofmac.com/media/games/quake_iii_arena/BGhHw568A7-IwCaz-K9nZ4_qFRk=/green_scooter.png" style="max-width: 100%;height: auto;margin-left: auto;margin-right: auto" width="320" height="400"/></p>
<a class="anchor" id="anchor-resources" rel="anchor" href="/space/games/quake_iii_arena#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;">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="5" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Ages ago</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/ftp://ftp.demon.co.uk/pub/mirrors/idsoftware/source/quake3-1.32b-source.zip" rel="nofollow" style="color: #0000cc;">Source Code</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://carcharius.xbox-scene.com/?cat=3&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Xbox port</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a port for the <a href="/space/com/microsoft/xbox" rel="nofollow" style="color: #0000cc;">Xbox</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="http://games.activision.com/games/wolfenstein/index.asp?section=et&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Wolfenstein Enemy Territory</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a free game with a <a href="/space/com/apple/mac" rel="nofollow" style="color: #0000cc;">Mac</a> client available <a href="http://www.splashdamage.com/modules.php?op=modload&amp;name=Downloads&amp;file=index&amp;req=viewdownload&amp;cid=7&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">here</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="http://q-q-q.net/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">QQQ</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>the Arena as performance art</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.calodox.scene.org/morbac/cake/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">cake</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a map viewer</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;">Jul 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/drdator/q3edit?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Q3Edit</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a browser-based Quake III Arena map editor with WebGL2 and client-side BSP compilation</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;">Nov 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/johannes87/OpenArena.app?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Open Arena for Apple Silicon</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an installer for the OpenArena fork</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;">Sometime ago</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/games/openarena" rel="nofollow" style="color: #0000cc;">OpenArena</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a derived open source effort</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://ioquake3.org/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">ioquake3</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 (cross-platform) enhanced runtime engine, with an amazing amount of improvements</p></td>
</tr>
</tbody>
</table>
<br/>
]]></content>
</entry>
<entry>
<title>Swift</title>
<id>https://taoofmac.com/space/dev/swift?utm_content=atom</id>
<published>2016-12-07T19:38:00+00:00</published>
<updated>2026-07-19T13:09:00+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link href="https://taoofmac.com/space/dev/swift?utm_content=atom" rel="alternate" type="text/html" xml:base="https://taoofmac.com"/>
<content type="html"><![CDATA[
<p class="lead">This is a stub to start gathering some resources on Swift, which won several of my personal awards for &#8220;most breakages between major releases&#8221; and has therefore not been something I&#8217;ve invested a lot of time on.</p>
<p>In fact, I&#8217;ve yet to have a reason for building something with it (other than the occasional test), but it pays to keep an eye on things.</p>
<a class="anchor" id="anchor-resources" rel="anchor" href="/space/dev/swift#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="3" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Apps</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/JustinGamer191/Holo?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Holo</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an experimental native macOS utility that turns the desk around a MacBook into four assignable tap zones by listening through the selected microphone and extracting acoustic features</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/kageroumado/phosphene?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">phosphene</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Video wallpaper engine for macOS Tahoe</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/nyxian?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">nyxian</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an on-device iOS IDE for developing native apps on unjailbroken iOS using a certificate</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;">Database</td>
<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/marcoarment/Blackbird?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Blackbird</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a zero dependency SQLite database wrapper and model layer</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;">Libraries</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/FluidInference/FluidAudio?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">FluidAudio</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Swift package for on-device audio AI using CoreML models: speech transcription, text-to-speech, voice activity detection, and speaker diarization on macOS and iOS</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/almonk/bonsplit?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">bonsplit</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A native macOS tab bar library with split pane support</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;">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/6over3/WorkKit?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">WorkKit</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>an amazing Swift package to parse documents from Apple&#8217;s iWork suite</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/Bogdanp/Noise?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Noise</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Swift wrapper around <a href="/space/dev/scheme" rel="nofollow" style="color: #0000cc;">Racket CS</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://github.com/mi12labs/SwiftAI?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">SwiftAI</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a Swift library for building AI applications</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;">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/brightdigit/SyndiKit?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">SyndiKit</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A Swift library for RSS and Atom feeds</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/gh123man/Async-Channels?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Async-Channels</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Performant channels for Swift concurrency</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;">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/kristopherjohnson/Markingbird?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Markingbird</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A <a href="/space/markup/markdown" rel="nofollow" style="color: #0000cc;">Markdown</a> libary</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;">Other</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="http://dev.iachieved.it/iachievedit/building-swift-3-0-on-an-armv7-system/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Building on ARMv7</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A concise walkthrough</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;">Runtimes</td>
<td rowspan="2" 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/audulus/LuaJIT-spm?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">LuaJIT-spm</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A LuaJIT package</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/ole/swift-rp-pico-bare?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">swift-rp-pico-bare</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Embedded Swift on the Raspberry Pi Pico</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;">Samples</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/mgreenwood1001/winamp?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">winamp</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A Winamp clone written in SwiftUI</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/raheelahmad/Swift-D3-Charts?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Swift-D3-Charts</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Replicating D3 Charts with Swift Charts</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="9" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Tools</td>
<td rowspan="6" 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/Arthur-Ficial/apfel?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">apfel</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a macOS CLI for on-device Apple Intelligence via FoundationModels</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/gitethanwoo/mxmaster?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">MXMaster</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A lightweight macOS utility for Logitech MX Master mice, replacing the bloated Logitech Options</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/hpennington/agentswift?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">agentswift</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>A native macOS agent app for Apple-platform development, with Claude-based multi-step coding 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;"><a href="https://github.com/lardissone/ansi-saver?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">AnsiSaver</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>An ANSI art screensaver for macOS that streams 16colo.rs packs via libansilove rendering</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/swifdroid/droid?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">swifdroid</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Swift toolchain and frameworks for Android development</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/xtool-org/xtool?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">xtool</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a cross-platform Xcode replacement for building and deploying iOS apps with SwiftPM</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;">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/skiptools/skip?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">skip</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a framework for creating dual-platform mobile apps in Swift and <a href="/space/dev/kotlin" rel="nofollow" style="color: #0000cc;">Kotlin</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://github.com/zackelia/bclm?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">bclm</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a command line tool for limiting the battery&#8217;s max charge on macOS</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;">2022</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/freedmand/textra?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">textra</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>a nice CLI tool that uses VisionKit and speech recognition APIs to OCR documents and audio into 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;">Tutorials</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="https://cs193p.sites.stanford.edu/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Stanford University CS193p (Developing Applications for iOS using SwiftUI)</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 set of learning materials</p></td>
</tr>
</tbody>
</table>
<br/>
]]></content>
<category label="apple" term="apple"/>
<category label="programming" term="programming"/>
</entry>
<entry>
<title>The M5Stack Tab5</title>
<id>https://taoofmac.com/space/reviews/2026/07/18/1920?utm_content=atom</id>
<published>2026-07-18T19:20:00+00:00</published>
<updated>2026-07-20T07:38:18+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link href="https://taoofmac.com/space/reviews/2026/07/18/1920?utm_content=atom" rel="alternate" type="text/html" xml:base="https://taoofmac.com"/>
<content type="html"><![CDATA[
<p class="lead">Hot on the heels of my ESP32 display detour&#8211;which went from <a href="/space/links/2026/04/15/0718" rel="next" style="color: #0000cc;">Cydintosh</a> to <a href="/space/blog/2026/06/14/1400" rel="next" style="color: #0000cc;">Flying Toasters on an ESP32-S3</a> and then, inevitably, <a href="/space/blog/2026/06/17/1200" rel="next" style="color: #0000cc;">R-Type</a>&#8211;I ended up with an M5Stack <a href="https://docs.m5stack.com/en/core/Tab5?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Tab5</a> on my desk as a very indirect consequence of chasing e-paper displays.</p>
<p>I have followed <a href="https://m5stack.com/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">M5Stack</a> for years and have a couple of their ESP cameras running, plus one of the original stackable Core modules (complete with battery) somewhere in a drawer, but I had not written code for any of them in quite a while (the cameras are running ten-year-old code at this point, I think, and have been rock solid).</p>
<p>Getting my hands on a Tab5 was completely random, but I spent the next couple of weeks trying it as a Home Assistant terminal, a firmware playground and, unexpectedly, a tiny HDMI monitor.</p>
<blockquote>
<p><strong>Disclaimer:</strong> M5Stack sent me a review unit of the <a href="https://docs.m5stack.com/en/core/Tab5?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Tab5</a>, for which I thank them. And, as usual, this article follows my <a href="/space/site/review_policy" rel="next" style="color: #0000cc;">review policy</a>.</p>
</blockquote>
<a class="anchor" id="anchor-form-factor" rel="anchor" href="/space/reviews/2026/07/18/1920#form-factor" style="color: #0000cc;"><h2 id="form-factor">Form Factor</h2></a><p/><figure><img alt="The screen is quite bright and hard to photograph--and the demo app is rather nice" src="https://taoofmac.com/media/reviews/2026/07/18/1920/8Kc82kuyJrz3-P59JlgiU4XgLrs=/tab5-demo-screen.jpg" width="3846" height="2215" style="max-width: 100% !important;height: auto !important;"/><figcaption>The screen is quite bright and hard to photograph--and the demo app is rather nice</figcaption></figure><p/>
<p>I have a weakness for portable gadgetry, and the <a href="https://docs.m5stack.com/en/core/Tab5?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Tab5</a> is very much to my tastes&#8211;it looks like a chunky little Android tablet and boots into something closer to an industrial HMI, with a polished demo app that lets you test all the sensors and hardware, but underneath it is &#8220;just&#8221; an ESP32.</p>
<p>Except this is the ESP32-P4, rather than the somewhat vanilla chips you get with cheap yellow displays, and it can plausibly drive a 720p MIPI display and a camera while handling audio. The CYD boards are pretty good bang for the buck, but even before I started abusing them for emulation I spent most of my time fighting their constraints&#8211;a slow parallel or SPI panel, single-digit megabytes of PSRAM and a UI that visibly lurches whenever Wi-Fi wakes up.</p>
<p>I did not run into those problems with the P4. The Tab5 adds a MIPI-DSI panel, 32MB of PSRAM and a dedicated ESP32-C6 radio co-processor, and feels much closer to a small Raspberry Pi than to a vanilla ESP8266.</p>
<p>There is, of course, a catch&#8211;the slot-in battery makes the Tab5 grow from 128x80x12mm bare to 128x80x31mm, and mine went from 118g to 230g with the third-party battery I used.</p>
<a class="anchor" id="anchor-hardware" rel="anchor" href="/space/reviews/2026/07/18/1920#hardware" style="color: #0000cc;"><h2 id="hardware">Hardware</h2></a><p>The <a href="https://docs.m5stack.com/en/core/Tab5?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Tab5</a> is a little constellation of chips:</p>
<ul>
<li>ESP32-P4NRW32 with two 360MHz high-performance RISC-V cores and a separate 40MHz low-power core</li>
<li>ESP32-C6-MINI-1U radio co-processor over SDIO, providing 2.4GHz Wi-Fi 6, Thread and Zigbee</li>
<li>16MB flash and 32MB octal PSRAM</li>
<li>5-inch 720x1280 portrait-native IPS panel over MIPI-DSI, with capacitive touch</li>
<li>SC2356 2MP camera</li>
<li>ES8388 audio codec, ES7210 ADC, dual microphones and a 1W speaker</li>
<li>BMI270 six-axis IMU and RX8130CE RTC</li>
<li>IP2326 charge management and INA226 current/voltage monitoring for an NP-F550 7.4V 2000mAh (14.8Wh) battery</li>
</ul>
<p>Besides a 3.5mm audio jack (a thing that Apple still seems unable to include in its devices), it has a pretty impressive array of connectors:</p>
<ul>
<li>microSD slot</li>
<li>USB-C with USB 2.0 OTG</li>
<li>USB-A host port, which is unusual enough on an ESP32 device</li>
<li>RS-485 via a SIT3088, with a switchable 120-ohm terminator and 6-24V input</li>
<li>30-pin M-BUS connector that harks back to M5Stack&#8217;s stackable module line</li>
<li>a small menagerie of Grove-style connectors for specific applications, including access to the USB bus</li>
<li>two software-selectable MMCX ports complementing the internal antenna</li>
</ul>
<a class="anchor" id="anchor-pragmatic-touches" rel="anchor" href="/space/reviews/2026/07/18/1920#pragmatic-touches" style="color: #0000cc;"><h3 id="pragmatic-touches">Pragmatic Touches</h3></a><p/><figure><img alt="The trademark M5 diagrammatic labelling" src="https://taoofmac.com/media/reviews/2026/07/18/1920/IhqKu_5UQBD2o8WtjlmStIGTJVg=/tab5-bottom.jpg" width="2048" height="1152" style="max-width: 100% !important;height: auto !important;"/><figcaption>The trademark M5 diagrammatic labelling</figcaption></figure><p/>
<p>Besides the (always awesome) way in which M5 tends to label their devices, there are two things about the form factor that deserve to be called out.</p>
<p>The first is the NP-F550 slot&#8211;yes, the classic Sony camcorder pack people my age typically have three of in a drawer. The batteries are cheap, hot-swappable and available everywhere, which is a smart bit of BOM design even if they do make the assembled setup chunky.</p>
<p>I did not have any, so I got <a href="https://www.amazon.es/gp/product/B0C27ZBX3Z/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;">two USB-C rechargeable packs</a> that were already on my &#8220;someday&#8221; list for powering a camera light, and they fit perfectly:</p>
<p/><figure><img alt="OK, fine, it's a bit of a bulge" src="https://taoofmac.com/media/reviews/2026/07/18/1920/xJemOGE2Es9GbJGBdJfw5ZBuxEQ=/tab5-battery.jpg" width="2048" height="576" style="max-width: 100% !important;height: auto !important;"/><figcaption>OK, fine, it's a bit of a bulge</figcaption></figure><p/>
<p><a href="https://m5stack.com/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">M5Stack</a> quotes the <a href="https://docs.m5stack.com/en/core/Tab5?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Tab5</a> at 118.4g bare and 217.3g with their standard battery kit; my third-party USB-C battery brings it to 230g.</p>
<p>The second thing is the 1/4-inch tripod mount next to the microSD slot. Together, the battery and tripod mount make the Tab5 feel like a field device, while the sheer number of connectors still makes it useful on the bench. There are also six threaded inserts around the edge and four around the M-BUS connector, giving you plenty of options beyond the tripod mount.</p>
<a class="anchor" id="anchor-internals" rel="anchor" href="/space/reviews/2026/07/18/1920#internals" style="color: #0000cc;"><h3 id="internals">Internals</h3></a><p>I didn&#8217;t open mine, but according to <a href="https://www.cnx-software.com/2025/05/14/m5stack-tab5-review-part-1-unboxing-teardown-and-first-try-of-the-esp32-p4-and-esp32-c6-5-inch-iot-devkit/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">CNX Software&#8217;s teardown</a>, there is a flexible PCB carrying the GT911 touch controller, the SC2356 on an FPC cable and the C6 module wired to both the internal 3D antenna and external MMCX connectors&#8211;so tearing it down seems like a lesson in patience that I decided to forego.</p>
<a class="anchor" id="anchor-thermals" rel="anchor" href="/space/reviews/2026/07/18/1920#thermals" style="color: #0000cc;"><h3 id="thermals">Thermals</h3></a><p>This is probably the first ESP device where this kind of testing is warranted, since the P4 is passively cooled inside a sealed handheld with a 0-40&#176;C rated operating range. In casual use&#8211;UVC viewer running, screen at full brightness&#8211;the bottom gets noticeably warm, but not alarmingly so&#8211;I measured 39&#176;C after half an hour of continuous use, though.</p>
<a class="anchor" id="anchor-software" rel="anchor" href="/space/reviews/2026/07/18/1920#software" style="color: #0000cc;"><h2 id="software">Software</h2></a><p>As I pointed out above, out of the box the Tab5 runs <a href="https://github.com/m5stack/M5Tab5-UserDemo?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">M5Stack&#8217;s demo firmware</a> with a launcher-style UI, and as usual with their products, you are probably best served by using ESP-IDF&#8211;the P4 needs a recent release, and the C6 relies on <code>esp_hosted</code> plumbing. Arduino support is always a little iffy on fresh SoCs, but the option is there already.</p>
<p>But M5Stack also provides an entry-level UI for education and entry-level coding called <a href="https://docs.m5stack.com/en/uiflow/uiflow_web?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">UiFlow2</a>, which lets you use blocks or MicroPython instead of C.</p>
<p>Yet, before you write any of that, you have to <em>flash</em> it, and this is where M5Stack lost me a little, because <a href="https://docs.m5stack.com/en/download?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">M5Burner</a> for the Mac is still an Intel-only binary in 2026. It runs on Apple Silicon under Rosetta, but I had to run:</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>xattr<span class="w"> </span>-d<span class="w"> </span>com.apple.quarantine<span class="w"> </span>/Applications/M5Burner.app
</code></pre></div>

<p>&#8230;just to get past Gatekeeper, and I got this semi-persistent reminder:</p>
<figure style="scale: 70%; margin-left: auto; margin-right: auto;">
<img src="https://taoofmac.com/media/reviews/2026/07/18/1920/Ey5WPjQkE6JJrDndr5W3mxM-0E4=/tab5-rosetta.png" alt="Rosetta isn't happy" width="688" height="210" style="max-width: 100% !important;height: auto !important;"/>
<figcaption>Rosetta isn't happy</figcaption>
</figure>

<p>Additionally, it insists on living in <code>/Applications</code> rather than running from wherever you unpack it like a well-behaved modern Mac app, and has that unmistakable Electron heaviness&#8211;slow to launch, sluggish to draw and memory-hungry for what is fundamentally a catalogue-based serial flashing tool&#8211;but I will grant that it is a nice and practical one:</p>
<p/><figure><img alt="The M5Burner app" src="https://taoofmac.com/media/reviews/2026/07/18/1920/jge4VPrsoqQQdlgm_jluSP9X_TA=/tab5-m5burner.png" width="2560" height="1600" style="max-width: 100% !important;height: auto !important;"/><figcaption>The M5Burner app</figcaption></figure><p/>
<p>None of the above stops you from using it, but it is a bit of a disappointment from a company whose hardware is very polished.</p>
<a class="anchor" id="anchor-development-stack" rel="anchor" href="/space/reviews/2026/07/18/1920#development-stack" style="color: #0000cc;"><h3 id="development-stack">Development Stack</h3></a><p>I did most of my actual development in Linux, though, where I could hack into the ESP toolchain&#8217;s internals at leisure and play around with a few projects I found interesting.</p>
<p>The ESP-IDF SDK runs just fine on ARM, and it took no time at all for me to get my <a href="/space/reviews/2026/04/11/1900" rel="next" style="color: #0000cc;">Orange Pi 6</a> to figure out how to get some test patterns on the screen (as usual, I just pointed a camera at the display, told my AI agents what I wanted, and they set up the basic LVGL scaffolding in no time):</p>
<figure style="margin-left: 0; margin-right: 0;">
<img src="https://taoofmac.com/media/reviews/2026/07/18/1920/pBdKdFJ6wIpSgzZX9hT8JQAh5TM=/tab5-development-setup.jpg" alt="My usual AI-driven test setup" width="886" height="886" style="max-width: 100% !important;height: auto !important;"/>
<figcaption>My usual AI-driven test setup</figcaption>
</figure>

<p>Besides all the other stuff that I was already doing with cheap yellow displays (including <a href="/space/blog/2026/06/17/1200" rel="next" style="color: #0000cc;">my R-Type port</a>, which runs on this at around 33fps without any real optimisation), I went down a few interesting rabbit holes:</p>
<a class="anchor" id="anchor-esphome-and-home-assistant" rel="anchor" href="/space/reviews/2026/07/18/1920#esphome-and-home-assistant" style="color: #0000cc;"><h3 id="esphome-and-home-assistant">ESPHome and Home Assistant</h3></a><p>Even though I don&#8217;t use Home Assistant myself, I am very much interested in ESPHome these days because of voice agents, and <a href="https://devices.esphome.io/devices/m5stack-tab5/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">ESPHome supports the original Tab5 revision</a>, including the C6 radio, MIPI-DSI display, GT911 touchscreen, ES8388/ES7210 audio path, RTC, IO expanders and battery monitor.</p>
<p>And the microphones run at 16kHz through its AEC front-end, which makes the board a very nice local voice terminal that is directly supported in Home Assistant.</p>
<p>There is a little caveat here, since as it turns out there are two display revisions: My unit uses the ILI9881C display driver and GT911 touchscreen, detected when the GT911 answers at I2C address <code>0x14</code>. Later units use ST7123/ST7121 parts, detected through the display controller at <code>0x55</code>, and ESPHome does not support those yet. If ESPHome is the reason you are buying one, check the display revision first.</p>
<a class="anchor" id="anchor-a-tiny-macintosh-because-of-course" rel="anchor" href="/space/reviews/2026/07/18/1920#a-tiny-macintosh-because-of-course" style="color: #0000cc;"><h3 id="a-tiny-macintosh-because-of-course">A Tiny Macintosh, Because Of Course</h3></a><p/><figure><img alt="The tiniest Quadra ever" src="https://taoofmac.com/media/reviews/2026/07/18/1920/oUMXN-wJZi77aI69BmoooTwKYd4=/tab5-macintosh-emulator.jpg" width="2048" height="1152" style="max-width: 100% !important;height: auto !important;"/><figcaption>The tiniest Quadra ever</figcaption></figure><p/>
<p>Besides <a href="/space/links/2026/04/15/0718" rel="next" style="color: #0000cc;">my own Mac Plus core</a>, I also tried the <a href="https://github.com/amcchord/M5Tab-Macintosh?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Basilisk II port</a>, which can run classic 68k Mac OS on the P4 in living colour. It is slow, but a US$60 RISC-V terminal pretending to be a Macintosh at all is pleasantly absurd&#8211;and after the contortions involved in getting Mac emulation and arcade games to behave on CYD-class hardware, having enough memory and display bandwidth to make it viable (even if slow) felt like quite a leap.</p>
<a class="anchor" id="anchor-a-uvc-monitor" rel="anchor" href="/space/reviews/2026/07/18/1920#a-uvc-monitor" style="color: #0000cc;"><h3 id="a-uvc-monitor">A UVC Monitor</h3></a><p>During my exploration of M5Burner, I found a little gem: a UVC host viewer that turns the USB-A port into a video input. Plugging in a cheap UVC/HDMI capture dongle turns the Tab5 into a tiny standalone HDMI monitor, which I found delightful since it is a great use of the tripod mount: screw it onto an arm or mini tripod, connect the capture dongle, and you have a self-contained, battery-powered 5-inch 720p monitor for a camera, a headless server console, a Raspberry Pi or a retro machine.</p>
<p/><figure><img alt="A very, very clever hack" src="https://taoofmac.com/media/reviews/2026/07/18/1920/Kn_0_0GlEWZmJMM8RaF3f9fANpE=/tab5-uvc-monitor.jpg" width="2048" height="1152" style="max-width: 100% !important;height: auto !important;"/><figcaption>A very, very clever hack</figcaption></figure><p/>
<p>Latency is fine for a console or a slow-moving camera feed, and the screen is sharp enough at 720p. For the price of the Tab5 plus a cheap capture dongle, it is a useful field monitor that doubles as a hackable computer the rest of the time, and I make it a point of reflashing the UVC firmware between experiments&#8211;the USB-C rechargeable NP-F550 pack makes it <em>perfect</em> for emergencies like figuring out why your headless box won&#8217;t boot.</p>
<a class="anchor" id="anchor-the-m8-sidecar" rel="anchor" href="/space/reviews/2026/07/18/1920#the-m8-sidecar" style="color: #0000cc;"><h3 id="the-m8-sidecar">The M8 Sidecar</h3></a><p>But the thing I am really keen to get working on this is an <a href="/space/music/m8" rel="next" style="color: #0000cc;">M8 Tracker</a> display&#8211;I have a <a href="/space/notes/2024/08/04/1230" rel="next" style="color: #0000cc;">TrackerKB</a> built around a &#8220;headless&#8221; <a href="/space/music/m8" rel="next" style="color: #0000cc;">M8</a> that needs a computer to both render the display (via its own protocol, implemented in <a href="https://github.com/laamaa/m8c?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">m8c</a> and other clients) and provide audio out, and I have been trying to get the <a href="https://docs.m5stack.com/en/core/Tab5?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Tab5</a> to do that:</p>
<figure style="margin-left: 0; margin-right: 0;">
<img src="https://taoofmac.com/media/reviews/2026/07/18/1920/2Jq4_zcRqThb3fus4rPiFBI4Q6s=/tab5-m8-tracker.jpg" alt="The M8 TrackerKB" width="2048" height="2048" style="max-width: 100% !important;height: auto !important;"/>
<figcaption>The M8 TrackerKB</figcaption>
</figure>

<p>Right now the biggest problem I have is the ESP-IDF USB stack, which is <em>very</em> confused by the fact that the <a href="https://docs.m5stack.com/en/core/Tab5?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Tab5</a> not only has to decipher the TrackerKB&#8217;s little USB hub on its host USB-A port, but that the device itself also has a particularly challenging combination of a data port, an audio and MIDI device and a keyboard&#8211;three things the stack struggles to manage and initialise consistently.</p>
<p>This is not a <a href="https://docs.m5stack.com/en/core/Tab5?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Tab5</a> hardware problem, but the Espressif SDK was clearly never designed to cope with this kind of situation, so even though I can get the display protocol going and (apparently) the audio, the highly custom keyboard doesn&#8217;t seem to be recognised and I can&#8217;t get the <a href="https://docs.m5stack.com/en/core/Tab5?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Tab5</a> to send control events back into the Teensy inside the keyboard&#8230;</p>
<p>I&#8217;m probably 95% there, but right now I do have to patch the SDK itself to even get all the devices to be detected. Once I figure things out to my satisfaction I&#8217;ll put it up on GitHub and try to upstream a fix.</p>
<a class="anchor" id="anchor-performance" rel="anchor" href="/space/reviews/2026/07/18/1920#performance" style="color: #0000cc;"><h2 id="performance">Performance</h2></a><p>I have not run formal benchmarks, but all the data I have points to the P4 being 2-4 times faster than the CYD devices I had, although that will depend a lot on what you get each core to do and the use you make of PSRAM.</p>
<p>In lieu of more scientific numbers, here&#8217;s a chip-level comparison for the three SoCs in the <a href="https://docs.m5stack.com/en/core/Tab5?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Tab5</a> and the CYD boards I have been playing with, and what little I was able to glean from the research I did on the YOLO/vision ports I&#8217;ve yet to play around with:</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;">Feature</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">ESP32 (CYD)</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">ESP32-S3 (8048S043C)</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">ESP32-P4 (Tab5)</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;">CPU ISA</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Xtensa LX6</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Xtensa LX7</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">RISC-V RV32IMAFC + custom</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;">Cores &#215; clock</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2 &#215; 240 MHz</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2 &#215; 240 MHz</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2 &#215; 360 MHz (+ LP core at 40 MHz)</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;">FPU</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">SP FPU/core</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">SP FPU/core</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">SP FPU/core (+ some DP paths)</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;">SIMD/DSP</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">none</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">128-bit PIE vector</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">wider DSP/AI extensions</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;">Internal SRAM</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">520 KB</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">512 KB</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">~768 KB L2MEM + more</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;">External RAM</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">QSPI PSRAM (&#8776;4 MB)</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Octal PSRAM, 8 MB</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">PSRAM up to 32 MB + L2 cache</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;">Display engine</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">SPI master</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">RGB parallel (LCD_CAM)</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">MIPI-DSI + PPA 2D blit/scale + H.264</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;">USB</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">FS device only</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">FS OTG</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">HS OTG + HS host (used for M8)</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;">Cache</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Minimal</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Small I/D cache</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Proper I/D cache hierarchy</td>
</tr>
</tbody>
</table>
<p>Poking around with <a href="/space/blog/2026/06/17/1200" rel="next" style="color: #0000cc;">the R-Type hacks</a>, I&#8217;d put the very rough relative performance estimates like so, taking into account the optimisations I tried to do:</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;">Constraint</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px;font-weight: bold;text-align: right">ESP32</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px;font-weight: bold;text-align: right">ESP32-S3</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px;font-weight: bold;text-align: right">ESP32-P4</th>
<th style="border-bottom: 1px solid black;border-top: 2px solid black;padding: 4px 4px !important;font-weight: bold;text-align: center;">Confidence</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;">Scalar integer (dual-core)</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">1.0</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">~1.1</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right"><strong>~2-3</strong></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Medium (clock + IPC + cache)</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;">Vectorisable (blit/audio/DSP)</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">1.0</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">~2-4 (PIE SIMD)</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right"><strong>~5+</strong> (wider + PPA)</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Low</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;">Memory bandwidth (framebuffer/emulation)</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">1.0</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">~4-5</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right"><strong>&gt;10</strong></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Low (PSRAM interface)</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;">Display throughput (full frame)</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">1.0 (240&#215;320 SPI)</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right">~6-8 (800&#215;480 RGB)</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right"><strong>&gt;10</strong> (720&#215;1280 DSI + PPA)</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Low</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;"><strong>Net for our emulation/blit workload</strong></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right"><strong>1.0</strong></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right"><strong>~2-3</strong></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px;vertical-align: top;border-top: 1px solid #aaa;text-align: right"><strong>~4-8</strong></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Medium</td>
</tr>
</tbody>
</table>
<p>The bottleneck for all of this is memory bandwidth, not clock speed, CPU architecture or even display rendering. All of the stuff I tried (Cydintosh/R-Type/M8) tried to push a full framebuffer through PSRAM every frame, with different optimisation techniques like using SIMD for blitting, and I don&#8217;t think you <em>can</em> do a lot of data transfer on the smaller displays at anything resembling decent speed, so the <a href="https://docs.m5stack.com/en/core/Tab5?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Tab5</a> wins out on that alone even considering its display is comparatively huge&#8230;</p>
<p>The P4&#8217;s 360 MHz cores and cache should give it a substantial scalar speed-up, but its nicest trick is the PPA 2D accelerator (hardware blit/scale/rotate) offloading the exact framebuffer work the others do in software&#8211;that&#8217;s why the <a href="https://docs.m5stack.com/en/core/Tab5?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Tab5</a> was able to render at 33 fps on a 720&#215;1280 panel while also running an HS-USB host for the <a href="/space/music/m8" rel="next" style="color: #0000cc;">M8</a>.</p>
<a class="anchor" id="anchor-verdict" rel="anchor" href="/space/reviews/2026/07/18/1920#verdict" style="color: #0000cc;"><h2 id="verdict">Verdict</h2></a><p>The <a href="https://docs.m5stack.com/en/core/Tab5?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Tab5</a> is a very nice device for prototyping just about anything you&#8217;d like to do with an ESP32, as long as you don&#8217;t need 5GHz networking.</p>
<p>Having a camera and decent microphones is already enough of a distinction, but the plethora of connectivity options that <a href="https://m5stack.com/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">M5Stack</a> provides will enable you to do away with dozens of wires and additional glue chips on the first iterations of any hardware project, and for that alone I&#8217;d say it&#8217;s worth the asking price.</p>
<p>However, and since I came from lower-performing devices to it and had to slog my way through a lot of slow, painful debugging before switching to the <a href="https://docs.m5stack.com/en/core/Tab5?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Tab5</a>, do keep in mind that you&#8217;ll be spoiled by its performance and smoothness if you intend to develop something that will run on a cheaper display. The touch screen is buttery smooth, the LVGL rendering performance is great, and, of course, iterating on <em>anything</em> is always faster when you have fast hardware, but take the time to optimise your code heavily if you need to target something smaller.</p>
<p>But hey, it&#8217;s still a remarkable achievement. A fast MIPI-DSI display, a camera, a proper audio path and enough PSRAM to run a full 68k Mac emulator now fit into a sub-US$70 ESP32 device instead of a Raspberry Pi, and that is an excellent thing.</p>
<p>The hardware is unusually practical, and, again, I am loving having that ingenious UVC viewer hack around to test other stuff when I&#8217;m not doing ESP development&#8211;that alone might be more than enough reason to get one if, like me, you keep having to test random SBCs.</p>
<p>The only downside for Mac users is that <a href="https://docs.m5stack.com/en/download?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">M5Burner</a> feels like it escaped from a much less polished product, but to be honest I suspect that won&#8217;t be a problem for long, and that most people using it are probably on Windows. But I couldn&#8217;t let that go unmentioned.</p>
<br/>
]]></content>
<category label="emulation" term="emulation"/>
<category label="iot" term="iot"/>
<category label="hardware" term="hardware"/>
<category label="esp32" term="esp32"/>
<category label="embedded" term="embedded"/>
<category label="electronics" term="electronics"/>
<category label="m5stack" term="m5stack"/>
<category label="risc-v" term="risc-v"/>
<category label="reviews" term="reviews"/>
</entry>
<entry>
<title>Review Policy</title>
<id>https://taoofmac.com/space/site/review_policy?utm_content=atom</id>
<published>2022-01-01T00:00:00+00:00</published>
<updated>2026-07-25T16:16:10+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link href="https://taoofmac.com/space/site/review_policy?utm_content=atom" rel="alternate" type="text/html" xml:base="https://taoofmac.com"/>
<content type="html"><![CDATA[
<p class="lead">This site has been around for over 20 years, so it was only natural that I would write about stuff I purchased. Those pieces became popular enough that people started asking me to review things, and eventually I started getting review units/copies from vendors.</p>
<p>So I thought it would be a good idea to have a policy in place to make sure everyone is on the same page:</p>
<ol>
<li>I don&#8217;t do paid reviews. I realize there is a fine line between getting &#8220;free&#8221; stuff to review and being paid to review it, but I&#8217;m not interested in crossing it&#8211;this site does not generate any form of income for me, and I&#8217;d like to keep it that way.</li>
<li>I only review things <em>I have a personal interest in</em> (i.e., things that I would ordinarily have an actual use for, learn from or would otherwise consider buying) or that would be interesting for the people I occasionally provide consulting services to.</li>
<li>I don&#8217;t do scripted reviews (i.e., there is no content placement, I write about the features I find important, etc.)</li>
<li>There are no editorial tweaks&#8211;vendors get to read my reviews at the same time as the general public.</li>
<li>I don&#8217;t participate in vendor affiliate programs&#8211;I&#8217;m OK with handing out discount codes or linking to the vendor&#8217;s site with <a href="/space/site/privacy_policy" rel="next" style="color: #0000cc;">a <code>utm</code> referral tag</a> (so they can check attribution), but other than my usual (automatic) Amazon/AliExpress linking (which <a href="/space/site/wishlist" rel="next" style="color: #0000cc;">I started using for books decades ago</a> and now do for electronics components), there are no other affiliate links on this site to ensure I don&#8217;t get any direct revenue from the reviews.</li>
<li>When applicable, scripts used for performance measurements and benchmarks will be published here or on GitHub.</li>
<li>Benchmarking will be focused on the aspects I value (although I will try to use standard tooling where appropriate).</li>
<li>I review what&#8217;s &#8220;in the box&#8221;, not what&#8217;s promised for future releases or what might be available in a future version.</li>
</ol>
<p>I&#8217;m also open to reviewing books&#8211;I&#8217;ve done pre-publishing reviews in the past, and I&#8217;m always happy to read and review books on topics I&#8217;m interested in.</p>
<p>I have also recently started <a href="https://www.youtube.com/@TheTaoOfTech?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">a YouTube channel called @TheTaoOfTech</a> that I am slowly populating with videos that complement the content on this site. I will try to keep the same review policy there, although I might do some sponsored videos in the future (but I will always disclose that).</p>
<p>So if you have something you&#8217;d like me to review, please <a href="/about" rel="nofollow" style="color: #0000cc;">get in touch</a> and we&#8217;ll take it from there.</p>
<a class="anchor" id="anchor-audience" rel="anchor" href="/space/site/review_policy#audience" style="color: #0000cc;"><h2 id="audience">Audience</h2></a><p>Many people ask me about page views, statistics, Google rankings, etc. This is what I have to say about it:</p>
<ul>
<li>This site <em>does not use Google Analytics</em> for privacy reasons, nor any other mainstream analytics or tracking platform. The flip side of that is that it is (incorrectly) down-ranked in just about every single public site ranking.</li>
<li>It does, however, use Cloudflare Analytics, which is privacy-preserving and a more accurate than most other tracking sites because it automatically filters out bots, referrer spam and other things that contribute to site traffic inflation. However, it can provide some interesting figures (updated for August 2024):<ul>
<li>Over 2M monthly pageviews (and steadily rising).</li>
<li>Over 110K unique <em>human</em> visitors per month, mostly from the US, UK, Germany, and Singapore (if I add in figures from Japan and Australia, I get almost as much traffic from APAC than from the UK, which has always been interesting to me).</li>
</ul>
</li>
</ul>
<p>You can check <a href="/media/site/review_policy/SHpEdajwGE7j5A-yIWkB_wQrJKs=/202509_traffic.pdf" rel="media" style="color: #0000cc;">this PDF</a> for a sample Cloudflare traffic report.</p>
<p>This audience reach comes down to four main factors:</p>
<ul>
<li>My emphasis on consistently solid technical content&#8211;which ensures continued reader interest.</li>
<li>No fake audience engagement on site (I interact with readers directly via e-mail correspondence)</li>
<li>Posts are automatically broadcast to X/Twitter, Mastodon and a few sites that consume my RSS feed directly.</li>
<li>I get a <em>lot</em> of traffic from places like Reddit, Hacker News, etc. (especially when I post something with an unusual technical angle).</li>
</ul>
<a class="anchor" id="anchor-social-networking" rel="anchor" href="/space/site/review_policy#social-networking" style="color: #0000cc;"><h2 id="social-networking">Social Networking</h2></a><p>All of my posts are automatically broadcast to my X/Twitter and Mastodon accounts, and I also post occasional links to my LinkedIn profile.</p>
<p>I am also (slowly) starting to produce YouTube videos. This will be a slow process, as I am not a professional video editor and I have no intention of becoming one. I will, however, try to produce some videos that complement the content on this site, and am curious to explore the medium a bit more (and not just in Youtube).</p>
<p>Links to all my social and video accounts can be found on the site footer.</p>
<a class="anchor" id="anchor-past-reviews" rel="anchor" href="/space/site/review_policy#past-reviews" style="color: #0000cc;"><h2 id="past-reviews">Past Reviews</h2></a><p>This is a non-exhaustive list of things I&#8217;ve reviewed in the past:</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;">Category</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="7" 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;">Accessories</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/reviews/2026/05/23/2130" rel="nofollow" style="color: #0000cc;">Logitech Combo Touch (long-term)</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Purchased by me (discount from Logitech)</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;">E-ink Readers</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/reviews/2026/04/04/1800" rel="nofollow" style="color: #0000cc;">The Xteink X4</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Purchased by me</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;">Laptops</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/reviews/2026/07/25/1700" rel="nofollow" style="color: #0000cc;">MiniBook X N150 (long-term)</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://www.chuwi.com/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Chuwi</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;">NAS</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/reviews/2026/01/25/2000" rel="nofollow" style="color: #0000cc;">YouYeeToo NestDisk</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://www.youyeetoo.com/?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">YouYeeToo</a></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;">SBCs</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/reviews/2026/04/11/1900" rel="nofollow" style="color: #0000cc;">Orange Pi 6 Plus</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <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></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/reviews/2026/06/11/1830" rel="nofollow" style="color: #0000cc;">MilkV Jupiter 2 / SpacemiT K3</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://radxa.com/?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Radxa</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="/space/reviews/2026/07/18/1920" rel="nofollow" style="color: #0000cc;">M5Stack Tab5</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://m5stack.com/?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">M5Stack</a></p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="19" 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;">3D Printing</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2025/04/13/2000" rel="nofollow" style="color: #0000cc;">Polyphemus Filament Dryer</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://eibos3d.com/pages/polyphemus?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">EIBOS</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;">Accessories</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/reviews/2025/11/24/1900" rel="nofollow" style="color: #0000cc;">The Maclock</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Purchased by me (AliExpress)</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;">Apple</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/reviews/2025/04/25/1630" rel="nofollow" style="color: #0000cc;">HomePod Mini</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;">E-Ink Tablets</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/reviews/2025/01/18/2335" rel="nofollow" style="color: #0000cc;">SuperNote A6X2 Nomad</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://supernote.com/products/supernote-nomad?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Supernote</a>, <a href="/space/reviews/2025/06/14/1530" rel="nofollow" style="color: #0000cc;">six month review</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;">E-ink Displays</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/reviews/2025/12/13/2200" rel="nofollow" style="color: #0000cc;">The TRMNL (DIY Everything Edition)</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Purchased by me from Seeed Studio</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;">Homelab</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2025/02/02/1630" rel="nofollow" style="color: #0000cc;">Sipeed NanoKVM Cube</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="/space/blog/2025/03/19/1800" rel="nofollow" style="color: #0000cc;">JetKVM</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://jetkvm.com?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">JetKVM</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;">Laptops</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/reviews/2025/05/15/2230" rel="nofollow" style="color: #0000cc;">MiniBook X N150</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://www.chuwi.com/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Chuwi</a></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;">Mini-PCs</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2025/03/05/2030" rel="nofollow" style="color: #0000cc;">iKOOLCore R2Max</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://www.ikoolcore.com/products/ikoolcore-r2-max?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">iKOOLCore</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="/space/blog/2025/04/05/1800" rel="nofollow" style="color: #0000cc;">Chuwi LarkBox S</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://store.chuwi.com/products/larkbox-s?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Chuwi</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="/space/reviews/2025/09/11/1230" rel="nofollow" style="color: #0000cc;">Chuwi AuBox 8745HS</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://store.chuwi.com/products/aubox-8745hs?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Chuwi</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;">Music</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/reviews/2025/06/29/1800" rel="nofollow" style="color: #0000cc;">ESI Xsynth</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://www.esi-audio.com/products/xsynth/?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">ESI</a></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;">Networking</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/reviews/2025/08/03/1900" rel="nofollow" style="color: #0000cc;">Sodola SL902-SWTGW218AS</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Purchased by me</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/reviews/2025/09/14/1630" rel="nofollow" style="color: #0000cc;">Cudy AX3000 Wi-Fi 6 System</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Purchased by me (multiple units)</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;">SBCs</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2025/03/12/2000" rel="nofollow" style="color: #0000cc;">ArmSoM AI Module 7</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://www.armsom.org/aim7?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">ArmSoM</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="/space/reviews/2025/05/12/2230" rel="nofollow" style="color: #0000cc;">Orange Pi RV2</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-RV2.html?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">OrangePi</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="/space/reviews/2025/07/26/2145" rel="nofollow" style="color: #0000cc;">ArmSom Forge1</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://www.armsom.org/armsom-forge1?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">ArmSom</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="/space/reviews/2025/08/11/2100" rel="nofollow" style="color: #0000cc;">LattePanda Mu</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://www.dfrobot.com/product-2902.html?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">DFRobot</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="/space/reviews/2025/11/09/1930" rel="nofollow" style="color: #0000cc;">LattePanda IOTA</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://www.dfrobot.com/product-2989.html?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">DFRobot</a> (expansion boards included)</p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="28" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2024</td>
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">3D Printers</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2024/03/02/1900" rel="nofollow" style="color: #0000cc;">Two Trees SK1</a></td>
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://www.twotrees3dofficial.com/products/sk1-corexy-3d-printer-twotrees?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Two Trees</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="/space/blog/2024/07/13/1900" rel="nofollow" style="color: #0000cc;">Two Trees SK1 Enclosure Kit</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;">Accessories</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2024/05/18/2000" rel="nofollow" style="color: #0000cc;">3DConnexion SpaceMouse Wireless</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 rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Gaming</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2024/02/03/2000" rel="nofollow" style="color: #0000cc;">Logitech G Cloud</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;"><a href="/space/blog/2024/04/20/1200" rel="nofollow" style="color: #0000cc;">BSP D8 Bluetooth Controller</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;">Homelab</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2024/09/29/1900" rel="nofollow" style="color: #0000cc;">AURGA Viewer</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://www.aurga.com/products/aurga-viewer?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">AURGA</a></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;">Keyboards</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2024/02/21/1210" rel="nofollow" style="color: #0000cc;">Logitech K380</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="/space/blog/2024/04/06/1830" rel="nofollow" style="color: #0000cc;">Keychron K7 Max</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://www.keychron.com/products/keychron-k7-max-qmk-via-wireless-custom-mechanical-keyboard?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Keychron</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="/space/blog/2024/05/25/1800" rel="nofollow" style="color: #0000cc;">Keychron K11 Max</a></td>
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://www.keychron.com/products/keychron-k11-max-qmk-via-wireless-custom-mechanical-keyboard?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Keychron</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="/space/blog/2024/10/14/1900" rel="nofollow" style="color: #0000cc;">Keychron K2 HE</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;"><a href="/space/reviews/2024/08/17/1400" rel="nofollow" style="color: #0000cc;">Hexgears Immersion A3</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://hexgears.com/?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Hexgears</a></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;">Mini-PCs</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2024/03/17/1900" rel="nofollow" style="color: #0000cc;">AceMagic AM18</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://acemagic.de/collections/minipc/products/acemagic-am18-amd-ryzen%E2%84%A2-7-7840hs-mini-pc?utm_source=BLOG&amp;utm_medium=KOL&amp;utm_campaign=KOL-TAO+OF+MAC&amp;utm_content=external_link" rel="external" style="color: #0000cc;">AceMagic</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="/space/blog/2024/07/04/2200" rel="nofollow" style="color: #0000cc;">GMKtec G2</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 rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">NAS</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2024/10/26/1900" rel="nofollow" style="color: #0000cc;">CM3588 NVMe NAS Kit</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://www.friendlyelec.com/index.php?route=product%2Fproduct&amp;product_id=294&amp;utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">FriendlyELEC</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="/space/blog/2024/12/26/2330" rel="nofollow" style="color: #0000cc;">TerraMaster F4-424 MAX</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Donation</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;">Networking</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2024/05/30/2000" rel="nofollow" style="color: #0000cc;">TP-Link L-SG108E</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="/space/blog/2024/11/30/1700" rel="nofollow" style="color: #0000cc;">wisdPi WP-UT5 5GbE USB adapter</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://www.wisdpi.com?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">wisdpi</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="/space/reviews/2024/08/11/1230" rel="nofollow" style="color: #0000cc;">SL-SWTG124AS</a></td>
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://www.sodola-network.com/?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Sodola</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="/space/reviews/2024/08/11/1230" rel="nofollow" style="color: #0000cc;">SL-SWTGW218AS</a></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="9" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">SBCs</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2024/01/20/1800" rel="nofollow" style="color: #0000cc;">Orange Pi 5+</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-5-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</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="/space/blog/2024/02/10/2000" rel="nofollow" style="color: #0000cc;">YouYeeToo R1</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://www.youyeetoo.com/products/youyeetoo-r1?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">YouYeeToo</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="/space/blog/2024/03/09/2000" rel="nofollow" style="color: #0000cc;">Orange Pi Zero 3</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-Zero-3.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</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="/space/blog/2024/06/16/1800" rel="nofollow" style="color: #0000cc;">Banana Pi M7</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://www.banana-pi.org/en/banana-pi-sbcs/169.html?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Banana Pi</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="/space/blog/2024/07/20/1800" rel="nofollow" style="color: #0000cc;">Luckfox Pico Mini B</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://www.luckfox.com/?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Luckfox</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="/space/blog/2024/08/03/1200" rel="nofollow" style="color: #0000cc;">Radxa X4</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="http://radxa.com/products/x/x4/?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Radxa</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="/space/blog/2024/09/16/1600" rel="nofollow" style="color: #0000cc;">XPI-3566-Zero</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://www.geniatech.com/?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Geniatech</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="/space/blog/2024/10/07/2000" rel="nofollow" style="color: #0000cc;">Banana Pi M5 Pro</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://www.banana-pi.org/en/banana-pi-sbcs/177.html?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Banana Pi</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="/space/blog/2024/11/16/1700" rel="nofollow" style="color: #0000cc;">Debix Model A</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by <a href="https://debix.io/hardware/model-a.html?utm_campaign=review&amp;utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Debix</a></p></td>
</tr>
<tr style="border-top: 1px solid #aaa;">
<td rowspan="10" 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;">3D Printers</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2023/01/22/1700" rel="nofollow" style="color: #0000cc;">Kingroon KP3S Pro V1</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p><a href="/space/reviews/2025/04/30/1930" rel="nofollow" style="color: #0000cc;">two year review</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;">Accessories</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2023/10/29/1700" rel="nofollow" style="color: #0000cc;">OBSbot Tiny 4K, RODE NTG1</a></td>
<td rowspan="16" 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;">Android</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2023/04/22/1330" rel="nofollow" style="color: #0000cc;">Lenovo ThinkSmart View</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;">Apple</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2023/06/22/1200" rel="nofollow" style="color: #0000cc;">Mac Mini M2 Pro</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;"><a href="/space/blog/2023/11/23/2000" rel="nofollow" style="color: #0000cc;">iPhone 15 Pro, Watch Series 9</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;">Keyboards</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2023/08/08/1230" rel="nofollow" style="color: #0000cc;">Bluehand</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;">Mini-PCs</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/reviews/2023/03/11/2000" rel="nofollow" style="color: #0000cc;">Beelink U59 Pro</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;">Monitors</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2023/05/31/0845" rel="nofollow" style="color: #0000cc;">LG 28MQ780-B</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;">PC Builds</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2023/02/18/1845" rel="nofollow" style="color: #0000cc;">ASRock DeskMeet B660</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;">SBCs</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2023/10/07/1830" rel="nofollow" style="color: #0000cc;">Radxa Zero</a></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;">2022</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Android</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2022/04/29/2045" rel="nofollow" style="color: #0000cc;">Xiaomi Mi Stick 4K</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;">Apple</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2022/09/11/1850" rel="nofollow" style="color: #0000cc;">iPad Pro M1</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;">Gaming</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2022/06/26/2130" rel="nofollow" style="color: #0000cc;">Xbox Series X</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;"><a href="/space/reviews/2022/12/10/1930" rel="nofollow" style="color: #0000cc;">Retroid Pocket 3</a></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;">Keyboards</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2022/02/19/1830" rel="nofollow" style="color: #0000cc;">Avatto Folding 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;"><a href="/space/blog/2022/07/03/2000" rel="nofollow" style="color: #0000cc;">Dierya 63, Adafruit Macropad</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;"><a href="/space/blog/2022/09/11/1850" rel="nofollow" style="color: #0000cc;">Logitech Combo Touch</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;">Laptops</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2022/12/03/1600" rel="nofollow" style="color: #0000cc;">Lenovo ThinkPad X1 Yoga</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Work issued</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;">Music</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2022/02/05/1730" rel="nofollow" style="color: #0000cc;">Novation Circuit Tracks</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="/space/blog/2022/03/27/1400" rel="nofollow" style="color: #0000cc;">Monome Norns Shield</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Built from kit</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;">SBCs</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/reviews/2022/09/18/2300" rel="nofollow" style="color: #0000cc;">Banana Pi M2 Zero</a></td>
<td rowspan="6" 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="5" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2021</td>
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Laptops</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2021/08/26/1400" rel="nofollow" style="color: #0000cc;">Lenovo IdeaPad Flex 5</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;"><a href="/space/blog/2021/12/04/1950" rel="nofollow" style="color: #0000cc;">MacBook Pro 14" (M1 Pro)</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;">Monitors</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2021/08/21/1600" rel="nofollow" style="color: #0000cc;">LG 34WK95U-W</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;">Music</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2021/04/17/1610" rel="nofollow" style="color: #0000cc;">Teenage Engineering OP-1</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;"><a href="/space/blog/2021/06/03/1930" rel="nofollow" style="color: #0000cc;">Arturia KeyLab Essential 61</a></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;">2020</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Laptops</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2020/12/23/1705" rel="nofollow" style="color: #0000cc;">Surface Book 3</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Work issued</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;">Music</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2020/08/08/1430" rel="nofollow" style="color: #0000cc;">Yamaha Reface DX, AG06</a></td>
<td rowspan="4" 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;">NAS</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2020/04/04/2310" rel="nofollow" style="color: #0000cc;">Synology DS1019+</a></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;">2019</td>
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Apple</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2019/11/17/2000" rel="nofollow" style="color: #0000cc;">iPad Mini 5</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;"><a href="/space/blog/2019/12/08/2150" rel="nofollow" style="color: #0000cc;">Watch Series 5</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;">Laptops</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2019/05/11/2030" rel="nofollow" style="color: #0000cc;">Surface Laptop</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Purchased by me</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;">Music</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2019/09/07/1140" rel="nofollow" style="color: #0000cc;">Roli Songmaker Kit, Korg Nanokey Studio</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 style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">2018</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Apple</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2018/11/18/1845" rel="nofollow" style="color: #0000cc;">iPhone XS</a></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;">2017</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">3D Printers</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2017/11/26/2000" rel="nofollow" style="color: #0000cc;">BQ Prusa i3 Hephestos</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Built from kit</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;">Laptops</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2017/08/23/1900" rel="nofollow" style="color: #0000cc;">Surface Pro 4</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Work issued</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;">Mini-PCs</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2017/12/03/2130" rel="nofollow" style="color: #0000cc;">Z83ii</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 rowspan="4" 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;">Apple</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2016/03/12/1300" rel="nofollow" style="color: #0000cc;">Apple Watch (Sport)</a></td>
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Purchased by me</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;">Keyboards</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2016/03/12/1300" rel="nofollow" style="color: #0000cc;">Logitech Keys-To-Go</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;">Mice</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/reviews/2016/11/06/1930" rel="nofollow" style="color: #0000cc;">Citrix X1 Mouse</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 style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">PC Builds</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2016/12/17/1840" rel="nofollow" style="color: #0000cc;">Streacom ST-F1CB WS Black Aluminum Case</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;">2014</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Laptops</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2014/09/28/1940" rel="nofollow" style="color: #0000cc;">Acer C720</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Surprisingly still working in 2024</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;">2013</td>
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Phones</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2013/10/20/2230" rel="nofollow" style="color: #0000cc;">HTC One</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Test sample</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="/space/blog/2010/10/10/2010" rel="nofollow" style="color: #0000cc;">Samsung Wave 8500</a></td>
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Purchased by me</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;">E-ink Readers</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2009/02/01/0936" rel="nofollow" style="color: #0000cc;">The Sony Reader</a></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;">2008</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;">Accessories</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/reviews/2008/04/26/1840" rel="nofollow" style="color: #0000cc;">DisplayLink DVI</a></td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Supplied by DisplayLink</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;">Cameras</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2008/06/12/0945" rel="nofollow" style="color: #0000cc;">Panasonic Lumix DMC-FX33</a></td>
<td rowspan="2" style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><p>Purchased by me</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;">Laptops</td>
<td style="min-width: 80px;margin: 0px;padding: 4px 4px !important;vertical-align: top;border-top: 1px solid #aaa;"><a href="/space/blog/2008/10/07/0830" rel="nofollow" style="color: #0000cc;">Asus Eee PC 901</a></td>
</tr>
</tbody>
</table>
<br/>
]]></content>
<category label="site" term="site"/>
<category label="social" term="social"/>
<category label="reviews" term="reviews"/>
<category label="audience" term="audience"/>
<category label="policy" term="policy"/>
<category label="meta" term="meta"/>
</entry>
<entry>
<title>HomeKit Is Dumb</title>
<id>https://taoofmac.com/space/blog/2026/07/17/1601?utm_content=atom</id>
<published>2026-07-17T16:01:00+00:00</published>
<updated>2026-07-17T16:08:57+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link href="https://taoofmac.com/space/blog/2026/07/17/1601?utm_content=atom" rel="alternate" type="text/html" xml:base="https://taoofmac.com"/>
<content type="html"><![CDATA[
<p class="lead">I&#8217;m going to get on my soapbox again and call out <a href="/space/com/apple" rel="next" style="color: #0000cc;">Apple</a> once more on the <em>extremely</em> limited <a href="/space/com/apple/homekit" rel="next" style="color: #0000cc;">HomeKit</a> automation experience&#8211;and how they can fix 80% of the gripes I have with it by just cloning a small subset of the <a href="https://support.apple.com/guide/shortcuts/welcome/ios?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Shortcuts</a> user experience.</p>
<p>The most infuriating, they-are-so-close annoyance I have with it is that <em>automations can only have one trigger, and extremely basic conditions</em>, to the point where they are effectively useless in real life.</p>
<p>Right now, HomeKit automation is effectively as simple as this pseudo-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="k">if </span><span class="n">office</span><span class="p">.</span><span class="n">presence</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">true</span>
<span class="k">then </span><span class="n">scenes</span><span class="p">.</span><span class="n">office_ambient</span><span class="p">.</span><span class="n">light</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">on</span>
</code></pre></div>

<p>One trigger, one outcome. There are some conditionals, but they are <em>extremely</em> limited:</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="k">if </span><span class="n">office</span><span class="p">.</span><span class="n">presence</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">true</span>
<span class="w">   </span><span class="nb">and </span><span class="n">schedule</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"daytime"</span>
<span class="k">then </span><span class="n">scenes</span><span class="p">.</span><span class="n">office_ambient</span><span class="p">.</span><span class="n">light</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">on</span>
</code></pre></div>

<p>Conditionals are just a schedule and somebody (optionally me) being home, which is not enough for the way people <em>actually</em> live in a house. For instance, I can&#8217;t set up logic 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="k">if </span><span class="n">office</span><span class="p">.</span><span class="n">temperature</span><span class="p">.</span><span class="n">celsius</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mi">27</span>
<span class="w">   </span><span class="nb">and </span><span class="n">office</span><span class="p">.</span><span class="n">presence</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">true</span>
<span class="w">   </span><span class="nb">and </span><span class="n">office_window</span><span class="p">.</span><span class="n">closed</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">true</span>
<span class="k">then</span>
<span class="k">   </span><span class="n">office</span><span class="p">.</span><span class="n">heatpump</span><span class="p">.</span><span class="k">target</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">25</span>
<span class="w">   </span><span class="n">office</span><span class="p">.</span><span class="n">heatpump</span><span class="p">.</span><span class="n">mode</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cool</span>
<span class="w">   </span><span class="n">office</span><span class="p">.</span><span class="n">heatpump</span><span class="p">.</span><span class="n">fan</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">50</span><span class="p">%</span>
</code></pre></div>

<p>This is the sane way to automate a heatpump (obviously), but there is zero way for this to be configured in HomeKit in any way whatsoever. I can, of course, do it &#8220;out of band&#8221; in <a href="/space/dev/javascript/node-red" rel="next" style="color: #0000cc;">Node-RED</a>, but the moment I do that it becomes unfathomable to anyone else in the house.</p>
<p>And yet, it would be pretty much trivial to add both to the Home app (by just stealing the visual <code>if</code> construct from <a href="https://support.apple.com/guide/shortcuts/welcome/ios?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Shortcuts</a>) and to any home hub.</p>
<p>You also can&#8217;t have alternate triggers without duplicating the entire thing (or creating scenes for the common outcome, which clutters your scene list):</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="k">if </span><span class="n">office</span><span class="p">.</span><span class="n">presence</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">true</span>
<span class="w">   </span><span class="s2">"I have two presence sensors that actually don't overlap"</span>
<span class="w">   </span><span class="nb">or </span><span class="n">office</span><span class="p">.</span><span class="n">desk</span><span class="p">.</span><span class="n">presence</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">true</span>
<span class="k">then</span>
<span class="k">   </span><span class="n">office_desk</span><span class="p">.</span><span class="n">light</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">on</span>
</code></pre></div>

<p>And, finally, there is no way to chain automations after a period of time:</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="k">if </span><span class="n">office</span><span class="p">.</span><span class="n">presence</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">true</span>
<span class="w">   </span><span class="nb">and </span><span class="n">schedule</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'nighttime'</span>
<span class="k">then</span>
<span class="k">   </span><span class="n">for</span><span class="w"> </span><span class="mi">3</span><span class="n">m</span>
<span class="w">      </span><span class="s2">"Turn on the light so I can search for stuff on my desk"</span>
<span class="w">      </span><span class="n">office_ceiling</span><span class="p">.</span><span class="n">light</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">on</span>
<span class="w">      </span><span class="n">office_ceiling</span><span class="p">.</span><span class="n">light</span><span class="p">.</span><span class="n">intensity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0.5</span>
<span class="w">   </span><span class="k">then</span>
<span class="w">      </span><span class="s2">"Make it dim enough so I can still find things if I linger"</span>
<span class="w">      </span><span class="n">office_ceiling</span><span class="p">.</span><span class="n">light</span><span class="p">.</span><span class="n">intensity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0.25</span>
<span class="w">   </span><span class="n">until</span><span class="w"> </span><span class="n">office</span><span class="p">.</span><span class="n">presence</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">false</span>
<span class="w">      </span><span class="k">then </span><span class="n">office_ceiling</span><span class="p">.</span><span class="n">light</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">off</span>
</code></pre></div>

<p>I don&#8217;t have any garage doors (so this is a bit of a contrived example), but I can&#8217;t tell you how many times I had to step into the office in the late evening for a little while and needed to adjust the lights.</p>
<p>The basic principle would translate to much better and more useful automation overall&#8211;if you replace lights with space heaters and times with temperature thresholds, you can cut your power bill by up to 50% (which is what I did last winter with <a href="/space/dev/javascript/node-red" rel="next" style="color: #0000cc;">Node-RED</a>).</p>
<p>Complex triggers alone would make HomeKit tremendously more useful:</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="k">if </span><span class="n">tv</span><span class="p">.</span><span class="n">power</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">on</span>
<span class="w">   </span><span class="nb">and </span><span class="n">input</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"apple tv"</span>
<span class="w">   </span><span class="nb">and </span><span class="n">schedule</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"night time"</span>
<span class="w">   </span><span class="nb">and </span><span class="n">sofa</span><span class="p">.</span><span class="n">presence</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">on</span>
<span class="k">then</span>
<span class="k">   </span><span class="n">tv</span><span class="p">.</span><span class="n">soundbar</span><span class="p">.</span><span class="n">volume</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">6</span>
<span class="w">   </span><span class="n">sofa_lamp</span><span class="p">.</span><span class="n">intensity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0.7</span>
</code></pre></div>

<p>And, of course, something 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="k">if </span><span class="n">office</span><span class="p">.</span><span class="n">presence</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">on</span>
<span class="w">   </span><span class="nb">and </span><span class="n">schedule</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"nighttime"</span>
<span class="k">then </span><span class="n">office_homepod</span><span class="p">.</span><span class="n">Siri</span><span class="p">(</span><span class="s2">"Will you be staying long?"</span><span class="p">)</span>
<span class="w">   </span><span class="k">if </span><span class="n">answer</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">true</span>
<span class="w">      </span><span class="p">...</span>
</code></pre></div>

<p>&#8230;etc. Again, this is not rocket science, and I think the real cause is that nobody at Apple who works on HomeKit actually uses it beyond the basics. I&#8217;m willing to bet they use <a href="https://www.home-assistant.io/?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" rel="external" style="color: #0000cc;">Home Assistant</a> instead&#8230;</p>
<br/>
]]></content>
<category label="automation" term="automation"/>
<category label="homekit" term="homekit"/>
<category label="apple" term="apple"/>
<category label="iot" term="iot"/>
</entry>
<entry>
<title>Google Ordered to Open Android and Search in Europe</title>
<id>https://taoofmac.com/space/links/2026/07/17/0810?utm_content=atom</id>
<published>2026-07-17T08:10:00+00:00</published>
<updated>2026-07-17T08:10:00+00:00</updated>
<author>
<name>Rui Carmo</name>
<uri>https://taoofmac.com</uri>
</author>
<link href="https://taoofmac.com/space/links/2026/07/17/0810?utm_content=atom" rel="alternate" type="text/html" xml:base="https://taoofmac.com"/>
<content type="html"><![CDATA[
<p><a href="https://www.theverge.com/policy/966438/eu-google-android-ai-interoperability-search-data-dma?utm_source=taoofmac.com&amp;utm_medium=web&amp;utm_campaign=unsolicited_traffic&amp;utm_content=external_link" title="external link to https://www.theverge.com/policy/966438/eu-google-android-ai-interoperability-search-data-dma" alt="screenshot of https://www.theverge.com/policy/966438/eu-google-android-ai-interoperability-search-data-dma" style="color: #0000cc;"><img class="quicklook" src="https://taoofmac.com/thumb/links/2026/07/17/0810/640,480/TjEFynt29ZYc7XMOaY_omCdIquI=/large.jpg" width="320" height="240" style="max-width: 100% !important;height: auto !important;"/></a></p>
<p class="lead">Google is playing the EU game much better than Apple, but the EU still doesn&#8217;t seem to understand how privacy and security work in modern platforms. Letting people swap the onboard agent is being treated much like the ancient argument over shipping/default browsers&#8211;politically correct, bureaucratically led and technically much harder than changing a default handler.</p>
<p>An agent may need access to personal data and privileged APIs, and keeping a third-party agent away from things it should not access is difficult&#8211;or impossible for some features. The EU&#8217;s framing is therefore somewhat stupid, but Apple will <a href="/space/links/2025/11/07/0732" rel="next" style="color: #0000cc;">have to deal with the same demands</a> (and <a href="/space/links/2024/06/22/0856" rel="next" style="color: #0000cc;">has already held features back</a>), so Google is setting a lot of useful precedents here. Apple certainly won&#8217;t like this.</p>
<br/>
]]></content>
<category label="android" term="android"/>
<category label="dma" term="dma"/>
<category label="security" term="security"/>
<category label="eu" term="eu"/>
<category label="ai" term="ai"/>
<category label="privacy" term="privacy"/>
<category label="google" term="google"/>
</entry>
</feed>