It seems like a good time for another links post.

To start with some good news, lumber prices seem to be returning to normal (compared to what I remarked on 6 months ago). Although there are rumours that other supply-chain-related shortages could persist or even worsen through the fall.

A fight between a bald eagle and a Canada goose. To follow that up with more cultured viewing, try a virtual visit to the Louvre.

Here are some very useful reference sites: an interactive atlas showing the rise and fall of countries over the past 5 millennia; thermodynamic reference tables.

A few years ago, I wrote a post about the unique (but often imitated) computer game Dwarf Fortress. Here's another article about it that I came across.

A kayaker used the intersection of the wakes of two yachts to make a dramatic wave feature to paddle in. Here's his video.

Alex Danco has written an in-depth analysis of factors holding the Canadian start-up ecosystem back:

Hopefully by now you can see this picture coming together: the difference between the Canadian startup ecosystem versus the actually-functioning one in the Bay Area isn’t an incremental difference of degree. They’re two systems running in totally contrasting modes: one runs fast, rules opportunities in, rolls valuations forward, and is optimized for infinite-game-mindset founders. The other runs slow, rules opportunities out, feels the need to “defend” valuations (thereby collapsing them to their literal milestone value) and optimizes for fixed, finite games.

He goes on to explain how well-intentioned government support squeezes the spontaneity out of the start-up scene, turning the focus away from infinite games toward measurable milestones.

I liked this post for the glimpse it offered into what industrial R&D looks like in practice. Also related on an industrial-related topic, this essay talks about the importance of the social technologies that support material production:

Every civilization rests on a core stack of social technology that coordinates and sustains its vital institutions. Social technologies—intentionally designed ways for the people in a society to operate—form the basis of the varied systems of material production and material technology that we see in every society. These social technology cores decay with time as they obsolete their own foundations, and as errors and parasitism build up.

Maybe more widespread industrial literacy would help in maintaining these social technologies. On a similar note, this article advocates for continued technological progress so that human flourishing and a healthy environment need not be in conflict.

America (and to a lesser extent other Western countries) used to have a culture that was good at building things, but now,

In the 21st century, the main question in American social life is not “how do we make that happen?” but “how do we get management to take our side?” This is a learned response, and a culture which has internalized it will not be a culture that “builds.”

The essay goes on to discuss how individuals taking initiative to get a group of like-minded others together to tackle a problem used to be very normal, but current generations are educated into seeking action from authority figures instead. Another post on a similar topic (both were in response to the same viral blog, in fact) discusses how many veto points there are in the way of getting anything done these days.

Asabiyah (عصبيّة) is a concept of social cohesion that societies need to survive. "When only those compelled by punishment or induced by payment will fight in your name the end is near."

Elite over-production is a situation where there is a large excess of people who have (or think they do) the education/training to be in charge compared to the actual number of necessary in-charge positions. I think the fierce zero-sum competition this fosters  is probably a contributing factor to rising social tension and declining institutional effectiveness.

In the face of the types of dysfunction discussed in the previous several links, you might be asking how to start a new country. Balaji Srinivasan has some suggestions:

The societal value of a clean slate is also clear. In the technology sector alone, the ability to form new companies has created literally trillions of dollars in wealth over the past few decades. Indeed, if we imagine a world where you couldn't just obtain a blank sheet of paper but had to erase an older one, where you couldn't just acquire bare land but had to knock down a standing building, where you couldn't just create a new company but had to reform an existing firm, we imagine endless conflict over scarce resources.
Our idea is to proceed cloud first, land last. Rather than starting with the physical territory, we start with the digital community.

In general, the idea of political exit (distinguished from voice) seems to be attracting growing interest. Examples include charter cities like Próspera or a modest suggestion for a fallback Hong Kong in northern Australia.

If you're trying to be a creative, original thinker sometimes you need to withdraw from the frenetic discourse on social media. Deep focus and avoiding optimizing your thoughts and writing for popularity are both very valuable.

The last set of links I'll share in this post are related to programming in Clojure. I used or referred to them when I was working on the program I wrote for this post, and on the one below.

This is an implementation I made of 1D cellular automata in Clojure:

(ns rule110)

(def rule [0 1 1 0 1 1 1 0]); *alter* this line to set the 1D cellular automata rule, in binary
(def rule-prime (vec (reverse rule))); in a more convenient order for lookup
(def pos-val (vec (reverse (take 8 (iterate #(* 2 %) 1)))))

(def rule-num (reduce + (for [x (range (count rule))] (* (rule x) (pos-val x))))); change the binary rule to base-10 by adding up the place value
(println "Rule: " rule-num)

;functions to shift a row left and right
(defn lshift [vect] 
(conj (vec (drop 1 vect)) (first vect))
(defn rshift [vect] 
(vec (reverse (lshift (reverse vect))))

(def curr-row [0 0 0 0 0 0 0 0 1]); *alter* this line to get a different starting row

(defn lookup-val [row] 
(for [i (range (count row))] (+ ((lshift row) i) (* 2 (row i)) (* 4 ((rshift row) i))))
); for each set of 3 digits, convert the binary value to base-10

(defn next-row [row rul]
(vec (map rul (lookup-val row)))
); look up the value for each position in the next row according to the rule

(for [n (range 10)]; *alter* this line to set how long the 1-dimensional cellular automata will run for
(println curr-row)
(def curr-row (next-row curr-row rule-prime)) ; calculate the next row from the current one and the rule in the convenient lookup order form

The rule is a 8-digit binary number because there are 8 possible configurations for a cell and its 2 immediate neighbours that can each be on or off; each configuration is given a 1 if the cell should be on in the next iteration or a 0 if it should be off. The rule-num function converts the binary number to base 10. The lshift and rshift functions are used to look at a cell's neighbours to the left and right. Another function, lookup-val is used to get the configuration number (out of 8) corresponding to a cell and its neighbours, which is then used in next-row to look up whether that configuration requires the cell to be on or off in the next iteration according to the rule. Finally, this is all brought toghether in a for loop (the do is there because Clojure doesn't allow multiple actions (printing one row and calculating the next in this case) to occur together otherwise).

And here is an example of running it:

user=> (load-file "rule110.clj")
Rule:  110
([0 0 0 0 0 0 0 0 1]
[0 0 0 0 0 0 0 1 1]
[0 0 0 0 0 0 1 1 1]
[0 0 0 0 0 1 1 0 1]
[0 0 0 0 1 1 1 1 1]
[0 0 0 1 1 0 0 0 1]
[0 0 1 1 1 0 0 1 1]
[0 1 1 0 1 0 1 1 1]
[1 1 1 1 1 1 1 0 1]
[0 0 0 0 0 0 1 1 1]