Sign in

Nathan Douglas

@tenesm.us
801 followers 1.3K following 2.7K posts

ἐνθουσῐᾰστής Platform/DevOps/SRE/Backend Engineer AI Bloomer 🌻 GH: github.com/ndouglas Blog: darkdell.net SugarScape: ndouglas.github.io/SugarScape

PostsRepliesMedia
Nathan Douglas @tenesm.us · 04/10/2026
But I really admired and enjoyed it a lot. I was 18, I was a senior in high school, I saw it on the big screen, I'd smoked a joint with a couple of good friends, and it was just about the coolest thing I'd ever seen.
Ash, in *Alien*: "I admire its purity."
041
Nathan Douglas @tenesm.us · 03/10/2026
Imagine what a pisser it'd be if you evolved eyes but they couldn't see through themselves. Well, back to the drawing board.
080
Nathan Douglas @tenesm.us · 03/10/2026
funny that you say that, because I think there's something Smeagol-coded about this one
110
Nathan Douglas @tenesm.us · 02/10/2026
I love that I took a picture of myself one time after accidentally rubbing reaper powder into my eye and the resulting expression has become my entire identity. And yes, I'm going to lean into it.
1110
Nathan Douglas @tenesm.us · 02/10/2026
Another math notebook bites the dust. Going through one of these a month 🙂
140
Nathan Douglas @tenesm.us · 01/10/2026
Kicking off October with one of my favorite animations so far and definitely my favorite tune - a Steve Reich-inspired marimba/vibraphone duet over a cello drone. This is also the first episode that leaves behind *Growing Artificial Societies* and heads into a new area: spatial games.
4213
Nathan Douglas @tenesm.us · 01/10/2026
020
Nathan Douglas @tenesm.us · 01/10/2026
Finale 🎉 A look back at *Growing Artificial Societies* - what was reproducible, what was not reproducible, etc.
130
Nathan Douglas @tenesm.us · 30/09/2026
Disease 🦠 SugarScape has a delightfully elegant immune system model. Individuals' immune systems and diseases are both represented as binary strings, then compared at each contact event - if the binary string is a substring of the immune system, the agent is immune; otherwise, they're ill.
100
Nathan Douglas @tenesm.us · 30/09/2026
The formation of lending relationships and how it affects population and inequality; I have some ideas for exploring this further down the line.
000
Nathan Douglas @tenesm.us · 29/09/2026
Now for what ended up being maybe my least favorite part of the book, WAR! Show me your war face, Private Flump! 😡 The superficiality of this take annoyed me enough to plan an additional series focusing on just different aspects and behaviors of war. Soon?
000
Nathan Douglas @tenesm.us · 28/09/2026
@pfohl.bsky.social , this might be up your alley - the next "chapter" happens to be about a simple market system, introducing a second commodity, comparative advantage, trade, and market equilibria.
210
Nathan Douglas @tenesm.us · 28/09/2026
The notion of a side, faction, or tribal identity, which will become very important in some future rules 😔
210
Nathan Douglas @tenesm.us · 28/09/2026
dat gini coefficient anyway, ndouglas.github.io/SugarScape/
000
Nathan Douglas @tenesm.us · 28/09/2026
On the brighter side, inherited wealth and how it leads to persistent inequality!
130
Nathan Douglas @tenesm.us · 27/09/2026
That's really not what I was expecting, but it's a very interesting result. 12axes.vercel.app
030
Nathan Douglas @tenesm.us · 27/09/2026
Oh look, it's some of the consequences of our actions. When you collect sugar or eat sugar, it produces pollution. Pollution doesn't harm Flumps directly - it doesn't impair sugar growth or consumption or shorten lifespan - they just don't like it. But that's enough to cause problems.
250
Nathan Douglas @tenesm.us · 26/09/2026
Another video showing some of the very basic rules in SugarScape. This time, seasons! In the winter, sugar grows slower. Our Flumps must migrate or hibernate. Either strategy works... to a point.
100
Nathan Douglas @tenesm.us · 26/09/2026
No, not Alleve. Ambien. Yeah, I'm on that shit. I'm not responsible for this.
000
Nathan Douglas @tenesm.us · 26/09/2026
oh god it's still too long I'm going to have to screenshot it and populate the alt text
In this approach fundamental social structures and group behaviores emerge from the interaction of individuals operating in artificial environments under rules that place only bounded demands on each agent's information and computational capacity. We view artificial societies as laboratories, where we attempt to "grow" certain social structures in the computer—or in silico—the aim being to discover fundamental local or micro mechanisms that are sufficient to generate the macroscopic social structures and collective behaviors of interest.
100
Nathan Douglas @tenesm.us · 26/09/2026
I read a book recently and reimplemented its system and some related ideas, then followup ideas, and unrelated ideas, but now the website is so complicated that I also had to make a video to explain it, and, uh... one video won't be enough. Anyway, here's SugarScape. ndouglas.github.io/SugarScape/
110
Nathan Douglas @tenesm.us · 26/09/2026
"I don't ever want to see that face, as long as I live..."
061
Nathan Douglas @tenesm.us · 26/09/2026
the earrings are a nice touch
161
Nathan Douglas @tenesm.us · 26/09/2026
IDK, it's missing something
030
Nathan Douglas @tenesm.us · 26/09/2026
031
Nathan Douglas @tenesm.us · 26/09/2026
051
Nathan Douglas @tenesm.us · 26/09/2026
I mean, it works!
010
Nathan Douglas @tenesm.us · 26/09/2026
absolute madlad
variable "disks" {
  type    = number
  default = 4
  validation {
    condition     = var.disks >= 1 && var.disks <= 10
    error_message = "range() caps out at 1024 elements, so 10 disks max."
  }
}

locals {
  n    = var.disks
  pegs = ["A", "B", "C"]

  # Which disk moves on step m: 1 + trailing zeros of m
  disk_per_move = [
    for m in range(1, pow(2, local.n)) :
    length([for i in range(local.n) : i if m % pow(2, i + 1) == 0]) + 1
  ]

  moves = [
    for idx, d in local.disk_per_move : {
      disk = d
      dir  = (local.n - d) % 2 == 0 ? 2 : 1 # 2 == -1 mod 3
      j    = floor((idx + 1) / pow(2, d))   # times this disk has moved before
    }
  ]
}

output "solution" {
  value = [
    for mv in local.moves : format(
      "Move disk %d from %s to %s",
      mv.disk,
      local.pegs[(mv.dir * mv.j) % 3],
      local.pegs[(mv.dir * (mv.j + 1)) % 3],
    )
  ]
}
150
Nathan Douglas @tenesm.us · 26/09/2026
lol, I have Claude on the case It's such a dumb question that I can't let it go. And I mean, I've done some stupid shit with Terraform trying to get it to do things it wasn't really meant to do.
130
Nathan Douglas @tenesm.us · 21/09/2026
Top. Chicken.
130
Nathan Douglas @tenesm.us · 19/09/2026
mmm, yes, of course 🙂
"of course"
000
Nathan Douglas @tenesm.us · 19/09/2026
it's a mix. A few are original to me, like :red_hankey:, which I make a point of uploading into every Slack that will have me and is an important component of SRE triage
120
Nathan Douglas @tenesm.us · 17/09/2026
image from *Point Break 2* (currently in post-production) of me jumping out of a perfectly good airplane after Eliezer Yudkowsky, also I've just accidentally rubbed reaper powder in my eye again.
010
Nathan Douglas @tenesm.us · 12/09/2026
with alt text
give me an ascii image of a werewolf with big naturals

./-___-\_----__/.\\-"-)/---.\..-\-./\--/---/.-.----./--\/--(-/.-.--.-_\_----__/.(--/\---...-)-o)/---.\..-\-..\..-\-./\--/---/.-.----./--\/--(-/.-.--.-_\_----__/.(--/\---...-)-o)/---.\..-\-./\--/---/.)/---.\..-\-./\--/---/.-.----./--\//\--/---/.)/---.\..-\-./\--/---/.-.----./--\/--(-/.-.--.-_\_----__/.(--/\---...-)-o.-/-/-_-__.\..-\-./\--/---/.-.----./--\/--(-/.-.--.-_\_----__/.(--/\---...-)-o)/---.\..-\-./\--/---/.)/---.\..-\-./\--/---/.-.----./--\/---/..\.-/-/--/"-../(_o-.----./--\/--(-/.-.--.-_\_----__/.(--/\---...-)-o.-/-/-_-__---/..\.-/-/--/"-../(_o.-/-/-_-__---/..\.-/-/--/"-../(_)/---.\..-\-./\--/---/.-.----./--\/--(-/.-.--.-_\_----__/.(--/\---...-)-o.-/-/-_-__---/..\.-/-/--/"-../(_ooo--(--\..-\-./\--/---/.-.----./--\/--(-/o_o--___o-.----./--\/--(-/.-.--.-_\_----__/.\\-"-)/---.\..-\-./\--/---/.-.\.-/-/--/"-../(_oo--(--o_o--___oo---)-o.-/-/-_-__---/.-.--).-/-/--/-../_o---.-/.--/-_----___-_/-_-__---/.-.--.-/-/--/-__oo----o_o---.-/.--/---...--./--/---/.-.--.-/-/--/-..//--.--//...
130
Nathan Douglas @tenesm.us · 12/09/2026
am I missing something? I assumed Paella Aella was a porn star
140
Nathan Douglas @tenesm.us · 08/09/2026
Like, this is the tarrasque I grew up with vs. what y'all get
the virgin tarrasquechad tarrasques
120
Nathan Douglas @tenesm.us · 08/09/2026
expression appropriate
010
Nathan Douglas @tenesm.us · 06/09/2026
And it reminded me, as so much does, of this bit from Henry Miller in *Sexus*
Every day we slaughter our finest impulses. That is why we get a heart−ache when we read those lines written by the hand of a master and recognize them as our own, as the tender shoots which we stifled because we lacked the faith to believe in our own powers, our own criterion of truth and beauty. Every man, when he gets quiet, when he becomes desperately honest with himself, is capable of uttering profound truths. We all derive from the same source. There is no mystery about the origin of things. We are all part of creation, all kings, all poets, all musicians; we have only to open up, only to discover what is already there.
040
Nathan Douglas @tenesm.us · 05/09/2026
010
Nathan Douglas @tenesm.us · 05/09/2026
*taps the copy of _Maus_*
020
Nathan Douglas @tenesm.us · 04/09/2026
(non-hostile qt) I would've identified that way and wanted to unpack why and rap about it a bit. Hesitated to post this but yolo (pic relevant)
thicc notebook filled w/ math notes and problems, but not open to show any math so as to protect the peace of mind of my wife (for whom i originally took the picture)

I think it's the third or fourth notebook I've filled this calendar year.
130
Nathan Douglas @tenesm.us · 04/09/2026
wow, rude
I got put on the chud list twice
020
Nathan Douglas @tenesm.us · 04/09/2026
Ha! You wish. GET BACK IN YOUR HOLE AND INFER, PIGGY
Claude Code autosuggested prompt: "Wrap it up for the night"
030
Nathan Douglas @tenesm.us · 03/09/2026
This would've been my tenth year, I guess.
051
Nathan Douglas @tenesm.us · 02/09/2026
More duplication/overlap here as a result of inheriting some ML books from a coworker 🤷🏻
- Paradigms of Artificial Intelligence Programming
- Prediction, Learning, and Games
- AI for Game Developers
- AI for Games
- Multiagent Systems
- Simulation and Event Modeling for Game Developers
- Programming Game AI by Example
- Causal AI
- Graph Neural Networks in Action
- The Decision Intelligence Handbook
- Distributed Machine Learning Patterns
- Deep Learning at Scale
- Automating Data and Machine Learning Platforms
- Managing Machine Learning Projects
- Machine Learning Production Systems
- Machine Learning Design Patterns
- Machine Learning Engineering in Action
- AI at the Edge
- Designing Machine Learning Systems
- Practical MLOps
- Natural Language Processing
- Machine Learning Algorithms in Depth
- Inside Deep Learning
- Learn Generative AI With PyTorch
- The Art of Electronics
141
Nathan Douglas @tenesm.us · 02/09/2026
There's some duplication here as a result of this collection going back several years and occasionally picking up things at sales that I didn't realize I had or had something similar to.
- The Goal
- Technology Strategy Patterns
- Math and Architectures of Deep Learning
- Evolutionary Deep Learning
- Deep Learning from Scratch
- Designing Autonomous AI
- TensorFlow in Action
- Math for Deep Learning
- Grokking Machine Learning
- Grokking Deep Reinforcement Learning
- Grokking Simplicity
- Grokking Deep Learning
- Build an Orchestrator in Go
- Build a Text-to-Image Generator (From Scratch)
- The Nature of Code
- How Large Language Models Work
- AI Agents in Action
- A Simple Guide to Retrieval Augmented Generation
- Introducing MLOps
- The Art of Prolog
- Action in Perception
- Optimization Algorithms
- Think Distributed Systems
- Classic Game Programming on the NES
- Interview Speak
- Gödel, Escher, Bach
- An Introduction to Functional Programming Through Lambda Calculus
- OCaml Scientific Computing
- Balancing Coupling in Software Design
- Architecture for Flow
- Programming Rust
- Rust Atomics and Locks
- Effective Rust
- Adventures in Rule-Based Programming: A CLIPS Tutorial

- Parallel and High Performance Computing
_ Systems Performance
- High Performance Computing
- Fundamentals of Software Architecture
- Software Architecture: The Hard Parts
- Designing Cloud Data Platforms
- Learning Domain-Driven Design
- Design It!
- Domain Driven Design
- Design Patterns
- Elemental Design Patterns
- Data-Oriented Programming
- Microservices Patterns
- Microservices Security in Action
- Microservices in Action
- Microservices: Up and Running
- Building Event-Driven Microservices
- Grokking Relational Database Design
- Code
- UNIX Network Programming
- The Design of the UNIX Operation System
- Internet Core Protocols
- Learning HTTP/2
- WebSocket
- High-Performance Browser Networking
- HTTP: The Definitive Guide
- Cloud Native DevOps w/ Kubernetes
- Production Kubernetes
- Core Kubernetes
- Kubernetes Best Practices
- Hacking Kubernetes
- Certified Kubernetes Administrator (CKA) Study Guide
110
Nathan Douglas @tenesm.us · 02/09/2026
No, I haven't read TAOCP, but I've started it twice... I'll get through it someday.
- Introduction to Algorithms
- The Art of Computer Programming parts 1, 2, 3, 4A, 4B
- The Algorithm Design Manual
- Advanced Algorithms and Data Structures
- Algorithms + Data Structures = Programs
- Calculus: Early Transcendentals
- Concrete Mathematics
- The Annotated Turing
- How to Solve It
- How to Prove It
- Structure and Interpretation of Computer Programs
- How to Design Programs
- Cracking the Coing Interview
- Hacking the System Design Interview
- System Design Interview
- Crafting Interpreters
- The Ray Tracer Challenge
110
Nathan Douglas @tenesm.us · 02/09/2026
artificial life, game design, Lisp, French novels, and the Elan school
- The Federalist Papers
- Zero to Production in Rust
- Command-Line rust
- Artificial Life
- Artificial Life I (Conference Proceedings), followed by II-VII
- Growing Artificial Societies
- A New Kind of Science
- The Little Schemer
- The Seasoned Schemer
- The Little Learner
- The Litltle Prover
- The Reasoned Schemer
- The Little Typer
- Code the Classics, Vol. I and II
- 1984, Frankenstein, Animal Farm, A Game of Thrones (French)
- The Lost Continent
- Elan vs. Joe
- Joe vs. Joe
- Joe vs. Elan

- The Game Design Reader
- Designing Games
- The Art of Game Design
- A Theory of Fun for Game Design
- Video Game Level Design
- An Architectural Approach to Level Design
- Level Up!
- Challenges for Game Designers
- Game Feel
- Advanced Game Design
- Introduction to Game Systems Design
- Level Design
- Situational Game Design
- Pattern Language for Game Design
- Procedural Storytelling in Game Design
- An Elegant Puzzle
- Staff Engineer
- Thinking in Systems
- Learning Systems Thinking
- Hacker's Delight
- In a Sunburned Country
- The Spy Who Came in From the Cold
- A Delicate Truth
- The Complete Book of Five Rings
- The History of the Peloponessian War
- The Official Explanation
- Making Sense of the Organization
- Building Evolutionary Architectures
- Moral Mazes
- Programming Pearls
130
Nathan Douglas @tenesm.us · 02/09/2026
my wife (librarian) hates my lack of organization, and so do I the spirit and flesh are both unwilling
- Things That Make Us Smart
- Music, the Brain, and Ecstasy
- Empire of Pain
- The Disappearing Spoon
- The Skeptic's Guide to the Universe
- How to Invent Everything
- The Skeptic's Guide to the Future
- The 48 Laws of Power
- The 36 Strategies of War
- The Laws of Human Nature
- The Art of Seduction
- The Art of Manliness
- The Sixth Extinction
- Emily Posts' Etiquette
- Modern Etiquette Made Easy
- The Moscow Puzzles
- Catch-22
- The Neverending Story
- The Martian
- Novels and Other Writings (Nathanael West)
- Zero Fail
- The Bible With Sources Revealed
- Thinking, Fast and Slow
- The Dictionary of Obscure Sorrows
- Killers of the Flower Moon

- Modern Software Engineering
- The Effective Engineer
- GraphQL in Action
- Hacking APIs
- API Security in Action
- Defensive Security Handbook
- The Big Book of Python Projects
- Fluent Python
- Python Workout
- Effective Python
- Overcoming Organizational Defenses
- The Presentation of Self in Everyday Life
- Best American Short Stories of the Century
- Platform for change
- Brain of the Firm
- MUD Game Programming
- Swords and Circuitry
- Mazes for Programmers
- Game Programming Patterns
- Data Structures and Algorithms for Game Developers
- Tricks of the Game Programming Gurus
- Game Engine Architecture
- Unity in Action
- Believable Characters for Computer Games
130
Nathan Douglas @tenesm.us · 02/09/2026
ran out of alt text space so elided the French books
- The Art of War
- Foundations of Cryptography I
- Foundations of Cryptography II
- Mathematical Ideas in Biology
- Organizing for Reliability
- Warfare in Antiquity
- The Barbarian Invasions
- Medieval Warfare
- The Dawn of Modern Warfare
- Lost Battles
- The Space and Motion of Communicating Agents
- On Growth and Form
- Database Internals
- Concepts of Modern Matehmatics
- Diagnosing the System for Organizations
- French books
- Platform Engineering
- What Is Mathematics?
- Introduction to Modern Cryptography
- Self-Organization in Biological Systems
- The Evolution of Physics
- How Nature Works
- Mathematics by Experiment
- A World Appears
- Nonlinear Dynamics and Chaos
- The Death and Life of Great American Cities
- Make It Stick
- How to Read a Book
- Streaming Systems
- Introduction to Reliable and Secure Distributed Computing
- Information Theory: A Tutorial Introduction
- Beyond Clocks: Time, Causality, and State in Distributed Systems
- Love & Math
- Problem Solving Through Recreational Mathematics
- Designing Data-Intensive Applications
- An Instance of the Fingerpost
- Statistical Mechanics

- The Princeton Compation to Mathematics
- Musashi
- Making Sense of the Organization
- The Tale of Genji
- The Soul of a New Machine
- Samurai William
- The Pillow Book
- The Bureaucratic Phenomenon
- Diplomacy
- Abandoned Towns
- Abandoned Scotland
- The Logic of Failure
- Crowds and Power
- Taiko
- The Lucifer Effect
- Molecular Ramjet
- Meditations
- Midnight in the Garden of Good and Evil
- Complexity
- Chaos
- Meta Math
- Invisible Cities
- The Master and Margarita
- Meditations on First Philosophy
- The Art of War
- Next Level
- Latin Alive
- The Name of the Rose
- Grokking Algorithms
- Strategy
- When Einstein Walked With Gödel
- Foucault's Pendulum
- Stoner
- This Is How You Lose the Time War
- Oppenheimer
- Machine Learning System Design Interview
- Team Topologies
- Field Guide to Birds
- Piranesi
- Metropole
341