Find previous weeknotes here.


A full and chaotic week. I got off to a raging start and made great progress at Recurse, but got slammed by some hard walls of bureaucracy in the second half. My mission is to become stronger, defy Nature, and have fun. Tax accounting is the opposite of all three of those…

Updates

RC hosts “Impossible Stuff Day” once per batch, a whole day to spend working on something well beyond the edge of your abilities that feels totally impossible. The last one wasn’t productive for me, but I took a different approach this time around and wrote a DevLog in real time as I participated.

Despite challenges with download speeds and privacy issues, I successfully set up a 3B-parameter LLM with GPU acceleration on my Mac through a custom command-line interface. I did the “llmpossible.”

I finally migrated my Goodreads data to my personal site. See the new books page.

You can also view the code and use it to liberate your own Goodreads data: gianlucatruda/goodreads-to-md: Convert Goodreads books to markdown files (Obsidian, Hugo, Jekyll etc.)

Inputs / outputs

  • Updated my site’s code snippets so they have line wrapping, nicer highlighting, and robust copy-paste.
  • ML Paper Cuts study group: We covered the CLIP model from Learning transferable visual models from natural language supervision.
    • I first studied CLIP at release. It was clear then that it was a breakthrough way to unify text and image modalities at scale. But revisiting it in detail unlocked some interesting nuances of its training approach and limitations.
  • I impromptu co-hosted Creative Coding this week. The theme was “visual abnormality” so we mob programmed artistic interpretations of the webcam feed. Everyone was spectacularly creative in their approaches to representing colour blindness, double vision, and hallucinations.
    • After a bit more time to polish it, I produced a WebGL shader that uses the webcam as a texture from which you can explore fractals and discontinuities in colourspace.
    • Try it in your browser at webcam-aberration.vercel.app. It’s best on desktop browsers.
    • The source code is at gianlucatruda/webcam-aberration
  • I started working through The Book of Shaders, which we discussed at the Graphics study group before going down various rabbit holes about how to debug parallel GPU code, graphics drivers and engines, and our favourite aspirational shader artworks.

Here’s a short demo video of me using webcam-aberration, but it looks nowhere near as good as the real thing because of all the compression artefacts, so please do try it yourself!

Ideas

Another LLM workflow for terminal dwellers

I don’t need Cursor, I just use

cat instructions.md | llm --model o1-preview >> response.md
  • o1-preview managed to one-shot my request to reformat some disgusting .js from a Twitter export into a nice .csv with the same structure as the old export format.
  • I’ve since used this approach to few-shot many little scripts and it’s rapid and clean. The key is to write great instructions in instructions.md.
  • Having the output in response.md instead of stdout is handy, as you can always refer to it, but also you can open it in a vim buffer and then yank the actual code snippet across to your working code buffer.

Karpathy’s Lament

I coin Karpathy’s Lament: The current paradigm of large language model training converges on moderately smart tools that write obscenely cringe-worthy slop.

“Not fully sure why all the LLMs sound about the same - over-using lists, delving into “multifaceted” issues, over-offering to assist further, about same length responses, etc. Not something I had predicted at first because of many independent companies doing the finetuning”

— via this tweet

A chain of mathematical equivalence

Re-frame your limited perceptual lifetime

maybe bc with money it’s cool to be inefficient (to show off your surplus, eg $500 bottles at a club or whatever) but in programming/hacker culture it’s pretty much always cool to be efficient. also to me it brings up the q of “well, how much do you need to run the thing you want to make” vs like you need to max out how much memory/money you have, always need more. If you’re making Call of Duty you prob need a lot but Super Mario is tbh more fun and doesn’t need much. And building a fun Super Mario isn’t thaaat much easier with infinite memory. It’s hard to make it good and fun, but not because of memory constraints. There’s a lot of other bottlenecks that adding memory doesn’t automatically fix

— via his thread

Distribution shift in vibespace

  • As the founder, “you are the upper bound on how much people in your company care.” — Alexandr Wang (Scale.ai) via this tweet
  • “are autists failed empaths whose natural sensory clarity was so high they had to turn off all the most salient channels (looking at eyes, empathy, love, etc) and invest all their processing into lower human-saliency things like math as a way to cope with constant overwhelm” — Nick Cammarata
  • “basically one thing that’s happening globally right now is that american ideological strains escaped from america. they’re incredibly potent and while americans have been selected for resistance the rest of the world is naive. basically brain smallpox but for the old world” — @eigenrobot
  • “the vast majority of humanity would never become billionaires. they wouldn’t even want to. mo money mo problems as they say. honestly most of ya’ll would tap out at 8 figures and start drinking wine with chamath or something […] that level of wealth is a side effect of mental illness / an aberration. it’s the same thing that would compel someone to hit top 0.2 percentile in starcraft. there is no reason to actually do it. there’s just something extremely powerful compelling you to do so […] There are people that want something so bad the universe will align itself to give it to them.” — @yacineMTB

This week I learned

(Copy-pasted from my #TIL-tagged notes in Obsidian from the past week.)

  • ciq, yib, dap, etc. Vim motions (that I use constantly) actually work anywhere on the line. I’ve been first seeking the objects and then using them, but you don’t have to do that first step. Vim is smart enough to find the nearest valid target. via DHH on twitter
  • Two handy Vim objects I didn’t know: W for whitespace and i for indentation level. For example, dii deletes everything at the current indentation and yiW copies everything between whitespace. via DHH on twitter

Thanks for reading! I’ve tweaked the format and emphasis this week. Please let me know what you think and what you found most interesting.


  1. Technically I used genetic programming. There are many pedantic differences between that and the evolutionary algorithms in the paper, but they both draw inspiration from evolutionary biology. ↩︎

  2. It’s kinda ironic that the Cursor interview prompted me to try Cursor again this past week and I hated it. And trying to use Llama revealed why Zuck’s new “open source” kick is a double-edged sword and I’ll never be able to trust him despite finding him relatable. More on both of those experiences in DevLog: llmpossible ↩︎