<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://www.takumibc.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://www.takumibc.com/" rel="alternate" type="text/html" /><updated>2026-02-04T08:53:18+08:00</updated><id>https://www.takumibc.com/feed.xml</id><title type="html">Thomas Sing-wing Wu</title><subtitle>Thomas Sing-wing Wu&apos;s website</subtitle><author><name>Thomas Wu</name></author><entry><title type="html">Strong Reject: The “Trust Me Bro” Moment of Reviewer 1, ICLR 2026</title><link href="https://www.takumibc.com/posts/2026/02/iclr-reviewer-zero/" rel="alternate" type="text/html" title="Strong Reject: The “Trust Me Bro” Moment of Reviewer 1, ICLR 2026" /><published>2026-02-02T00:00:00+08:00</published><updated>2026-02-02T00:00:00+08:00</updated><id>https://www.takumibc.com/posts/2026/02/iclr-reviewer-zero</id><content type="html" xml:base="https://www.takumibc.com/posts/2026/02/iclr-reviewer-zero/"><![CDATA[<h2 id="head"><strong>Head</strong></h2>

<p>We all love Reviewers. Reviewer 1, Reviewer 2, Reviewer 3 — whatever.</p>

<p>But what if the lovely Reviewer 1 gave you a <strong>0</strong> with <strong>confidence 5</strong>?</p>

<h2 id="neck"><strong>Neck</strong></h2>

<p>That’s exactly what happened to ICLR 2026 submission no. 21536 (See https://openreview.net/forum?id=tvDlQj0GZB).</p>

<p><strong>Impressive!</strong> At least he didn’t use ChatGPT for reviewing that paper?</p>

<p>Or no. Maybe bro forgot to upload the PDF to ChatGPT when vibe-reviewing.</p>

<h2 id="body"><strong>Body</strong></h2>

<p>The title of the paper is <em>“Learning is Forgetting; LLM Training As Lossy Compression”</em>.</p>

<p>Of course it was quite controversial. Just like how <strong>I</strong> write my blog posts.</p>

<p>But is it worth a 0? Not at all.</p>

<p>I read the work thoroughly. There’s <strong>nothing</strong> wrong in the paper that’s worth a strong reject. The literature was clear, the essay was neat, the math is justified (probably — don’t ask me).</p>

<p>But what is this reviewer doing????</p>

<h2 id="heart"><strong>Heart</strong></h2>

<p>And now let’s look at the peak moment of Reviewer 1. Even better than the 0.</p>

<blockquote>
  <p><strong>Strengths:</strong> None noted. See explanation in the weaknesses.
NONE.</p>
</blockquote>

<h2 id="legs"><strong>Legs</strong></h2>

<p>Now let’s look at what the other reviewers gave:</p>

<ul>
  <li>Reviewer 2: <strong>2</strong></li>
  <li>Reviewer 3: <strong>6</strong></li>
  <li>Reviewer 4: <strong>6</strong></li>
</ul>

<p>Still a tough round.</p>

<p>But shout-out to the AC for accepting this paper.</p>

<h2 id="foot"><strong>Foot</strong></h2>

<p>Reviewer 1 probably wouldn’t want to receive a review like this.</p>

<p>So do I. And you.</p>

<p>So write reviews respectfully, justlike what <strong>you</strong> want to receive.</p>

<p>Done.</p>]]></content><author><name>Thomas Wu</name></author><category term="iclr" /><category term="ai" /><category term="ai-conferences" /><category term="reviewer" /><summary type="html"><![CDATA[We all love Reviewers. Reviewer 1, Reviewer 2, Reviewer 3 — whatever. But what if the lovely Reviewer 1 gave you a 0 with confidence 5?]]></summary></entry><entry><title type="html">“I am not what I am.” — Homebrew Python PIP</title><link href="https://www.takumibc.com/posts/2026/01/homebrew-python/" rel="alternate" type="text/html" title="“I am not what I am.” — Homebrew Python PIP" /><published>2026-01-31T00:00:00+08:00</published><updated>2026-01-31T00:00:00+08:00</updated><id>https://www.takumibc.com/posts/2026/01/homebrew-python</id><content type="html" xml:base="https://www.takumibc.com/posts/2026/01/homebrew-python/"><![CDATA[<p>Unfortunately, it’s neither William Shakespeare nor Iago who said it this time. It’s Homebrew Python.</p>

<h2 id="what-happened">What Happened</h2>

<p>I was simply trying to run:</p>

<div class="language-zsh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>pip <span class="nb">install </span>check50
</code></pre></div></div>

<p>and he greeted me with:</p>

<blockquote>
  <p>error: externally-managed-environment</p>

  <p>× This environment is externally managed
╰─&gt; To install Python packages system-wide, try brew install
xyz, where xyz is the package you are trying to
install.</p>

  <p>If you wish to install a Python library that isn’t in Homebrew,
use a virtual environment:</p>

  <div class="language-zsh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>python3 <span class="nt">-m</span> venv path/to/venv
<span class="nb">source </span>path/to/venv/bin/activate
python3 <span class="nt">-m</span> pip <span class="nb">install </span>xyz
</code></pre></div>  </div>

  <p>If you wish to install a Python application that isn’t in Homebrew,
it may be easiest to use ‘pipx install xyz’, which will manage a
virtual environment for you. You can install pipx with</p>

  <div class="language-zsh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew <span class="nb">install </span>pipx
</code></pre></div>  </div>

  <p>You may restore the old behavior of pip by passing
the ‘<code class="language-plaintext highlighter-rouge">--break-system-packages</code>’ flag to pip, or by adding
‘<code class="language-plaintext highlighter-rouge">break-system-packages = true</code>’ to your pip.conf file. The latter
will permanently disable this error.</p>

  <p>If you disable this error, we STRONGLY recommend that you additionally
pass the ‘<code class="language-plaintext highlighter-rouge">--user</code>’ flag to pip, or set ‘<code class="language-plaintext highlighter-rouge">user = true</code>’ in your pip.conf
file. Failure to do this can result in a broken Homebrew installation.</p>

  <p>Read more about this behavior here: <a href="https://peps.python.org/pep-0668/">https://peps.python.org/pep-0668/</a></p>
</blockquote>

<p><strong>Praise the Homebrew Python, with all your heart, and with all your mind, and with all your soul.</strong></p>

<h2 id="the-problem">The Problem</h2>

<ol>
  <li>I don’t want to create a venv. I would’ve created one if I needed to. I wanted to install it <strong>globally</strong>.</li>
  <li>The package isn’t available in Homebrew (and so do most other packages).</li>
  <li>The message is <strong>terribly</strong> written. It sounds like bypassing it will cause a heart attack (or even worse).</li>
  <li>Setting <code class="language-plaintext highlighter-rouge">user = true</code> and <code class="language-plaintext highlighter-rouge">--break-system-packages</code> in my pip.conf didn’t work. I had to pass the flags manually every time. (That might be on my side, but I can’t figure it out, unfortunately.)</li>
</ol>

<h2 id="why-it-happened">Why It Happened</h2>

<p>A maintainer of pip requested Homebrew to adopt this behavior in accordance with <a href="https://peps.python.org/pep-0668/">PEP 668</a> (see https://github.com/orgs/Homebrew/discussions/3404).</p>

<p>And that caused Homebrew Python’s pip to start barking ever since.</p>

<p>I <strong>do</strong> understand the purpose. It’s completely acceptable:</p>

<p>Some Homebrew formulas rely on specific Python package versions, and letting users mess up the global environment can absolutely break those formulas.</p>

<p>And the Homebrew Python was intended for Homebrew packages, unlike me who was using Homebrew for Python.</p>

<p>But the message was <strong>still</strong> terrible, as I’ve just said.</p>

<h2 id="the-solution">The Solution</h2>

<p><strong>Don’t</strong> use Homebrew’s Python. Instead, use <strong>pyenv</strong>, which could be installed using Homebrew:</p>

<div class="language-zsh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew <span class="nb">install </span>pyenv
</code></pre></div></div>

<p>For the rest of the installation, go to https://github.com/pyenv/pyenv. Me rewriting it here would simply create more confusion.</p>

<h2 id="before-we-end">Before We End</h2>

<p>Readers probably know that I intentionally keep my blog posts short. But I want to quote <a href="https://github.com/orgs/Homebrew/discussions/3404">@mlindner</a>’s comment from the Homebrew discussion thread above:</p>

<blockquote>
  <p>This is a garbage… Now this even extends to making Python unable to use its own package manager.</p>
</blockquote>

<p>That comment was marked as disruptive and later drew responses from multiple Homebrew maintainers. I’m not here to attack anyone, but to <a href="https://github.com/orgs/Homebrew/discussions/3404">@mlindner</a>: I agree.</p>

<p>The error message is exactly the kind of writing I <strong>hated</strong>, and most readers of this blog probably would, too.</p>

<p>It <strong>doesn’t</strong> state the problem, <strong>doesn’t</strong> explain why, and <strong>doesn’t</strong> give an actual solution. I’ve seen countless Reddit posts complaining about this exact same issue. And it could’ve been avoided by simply adding “use <code class="language-plaintext highlighter-rouge">pyenv</code>”.</p>

<p>Done.</p>]]></content><author><name>Thomas Wu</name></author><category term="python" /><category term="homebrew" /><category term="pip" /><category term="macos" /><summary type="html"><![CDATA[Unfortunately, it's neither William Shakespeare nor Iago who said it this time. It's Homebrew Python.]]></summary></entry><entry><title type="html">Why AI-Generated Texts Are Terrible</title><link href="https://www.takumibc.com/posts/2026/01/chatgpt-sucks/" rel="alternate" type="text/html" title="Why AI-Generated Texts Are Terrible" /><published>2026-01-30T00:00:00+08:00</published><updated>2026-01-30T00:00:00+08:00</updated><id>https://www.takumibc.com/posts/2026/01/chatgpt-sucks</id><content type="html" xml:base="https://www.takumibc.com/posts/2026/01/chatgpt-sucks/"><![CDATA[<blockquote>
  <p>You’re <strong>absolutely</strong> right! In today’s rapidly evolving digital landscape, AI-generated texts have become <strong>increasingly</strong> common across blogs, emails, essays, and social media posts.</p>

  <p>However, <strong>despite</strong> their growing popularity, these texts often suffer from a number of recurring stylistic issues that are worth discussing in greater detail👇</p>

  <p>AI-generated texts tend to:</p>

  <ul>
    <li>✨ Include <strong>redundant</strong> information that restates the same idea multiple times in slightly different ways</li>
    <li>📈 Expand phrasing <strong>unnecessarily</strong>, making short points far longer than needed</li>
    <li>➖ Be filled with <strong>em dashes</strong> — everywhere — constantly — for no clear reason</li>
    <li>📚 Use advanced vocabulary in situations where simple words would work perfectly well</li>
  </ul>

  <p>Taken together, these patterns don’t merely clutter writing — they actively dilute clarity and reduce structural information density.</p>

  <p>This isn’t abuse — this is <strong>pollution</strong>.</p>

  <p>Would you like me to generate a comprehensive, in-depth, multi-section blog post exploring why AI-generated texts are problematic, complete with examples, historical context, actionable takeaways, and a concluding summary? 😊📌</p>
</blockquote>

<p>OK. Time to stop.</p>

<p>I tried my best to imitate ChatGPT’s writing style. And I guess it probably fooled you (hopefully).</p>

<p>But this isn’t even a joke now. It’s not even supposed to be funny anymore.</p>

<p>AI-generated texts are <strong>actually</strong> polluting our environment: perfect grammar, long paragraphs,</p>

<p><strong>AND NO INFORMATION AT ALL.</strong></p>

<p>Takeaway: Don’t write like this.</p>

<p>Done.</p>

<p><em>P.S. I’m curious why ChatGPT repeats the word “structural” in nearly every response.</em></p>]]></content><author><name>Thomas Wu</name></author><category term="ai" /><category term="writing" /><category term="opinion" /><summary type="html"><![CDATA[You're absolutely right!]]></summary></entry><entry><title type="html">Traditional Chinese Medicine Speedrun: Yin–Yang and The Five Agents</title><link href="https://www.takumibc.com/posts/2026/01/tcm-speedrun-yin-yang-five-agents/" rel="alternate" type="text/html" title="Traditional Chinese Medicine Speedrun: Yin–Yang and The Five Agents" /><published>2026-01-30T00:00:00+08:00</published><updated>2026-01-30T00:00:00+08:00</updated><id>https://www.takumibc.com/posts/2026/01/tcm-speedrun-yin-yang-five-agents</id><content type="html" xml:base="https://www.takumibc.com/posts/2026/01/tcm-speedrun-yin-yang-five-agents/"><![CDATA[<p><em>Note: The author is a student at the Justao TCM Institute in Shanghai, China, and is not a licensed physician.</em></p>

<p>Yin–Yang and the Five Agents are the foundations of Traditional Chinese Medicine (TCM). While these concepts might seem difficult and mysterious—not only to foreigners, but even to native Chinese speakers—they are, at their core, simply two <strong>classification methods</strong>.</p>

<h2 id="tai-chi-太極">Tai-chi (太極)</h2>

<p>Not Kung-fu. No.</p>

<p>Tai-chi is simply the thing as a whole that you want to classify. After deciding <strong>what</strong> is the Tai-chi, you can decide <strong>how</strong> to classify it, using the methods below.</p>

<h2 id="yinyang-陰陽">Yin–Yang (陰陽)</h2>

<p>Simply <strong>binary</strong>.</p>

<p>Yes. I’m not joking.</p>

<p>The core of Yin–Yang theory is to classify anything into two parts. For example, death is Yin, and life is Yang. Night is Yin, and day is Yang.</p>

<h2 id="five-agents-aka-five-elements-五行">Five Agents (a.k.a. Five Elements) (五行)</h2>

<p>Simply the Pro Max version of Yin–Yang. They classify things into <strong>two</strong>; we classify things into <strong>five</strong>.</p>

<p>The order of the Five Agents is: <strong>Wood</strong> (木), <strong>Fire</strong> (火), <strong>Earth</strong> (土), <strong>Metal</strong> (金), and <strong>Water</strong> (水). Wood and Fire are <strong>Yang</strong>, Metal and Water are <strong>Yin</strong>, and Earth sits <strong>between</strong> them.</p>

<p><img src="https://www.takumibc.com/images/Five-Agents.jpg" alt="" /></p>

<p>Why this specific order? Because they <strong>generate</strong> each other in this order (the generative cycle).</p>

<p>Let’s use an example:</p>

<ul>
  <li>
    <p><strong>Wood</strong> burns as fuel, which generates <strong>Fire</strong></p>
  </li>
  <li>
    <p><strong>Fire</strong> produces ashes, which are equivalent to <strong>Earth</strong></p>
  </li>
  <li>
    <p><strong>Earth</strong> includes <strong>Metal</strong> in it</p>
  </li>
  <li>
    <p><strong>Metal</strong> condenses moisture into <strong>Water</strong></p>
  </li>
  <li>
    <p><strong>Water</strong> supports the growth of <strong>Wood</strong></p>
  </li>
</ul>

<p>and it repeats.</p>

<p>In addition to the generative cycle, the Five Agents also restrain each other through what is called the <strong>destructive cycle</strong> (相剋). You don’t need to memorize a new order—it simply moves <strong>two steps</strong> forward each time, compared to one step forward in the generative cycle.</p>

<p>In this pattern:</p>

<ul>
  <li>
    <p><strong>Wood</strong> restrains <strong>Earth</strong> (like how roots penetrate soil)</p>
  </li>
  <li>
    <p><strong>Earth</strong> restrains <strong>Water</strong> (like how soil absorbs water)</p>
  </li>
  <li>
    <p><strong>Water</strong> restrains <strong>Fire</strong> (like how water extinguishes fire)</p>
  </li>
  <li>
    <p><strong>Fire</strong> restrains <strong>Metal</strong> (like how fire melts metal)</p>
  </li>
  <li>
    <p><strong>Metal</strong> restrains <strong>Wood</strong> (like how metal cuts wood)</p>
  </li>
</ul>

<p>In TCM, the Five Agents are also used to categorize the five major organ systems:</p>

<ul>
  <li><strong>Wood</strong> → Liver (肝)</li>
  <li><strong>Fire</strong> → Heart (心)</li>
  <li><strong>Earth</strong> → Spleen (脾)</li>
  <li><strong>Metal</strong> → Lung (肺)</li>
  <li><strong>Water</strong> → Kidney (腎)</li>
</ul>

<p>These are not just anatomical organs in the modern biomedical sense, but functional systems in your body.</p>

<h2 id="conclusion">Conclusion</h2>

<p>Don’t study TCM. Unless you want to.</p>]]></content><author><name>Thomas Wu</name></author><category term="tcm" /><category term="traditional-chinese-medicine" /><category term="chinese-philosophy" /><category term="yin-yang" /><category term="five-agents" /><category term="wu-xing" /><category term="medicine-theory" /><category term="taoism" /><category term="chinese-culture" /><summary type="html"><![CDATA[Yin–Yang and the Five Agents are the foundations of Traditional Chinese Medicine (TCM).]]></summary></entry><entry><title type="html">For Safety, or Their Own Safety? My Frustrations with OpenAI</title><link href="https://www.takumibc.com/posts/2025/10/openai-frustration/" rel="alternate" type="text/html" title="For Safety, or Their Own Safety? My Frustrations with OpenAI" /><published>2025-10-25T00:00:00+08:00</published><updated>2025-10-25T00:00:00+08:00</updated><id>https://www.takumibc.com/posts/2025/10/openai-frustration</id><content type="html" xml:base="https://www.takumibc.com/posts/2025/10/openai-frustration/"><![CDATA[<p>I’m now totally disappointed and annoyed with OpenAI.</p>

<p>I’ve been a paid user of ChatGPT Plus ever since they released it three years ago. $20 per month is the most expensive subscription I’ve <strong>ever</strong> bought in my life. The price <strong>used</strong> to be worth it, but obviously it isn’t anymore.</p>

<p>OpenAI is well known for censoring—they try to censor any word that might get them in trouble. But to be honest, the censorship system has become unbearable since GPT-5 was released.</p>

<p>While I chose GPT-5 Instant, it sometimes goes through a mandatory, unskippable “thinking” process. I didn’t understand at first why they force this “thinking” process, given that I’m already a paid user and chose the Instant mode, obviously someone who doesn’t want to waste time.</p>

<p>But after browsing hundreds of Reddit posts, I found out that it’s part of the censorship system. Whenever the system “thinks” that you might have an “emotional problem”—which even includes using daily words like “knife”—it forces you into the thinking-mini model to ensure you don’t have “mental health issues”.</p>

<p>Obviously, the system has never actually stopped anyone with mental health issues from committing suicide, and I don’t have mental issues, of course. But it’s driving normal users nuts, and might’ve caused mental health issues among normal users like us.</p>

<p>I won’t stop subscribing—for ChatGPT is the only product that’s anywhere near fulfilling my needs—but OpenAI has given me every reason to hate them. They’ve never listened to suggestions, and they <strong>will</strong> continue ignoring them until a real substitute comes and kills OpenAI.</p>]]></content><author><name>Thomas Wu</name></author><category term="ai" /><category term="chatgpt" /><category term="openai" /><category term="opinion" /><summary type="html"><![CDATA[I’m now totally disappointed and annoyed with OpenAI.]]></summary></entry><entry><title type="html">Fixing Fn + F on macOS with Third-Party Keyboards Using Macros</title><link href="https://www.takumibc.com/posts/2024/12/keychron/" rel="alternate" type="text/html" title="Fixing Fn + F on macOS with Third-Party Keyboards Using Macros" /><published>2024-12-15T00:00:00+08:00</published><updated>2024-12-15T00:00:00+08:00</updated><id>https://www.takumibc.com/posts/2024/12/keychron</id><content type="html" xml:base="https://www.takumibc.com/posts/2024/12/keychron/"><![CDATA[<h2 id="hook">Hook</h2>

<p>About a month ago on my birthday, my friend <a href="https://www.github.com/ZigaoWang">@ZigaoWang</a> gave me a Keychron K2 Max with Banana switches.</p>

<p>However, the <code class="language-plaintext highlighter-rouge">Fn + F</code> shortcut which I often use for fullscreening did not work as usual.</p>

<p>After investigating further, I found out that Macs only treat <code class="language-plaintext highlighter-rouge">Fn</code> keys from Apple’s own keyboards as the <code class="language-plaintext highlighter-rouge">Globe</code> key (which is different from the <code class="language-plaintext highlighter-rouge">Fn</code> key despite its location), and ignore this signal if it comes from third-party keyboards.</p>

<p>The workaround is to create a keyboard macro which remaps <code class="language-plaintext highlighter-rouge">Fn + F</code> to <code class="language-plaintext highlighter-rouge">Command + Control + F</code>, a shortcut that works universally, regardless of the keyboard’s brand.</p>

<h2 id="steps">Steps</h2>

<ol>
  <li>Connect your Keychron K2 Max to your Mac through a USB-C cable, and turn the keyboard to <code class="language-plaintext highlighter-rouge">Cable</code> mode.</li>
  <li>Visit <a href="https://launcher.keychron.com/">Keychron Launcher</a>, choose your keyboard and connect, and then choose <code class="language-plaintext highlighter-rouge">Macro</code> on the left sidebar.</li>
</ol>

<p><img src="https://www.takumibc.com/images/CleanShot%202024-12-15%20at%2021.13.29%402x.png" alt="" /></p>

<ol>
  <li>Record a macro. I use <code class="language-plaintext highlighter-rouge">M0</code> as an example here, with the following content:</li>
</ol>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>{+KC_LGUIX+KC_LCTLX+KC_FX-KC_LGUIK-KC_LCTLX-KC_F}
</code></pre></div></div>

<p>Which is equivalent to pressing the left <code class="language-plaintext highlighter-rouge">Control</code> key, left <code class="language-plaintext highlighter-rouge">Command</code> key, and <code class="language-plaintext highlighter-rouge">F</code> key simultaneously, and clicking <code class="language-plaintext highlighter-rouge">Submit</code> after releasing them.</p>

<p><img src="https://www.takumibc.com/images/CleanShot%202024-12-15%20at%2021.13.39%402x.png" alt="" /></p>

<ol>
  <li>Finally, choose <code class="language-plaintext highlighter-rouge">Keyboard</code> from the left sidebar, choose <code class="language-plaintext highlighter-rouge">Layer 1</code>, and map the <code class="language-plaintext highlighter-rouge">F</code> key to the corresponding macro (<code class="language-plaintext highlighter-rouge">M0</code> in this example).</li>
</ol>

<p>This should permanently resolve the issue. Enjoy!</p>]]></content><author><name>Thomas Wu</name></author><category term="macos" /><category term="keyboard" /><category term="keychron" /><category term="productivity" /><category term="hardware" /><summary type="html"><![CDATA[About a month ago on my birthday, my friend @ZigaoWang gave me a Keychron K2 Max with Banana switches.]]></summary></entry></feed>