Mary Rose Cook's notebook

The public parts of my notebook.

My homepage.

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%201.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

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

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%201.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%201.mp3


DN37_Chris_Hecker%201.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%201.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

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

Books I read in 2017

Books I read in 2017

The Effective Engineer, Edmond Lau


Make sure you’re building the right thing. Prioritise your day. Reflect.


Universal Principles of Design, William Lidwell


Useful one-page primers on various design techniques.


The Secret of Childhood, Maria Montessori


The most interesting thing I got out of this was that children have a completely different frame of reference to the one you have.


Shoe Dog, Phil Knight


The autobiography of the founder of Nike. Though it had information in it, and a narrative, and I enjoyed reading it, the book left no real impression on me.


The Humane Interface, Jef Raskin


Treatise on some aspects of user interface design. The stuff on modes is fascinating. And the exploration of the Canon Cat is a wonderful view into a computing metaphor that is brilliantly designed, and mostly alien.


Understanding the Four Rules of Simple Design, Corey Haines


An exploration of design decisions made when implementing a small domain.


Smart & Gets Things Done, Joel Spolsky


Useful advice on hiring programmers.


The Lazy Teacher’s Handbook, Jim Smith


Constructivism says that learners have to actively make meaning. This book contains lots of activities and techniques that a teacher can use to push the work of learning back onto the learners.


The Perfect Thing, Steven Levy


Some interesting information about the process of designing the iPod. But mostly boring reflections on the iPod’s cultural effects.


Thinking in Systems, Donella H. Meadows


A useful primer on what systems theory is. I wanted more practical advice on thinking systemically.


Never Let Me Go, Kazuo Ishiguro


A waste of time.


99 Bottles of OOP, Katrina Owen and Sandi Metz


A fastidious and rigorous exploration of techniques for producing high-quality object-oriented code. I found it extremely useful.


A Life in Secrets, Sarah Helm


A history of some of the women spies dropped into France during WWII. I found the details of the operations much more interesting than finding out what happened to the agents.


Zero to One, Peter Thiel


Peter Thiel’s advice for startups. The stuff about avoiding monopoly markets was very interesting.


How to Read a Book, Mortimer J. Adler and Charles Van Doren


The material on inspectional reading, analytical reading and synoptical reading was useful. The other three-hundred pages of words were not.


Mindset, Carol S. Dweck


I got a lot out of this. I’d read about the growth mindset and the fixed minset before, and had taken some steps to working on my own mindset. But reading lot of examples helped me go much deeper on changing my ways of thinking.


The Stand, Stephen King


A fun story, but I didn’t find it meaningful.


Troublemakers, Leslie Berlin


A history of Silicon Valley. The central thesis, that Silicon Valley is a network that relies on previous generations of entrepreneurs helping the next, is somewhat interesting, but the book is mostly a lot of what, and not much why.


Self-knowledge, author unknown


A short book about examining your life. It has several super-useful reflective techniques.


#notebook

Rachel Whiteread, (Paperbacks)

Rachel Whiteread, (Paperbacks)


My Dad and I saw the Whiteread retrospective. I don’t think I like her art very much, but we did talk a lot about it. Which means it’s probably better than I think it is.


#notebook

SF

SF




#notebook

SF

SF




#notebook

Computer history

Computer history

It was magical to see some of my favourite computers.


The PDP-1, the machine that started hacker culture.



XEROX Alto, the computer that preceded the Macintosh.



The original Macintosh.




The NeXT Computer, the computer that ran the operating system that preceded OS X.



The Apple campus.



Bandley Drive, where the original Macintosh was designed.



The Google campus.



Palo Alto.



#notebook

On the road

On the road

LA to SF.












#notebook

LA

LA



The Norton Simon Museum



The insane array of juices at Ehrwone. I had the beetroot, grapefruit and orange one and it was incredible.



Driving around Bel Air



Venice Beach



#notebook

LA

LA



The Norton Simon Museum



The insane array of juices at Ehrwone. I had the beetroot, grapefruit and orange one and it was incredible.



Driving around Bel Air



Venice Beach



#notebook

My dad and I went to the location of the shootout after the bank robbery in Heat

My dad and I went to the location of the shootout after the bank robbery in Heat

The steps outside the bank.




The trees that Vincent Hanna runs past when he arrives late to the robbery.




The bridge that the robbers work their way towards.




Past the bridge.




#notebook

Playboy interview with Larry Page and Sergey Brin

Playboy interview with Larry Page and Sergey Brin

Playboy Interview: Google Guys


#notebook

A documentary about the making of Heat

A documentary about the making of Heat

(Gone from YouTube.)


#notebook

Playboy Interview: Steve Jobs

Playboy Interview: Steve Jobs

Playboy Interview: Steve Jobs


#notebook

Eden

Eden


A reality programme about twenty trying to live in the wilderness for a year. It’s interesting to see some of the mechanics of subsistence.


#notebook

Eden

Eden


A reality programme about twenty trying to live in the wilderness for a year. It’s interesting to see some of the mechanics of subsistence.


#notebook

Greg Fox

Greg Fox

Greg Fox – Boiler Room In Stereo - YouTube


Lauren and I saw him play at Cafe Oto yesterday.


#notebook

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