Image modified from the original by Scott Goodwill on Unsplash
I'm Abid, and this is my website
Minimal coding agent (~400 LOC), my daily driver
Network model of climate tech + venture capital industry
Video interviews showcasing the artwork and personal reality of creatives trying to make it in NYC
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.
Link is to an open source trig library where it was merged. First ever afaik.
The haversine function calculates the distance between two latitude+longitude points. First ever afaik.
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:
uv tool install https://abidsikder.com/takethewheel-0.3.0-py3-none-any.whl
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
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...
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.