Mary Rose Cook's notebook

The public parts of my notebook.

My homepage.

V&A - Design/Play/Disrupt

V&A - Design/Play/Disrupt

Lauren and I went to this exhibition about games at the V&A. It was really good.


Journey

thatgamecompany prototyped the mechanics of Journey in 2D in Flash with minimal graphics. They had the capes flying behind the player, the multiplayer collaboration, and the movement. It's amazing that they were able to trust such a low-fidelity prototype.



The designers made a timeline of the whole game. It included what was happening in each layer of the game at each point. The layers: intensity, area, act, monomyth stage, life stage, growth stage, relationship stage, mood, multiplayer focus, player conscious, spiritual journey, single player moments, multiplayer mechanics, ancestor plot, guardian plot, cloth sand plot, ruins plot, cloth creature, tapestries, idiot proof messages.



The Last of Us

I'd read in Making Crash Bandicoot (fascinating, highly recommended) that Naughty Dog use a dialect of Lisp for game scripting. I guess they still use it.



An early timeline for the game. I think the narrative of the released game is substantially different.



The pink cards are locations. The square white cards are plot points. The square white cards with blue outlines might be a parallel plot line in an earlier version of the game. The larger white cards are the acts. There are also blue cards with "H" and "M" on them. I'm not sure what they are.


Splatoon

The idea comes not from the design, but from the function. The design comes after.


Satoru Iwata


Jenny Jiao Hsia

Hsia often creates paper prototypes of her games, or versions in other media (images, comics) to find what she's trying to make.


#notebook

Animal Collective, Hip Sponge

Animal Collective, Hip Sponge

The time is now, now is the time

To say, say, say, say what I mean

Eye on the prize, I got my eye on the prize


#notebook

Mary and Jacob with hands

Mary and Jacob with hands


#notebook

The Bay Area

The Bay Area













#notebook

Ares and Aphrodite, from The Odyssey

Ares and Aphrodite, from The Odyssey

Presently the bard struck up and lifted his fine voice in song. His theme was the love of Ares and Aphrodite of the beautiful diadem, how they first made love secretly in her husband Hephaestus’ palace; how Ares gave her many gifts and how he dishonoured the Lord Hephaestus’ marriage-bed. But the Sun (270) had witnessed their loving embraces and came to inform Hephaestus, who, when he heard the bitter truth, went straight to his workshop with his heart full of evil plans, laid his great anvil on the block and forged a network of chains which could neither be broken nor undone, to bind them there. His fury with Ares inspired him as he worked, and when the snare was finished he went to the room where his marriage-bed stood and threw the netting right round the legs. A number of further lengths were attached to the rafter overhead and hung down like fine spiders’ webs, quite invisible even to the blessed gods. It was a masterpiece of cunning work.


When he had surrounded the bed in this way and set his trap, he made a pretence of leaving for the pleasant town of Lemnos, his favourite place on earth. Meanwhile Ares of the Golden Reins had not kept watch for nothing. Directly he saw Hephaestus, the illustrious Master-craftsman, leave, he made his way to his house, filled with a passionate desire for Aphrodite of the lovely diadem. She had recently returned from seeing her (290) mighty Father, Zeus, and had just sat down when Ares came in at the door, clasped

her hand and greeted her fondly.


‘Come, my beloved,’ he said, ‘let us go to bed and find pleasure in love, for

Hephaestus is no longer around. He has gone to somewhere in Lemnos, to visit his barbarous Sintian friends.’ Aphrodite desired nothing better than to sleep with him; so the two went to bed and lay down. Immediately the netting which Hephaestus’ ingenuity had contrived fell around them in such a way that they could not move or lift a limb. They found too late (300) that there was no escape. And now the great lame god himself approached. For the Sun, acting as his spy, had given him word; and he hurried home in anguish. Standing there in the entrance, in the grip of fierce anger, he let out a terrible yell and called aloud to all the gods.


‘Father Zeus and you other blessed gods who live for ever, come here and see a comic and cruel thing. Zeus’ Daughter Aphrodite has always despised me for my lameness, and now she has given her heart to this butcher Ares just because he is (310) good-looking and sound of limb, while I was born a weakling. And whom have I to blame for that, if not my father and my mother? I wish they had never begotten me! But see where these two have crept into my bed and are sleeping in each other’s loving arms. The sight is like a sword in my heart. Yet I have an idea that they won’t be eager to prolong that embrace, no, not for a moment, not for all their love. Theirs is a sleep that both will soon be tired of. But my cunning meshes are going to keep them just where they are, till her Father hands me back every one of the gifts I made him to win this brazen bitch, who may (320) be his daughter and a lovely creature but is the slave of her

passions.’


At his words the gods came thronging to the house with the bronze floor. Up came Poseidon the Sustainer of the Earth; Hermes, the Swift Runner; and Apollo, Lord of the Bow; but the goddesses, out of modesty, all stayed at home. So there they stood in front of the doors, the immortals who are the source of all our blessings; and when they caught sight of Hephaestus’ clever device a fit of unquenchable laughter seized the blessed gods.


‘Bad deeds don’t prosper,’ said one of them with a glance at his neighbour; ‘the tortoise catches up the hare. See how our (330) slow-moving Hephaestus has caught Ares, though no god on Olympus can run as fast. Hephaestus may be lame, but he has won the day by his cunning. And now Ares will have to pay him an adulterer’s fine.’


This was the kind of comment made. The Lord Apollo, Son of Zeus, turned to Hermes and said: ‘Hermes, Son of Zeus, Guide and Giver of good things, would you care, though tied down by those unyielding chains, to lie in bed by golden Aphrodite’s side?’


To which the Guide, the Giant-slayer replied: ‘Lord Apollo, royal Archer, I only wish I could. Though the chains that kept (340) me prisoner were three times as many, and though all you gods and all the goddesses were looking on, yet would I gladly sleep by golden Aphrodite’s side.’


At his words laughter arose among the immortal gods. But Poseidon did not laugh; he kept begging the great craftsman Hephaestus to free Ares from the net. ‘Let him go,’ he said, and his words flew, ‘and I promise you that he shall make full and proper atonement, as required by you, in the presence of the immortal gods.’


‘Poseidon, Girdler of the Earth,’ replied the illustrious lame (350) god, ‘do not press me. Pledges for the worthless are worthless. How could I throw you, in chains while the immortal gods looked on if Ares were to wriggle out of his debt as well as out of his chains?’


‘Hephaestus,’ said Poseidon the Earthshaker, ‘if Ares does repudiate his debt and abscond, I myself will pay you the fine.’


‘To such an offer from you,’ replied the great lame god, ‘I cannot and I must not answer no.’


With that the mighty Hephaestus undid the chains, and the (360) two of them, freed from the shackles that had proved so strong, leaped up and fled, Ares to Thrace, and laughter-loving Aphrodite to Paphos in Cyprus, where she has her sacred sanctuary and altar fragrant with incense. There the Graces bathed her and anointed her with the celestial oil that is like a bloom on the limbs of the immortal gods. And they dressed her in lovely clothes that were a marvel to behold.


This was the song that the famous minstrel sang, to the delight of Odysseus and the rest of his audience, the Phaeacians, those famous and intrepid mariners.


#notebook

What's worked in CS

What's worked in CS

http://danluu.com/butler-lampson-1999/


#notebook

Run Mac OS 6 in the browser

Run Mac OS 6 in the browser

https://archive.org/details/mac_MacOS_6.0.8


#notebook

Aged 3

Aged 3


#notebook

Me holding Will's daughter, and him holding my son

Me holding Will's daughter, and him holding my son


#notebook

First Reformed

First Reformed

I saw this with my Dad. It was very good.



#notebook

Designing Into the Breach was a UI problem

Designing Into the Breach was a UI problem

Into the Breach is a turn-based strategy game. Two of the four years' of development were spent on designing the UI.



This UI makes the game feel like a rich, 3D object that you can interact with. Three examples.


One. Almost every control and display of information can be moused over to show an explanatory panel. These panels give detail, but are still clear. To increase clarity, they often include animations.



Two. When considering whether to make a certain unit do a certain attack, the effect that will result is shown in full: on the target tile, with the target unit and its surroundings.



Three. When the player selects a level, they can mouse over for a brief summary of the level, click to see the level, then click again to confirm their choice. This helps the player cope with lots of information. They start with a summary, dive into a more detailed view, then make their choice and see the result.



The production values are extremely high. All those animations in the info panels. The way that, when the player chooses a level by clicking on the preview, the miniature in the preview zooms to become the actual level.


The developers decided that they wanted to show what every enemy was doing on every turn. The rules of a game can be seen in a hierarchy: axioms at the bottom. Corollaries that follow from those axioms one level up. Corollaries that follow from those above that. And so on.


The designers seem to be trying to make both the axioms and the first level of corollaries clear. The player can take this action - an axiom. When the player takes that action, this will happen - a corollary. It would be possible for the UI to show the player absolutely everything. This would amount to the UI telling the player what sequence of actions to take to reach the optimal win. But that would be no fun. The designers avoid confusion about the rules, permitting fun in the discovery of strategies.


The developers often eschewed depth or interesting mechanics in order to retain clarity. If a mechanic was hard to explain, or hard to depict, they dropped it.


Source: https://www.rockpapershotgun.com/2018/03/05/into-the-breach-interface-design/


#notebook

The Annunciation, with Saint Emidius, Crivelli

The Annunciation, with Saint Emidius, Crivelli


#notebook

Agony in the Garden, Giovanni Bellini

Agony in the Garden, Giovanni Bellini


#notebook

The Wind That Shakes the Barley

The Wind That Shakes the Barley


#notebook

Miami Vice

Miami Vice


I love the way Mann used digital cameras to make the movement and colours much more lifelike.


#notebook

Human universals

Human universals





#notebook

Jacob

Jacob


#notebook

Miss Bala

Miss Bala


A film about a beauty queen who gets mixed up in the Mexican drug war. Really very well directed. The film captures the sensation of the main character as a person at the a point in the world, with people and events approaching and receding. Which is rather similar what life can feel like.


#notebook

Bennet Foddy talking to Steve Gaynor about game design, cricket and draws

Bennet Foddy talking to Steve Gaynor about game design, cricket and draws

S2E10_ToneControl_BennettFoddy.mp3


[Starts at 53m 50s.]


Foddy: There had never been a good video game adaptation [of cricket]. The context of a video game is totally wrong for cricket. Cricket is about trying to concentrate for five days with no break.


Gaynor: It is? Wait, tell me more about cricket.


Foddy: When you're batting, you're there for as long as it takes. Sometimes, one batsman's out at the crease for two or three days. He has to face hundreds of deliveries and...


Gaynor: Why??


Foddy: That's the game. Because he's got a big wide bat. And because in baseball you have to run if you hit the ball in play, but in cricket you do not have to run. You just have to defend your wicket. It's not that difficult of a task to do once. But to do it five hundred times is a difficult task. But we would never play a video game that took that amount of endurance. I had an idea of how I could redesign the game, capturing some of what I liked about cricket.


Gaynor: Wait...so...one batter is there...


Foddy: There's two batsmen. They are at opposite ends. Every time you hit it you try to run to the facing end.


Gaynor: So you have two batsmen. Are they hitting the balls at the same time at each other?


Foddy: No. No, only one at a time.


Gaynor: So you're saying it can take that many days because it can take that many days for either of them to get it through the wicket once.


Foddy: No, there's ten wickets on each side. So to win the game of cricket, I have to get ten players out twice. Each time is an innings. If we can do that within five days, we win. If we run out of time, it's a draw.


Gaynor: Jesus.


Foddy: Which is very, very common.


Gaynor: So, it's the second most popular game in the world after soccer? Why do people love ties so much?


Foddy: No a draw is not the same as a tie. You can also have a tie in cricket. That's very rare.


Gaynor: Oh, come on.


Foddy: That's when you get all the people out, their innings is over and the scores are tied.


Gaynor: [Laughs.]


Foddy: This is the biggest cultural difference between European and American game designers. I had a conversation with some of the folks from Riot, and Chris Hecker who was trying to design the matchmaking system for SpyParty. Chris was like, 'The problem is...your ranking in Sniper might be really good and your ranking as Sniper might be really bad.' [Meaning: Everyone should have to play both roles an equal number of times so their skills are fairly judged.] And I said well why don't you just make it so that a match is [each person playing each role once]. And he's like, 'Well, then you could have a draw.' And I'm like, 'Fine! Let's have draws.' And Chris and the two guys from Riot immediately turned around in unison and say, 'Draws are boring.' It's just an axiom of American game design, because your sports don't allow draws. And also because of like, you know, rugged libertarianism and manifest destiny and capitalism and entrepreneurialism and empire.


#notebook

Holding my friend's daughter

Holding my friend's daughter


#notebook

Steve Jobs, The Lost Interview

Steve Jobs, The Lost Interview

Steve Jobs - The Lost Interview - YouTube


#notebook

Steve Jobs, Computerworld Information Technology Awards Program interview

Steve Jobs, Computerworld Information Technology Awards Program interview

Steve Jobs - Interview 1995 Unabridged, Full Length - YouTube


#notebook

Lobe.ai

Lobe.ai

I greatly admire Mike Matas's work.


Matas has started a new startup. A visual interface to train image-based deep learning models.


Lobe - Deep Learning Made Simple


#notebook

Finnish island

Finnish island


#notebook

Western

Western


#notebook

Spelunky: verbs and traits

Spelunky: verbs and traits

In order to learn more about emergence, I analysed the verbs and object traits in Spelunky.


Verbs

I think this gets most of them. All the verbs in the fiction (throw, jump, hit etc) are domain-specific versions of these.



Traits


#notebook

Apple ads

Apple ads


1976


1976



1977


1981


#notebook

Apple: ten different approaches

Apple: ten different approaches

Apple designers come up with 10 entirely different mock ups of any new feature. Not, Lopp said, “seven in order to make three look good”, which seems to be a fairly standard practice elsewhere. They’ll take ten, and give themselves room to design without restriction. Later they whittle that number to three, spend more months on those three and then finally end up with one strong decision.


Pixel Perfect Mockups. This, Lopp admitted, causes a huge amount of work and takes an enormous amount of time. But, he added, “it removes all ambiguity.” That might add time up front, but it removes the need to correct mistakes later on.


— Helen Walters


#notebook

Splatoon 2

Splatoon 2



#notebook

Alan Kay on high quality research funding

Alan Kay on high quality research funding

http://worrydream.com/2017-12-30-alan/


#notebook

Bret Victor podcast interview

Bret Victor podcast interview


Bret%20Victor%20podcast.mp3


#notebook

Be proud of your death count. The more you die, the more you're learning.

Be proud of your death count. The more you die, the more you're learning.


#notebook

Steve Yegge on Jeff Bezos

Steve Yegge on Jeff Bezos

Amazon War Story #1


#notebook

The slides for Kay's talk about using your less healthy desires to drive you to get better at programming

The slides for Kay's talk about using your less healthy desires to drive you to get better at programming


#notebook

L'incoronazione di Poppea, Monteverdi

L'incoronazione di Poppea, Monteverdi


#notebook

How people use their Nintendo Switches

How people use their Nintendo Switches


#notebook

Simple React patterns, Lucas Reis

Simple React patterns, Lucas Reis


Loading data cleanliness


Solo render function pattern

const PlanetView = ({ name, climate, terrain }) => (
  <div>
    <h2>{name}</h2>
    <div>Climate: {climate}</div>
    <div>Terrain: {terrain}</div>
  </div>
);



Patterns for when the model code doesn't need to be reused

Mixed component pattern



export default class Dagobah extends React.Component {
  state = { loading: true };

  componentDidMount() {
    fetch("https://swapi.co/api/planets/5")
      .then(res => res.json())
      .then(
        planet => this.setState({ loading: false, planet }),
        error => this.setState({ loading: false, error })
      );
  }

  renderLoading() {
    return <div>Loading...</div>;
  }

  renderError() {
    return <div>I'm sorry! Please try again.</div>;
  }

  renderPlanet() {
    const { name, climate, terrain } = this.state.planet;
    return (
      <div>
        <h2>{name}</h2>
        <div>Climate: {climate}</div>
        <div>Terrain: {terrain}</div>
      </div>
    );
  }

  render() {
    if (this.state.loading) {
      return this.renderLoading();
    } else if (this.state.planet) {
      return this.renderPlanet();
    } else {
      return this.renderError();
    }
  }
}



Container/view pattern


class PlanetView extends React.Component {
  renderLoading() {
    return <div>Loading...</div>;
  }

  renderError() {
    return <div>I'm sorry! Please try again.</div>;
  }

  renderPlanet() {
    const { name, climate, terrain } = this.props.planet;
    return (
      <div>
        <h2>{name}</h2>
        <div>Climate: {climate}</div>
        <div>Terrain: {terrain}</div>
      </div>
    );
  }

  render() {
    if (this.props.loading) {
      return this.renderLoading();
    } else if (this.props.planet) {
      return this.renderPlanet();
    } else {
      return this.renderError();
    }
  }
}

class DagobahContainer extends React.Component {
  state = { loading: true };

  componentDidMount() {
    fetch("https://swapi.co/api/planets/5")
      .then(res => res.json())
      .then(
        planet => this.setState({ loading: false, planet }),
        error => this.setState({ loading: false, error })
      );
  }

  render() {
    return <PlanetView {...this.state} />;
  }
}

export default DagobahContainer;



Container/branch/view pattern


const LoadingView = () => <div>Loading...</div>;

const ErrorView = () => <div>Please try again.</div>;

const PlanetView = ({ name, climate, terrain }) => (
  <div>
    <h2>{name}</h2>
    <div>Climate: {climate}</div>
    <div>Terrain: {terrain}</div>
  </div>
);

const PlanetBranch = ({ loading, planet }) => {
  if (loading) {
    return <LoadingView />;
  } else if (planet) {
    return <PlanetView {...planet} />;
  } else {
    return <ErrorView />;
  }
};

class DagobahContainer extends React.Component {
  state = { loading: true };

  componentDidMount() {
    fetch("https://swapi.co/api/planets/5")
      .then(res => res.json())
      .then(
        planet => this.setState({ loading: false, planet }),
        error => this.setState({ loading: false, error })
      );
  }

  render() {
    return <PlanetBranch {...this.state} />;
  }
}

export default DagobahContainer;



Patterns for when the view needs to be decoupled from the model


Higher order component pattern


const withDagobah = PlanetViewComponent =>
  class extends React.Component {
    state = { loading: true };

    componentDidMount() {
      fetch("https://swapi.co/api/planets/5")
        .then(res => res.json())
        .then(
          planet => this.setState({ loading: false, planet }),
          error => this.setState({ loading: false, error })
        );
    }

    render() {
      return <PlanetViewComponent {...this.state} />;
    }
  };

export default withDagobah(PlanetBranch);




const hoc = withPlanet('tatooine')(PlanetView);

Render props pattern (AKA Children as function pattern)

class Dagobah extends React.Component {
  state = { loading: true };

  componentDidMount() {
    fetch("https://swapi.co/api/planets/5")
      .then(res => res.json())
      .then(
        planet => this.setState({ loading: false, planet }),
        error => this.setState({ loading: false, error })
      );
  }

  render() {
    return this.props.render(this.state);
  }
}

export default () => (
  <Dagobah
    render={({ loading, error, planet }) => {
      if (loading) {
        return <LoadingView />;
      } else if (planet) {
        return <PlanetView {...planet} />;
      } else {
        return <ErrorView />;
      }
    }}
  />
);



Context


Provider pattern

import React from "react";
import PropTypes from "prop-types";

const contextTypes = {
  dagobah: PropTypes.shape({
    loading: PropTypes.bool,
    error: PropTypes.object,
    planet: PropTypes.shape({
      name: PropTypes.string,
      climate: PropTypes.string,
      terrain: PropTypes.string
    })
  })
};

// provider

export class DagobahProvider extends React.Component {
  state = { loading: true };

  componentDidMount() {
    fetch("https://swapi.co/api/planets/5")
      .then(res => res.json())
      .then(
        planet => this.setState({ loading: false, planet }),
        error => this.setState({ loading: false, error })
      );
  }

  static childContextTypes = contextTypes;

  getChildContext() {
    return { dagobah: this.state };
  }

  render() {
    return this.props.children;
  }
}

// higher order component

const withDagobah = PlanetViewComponent =>
  class extends React.Component {
    static contextTypes = contextTypes;

    render() {
      const { props, context } = this;
      return <PlanetViewComponent {...props} {...context.dagobah} />;
    }
  };

const DagobahPlanet = withDagobah(PlanetView);



#medianotes #notebook

The Knick, Steven Soderbergh

The Knick, Steven Soderbergh


#notebook

Why project-based learning fails, James Koppel

Why project-based learning fails, James Koppel

  1. Write the networking component of a larger system.
  2. Write test cases for a small existing program that tempts you to make classic testing mistakes.
  3. Coordinate with coach to build something, committing pseudocode. The coach deliberately misunderstands your instructions and sees if you pick them up on it.
  4. Write small project in a team where tasks are divided up extremely small. Each person writes tests for another's code. (Integrates skills of 2 and 3.)

#notebook #medianotes

Chris Hecker interview

Chris Hecker interview

DN36_Chris_Hecker.mp3


DN37_Chris_Hecker.mp3


#notebook

Peak, Anders Ericsson and Robert Pool

Peak, Anders Ericsson and Robert Pool

Review

Some excellent techniques for deliberate practice. Includes plenty of supporting for skill being born of practice, not talent. A good accompaniment to Mindset.


Naive practice


Purposeful practice


Deliberate practice


#notebook #medianotes

Principles, Ray Dalio

Principles, Ray Dalio

#notebook

The Benjamin Franklin Method of Reading Programming Books

The Benjamin Franklin Method of Reading Programming Books


About this time I met with an odd volume of the Spectator. It was the third. I had never before seen any of them. I bought it, read it over and over, and was much delighted with it. I thought the writing excellent, and wished, if possible, to imitate it. With this view I took some of the papers, and, making short hints of the sentiment in each sentence, laid them by a few days, and then, without looking at the book, try'd to compleat the papers again, by expressing each hinted sentiment at length, and as fully as it had been expressed before, in any suitable words that should come to hand. Then I compared my Spectator with the original, discovered some of my faults, and corrected them.


— Benjamin Franklin, Autobiography



#notebook

Jonathan Pie, why Trump won

Jonathan Pie, why Trump won

President Trump: How & Why... - YouTube


#notebook

Calvin and Hobbes, somehow it's always right now until it's later

Calvin and Hobbes, somehow it's always right now until it's later


#notebook

Balenciaga dress

Balenciaga dress


A dress made out of just two pieces of fabric.


#notebook

A Lesson on Elementary, Worldly Wisdom As It Relates To Investment Management & Business, Charles Munger

A Lesson on Elementary, Worldly Wisdom As It Relates To Investment Management & Business, Charles Munger

k3mgi-xcs23.pdf


Use mental models


Models

Advantages of scale



Markets that have healthy profits and markets that don't have healthy profits



Work within your circle of competence



To whom does the money saved by technology go?



Infrequent betting



The long-term view



GEICO formula



Sector rotation



Value to a private owner



Mr Market



Better businesses



Find good businesses young



The psychology of misjudgement


Overall: people have conscious motives and unconscious drivers.


Pick fights you can win



Outcome varies



Why



Elementary probability



Permutations and combinations


Compound interest


Simple algebra


Decision tree theory



Critical mass


Breakpoints (engineering)


Backup system


Cost-benefit analysis


Feedback


Munger's biases


Vocab


#notebook

Paperclips

Paperclips

#spoliers




Micro-economics


Indirection


You manage what you measure


Risk


Automation


#notebook

Playfair and Michelangelo

Playfair and Michelangelo


#notebook

Thoughts on Dynamicland

Thoughts on Dynamicland

Layers of abstraction


In Dynamicland, there seem to be three layers of abstraction.


They use the phrase “operating system” to refer to the software that runs the cameras, projectors, dynamic pages and so on. Despite being a low level, this layer seems manipulable. It is still within the system.


Above that layer is the set of programs that run on pages. These seem to be written in Lua.


Above that layer are the dynamic objects that can be manipulated using “real-world” tools: arms, hands, pens, glue and so on.


It seems likely that the higher layers will be changed more often than the lower layers.


It seems likely that, as you go up the layers, the tools become increasingly accessible to non-programmers.


The name


Is the name, Dynamicland, an oblique reference to DisneyLand?


Pretend worlds vs the real world


Ordinary creative programs like Photoshop generate a pretend world inside the computer. The user interacts with the world using only a few of their faculties: sight, hearing and limited movements.


VR also creates a pretend world inside the computer. But the user can interact with the world using a wider range of movements.


AR puts some of the real world into a pretend world.


Dynamicland is the real world. But it projects virtual worlds into the real world.


It feels like the approach of Dynamicland is to start by picking a different set of assumptions. Instead of assuming that the power of a cohesive simulation is too great to let go of, Dynamicland seems to assume that the power of our bodies in the real world is too great to let go of. Starting from that assumption, it seems to try to bring back as many simulated elements as possible.


#notebook

Index pages: home, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12