Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: extradoc
Changeset: r4868:53b9c87e31e9
Date: 2012-10-17 09:52 +0200
http://bitbucket.org/pypy/extradoc/changeset/53b9c87e31e9/

Log:    merge

diff too long, truncating to 2000 out of 11558 lines

diff --git a/blog/draft/py3k-status-update-6.rst 
b/blog/draft/py3k-status-update-6.rst
--- a/blog/draft/py3k-status-update-6.rst
+++ b/blog/draft/py3k-status-update-6.rst
@@ -58,7 +58,7 @@
 Finally, I would like to thank Amaury Forgeot d'Arc and Ariel Ben-Yehuda for
 their work on the branch; among other things, Amaury recently worked on
 ``cpyext`` and on the PyPy ``_cffi_backend``, while Ariel submitted a patch to
-implement `PEP 3138`.
+implement `PEP 3138`_.
 
 .. _donated: 
http://morepypy.blogspot.com/2012/01/py3k-and-numpy-first-stage-thanks-to.html
 .. _`py3k proposal`: http://pypy.org/py3donate.html
diff --git a/planning/2.0/todo.txt b/planning/2.0/todo.txt
new file mode 100644
--- /dev/null
+++ b/planning/2.0/todo.txt
@@ -0,0 +1,10 @@
+Things to do
+============
+
+* Fix ctypes performnace for 2.0 beta
+* result-in-resop (maybe)
+* NumPy speed for 2.0 final
+* cffi on pypy on windows
+* raw malloc virtuals
+* bug tracker gardening
+* all green buildbots
diff --git a/planning/todo.txt b/planning/todo.txt
deleted file mode 100644
--- a/planning/todo.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-PyPy todo areas
-==================
-
-This is a todo list that lists various areas of PyPy that should be cleaned up
-(for whatever reason: less mess, less code duplication, etc).
-
-translation toolchain
----------------------
-
- - clean up the tangle of including headers in the C backend
- - make approach for loading modules more sane, mixedmodule capture
-   too many platform dependencies especially for pypy-cli
-
diff --git a/talk/dls2012/presentation/talk.tex 
b/talk/dls2012/presentation/talk.tex
new file mode 100644
--- /dev/null
+++ b/talk/dls2012/presentation/talk.tex
@@ -0,0 +1,144 @@
+\documentclass[utf8x]{beamer}
+
+% This file is a solution template for:
+
+% - Talk at a conference/colloquium.
+% - Talk length is about 20min.
+% - Style is ornate.
+
+\mode<presentation>
+{
+  \usetheme{Warsaw}
+  % or ...
+
+  %\setbeamercovered{transparent}
+  % or whatever (possibly just delete it)
+}
+
+
+\usepackage[english]{babel}
+\usepackage{listings}
+\usepackage{ulem}
+\usepackage{color}
+\usepackage{alltt}
+
+\usepackage[utf8x]{inputenc}
+
+
+\newcommand\redsout[1]{{\color{red}\sout{\hbox{\color{black}{#1}}}}}
+
+% or whatever
+
+% Or whatever. Note that the encoding and the font should match. If T1
+% does not look nice, try deleting the line with the fontenc.
+
+
+\title{Loop-Aware Optimizations in PyPy&#8217;s Tracing JIT}
+
+\author[Ard&#246;, Bolz, Fija&#322;kowski]{H&#229;kan Ard&#246;$^1$ \and 
\emph{Carl Friedrich Bolz}$^2$ \and Maciej Fija&#322;kowski}
+% - Give the names in the same order as the appear in the paper.
+% - Use the \inst{?} command only if the authors have different
+%   affiliation.
+
+\institute[Lund, D&#252;sseldorf]{
+$^1$Centre for Mathematical Sciences, Lund University \and
+$^2$Heinrich-Heine-Universit&#228;t D&#252;sseldorf, STUPS Group, Germany
+}
+
+\date{2012 DLS, 22nd of October, 2012}
+% - Either use conference name or its abbreviation.
+% - Not really informative to the audience, more for people (including
+%   yourself) who are reading the slides online
+
+
+% If you have a file called "university-logo-filename.xxx", where xxx
+% is a graphic format that can be processed by latex or pdflatex,
+% resp., then you can add a logo as follows:
+
+
+
+
+% Delete this, if you do not want the table of contents to pop up at
+% the beginning of each subsection:
+%\AtBeginSubsection[]
+%{
+%  \begin{frame}<beamer>
+%    \frametitle{Outline}
+%    \tableofcontents[currentsection,currentsubsection]
+%  \end{frame}
+%}
+
+
+% If you wish to uncover everything in a step-wise fashion, uncomment
+% the following command: 
+
+%\beamerdefaultoverlayspecification{<+->}
+
+
+\begin{document}
+
+\begin{frame}
+  \titlepage
+\end{frame}
+
+\begin{frame}
+  \frametitle{Why do tracing JITs work?}
+  \begin{itemize}
+      \item They are good at selecting interesting and common code paths
+      \item both through user program and through the runtime
+      \item the latter is particularly important for dynamic languages
+          \pause
+      \item traces are trivial to optimize
+  \end{itemize}
+\end{frame}
+
+\begin{frame}
+  \frametitle{Optimizing traces}
+  \begin{itemize}
+      \item Traces trivial to optimize, because there's no control flow
+      \item most optimizations are one forward pass
+      \item optimizers are often like symbolic executors
+      \item can do optimizations that are untractable with full control flow
+      \item XXX example
+  \end{itemize}
+\end{frame}
+
+\begin{frame}
+  \frametitle{Problems with this approach}
+  \begin{itemize}
+      \item most traces actually are loops
+      \item naive foward passes ignore this bit of control flow optimization 
available
+      \item how to fix that without sacrifing simplicity?
+  \end{itemize}
+\end{frame}
+
+\begin{frame}
+  \frametitle{Idea for solution}
+  \begin{itemize}
+      \item idea first proposed and implemented in LuaJIT by Mike Pall
+      \item this talk presents the implementation of the same approach in 
RPython's tracing JIT
+  \end{itemize}
+  \pause
+  \begin{block}{Approach}
+      \begin{itemize}
+          \item do a pre-processing step on the traces
+          \item apply the unchanged forward-pass optimizations
+          \item do some post-processing
+          \item pre-processing is done in such a way that the normal 
optimizations become loop-aware
+          \item intuition: give the optimizations a second iteration of 
context to work with
+      \end{itemize}
+  \end{block}
+\end{frame}
+
+\begin{frame}
+  \frametitle{Pre-processing the loops}
+  \begin{itemize}
+      \item pre-processing does loop unrolling
+      \item peels off one iteration of the loop, duplicating the trace
+      \item the optimizations optimize both iterations together
+      \item this yields loop-invariant code motion and related optimizations
+  \end{itemize}
+\end{frame}
+
+
+\end{document}
diff --git a/talk/ep2012/jit/abstract.rst b/talk/pycon-uk-2012/abstract.rst
copy from talk/ep2012/jit/abstract.rst
copy to talk/pycon-uk-2012/abstract.rst
diff --git a/talk/ep2012/jit/talk/Makefile b/talk/pycon-uk-2012/talk/Makefile
copy from talk/ep2012/jit/talk/Makefile
copy to talk/pycon-uk-2012/talk/Makefile
diff --git a/talk/pycon-uk-2012/talk/author.latex 
b/talk/pycon-uk-2012/talk/author.latex
new file mode 100644
--- /dev/null
+++ b/talk/pycon-uk-2012/talk/author.latex
@@ -0,0 +1,8 @@
+\definecolor{rrblitbackground}{rgb}{0.0, 0.0, 0.0}
+
+\title[PyPy JIT under the hood]{PyPy JIT under the hood}
+\author[antocuni]
+{Antonio Cuni}
+
+\institute{PyCon UK 2012}
+\date{September 28, 2012}
diff --git a/talk/ep2012/jit/talk/beamerdefs.txt 
b/talk/pycon-uk-2012/talk/beamerdefs.txt
copy from talk/ep2012/jit/talk/beamerdefs.txt
copy to talk/pycon-uk-2012/talk/beamerdefs.txt
diff --git a/talk/ep2012/jit/talk/diagrams/architecture.svg 
b/talk/pycon-uk-2012/talk/diagrams/architecture.svg
copy from talk/ep2012/jit/talk/diagrams/architecture.svg
copy to talk/pycon-uk-2012/talk/diagrams/architecture.svg
diff --git a/talk/ep2012/jit/talk/diagrams/pypytrace.svg 
b/talk/pycon-uk-2012/talk/diagrams/pypytrace.svg
copy from talk/ep2012/jit/talk/diagrams/pypytrace.svg
copy to talk/pycon-uk-2012/talk/diagrams/pypytrace.svg
diff --git a/talk/ep2012/jit/talk/diagrams/trace.svg 
b/talk/pycon-uk-2012/talk/diagrams/trace.svg
copy from talk/ep2012/jit/talk/diagrams/trace.svg
copy to talk/pycon-uk-2012/talk/diagrams/trace.svg
diff --git a/talk/ep2012/jit/talk/diagrams/tracetree.svg 
b/talk/pycon-uk-2012/talk/diagrams/tracetree.svg
copy from talk/ep2012/jit/talk/diagrams/tracetree.svg
copy to talk/pycon-uk-2012/talk/diagrams/tracetree.svg
diff --git a/talk/ep2012/jit/talk/diagrams/tracing-phases.svg 
b/talk/pycon-uk-2012/talk/diagrams/tracing-phases.svg
copy from talk/ep2012/jit/talk/diagrams/tracing-phases.svg
copy to talk/pycon-uk-2012/talk/diagrams/tracing-phases.svg
diff --git a/talk/ep2012/jit/talk/stylesheet.latex 
b/talk/pycon-uk-2012/talk/stylesheet.latex
copy from talk/ep2012/jit/talk/stylesheet.latex
copy to talk/pycon-uk-2012/talk/stylesheet.latex
diff --git a/talk/pycon-uk-2012/talk/talk.pdf.info 
b/talk/pycon-uk-2012/talk/talk.pdf.info
new file mode 100644
--- /dev/null
+++ b/talk/pycon-uk-2012/talk/talk.pdf.info
@@ -0,0 +1,11 @@
+AvailableTransitions=[Crossfade]
+TransitionDuration = 100
+EstimatedDuration = 60*60       # in seconds
+MinutesOnly = True
+
+PageProps = {
+    1: {
+    'reset': FirstTimeOnly,
+    'progress': False,
+    },
+}
diff --git a/talk/pycon-uk-2012/talk/talk.rst b/talk/pycon-uk-2012/talk/talk.rst
new file mode 100644
--- /dev/null
+++ b/talk/pycon-uk-2012/talk/talk.rst
@@ -0,0 +1,587 @@
+.. include:: beamerdefs.txt
+
+================================
+PyPy JIT under the hood
+================================
+
+About me
+---------
+
+- PyPy core dev
+
+- PyPy py3k tech leader
+
+- ``pdb++``, ``fancycompleter``, ...
+
+- Consultant, trainer
+
+- You can hire me :-)
+
+- http://antocuni.eu
+
+
+About this talk
+----------------
+
+* What is PyPy? (in 30 seconds)
+
+* Overview of tracing JITs
+
+* The PyPy JIT generator
+
+
+Part 0: What is PyPy?
+----------------------
+
+* RPython toolchain
+
+  - subset of Python
+
+  - ideal for writing VMs
+
+  - JIT & GC for free
+
+* Python interpreter
+
+  - written in RPython
+
+* Whatever (dynamic) language you want
+
+  - smalltalk, prolog, javascript, ...
+
+
+Part 1
+------
+
+**Overview of tracing JITs**
+
+Compilers
+---------
+
+* When?
+
+  - Batch or Ahead Of Time
+
+  - Just In Time
+
+|pause|
+
+* How?
+
+  - Static
+
+  - Dynamic or Adaptive
+
+|pause|
+
+* What?
+
+  - Method-based compiler
+
+  - Tracing compiler
+
+|pause|
+
+* PyPy: JIT, Dynamic, Tracing
+
+
+Assumptions
+-----------
+
+* Pareto Principle (80-20 rule)
+
+  - the 20% of the program accounts for the 80% of the runtime
+
+  - **hot-spots**
+
+* Fast Path principle
+
+  - optimize only what is necessary
+
+  - fall back for uncommon cases
+
+|pause|
+
+* Most of runtime spent in **loops**
+
+* Always the same code paths (likely)
+
+
+Tracing JIT
+-----------
+
+* Interpret the program as usual
+
+* Detect **hot** loops
+
+* Tracing phase
+
+  - **linear** trace
+
+* Compiling
+
+* Execute
+
+  - guards to ensure correctness
+
+* Profit :-)
+
+
+Tracing JIT phases
+-------------------
+
+.. animage:: diagrams/tracing-phases-p*.pdf
+   :align: center
+   :scale: 100%
+
+
+Tracing Example (1)
+--------------------
+
+.. we use java instead of RPython to avoid confusion with applevel Python
+
+
+|scriptsize|
+|example<| |small| java |end_small| |>|
+
+.. sourcecode:: java
+
+    interface Operation {
+        int DoSomething(int x);
+    }
+    class IncrOrDecr implements Operation {
+        public int DoSomething(int x) { 
+            if (x < 0) return x-1;
+            else       return x+1;
+        }
+    }
+    class tracing {
+        public static void main(String argv[]) {
+            int N = 100;
+            int i = 0;
+            Operation op = new IncrOrDecr();
+            while (i < N) {
+                i = op.DoSomething(i);
+            }
+            System.out.println(i);
+        }
+    }
+
+|end_example|
+|end_scriptsize|
+
+
+Tracing Example (2)
+--------------------
+
+|scriptsize|
+|column1|
+|example<| |small| Java bytecode |end_small| |>|
+
+.. sourcecode:: java
+
+  class IncrOrDecr {
+    ...
+    public DoSomething(I)I
+      ILOAD 1
+      IFGE LABEL_0
+      ILOAD 1
+      ICONST_1
+      ISUB
+      IRETURN
+     LABEL_0
+      ILOAD 1
+      ICONST_1
+      IADD
+      IRETURN
+  }
+
+|end_example|
+
+|pause|
+
+|column2|
+|example<| |small| Java bytecode |end_small| |>|
+
+.. sourcecode:: java
+
+  class tracing {
+    ...
+    public static main(
+       [Ljava/lang/String;)V
+      ...
+     LABEL_0
+      ILOAD 2
+      ILOAD 1
+      IF_ICMPGE LABEL_1
+      ALOAD 3
+      ILOAD 2
+      INVOKEINTERFACE 
+        Operation.DoSomething (I)I
+      ISTORE 2
+      GOTO LABEL_0
+     LABEL_1
+      ...
+  }
+
+|end_example|
+|end_columns|
+|end_scriptsize|
+
+
+Tracing example (3)
+-------------------
+
+.. animage:: diagrams/trace-p*.pdf
+   :align: center
+   :scale: 80%
+
+
+Trace trees (1)
+---------------
+
+|scriptsize|
+|example<| |small| tracetree.java |end_small| |>|
+
+.. sourcecode:: java
+
+    public static void trace_trees() {
+      int a = 0;
+      int i = 0;
+      int N = 100;
+
+      while(i < N) {
+        if (i%2 == 0)
+            a++;
+        else
+            a*=2;
+        i++;
+      }
+    }
+
+|end_example|
+|end_scriptsize|
+
+Trace trees (2)
+---------------
+
+.. animage:: diagrams/tracetree-p*.pdf
+   :align: center
+   :scale: 34%
+
+
+Part 2
+------
+
+**The PyPy JIT generator**
+
+General architecture
+---------------------
+
+.. animage:: diagrams/architecture-p*.pdf
+   :align: center
+   :scale: 24%
+
+
+PyPy trace example
+-------------------
+
+.. animage:: diagrams/pypytrace-p*.pdf
+   :align: center
+   :scale: 40%
+
+
+PyPy optimizer
+---------------
+
+- intbounds
+
+- constant folding / pure operations
+
+- virtuals
+
+- string optimizations
+
+- heap (multiple get/setfield, etc)
+
+- ffi
+
+- unroll
+
+
+Intbound optimization (1)
+-------------------------
+
+|example<| |small| intbound.py |end_small| |>|
+
+.. sourcecode:: python
+
+    def fn():
+        i = 0
+        while i < 5000:
+            i += 2
+        return i
+
+|end_example|
+
+Intbound optimization (2)
+--------------------------
+
+|scriptsize|
+|column1|
+|example<| |small| unoptimized |end_small| |>|
+
+.. sourcecode:: python
+
+    ...
+    i17 = int_lt(i15, 5000)
+    guard_true(i17)
+    i19 = int_add_ovf(i15, 2)
+    guard_no_overflow()
+    ...
+
+|end_example|
+
+|pause|
+
+|column2|
+|example<| |small| optimized |end_small| |>|
+
+.. sourcecode:: python
+
+    ...
+    i17 = int_lt(i15, 5000)
+    guard_true(i17)
+    i19 = int_add(i15, 2)
+    ...
+
+|end_example|
+|end_columns|
+|end_scriptsize|
+
+|pause|
+
+* It works **often**
+
+* array bound checking
+
+* intbound info propagates all over the trace
+
+
+Virtuals (1)
+-------------
+
+|example<| |small| virtuals.py |end_small| |>|
+
+.. sourcecode:: python
+
+    def fn():
+        i = 0
+        while i < 5000:
+            i += 2
+        return i
+
+|end_example|
+
+
+Virtuals (2)
+------------
+
+|scriptsize|
+|column1|
+|example<| |small| unoptimized |end_small| |>|
+
+.. sourcecode:: python
+
+    ...
+    guard_class(p0, W_IntObject)
+    i1 = getfield_pure(p0, 'intval')
+    i2 = int_add(i1, 2)
+    p3 = new(W_IntObject)
+    setfield_gc(p3, i2, 'intval')
+    ...
+
+|end_example|
+
+|pause|
+
+|column2|
+|example<| |small| optimized |end_small| |>|
+
+.. sourcecode:: python
+
+    ...
+    i2 = int_add(i1, 2)
+    ...
+
+|end_example|
+|end_columns|
+|end_scriptsize|
+
+|pause|
+
+* The most important optimization (TM)
+
+* It works both inside the trace and across the loop
+
+* It works for tons of cases
+
+  - e.g. function frames
+
+
+Constant folding (1)
+---------------------
+
+|example<| |small| constfold.py |end_small| |>|
+
+.. sourcecode:: python
+
+    def fn():
+        i = 0
+        while i < 5000:
+            i += 2
+        return i
+
+|end_example|
+
+
+Constant folding (2)
+--------------------
+
+|scriptsize|
+|column1|
+|example<| |small| unoptimized |end_small| |>|
+
+.. sourcecode:: python
+
+    ...
+    i1 = getfield_pure(p0, 'intval')
+    i2 = getfield_pure(<W_Int(2)>, 
+                       'intval')
+    i3 = int_add(i1, i2)
+    ...
+
+|end_example|
+
+|pause|
+
+|column2|
+|example<| |small| optimized |end_small| |>|
+
+.. sourcecode:: python
+
+    ...
+    i1 = getfield_pure(p0, 'intval')
+    i3 = int_add(i1, 2)
+    ...
+
+|end_example|
+|end_columns|
+|end_scriptsize|
+
+|pause|
+
+* It "finishes the job"
+
+* Works well together with other optimizations (e.g. virtuals)
+
+* It also does "normal, boring, static" constant-folding
+
+
+Out of line guards (1)
+-----------------------
+
+|example<| |small| outoflineguards.py |end_small| |>|
+
+.. sourcecode:: python
+
+    N = 2
+    def fn():
+        i = 0
+        while i < 5000:
+            i += N
+        return i
+
+|end_example|
+
+
+Out of line guards (2)
+----------------------
+
+|scriptsize|
+|column1|
+|example<| |small| unoptimized |end_small| |>|
+
+.. sourcecode:: python
+
+    ...
+    quasiimmut_field(<Cell>, 'val')
+    guard_not_invalidated()
+    p0 = getfield_gc(<Cell>, 'val')
+    ...
+    i2 = getfield_pure(p0, 'intval')
+    i3 = int_add(i1, i2)
+
+|end_example|
+
+|pause|
+
+|column2|
+|example<| |small| optimized |end_small| |>|
+
+.. sourcecode:: python
+
+    ...
+    guard_not_invalidated()
+    ...
+    i3 = int_add(i1, 2)
+    ...
+
+|end_example|
+|end_columns|
+|end_scriptsize|
+
+|pause|
+
+* Python is too dynamic, but we don't care :-)
+
+* No overhead in assembler code
+
+* Used a bit "everywhere"
+
+* Credits to Mark Shannon
+
+  - for the name :-)
+
+Guards
+-------
+
+- guard_true
+
+- guard_false
+
+- guard_class
+
+- guard_no_overflow
+
+- **guard_value**
+
+Promotion
+---------
+
+- guard_value
+
+- specialize code
+
+- make sure not to **overspecialize**
+
+- example: type of objects
+
+- example: function code objects, ...
+
+Conclusion
+-----------
+
+- PyPy is cool :-)
+
+- Any question?
diff --git a/talk/ep2012/jit/talk/title.latex 
b/talk/pycon-uk-2012/talk/title.latex
copy from talk/ep2012/jit/talk/title.latex
copy to talk/pycon-uk-2012/talk/title.latex
diff --git a/talk/googlezurich2012/Makefile b/talk/pyconza2012/stm-talk/Makefile
copy from talk/googlezurich2012/Makefile
copy to talk/pyconza2012/stm-talk/Makefile
diff --git a/talk/pyconza2012/stm-talk/author.latex 
b/talk/pyconza2012/stm-talk/author.latex
new file mode 100644
--- /dev/null
+++ b/talk/pyconza2012/stm-talk/author.latex
@@ -0,0 +1,8 @@
+\definecolor{rrblitbackground}{rgb}{0.0, 0.0, 0.0}
+
+\title[PyPy in Production]{PyPy}
+\author[Armin Rigo]
+{Armin Rigo}
+
+\institute{PyCon ZA 2012}
+\date{October 4, 2012}
diff --git a/talk/googlezurich2012/beamerdefs.txt 
b/talk/pyconza2012/stm-talk/beamerdefs.txt
copy from talk/googlezurich2012/beamerdefs.txt
copy to talk/pyconza2012/stm-talk/beamerdefs.txt
--- a/talk/googlezurich2012/beamerdefs.txt
+++ b/talk/pyconza2012/stm-talk/beamerdefs.txt
@@ -89,7 +89,7 @@
 
 
 
-.. |snake| image:: ../img/py-web-new.png
+.. |snake| image:: ../../img/py-web-new.png
            :scale: 15%
            
 
diff --git a/talk/pyconza2012/stm-talk/demo1.py 
b/talk/pyconza2012/stm-talk/demo1.py
new file mode 100644
--- /dev/null
+++ b/talk/pyconza2012/stm-talk/demo1.py
@@ -0,0 +1,19 @@
+
+class Number(object):
+
+   def __init__(self, num):
+       self.num = num
+
+   def __add__(self, other):
+       return Number(self.num + other.num)
+
+   def __invert__(self):
+       return Number(~self.num)
+
+def foo(n):
+    total = Number(0)
+    for i in range(n):
+        total += Number(i)
+        total += ~ Number(i)
+    return total.num
+
diff --git a/talk/googlezurich2012/standards.png 
b/talk/pyconza2012/stm-talk/standards.png
copy from talk/googlezurich2012/standards.png
copy to talk/pyconza2012/stm-talk/standards.png
diff --git a/talk/googlezurich2012/stylesheet.latex 
b/talk/pyconza2012/stm-talk/stylesheet.latex
copy from talk/googlezurich2012/stylesheet.latex
copy to talk/pyconza2012/stm-talk/stylesheet.latex
diff --git a/talk/pyconza2012/stm-talk/talk.rst 
b/talk/pyconza2012/stm-talk/talk.rst
new file mode 100644
--- /dev/null
+++ b/talk/pyconza2012/stm-talk/talk.rst
@@ -0,0 +1,205 @@
+.. include:: beamerdefs.txt
+
+============================================================
+PyPy
+============================================================
+
+
+PyPy is...
+--------------------------
+
+* Another Python interpreter
+
+* with a JIT compiler
+
+
+PyPy was...
+-------------------
+
+* Around since 2003
+
+* (advertised as) production ready since December 2010
+
+  - release 1.4
+
+* Funding
+
+  - EU FP6 programme
+
+  - Eurostars programme
+
+  - donations
+
+  - ...
+
+
+PyPy 1.9: current status
+------------------------
+
+* Faster
+
+  - **1.7x** than 1.5 (Summer 2011)
+
+  - **2.2x** than 1.4 (December 2010)
+
+  - **5.5x** than CPython
+
+* Implements Python 2.7.3
+
+* Many more "PyPy-friendly" programs than before
+
+* Packaging
+
+  - |scriptsize| Debian, Ubuntu, Fedora, Homebrew, Gentoo, ArchLinux, ... 
|end_scriptsize|
+
+  - |scriptsize| Windows (32bit only), OS X |end_scriptsize|
+
+* C extension compatibility
+
+  - runs (big part of) **PyOpenSSL** and **lxml**
+
+
+PyPy organization
+-----------------
+
+* Part of SFC -- Software Freedom Conservancy
+
+  - Bradley successfully fighting U.S. bureaucracy
+
+  - we are happy about it
+
+
+* Funding model
+
+  - py3k, numpy, STM
+
+  - more than 100'000$ in donations
+
+  - from individuals, large companies and the PSF
+
+
+PyPy's JIT compiler
+-------------------
+
+* Removes abstraction
+
+* Almost never gives up
+
+* x86-32, x86-64, ARMv7, (POWER64)
+
+* (Works with other languages)
+
+
+Real world applications
+-----------------------
+
+* Positive feedback
+
+* http://speed.pypy.org/
+
+
+
+py3k
+------------------------
+
+* ``py3k`` branch in mercurial
+
+  - developed in parallel
+
+  - Python 3 written in Python 2
+
+* Focus on correctness
+
+* Dropped some interpreter optimizations for now
+
+* First 90% done, remaining 90% not done
+
+* Majority of the funds by Google
+
+
+NumPy
+-----
+
+* progress going slowly
+
+* multi dimensional arrays, broadcasting, fancy indexing
+
+* all dtypes, except complex, strings and objects
+
+* good results for performance
+
+
+STM
+---------------------------
+
+* Software Transactional Memory
+
+* "Remove the GIL"
+
+* But also, new models (better than threads)
+
+
+
+Calling C
+---------
+
+.. image:: standards.png
+   :scale: 60%
+   :align: center
+
+Calling C landscape
+-------------------
+
+* CPython C extensions
+
+* SWIG, SIP, wrapper generators
+
+* ctypes
+
+* Cython
+
+* CFFI (our new thing)
+
+CFFI
+----------
+
+|scriptsize|
+|example<| Example |>|
+
+  .. sourcecode:: pycon
+
+   >>> from cffi import FFI
+   >>> ffi = FFI()
+   >>> ffi.cdef("""
+   ...     int printf(const char *format, ...);
+   ... """)
+   >>> C = ffi.dlopen(None)
+   >>> arg = ffi.new("char[]", "world")
+   >>> C.printf("hi there, %s!\n", arg)
+   hi there, world!
+
+|end_example|
+|end_scriptsize|
+
+CFFI
+----
+
+* Many more examples
+
+* Including macro calls and most subtleties of C
+
+* http://cffi.readthedocs.org
+
+
+STM
+---
+
+
+Conclusion
+----------
+
+* Try out PyPy on real code
+
+* http://pypy.org/
+
+* Thank you!
diff --git a/talk/googlezurich2012/title.latex 
b/talk/pyconza2012/stm-talk/title.latex
copy from talk/googlezurich2012/title.latex
copy to talk/pyconza2012/stm-talk/title.latex
--- a/talk/googlezurich2012/title.latex
+++ b/talk/pyconza2012/stm-talk/title.latex
@@ -1,5 +1,5 @@
 \begin{titlepage}
 \begin{figure}[h]
-\includegraphics[width=60px]{../img/py-web-new.png}
+\includegraphics[width=60px]{../../img/py-web-new.png}
 \end{figure}
 \end{titlepage}
diff --git a/talk/vmil2012/Makefile b/talk/vmil2012/Makefile
--- a/talk/vmil2012/Makefile
+++ b/talk/vmil2012/Makefile
@@ -42,6 +42,9 @@
 logs::
        tool/run_benchmarks.sh
 
+slides:
+       $(MAKE) -C presentation
+
 clean:
        rm -f *.aux *.bbl *.blg *.log *.tdo
        rm -f *.pdf
diff --git a/talk/vmil2012/presentation/Makefile 
b/talk/vmil2012/presentation/Makefile
new file mode 100644
--- /dev/null
+++ b/talk/vmil2012/presentation/Makefile
@@ -0,0 +1,16 @@
+talk.pdf: talk.tex figures/data.tex figures/go_data.tex tool/data.py
+       pdflatex talk.tex &> /dev/null
+
+UNAME := $(shell "uname")
+view: talk.pdf
+ifeq ($(UNAME), Linux)
+       evince talk.pdf &
+endif
+ifeq ($(UNAME), Darwin)
+       open talk.pdf &
+endif
+
+
+figures/go_data.tex: tool/data.py
+figures/data.tex: tool/data.py
+       python tool/data.py
diff --git a/talk/vmil2012/presentation/charts.ods 
b/talk/vmil2012/presentation/charts.ods
new file mode 100644
index 
0000000000000000000000000000000000000000..94300512c367f6ea2553953adde39281e950b27c
GIT binary patch

[cut]

diff --git a/talk/vmil2012/presentation/figures/bridge_compiled.graffle 
b/talk/vmil2012/presentation/figures/bridge_compiled.graffle
new file mode 100644
--- /dev/null
+++ b/talk/vmil2012/presentation/figures/bridge_compiled.graffle
@@ -0,0 +1,1457 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" 
"http://www.apple.com/DTDs/PropertyList-1.0.dtd";>
+<plist version="1.0">
+<dict>
+       <key>ActiveLayerIndex</key>
+       <integer>0</integer>
+       <key>ApplicationVersion</key>
+       <array>
+               <string>com.omnigroup.OmniGrafflePro</string>
+               <string>139.16.0.171715</string>
+       </array>
+       <key>AutoAdjust</key>
+       <true/>
+       <key>BackgroundGraphic</key>
+       <dict>
+               <key>Bounds</key>
+               <string>{{0, 0}, {1118, 783}}</string>
+               <key>Class</key>
+               <string>SolidGraphic</string>
+               <key>ID</key>
+               <integer>2</integer>
+               <key>Style</key>
+               <dict>
+                       <key>shadow</key>
+                       <dict>
+                               <key>Draws</key>
+                               <string>NO</string>
+                       </dict>
+                       <key>stroke</key>
+                       <dict>
+                               <key>Draws</key>
+                               <string>NO</string>
+                       </dict>
+               </dict>
+       </dict>
+       <key>BaseZoom</key>
+       <integer>0</integer>
+       <key>CanvasOrigin</key>
+       <string>{0, 0}</string>
+       <key>ColumnAlign</key>
+       <integer>1</integer>
+       <key>ColumnSpacing</key>
+       <real>36</real>
+       <key>CreationDate</key>
+       <string>2012-07-24 10:50:56 +0000</string>
+       <key>Creator</key>
+       <string>David Schneider</string>
+       <key>DisplayScale</key>
+       <string>1.000 cm = 1.000 cm</string>
+       <key>GraphDocumentVersion</key>
+       <integer>8</integer>
+       <key>GraphicsList</key>
+       <array>
+               <dict>
+                       <key>Class</key>
+                       <string>LineGraphic</string>
+                       <key>Head</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>16</integer>
+                               <key>Info</key>
+                               <integer>1</integer>
+                       </dict>
+                       <key>ID</key>
+                       <integer>63</integer>
+                       <key>Points</key>
+                       <array>
+                               <string>{427, 250}</string>
+                               <string>{328, 162}</string>
+                               <string>{188, 113}</string>
+                       </array>
+                       <key>Style</key>
+                       <dict>
+                               <key>stroke</key>
+                               <dict>
+                                       <key>HeadArrow</key>
+                                       <string>FilledArrow</string>
+                                       <key>Legacy</key>
+                                       <true/>
+                                       <key>LineType</key>
+                                       <integer>1</integer>
+                                       <key>TailArrow</key>
+                                       <string>0</string>
+                               </dict>
+                       </dict>
+                       <key>Tail</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>36</integer>
+                       </dict>
+               </dict>
+               <dict>
+                       <key>Class</key>
+                       <string>LineGraphic</string>
+                       <key>Head</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>16</integer>
+                               <key>Info</key>
+                               <integer>1</integer>
+                       </dict>
+                       <key>ID</key>
+                       <integer>62</integer>
+                       <key>Points</key>
+                       <array>
+                               <string>{188, 250}</string>
+                               <string>{206, 184}</string>
+                               <string>{188, 113}</string>
+                       </array>
+                       <key>Style</key>
+                       <dict>
+                               <key>stroke</key>
+                               <dict>
+                                       <key>HeadArrow</key>
+                                       <string>FilledArrow</string>
+                                       <key>Legacy</key>
+                                       <true/>
+                                       <key>LineType</key>
+                                       <integer>1</integer>
+                                       <key>TailArrow</key>
+                                       <string>0</string>
+                               </dict>
+                       </dict>
+                       <key>Tail</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>27</integer>
+                       </dict>
+               </dict>
+               <dict>
+                       <key>Class</key>
+                       <string>LineGraphic</string>
+                       <key>Head</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>42</integer>
+                       </dict>
+                       <key>ID</key>
+                       <integer>61</integer>
+                       <key>Points</key>
+                       <array>
+                               <string>{83, 205}</string>
+                               <string>{42, 264.875}</string>
+                               <string>{83, 334.75}</string>
+                       </array>
+                       <key>Style</key>
+                       <dict>
+                               <key>stroke</key>
+                               <dict>
+                                       <key>HeadArrow</key>
+                                       <string>FilledArrow</string>
+                                       <key>Legacy</key>
+                                       <true/>
+                                       <key>LineType</key>
+                                       <integer>1</integer>
+                                       <key>TailArrow</key>
+                                       <string>0</string>
+                               </dict>
+                       </dict>
+                       <key>Tail</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>24</integer>
+                       </dict>
+               </dict>
+               <dict>
+                       <key>Class</key>
+                       <string>Group</string>
+                       <key>Graphics</key>
+                       <array>
+                               <dict>
+                                       <key>Bounds</key>
+                                       <string>{{232.00001379686913, 
294.74999999999989}, {150.99998620313085, 93.5}}</string>
+                                       <key>Class</key>
+                                       <string>ShapedGraphic</string>
+                                       <key>ID</key>
+                                       <integer>59</integer>
+                                       <key>Magnets</key>
+                                       <array>
+                                               <string>{1, 0}</string>
+                                               <string>{-1, 0}</string>
+                                       </array>
+                                       <key>Shape</key>
+                                       <string>Rectangle</string>
+                                       <key>Text</key>
+                                       <dict>
+                                               <key>Text</key>
+                                               
<string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340
+\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 Monaco;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs20 \cf0 read backend map\
+decode resume data\
+retrieve stack and register values\
+...\
+return to interpreter}</string>
+                                       </dict>
+                               </dict>
+                               <dict>
+                                       <key>Bounds</key>
+                                       <string>{{232, 261.25}, {151, 
33.5}}</string>
+                                       <key>Class</key>
+                                       <string>ShapedGraphic</string>
+                                       <key>ID</key>
+                                       <integer>60</integer>
+                                       <key>Magnets</key>
+                                       <array>
+                                               <string>{0, 1}</string>
+                                               <string>{0, -1}</string>
+                                       </array>
+                                       <key>Shape</key>
+                                       <string>Rectangle</string>
+                                       <key>Text</key>
+                                       <dict>
+                                               <key>Text</key>
+                                               
<string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 compensation code}</string>
+                                       </dict>
+                               </dict>
+                       </array>
+                       <key>ID</key>
+                       <integer>58</integer>
+               </dict>
+               <dict>
+                       <key>Class</key>
+                       <string>LineGraphic</string>
+                       <key>Head</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>40</integer>
+                       </dict>
+                       <key>ID</key>
+                       <integer>56</integer>
+                       <key>Points</key>
+                       <array>
+                               <string>{531, 333.75}</string>
+                               <string>{555, 351}</string>
+                               <string>{580.89735689328165, 
373.74999618530273}</string>
+                       </array>
+                       <key>Style</key>
+                       <dict>
+                               <key>stroke</key>
+                               <dict>
+                                       <key>HeadArrow</key>
+                                       <string>FilledArrow</string>
+                                       <key>Legacy</key>
+                                       <true/>
+                                       <key>LineType</key>
+                                       <integer>1</integer>
+                                       <key>Pattern</key>
+                                       <integer>1</integer>
+                                       <key>TailArrow</key>
+                                       <string>0</string>
+                               </dict>
+                       </dict>
+                       <key>Tail</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>44</integer>
+                       </dict>
+               </dict>
+               <dict>
+                       <key>Class</key>
+                       <string>LineGraphic</string>
+                       <key>Head</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>41</integer>
+                       </dict>
+                       <key>ID</key>
+                       <integer>55</integer>
+                       <key>Points</key>
+                       <array>
+                               <string>{531, 301.25}</string>
+                               <string>{580, 278}</string>
+                               <string>{580.415709839653, 
277.88418648722006}</string>
+                       </array>
+                       <key>Style</key>
+                       <dict>
+                               <key>stroke</key>
+                               <dict>
+                                       <key>HeadArrow</key>
+                                       <string>FilledArrow</string>
+                                       <key>Legacy</key>
+                                       <true/>
+                                       <key>LineType</key>
+                                       <integer>1</integer>
+                                       <key>Pattern</key>
+                                       <integer>1</integer>
+                                       <key>TailArrow</key>
+                                       <string>0</string>
+                               </dict>
+                       </dict>
+                       <key>Tail</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>43</integer>
+                       </dict>
+               </dict>
+               <dict>
+                       <key>Class</key>
+                       <string>LineGraphic</string>
+                       <key>Head</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>39</integer>
+                       </dict>
+                       <key>ID</key>
+                       <integer>54</integer>
+                       <key>Points</key>
+                       <array>
+                               <string>{82.536736108577472, 
339.10023442863826}</string>
+                               <string>{52, 351.5}</string>
+                               <string>{34.428503435249759, 
361.50264298468693}</string>
+                       </array>
+                       <key>Style</key>
+                       <dict>
+                               <key>stroke</key>
+                               <dict>
+                                       <key>HeadArrow</key>
+                                       <string>FilledArrow</string>
+                                       <key>Legacy</key>
+                                       <true/>
+                                       <key>LineType</key>
+                                       <integer>1</integer>
+                                       <key>Pattern</key>
+                                       <integer>1</integer>
+                                       <key>TailArrow</key>
+                                       <string>0</string>
+                               </dict>
+                       </dict>
+                       <key>Tail</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>42</integer>
+                               <key>Info</key>
+                               <integer>2</integer>
+                       </dict>
+               </dict>
+               <dict>
+                       <key>Class</key>
+                       <string>LineGraphic</string>
+                       <key>Head</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>38</integer>
+                       </dict>
+                       <key>ID</key>
+                       <integer>53</integer>
+                       <key>Points</key>
+                       <array>
+                               <string>{83, 301.25}</string>
+                               <string>{60, 286}</string>
+                               <string>{33.993974985969523, 268.75}</string>
+                       </array>
+                       <key>Style</key>
+                       <dict>
+                               <key>stroke</key>
+                               <dict>
+                                       <key>HeadArrow</key>
+                                       <string>FilledArrow</string>
+                                       <key>Legacy</key>
+                                       <true/>
+                                       <key>LineType</key>
+                                       <integer>1</integer>
+                                       <key>Pattern</key>
+                                       <integer>1</integer>
+                                       <key>TailArrow</key>
+                                       <string>0</string>
+                               </dict>
+                       </dict>
+                       <key>Tail</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>37</integer>
+                       </dict>
+               </dict>
+               <dict>
+                       <key>Class</key>
+                       <string>LineGraphic</string>
+                       <key>Head</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>44</integer>
+                       </dict>
+                       <key>ID</key>
+                       <integer>52</integer>
+                       <key>Points</key>
+                       <array>
+                               <string>{532, 205}</string>
+                               <string>{566, 277}</string>
+                               <string>{531, 333.75}</string>
+                       </array>
+                       <key>Style</key>
+                       <dict>
+                               <key>stroke</key>
+                               <dict>
+                                       <key>HeadArrow</key>
+                                       <string>FilledArrow</string>
+                                       <key>Legacy</key>
+                                       <true/>
+                                       <key>LineType</key>
+                                       <integer>1</integer>
+                                       <key>TailArrow</key>
+                                       <string>0</string>
+                               </dict>
+                       </dict>
+                       <key>Tail</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>34</integer>
+                       </dict>
+               </dict>
+               <dict>
+                       <key>Class</key>
+                       <string>LineGraphic</string>
+                       <key>Head</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>43</integer>
+                       </dict>
+                       <key>ID</key>
+                       <integer>51</integer>
+                       <key>Points</key>
+                       <array>
+                               <string>{532, 159}</string>
+                               <string>{569, 211}</string>
+                               <string>{531, 301.25}</string>
+                       </array>
+                       <key>Style</key>
+                       <dict>
+                               <key>stroke</key>
+                               <dict>
+                                       <key>HeadArrow</key>
+                                       <string>FilledArrow</string>
+                                       <key>Legacy</key>
+                                       <true/>
+                                       <key>LineType</key>
+                                       <integer>1</integer>
+                                       <key>TailArrow</key>
+                                       <string>0</string>
+                               </dict>
+                       </dict>
+                       <key>Tail</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>32</integer>
+                       </dict>
+               </dict>
+               <dict>
+                       <key>Class</key>
+                       <string>LineGraphic</string>
+                       <key>Head</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>59</integer>
+                       </dict>
+                       <key>ID</key>
+                       <integer>50</integer>
+                       <key>Points</key>
+                       <array>
+                               <string>{428, 301.25}</string>
+                               <string>{404, 330}</string>
+                               <string>{383, 341.49999999999989}</string>
+                       </array>
+                       <key>Style</key>
+                       <dict>
+                               <key>stroke</key>
+                               <dict>
+                                       <key>HeadArrow</key>
+                                       <string>FilledArrow</string>
+                                       <key>Legacy</key>
+                                       <true/>
+                                       <key>LineType</key>
+                                       <integer>1</integer>
+                                       <key>TailArrow</key>
+                                       <string>0</string>
+                               </dict>
+                       </dict>
+                       <key>Tail</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>43</integer>
+                       </dict>
+               </dict>
+               <dict>
+                       <key>Class</key>
+                       <string>LineGraphic</string>
+                       <key>Head</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>59</integer>
+                       </dict>
+                       <key>ID</key>
+                       <integer>49</integer>
+                       <key>Points</key>
+                       <array>
+                               <string>{479.5, 350.5}</string>
+                               <string>{427, 385.25}</string>
+                               <string>{383, 341.49999999999989}</string>
+                       </array>
+                       <key>Style</key>
+                       <dict>
+                               <key>stroke</key>
+                               <dict>
+                                       <key>HeadArrow</key>
+                                       <string>FilledArrow</string>
+                                       <key>Legacy</key>
+                                       <true/>
+                                       <key>LineType</key>
+                                       <integer>1</integer>
+                                       <key>TailArrow</key>
+                                       <string>0</string>
+                               </dict>
+                       </dict>
+                       <key>Tail</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>44</integer>
+                               <key>Info</key>
+                               <integer>1</integer>
+                       </dict>
+               </dict>
+               <dict>
+                       <key>Class</key>
+                       <string>LineGraphic</string>
+                       <key>Head</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>59</integer>
+                       </dict>
+                       <key>ID</key>
+                       <integer>48</integer>
+                       <key>Points</key>
+                       <array>
+                               <string>{134.5, 351.5}</string>
+                               <string>{186, 384}</string>
+                               <string>{232.0000137968691, 
341.49999999999989}</string>
+                       </array>
+                       <key>Style</key>
+                       <dict>
+                               <key>stroke</key>
+                               <dict>
+                                       <key>HeadArrow</key>
+                                       <string>FilledArrow</string>
+                                       <key>Legacy</key>
+                                       <true/>
+                                       <key>LineType</key>
+                                       <integer>1</integer>
+                                       <key>TailArrow</key>
+                                       <string>0</string>
+                               </dict>
+                       </dict>
+                       <key>Tail</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>42</integer>
+                       </dict>
+               </dict>
+               <dict>
+                       <key>Class</key>
+                       <string>LineGraphic</string>
+                       <key>Head</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>59</integer>
+                       </dict>
+                       <key>ID</key>
+                       <integer>47</integer>
+                       <key>Points</key>
+                       <array>
+                               <string>{186, 301.25}</string>
+                               <string>{211, 307}</string>
+                               <string>{232.0000137968691, 
341.49999999999989}</string>
+                       </array>
+                       <key>Style</key>
+                       <dict>
+                               <key>stroke</key>
+                               <dict>
+                                       <key>HeadArrow</key>
+                                       <string>FilledArrow</string>
+                                       <key>Legacy</key>
+                                       <true/>
+                                       <key>LineType</key>
+                                       <integer>1</integer>
+                                       <key>TailArrow</key>
+                                       <string>0</string>
+                               </dict>
+                       </dict>
+                       <key>Tail</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>37</integer>
+                       </dict>
+               </dict>
+               <dict>
+                       <key>Class</key>
+                       <string>LineGraphic</string>
+                       <key>Head</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>37</integer>
+                       </dict>
+                       <key>ID</key>
+                       <integer>45</integer>
+                       <key>Points</key>
+                       <array>
+                               <string>{83, 159}</string>
+                               <string>{42, 222}</string>
+                               <string>{83, 301.25}</string>
+                       </array>
+                       <key>Style</key>
+                       <dict>
+                               <key>stroke</key>
+                               <dict>
+                                       <key>HeadArrow</key>
+                                       <string>FilledArrow</string>
+                                       <key>Legacy</key>
+                                       <true/>
+                                       <key>LineType</key>
+                                       <integer>1</integer>
+                                       <key>TailArrow</key>
+                                       <string>0</string>
+                               </dict>
+                       </dict>
+                       <key>Tail</key>
+                       <dict>
+                               <key>ID</key>
+                               <integer>18</integer>
+                       </dict>
+               </dict>
+               <dict>
+                       <key>Bounds</key>
+                       <string>{{428, 317}, {103, 33.5}}</string>
+                       <key>Class</key>
+                       <string>ShapedGraphic</string>
+                       <key>ID</key>
+                       <integer>44</integer>
+                       <key>Magnets</key>
+                       <array>
+                               <string>{0, 1}</string>
+                               <string>{0, -1}</string>
+                               <string>{1, 0}</string>
+                               <string>{-1, 0}</string>
+                       </array>
+                       <key>Shape</key>
+                       <string>Rectangle</string>
+                       <key>Text</key>
+                       <dict>
+                               <key>Text</key>
+                               
<string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 Trampoline #4}</string>
+                       </dict>
+               </dict>
+               <dict>
+                       <key>Bounds</key>
+                       <string>{{428, 284.5}, {103, 33.5}}</string>
+                       <key>Class</key>
+                       <string>ShapedGraphic</string>
+                       <key>ID</key>
+                       <integer>43</integer>
+                       <key>Magnets</key>
+                       <array>
+                               <string>{1, 0}</string>
+                               <string>{-1, 0}</string>
+                       </array>
+                       <key>Shape</key>
+                       <string>Rectangle</string>
+                       <key>Text</key>
+                       <dict>
+                               <key>Text</key>
+                               
<string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 Trampoline #3}</string>
+                       </dict>
+               </dict>
+               <dict>
+                       <key>Bounds</key>
+                       <string>{{83, 318}, {103, 33.5}}</string>
+                       <key>Class</key>
+                       <string>ShapedGraphic</string>
+                       <key>ID</key>
+                       <integer>42</integer>
+                       <key>Magnets</key>
+                       <array>
+                               <string>{0, 1}</string>
+                               <string>{0, -1}</string>
+                               <string>{1, 0}</string>
+                               <string>{-1, 0}</string>
+                       </array>
+                       <key>Shape</key>
+                       <string>Rectangle</string>
+                       <key>Text</key>
+                       <dict>
+                               <key>Text</key>
+                               
<string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 Trampoline #2}</string>
+                       </dict>
+               </dict>
+               <dict>
+                       <key>Bounds</key>
+                       <string>{{575.00001069962946, 254.25000040105692}, {85, 
47}}</string>
+                       <key>Class</key>
+                       <string>ShapedGraphic</string>
+                       <key>ID</key>
+                       <integer>41</integer>
+                       <key>Magnets</key>
+                       <array>
+                               <string>{1, 0}</string>
+                               <string>{-1, 0}</string>
+                       </array>
+                       <key>Shape</key>
+                       <string>Cloud</string>
+                       <key>Style</key>
+                       <dict/>
+                       <key>Text</key>
+                       <dict>
+                               <key>Text</key>
+                               
<string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 backend map #3}</string>
+                       </dict>
+               </dict>
+               <dict>
+                       <key>Bounds</key>
+                       <string>{{575, 350.24999618530273}, {85, 47}}</string>
+                       <key>Class</key>
+                       <string>ShapedGraphic</string>
+                       <key>ID</key>
+                       <integer>40</integer>
+                       <key>Magnets</key>
+                       <array>
+                               <string>{1, 0}</string>
+                               <string>{-1, 0}</string>
+                       </array>
+                       <key>Shape</key>
+                       <string>Cloud</string>
+                       <key>Style</key>
+                       <dict/>
+                       <key>Text</key>
+                       <dict>
+                               <key>Text</key>
+                               
<string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 backend map #4}</string>
+                       </dict>
+               </dict>
+               <dict>
+                       <key>Bounds</key>
+                       <string>{{-46, 338.25}, {85, 47}}</string>
+                       <key>Class</key>
+                       <string>ShapedGraphic</string>
+                       <key>ID</key>
+                       <integer>39</integer>
+                       <key>Magnets</key>
+                       <array>
+                               <string>{1, 0}</string>
+                               <string>{-1, 0}</string>
+                       </array>
+                       <key>Shape</key>
+                       <string>Cloud</string>
+                       <key>Style</key>
+                       <dict/>
+                       <key>Text</key>
+                       <dict>
+                               <key>Text</key>
+                               
<string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 backend map #2}</string>
+                       </dict>
+               </dict>
+               <dict>
+                       <key>Bounds</key>
+                       <string>{{-46, 245.25}, {85, 47}}</string>
+                       <key>Class</key>
+                       <string>ShapedGraphic</string>
+                       <key>ID</key>
+                       <integer>38</integer>
+                       <key>Magnets</key>
+                       <array>
+                               <string>{1, 0}</string>
+                               <string>{-1, 0}</string>
+                       </array>
+                       <key>Shape</key>
+                       <string>Cloud</string>
+                       <key>Style</key>
+                       <dict/>
+                       <key>Text</key>
+                       <dict>
+                               <key>Text</key>
+                               
<string>{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 backend map #1}</string>
+                       </dict>
+               </dict>
+               <dict>
+                       <key>Bounds</key>
+                       <string>{{83, 284.5}, {103, 33.5}}</string>
+                       <key>Class</key>
+                       <string>ShapedGraphic</string>
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to