A practical guide to hardware, OS, and llama.cpp tuning, built from a year of experiments on a single consumer CUDA workstation.
Note: This post was drafted with significant AI assistance, synthesizing notes, bench results, and scripts from the l3ms homelab toolkit and the series of model-running posts on this site. The experiments, numbers, and failure modes documented here are real - the synthesis and prose are AI-assisted....
Authorship note Parts of this post were drafted/refined with the help of gpt-oss-120b itself. How meta! TL;DR # Hardware: i5-12600K (6P + 4E), RTX 4070 (12 GB), 64 GB DDR5 RAM, Linux (CachyOS, CUDA 13.0). Result: 11 tokens/s -> 25 tokens/s generation, 420+ tokens/s prompt processing for 32k conte...
Every piece of content on this site now carries an authorship badge - a small indicator of how it was made:
Human - Written entirely by me, no AI assistance
AI Assisted - Written with AI as a creative partner; ideas and direction are mine
AI Generated - Primarily generated by AI with my oversight and editing
Unclassified - Not yet tagged (working through the backlog)
I added this because transparency matters, especially as AI writing becomes indistinguishable from human writing. Most of my recent posts are AI-assisted - that's just how I work now. I'd rather be upfront about it than pretend otherwise.
A data analyst's mostly futile quest for the perfect workflow.
I thought this would take one evening. Open repo on the left. Agent on the right. Git somewhere visible. My own API key. Done. Instead I spent a week bouncing between editors, terminal apps, desktop wrappers, that slowly turned into me assembling an IDE out of separate tools like it was 2009 again. ...
Muse Contributor is the cheapest of the bunch. Ten million input tokens and two million output tokens cost $1.40. The trade is permission for Meta to train on your prompts and completions, so I would keep work code far away from it.
DeepSeek V4 Flash is nearly as cheap without needing a special contributor tier, and its cached input price is a frankly stupid $0.0028 per million tokens.
Luna then went from cheap to silly. OpenAI dropped the direct API price to $0.20/$1.20, and OpenRouter is temporarily selling it at another 50% off ($0.10/$0.60).
Subscriptions are getting dragged into the fight too. OpenCode Go is $5 for the first month and $10/month after that, with Luna currently getting 2x usage limits.
Luna is still king for me, though.
By my rough usage-limit math, Luna Max on the $20 ChatGPT Plus plan works out to around 1.5 billion tokens a week. The exact number depends on how credits are counted, but the allowance is large enough that I have stopped thinking about individual requests. Max reasoning when I need it, fast mode almost everywhere else.
This is basically TPS over Quality again, except the cheap fast model is now also very good.
ChatGPT Plus. Luna Max. Fast mode. That is all I need.
Having used Claude Code extensively at work and Codex + Antigravity for personal projects, I can confidently say the Codex $20/month Plus plan is the best value AI coding plan out there right now.
The main reason: frequent session resets, banked reset credits that carry forward, and the fact that it runs gpt-5.5 as the top model. I've burned through close to $600 API equivalent in the last ~20 days across two accounts — and paid $40 total.
The pricing isn't an accident. Plans like this are the gateway drug — cheap enough to get you hooked, generous enough to make you dependent, and carefully designed so you can't imagine going back to writing code without an agent sitting next to you. And it's working.
Enjoying it while it lasts — these things have a way of getting quietly squeezed once the dependency is locked in.
Not "quit your job and become a full-time blogger" blew up. More like "wait, people are actually reading this?" blew up. The post is at around 14k views now, which is probably a rounding error for people who do this professionally, but feels pretty good for a hobby site I keep poking at after work.
The site also crossed 5k users. Google Analytics says 6.6k active users over the last 7 days, 9.2k events, 20k views, and 6.6k new users. I know analytics numbers are always a bit cursed, but still. This is more attention than this little corner of the internet usually gets.
The funny thing is that the post that did it was exactly the kind of thing I like writing: too much detail about local inference, a bunch of practical notes, and enough benchmarking to make the post useful to the version of me that would have been Googling this at 1am.
So yeah. Small milestone. Big enough for a note.
PS: Sorry for using Google Analytics lol. I will move this to Simple Analytics soon.
Local benchmarks comparing Gemma 4 26B under standard, QAT, MTP, and combined QAT+MTP configurations on an RTX 4070.
Google's release of the QAT (Quantization-Aware Training) variants of Gemma 4 has changed the game for local inference on consumer hardware. By combining QAT with MTP (Multi-Token Prediction), we can now run the heavy Gemma 4 26B MoE model at over 100 tokens/second on a single 12GB GPU. Here is a pe...
End-to-end Gemma 4 setup with official MTP assistant drafter models on llama.cpp.
Update (May 20, 2026): Gemma 4 MTP support has arrived in mainline llama.cpp via PR #23398! We are no longer dependent on the atomic-llama-cpp-turboquant fork. Update (May 21, 2026): Successfully benchmarked Gemma 4 26B-A4B MTP on mainline llama.cpp using PR #23398. On a 12GB RTX 4070, the mainline ...
I burned API credits comparing ChatGPT Images 2.0, Nano Banana, and Imagen on prompts designed to be annoying.
I had $300 API credits to burn and nothing else to show for it. That is only slightly unfair. I also got a folder full of tiny watercolor kitchens, cursed market maps, inconsistent character sheets, and a better sense of which image model I should bother when I need artifacts for this site. I have b...
A messy still-frame trailer experiment, and the weirdly practical lessons hiding inside it.
I spent the last couple of days doing the extremely normal thing where you turn a trailer into 1,290 individual frames, send the frames through image models, stitch them back together at 12fps, and then slowly realize the actual boss fight is black bars. This is Loganime test v1. It is not a polishe...
End-to-end Qwen3.6-35B-A3B MTP setup on llama.cpp with throughput notes and MTP speculative decoding speedups.
Update (June 16, 2026): Ran a comprehensive benchmark sweep on the latest mainline build of llama.cpp using a custom local benchmark harness comparing Q4_K_XL vs. Q6_K quant variants, and Thinking vs. NoThink modes. Key findings: Q4_K_XL MTP (n-max=2) is the speed champ at 60.3 tok/s (vs 52.1 tok/s ...
A note-taking app becomes a weird place very quickly when you ask it to be your records system, admin dashboard, and substitute for thinking.
I like Obsidian a lot. Probably too much. That is part of the problem. There is a certain kind of person, and I am very much one of them, who sees a flexible tool and immediately starts trying to make it the place where everything goes. Notes, obviously. Then projects. Then tasks. Then PDFs. Then he...
A bash script to scan the local network (via ARP table) and check for active SSH responders.
This script parses your local ARP table to find active IP addresses and then attempts a quick SSH connection to each to see which devices are reachable and running an SSH server. This is particularly useful for finding Raspberry Pis or other headless devices on your network. scan_ssh.sh #!/bin/bash ...
A powerful wget alias to mirror websites locally, bypassing robots.txt and excluding media files.
This wget alias (named ss for "Site Sucker") allows you to recursively download an entire website for offline viewing. It converts links for local browsing, ignores robots.txt, and excludes heavy media files to save space. Add this to your ~/.bashrc or ~/.zshrc: alias ss="wget --recursive ...
Configure a Notification hook to play a sound or run a custom command when Claude Code needs attention.
In any terminal you can configure a Notification hook to play a sound or run a custom command when Claude needs your attention. Hooks run alongside the desktop notification rather than replacing it. Terminals such as Warp or Apple Terminal rely on a hook alone since Claude Code does not send them a ...
Lost my Copilot quota today. Stopped using Claude when they started testing on "prosumers". Finished Codex Quota for the site redesign. Then finished Antigravity and Gemini CLI Pro models until I had nothing left.
I had to rely on Gemini 3 Flash. Turns out, it has no right to be as good as it is for repeated tasks (skills) or refactoring. Insanely good model, but the best thing is the speed. On top of that, I cant seem to run out of quota either.
Unlike what you'd think, when you factor for quality (graphics settings in games, basically) vs TPS (FPS, effectively), it's actually more fun to work with a fast model. It responds insanely quickly and the iteration loop becomes super fast.
I think I might just stick with this for a while longer.
Extrapolating the spectacular performance of GPT-3 into the future suggests that the answer to life, the universe and everything is just 4.398 trillion parameters.
To wax your car, you need a water hose. Only, your water hose is busted so you need to go down to the hardware store to get a new hose.
To get to the hardware store, you have to drive across a bridge. The bridge requires a pass or ticket. You can't find your pass, but you know your neighbor has one.
However, your neighbor won't lend you his pass until you return a pillow that you borrowed. The reason you haven't returned it is because the pillow is missing some stuffing.
The pillow was originally stuffed with yak hair. In order to re-stuff the pillow you need to get some new yak hair.
And that's how you end up shaving a yak, when all you really wanted to do was wax your car.
Population (of the universe): None. Although you might see people from time to time, they are most likely products of your imagination.
Simple mathematics tells us that the population of the Universe must be zero. Why?
Well given that the volume of the universe is infinite there must be an infinite number of worlds. But not all of them are populated; therefore only a finite number are. Any finite number divided by infinity is zero, therefore the average population of the Universe is zero, and so the total population must be zero.
- Douglas Adams
The Hitchhiker's Guide to the Galaxy
"Heard joke once: Man goes to doctor. Says he's depressed. Says life seems harsh and cruel. Says he feels all alone in a threatening world where what lies ahead is vague and uncertain. Doctor says, 'Treatment is simple. Great clown Pagliacci is in town tonight. Go and see him. That should pick you up.' Man bursts into tears. Says, 'But doctor...I am Pagliacci.'"
One of the most useful things about AI is also one of the most humbling: it reveals how clear your own judgment actually is. If your critique stays vague, your taste is still underdeveloped. If your critique becomes precise, your judgment is stronger than the model output. You can then use the model well instead of being led by it.
Just shipped the v2 redesign of this site. It's a move toward a denser, "workbench" aesthetic - more semantic typography, sharper edges, and a layout that feels more like an authored archive than a generic app.
Claude Code has been driving the refactor, and the speed of iteration is still blowing my mind.
Working on the next folio entry - diving deep into the world of Bloodborne. Trying to capture that Gothic cosmic horror vibe on a webpage.
Continuing the Dune journey. The world-building is as dense as my new CSS.
I think we will see some people employed (though perhaps not explicitly) as meat shields: people who are accountable for ML systems under their supervision. The accountability may be purely internal, as when Meta hires human beings to review the decisions of automated moderation systems. It may be external, as when lawyers are penalized for submitting LLM lies to the court. It may involve formalized responsibility, like a Data Protection Officer. It may be convenient for a company to have third-party subcontractors, like Buscaglia, who can be thrown under the bus when the system as a whole misbehaves.
Practical Qwen3.6 setup on 12 GB VRAM using llama.cpp.
Qwen3.6 continues the strong trend of highly capable open models, and the 35B-A3B MoE variant hits a sweet spot for consumer hardware. With a low active parameter count per token, it runs fast while still retaining the "smart" feel of larger reasoning models, and includes multimodal capabi...
I know that "all you need" is annoying but hear me out.
The hype around openclaw - and every other claw derivative - seems to be fading a bit as reality checks in. And what's interesting is the hype was never really about the product itself. It was about: The premise of personal agents working for you while you do other stuff The novelty of loosely defin...
If you're reading a technical blog, there's a high chance you use some sort of personal knowledge management system-like Obsidian, Notion, or Logseq. And if you're anything like me, you frequently copy interesting snippets, setup guides, or entire articles into your own vault for future reference.
The problem? Selecting text and hitting Ctrl+C often grabs the rendered HTML. When you paste it into your Markdown-native PKM, the formatting breaks: code blocks lose their syntax highlighting, links get mangled, and lists become a mess of weird indentation.
To solve this friction, I've added a "Copy as Markdown" and "View Raw" button to all technical content on this site (posts, snippets, TILs).
The new 'Copy as Markdown' button in action on the Unsloth Gemma 4 post.
This serves two crucial purposes:
Frictionless PKM: Saving tutorials (like the Unsloth example above) directly into your knowledge base without re-formatting code blocks and mangled links.
LLM Context: Quickly copying an entire guide or snippet into ChatGPT, Claude, or local LLMs to ask questions, debug setups, or request modifications.
It uses a small Eleventy template to generate a .txt file containing the raw, unparsed .md content. A simple Alpine.js component fetches that file and copies the pure Markdown directly into your clipboard. No more re-formatting text just to save a useful tutorial.
Every technical blog that expects to be referenced by its readers should adopt this pattern. It respects the reader's time and acknowledges how developers actually consume and store knowledge today.
It's actually pretty incredible: every single time you shuffle a pack of cards, you are literally doing something that has never been done before by any other human since the beginning of time.
Stephen Fry on QI explained it beautifully: if each star in our galaxy had a trillion planets, and each of those planets had a trillion people, and each had a trillion packs of cards, and they were all somehow able to shuffle them a thousand times a second since the moment of the Big Bang... they would only just roundabout now be starting to repeat shuffles.
End-to-end Gemma 4 setup on mainline llama.cpp with text and vision throughput notes.
Google DeepMind's Gemma 4 family is out-truly open with Apache 2 licenses, multimodal with support for text, image, and audio, and efficient enough to run on-device. The 26B-A4B variant is a mixture-of-experts model with only 4B parameters active per token, making it an ideal candidate for consumer ...
TL;DR # Hardware: i5-12600K (6P + 4E), RTX 4070 (12 GB), 64 GB DDR5 6000 MT/s, Linux (CachyOS, CUDA 13.0). Scripts: All bench and server scripts are in carteakey/l3ms under bench-models/. Model: Qwen3-Coder-Next MXFP4 (~45 GB) - 80B total params, ~3B active per token. Result: ~40 t/s generation, 510...
The tech stack powering this site - Netlify, Eleventy, Alpine, and Tailwind - and all the services that make it tick
When I moved away from Jekyll a couple years ago, I didn't expect to end up with something I'd name. It wasn't planned - it just evolved as I added features and tried to keep things simple. I now call it the NEAT framework: Netlify, Eleventy, Alpine.js, and Tailwind CSS. The name fits twice over. It...
A Raspberry Pi 4B, a Pi camera, an HLS stream, and a Cloudflare tunnel - my take on the window-to-the-world idea.
I've been a fan of WindowSwap for a while - the idea is simple and kind of beautiful. Someone points a camera out their window, streams it to the internet, and strangers get to borrow that view for a few minutes. A slice of someone else's world. The inspiration. Someone's window, somewhere in the wo...
Zed's AI settings - a simple toggle to disable all AI features. Every app should have this. (Zed Blog)
Honestly, everything on the web needs a toggle like this - a reader-controlled switch to filter by authorship. Your feed, your rules.
On the flip side, I'm also building aidar - a tool that scans websites and measures stylistic signals associated with AI-era writing. The badges here are self-reported; aidar is the attempt to detect the same thing from the outside.
On a bit of a project building spree - Claude Code has become my pair programmer and the speed is genuinely startling. Shipped more in the past few weeks than the past few months (read: years). Claude tells me I've used ~4× more tokens than the word count of Dune. Checks out. And that's just one device - I've got Antigravity, Copilot, and 3 others to multiply by.
Rookie numbers. (This is just one device.)
Built aidar - a tool that scans websites and measures stylistic signals associated with AI-era writing. Still very early.
Built window.carteakey.dev - a live window to a Toronto intersection. Raspberry Pi 4B, a Pi camera, an HLS stream, and a Cloudflare tunnel.
Also been putting together the folio - themed standalone pages for things I obsess over. First one is a Radiohead web archive. A Bloodborne one is next.
This site itself keeps evolving - added a unified feed, authorship badges, and a notes section. Trying to post more short-form stuff instead of letting every idea die in a draft.
Thinking a lot about what "authentic" writing looks like in the AI era - hence the authorship badges experiment.
Reading Dune for the first time. Finally.
Radiohead back on heavy rotation - Exit Music (For a Film), and I promise.
Introducing /folio/ - themed, standalone web pages for things I obsess over. Part deep-dive, part visual essay, part personal reference guide.
I've been thinking about what kind of pages belong on a personal website that aren't blog posts and aren't portfolio entries. Something in between - deeper than a bookmark, more permanent than a tweet, more personal than a wiki article. The answer, for me, is a folio. What is a Folio? # Not a portfo...
aidar tracks stylistic signals associated with AI-era writing across the web
A few weeks ago I came across this post on Marginalia showing that new Hacker News accounts are ten times more likely to use em dashes than older ones. Not as proof of anything - just as a signal. A stylistic fingerprint that's shifted measurably since large language models became mainstream. That f...
A lazy person's guide to exploratory data analysis that actually produces something at the end
TL;DR: Perform exploratory data analysis on Databricks by "volleying" with AI agents like Claude or Copilot - iterate quickly with SQL queries, and generate notebooks automatically. The indeterministic nature of LLMs is great for looking at patterns within datasets and although it may lead...
I started at 3 PM and called it morning. I've been burning through AI tools faster than my brain can register. Exhausted Claude Code on my Pro subscription, exhausted Codex trial - done. Got access to Copilot CLI - exhausted the 300 premium requests. But the best part was getting access to AWS Bedro...
Free up RAM by stopping all GUI services using systemd targets - useful when running LLMs locally on a TTY.
Free up RAM by switching to multi-user.target, which stops the display manager, compositor, and all graphical services without touching active TTY sessions. Enter headless mode # sudo systemctl isolate multi-user.target Restore the GUI # sudo systemctl isolate graphical.target Fish shell functions #...
You probably don't need >$100 plans for coding nowadays.
You probably don't need >$100 plans for coding or toying with OpenClaw. My thoughts below. Note: Due to the mindbreaking speed this agent universe is moving at, this may be out of date within 2 days. (Last verified on 2026-04-19) What Changed Since Feb 2026 # Qwen Code: OAuth free tier was discon...
Install and enable the OpenSSH server on CachyOS (Arch-based), start it on boot, and open the firewall.
CachyOS is Arch-based, so pacman handles packages and systemctl handles services. 1. Install OpenSSH # sudo pacman -S openssh 2. Enable and Start the SSH Service # sudo systemctl enable --now sshd The --now flag both enables the service on boot and starts it immediately. Verify it's running: systemc...
Ramblings on what gets quietly lost when intelligence becomes a utility.
Note: Writing unfiltered, raw and undeveloped thoughts. Lack of knowledge and experience may be more visible than usual. The year is 2023, GPT-4 has been launched. The world has suddenly gained interest in it's programming and generalization capabilities. You, as a techie, try it to generate some co...
I had this old webcam lying around which I haphazardly bought during the "COVID webcam shortage" era. It was never great, but it worked fine for occasional video calls. Logitech C270 - aka the wall-eye, get it? Having nothing better to do on a weekend, I decided to repurpose it into a webc...
Gemini's Nano-banana is literally nuts. I'm surprised that it exists and we're so normalized to have such tools that are borderline magic. I recently got an idea of using it to restore old/damaged photos of my family. I called it "Personal Braumgartner Restoration" because of the channel B...
Just out of curiosity, I wanted to see how well GPT‑OSS (the 120B variant) performs on the same coding‑related prompts that GPT‑5 highlights in its Demo. Scope and ground rules: Same prompt text wherever possible (copied from GPT‑5’s examples). Zero-shot - What you see is what you get, no follow-up ...
Its interesting how i've replaced all my social media activity, bit by bit with my own site. Be it microposts (stupid name for tweets), photos, or even small notes, its all here. i think this speaks to the state of social media today moreso than my desire to vibe code.
I know no one reads it, but as some wise person once said - "If a tree falls in a forest and no one is around to hear it, does it make a sound?" - well, if I write something on my own site, and no one reads it, does it matter? To me, yes. It does.
Just implemented so many small changes to the site. Using Copilot and Codex coding "agents" to just crank through a TODO list. Maybe I'll write about it later.
https://github.com/9001/copyparty Installation Steps # The following steps will install Copyparty and set it up as a systemd service. This will start /usr/local/bin/copyparty-sfx.py and read the Copyparty config from /etc/copyparty.conf. You can find an example config here: copyparty.conf. sudo apt ...
A script to monitor and restore Wi-Fi connectivity on Linux
Why These Scripts Exist # Sometimes, on Linux (especially Ubuntu/Pop!_OS), your Wi-Fi remains “connected” but the internet drops. This can happen due to DHCP lease issues, IPv6 glitches, or conflicts between internal and external Wi-Fi adapters. These scripts help: wifi-guardian.sh → Runs quick netw...
Obsidian is one of the most useful pieces of software I've used. If someone asked me to choose only two apps for life, VSCode and Obsidian would be my picks. I've mostly been a multi-vault/multi-app note taker, treating each vault as a separate project or domain. The only issue with this approach fo...
Note: This post was partially augmented by AI-specifically, Claude Sonnet 4. I used AI assistance to refine my initial draft, structure my ideas, and improve the writing. Given the subject matter, it felt appropriate (and meta 😃) to be transparent about this collaborative process. I spent two hours...
It's irresistibly fun, and yet, something doesn't sit quite right.
With all respect to the incredible talent and creativity at Studio Ghibli and Miyazaki, I genuinely can’t stop myself from using ‘convert to ghibli’ - or as everyone now calls it, ‘ghiblify’ - on every image I see after the recent 4o image generation updates. At least, until it inevitably stops (per...
With the weather finally improving, I'm trying to spend more time outdoors.
Learning about AI agents and the power of good data visualization
Adding features to this website 10x faster with Vibe coding
Looking forward to getting back into badminton and taking next steps in my fitness journey
Playing GTA V (first time playing the story) and realizing my threshold for enjoying games has gotten impossibly high - I've dropped Wolfenstein 2, Hogwarts Legacy and Devil May Cry 5 recently.
Excited for Death Stranding 2
Reading "Storytelling with Data" by Cole Nussbaumer Knaflic
Listening to "Currents" by Tame Impala, and "The Dark Side of the Moon" by Pink Floyd
I am a huge fan of self-hosting, and one of the things i use is Immich to store precious photos of me and my family. It gives me a bit of relief over paranoia of Google Photos / internet shutting down / hacked / outage stopping me from living in my nostalgia. A source of lot of these images are shar...
My blog uses ~~AI~~, no seriously! Head to my homepage and you will find that the "quote of the day" is (or used to be) powered by ChatGPT. This site refreshes daily which ended up very silently leaking my whole 5$ of OpenAI API credit, leaving my blog stuck with a fallback, ultra-generic ...
Meta recently released their CodeLlama models, which are fine tuned for code completion and analysis. The best thing about them is their crazy large context (upto 100,000 tokens), which would mean that one could input way larger codebases into the prompts and the models should be able to handle it. ...
Warning: Borderline shitpost. Is there a thing as a favorite meme? Well i have one - its the "IQ Bell Curve Meme" - which unlike the name suggests, has nothing to do with IQ or intelligence. The X-axis represents any situation or concept that can progress from ignorance to knowledge back t...
I recently switched to a Macbook Air (M2) as my primary computer, leaving behind a loud and heavy ASUS-FX505 which I had bought as a gaming PC and served me well for over 3 years. It was still a quite capable device (Ryzen 3550h, 16gigs of RAM, SSD + 1 TB HDD), therefore it made sense to make it act...
The thought of myself mindlessly scrolling through a world of increasingly diluted content, especially with the advent of generative AI, repulses me to no end. On the other hand, obsessively chasing productivity hacks, like pomodoro timers and blocked calendars, also has a somewhat similar effect. A...
So you have a Windows PC with WSL2 installed in it and want to SSH into it from another device like a Mac. The reason can be remote development, preference for a Linux environment, or any other. Sounds simple enough on paper, you SSH into your Windows machine and run wsl.exe - but that does not work...
This is in continuation of my older post. The site has come a long way from back when I posted the original article (This is what it looked like). Here’s what I’ve been able to add so far. Tailwind CSS # I wanted to build my own minimal design system, so Tailwind seemed perfect for it. It abstracts ...
Fedora and openSUSE are removing H.264, H.265, and VC-1 VA-API video codecs support from Mesa to avoid potential patent issues. Why does it matter? # H26X's are currently the world’s most used HD video compression standards. Without Mesa supporting these codecs, any video playback will fallback to b...
So, after a lot of procrastination, I decided to migrate my old site - which was based on Jekyll's popular theme - Minimal Mistakes and hosted on GitHub Pages. While the experience of it had been great so far, it was time to move on. Here are a few reasons why: Setting up a local development environ...
Heroku is ending its free tier starting 28th November 2022. It has always been the go-to free hosting solution for hobby devs and students for small & non-commercial projects. (RIP to a lot of tutorials that just went obsolete 😄) One of the best advantages of Heroku's free tier was the Postgres...
Obsidian is a great note-taking application. It acts as your second brain, where notes are connected through links, much like how the human brain works. Moreover, it uses a local folder to store the notes in plain-text Markdown format, making it future-proof and giving total control over your knowle...
The power of search engines is astonishing. You go to your favorite search engine, enter a few terms, and it magically crawls the entire internet for the most relevant search result for each query. With Google Search, Google has achieved verbal dominion over a whole category of digital experience, w...
Every piece of content on this site now carries an authorship badge - a small indicator of how it was made:
Human - Written entirely by me, no AI assistance
AI Assisted - Written with AI as a creative partner; ideas and direction are mine
AI Generated - Primarily generated by AI with my oversight and editing
Unclassified - Not yet tagged (working through the backlog)
I added this because transparency matters, especially as AI writing becomes indistinguishable from human writing. Most of my recent posts are AI-assisted - that's just how I work now. I'd rather be upfront about it than pretend otherwise.
Muse Contributor is the cheapest of the bunch. Ten million input tokens and two million output tokens cost $1.40. The trade is permission for Meta to train on your prompts and completions, so I would keep work code far away from it.
DeepSeek V4 Flash is nearly as cheap without needing a special contributor tier, and its cached input price is a frankly stupid $0.0028 per million tokens.
Luna then went from cheap to silly. OpenAI dropped the direct API price to $0.20/$1.20, and OpenRouter is temporarily selling it at another 50% off ($0.10/$0.60).
Subscriptions are getting dragged into the fight too. OpenCode Go is $5 for the first month and $10/month after that, with Luna currently getting 2x usage limits.
Luna is still king for me, though.
By my rough usage-limit math, Luna Max on the $20 ChatGPT Plus plan works out to around 1.5 billion tokens a week. The exact number depends on how credits are counted, but the allowance is large enough that I have stopped thinking about individual requests. Max reasoning when I need it, fast mode almost everywhere else.
This is basically TPS over Quality again, except the cheap fast model is now also very good.
ChatGPT Plus. Luna Max. Fast mode. That is all I need.
Having used Claude Code extensively at work and Codex + Antigravity for personal projects, I can confidently say the Codex $20/month Plus plan is the best value AI coding plan out there right now.
The main reason: frequent session resets, banked reset credits that carry forward, and the fact that it runs gpt-5.5 as the top model. I've burned through close to $600 API equivalent in the last ~20 days across two accounts — and paid $40 total.
The pricing isn't an accident. Plans like this are the gateway drug — cheap enough to get you hooked, generous enough to make you dependent, and carefully designed so you can't imagine going back to writing code without an agent sitting next to you. And it's working.
Enjoying it while it lasts — these things have a way of getting quietly squeezed once the dependency is locked in.
Not "quit your job and become a full-time blogger" blew up. More like "wait, people are actually reading this?" blew up. The post is at around 14k views now, which is probably a rounding error for people who do this professionally, but feels pretty good for a hobby site I keep poking at after work.
The site also crossed 5k users. Google Analytics says 6.6k active users over the last 7 days, 9.2k events, 20k views, and 6.6k new users. I know analytics numbers are always a bit cursed, but still. This is more attention than this little corner of the internet usually gets.
The funny thing is that the post that did it was exactly the kind of thing I like writing: too much detail about local inference, a bunch of practical notes, and enough benchmarking to make the post useful to the version of me that would have been Googling this at 1am.
So yeah. Small milestone. Big enough for a note.
PS: Sorry for using Google Analytics lol. I will move this to Simple Analytics soon.
Lost my Copilot quota today. Stopped using Claude when they started testing on "prosumers". Finished Codex Quota for the site redesign. Then finished Antigravity and Gemini CLI Pro models until I had nothing left.
I had to rely on Gemini 3 Flash. Turns out, it has no right to be as good as it is for repeated tasks (skills) or refactoring. Insanely good model, but the best thing is the speed. On top of that, I cant seem to run out of quota either.
Unlike what you'd think, when you factor for quality (graphics settings in games, basically) vs TPS (FPS, effectively), it's actually more fun to work with a fast model. It responds insanely quickly and the iteration loop becomes super fast.
I think I might just stick with this for a while longer.
Extrapolating the spectacular performance of GPT-3 into the future suggests that the answer to life, the universe and everything is just 4.398 trillion parameters.
To wax your car, you need a water hose. Only, your water hose is busted so you need to go down to the hardware store to get a new hose.
To get to the hardware store, you have to drive across a bridge. The bridge requires a pass or ticket. You can't find your pass, but you know your neighbor has one.
However, your neighbor won't lend you his pass until you return a pillow that you borrowed. The reason you haven't returned it is because the pillow is missing some stuffing.
The pillow was originally stuffed with yak hair. In order to re-stuff the pillow you need to get some new yak hair.
And that's how you end up shaving a yak, when all you really wanted to do was wax your car.
Population (of the universe): None. Although you might see people from time to time, they are most likely products of your imagination.
Simple mathematics tells us that the population of the Universe must be zero. Why?
Well given that the volume of the universe is infinite there must be an infinite number of worlds. But not all of them are populated; therefore only a finite number are. Any finite number divided by infinity is zero, therefore the average population of the Universe is zero, and so the total population must be zero.
- Douglas Adams
The Hitchhiker's Guide to the Galaxy
Quotation
"
"Heard joke once: Man goes to doctor. Says he's depressed. Says life seems harsh and cruel. Says he feels all alone in a threatening world where what lies ahead is vague and uncertain. Doctor says, 'Treatment is simple. Great clown Pagliacci is in town tonight. Go and see him. That should pick you up.' Man bursts into tears. Says, 'But doctor...I am Pagliacci.'"
- Alan Moore
Watchmen
Quotation
"
One of the most useful things about AI is also one of the most humbling: it reveals how clear your own judgment actually is. If your critique stays vague, your taste is still underdeveloped. If your critique becomes precise, your judgment is stronger than the model output. You can then use the model well instead of being led by it.
Just shipped the v2 redesign of this site. It's a move toward a denser, "workbench" aesthetic - more semantic typography, sharper edges, and a layout that feels more like an authored archive than a generic app.
Claude Code has been driving the refactor, and the speed of iteration is still blowing my mind.
Working on the next folio entry - diving deep into the world of Bloodborne. Trying to capture that Gothic cosmic horror vibe on a webpage.
Continuing the Dune journey. The world-building is as dense as my new CSS.
Listening: Decks Dark on repeat.
Quotation
"
I think we will see some people employed (though perhaps not explicitly) as meat shields: people who are accountable for ML systems under their supervision. The accountability may be purely internal, as when Meta hires human beings to review the decisions of automated moderation systems. It may be external, as when lawyers are penalized for submitting LLM lies to the court. It may involve formalized responsibility, like a Data Protection Officer. It may be convenient for a company to have third-party subcontractors, like Buscaglia, who can be thrown under the bus when the system as a whole misbehaves.
If you're reading a technical blog, there's a high chance you use some sort of personal knowledge management system-like Obsidian, Notion, or Logseq. And if you're anything like me, you frequently copy interesting snippets, setup guides, or entire articles into your own vault for future reference.
The problem? Selecting text and hitting Ctrl+C often grabs the rendered HTML. When you paste it into your Markdown-native PKM, the formatting breaks: code blocks lose their syntax highlighting, links get mangled, and lists become a mess of weird indentation.
To solve this friction, I've added a "Copy as Markdown" and "View Raw" button to all technical content on this site (posts, snippets, TILs).
The new 'Copy as Markdown' button in action on the Unsloth Gemma 4 post.
This serves two crucial purposes:
Frictionless PKM: Saving tutorials (like the Unsloth example above) directly into your knowledge base without re-formatting code blocks and mangled links.
LLM Context: Quickly copying an entire guide or snippet into ChatGPT, Claude, or local LLMs to ask questions, debug setups, or request modifications.
It uses a small Eleventy template to generate a .txt file containing the raw, unparsed .md content. A simple Alpine.js component fetches that file and copies the pure Markdown directly into your clipboard. No more re-formatting text just to save a useful tutorial.
Every technical blog that expects to be referenced by its readers should adopt this pattern. It respects the reader's time and acknowledges how developers actually consume and store knowledge today.
Zed's AI settings - a simple toggle to disable all AI features. Every app should have this. (Zed Blog)
Honestly, everything on the web needs a toggle like this - a reader-controlled switch to filter by authorship. Your feed, your rules.
On the flip side, I'm also building aidar - a tool that scans websites and measures stylistic signals associated with AI-era writing. The badges here are self-reported; aidar is the attempt to detect the same thing from the outside.
On a bit of a project building spree - Claude Code has become my pair programmer and the speed is genuinely startling. Shipped more in the past few weeks than the past few months (read: years). Claude tells me I've used ~4× more tokens than the word count of Dune. Checks out. And that's just one device - I've got Antigravity, Copilot, and 3 others to multiply by.
Rookie numbers. (This is just one device.)
Built aidar - a tool that scans websites and measures stylistic signals associated with AI-era writing. Still very early.
Built window.carteakey.dev - a live window to a Toronto intersection. Raspberry Pi 4B, a Pi camera, an HLS stream, and a Cloudflare tunnel.
Also been putting together the folio - themed standalone pages for things I obsess over. First one is a Radiohead web archive. A Bloodborne one is next.
This site itself keeps evolving - added a unified feed, authorship badges, and a notes section. Trying to post more short-form stuff instead of letting every idea die in a draft.
Thinking a lot about what "authentic" writing looks like in the AI era - hence the authorship badges experiment.
Reading Dune for the first time. Finally.
Radiohead back on heavy rotation - Exit Music (For a Film), and I promise.
Its interesting how i've replaced all my social media activity, bit by bit with my own site. Be it microposts (stupid name for tweets), photos, or even small notes, its all here. i think this speaks to the state of social media today moreso than my desire to vibe code.
I know no one reads it, but as some wise person once said - "If a tree falls in a forest and no one is around to hear it, does it make a sound?" - well, if I write something on my own site, and no one reads it, does it matter? To me, yes. It does.
Just implemented so many small changes to the site. Using Copilot and Codex coding "agents" to just crank through a TODO list. Maybe I'll write about it later.
With the weather finally improving, I'm trying to spend more time outdoors.
Learning about AI agents and the power of good data visualization
Adding features to this website 10x faster with Vibe coding
Looking forward to getting back into badminton and taking next steps in my fitness journey
Playing GTA V (first time playing the story) and realizing my threshold for enjoying games has gotten impossibly high - I've dropped Wolfenstein 2, Hogwarts Legacy and Devil May Cry 5 recently.
Excited for Death Stranding 2
Reading "Storytelling with Data" by Cole Nussbaumer Knaflic
Listening to "Currents" by Tame Impala, and "The Dark Side of the Moon" by Pink Floyd