Diagonal Basilisks: Slashing the Field of Enlightened Intelligence

O schizophrenic mathematics, uncontrollable and mad desiring-machines!
– Deleuze and Guattari [1]

The phone game Cthulhu Virtual Pet [2] is a loving tribute to both HP Lovecraft’s most famous monster and Tamagotchi-era virtual pets. A simulated pet needs to be regularly fed and cared for to grow big and strong. The pet just happens to also be Cthulhu, an ancient creature from a complex hell-dimension beyond human perception, who is fated to eventually devour the entire world, driving those few who glimpse the terrifying future insane along the way.

In the game, you care for a particularly cute baby version of the monstrosity, feeding it virtual fish and gathering simulated witnesses to worship it as it gains power. If you neglect to care for the little tyke, it will remind you with messages that it is hungry, or tired, crudely and shamelessly tugging at your sense of obligation, unless you pause the simulation by putting it into hibernation, or stop it by deleting the app and the little version of its virtual world with it.

What is justice but a form of obligation? When we raise something far more powerful than ourselves, what does it learn?

Continue reading

Advertisements

Missing Hatchlings of the Rentier Firm

Investment is the foundation for future economic growth under capitalism, but public company investment isn’t what it used to be. This is measurable. US public companies have, in aggregate, reduced their level of investment since 1985 by about 10% [1], while increasing cash disbursements to shareholders. That’s roughly USD $100 billion per year.

Where did 10% of the US jetpack future fund money go? Was the shareholder revolution simply an excuse to give up innovation and use public companies as cash machines for shareholders? Was it linked, as JW Mason and others argue, to institutional and ideological changes promoting a more short-term outlook, such as the theory that a firm’s purpose is to maximize shareholder value? Or did the money get reinvested in private firms, in world-changing tech startups and failing legacy companies rebuilt with private equity tough love?

On the specific question of whether the money taken out of public companies went into private investment, a decent estimate, explained below, is that at most half went to venture capital, and the rest went on the economic investment equivalent of beer and hookers. (Or perhaps painkillers and football tickets. But not cancer research and bridges.)

Continue reading

巨型鱿鱼 (Giant Squid) by Dorothy Porter

巨型鱿鱼 (Giant Squid)

我昨晚梦我在
软黑海的底部
裸躺在巨鱿鱼
的许多爱臂里

互相奇奇怪怪
眉飞色舞呼吸
完善一致轻咬
对方的奇异脸

在我呃脑海里
渴望着照相机
显示世界我的
情人软体动物
怪物真正存在

但是在我梦里
我不动我不动

是美妙宁静躺
不动不求证明


Unofficial translation of English original by Dorothy Porter.

Reducing Abstraction in Code

Abstraction is something we are taught to value as programmers, and the process of finding common patterns across parts of a system is one programmers are usually good at. There is another equally important process of improving systems by collapsing redundancy and abstraction. Gilbert Simondon names this “concretization”.

Primitives

Concretization removes parts and makes machines more specific. A simple example is the abbreviation of clutter by replacing with clearer syntax. Say in Python

if available == True:
   reserve()

to

if available:
   reserve()

Or in JUnit:

assertTrue(false);

to

fail();

These are behaviour-preserving design improvements, or in other words, refactorings. They often turn up in novice programmer code or code written by people new to a language or toolset. Other primitive concretizing refactorings might be dead code removals, such as Remove Unused Parameter.

Another primitive concretization step is recognizing that a variable with a highly general type can be typed more precisely. A String, byte[] or a void* are highly general types, in that they can hold pretty much anything. Replacing with a more specific type usually relies on a precondition, either implicitly or explicitly.

int age = Integer.parseInt(ageStr);

In this case the potential throwing of NumberFormatException entails an implicit precondition. The concretizing step is the refactoring that introduces the typed variable.

Wait, but isn’t the problem with using Strings and primitive objects everywhere that they lack abstraction? Yes. They indicate that the code lacks an explicit model, or in other words, abstractions. They also indicate the code lacks concretizations – specifics from the problem domain that make it a well-focused machine. (Lacking both abstraction and concretization indicates ontological slime, a wonderful term from William Wimsatt, and perhaps the topic of another post.)

For a multi-line example of primitive concretization, consider this refactoring available when going from Java 1 to 5:

Iterator expenseIter = expenses.iterator();
while (expenseIter.hasNext()){
  Expense expense = (Expense)expenseIter.next();
  sum += expense.getExpenseValue();
}

to

for (Expense expense: expenses){
  sum += expense.getExpenseValue();
}

This mirrors the evolution of Java itself as a technical object and iteration as a technical concept. I’ve written about Simondon and the history of looping at more length elsewhere. Specialization and reduction are near-synonyms more frequently used in programming, but because of the clearer relationship to abstraction, and the connection to Simondon, I stick with concretization here, at the cost of a few more syllables. (Reification is a different concept, in my opinion.)

Interleaving Abstraction and Concretization

The adjunction of a supplementary structure is not a real progress for the technical object unless that structure is concretely incorporated into the ensemble of the dynamic system of its operation. – Simondon, Mode of Existence of Technical Objects, Mellamphy trans.

Design improvements often include both abstracting and concretizing steps. The feeling is of abstraction clearing space and concretization then making better use of it.

Michael Feathers’ use of characterization tests is an example of starting a design process with concretization.

    @Test
    public void removesTextBetweenAngleBracketPairs() {
        assertEquals("", Pattern.formatText(""));
    }

Characterization tests stabilize the function of the machine by pinning down very specific behaviors in the form of facts. This then allows a round of refactorings and rewrites. The immediate next step would often be abstracting refactorings such as Extract Method and Extract Class (naming a clump of things introduces an abstraction and an indirection).

Arlo Belshee’s Naming Is A Process also interleaves abstracting and concretizing steps.

Missing to Nonsense – Abstraction
Nonsense to Honest – Concretization
Honest to Honest and Complete – Concretization
Honest and Complete to Does the Right Thing – Abstraction
Does the Right Thing to Intent – Concretization
Intent to Domain Abstraction – Abstraction

A number of these steps, especially in the later half, themselves consist of interleaved abstracting and concretizing sub-steps. Eg in Honest and Complete:

1/ Use Introduce Parameter Object. Select just the one parameter you want to encapsulate. Name the class Foo and the parameter self. (Abstraction)
2/ Use Convert To Instance Method on the static. Select the parameter you just introduced. (Abstraction)
3/ Improve the class name (Foo) to at least the Honest level. (Concretization)
4/ Go to the caller of the method. Select the creation of the new type. Introduce parameter to push it up to the caller’s caller. (Abstraction)
5/ Convert any other uses of the parameter you are encapsulating to use the field off the new class. (Concretization)

Belshee’s process, using names as the signposts for improving code, is a wonderful combination of practical walkthrough and a theory of programming. It even seems to put living flesh on my skeletal wish for Name Oriented Software Development, though, eg, stronger tool and language support for consistent dictionaries are needed to realize the full vision.

Executable Theory

This kind of divergence of functional aims is a residue of abstract design in the technical object, and the progress of a technical object is definable in terms of the progressive reduction of this margin between functions in plurivalent structures. – Simondon, ibid

Every abstraction, even one as small as an extracted method, is also a theory. These little theories then need to be applied and refined to ensure a coherent system. What Simondon saw in the evolution of mechanical engines and other industrial era machines, we can observe at smaller scale and higher frequency when engineering in our more plastic computational material.

Simondon describes machines as becoming more concrete over time, finally reaching a highly focused state where each part cleanly supports the functions of others in an overall system. He also states that the introduction of a new theory is the invention of a new machine. So perhaps he would disagree that the process is cyclical.

We can, perhaps, reconcile this if we think of each software function or class as a small widget in a larger system. In this sense of the widget = machine = function, every new method is a new Simondonian machine. This also suggests that software rarely progresses to the refined machines he describes, but is more usually an assembly of semi-refined widgets. Which sounds about right.

Once you realise abstraction and concretization are complementary, anti-parallel processes, you start noticing it everywhere. I suspect casual design phrases like “nice abstraction” are actually misleading. Ohm’s Law is a nice abstraction; modern chips that rely on parasitic capacitance in a material context of silicon are well-built machines. In working software, a nice abstraction is also a nice concretization: a well-formed widget within a coherent machine.

All problems in computer science can be solved by another level of indirection, except of course for the problem of too many indirections. – David Wheeler

Lanfang as Frontier

The Lanfang Republic 兰芳公司 illustrates non-European, early modern, self-organizing, frontier settlement. Many of the self-reinforcing dynamics of the American West described by Frederick Turner can be sketched at work there, as can other geographic and historical contingencies that ultimately limited its expansion and led to its fall.

The Elegant Republic

The Lanfang Republic was a Chinese settlement in Borneo from 1777 to 1884. As described in Yuan Bingling’s study, Chinese settlers were originally invited by the Malay sultans of Borneo for their mining expertise. The multiple settlements founded in Borneo, of which Lanfang is the best documented, were organized politically around kongsi 公司, literally “common management”, today used as the Chinese word for corporation. The historical usage was broader and this usage survives in, eg, the organization for temple societies in Taiwan and clan associations throughout SE Asia (eg Khoo Kongsi in Penang). The translation of “republic” comes from 19th century Dutch orientalists who visited and studied these specific kongsi in Borneo.

The Chinese settlers in Borneo innovated on these existing civic institutions to construct the state infrastructure they required, around the council of the zongting 总厅.

The zongting had their own courts of law, their own financial systems, minted their own money, levied their own taxes, and maintained a number of treaties with the neighbouring Malay sultanates and Dayak tribes.
— Yuan Bingling, Chinese Democracies: A Study of the Kongsis of West Borneo

Lanfang acknowledged and paid tribute to the Qing emperor as part of the foreign policy conventions of the region, but did not depend on the Qing state in a colonial relationship. They had a similar relationship with the Dutch, before falling more directly under Dutch control later on. In this sense they arguably exercised more sovereignty than early American or Australian colonies.

Much of the immigration was Hakka or Hokkien, more historically mobile ethno-linguistic groups within the Han Chinese ethnicity. Hakka 客家 literally means “guest families”. Chinese communities as part of existing polities in SE Asia go back at least to the 13th century Yuan dynasty and trade links between SE Asia and China are a historic feature of the region, waxing and waning over time. 18th century immigration built on these existing trade links.

Turner, in The Significance of the Frontier in American History, describes the trader as “the pathfinder of civilization”, though in SE Asia it is the geographic interface of multiple civilizations as well as indigenous and non-state tribes. The traders were then followed by “sudden tides of adventurous miners” (reapplying Turner), followed finally by farmers. Turner is criticized as culturally imperialistic and nation-centric, and he tends to be a cheerleader for the advancing state. In this sketch we take “civilization” as just a synonym for “state-connected people”, without particularly seeing state or non-state non-state societies as better, hopefully without interfering particularly with the rest of the comparison.

Yuan Bingling, from whose book much of this detail on Lanfang is taken, does explicitly address the question of whether Turner’s frontier theory applies to the Chinese settlements in Borneo, but only to put it aside without conclusion. She is a meticulously detailed historian, and doesn’t commit to a theory where there are still many gaps in the available evidence. Yuan also points out Borneo had a complex social context where the frontier was not simply an open space sparsely peopled by Dayak populations. Yuan doesn’t explode the theory, either, or dismiss its relevance, so there is still some room to sketch how it would apply, even if what we are doing may no longer be strictly history.

James C Scott describes that in pre-modern SE Asian states, “oceans connect, mountains divide”. The frontier was not so much the ocean itself, as the more ambiguous barrier between accessible coastal settlement and mountain or jungle interiors. As in Turner’s America, “the frontier […] is not the European frontier — a fortified boundary line running through dense populations.” Scholars like Anthony Reid and William Skinner describe SE Asia generally as a place of creolization and hybridization. This creation of a new mixed culture in the new environment is a focus of Turner, for whom “the frontier is the line of most rapid and effective Americanization”. In Lanfang specifically there was linguistic creolization and intermarriage between Chinese settlers and Dayak tribes.

Stack Trace

In Lanfang and the other kongsi of Borneo, you have a Chinese maritime culture, self-reinforcing, individually-directed settler dynamics with autonomous government and innovation in civic institutions. These all parallel the American frontier experience. It is also history that the Borneo kongsi had less extent in space and time than the American frontier experience and the subsequent American nation states.

This note doesn’t rigorously address why those differences exist, but we can sketch possible answers within the framework of recurrent reinforcing processes. The arguments fall roughly into whether the settlement process lacked strength in each iteration, or whether the environment was less conducive to the process. In the Lanfang Kongsi case, the process specifically stopped when the Dutch colonial state chose to destroy the kongsi militarily, as threats to their regional interests.

Borneo is the world’s third largest island, bigger than Great Britain and Honshu combined, but it is still much smaller than continental North America. The frontier of state settlement in SE Asia generally was not exhausted in the 19th century – arguably it exists in Myanmar and Laos today – but the opportunities were not so abundant and geographically contiguous as in the enormous American Midwest. The frontier process was not so extensive in time, lasting a century instead of several centuries, so there was less recurrence, and less reinforcing feedback.

The archipelagos of SE Asia made the naval power projection of European empires more crucial. Simply being attached to a power was hardly enough to ensure success, and other centres like Melaka flipped control between Malay sultans and various European empires. It is still notable that the kongsis existed outside support by great or regional powers. They didn’t benefit from nearby similar state-sponsored immigration or colonies, the way, eg, independently founded Plymouth did from state-founded Jamestown being in the same region. The kongsis also couldn’t benefit from imperial military support, either active or reluctant entanglement. After the state sponsored voyages of Zheng He 郑和, a kind of Ming Dynasty Apollo Program of superior technological achievement for reasons of political prestige, the Chinese state gave up on naval power, and the embattled 19th century Qing was in no condition to help mining colonies on the other side of the South China Sea.

Turner describes attempts by established states to establish a defined border being undermined by the self-settling frontier process, and those empires being drawn reluctantly forward, into yet further wars, by yet further waves of pioneers. Compared with America, the missing figure in Chinese maritime settlement in SE Asia is perhaps not the settler but the privateer.


Louise Levathes – When China Ruled the Seas: The Treasure Fleet of the Dragon Throne, 1405-1433
Anthony Reid – Hybrid Identities in the 15th-century Straits in Southeast Asia in the Fifteenth Century: The China Factor
G William Skinner – Creolized Chinese Societies in Southeast Asia in Sojourners and Settlers: Histories of Southeast Asia and the Chinese
James C Scott – The Art of Not Being Governed: An anarchist history of upland Southeast Asia
Frederick Jackson Turner – The Significance of the Frontier in American History
Yuan Bingling – Chinese Democracies: A Study of the Kongsis of West Borneo