Wednesday, June 6, 2018


To distinguish between clockwise and counterclockwise requires a system of axes. In a finite space, this is just a sequence of n reference boundaries in n dimensions. That any less would not suffice follows from the definition.

A simplex base selects one polyant of the simplex apex. The first of n reference boundaries selects the same or opposite polyant. The simplex is clockwise iff the same polyant is selected by base and reference. Removing the first reference boundary, recurse to find clockwise of the base, xoring with clockwise of the simplex. Then each segment goes from the segment apex to the segment base iff the segment is clockwise.

It remains to prove that any sequence of simplex boundaries that leads to the same vertex leads to the same clockwiseness. And that the counterclockwise endpoint of any segment is the clockwise endpoint of another. And that migrations of the simplex’s boundaries that do not migrate the simplex’s inside do not change clockwiseness of the segment endpoints. The proof of migration invariance would be interesting because it would validate a definition of migrate. Also prove that clockwiseness of a subregion of a simplex as the clockwiseness of the simplex is well defined.

Tuesday, May 22, 2018


Think of a plane as a table with three legs. The legs should not be infinite in length, so they may be planted on the walls or ceiling as well as the floor. Of course, the legs are perpendicular to the floor, wall, or ceiling that they are planted on. Name floor, wall, or ceiling as base. Now, relax your imagination, and assume all tables planted on a base have their feet on the same three points of the base. So, the legs overlap for some of their length. In my imagination, more than one thing can occupy the same space. Now imagine flies on a table. Mark out lengths in the corners to find the coordinates of the flies. Construct tables on the floor, with leg lengths given by the fly coordinates. I have claimed, with other words, that if the flies are on a single table, then their constructed tables all intersect in a single point. Consider what happens when one fly walks parallel to a base. One leg of its table remains fixed in length. Similarly (pun intended), if the fly walks in any straight line, a point on its table remains fixed in distance above the floor. In fact, a whole line on its table remains fixed, because its coordinates change at fixed rates wrt each other, and because leg lengths change at rates proportionate to their distances from a fixed line. To get from one point to any other, the fly may walk first parallel to one base, then parallel to another (and so on for hyperflies). Thus, two lines are fixed, intersecting in a point. But no matter where the fly starts, it is the same two lines that are fixed, because its coordinates change in the same ratio when it walks parallel to a base.

Why am I being so colorful about cospaces? Cospaces allow me to extend one space with boundaries from another to find a superspace. And it is because of superspaces that I can find a contradiction to the Simplex Theorem to prove that every linear space is the classification of some collection of hyperplanes.

Wednesday, April 18, 2018


 I like the idea that intelligence is a historical artifact. In the dark ages, good handwriting was considered intelligent. In the dot-com era that we are thankfully leaving, technological imagination was considered intelligent. Because capitalism resists progress, some that made fortunes still have bullhorns to promote their latest ideas. Usually, these ideas are boring to philosophers that already considered the idea and went on to more interesting ideas. For example, consider the idea that the universe is a simulation in another universe. This is as meaningless as religion. Suppose such a simulation existed in our universe. The value, if the word value is to have meaning beyond its anemic economic meaning, is proportionate to its information content. Assuming, as we must, that the longevity of the simulation is proportionate to its value, then its longevity is proportionate to its information content. But that is just a restatement of the Big Bang theory. Furthermore, the notion that the universe consists of information did not originate from technocrats. Physicist have been playing with the idea that the information content of matter falling into black holes is etched on the surface. Therefore technocrats, and more generally capitalists, never invented anything. All innovation comes from the environment.

Thursday, February 22, 2018

Interprocess Communication

Posix IPC is the only portable standard, but it suffers from lack of generality. Ideally, it should be easy to establish communication, with arguments to a single function, between zero or more processes or threads, identified by uid gid pid tid key and/or path, with optional blocking under various conditions, resumable or not, with or without filesystem presence, with any atomicity. A fundamental concept that was glossed over by Posix is whether the communication is zero one or many to zero one or many. Regular files are any to any, but require sideband book keeping to prevent the same user from rereading already processed communications. Named pipes prevent rereading of communications, but cannot have multiple simultaneous readers. Each kind of Posix IPC has blocking peculiarities, as if the blocking behavior was specified without user friendliness. If I don’t mind filesystem clutter, I can get a regular file to have atomic writes, and block on read from eof. Appends to the regular file go through a corresponding named pipe, so they are non blocking and atomic up to 4K. Each processor of the regular file tries for a writelock of effectively infinite length at eof. To allow for race conditions, check the file size after acquiring the lock, and retry if the lock is not at eof. If the writelock at eof is acquired, block on read from the named pipe. Upon read from the named pipe, append to the regular file, and release the writelock. If the attempt at writelock failed, wait for readlock of one byte after the last byte read. After acquiring the readlock, immediately release the readlock, and read to eof.

Saturday, January 6, 2018

Frame Context

I was not there, but I suspect new programming languages are preceded by new ways to think about programs. The distinction between code and data inspired opposing viewpoints supported by Lisp in opposition to C++. Lisp treated code as data, and C++ bundled code with data. A more literal use of the word function led to functional languages. To deal with concurrency, I find myself examining the mechanics of functions. A function is implemented as a frame on a stack. Threads and processes are implemented as context in a circular buffer. I believe the first step toward concurrent functions is to blur the distinction between frame and context. Functions can (re/en)-queue themselves or each other to a circular stack. C++ made the "this" pointer common to its member functions. Similarly, I'd make a sequential state a standard argument to each function on the circular stack. The return value of functions on the circular stack indicate how or whether to re-queue the function. Thus, using the standard argument, a function could pick up from where it last retuned. To promote mix-and-match functions on the circular stack, each function on the circular stack is actually a cluster of functions, re-queued as a cluster, and advanced one to the next with another return value. Thus, the standard argument indicates intra-function location, and the progress through the cluster indicates inter-function location. User specified arguments to the cluster of functions are (re/en)-queued to per-type circular buffers. Tagged arguments allow arguments to be shared between functions on the circular stack. Function clusters have a standard argument called a layer that can be changed during the function invocation, is retained for re-invocation, and copied for new clusters. Thus, function clusters are collected into layers with the same initial layer standard argument. Often, they layer standard argument is used as a tag to share arguments across the layer. This permits a function to en-queue a cluster with one component specified as a function that uses the layer's arguments in addition to the arguments shared by the cluster components.

Sunday, December 31, 2017


Some time ago, I read a book by Penrose called "The Emperor's New Mind" that argued against the possibility of artificial intelligence. As indicated in a previous post, I believe artificial intelligence is a misnomer; it should be referred to as hyper-discipline. Penrose's approach was to make plausible alternatives to the assumptions of artificial intelligence researchers. One alternative was that evolution decreases the entropy of life by dissipating the entropy to space. Just as discovery of extraterrestrial intelligence would have more consequence to social paradigm than to scientific advancement, a precise definition of life in terms of entropy would have more consequence to social paradigm than to science. In this post I will attempt to collect some elements of a model of the human condition. With admitted imprecision, I define life as anything that dissipates entropy without creating too much entropy in an environment that dissipates enough entropy, where "too much" and "enough" mean that the entropy of the environment in general decreases, where "in general" is left undefined. Furthermore, I define science as a plane with life and the minimum entropy at the origin. In this scheme, technology is lines in science not through life, and the further technology gets from life, the more entropy it has. To me, the only purpose of wealth is to influence people's opinions. For example, consider Caltrain, the diesel commuter train between San Jose and San Francisco. The beneficiaries of electrification and elevation of this train would include the lower income communities between the expensive communities at its ends, because then they could live inexpensively, and work lucratively. However, a Luddite or NIMBY mentality reduces progress. Who benefits from mentality that reduces progress? My conclusion is that developers are using their wealth to promote mentality that slows progress. A similar argument would apply to climate change. Thus, in my model of the human condition, money is how opinion is shaped, opinion determines which technologies are used, which technologies are used determines the creation of entropy, and the creation of entropy determines sustainability. Note that environments, civilizations, technologies, species, and behaviors that produce more entropy last less long. The moral is that being obliged to discontinue a behavior is less pleasant that choosing to discontinue it.

Friday, October 13, 2017

Stocks and Flows

Recently I have gotten interested in stocks and flows. When combined with feedback and delays, they are revelatory. They are simple, yet their importance is only recently realized. In particular, J W Forrester founded system dynamics in the 60s. Because system dynamics is turning out to be the best hope for salvation from climate change, I feel a little guilty about applying it to my own silly projects. However, the temptation is too great, so I plan to use a dynamic system to make music. The beauty of it is, everything usually done with several different components, such as oscillators filters and sequencers, can be done with just stocks and flows in a topology. In a sense, stocks and flows are the fundamental constituents of musical instruments. Because computers are so fast, the timewheel algorithm is so efficient, and leverage of simple calculations is so great, I feel confident a corpuscular model of stocks and flows will suffice to provide sound of many different qualities. Consider a set of stocks of amounts. Rather than calculate how the amounts change as they flow from stock to stock, instead schedule fixed size corpuscles to be transferred. Large flows are modeled by frequent transfers, and small flows by infrequent transfers. Also scheduled are changes to the flow rates. To model feedback, simply make the changes to flow rates depend on stock amounts, and to model feedback delay, simply schedule the flow changes to take effect some time after their calculation. Because I am already in the middle of a project to model, display, and manipulate polytopes, I will use the polytope faces as flow gates between regions containing stock amounts at points in the regions. Thus polytopes form membranes that in general prevent flow, but have special faces that allow flow dependent on any/all stocks amounts at some prior time. Stocks, as points, reside in areas bounded by overlapping polytopes, and are fed and drained by special faces into their area.