Personal website
Thanks to the generosity of the organizers of PyTexas 2026, I won a 3-month Claude Pro subscription as a prize!
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.
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.
With Claude Code, I have these plugins installed:
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:
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:
In an interesting twist, posting Claude-generated analyses as an issue actually helped to automate bug fixes (see here and here).
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:
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.
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:
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)
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:
Changes to the runtime: a garbage collector that doesn’t rely on linked lists, fine-grained internal locks on built-in dict / set / list, modified reference counting to reduce contention, and critical sections (PyBeginCriticalSection / PyEndCriticalSection) for per-object locking, useful for custom objects to be exposed via the C API. PyDict_Next is not thread-safe and must be wrapped in a critical section.
PyUnstable_Module_SetGIL in the extension module’s entry point PyInit_<module name>:
#ifdef Py_GIL_DISABLED
PyUnstable_Module_SetGIL(m, Py_MOD_GIL_NOT_USED);
#endif
PyModuleDef_Slot with Py_mod_gil set to Py_MOD_GIL_NOT_USED.Language and tool support: Cython (type annotations for efficient, compatible code), PyBind11 (free-threading support , PYBIND11_MODULE(..., m, py::mod_gil_not_used())), PyO3 /Rust (since 0.28, assumes Rust code is thread-safe ; opt out with #[pyo3::pymodule(gil_used = true)]).
PYTHONMALLOC=debug and PYTHON_GIL=0, AddressSanitizer and ThreadSanitizer. The cpython-sanity project provides pre-built Docker images of CPython with ASan and TSan enabled. Build wheels targeting free-threaded Python using versions ending in T (e.g., 3.13.0T).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.
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
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.
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.
Posted on 8/08/2022.
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.
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:
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.
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).