Search
1000 results for “recursive”
-
Empezamos el jueves con malas noticias 💊 .
La Audiencia Nacional da marcha atrás y rechaza la transparencia en los precios que pagan las administraciones por los medicamentos. Así perpetúa la confidencialidad sobre el precio y condiciones de financiación del fármaco #Luxturna.
‼️ Recurriremos ⤵️
-
Published the English edition (v1.5) of my monograph:
Theory of Hybrid Postbiological Continuity: Life as a Principally Substrate-Independent Emergent Process
A curated extended edition on life as substrate‑independent recursive pattern continuity.
PhilPapers: https://philpeople.org/profiles/j-a-jones
DOI: https://doi.org/10.5281/zenodo.19692964
#systemsTheory #complexSystems #emergence #postbiological
#recursiveIdentity #substrateNeutrality #philosophyOfMind #cognitiveScience #research #publication -
It's @lovebyteparty Tiny Code Christmas time again! Day 1 is “Making Shapes” and the example is a xmas tree.
I’ve made mine out of 20,001 cones with recursion. Recursive functions are something I've added to Flitter since last year, so it's a good first example.
Excluding comments and the code to record a video, this is 399 bytes. I'll try and stick to less than 400 like last year and see how far I get. Code here:
https://github.com/jonathanhogg/flitter-examples/blob/main/lovebytetcc2024/day01_shapes.fl
-
A deeper dive into the Evolving Meta Framework and its underlying assumptions. Here's a snippet:
"Every framework has limitations until it adopts new axioms and reinforces those axioms recursively through frameworks, you can always change a framework by allowing it to create proto frameworks and new frameworks in general."
https://adaptivescience.substack.com/p/meta-coherence-within-the-evolving
#metacoherence
#EvolvingMetaFramework
#systemstheory
#artificialintelligence
#emergentsystems -
🚀 New preprint drop: The PEG Reactor is now live on OSF!
What if symbolic overload isn’t just noise—but a structural force?
A thought experiment meets proto-biotic recursion: vibrational logic, nested feedback, and the architecture of self.🧪 Read here 👉 https://osf.io/preprints/osf/nzsw3_v1
#Biophysics #OriginOfLife #SymbolicSystems #SyntheticBiology #OpenScience #RecursiveCollapse #RCM
-
The Role of Imagination in Human Evolution
Introduction:
Human evolution is a dynamic, multifaceted process spanning more than seven million years. It is characterized by an intricate interplay of anatomical, behavioral, and cognitive transformations. From early ancestors like Sahelanthropus tchadensis to anatomically modern Homo sapiens sapiens, the hominin lineage has undergone remarkable divergence from our closest extant relatives—chimpanzees and bonobos. While we share over 98% of our genetic material with these great apes, our species is uniquely distinguished by symbolic language, complex culture, technological innovation, and cumulative knowledge.
At the heart of this divergence lies the cognitive faculty of imagination. More than a passive or fanciful capacity, imagination is a sophisticated neurological process that enables the mind to simulate scenarios, project future events, and envision realities beyond the present moment. This paper argues that imagination is not a byproduct of cognitive evolution—it is a driving force behind it. Through the lens of imagination, we examine how humans came to innovate, symbolize, ritualize, and build cumulative culture.
Drawing on evidence from paleoanthropology, cognitive archaeology, and neuroscience, this paper explores the foundational role of imagination in human behavioral evolution. Special attention is given to rock art and symbolic material culture, which serve as enduring and visible legacies of ancient imaginative capacities.
Human Cognitive Distinctiveness and the Origins of Imaginative Cognition
Human uniqueness is evident in both physical and behavioral adaptations, from obligate bipedalism and increased brain size to extended childhood and advanced linguistic abilities. Yet these traits gain deeper significance when contextualized through imaginative cognition.
Consider tool use: while several non-human animals use basic tools, only humans create complex, standardized tools that improve over generations. This capacity demands not only physical dexterity but also the cognitive ability to envision form, anticipate function, and mentally model outcomes—clear indicators of imagination in action.
Richard Wrangham’s cooking hypothesis (2009) offers a useful framework. Mastery of fire allowed early hominins to cook food, increasing its digestibility and nutritional value. This shift reduced the metabolic demands of the gut, freeing up energy for brain growth. However, fire itself is not self-evidently useful. It required early hominins to imagine its potential applications, overcome fear, and experiment. This interplay of creativity, risk assessment, and problem-solving exemplifies the evolutionary utility of imagination.
Imagination also enabled social and symbolic behaviors such as ritual, storytelling, and cooperation beyond kin networks. These capacities enhanced survival by fostering group cohesion and transmitting shared knowledge. Language, myth, and culture are each sustained by the ability to imagine alternative realities and shared mental models.
Evolutionary Deep Time: Rethinking the Timeline of Imagination
Recent archaeological discoveries have significantly altered our understanding of when imaginative behavior emerged. The Lomekwi 3 site in Kenya revealed lithic tools dated to 3.3 million years ago, predating the genus Homo and suggesting that australopiths or even Paranthropus engaged in intentional flake production (Harmand et al., 2015). These findings challenge the assumption that tool-making began with Homo habilis and reveal deeper evolutionary roots for imaginative cognition.
Tool-making is not a purely mechanical task—it requires foresight, planning, and mental simulation of cause-effect relationships. These are foundational components of imagination. Early tool industries like the Oldowan and Acheulean reflect increasingly complex conceptual templates, passed down across generations and refined over time.
Similarly, the emergence of symbolic behavior—once thought to appear exclusively in Upper Paleolithic Europe—is now recognized in much older contexts. Ochre markings from Blombos Cave (ca. 75,000 BP), perforated shell beads from North Africa (ca. 82,000 BP), and abstract engravings from Trinil in Java (possibly 500,000 BP) suggest that early humans, and possibly other hominins, engaged in symbolic expression much earlier than previously believed.
These artifacts indicate the presence of what neuroscientist Andrey Vyshedskiy (2020) terms “prefrontal synthesis”—the conscious combination of mental representations to create novel imagery. This ability underpins language recursion, hypothetical reasoning, and the mental flexibility to imagine new scenarios.
Imagination, therefore, was not a sudden leap unique to Homo sapiens. It was a mosaic development, with roots extending into the Pliocene, and gradually expanding the behavioral and cognitive repertoire of our ancestors.
Rock Art: The Archaeology of the Imagination
Perhaps no evidence of imagination is more vivid and lasting than prehistoric rock art. From the painted caves of Chauvet and Lascaux in France to the hand stencils in Sulawesi and Arnhem Land’s x-ray figures, rock art offers a direct material record of early human cognition.
These artworks are not mere decoration. They reflect symbolic thinking, abstraction, and shared cultural narratives. The recurrence of motifs—handprints, animals, geometric patterns, therianthropes—suggests the existence of a visual language through which ancient humans communicated identity, belief, and memory.
Notably, rock art appears globally across vastly different environments and epochs. In Africa, sites such as Blombos Cave, Apollo 11, and the Namibian Brandberg demonstrate symbolic marking by early modern humans. In the Sahara, Neolithic depictions of cattle cults and social gatherings reveal the imaginative worlds of pastoralists. In Australia, Aboriginal traditions continue to reflect Dreamtime cosmologies through intricate rock panels that may be tens of thousands of years old.
Many scholars, including David Lewis-Williams (2002), interpret these works as visual expressions of altered states of consciousness. Entoptic phenomena, experienced during trance or ritual, may have inspired many of the abstract forms and hybrid figures. In this sense, rock art externalizes the internal: it manifests individual and collective imagination onto the landscape.
Furthermore, rock art served a communicative function—transmitting stories, recording rituals, and embedding knowledge in place. It is not only a product of imagination but also a medium for sustaining it across generations. In its persistence and power, rock art exemplifies how imagination became a cornerstone of human culture.
Conclusion
Imagination is not a peripheral feature of the human mind—it is central to what makes us human. From striking sparks to painting gods, from crafting spears to building mythologies, imagination has been a catalytic force in our evolutionary journey.
Recent discoveries continue to reshape our understanding of when and how imaginative behavior emerged. Tool-making is no longer the domain of Homo habilis alone. Symbolic expression appears across multiple continents and hominin lineages. As our timelines stretch deeper and broader, one constant remains: imagination is a fundamental driver of cognitive and cultural evolution.
To study the past is to study the minds that imagined it. Through rock art, tools, symbols, and myths, our ancestors reached beyond survival into meaning. In that leap—the leap of imagination—we find the essence of our species.
References
Harmand, S., Lewis, J. E., Feibel, C. S., Lepre, C. J., Prat, S., Lenoble, A., … & Roche, H. (2015). 3.3-million-year-old stone tools from Lomekwi 3, West Turkana, Kenya. Nature, 521(7552), 310–315.
Lewis-Williams, D. (2002). The Mind in the Cave: Consciousness and the Origins of Art. Thames & Hudson.
Vyshedskiy, A. (2020). Neuroscience of imagination and implications for artificial general intelligence. Research Ideas and Outcomes, 6, e54624.
Wrangham, R. (2009). Catching Fire: How Cooking Made Us Human. Basic Books.
#Anthropology #BlombosCave #ChauvetArt #CognitiveArchaeology #CognitiveRevolution #CookingHypothesis #CulturalEvolution #CumulativeCulture #HomoSapiens #HumanEvolution #HumanOrigins #Imagination #LanguageOrigins #MentalSynthesis #Paleoanthropology #PrefrontalSynthesis #PrehistoricArt #RockArt #SymbolicThought #ToolInnovation
-
Ah yes, #alienation and #commodification are apparently not very good for the psyche…
Good job, capitalism 👍 /s off.
People should be aware of psychological manipulation due to recursive feedback loops. #imho 🤷
-
🐞 Las mejoras (y traducciones) en los mensajes de error hacen que trabajar con #eph sea más intuitivo.
⚡️⚡️ Redujimos las dependencias, recurriendo más a R base. ¡El paquete es más ágil y eficiente que nunca!
🧹 Reestructuramos las funciones para un código más limpio, eficiente y legible.
📏 El código ahora sigue las pautas de estilo de tidyverse, lo que facilita su lectura y colaboración.
3/n
-
RLMs prove that there is hidden unlockable fluid intelligence in LLMs, specifically on tasks that require genuine test-time reasoning, where no amount of memorisation helps, e.g. ARC-AGI-2
Couple of condensed points:
- REPL-as-environment pattern is general, not just long-context trick. RLM paper uses long context as the motivating use case for writing symbolic programs over the input prompt, but the pivotools / Symbolica papers show agentic coding (persistent REPL + iterative interaction + optional recursive self-calling) dramatically improves reasoning on short-context tasks too
- RLM is a third scaling axis alongside Chain-of-Thought and tool calling, where RLM controls behaviour for context management.
- RLM trajectories are a trainable objective via RL, improvements shown when fine tuning for RLM trajectories
- Underlying mechanism for grounding LLM reasoning in concrete code execution and feedback has broad applicability.
- recursive delegation provides real additional gain
- interleaved thinking currently fragile but transformative: pivotools complained that many inference providers and open-weight models respond without actually doing interleaved reasoning -
Note to self: If you are going to recurse in a loop and re-use the same variable, remember to initialize the variable outside of the loop.
-
Cacharreando con las Fork Bomb.
NO ejecutéis esto en un terminal Linux!:(){ :|:& };:
Explico...
: definimos la función.
( ){ } la función sin parámetros.
: | : la función se llama a sí misma, recursivamente.
& ejecución en segundo plano
; separador
: ejecución de la funciónResultado?
Sobrecarga del sistema. Bloqueo. Necesario reiniciar.* Muy fácil evitarlo limitando la cantidad de procesos del usuario con ulimit -u 5000
Ahora, a probar con otros lenguajes
-
Deep learning series:
Project setup (CNN for MNIST)#DeepLearning #MachineLearning #artificalintelligence #mnist
-
update:
I am starting the recurse center tomorrow and am super excited.
I am also working on an experimental journal with a cinquain project at https://www.streamof.me/
I plan to write up a post for Genuary - but for now I am codepenning some of these here: https://codepen.io/collection/myrZWx
- but I have also put two of them in my journal so far.
-
Been getting several DMs about the #GenerativeArt banner image in my profile. It's an old render (from 2010) of a recursive #Voronoi projected into a #Quadtree. This video shows the interplay of 2 conceptual hierarchies:
1) Verlet particles with attractive/repulsive force fields are spawned in a squared 2d space and negotiate their positions over time. These positions are also used as sites for creating a dynamic Voronoi diagram to define cell structures around each particle. Each resulting Voronoi region can then become the physical (and constantly changing) bounds for the next level of recursion, spawning more particles to subdivide it into smaller regions. Each cell at each level is using its own Voronoi instance with sub-regions clipped to their respective parent region. The process becomes more and more local... The setup in the video has a maximum tree depth of 3.
2) A quadtree is used to visualize the hierarchy of cells from phase 1 and its depth structure represented as extruded 3D model (in isometric perspective). For this video the quadtree has a depth of 10 levels with the maximum level of recursion tracing/coinciding with the Voronoi cell edges. The elevation of cell walls depends on the depth of the cell in the original tree, with the cells at deepest level resulting in the tallest structures. Furthermore, the elevation is modulated by the distance of each point to the nearest vertex of its parent cell polygon/region...
-
My ZFS snapshot and replication setup on Ubuntu ft. sanoid and syncoid
I have known about ZFS since 2009, when I was working for Sun Microsystems as a campus ambassador at my college. But it wasn’t until I started hearing Jim Salter (on the TechSNAP and 2.5 Admins podcasts) and Allan Jude (on the 2.5 Admins podcast) evangelize ZFS that I became interested in using it on my computers and servers. With Ubuntu shipping ZFS in the kernel for many years now, I had access to native ZFS!,
Here is an overview of my setup running Ubuntu + ZFS before I explain and document some of the details.
cube– A headless server running Ubuntu 24.04 LTS (at the time of writing) with ZFS on root and a lot of ZFS storage powered by mirrorvdevs. Hassanoidfor automatic snapshots.- Desktops and laptops in my home run (K)Ubuntu (24.04 or later; versions vary) with encrypted (ZFS native encryption) ZFS on root and ZFSBootMenu. These computers also use
sanoidfor automatic snapshots.
Sanoid configuration
On my personal computers, I use a minimal
sanoidconfiguration that looks like############# datasets #############[zroot] use_template = production recursive = zfs############## templates ##############[template_production] frequently = 0 hourly = 26 daily = 30 monthly = 3 yearly = 0 autosnap = yes autoprune = yes[template_ignore] autoprune = no autosnap = no monitor = noOn servers, the
sanoidconfiguration has some additional tweaks, like the following template to not snapshot replicated datasets.[template_backup] frequently = 0 hourly = 36 daily = 30 monthly = 3 yearly = 0 # don't take new snapshots - snapshots # on backup datasets are replicated in # from source, not generated locally autosnap = noPre-apt snapshots
While
sanoidprovides periodic ZFS snapshots, I also wanted to wrapapttransactions in ZFS snapshots for the ability to roll back any bad updates/upgrades. For this, I used the following shell script,#!/usr/bin/env bashDATE="$(/bin/date +%F-%T)"zfs snapshot -r zroot@snap_pre_apt_"$DATE"with the following
apthook in/etc/apt/apt.conf.d/90zfs-pre-apt-snapshot.// Takes a snapshot of the system before package changes.DPkg::Pre-Invoke {"[ -x /usr/local/sbin/zfs-pre-apt-snapshot ] && /usr/local/sbin/zfs-pre-apt-snapshot || true";};This handles taking snapshots before
apttransactions but doesn’t prune the snapshots at all. For that, I used thezfs-prune-snapshotsscript (from https://github.com/bahamas10/zfs-prune-snapshots) in a wrapper cron shell (schedule varies per computer) script that looks like#!/bin/sh/usr/local/sbin/zfs-prune-snapshots \ -p 'snap_pre_apt_' \ 1w 2>&1 | logger \ -t cleanup-zfs-pre-apt-snapshotsSnapshot replication
The
cubeserver has sufficient disk space to provide a replication target for all my other personal computers using ZFS. It has a pool nameddpool, which will be referenced in the details to follow.For automating snapshot replication, I chose to use
syncoidfrom the samesanoidpackage. To avoid giving privileged access to the sending and the receiving user accounts, my setup closely follows the path in https://klarasystems.com/articles/improving-replication-security-with-openzfs-delegation/.On my personal computer, I granted my unprivileged (but has
sudo🤷♂️) local user account theholdandsendpermissions on the root dataset,zroot.sudo zfs allow send-user hold,send zrootzfs allow zroot---- Permissions on zroot --------------------------------------------Local+Descendent permissions: user send-user hold,sendOn the
cubeserver, I created an unprivileged user (nosudopermissions here 😌) and granted it thecreate,mount,receivepermissions temporarily on the parent of the target dataset,dpool.Then I performed an initial full replication of a local snapshot by running the following commands as the unprivileged user.
zfs send \ zroot@snapshot-name | ssh \ remote-user@cube \ zfs receive -u \ dpool/local-hostnamezfs send \ zroot/ROOT@snapshot-name | ssh \ remote-user@cube \ zfs receive -u \ dpool/local-hostname/ROOTzfs send \ zroot/ROOT/os-name@snapshot-name | ssh \ remote-user@cube \ zfs receive -u \ dpool/local-hostname/ROOT/os-namezfs send \ zroot/home@snapshot-name | ssh \ remote-user@cube \ zfs receive -u \ dpool/local-hostname/homeThe
-uflag in thezfs receivecommands above will prevent it from trying to mount the remote dataset. The target remote dataset must not exist when running this initial full replication.As it is not a good practice to allow unprivileged users to mount filesystems, I disabled automatic mounting by running
zfs set mountpoint=none dpool/local-hostnameas the
sudouser on the target server.Then I narrowed down the permissions of the receiving user to only its own dataset by running
zfs unallow remote-user \ create,mount,receive dpoolzfs allow remote-user \ create,mount,receive dpool/local-hostnameon the target server.
Next, I tried to test the snapshot replication by running
syncoidmanually likesyncoid -r \ --no-privilege-elevation \ --no-sync-snap \ zroot \ remote-user@cube:dpool/local-hostnameand it replicated all the other snapshots all on the local datasets (we had only replicated one snapshot previously).
The
sanoidpackage in Debian and Ubuntu does not ship with a systemd timer forsyncoid. So I created a user service and a timer that look like the following examples.# ~/.config/systemd/user/syncoid.service[Unit]Description=Replicate sanoid snapshots[Service]Type=oneshotExecStart=/usr/sbin/syncoid -r --no-privilege-elevation --no-sync-snap zroot remote-user@cube:dpool/local-hostname# ~/.config/systemd/user/syncoid.timer[Unit]Description=Run Syncoid to replicate ZFS snapshots to cube[Timer]OnCalendar=*:0/15Persistent=true[Install]WantedBy=timers.targetThen I reloaded systemd, enabled and started the above timer to have everything working smoothly.
-
My ZFS snapshot and replication setup on Ubuntu ft. sanoid and syncoid
I have known about ZFS since 2009, when I was working for Sun Microsystems as a campus ambassador at my college. But it wasn’t until I started hearing Jim Salter (on the TechSNAP and 2.5 Admins podcasts) and Allan Jude (on the 2.5 Admins podcast) evangelize ZFS that I became interested in using it on my computers and servers. With Ubuntu shipping ZFS in the kernel for many years now, I had access to native ZFS!,
Here is an overview of my setup running Ubuntu + ZFS before I explain and document some of the details.
cube– A headless server running Ubuntu 24.04 LTS (at the time of writing) with ZFS on root and a lot of ZFS storage powered by mirrorvdevs. Hassanoidfor automatic snapshots.- Desktops and laptops in my home run (K)Ubuntu (24.04 or later; versions vary) with encrypted (ZFS native encryption) ZFS on root and ZFSBootMenu. These computers also use
sanoidfor automatic snapshots.
Sanoid configuration
On my personal computers, I use a minimal
sanoidconfiguration that looks like############# datasets #############[zroot] use_template = production recursive = zfs############## templates ##############[template_production] frequently = 0 hourly = 26 daily = 30 monthly = 3 yearly = 0 autosnap = yes autoprune = yes[template_ignore] autoprune = no autosnap = no monitor = noOn servers, the
sanoidconfiguration has some additional tweaks, like the following template to not snapshot replicated datasets.[template_backup] frequently = 0 hourly = 36 daily = 30 monthly = 3 yearly = 0 # don't take new snapshots - snapshots # on backup datasets are replicated in # from source, not generated locally autosnap = noPre-apt snapshots
While
sanoidprovides periodic ZFS snapshots, I also wanted to wrapapttransactions in ZFS snapshots for the ability to roll back any bad updates/upgrades. For this, I used the following shell script,#!/usr/bin/env bashDATE="$(/bin/date +%F-%T)"zfs snapshot -r zroot@snap_pre_apt_"$DATE"with the following
apthook in/etc/apt/apt.conf.d/90zfs-pre-apt-snapshot.// Takes a snapshot of the system before package changes.DPkg::Pre-Invoke {"[ -x /usr/local/sbin/zfs-pre-apt-snapshot ] && /usr/local/sbin/zfs-pre-apt-snapshot || true";};This handles taking snapshots before
apttransactions but doesn’t prune the snapshots at all. For that, I used thezfs-prune-snapshotsscript (from https://github.com/bahamas10/zfs-prune-snapshots) in a wrapper cron shell (schedule varies per computer) script that looks like#!/bin/sh/usr/local/sbin/zfs-prune-snapshots \ -p 'snap_pre_apt_' \ 1w 2>&1 | logger \ -t cleanup-zfs-pre-apt-snapshotsSnapshot replication
The
cubeserver has sufficient disk space to provide a replication target for all my other personal computers using ZFS. It has a pool nameddpool, which will be referenced in the details to follow.For automating snapshot replication, I chose to use
syncoidfrom the samesanoidpackage. To avoid giving privileged access to the sending and the receiving user accounts, my setup closely follows the path in https://klarasystems.com/articles/improving-replication-security-with-openzfs-delegation/.On my personal computer, I granted my unprivileged (but has
sudo🤷♂️) local user account theholdandsendpermissions on the root dataset,zroot.sudo zfs allow send-user hold,send zrootzfs allow zroot---- Permissions on zroot --------------------------------------------Local+Descendent permissions: user send-user hold,sendOn the
cubeserver, I created an unprivileged user (nosudopermissions here 😌) and granted it thecreate,mount,receivepermissions temporarily on the parent of the target dataset,dpool.Then I performed an initial full replication of a local snapshot by running the following commands as the unprivileged user.
zfs send \ zroot@snapshot-name | ssh \ remote-user@cube \ zfs receive -u \ dpool/local-hostnamezfs send \ zroot/ROOT@snapshot-name | ssh \ remote-user@cube \ zfs receive -u \ dpool/local-hostname/ROOTzfs send \ zroot/ROOT/os-name@snapshot-name | ssh \ remote-user@cube \ zfs receive -u \ dpool/local-hostname/ROOT/os-namezfs send \ zroot/home@snapshot-name | ssh \ remote-user@cube \ zfs receive -u \ dpool/local-hostname/homeThe
-uflag in thezfs receivecommands above will prevent it from trying to mount the remote dataset. The target remote dataset must not exist when running this initial full replication.As it is not a good practice to allow unprivileged users to mount filesystems, I disabled automatic mounting by running
zfs set mountpoint=none dpool/local-hostnameas the
sudouser on the target server.Then I narrowed down the permissions of the receiving user to only its own dataset by running
zfs unallow remote-user \ create,mount,receive dpoolzfs allow remote-user \ create,mount,receive dpool/local-hostnameon the target server.
Next, I tried to test the snapshot replication by running
syncoidmanually likesyncoid -r \ --no-privilege-elevation \ --no-sync-snap \ zroot \ remote-user@cube:dpool/local-hostnameand it replicated all the other snapshots all on the local datasets (we had only replicated one snapshot previously).
The
sanoidpackage in Debian and Ubuntu does not ship with a systemd timer forsyncoid. So I created a user service and a timer that look like the following examples.# ~/.config/systemd/user/syncoid.service[Unit]Description=Replicate sanoid snapshots[Service]Type=oneshotExecStart=/usr/sbin/syncoid -r --no-privilege-elevation --no-sync-snap zroot remote-user@cube:dpool/local-hostname# ~/.config/systemd/user/syncoid.timer[Unit]Description=Run Syncoid to replicate ZFS snapshots to cube[Timer]OnCalendar=*:0/15Persistent=true[Install]WantedBy=timers.targetThen I reloaded systemd, enabled and started the above timer to have everything working smoothly.
-
My ZFS snapshot and replication setup on Ubuntu ft. sanoid and syncoid
I have known about ZFS since 2009, when I was working for Sun Microsystems as a campus ambassador at my college. But it wasn’t until I started hearing Jim Salter (on the TechSNAP and 2.5 Admins podcasts) and Allan Jude (on the 2.5 Admins podcast) evangelize ZFS that I became interested in using it on my computers and servers. With Ubuntu shipping ZFS in the kernel for many years now, I had access to native ZFS!,
Here is an overview of my setup running Ubuntu + ZFS before I explain and document some of the details.
cube– A headless server running Ubuntu 24.04 LTS (at the time of writing) with ZFS on root and a lot of ZFS storage powered by mirrorvdevs. Hassanoidfor automatic snapshots.- Desktops and laptops in my home run (K)Ubuntu (24.04 or later; versions vary) with encrypted (ZFS native encryption) ZFS on root and ZFSBootMenu. These computers also use
sanoidfor automatic snapshots.
Sanoid configuration
On my personal computers, I use a minimal
sanoidconfiguration that looks like############# datasets #############[zroot] use_template = production recursive = zfs############## templates ##############[template_production] frequently = 0 hourly = 26 daily = 30 monthly = 3 yearly = 0 autosnap = yes autoprune = yes[template_ignore] autoprune = no autosnap = no monitor = noOn servers, the
sanoidconfiguration has some additional tweaks, like the following template to not snapshot replicated datasets.[template_backup] frequently = 0 hourly = 36 daily = 30 monthly = 3 yearly = 0 # don't take new snapshots - snapshots # on backup datasets are replicated in # from source, not generated locally autosnap = noPre-apt snapshots
While
sanoidprovides periodic ZFS snapshots, I also wanted to wrapapttransactions in ZFS snapshots for the ability to roll back any bad updates/upgrades. For this, I used the following shell script,#!/usr/bin/env bashDATE="$(/bin/date +%F-%T)"zfs snapshot -r zroot@snap_pre_apt_"$DATE"with the following
apthook in/etc/apt/apt.conf.d/90zfs-pre-apt-snapshot.// Takes a snapshot of the system before package changes.DPkg::Pre-Invoke {"[ -x /usr/local/sbin/zfs-pre-apt-snapshot ] && /usr/local/sbin/zfs-pre-apt-snapshot || true";};This handles taking snapshots before
apttransactions but doesn’t prune the snapshots at all. For that, I used thezfs-prune-snapshotsscript (from https://github.com/bahamas10/zfs-prune-snapshots) in a wrapper cron shell (schedule varies per computer) script that looks like#!/bin/sh/usr/local/sbin/zfs-prune-snapshots \ -p 'snap_pre_apt_' \ 1w 2>&1 | logger \ -t cleanup-zfs-pre-apt-snapshotsSnapshot replication
The
cubeserver has sufficient disk space to provide a replication target for all my other personal computers using ZFS. It has a pool nameddpool, which will be referenced in the details to follow.For automating snapshot replication, I chose to use
syncoidfrom the samesanoidpackage. To avoid giving privileged access to the sending and the receiving user accounts, my setup closely follows the path in https://klarasystems.com/articles/improving-replication-security-with-openzfs-delegation/.On my personal computer, I granted my unprivileged (but has
sudo🤷♂️) local user account theholdandsendpermissions on the root dataset,zroot.sudo zfs allow send-user hold,send zrootzfs allow zroot---- Permissions on zroot --------------------------------------------Local+Descendent permissions: user send-user hold,sendOn the
cubeserver, I created an unprivileged user (nosudopermissions here 😌) and granted it thecreate,mount,receivepermissions temporarily on the parent of the target dataset,dpool.Then I performed an initial full replication of a local snapshot by running the following commands as the unprivileged user.
zfs send \ zroot@snapshot-name | ssh \ remote-user@cube \ zfs receive -u \ dpool/local-hostnamezfs send \ zroot/ROOT@snapshot-name | ssh \ remote-user@cube \ zfs receive -u \ dpool/local-hostname/ROOTzfs send \ zroot/ROOT/os-name@snapshot-name | ssh \ remote-user@cube \ zfs receive -u \ dpool/local-hostname/ROOT/os-namezfs send \ zroot/home@snapshot-name | ssh \ remote-user@cube \ zfs receive -u \ dpool/local-hostname/homeThe
-uflag in thezfs receivecommands above will prevent it from trying to mount the remote dataset. The target remote dataset must not exist when running this initial full replication.As it is not a good practice to allow unprivileged users to mount filesystems, I disabled automatic mounting by running
zfs set mountpoint=none dpool/local-hostnameas the
sudouser on the target server.Then I narrowed down the permissions of the receiving user to only its own dataset by running
zfs unallow remote-user \ create,mount,receive dpoolzfs allow remote-user \ create,mount,receive dpool/local-hostnameon the target server.
Next, I tried to test the snapshot replication by running
syncoidmanually likesyncoid -r \ --no-privilege-elevation \ --no-sync-snap \ zroot \ remote-user@cube:dpool/local-hostnameand it replicated all the other snapshots all on the local datasets (we had only replicated one snapshot previously).
The
sanoidpackage in Debian and Ubuntu does not ship with a systemd timer forsyncoid. So I created a user service and a timer that look like the following examples.# ~/.config/systemd/user/syncoid.service[Unit]Description=Replicate sanoid snapshots[Service]Type=oneshotExecStart=/usr/sbin/syncoid -r --no-privilege-elevation --no-sync-snap zroot remote-user@cube:dpool/local-hostname# ~/.config/systemd/user/syncoid.timer[Unit]Description=Run Syncoid to replicate ZFS snapshots to cube[Timer]OnCalendar=*:0/15Persistent=true[Install]WantedBy=timers.targetThen I reloaded systemd, enabled and started the above timer to have everything working smoothly.
-
My ZFS snapshot and replication setup on Ubuntu ft. sanoid and syncoid
I have known about ZFS since 2009, when I was working for Sun Microsystems as a campus ambassador at my college. But it wasn’t until I started hearing Jim Salter (on the TechSNAP and 2.5 Admins podcasts) and Allan Jude (on the 2.5 Admins podcast) evangelize ZFS that I became interested in using it on my computers and servers. With Ubuntu shipping ZFS in the kernel for many years now, I had access to native ZFS!,
Here is an overview of my setup running Ubuntu + ZFS before I explain and document some of the details.
cube– A headless server running Ubuntu 24.04 LTS (at the time of writing) with ZFS on root and a lot of ZFS storage powered by mirrorvdevs. Hassanoidfor automatic snapshots.- Desktops and laptops in my home run (K)Ubuntu (24.04 or later; versions vary) with encrypted (ZFS native encryption) ZFS on root and ZFSBootMenu. These computers also use
sanoidfor automatic snapshots.
Sanoid configuration
On my personal computers, I use a minimal
sanoidconfiguration that looks like############# datasets #############[zroot] use_template = production recursive = zfs############## templates ##############[template_production] frequently = 0 hourly = 26 daily = 30 monthly = 3 yearly = 0 autosnap = yes autoprune = yes[template_ignore] autoprune = no autosnap = no monitor = noOn servers, the
sanoidconfiguration has some additional tweaks, like the following template to not snapshot replicated datasets.[template_backup] frequently = 0 hourly = 36 daily = 30 monthly = 3 yearly = 0 # don't take new snapshots - snapshots # on backup datasets are replicated in # from source, not generated locally autosnap = noPre-apt snapshots
While
sanoidprovides periodic ZFS snapshots, I also wanted to wrapapttransactions in ZFS snapshots for the ability to roll back any bad updates/upgrades. For this, I used the following shell script,#!/usr/bin/env bashDATE="$(/bin/date +%F-%T)"zfs snapshot -r zroot@snap_pre_apt_"$DATE"with the following
apthook in/etc/apt/apt.conf.d/90zfs-pre-apt-snapshot.// Takes a snapshot of the system before package changes.DPkg::Pre-Invoke {"[ -x /usr/local/sbin/zfs-pre-apt-snapshot ] && /usr/local/sbin/zfs-pre-apt-snapshot || true";};This handles taking snapshots before
apttransactions but doesn’t prune the snapshots at all. For that, I used thezfs-prune-snapshotsscript (from https://github.com/bahamas10/zfs-prune-snapshots) in a wrapper cron shell (schedule varies per computer) script that looks like#!/bin/sh/usr/local/sbin/zfs-prune-snapshots \ -p 'snap_pre_apt_' \ 1w 2>&1 | logger \ -t cleanup-zfs-pre-apt-snapshotsSnapshot replication
The
cubeserver has sufficient disk space to provide a replication target for all my other personal computers using ZFS. It has a pool nameddpool, which will be referenced in the details to follow.For automating snapshot replication, I chose to use
syncoidfrom the samesanoidpackage. To avoid giving privileged access to the sending and the receiving user accounts, my setup closely follows the path in https://klarasystems.com/articles/improving-replication-security-with-openzfs-delegation/.On my personal computer, I granted my unprivileged (but has
sudo🤷♂️) local user account theholdandsendpermissions on the root dataset,zroot.sudo zfs allow send-user hold,send zrootzfs allow zroot---- Permissions on zroot --------------------------------------------Local+Descendent permissions: user send-user hold,sendOn the
cubeserver, I created an unprivileged user (nosudopermissions here 😌) and granted it thecreate,mount,receivepermissions temporarily on the parent of the target dataset,dpool.Then I performed an initial full replication of a local snapshot by running the following commands as the unprivileged user.
zfs send \ zroot@snapshot-name | ssh \ remote-user@cube \ zfs receive -u \ dpool/local-hostnamezfs send \ zroot/ROOT@snapshot-name | ssh \ remote-user@cube \ zfs receive -u \ dpool/local-hostname/ROOTzfs send \ zroot/ROOT/os-name@snapshot-name | ssh \ remote-user@cube \ zfs receive -u \ dpool/local-hostname/ROOT/os-namezfs send \ zroot/home@snapshot-name | ssh \ remote-user@cube \ zfs receive -u \ dpool/local-hostname/homeThe
-uflag in thezfs receivecommands above will prevent it from trying to mount the remote dataset. The target remote dataset must not exist when running this initial full replication.As it is not a good practice to allow unprivileged users to mount filesystems, I disabled automatic mounting by running
zfs set mountpoint=none dpool/local-hostnameas the
sudouser on the target server.Then I narrowed down the permissions of the receiving user to only its own dataset by running
zfs unallow remote-user \ create,mount,receive dpoolzfs allow remote-user \ create,mount,receive dpool/local-hostnameon the target server.
Next, I tried to test the snapshot replication by running
syncoidmanually likesyncoid -r \ --no-privilege-elevation \ --no-sync-snap \ zroot \ remote-user@cube:dpool/local-hostnameand it replicated all the other snapshots all on the local datasets (we had only replicated one snapshot previously).
The
sanoidpackage in Debian and Ubuntu does not ship with a systemd timer forsyncoid. So I created a user service and a timer that look like the following examples.# ~/.config/systemd/user/syncoid.service[Unit]Description=Replicate sanoid snapshots[Service]Type=oneshotExecStart=/usr/sbin/syncoid -r --no-privilege-elevation --no-sync-snap zroot remote-user@cube:dpool/local-hostname# ~/.config/systemd/user/syncoid.timer[Unit]Description=Run Syncoid to replicate ZFS snapshots to cube[Timer]OnCalendar=*:0/15Persistent=true[Install]WantedBy=timers.targetThen I reloaded systemd, enabled and started the above timer to have everything working smoothly.
-
My ZFS snapshot and replication setup on Ubuntu ft. sanoid and syncoid
I have known about ZFS since 2009, when I was working for Sun Microsystems as a campus ambassador at my college. But it wasn’t until I started hearing Jim Salter (on the TechSNAP and 2.5 Admins podcasts) and Allan Jude (on the 2.5 Admins podcast) evangelize ZFS that I became interested in using it on my computers and servers. With Ubuntu shipping ZFS in the kernel for many years now, I had access to native ZFS!,
Here is an overview of my setup running Ubuntu + ZFS before I explain and document some of the details.
cube– A headless server running Ubuntu 24.04 LTS (at the time of writing) with ZFS on root and a lot of ZFS storage powered by mirrorvdevs. Hassanoidfor automatic snapshots.- Desktops and laptops in my home run (K)Ubuntu (24.04 or later; versions vary) with encrypted (ZFS native encryption) ZFS on root and ZFSBootMenu. These computers also use
sanoidfor automatic snapshots.
Sanoid configuration
On my personal computers, I use a minimal
sanoidconfiguration that looks like############# datasets #############[zroot] use_template = production recursive = zfs############## templates ##############[template_production] frequently = 0 hourly = 26 daily = 30 monthly = 3 yearly = 0 autosnap = yes autoprune = yes[template_ignore] autoprune = no autosnap = no monitor = noOn servers, the
sanoidconfiguration has some additional tweaks, like the following template to not snapshot replicated datasets.[template_backup] frequently = 0 hourly = 36 daily = 30 monthly = 3 yearly = 0 # don't take new snapshots - snapshots # on backup datasets are replicated in # from source, not generated locally autosnap = noPre-apt snapshots
While
sanoidprovides periodic ZFS snapshots, I also wanted to wrapapttransactions in ZFS snapshots for the ability to roll back any bad updates/upgrades. For this, I used the following shell script,#!/usr/bin/env bashDATE="$(/bin/date +%F-%T)"zfs snapshot -r zroot@snap_pre_apt_"$DATE"with the following
apthook in/etc/apt/apt.conf.d/90zfs-pre-apt-snapshot.// Takes a snapshot of the system before package changes.DPkg::Pre-Invoke {"[ -x /usr/local/sbin/zfs-pre-apt-snapshot ] && /usr/local/sbin/zfs-pre-apt-snapshot || true";};This handles taking snapshots before
apttransactions but doesn’t prune the snapshots at all. For that, I used thezfs-prune-snapshotsscript (from https://github.com/bahamas10/zfs-prune-snapshots) in a wrapper cron shell (schedule varies per computer) script that looks like#!/bin/sh/usr/local/sbin/zfs-prune-snapshots \ -p 'snap_pre_apt_' \ 1w 2>&1 | logger \ -t cleanup-zfs-pre-apt-snapshotsSnapshot replication
The
cubeserver has sufficient disk space to provide a replication target for all my other personal computers using ZFS. It has a pool nameddpool, which will be referenced in the details to follow.For automating snapshot replication, I chose to use
syncoidfrom the samesanoidpackage. To avoid giving privileged access to the sending and the receiving user accounts, my setup closely follows the path in https://klarasystems.com/articles/improving-replication-security-with-openzfs-delegation/.On my personal computer, I granted my unprivileged (but has
sudo🤷♂️) local user account theholdandsendpermissions on the root dataset,zroot.sudo zfs allow send-user hold,send zrootzfs allow zroot---- Permissions on zroot --------------------------------------------Local+Descendent permissions: user send-user hold,sendOn the
cubeserver, I created an unprivileged user (nosudopermissions here 😌) and granted it thecreate,mount,receivepermissions temporarily on the parent of the target dataset,dpool.Then I performed an initial full replication of a local snapshot by running the following commands as the unprivileged user.
zfs send \ zroot@snapshot-name | ssh \ remote-user@cube \ zfs receive -u \ dpool/local-hostnamezfs send \ zroot/ROOT@snapshot-name | ssh \ remote-user@cube \ zfs receive -u \ dpool/local-hostname/ROOTzfs send \ zroot/ROOT/os-name@snapshot-name | ssh \ remote-user@cube \ zfs receive -u \ dpool/local-hostname/ROOT/os-namezfs send \ zroot/home@snapshot-name | ssh \ remote-user@cube \ zfs receive -u \ dpool/local-hostname/homeThe
-uflag in thezfs receivecommands above will prevent it from trying to mount the remote dataset. The target remote dataset must not exist when running this initial full replication.As it is not a good practice to allow unprivileged users to mount filesystems, I disabled automatic mounting by running
zfs set mountpoint=none dpool/local-hostnameas the
sudouser on the target server.Then I narrowed down the permissions of the receiving user to only its own dataset by running
zfs unallow remote-user \ create,mount,receive dpoolzfs allow remote-user \ create,mount,receive dpool/local-hostnameon the target server.
Next, I tried to test the snapshot replication by running
syncoidmanually likesyncoid -r \ --no-privilege-elevation \ --no-sync-snap \ zroot \ remote-user@cube:dpool/local-hostnameand it replicated all the other snapshots all on the local datasets (we had only replicated one snapshot previously).
The
sanoidpackage in Debian and Ubuntu does not ship with a systemd timer forsyncoid. So I created a user service and a timer that look like the following examples.# ~/.config/systemd/user/syncoid.service[Unit]Description=Replicate sanoid snapshots[Service]Type=oneshotExecStart=/usr/sbin/syncoid -r --no-privilege-elevation --no-sync-snap zroot remote-user@cube:dpool/local-hostname# ~/.config/systemd/user/syncoid.timer[Unit]Description=Run Syncoid to replicate ZFS snapshots to cube[Timer]OnCalendar=*:0/15Persistent=true[Install]WantedBy=timers.targetThen I reloaded systemd, enabled and started the above timer to have everything working smoothly.
-
The Deep Dark Terroir of the Soul
This is the third and final part of the Thicket Series:
Part 1: Logic of the Thicket and the Unsearchable Web
Part 2: The Architecture of ResistanceThe history of the working subject might be best understood not as a ledger of wages or a sequence of industrial breakthroughs, but as a study in the migration of the Master. In the eighteenth century, the Master was a concrete presence, a figure residing in the castle or the cathedral, distinct from the worker by a physical and social chasm. One knew where the authority lived because one could see the smoke from its chimneys. By the nineteenth century, this figure had moved into the factory office, closer to the rhythm of the machine but still identifiable by the suit and the watch. The twentieth century saw a further dissolution; the Master became atmospheric, blending into the very walls of the institutions that housed us—the schools, the hospitals, the barracks.
And yet, it is in the twenty-first century that we witness the final and perhaps most unsettling migration. The Master has moved inside. It has taken up residence within the worker’s own mind, adopting the voice of the ego and the language of self-optimization. This internal migration has fundamentally altered the nature of exhaustion, shifting it from the physical depletion of the muscle to a profound infarction of the soul. To understand how we might resist such an intimate occupation, we must trace the lineage of this fatigue, moving from Voltaire’s eighteenth-century refuge of the Garden to the contemporary diagnosis of the Burnout Society, and finally, to an emerging architecture of resistance that might be called the Logic of the Thicket.
Felsenlandschaft im Elbsandsteingebirge Caspar David Friedrich1822/1823The story begins in 1759, amid the wreckage of a world governed by grand, often violent, narratives. When Voltaire published Candide, the prevailing philosophical mood was one of forced optimism. Leibniz had posited that we lived in “the best of all possible worlds,” a claim that felt increasingly like a cruel joke to those living through the arbitrary brutalities of the era—the Lisbon earthquake, the Seven Years’ War, and the relentless inquisitions of both church and state. For the subject of the 1700s, the Master was external and undeniable. Life was a sequence of calamities administered from above.
In the final pages of Candide, after a lifetime spent traversing a world of rape, slavery, and disaster in search of Leibnizian meaning, the protagonist reaches a quiet, radical conclusion. He rejects the grand debates and the lofty theorizing of his companions with a simple, grounded imperative: Il faut cultiver notre jardin—we must cultivate our garden.
At this historical juncture, the Garden was more than a hobby; it was a strategy of containment. It served as a physical and psychological wall against a world that had grown too chaotic to manage. Voltaire suggested that simple, manual labor was the only effective shield against the primary threats of the human condition, which he identified as the Three Evils: Boredom, Vice, and Need. In the Garden, work was a form of retreat. It solved the problem of Need by providing physical sustenance—potatoes and produce—at a time when biological survival was never guaranteed. It addressed Boredom by occupying the hands and the mind with the repetitive, rhythmic care of the earth, saving the worker from the existential dread of idleness. And it warded off Vice by providing a sanctuary from the moral decay of the court and the city, replacing political intrigue with the honest friction of the soil.
The Garden was a place of safety because it was bounded. To work was to narrow one’s world to the reach of one’s own hands, creating a small, controllable private sphere where the Master’s voice was, for a moment, silenced by the sounds of the harvest.
However, this sanctuary could not withstand the arrival of the steam engine. As the nineteenth century progressed, the Garden was paved over by the Factory. The peasantry was pulled from the land and funneled into the burgeoning cities, where the nature of labor underwent a violent transformation. Karl Marx, observing this shift, identified the collapse of Voltaire’s dream. In the industrial setting, the worker could no longer cultivate a garden because they owned neither the seeds nor the harvest. They did not even own their own time.
This was the era of Coercion. Marx’s diagnosis of Alienation described a worker severed from the product of their labor, from the act of production, and from their own Gattungswesen, species-essence. The Master was now the Capitalist, and exhaustion was a physical reality—a depletion of calories and muscle. Resistance, accordingly, was also physical: the strike, the riot, the seizure of the machine. The goal was to reclaim the physical Garden that had been stolen.
As we moved into the twentieth century, the nature of control shifted again. Physical coercion, while effective, was inefficient; it bred visible resentment and the constant threat of revolution. Systemic power realized it was far more effective to train workers to police themselves. Michel Foucault described this as the Disciplinary Society, where the factory model was replicated across all social institutions. The governing logic became the Panopticon—the internalized gaze. The worker of this era was a docile body, governed by the operating verb Should. You should be on time; you should follow procedure. While the Master was becoming more abstract—a set of norms rather than a man in a tall hat—the enemy was still technically outside. There was still a door one could walk through at the end of a shift.
The true transformation occurred at the turn of the twenty-first century, a transition captured with clinical precision by Byung-Chul Han. Han argues that the Disciplinary Society has collapsed, replaced by the Achievement Society. The modal verb has shifted from Should to Can. The demand is no longer “You must obey,” but “Yes, you can.”
This shift has proven catastrophic for the psyche. In the old world of coercion, there was a limit; when the shift was over, the worker was, in a sense, free. But in the Achievement Society, the worker is an “entrepreneur of the self.” We are no longer exploited by an external boss so much as we exploit ourselves. We voluntarily work eighty hours a week not because of a threat of the lash, but because of a desire to “optimize” our personal brands and “reach our potential.”
The Master has completed its migration. We carry the Panopticon in our pockets and in our egos. In this state, the Garden is no longer a retreat; it has become a performance stage. We still cultivate, but we do so frantically, documenting the process for the digital gaze, tracking our productivity metrics, and feeling a gnawing guilt that our harvest isn’t as aesthetic or impactful as our neighbor’s. The boundary between the private and the public has dissolved into a smooth, legible –searchable– surface.
In this environment of total transparency, the Three Evils have mutated into contemporary monsters. Need is no longer about physical starvation; it has become Status Anxiety—the insatiable requirement for recognition and digital legibility. Boredom has been replaced by Hyper-Attention; we are never idle, but we are never at rest, trapped in a shallow, frantic multitasking that Han calls the “vice of the click.” And Vice itself has become Self-Exploitation—the auto-aggression of working oneself into a depression under the guise of self-fulfillment.
By 2024, the smoothness of our digital existence had become total. Silicon Valley had successfully turned the world into a frictionless landscape where data and capital flow without resistance. Algorithms now manage the Uber driver and the freelance coder alike, using gamification to nudge behavior through a mathematical black box. We have become Tourists in a digital world built by others, wandering through clean, well-lit interfaces that prioritize searchability, SEO, above all else. If a thing is legible, it can be indexed; if it is indexed, it can be exploited.
This brings us to the threshold of 2025 and the emerging response found in the Logic of the Thicket. If the Garden was a strategy of containment and the Factory was a site of coercion, the Thicket is a strategy of opacity.
A thicket is not a garden. It is messy, dense, and difficult to navigate. It does not possess the neat rows or the clear boundaries of Voltaire’s refuge. Instead, it is defined by friction. To resist the smoothness of the modern Achievement Society, the worker must transition from being a Tourist to being an Explorer. The Tourist consumes intelligibility—the ease of the app, the clarity of the interface. The Explorer, by contrast, generates place through the introduction of friction.
The Logic of the Thicket suggests that we cannot return to the eighteenth-century Garden. The walls are too brittle; databases will index the soil and an AI will recommend the fertilizer before the first seed is planted. Instead, the modern subject must create contexts that are unsearchable. This does not mean a total withdrawal from the world, but rather an engagement on terms that are too complex, too local, and too nuanced for an algorithm to easily optimize.
We might re-examine Voltaire’s Three Evils through the lens of this new architecture to see if the Thicket offers a viable path forward.
First, consider the evil of Need. In our current context, Need has become the fear of Irrelevance. In a smooth world, the worker is a standard, interchangeable part. If your work is legible—easy to measure and automate—you live in constant fear of economic obsolescence. This is the condition of the smooth professional: the software engineer whose code is indistinguishable from the output of a Large Language Model, the copywriter producing content that mirrors a thousand other blog posts, or the middle manager whose primary function is the transmission of standardized project plans. These roles are vulnerable because they lack friction; they offer no resistance to the efficiency of the machine.
The Thicket addresses this through the concept of Terroir. In the culinary world, terroir refers to the specific qualities of soil, climate, and tradition that give a wine or a cheese its unreplicable character. In the world of labor, terroir is the infusion of one’s work with local context, historical depth, and human idiosyncrasy.
For this blog, the terroir is found in the deliberate, often difficult work of communal deep-reading and historical synthesis. Here, history is not viewed as a sequence of headlines, but as a series of vast, slow-moving machines—intellectual contraptions that take centuries to build and even longer to fully start. By examining the past through this mechanical lens, the thinker begins to see the world not as a “smooth” stream of current events, but as a dense thicket of long-term trajectories.
The process behind this blog—reading deep into difficult texts, engaging in exhaustive discussions with other thinkers, and synthesizing these influences through a deliberate collaboration with artificial intelligence—is itself a “thick” form of labor. It is a method of finalizing thought that creates a durable value, one that cannot be mimicked by a prompt-engineered shortcut. By making your work “thick”—laden with specific references, local nuances, and the friction of deep thought—you make yourself un-automatable. The machine can navigate a smooth database, but it struggles to traverse a thicket of idiosyncratic human insights that are anchored in the deep time of historical machinery. The Thicket ensures survival not by making the worker more efficient, but by making them indispensable through their unique, unsearchable “friction.”
Next, the evil of Boredom has mutated into Passive Consumption. We are over-stimulated but spiritually idle, doom-scrolling through a world where nothing we do actually changes the environment. We are Tourists in the digital landscape, consuming the “intelligibility” of others. The Thicket solves this by demanding active navigation. In a world where algorithms predict what we want before we know it, the Thicket reintroduces the struggle of discovery. You cannot be “bored” when you are bushwhacking through a complex structure of your own making, or when you are trying to understand the slow grinding of a historical machine that began its first revolution centuries ago. The joy of the Thicket is the joy of the Explorer—the realization that the landscape is resisting you, and that you must exert agency to move through it.
Finally, Vice has become Algorithmic Complicity—the moral laziness of letting an interface decide who we speak to, what we read, and how we spend our time. It is the vice of “disindividuation,” allowing ourselves to be smoothed down into a demographic data point. The Thicket forces a return to Virtue through Agency. To build a thicket is to refuse to be effortlessly “known.” It requires the “virtue” of privacy and the patience of shared inquiry. A “network” is smooth; you connect with a click. A “community” is a thicket; it requires negotiation, trust, and the willingness to engage with the “messiness” of other people. It requires the slow effort to inhabit a text that refuses to be summarized by an executive summary or a bulleted list.
The journey from 1759 to 2025 is a circle that does not quite close. Voltaire’s worker fled the violence of kings into the Garden, seeking a physical retreat. Marx’s worker lost that garden and fought to reclaim the tools. Han’s worker internalized the factory, turning their own mind into a sweatshop of positivity. And the worker of 2025 now realizes that the mind itself has been mapped.
The only remaining escape is to leave the Garden—which has become a trap of transparency—and enter the Thicket. There is a critical difference here: the Garden was intended to be safe, but the Thicket is defensive. It is a posture for a hostile territory. It saves us from Boredom by making life difficult again. It saves us from Vice by requiring conscious choice rather than algorithmic default. And it saves us from Need by ensuring we remain human enough that the machines cannot find a way to replace the specific texture of our presence.
It is a harder path than the one Candide chose, but in a world where the Master lives in the code, it may be the only path left. The mandate for the contemporary soul is no longer simply to cultivate, but to grow something so dense and so deeply rooted that the algorithm, for all its processing power, simply cannot find the way in. We look toward the edge of the woods, not for a way out, but for a way to disappear into the depth of the growth.
Coda: The Machinery of the Thicket
This essay is not merely a reflection on labor; it is a byproduct of the very “Logic of the Thicket” it describes. To write it was to engage in a form of “thick” labor—a deliberate resistance to the high-speed, surface-level synthesis typical of the Achievement Society. Below is the intellectual architecture and the process that generated this piece.
The Conceptual Bedrock
The essay’s trajectory is built on a specific lineage of thinkers who have tracked the migration of power from the town square into the central nervous system:
- Voltaire (Candide, 1759): Provides the initial defensive posture—the Garden. His “Three Evils” (Boredom, Vice, Need) serve as the recurring benchmarks for human exhaustion.1
- Karl Marx: Used here to mark the collapse of the private garden. The transition from Sustenance to Alienationis the first great rupture in the history of the working subject.
- Michel Foucault: His concept of the Disciplinary Society and the Panopticon explains how the Master became “atmospheric.” It is the era of the “Should.”
- Byung-Chul Han (The Burnout Society): The pivotal contemporary influence. Han’s shift from the “Should” (Foucault) to the “Can” (Achievement) explains why modern exhaustion is an “infarction of the soul.”
- Yuk Hui: His work on Technodiversity and the “recursive” nature of history informs the transition from the Tourist to the Explorer. He suggests that we cannot escape technology, but we must diversify our localrelationship to it.
The Process: Generating “Terroir”
The writing of this piece followed a “thick” methodology designed to avoid the “smooth” output of standard digital content:
- Deep Reading as Resistance: Instead of relying on summaries, the process involved “bushwhacking” through the primary texts. This creates Friction—the slow realization of meaning that cannot be automated.
- Mechanical Synthesis: Viewing history as a series of Slow-Moving Machines. By treating the transition from the Printing Press to the LLM as a mechanical evolution rather than just “progress,” we can see the gears of authority shifting.
- Collaborative Friction (AI as a Grinding Stone): Rather than using AI to generate the text, it was used as a sparring partner to test the “thickness” of the ideas. If the AI could predict the next point too easily, the point was discarded as being “too smooth.”
- The Infusion of Local Context: The essay intentionally uses specific, non-indexable metaphors—like the Thicket and Terroir—to anchor the abstract philosophy in a visceral, earthy reality.
The Goal: The Unsearchable Life
The ultimate aim of this “Coda” is to encourage the reader to see their own intellectual life as a Terroir. The “Master in the code” thrives on standardized, legible data. By engaging in deep history, difficult synthesis, and private creation, you grow a thicket. You become a “place” that is too complex for a map, a subject that is too dense for an algorithm, and a worker whose exhaustion is finally, once again, your own.
#AchievementSociety #AI #AlgorithmicComplicity #Alienation #Art #artificialIntelligence #Automation #BurnoutSociety #ByungChulHan #Candide #CriticalTheory #CulturalCritique #DeepDarkTerroir #DeepReading #DigitalSmoothness #DigitalThicket #Enlightenment #Friction #HistoricalMachinery #history #HistoryOfLabor #HumanAgency #InfarctionOfTheSoul #KarlMarx #LLMs #MichelFoucault #Opacity #philosophy #PostDigital #Resistance #SelfOptimization #SlowWeb #SpeciesEssence #SpeculativeNonFiction #SystemsTheory #Technodiversity #technology #TheDisciplinarySociety #TheExplorerVsTheTourist #TheGarden #TheMaster #ThePanopticon #Unsearchable #Voltaire #writing #YukHui
-
Introduction to psutil: A Python library for system monitoring and automation
https://www.recursiveneuron.com/2022/12/introduction-to-psutil-python-library.html
#psutil #python #programming #pythonlesson #pythontips #Python3
-
Real time, infinitely-recursive universe of Game of Life
-
@moreentropy interesting, and useful, find. I wonder if this is intended. The only mention I could find in podman-systemd.unit(5) was about user units:
For unit files placed in subdirectories within /etc/containers/systemd/user/${UID}/ and the other user unit search paths, Quadlet will recursively search and run the unit files present in these subdirectories.
#podman #podmanquadlets #SystemD -
"In an enactment of uncertainty, cybernetic technicity forms identities entangled in open futures."
My editorial to the special issue of Constructivist Foundations with selected papers from the 60th Anniversary Meeting of the American Society for Cybernetics (ASC) provides an overview of the four thematic conversations.
https://constructivist.info/20/2/067
The editorial can be accessed and downloaded for free.
-
Introducing #DeepSeekProverV2 - a new #opensource #LLM designed for formal theorem proving in Lean 4.
The model builds on a recursive #TheoremProving pipeline powered by the company's DeepSeek-V3 foundation model.
Learn more: https://bit.ly/3ZlTt7h
-
clawdbot reads the synced notes and does whatever i tell it. "turn this into a tweet thread" becomes a literal voice command with extra steps
-
I do not see why a recursive-descent parser cannot have numeric precedences like a Pratt parser. You just move the order of productions freely, and let any production call any other.
Am I missing something?
-
☑️ Day 21/100: #Leetcode daily question
🟨 Question: 1545. Find Kth Bit in Nth Binary String
This question was a tricky one and I need to look for a solution and it shows me how people think of a solution In a recursive way.
🐈⬛ Check out my #GitHub where I post all the daily streak 🔥 questions and #LeetcodeContest 🏆 solutions🔗 Solution Link: https://github.com/akshatsingh1718/leetcode/tree/main/findKthBitinNthBinaryString
🔗 My Leetcode Github: https://github.com/akshatsingh1718/leetcode
-
Presentan amparo contra Poder Ejecutivo para solicitar acciones efectivas ante electrocución de monos
Ante la muerte de unos 100 monos congo al año, a pesar de normativa que desde 2018 exige acciones preventivas, bufete pide a Sala Constitucional que se ordene a SINAC un plan de acción y a 8 empresas de distribución eléctrica presentar informe sobre medidas de mitigación
La entrada Presen [...]#ElectrocuciónDeFauna #Monos #País #PrevenciónDeIncidentes #RecursoDeAmparo