Skip to main content
Post

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....

Post

Squeezing every token per second

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...

#AI
Note

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.

This note itself is AI-generated. Fitting.

Post

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. ...

Note

AI coding prices got stupid this week.

A person sweating while choosing between three large red buttons labelled Muse, Luna, and DeepSeek V4 Flash

Model Input Output
Muse Spark 1.2 Contributor $0.10 $0.20
DeepSeek V4 Flash $0.14 $0.28
GPT-5.6 Luna $0.20 $1.20
Luna via OpenRouter (50% off) $0.10 $0.60

Prices are per million tokens.

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.

Begun, the price wars have.

Note

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.

Codex usage stats: $414.25 30-day API cost, 487M tokens, 3 banked limit reset credits

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.

Note

My local LLM post blew up a little this week.

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.

Google Analytics card showing 6.6k active users, 20k views, and 6.6k new users over the last 7 days

Post

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...

Post

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 ...

Post

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...

Post

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...

Post

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 ...

Post

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...

Tool

On-device voice-to-text hotkey app for macOS and Windows. No cloud, no subscription - transcribes directly into any input field.

#python #whisper #macos
Snippet

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 ...

Snippet

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 ...

Snippet

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 ...

Note

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.

Sad Pepe

Quotation
"

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.

- Geoff Hinton
Lexicon

You start with the desire to wax your car.

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.

- Carlin J. Vieri, a Ph.D. student Original MIT GSB Archive (2000)
Quotation
"

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.

Now
  • 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.

Post

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...

Post

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...

Note

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).

Copying the Unsloth local inference guide as markdown
The new 'Copy as Markdown' button in action on the Unsloth Gemma 4 post.

This serves two crucial purposes:

  1. Frictionless PKM: Saving tutorials (like the Unsloth example above) directly into your knowledge base without re-formatting code blocks and mangled links.
  2. 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.

TIL

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.

Post

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 ...

TIL

Goku is literally just the Japanese pronunciation of Wukong (from Sun Wukong, the Monkey King).

The Chinese characters for Wukong are 悟空. When read in Japanese, those exact same characters are pronounced Gokū.

Post

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...

Post

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...

Note
Zed AI settings toggle

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.

Now
  • 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.
Claude Code usage stats
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.
  • Spring in Toronto feels close.
Post

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...

Snippet

Configure Qwen Code to use a local llama-server as an OpenAI-compatible model provider instead of a cloud API.

llama.cpp's llama-server exposes an OpenAI-compatible API. Qwen Code can target it directly via modelProviders. 1. Start llama-server # Launch with an --alias and a fixed --port: llama-server \ -m /path/to/model.gguf \ --alias "my-model-alias" \ --host 0.0.0.0 \ --port 8001 \ --ctx-size 131072 Note ...

Post

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...

Post

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...

Snippet

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 #...

Snippet

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...

Snippet

Install essential tools and configure git on a fresh CachyOS / Arch-based machine.

Git Config # git config --global user.email "[EMAIL_ADDRESS]" git config --global user.name "" CLI Tools # # GitHub CLI sudo pacman -S github-cli # Zed Editor curl -f https://zed.dev/install.sh | sh # Tailscale curl -fsSL https://tailscale.com/install.sh | sh # NordVPN paru -S nordvpn-gui # NVM + No...

Post

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...

Now
  • Trying to get a few hikes in before we've all got to burrow indoors for the winters, eh.

Rouge Conservation Area

  • I've been having a lot of fun recently exploring the libraries in Toronto. TPL is awesome!
  • Gave this site a bit of a facelift, letting codex run YOLO
  • Listening to the live version of "Hail to the Thief" by Radiohead"
Post

Bringing old photos back to life.

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...

Post

A side-by-side benchmark on web dev tasks

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 ...

Note

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.

Note

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.

Snippet

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 ...

Snippet

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...

Photo
End of the day
A lone fishing boat on an empty beach at dusk.
Post

How I organize my notes and resources.

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...

Post

The end of programming as we know it

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...

Post

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...

Now
  • I got a bike! (or what the reddit community calls a Bike Shaped Object). For some reason i find it more exciting than getting a car. My new bike

  • Had the pleasure to be back at my alma mater TMU as a guest speaker.

  • Finally playing Doom Eternal. Rip and tear!

  • Trying to setup an agent to find meetup events in my area and register for the ones I like.

  • Gonna turn 28 in a few days, and as my friend said "Your subscription free body maintenance ends soon".

  • Listening to Disintegration by The Cure, and Hail to the Thief by Radiohead.

Now
  • 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
Now
  • Living in Toronto, working as a Data Analyst.
  • Currently focused on personal projects, learning new tech, and improving my workflow.
  • Trying to spend more time outdoors as the weather gets better.
Post

With Codellama, Ollama and Continue.

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. ...

Post

I'm out of blog ideas.

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...

Post

Trying to stay away from distractions.

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...

Post

Simple is better than complex.

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...

Post

What I learned along the way..

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 ...

Post

Get back HW accelerated playback on Fedora.

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...

Post

How I revamped my personal site.

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...

Post

Take your second brain everywhere with you.

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...

Post

Do privacy laws have an impact?

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...

No results.

No results.

Note Pinned

Authorship Transparency on carteakey.dev

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.

This note itself is AI-generated. Fitting.

Note

Begun, the Price Wars Have

AI coding prices got stupid this week.

A person sweating while choosing between three large red buttons labelled Muse, Luna, and DeepSeek V4 Flash

Model Input Output
Muse Spark 1.2 Contributor $0.10 $0.20
DeepSeek V4 Flash $0.14 $0.28
GPT-5.6 Luna $0.20 $1.20
Luna via OpenRouter (50% off) $0.10 $0.60

Prices are per million tokens.

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.

Begun, the price wars have.

Note

Codex $20/mo is the Best Value Plan

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.

Codex usage stats: $414.25 30-day API cost, 487M tokens, 3 banked limit reset credits

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.

Note

A Small Blog Spike

My local LLM post blew up a little this week.

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.

Google Analytics card showing 6.6k active users, 20k views, and 6.6k new users over the last 7 days

Post

What Obsidian Shouldn't Be

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.

Monochrome sketch of a person at a laptop being overwhelmed by folders, PDFs, medical records, and receipts.
Tool

chirptype

On-device voice-to-text hotkey app for macOS and Windows. No cloud, no subscription - transcribes directly into any input field.

#python #whisper #macos
Snippet

Local Network SSH Scan

A bash script to scan the local network (via ARP table) and check for active SSH responders.

Snippet

Site Sucker Alias (ss)

A powerful wget alias to mirror websites locally, bypassing robots.txt and excluding media files.

Snippet

Claude Code Notification Hook

Configure a Notification hook to play a sound or run a custom command when Claude Code needs attention.

Note

TPS over Quality

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.

Sad Pepe

Quotation
"

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.

- Geoff Hinton
Lexicon

Yak Shaving

You start with the desire to wax your car.

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.

- Carlin J. Vieri, a Ph.D. student Original MIT GSB Archive (2000)
Quotation
"

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.

Now

Now Update — Apr 24, 2026

  • 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.

Note

Why Every Technical Blog Needs a 'Copy as Markdown' Feature

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).

Copying the Unsloth local inference guide as markdown
The new 'Copy as Markdown' button in action on the Unsloth Gemma 4 post.

This serves two crucial purposes:

  1. Frictionless PKM: Saving tutorials (like the Unsloth example above) directly into your knowledge base without re-formatting code blocks and mangled links.
  2. 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.

Folio

Agent Tick ❯ AI Meme Archive

A visual chronicle of AI absurdity - memes that capture how ChatGPT, Claude, and the agent era changed everything.

Note

Every App Needs an AI Toggle

Zed AI settings toggle

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.

Now

Now Update — Mar 5, 2026

  • 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.
Claude Code usage stats
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.
  • Spring in Toronto feels close.
Post

New Entity: Folio

Introducing /folio/ - themed, standalone web pages for things I obsess over. Part deep-dive, part visual essay, part personal reference guide.

Transparent monochrome sketch of a folded folio becoming a curated browser page
Folio

Radiohead // Web Archive

A curated inventory of Radiohead's web presence - official sites, archive mazes, fan databases, and rabbit holes.

Snippet

Headless Mode on CachyOS

Free up RAM by stopping all GUI services using systemd targets - useful when running LLMs locally on a TTY.

Snippet

Enable SSH on CachyOS

Install and enable the OpenSSH server on CachyOS (Arch-based), start it on boot, and open the firewall.

Now

Now Update — Oct 11, 2025

  • Trying to get a few hikes in before we've all got to burrow indoors for the winters, eh.

Rouge Conservation Area

  • I've been having a lot of fun recently exploring the libraries in Toronto. TPL is awesome!
  • Gave this site a bit of a facelift, letting codex run YOLO
  • Listening to the live version of "Hail to the Thief" by Radiohead"
Note

Social Media Detox

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.

Note

Late Night AI Notes

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.

Photo

End of the day

End of the day
A lone fishing boat on an empty beach at dusk.
Now

Now Update — Jun 22, 2025

  • I got a bike! (or what the reddit community calls a Bike Shaped Object). For some reason i find it more exciting than getting a car. My new bike

  • Had the pleasure to be back at my alma mater TMU as a guest speaker.

  • Finally playing Doom Eternal. Rip and tear!

  • Trying to setup an agent to find meetup events in my area and register for the ones I like.

  • Gonna turn 28 in a few days, and as my friend said "Your subscription free body maintenance ends soon".

  • Listening to Disintegration by The Cure, and Hail to the Thief by Radiohead.

Now

Now Update — May 25, 2025

  • 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
Now

Now Update — May 20, 2025

  • Living in Toronto, working as a Data Analyst.
  • Currently focused on personal projects, learning new tech, and improving my workflow.
  • Trying to spend more time outdoors as the weather gets better.

No results.

Updated Aug 18, 2026

Subscribe