Kiwi PyCon 2016

Tai Chi Principles for Mindful Programmers

Dunedin, New Zealand

September 9-11, 2016

Barry Warsaw

Truth?  What is truth?  ... And by the way, if I always tell you the truth, you might start to believe me."

-- Michael

(as told by Victor Wooten in "The Music Lesson")

Washington DC, USA to Dunedin NZ

14000 km, 9000 miles, 25+ hours

Launchpad Epic

Launchpad Epic

2 week sprint, October 2008

  • JavaScript / AJAX training
  • Coding Dojos
  • Transition to Python 2.5/2.6
  • Ubuntu 8.10 release party
  • Halloween!

BCTL

Taiji Quan

"Supreme Ultimate Boxing"

  • Internal Chinese martial art
  • Offensive/defensive
  • Health
  • Balance
  • Reduce stress
  • Mindfulness/awareness
  • Qi

ondon

o

ome

arry

T

L

C

B

Yielding

Power

Collapse

 

Physical principles

Relax (but don't collapse)

Relax

 

Body upright

Flexible waist

Separate the weight

Fair Lady's Wrist

Cheng Man-Ch'ing

Do Without Doing

Demo

Title Text

#include <iostream>
using namespace std;

class XYZ {
public:
    XYZ(int, int, int);
    void set(int, int, int);
    void print();
private:
    int x, y, z;
};
XYZ::XYZ(int a, int b, int c) {
    x = a;
    y = b;
    z = c;
}
void XYZ::set(int a, int b, int c) {
    x = a;
    y = b;
    z = c;
}
void XYZ::print() {
    cout << x << " " << y << " " << z << endl;
}

int main() {
    XYZ xyz(3, 2, 1);
    xyz.print();
    xyz.set(9, 8, 7);
    xyz.print();
    return 0;
}
class XYZ:
    def __init__(self, a, b, c):
        self.x = a
        self.y = b
        self.z = c

    def set(self, a, b, c):
        self.x = a
        self.y = b
        self.z = c

    def __repr__(self):
        return '%s %s %s' % (self.x, self.y, self.z)

xyz = XYZ(3, 2, 1)
print(xyz)
xyz.set(9, 8, 7)
print(xyz)
with Lock():
    look_ma_no_race_conditions()

@decorator
def function_to_augment(*args, **kws):
    yield from other

[x.name for x in seq]

''.join(x.name for x in seq)

{x.name: x for x in seq}

async def http_get(domain):

Internationalization

  • Translate full sentences
  • Order of placeholders can change

What's in the way

is the Way

How do we know what to relax?

'%s is a member of %s' % (email, list_name)

Internationalization

'%(email)s is a member of %(list_name)s' % {
    'email': email,
    'list_name': list_name}
'%(list_name)s si a rebmem fo %(email)'

Oops!

What's "in the way"?

The odd

%(placeholder)s 

format

PEP 292

from string import Template as _

def make_text(email, list_name):
    text = _('$email is a member of $list_name')
    return text.safe_substitute(email=email, 
                                name=list_name)

Oops!

So much duplication

What's "the Way"?

Simplify

'$email is a member of $list_name'

Relax

==

def _(original_text, **extras):
    translated = lookup(original_text)
    frame = sys._getframe()
    d = frame.f_globals.copy()
    d.update(frame.f_locals)
    d.update(extras)
    return translated.safe_substitute(d)
from flufl.i18n import _
def make_text(email, list_name):
    return _('$email is a member of $list_name')

Push hands

How do we learn to relax?

Sensing hands

Invest in Loss

Find the root cause

Toyota Lean Product Development

Launchpad sprint 2007

Launchpad defects

Root cause:

not enough code reviews

Experiment

On-call reviewer once/week

Team productivity

Branches landed/week

20% less productive

When is the right time to relax?

Listen

All musician's hear

Great musicians listen

Listening is awareness

Two minds, one connection

Be in the present moment

Do Without Doing

What's in the way is the Way

Invest in Loss

Listen

Tai Chi Principles

 

BREATHE

Thank You!

Barry Warsaw

barry@{python,list,debian}.org

barry@ubuntu.com

@pumpichank

github.com/warsaw

gitlab.com/warsaw

Kiwi Pycon 2016

By Barry Warsaw