RE-ENGINEERING SPACE-TIME: Programmer's Guidelines

by Ric Carter

ONGOING PROJECT

This paper has progressed beyond its skeletal structure but there's still more to do.



    Contents

  1. Analysis and Design Technologies
    HIPO (Hierarchical Input-Process-Output); Structured Approach
  2. Functional Considerations
    System Goals (outputs); Environment (inputs)
  3. Procedural Considerations
  4. Programming Considerations
  5. Some Design Suggestions



Analysis and Design Technologies

As with any major system, Space-Time and other reality-based structures are susceptible to improvement via utilization of the techniques of Top-Down Structured Analysis and Design. Proper application of these techniques will produce a reality system with fewer flaws and an easier maintenance load.

The basic techniques involved are straightforward. We'll follow standard structured analysis methodologies to implement the HIPO (Hierarchical Input-Process-Output) design model -- see the standard texts [Yourdon, DeMarco, et al] for more on this.


  1. Specify the desired Outputs of the system.
  2. Specify the available Inputs to the system.
  3. Based on the preceding, utilize structured analysis to design a Hierarchical tree of the Processes that will transform the available Inputs into the desired Outputs.

    Top-Down Analysis
  1. Define the problem in general terms.
  2. Break the problem down into more specific sub-problems or tasks.
  3. Continue the analytical process until each task is defined in the most specific terms.
    Bottom-Up Programming
  4. Design local solutions to each task.
  5. Start assembling the task solutions, testing the functions and interactions as each solution module is implemented and integrated into the system.
  6. Assemble and rigorously test the entire system

In a rigourously-structured system, only defined data is transferred between modules, and no module is privy to information that is NOT defined for it -- this is known as "data hiding". In any but the most imploded reality systems, however, such limitations are impossible, although impediments to information transmission may suffice to hide many details. Transparency of information should be taken into consideration during analysis, design and programming.

Object-oriented technologies are also appropriate here -- again, see the standard texts for details. In general, an object consists of 1) information, and 2) rules to apply to that data. Derived objects inherit their rules and data from more basic objects. As with strictly-structured systems, strict object systems implement data-hiding, with difficulties that will be discussed later.


Functional Considerations

The HIPO model is driven by 1) the desired outputs, and 2) the available inputs. The overall definition of the GOALS of the system serve to define the outputs. The reality of the ENVIRONMENT of the systems serves to define the inputs. These must be looked at very closely if a usable system is to result.

System Goals ==> outputs

Some areas requiring careful consideration when specifying the system outputs include the following:

  • You probably want a STABLE system, to reduce the need for recurrent re-engineering. (of course, unstable systems can be quite entertaining, but are usually maintenance-intensive.) Stability may be either 1) static, 2) dynamic, or 3) other. A static system has no mass-energy fluctuations, requires no maintenance, and is perfect for conservative thought. A dynamic system has a range of fluctuations, may require maintenance, and is fine for most living entities. Other systems contain random but balanced fluctuations, may require considerable maintenance, and are suitable for creative individuals and their groupies. You choose.

  • You must consider who/what is to CONTROL the system. You may 1) designate one or more deities with authority over all or parts of the universe; 2) design the universe as a computer that computes/controls itself; 3) establish independent self-running subsystems / agencies ('cultures') which may compete with each other for resources, power, whatever; 4) provide no controls other than the interactions of space-time mass-energy components — let everything bounce off everything else, hope they don't cause too much damage; 5) any or all or none of the above; 6) other; or 7) unknown.

  • You should consider the possible STRUCTURE of the system. Besides the gross, cosmetic decisions of what to place where, you have some fine details to work out: 1) consistency of relations ("natural laws") between the various constituent mass-energy space-time components; 2) number and type of space-time dimensions to be allowed; 3) number and type of mass-energy basic particles to be allowed; 4) number and type of singularities to be allowed; 5) number and type of attributes to be allowed for all components and their interactions; 6) degree of flexibility to be allowed in interactions of components; and 7) whether the system should stand still, expand, contract, cycle, mutate, warp, etc.

  • You need to think about the desired FUNCTIONS of the system. Should it shape the physical, mental, moral, spiritual lives of its inhabitants; and if so, will the bias be for good, for evil, for brilliance, for stupidity, for flair, for dullness, or what? Is the universe to be aesthetically pleasing / displeasing of its own accord, or neutral, or invisible, or what? Will the universe contend with other universes for meta-resources, and if so, what weapons / tools will be at its disposal? Will the universe be comprehensible, chaotic, maddening, soothing / lulling, devouring, nurturing, or what?

  • Be sure to consider the IMPLEMENTATION and IMPLICATIONS of the above functions, unless you're a happy-go-lucky sort of entity who lets the details take care of themselves following the rule: 1) don't sweat the petty shit; 2) it's all petty shit. You COULD consider all the above as boring, and just whip through'em as if they're performance art. You MAY even find an appreciative audience for your art. And monkeys could fly out of your butt. Hey, it's YOUR universe — why not?

Environment ==> inputs

The possible outputs of a system depend upon the resources that can be input into the system. Some possible resources available to a reality-based system include:

  • Number and types of space-time dimensions, mass-energy particles, and singularities available for use in your universe;
  • Number, attributes and consistency of relationships ("natural laws") inherent amongst the above;
  • Number, types and attributes of deities, cultures and other entities available for implantation;
  • Quantities and qualities of random factors available for application amongst all the above;
  • Whatever other garbage you can justify (to yourself) throwing into the bubbling creative stew.

Some of these inputs may be available (and constrained) by the environment of the meta-universe, the multiverse of which your universe is but a bubble in the quantum froth. Some of these inputs may be scavenged or appropriated from other universes. You may have to create some or all of these inputs yourself. Some of these inputs may be totally imaginary, but significant nonetheless. Some inputs may be generated from more basic components found in the interstices between universes and other realities. Some inputs may not be worth the trouble of obtaining, dealing with, disposing of, and accounting for. Some inputs are just plain nasty. But there are always more where they came from.



Procedural Considerations

Knowing what we want and what we have, we can start designing the system. But we first have to consider the purpose of the system and its place in reality.


IN MY HUMBLE OPINION:   A universe should be more than just the sum of its parts. It should be a living, breathing, thinking, growing entity, with deep irrational urges and higher spiritual or natural aspirations (WILD ASS PIE RATIONS). A universe should be a mix of machine and life, a vast cyborg entity composed recursively of smaller, self-similar cyborg entities, on down to the lowest basic components. A universe should have its own aesthetic justification and standards, ugly to some, delightful to others. A universe should be a fun place to work play around in, to have sex in with any quasi-sentient entities, to appreciate for its own sake. A universe should be all-encompassing, all-devouring, all-enlightening, just like all other universes. A universe should reflect the character of its designer. A universe should be phun. A universe should be phat.


That said, you'll face many challenges in deciding how to structure the functions of your universe, their paths of communication, their interfaces to the constituents and the outside meta-universe. Some of the considerations involved include:

  • Should the system be structured in a hierarchical, relational, networked, other way?
  • How many sovereign power centers should exist? How are they to be coordinated? When?
  • How can power be limited so no deity, culture or subsystem dominates the whole system?
  • Should power centers and autonomous players be encouraged to compete, cooperate, both?
  • How should contentions between players be resolved? What does fate really mean and do?
  • How complicated should rule-making and -enforcement process be? Who's involved? When?
  • How complex should conflict-initiation and -resolution processes be? With whom? Why?
  • How and where and when should positive and negative feedback be applied? To what end?


Programming Considerations

Once you have a system design in place, it's necessary to code and implement AND TEST all the solutions you've devised. For details on the latter, see the standard texts on Structured Testing methodologies. Keep in mind that the system, when implemented, should be considered to be in PERMANENT beta-testing. There is no final version.

Coding a reality-based system should be tedious, fraught with compromise, and anything but straightforward. Here are some factors you'll want to keep in mind:

  • Your code must embody the complications inherent in reality. Every procedure, every action, every behavior of every component is subject to 1) equal and opposite reactions; 2) divine review; 3) automatic enforcement; 4) biased reporting and analysis; and 5) hostile comment. Thus, every module needs to handle interrupts from each of these sources.

  • In your basic code, do NOT become immersed in cumbersome detail; and it's good to avoid that in all your other coding. Do NOT provide convoluted procedures, tortured decision trees, windfalls for subsets of entities, labyrinths of minutiae. Do NOT include clearly contradictory instructions. All these will come back to bite the ass of your universe in the future.

  • As with any competent programming job, include extensive comments in your code, clearly explaining the intent and functionality of each module. These will greatly ease the inevitable maintenance and enhancement task of future generations, as well as providing clear guidelines for those charged with executing and interpreting your code.



Some Design Suggestions

  • Include sufficient numbers of dimensions of time, space and other qualities. [Remember that a dimension is merely some vector that you can plot and account for.] Allow for easy movement in all directions on and between these dimensions. Don't get hung up on linearity. Let'em swing.

  • Include sufficient numbers of basic mass-energy particles. Allow them to join in infinite but constrained ways. Give their relationships some pleasing patterns. Don't get hung up on regularity. Let them breed unexpectedly.

  • Allow the mutation and evolution of space-time-other dimensions, mass-energy particles, and the relations between them. Don't get hung up on consistency, the hobgoblin of small minds. The more things can change, the richer and more interesting your universe will be.

  • Give your universe access to other universes and the meta-universe itself. This way it can be enriched by draining and/or exchanging resources with other space-time units. The relationships may be vampiric, symbiotic or chaotic. The results may be beautiful.

  • If possible, produce a mirror-image universe for your primary universe, so that the exact opposite of everything that occurs in your space-time unit can play itself out. Giving these universes access to each other can also be enriching.

  • Provide for multitudinous methods of procreation by living and non-living entities in your universe, with numerous genders, techniques, preferences and proclivities. The more ways your lifeforms can fock each other, the more entertaining the process will be.

  • Similarly, provide for multiple ways for entities to nourish themselves and each other. Everything is eaten, everything is an eater — and the more ways to eat and be eaten, the more complexity and richness will encompass the entirety of your universe.

(to be continued...)


Gentle Readers, if you have any suggestions or critiques, all your contributions will be welcomed and credited. Click on my address below to email me. --Ric


DRSB ! Bisbee ! Coati Works ! Elvis !!

[home] - [GO!] - [top]

OTRSS
Ric Carter, ric@sonic.net, www.sonic.net/~ric, copyright © by OTRSS