Charlie Lin

Personal website

View My GitHub Profile

Utterances of a Cynic

1st week of using Claude Pro

Thanks to the generosity of the organizers of PyTexas 2026, I won a 3-month Claude Pro subscription as a prize!

Proof

After I installed the Claude Code CLI and began prompting, I realized that the 5-hour and weekly limits were (compared to my previous usage of Claude solely within its web UI) basically unlimited.

1st attempt here.

As one can see by the above conversation, my first experience with Claude was adding no-GIL support for pywin32, which went nowhere. (How I finally resolved it will be mentioned later.)

So like any developer when given basically-unlimited LLM credits, I embraced vibecoding AI-assisted development with human review. And boy, was my producitivty supercharged when paired with some awesome plugins.

My environment with Claude

With Claude Code, I have these plugins installed:

What I contributed

pywin32

Within a month, Claude turned my request for free-threaded Python interpreter support made all the way back in June 2024 and my list of PRs starting in November last year.

Finally, merging this PR officially makes pywin32 free-threaded compatible, though only with experimental support. With Claude, it converted my stumbling block (with a 4-month hiatus within) into quite an excellent rubber duck; by feeding in CI logs from failed runs, I was surprised on how Claude Code correctly provided approaches in resolving the stumbling block. Artifacts generated by the CLI tool are available here.

An example:

Analyses on Python projects with native extensions

The main culprits of me burning through the 5-hour limit within the 1st hour: generating reports on popular Python projects containing C, C++, Cython, or Rust code, including compatbility with the free-threaded interpreter

An example:

msgpack-python

In an interesting twist, posting Claude-generated analyses as an issue actually helped to automate bug fixes (see here and here).

veles-ng

My crown jewel and epitome of LLMs facilitating more managable rewrites of old codebases. For those unfamiliar, veles-ng is my continuation of a very pretty-looking visualization tools for structured binary files. With Claude Code, I was able to acccomplish the following in mere weeks:

TLDR

Claude Code is a productivity supercharger, but don’t blindly trust its output, even with Opus as the Advisor model set to maximum thinking effort. Manual guiding is definitely needed, as LLM-generated commits don’t always compile the first time, and may get confused when running a command containing multiple subagents and when they suddenly pause due to hitting the limits too often.

My experience in the Linux Embedded Conference NA

Last modified 5/22/2026

Right after the Open Source Summit NA 2026, here’s two more days of networking, and interesting talks on a more focused field about Linux’s security stack, BPF, AppArmor, and more. (no interesting swag from exhibitors, sorry :-(… ). Again, best expressed through a series of photographs that I took:

My experience in the Open Source Summit NA and Embedded Linux Conference NA

Laat modified 5/20/2026

To summarize three days of networking, and interesting talks, and zany exhibitors, it’s best to present them as a series of photographs:

(Of course I have the longest ribbon chain. Pretty sure I’m the only one that exhibits such behavior)

My contributions to Python and its ecosystem

Posted 4/20/2026

Since 2024, I’ve contributed profusely to both the CPython interpreter and popular packages, mainly low-level building blocks of other popular packages.

By commits:

Taking together my contributions, they strengthen Python’s ecosystem in multiple layers: improving the interpreter itself, enhancing cross‑language integration via Rust, and improving usefulness of key platform‑specific and concurrency libraries. That shows my focus on low‑level performance, systems integration, and developer tooling—areas that have broad impact across Python applications and libraries. In particular, free-threading is becoming popular among popular packages: as of this post, over HALF of the 360 most downloaded packages support it!

TLDR for the very unfortunate souls not enlightened by my wonderful talk:

Additionally, I presented a very informative talk at PyTexas 2026 on porting Python packages with compiled-extensions to be compatible without the GIL.

Inspired by Bernat Gabor’s writeup, with additional details. (please notice me and my greatness)

I’ve met a great variety of storied attendees: corporate and freelance, seasoned and newly-graduated, conversing about a wide range of topics: technical and social, quotidian and eccentric, informative and argumentative. Special shoutout to Bernat Gabor, Moshe Zadka, Scott Irwin, Al Sweigart, Tristan Lee, Jacob Coffee, and Mason Egger.

Another long overdue update

Posted 3/7/2024

Not much has changed, except I run Canary builds of Windows Insider (very few crashes, surprisingly) and fetch (stripped) debug symbols of MS projects (binaries included with Canary builds, Office, Visual Studio, etc). Currently, my cache is ~450GB.

One topic that piqued my interest over the last few months is related to symbol fetching. Specifically, I was fascinated by the following two articles (see here and here) on automatically fetching debug symbols matching all Apple frameworks from Apple’s servers, not just frameworks that come bundled with symbol names. If I have some way to get developer access to a Mac computer, the ETSymbolication repo would greatly aid debugging macOS and iOS apps and their crash logs.

Also, deploying GH Pages have become more painful. For some reason, changes on my pages do NOT automatically trigger a rebuild, so I am forced to write a GH Actions file to do this for me:

# File: .github/workflows/refresh.yml
name: Refresh

on: push

jobs:
  # Build job
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Setup Pages
        id: pages
        uses: actions/configure-pages@v3
      - name: Build with Jekyll
        uses: actions/jekyll-build-pages@v1
        with:
          source: ./
          destination: ./_site
      - name: Upload artifact
        uses: actions/upload-pages-artifact@v2

  # Deployment job
  deploy:
    env:
      GITHUB_TOKEN: $
    permissions:
      id-token: write
      pages: write
    environment:
      name: github-pages
      url: $
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v2
            

Long overdue update

Posted on 6/26/2023

In the time since my last post, I replaced my main laptop from an Acer Aspire 5 with a Ryzen 4700U and integrated graphics with a Razer Blade 17 containing a Core i7 12800H and discrete Nvidia RTX 3060 GPU.

Other than that, I spent my copious amounts of time lurking (too often) blogs that piqued my interest. I’m generous enough to release my list here: https://ufile.io/1fqpnqsx. All you need is to import this OPML file into a supported news aggregator. This’ll expire in 30 days.

Making the Steam Linux client use system libs on (OpenSUSE)

Posted on 4/09/2023.

Work in progress…

By invoking

pushd ~/.steam/root/ubuntu12_32; file * | grep ELF | cut -d: -f1 | LD_LIBRARY_PATH=. xargs ldd | grep "=>"|awk -F "=>" '{print $1}'|sort | uniq; popd , the following libraries from my system that correspond to those from the Steam runtime are here. First-party libraries are lib

(Abbreviated) output of rpm -q --requires steam, which is the installer, NOT the Steam runtime used for the games themselves:

...
dbus-1-glib-32bit
fontconfig-32bit
glibc-32bit
glibc-locale-base-32bit
gtk2-engine-oxygen-32bit
libICE6-32bit
libSDL-1_2-0-32bit
libSM6-32bit
libX11-6-32bit
libXdmcp6-32bit
libXext6-32bit
libXfixes3-32bit
libXi6-32bit
libXrandr2-32bit
libXrender1-32bit
libXtst6-32bit
libatk-1_0-0-32bit
libcairo2-32bit
libcrypt1-32bit
libcups2-32bit
libcurl4-32bit
libdbus-1-3-32bit
libdrm2-32bit
libfreetype6-32bit
libgcc_s1-32bit
libgcrypt20-32bit
libgdk_pixbuf-2_0-0-32bit
libglib-2_0-0-32bit
libgmodule-2_0-0-32bit
libgobject-2_0-0-32bit
libgtk-2_0-0-32bit
libogg0-32bit
libopenal1-32bit
libopenssl1_0_0-steam
libopenssl1_0_0-steam-32bit
libpango-1_0-0-32bit
libpipewire-0_3-0-32bit
libpixman-1-0-32bit
libpng12-0-32bit
libpulse0-32bit
libstdc++6-32bit
libtheora0-32bit
libudev1-32bit
libusb-1_0-0-32bit
libva-drm2-32bit
libva-glx2-32bit
libva-x11-2-32bit
libva2-32bit
libvdpau1-32bit
libvorbis0-32bit
libvulkan1-32bit
libxcb-dri2-0-32bit
libxcb-glx0-32bit
...

Now, onto to writing a spec file.

The latest

Anywhere, here’s the link: https://software.opensuse.org/package/steam.

My experience at Vanderbilt

Posted on 8/08/2022.

TODO:

For some reason I can’t scale down images yet to fit with this article. Mainly because the images I took were in the HEIC format (see here), and current web browsers don’t support it natively, at least on Linux.

The impact of my internship experience

To sum up in one word: Wonderous. Not only did I relish in collaborating with a graduate student who have published numerous papers on the field of computer-enhanced vision, but also indulged in engaging with both the academic and social summer-time atmosphere found within the university, including gazing at the Central Library, shown below:

Would I have pursued this internship without external funding?

Without the funding, I would have not pursued it, or any other internship not within driving distance from Central Florida. One major disincentive that the Gateway Fellows program dispeled was my transportation and lodging costs, both to arrive at Nashville, and the quotidian driving in the city.

And before you ask, I chose to lodge at a hotel some distance away from the city center, mainly because of (perhaps apocryphal) concerns about abnormally high rowdiness during nights. That choice was not cheap: the total price for my nearly 2 month stay totaled close to ~$3,200.

Lessons learned

Examples of growth

Future plans

After graduation in December, I intend to pursue full-time employment at niche, yet intriguing tech companies in specialized fields. Possible candidates include fintech (JPMorgan & Chase, Bloomberg), and quant-based (Two Sigma).