diff --git a/2019-write-the-docs-paris-python-translation.md b/2019-write-the-docs-paris-python-translation.md
new file mode 100644
index 0000000..431a7d0
--- /dev/null
+++ b/2019-write-the-docs-paris-python-translation.md
@@ -0,0 +1,207 @@
+# docs.python.org/fr
+
+
+
+
+
+Julien Palard
+
+WriteTheDocs Paris 2019
+
+
+## Julien Palard
+
+- Python core dev and documentation expert
+- Python teacher and coach at:
+ - Sup'Internet
+ - CRI-Paris
+ - Makina Corpus
+ - …
+
+
+## History
+
+![](static/french.python.png)
+
+
+## History
+
+- Python is 28 years old,
+- its doc is written in reStructuredText,
+- compiled in HTML, PDF, epub, txt using Sphinx,
+- more than one million words,
+- daily changes.
+
+Notes:
+28 years old as of 2019 (first release 1991).
+
+More than "daily" for 3.7 stable: 170 commits on Doc/ over 120 days.
+
+
+## History
+
+- 2000: Project frpython on sourceforge
+- 2001: Translating Python 2.0
+- 2007: Python Doc moves from Latex to Sphinx & rst
+- 2010: GSoC Project to add i18n to Sphinx
+- 2011: 2% translated on pottle.python.org
+- 2012: pottle dead, AFPy team migrates to github
+- 2015-12: Resurected the project, alone for one year
+- 2016-03: docs.python.org/fr/ on python-ideas.
+- 2017-03: PEP 545
+
+Notes:
+
+2000: Latex to Latex, scripté en Python 1.5.2 (populaire à l'époque)
+2007: Hello Sphinx, created for Python by Georg Brandl, now used by many like Linux Kernel
+2012: Few people contributed during a month, and left for two years.
+2015: Alone for one year
+
+https://lists.afpy.org/mailman/private/afpy-membres/2012-September/005747.html
+http://frpython.sourceforge.net/
+
+
+## 2000
+
+![](static/sourceforge.png)
+
+Notes: https://web.archive.org/web/20010302160925/http://sourceforge.net/projects/frpython
+
+
+## 2001
+
+![](static/2.0.png)
+
+Notes: http://quentel.pierre.free.fr/python-trad/intro.html
+
+
+## 2012
+
+![](static/pottle.png)
+
+
+## 2019
+
+![](static/docs.python.org.png)
+
+
+## Progression
+
+![](static/fr_translation_percent.png)
+
+Notes:
+- 2016 jan: very short untranslatable strings
+- 2016 june: autofill whatsnew.po
+- 2017: PEP 545
+
+# How do we work?
+
+Mandatory meet point is:
+
+ `github.com/python/python-docs-*`
+
+But every language can use their own tools as long as they push on the meet point.
+
+
+## How do we work?
+
+- Some are using Transifex (ja, zh, pt_BR, ko, ...)
+- Some are using git (fr, it, es)
+- One could use any other tool…
+
+Notes:
+The french fries team (fr,it,es) is using git.
+
+
+## How do we work, in France?
+
+github and pull requests
+
+![](static/prs.png)
+
+----
+
+## How do we work, in France?
+
+It allows us to review and give feedback
+
+![](static/support.png)
+
+----
+
+## But git is hard!
+
+Yes.
+
+Note: But it looks like it's the mandatory way to contribute to most
+open source projects. We want to make the translation a way to learn
+how to contribute to an open source project. It's like a git sandbox :)
+
+Also it allows offline work that a lot of us do (in the train).
+
+
+# Tools
+
+How do we cope with:
+
+- Around 500 ``.po`` files,
+- more than one million words,
+- 45k paragraphs,
+- french in reStructuredText in gettext imbrication?
+
+```
+#: ../Doc/library/stdtypes.rst:373
+msgid "the greatest :class:`~numbers.Integral` <= *x*"
+msgstr "le plus grand :class:`~numbers.Integral` <= *x*"
+```
+
+## Tools
+
+### pypi.org/p/pospell
+
+``pospell`` is a tool using hunspell to spell check inside a
+``.po`` file while ignoring reStructuredText syntax.
+
+
+## Tools
+
+### pypi.org/p/powrap
+
+``powrap`` is a tool using ``msgcat`` to rewrap all ``.po`` files to a
+fixed width of 79 columns. We're enforcing this wrapping via the CI to
+reduce the noise in git logs.
+
+
+## Tools
+
+### pypi.org/p/potodo
+
+``potodo`` helps us listing what still needs to be done in this mess
+of 500 files. It also synchroniszes with github issues to tell if
+someone is already working on a file, avoiding conflicts.
+
+
+## Tools
+
+### pypi.org/p/pomerge
+
+``pomerge`` helps us propagating translations from a branch to another,
+from a repo to another, or simply from a file to another.
+
+
+## Tools
+
+### poautofill
+
+``poautofill`` uses automatic translation to translate a whole file.
+This is bad from so many aspects, but it just helps me to avoid
+spending time trying to remember some vocabulary when I'm offline.
+
+
+# Et après ?
+
+Venez nous aider :
+
+- Sur github.com/python/python-docs-fr
+- Aux ateliers mensuels (meetup AFPy Paris)
+- Au sprint (2 jours) à La PyCon Fr à Bordeaux à partir du 31 oct 2019.
diff --git a/2019-write-the-docs-paris-python-translation.py b/2019-write-the-docs-paris-python-translation.py
new file mode 100644
index 0000000..548f711
--- /dev/null
+++ b/2019-write-the-docs-paris-python-translation.py
@@ -0,0 +1,141 @@
+from matplotlib import pyplot as plt
+import datetime
+
+"""Using something like:
+for i in $(seq -w 01 12)
+do
+ git clean -dfqx >/dev/null
+ git checkout -- . >/dev/null
+ git checkout $(git log 3.9 --after "2020-$i-01" | grep ^commit | tail -n 1 | cut -d' ' -f2)
+ git show | head -n 3
+ python -c 'import sys; print("{:.1%}".format(int(sys.argv[1]) / int(sys.argv[2])))' \
+ $(ls -1 *.po */*.po | grep -v 'whatsnew/changelog\|whatsnew/2\|whatsnew/3.[0-8]' | xargs msgcat | msgattrib --translated | grep -c '^msgid') \
+ $(ls -1 *.po */*.po | grep -v 'whatsnew/changelog\|whatsnew/2\|whatsnew/3.[0-8]' | xargs msgcat | grep -c '^msgid')
+done
+"""
+
+
+plt.xkcd()
+
+# According to `make progress`
+
+progress = {
+ datetime.date(2012, 10, 1): 0,
+ datetime.date(2012, 12, 1): 4,
+ datetime.date(2013, 12, 1): 4,
+ datetime.date(2014, 11, 1): 4,
+ datetime.date(2015, 12, 1): 5,
+ datetime.date(2016, 1, 4): 6, # f8933be
+ datetime.date(2016, 2, 1): 15, # very short untranslatable strings
+ datetime.date(2016, 3, 4): 16, # 18c7d86
+ datetime.date(2016, 4, 12): 17, # 4616b26
+ datetime.date(2016, 5, 1): 18, # dd31bac
+ datetime.date(2016, 6, 13): 20, # d16d992
+ datetime.date(2016, 7, 3): 20, # 9e52ea9
+ datetime.date(2016, 10, 17): 20, # efc39ad...
+ # Changement de repo
+ datetime.date(2016, 11, 5): 19, # e61fde28
+ datetime.date(2017, 1, 17): 19, # 384a9e5c
+ datetime.date(2017, 3, 5): 19.3, # 384a9e5c
+ datetime.date(2017, 4, 2): 19.5,
+ datetime.date(2017, 5, 10): 20,
+ datetime.date(2017, 6, 1): 21.3,
+ datetime.date(2017, 7, 6): 22.2,
+ datetime.date(2017, 8, 1): 22.2,
+ datetime.date(2017, 9, 5): 23.3,
+ datetime.date(2017, 10, 2): 24.5,
+ datetime.date(2017, 11, 5): 26.5,
+ datetime.date(2017, 12, 1): 27.1,
+ datetime.date(2018, 1, 4): 27.3,
+ datetime.date(2018, 1, 30): 27.8,
+ datetime.date(2018, 3, 1): 27.8,
+ datetime.date(2018, 5, 21): 29.9,
+ datetime.date(2018, 7, 2): 30,
+ datetime.date(2018, 8, 1): 33,
+ datetime.date(2018, 9, 15): 33.2,
+ datetime.date(2018, 11, 1): 37.6,
+ datetime.date(2018, 12, 7): 39.6,
+ datetime.date(2019, 1, 2): 40.1,
+ datetime.date(2019, 2, 3): 41,
+ datetime.date(2019, 3, 1): 43.2,
+ datetime.date(2019, 4, 2): 44.6,
+ datetime.date(2019, 5, 6): 45,
+ datetime.date(2019, 6, 3): 45.6,
+ datetime.date(2019, 7, 2): 47.1,
+ datetime.date(2019, 8, 13): 47.4,
+ datetime.date(2019, 9, 3): 49.4,
+ datetime.date(2019, 9, 30): 47.9, # Coût du passage en 3.8
+ datetime.date(2019, 10, 2): 47.9,
+ datetime.date(2019, 11, 1): 48.5,
+ datetime.date(2019, 12, 1): 48.8,
+ datetime.date(2020, 1, 2): 49.6,
+ datetime.date(2020, 2, 1): 50.0,
+ datetime.date(2020, 3, 3): 50.9,
+ datetime.date(2020, 4, 1): 51.1,
+ datetime.date(2020, 5, 1): 51.4,
+ datetime.date(2020, 6, 5): 53.2,
+ datetime.date(2020, 7, 1): 53.4,
+ datetime.date(2020, 8, 4): 52.8,
+ datetime.date(2020, 9, 9): 53.4,
+ datetime.date(2020, 10, 1): 54.1,
+ datetime.date(2020, 11, 6): 54.1,
+ datetime.date(2020, 12, 2): 54.1,
+ datetime.date(2021, 2, 2): 54.0,
+ datetime.date(2021, 3, 1): 54.4,
+ datetime.date(2021, 4, 1): 54.8,
+ datetime.date(2021, 5, 4): 55.1,
+ datetime.date(2021, 6, 4): 56.2,
+ datetime.date(2021, 7, 14): 56.4,
+ datetime.date(2021, 8, 5): 56.4,
+ datetime.date(2021, 9, 6): 56.4,
+ datetime.date(2021, 11, 1): 58,
+ datetime.date(2022, 1, 1): 58.2,
+ datetime.date(2022, 4, 5): 58.1,
+}
+
+plt.rcParams["figure.figsize"] = (20, 10)
+
+f, ax = plt.subplots(1)
+ax.plot_date(list(progress.keys()), list(progress.values()), linestyle="-")
+ax.annotate(
+ "Bump to 3.10",
+ (datetime.date(2021, 9, 24), 56.4),
+ xytext=(datetime.date(2021, 9, 24), 40),
+ arrowprops={"arrowstyle": "->"},
+)
+ax.annotate(
+ "Bump to 3.9",
+ (datetime.date(2020, 8, 4), 52.8),
+ xytext=(datetime.date(2020, 6, 5), 35),
+ arrowprops={"arrowstyle": "->"},
+)
+ax.annotate(
+ "Bump to 3.8",
+ (datetime.date(2019, 9, 30), 47.9),
+ xytext=(datetime.date(2019, 9, 4), 30),
+ arrowprops={"arrowstyle": "->"},
+)
+ax.annotate(
+ "Meetups AFPy mensuels",
+ (datetime.date(2018, 9, 1), 29.4),
+ xytext=(-10, -40),
+ textcoords="offset points",
+ arrowprops={"arrowstyle": "->"},
+)
+ax.annotate(
+ "/python/python-docs-fr/",
+ (datetime.date(2016, 11, 5), 23.5),
+ xytext=(-100, 50),
+ textcoords="offset points",
+ arrowprops={"arrowstyle": "->"},
+)
+ax.annotate(
+ "Working on very short strings",
+ (datetime.date(2016, 1, 15), (6 + 16) / 2),
+ xytext=(-10, -50),
+ textcoords="offset points",
+ arrowprops={"arrowstyle": "->"},
+)
+plt.ylabel("%")
+ax.set_ylim(ymin=0)
+plt.savefig("fr_translation_percent.png")
diff --git a/static/2.0.png b/static/2.0.png
new file mode 100644
index 0000000..849fd26
Binary files /dev/null and b/static/2.0.png differ
diff --git a/static/2002.png b/static/2002.png
new file mode 100644
index 0000000..12a964c
Binary files /dev/null and b/static/2002.png differ
diff --git a/static/docs.python.org.png b/static/docs.python.org.png
new file mode 100644
index 0000000..abcf616
Binary files /dev/null and b/static/docs.python.org.png differ
diff --git a/static/fr_translation_percent.png b/static/fr_translation_percent.png
new file mode 100644
index 0000000..845b3dc
Binary files /dev/null and b/static/fr_translation_percent.png differ
diff --git a/static/french.python.png b/static/french.python.png
new file mode 100644
index 0000000..23e2add
Binary files /dev/null and b/static/french.python.png differ
diff --git a/static/pottle.png b/static/pottle.png
new file mode 100644
index 0000000..04c2b34
Binary files /dev/null and b/static/pottle.png differ
diff --git a/static/prs.png b/static/prs.png
new file mode 100644
index 0000000..ca770f4
Binary files /dev/null and b/static/prs.png differ
diff --git a/static/sourceforge.png b/static/sourceforge.png
new file mode 100644
index 0000000..009d296
Binary files /dev/null and b/static/sourceforge.png differ
diff --git a/static/support.png b/static/support.png
new file mode 100644
index 0000000..fc499cb
Binary files /dev/null and b/static/support.png differ