The Antipodes

Brandon Rhodes
Saturday August 3
PyCon AU 2019

anti • podes

Ancient Greek for the “anti-feet” people

Wikipedia “Antipodes” diagram (Citynoise):

481px-Antipodes_LAEA.png
How did the ancient Greeks
arrive at the concept?

How did the ancient Greeks
arrive at the concept?

Conjecture!

fisk07.jpg
599px-Twain1909.jpg
“In the space of 176 years
the Lower Mississippi has
shortened itself 242 miles.
“Therefore, any calm person…can see
that in the Old Oolitic Silurian Period,



“Therefore, any calm person…can see
that in the Old Oolitic Silurian Period,
just a million years ago next November,


“Therefore, any calm person…can see
that in the Old Oolitic Silurian Period,
just a million years ago next November,
the Lower Mississippi River was upwards
of 1,300,000 miles long…
“And … 742 years from now
the Lower Mississippi will be


“And … 742 years from now
the Lower Mississippi will be
only 1¾ miles long, and Cairo and
New Orleans will have joined…
“There is something
fascinating about science.



“There is something
fascinating about science.
“One gets such wholesale returns of conjecture


“There is something
fascinating about science.
“One gets such wholesale returns of conjecture
out of such a trifling investment of fact.”
— Mark Twain

Greek conjecture

Symmetry

Temperate at Greece’s latitude south?



Temperate at Greece’s latitude south
Yes!


Temperate at Greece’s latitude south
Would there be both land and water?


Temperate at Greece’s latitude south
Would there be both land and water
Yes!

Temperate at Greece’s latitude south
Would there be both land and water
Would there be plants and animals?

Temperate at Greece’s latitude south
Would there be both land and water
Would there be plants and animals
Yes!
Temperate at Greece’s latitude south
Would there be both land and water
Would there be plants and animals
Would there be humankind?
Temperate at Greece’s latitude south
Would there be both land and water
Would there be plants and animals
Would there be humankind? Yes!

Problem!




Problem!

You never meet antipodeans
at dinner parties

Problem!

You never meet antipodeans
at dinner parties
Why?

“Theory of the Zones”

Maine               Glasgow, Denmark
Pennsylvania        N France
North Carolina      S France
Florida             Spain, Greece

I was wrong!

I ran across an image
at the Washington Post
BoSkuv3IIAAV6ng.png
                55°  Glasgow, Denmark
                50°  N France
Maine           45°  S France
Pennsylvania    40°  Spain, Greece
North Carolina  35°
Florida         30°
                25°
                20°
                55°  Glasgow, Denmark
Newfoundland    50°  N France
Maine           45°  S France
Pennsylvania    40°  Spain, Greece
North Carolina  35°
Florida         30°
                25°
                20°
Inuit villages  55°  Glasgow, Denmark
Newfoundland    50°  N France
Maine           45°  S France
Pennsylvania    40°  Spain, Greece
North Carolina  35°
Florida         30°
                25°
                20°
Inuit villages  55°  Glasgow, Denmark
Newfoundland    50°  N France
Maine           45°  S France
Pennsylvania    40°  Spain, Greece
North Carolina  35°  Tunisia
Florida         30°
                25°
                20°
Inuit villages  55°  Glasgow, Denmark
Newfoundland    50°  N France
Maine           45°  S France
Pennsylvania    40°  Spain, Greece
North Carolina  35°  Tunisia
Florida         30°  Sahara, Cairo
                25°
                20°
Inuit villages  55°  Glasgow, Denmark
Newfoundland    50°  N France
Maine           45°  S France
Pennsylvania    40°  Spain, Greece
North Carolina  35°  Tunisia
Florida         30°  Sahara, Cairo
                25°  Sahara
                20°
Inuit villages  55°  Glasgow, Denmark
Newfoundland    50°  N France
Maine           45°  S France
Pennsylvania    40°  Spain, Greece
North Carolina  35°  Tunisia
Florida         30°  Sahara, Cairo
                25°  Sahara
                20°  Sahara
What if you wanted to start
in Cairo and cross the desert?

30° N → 30° S

6,500 km of desert
Spoiler alert:
there’s no desert
at the equator
africa.jpg
africa-equator.jpg

30° N → 30° S

6,500 km of desert provided
a plausible cause for isolation
from the peoples of the South
This let the Greeks retain their belief
in Nature’s symmetry while explaining
why you never see Antipodeans at parties
Rational consequence


Rational consequence
Debates with “theory
of common descent”
Imaginative consequence



Imaginative consequence
• Poetry


Imaginative consequence
• Poetry
• Comedies

Imaginative consequence
• Poetry
• Comedies
• Relativity

Q:

When am I upside down?

Clean Architecture

I always try to hide
I/O at the lowest level
main()
└──subroutine()
   └──helper()
      └──I/O
But this leaves the I/O
coupled with main()
main()
└──subroutine()
   └──helper()
      └──I/O
main() I/O
└──subroutine()
   └──helper()
Solution: turn it
right-side up
But I’ve already given
talks about that
I also sometimes write
Python modules upside down

Where in a module does main() go?

#include <stdio.h>

int main() {
     printf("%f\n", square(3));
}

float square(float n) {
     return n * n;
}

#include <stdio.h>

int main() {
     printf("%f\n", square(3));
}

float square(float n) {
     return n * n;
}

error: conflicting types for ‘square’

#include <stdio.h>

/* Forward Declaration */
float square(float n);

int main() {
     printf("%f\n", square(3));
}

float square(float n) {
     return n * n;
}
#include <stdio.h>

float square(float n) {
     return n * n;
}

int main() {
     printf("%f\n", square(3));
}
This gave those of us
who used to be C programmers
an ingrained habit:
And I could find
lots of other examples of
technical upside-down-ness
But instead of talking
about architecture or modules,
I want to talk about a personal
upside-down-ness

Personal communication

I was the volunteer Chair
of PyCon in Portland
This turned me into a supplier
of a limited conference resource

This turned me into a supplier
of a limited conference resource
decisions

How do I make a decision?

  1. Wait one day
  2. Reply to the email

I adopted a guiding principle

A volunteer


A volunteer
waiting for my answer

A volunteer
waiting for my answer
is in pain
  1. Wait one day
  2. Reply to the email

Turns out?

I wasn’t waiting one day
because it usually made
my answer better


I was waiting one day
because I was a coward
  1. Wait one day
  2. Reply to the email
If waiting is painful,
shouldn’t my answer come first?
Why do I put my arguments first?


Why do I put my arguments first?
1. Usually I think of them first

Why do I put my arguments first?
1. Usually I think of them first
2. Because they’re my defense
I don’t like people to know my
opinion until I’ve surrounded it
with a fortress of rationale
In putting the decision first,
I was deciding to be vulnerable
Where could I find the courage
to put my decision first?
WilliamAdama.jpg
“It’s an integrated computer network,
and I will not have it aboard this ship.”
Adopting that gravelly decisive voice
helped me avoid burying my decisions
beneath too deep an avalanche
of reasons
(Side note: I never composed
conference email in Gmail)
Never compose a high stakes email
in an application with a Send button!

Editor

Ctrl Ccopy

xclip ... -t text/plain
| pandoc
| xclip ... -t text/html

Ctrl Vpaste

Gmail

Having put the reader first,
I developed two more habits

Is there a bigger pattern here?

me me me me you



me me me me you

you you me me me

Example

let’s look at a single tweet

I received a “thank you” email!

“Yesterday’s NASA
Astronomy Picture of the Day
was made possible by PyEphem”
The galactic core is hidden
by dust, but is visible
to radio telescopes

2°×1° = 1000×500 light years

meerkat-galactic-core.jpg
SKA_site,_South_Africa_2014_51.jpg
Meerkat_(Suricata_suricatta)_Tswalu.jpg

Wikipedia image links:

Telescope — Mike Peel
Meerkat mob — Charles J Sharp

Draft tweet

“PyEphem was used to create
today’s NASA picture of the day!”
<link> <image>
Here are 8 improvements
that I made to the draft
  1. Provide context



  1. Provide context

“My PyEphem library was used to create
today’s NASA picture of the day!”
  1. Make modest claims
“…was used to create…”
“My PyEphem library helped produce
today’s NASA picture of the day!”
  1. Expand into a narrative
How did I know
about the photo?
It’s not like I personally
monitor the NASA photo of the day
for photos that use my libraries


It’s not like I personally
monitor the NASA photo of the day
for photos that use my libraries
We have 280 characters
Let’s tell the full story!
“I just got a ‘thanks’
email letting me know that
my PyEphem library helped produce
today’s NASA picture of the day!”
  1. Offer credit to the email’s author
“I just got a ‘thanks’ email
from @llude and the MeerKAT team letting me
know that my PyEphem library helped produce
today’s NASA picture of the day!”
  1. Offer my congratulations



  1. Offer my congratulations
So far, the tweet leaves
my own reaction implicit
rather than explicit
meerkat-galactic-core.jpg
“I just got a ‘thanks’ email
from @llude and the MeerKAT team letting me
know that my PyEphem library helped produce
today’s NASA picture of the day.
Stunning work, MeerKAT!”
  1. Bring in the audience
Let’s invite the audience
to become part of this
cycle of thanks
“I just got a ‘thanks’ email
from @llude and the MeerKAT team letting me
know that my PyEphem library helped produce
today’s NASA picture of the day.
Stunning work, MeerKAT!
Remember to thank the authors
of open source projects you use.”
Let’s step back

Q: How does the tweet look?


Upside-down


Antipodean



Where have I put the audience?
“I just got a ‘thanks’ email
from @llude and the MeerKAT team letting me
know that my PyEphem library helped produce
today’s NASA picture of the day.
Stunning work, MeerKAT!

Remember to thank the authors
of open source projects you use.”
  1. Let’s put the audience first


  1. Let’s put the audience first
• Lead with the general principle
• Follow up with this specific example
“Remember to thank the authors
of open source projects you use.

I just got a ‘thanks’ email
from @llude and the MeerKAT team letting me
know that my PyEphem library helped produce
today’s NASA picture of the day.
Stunning work, MeerKAT!”
This promotes
the general pattern —
the practice of giving thanks
as the most important
part of the tweet
  1. Switch to telling myself what to do
“Remember to thank the authors
of open source projects you use. …”


“Remember to thank the authors
of open source projects you use. …”
Judgy (assumes they’re not already)

“Remember to thank the authors
of open source projects you use. …”
Judgy (assumes they’re not already)
Preachy (me telling them what to do)

A neat rule about being human:




A neat rule about being human:

Anything you do
will be interpreted as judging
everyone who does something else!

Examples —

“I always add docstrings”


“I always add docstrings”
“My projects still support 2.7”

“I always add docstrings”
“My projects still support 2.7”
“I use Emacs”
“Remember to thank the authors
of open source projects you use!”




“Remember to thank the authors
of open source projects you use!”

“I should take more time
to thank the open source
projects I use!”
“I should take more time…”
Humble: admits that I am not perfect

“I should take more time…”
Humble: admits that I am not perfect
• While still implying everyone else should
Now the tweet is ready!


Now the tweet is ready!
It’s no longer upside down

Now the tweet is ready!
It’s no longer upside down
but right-side up

Finished tweet

“I should take more time to thank
the open source projects I use!

I just got a ‘thanks’ email
from @llude and the MeerKAT team letting me
know that my PyEphem library helped produce
today’s NASA picture of the day.
Stunning work, MeerKAT!”
meerkat-galactic-core.jpg

Thank you!

@brandon_rhodes