Image modified from the original by Scott Goodwill on Unsplash

I'm Abid, and this is my website

Take the Wheel

Minimal coding agent (~400 LOC), my daily driver

Climate Nodes

Network model of climate tech + venture capital industry

Looking at the Sky

Video interviews showcasing the artwork and personal reality of creatives trying to make it in NYC

py-hamt v3 (src download)

For a previous job, I made a data structure in python that allows for S3-like mutable key-value storage on IPFS, normally an immutable content-addressed store. Includes a storage compatibility layer for Zarr v2. This is the source code of version 3, the last of my work on the project before maintenance was transferred. AGPLv3 License.

First arcsine in Solidity (Ethereum) full src download

Link is to an open source trig library where it was merged. First ever afaik.

First haversine distance in Solidity (Ethereum) full src download

The haversine function calculates the distance between two latitude+longitude points. First ever afaik.

Articles

Simple LRU cache with just a Python dict

Take the Wheel 🔗

AI, take the wheel 😎 /s

Simple, opinionated coding agent for personal use. Focused on ease of maintenance, and speed through simplicity. Source code available under AGPLv3.

Key Differentiators:

Installation

uv tool install https://abidsikder.com/takethewheel-0.3.0-py3-none-any.whl

Usage

Make sure either an OPENROUTER_API_KEY or AWS_BEARER_TOKEN_BEDROCK is in your env. takethewheel glm # z.ai glm 5.1 via OpenRouter takethewheel opus # opus 4.8 max via OpenRouter takethewheel gpt # gpt 5.5 xhigh via OpenRouter takethewheel aws-opus # opus 4.8 max via AWS Bedrock takethewheel model "prompt" # finish prompt and exit, noninteractive

Context via agents.md

Automatically pass context with an agents.md file. It must be in the directory you invoke the agent in.

To include the contents of other files, start a line with the @ symbol followed by the file path e.g.

@./README.md @./important_script.py Additional instructions...

Simple LRU cache with just a Python dict 🔗

Since Python 3.7+, insertion order is maintained in the python dict type. For example:

a = {} a[1] = 1 a[2] = 2 a[3] = 3

When you iterate over the keys and values, you will always get the pairing 1:1 first before 2:2. We can use this order to keep track of which key-value pairs were least recently used by moving used ones to the end of the insertion order. I'll show an example now with some python code, where the cache stores a mapping between some type ID and some type Obj.

# python 3.7+ from sys import getsizeof cache: dict[ID, Obj] = {} max_cache_size_bytes: int = 1_000_000 # e.g. 1 Megabyte def lru_eviction(): if getsizeof(cache) > max_cache_size_bytes: if len(cache) == 0: return stalest_key = next(iter(cache.keys())) del cache[stalest_key] def read(id: ID) -> Obj: result: Obj if id in cache: # Cache Hit result = cache[id] # move to the back in insertion order del cache[id] cache[id] = result else: # Cache Miss result = get(id) # Where get() is e.g. some network call cache[id] = result lru_eviction() return result

Based on this documentation for the time complexity of dict operations, cache reads are constant time complexity on average.