[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
01/04: talks: Add Guix-Jupyter talk at FOSDEM.
From: |
Ludovic Courtès |
Subject: |
01/04: talks: Add Guix-Jupyter talk at FOSDEM. |
Date: |
Sun, 2 Feb 2020 17:33:22 -0500 (EST) |
civodul pushed a commit to branch master
in repository maintenance.
commit 9c805c574da50e5e4e30ff7b73ba8827c0a0e756
Author: Ludovic Courtès <address@hidden>
AuthorDate: Tue Jan 28 21:54:22 2020 +0100
talks: Add Guix-Jupyter talk at FOSDEM.
* talks/fosdem-2020/guix-jupyter: New directory.
---
.../guix-jupyter/images/Guix-horizontal-print.pdf | 1 +
.../guix-jupyter/images/binder-config-files.png | Bin 0 -> 114020 bytes
.../guix-jupyter/images/conda-broke-tweet.png | 1 +
.../fosdem-2020/guix-jupyter/images/container.png | Bin 0 -> 37688 bytes
talks/fosdem-2020/guix-jupyter/images/delorean.jpg | 1 +
.../guix-jupyter/images/delorean.small.jpg | Bin 0 -> 101462 bytes
talks/fosdem-2020/guix-jupyter/images/download.png | Bin 0 -> 92474 bytes
.../images/eelco-pointer-discipline.png | Bin 0 -> 205041 bytes
.../guix-jupyter/images/environment.png | Bin 0 -> 95262 bytes
.../guix-jupyter/images/guix-jupyter.png | Bin 0 -> 29196 bytes
.../images/guixhpc-logo-transparent.pdf | 1 +
.../images/inria-logo-inverse-en-2017.pdf | 1 +
.../guix-jupyter/images/inria-white-2019.pdf | Bin 0 -> 2095 bytes
.../guix-jupyter/images/jupyter-matplotlib.png | Bin 0 -> 53572 bytes
.../guix-jupyter/images/jupyter-select-kernel.png | Bin 0 -> 22573 bytes
.../guix-jupyter/images/mybinder-web.png | Bin 0 -> 73441 bytes
talks/fosdem-2020/guix-jupyter/images/pin.png | Bin 0 -> 35153 bytes
.../guix-jupyter/images/pip-install-photo.png | Bin 0 -> 453583 bytes
.../guix-jupyter/images/pip-install-scared.png | Bin 0 -> 48857 bytes
talks/fosdem-2020/guix-jupyter/rules.ini | 9 +
talks/fosdem-2020/guix-jupyter/talk.tex | 330 +++++++++++++++++++++
21 files changed, 344 insertions(+)
diff --git a/talks/fosdem-2020/guix-jupyter/images/Guix-horizontal-print.pdf
b/talks/fosdem-2020/guix-jupyter/images/Guix-horizontal-print.pdf
new file mode 120000
index 0000000..7979fc7
--- /dev/null
+++ b/talks/fosdem-2020/guix-jupyter/images/Guix-horizontal-print.pdf
@@ -0,0 +1 @@
+../../../aramis-2019/images/Guix-horizontal-print.pdf
\ No newline at end of file
diff --git a/talks/fosdem-2020/guix-jupyter/images/binder-config-files.png
b/talks/fosdem-2020/guix-jupyter/images/binder-config-files.png
new file mode 100644
index 0000000..8dfd782
Binary files /dev/null and
b/talks/fosdem-2020/guix-jupyter/images/binder-config-files.png differ
diff --git a/talks/fosdem-2020/guix-jupyter/images/conda-broke-tweet.png
b/talks/fosdem-2020/guix-jupyter/images/conda-broke-tweet.png
new file mode 120000
index 0000000..b16d2ef
--- /dev/null
+++ b/talks/fosdem-2020/guix-jupyter/images/conda-broke-tweet.png
@@ -0,0 +1 @@
+../../../aramis-2019/images/conda-broke-tweet.png
\ No newline at end of file
diff --git a/talks/fosdem-2020/guix-jupyter/images/container.png
b/talks/fosdem-2020/guix-jupyter/images/container.png
new file mode 100644
index 0000000..0cbb088
Binary files /dev/null and
b/talks/fosdem-2020/guix-jupyter/images/container.png differ
diff --git a/talks/fosdem-2020/guix-jupyter/images/delorean.jpg
b/talks/fosdem-2020/guix-jupyter/images/delorean.jpg
new file mode 120000
index 0000000..436ba7b
--- /dev/null
+++ b/talks/fosdem-2020/guix-jupyter/images/delorean.jpg
@@ -0,0 +1 @@
+../../../aramis-2019/images/delorean.jpg
\ No newline at end of file
diff --git a/talks/fosdem-2020/guix-jupyter/images/delorean.small.jpg
b/talks/fosdem-2020/guix-jupyter/images/delorean.small.jpg
new file mode 100644
index 0000000..96abe47
Binary files /dev/null and
b/talks/fosdem-2020/guix-jupyter/images/delorean.small.jpg differ
diff --git a/talks/fosdem-2020/guix-jupyter/images/download.png
b/talks/fosdem-2020/guix-jupyter/images/download.png
new file mode 100644
index 0000000..f1de2c9
Binary files /dev/null and b/talks/fosdem-2020/guix-jupyter/images/download.png
differ
diff --git a/talks/fosdem-2020/guix-jupyter/images/eelco-pointer-discipline.png
b/talks/fosdem-2020/guix-jupyter/images/eelco-pointer-discipline.png
new file mode 100644
index 0000000..6388c26
Binary files /dev/null and
b/talks/fosdem-2020/guix-jupyter/images/eelco-pointer-discipline.png differ
diff --git a/talks/fosdem-2020/guix-jupyter/images/environment.png
b/talks/fosdem-2020/guix-jupyter/images/environment.png
new file mode 100644
index 0000000..8e86269
Binary files /dev/null and
b/talks/fosdem-2020/guix-jupyter/images/environment.png differ
diff --git a/talks/fosdem-2020/guix-jupyter/images/guix-jupyter.png
b/talks/fosdem-2020/guix-jupyter/images/guix-jupyter.png
new file mode 100644
index 0000000..ce8ec5a
Binary files /dev/null and
b/talks/fosdem-2020/guix-jupyter/images/guix-jupyter.png differ
diff --git a/talks/fosdem-2020/guix-jupyter/images/guixhpc-logo-transparent.pdf
b/talks/fosdem-2020/guix-jupyter/images/guixhpc-logo-transparent.pdf
new file mode 120000
index 0000000..24d0d8e
--- /dev/null
+++ b/talks/fosdem-2020/guix-jupyter/images/guixhpc-logo-transparent.pdf
@@ -0,0 +1 @@
+../../../aramis-2019/images/guixhpc-logo-transparent.pdf
\ No newline at end of file
diff --git
a/talks/fosdem-2020/guix-jupyter/images/inria-logo-inverse-en-2017.pdf
b/talks/fosdem-2020/guix-jupyter/images/inria-logo-inverse-en-2017.pdf
new file mode 120000
index 0000000..bd998e0
--- /dev/null
+++ b/talks/fosdem-2020/guix-jupyter/images/inria-logo-inverse-en-2017.pdf
@@ -0,0 +1 @@
+../../../aramis-2019/images/inria-logo-inverse-en-2017.pdf
\ No newline at end of file
diff --git a/talks/fosdem-2020/guix-jupyter/images/inria-white-2019.pdf
b/talks/fosdem-2020/guix-jupyter/images/inria-white-2019.pdf
new file mode 100644
index 0000000..06de984
Binary files /dev/null and
b/talks/fosdem-2020/guix-jupyter/images/inria-white-2019.pdf differ
diff --git a/talks/fosdem-2020/guix-jupyter/images/jupyter-matplotlib.png
b/talks/fosdem-2020/guix-jupyter/images/jupyter-matplotlib.png
new file mode 100644
index 0000000..7d4f2b9
Binary files /dev/null and
b/talks/fosdem-2020/guix-jupyter/images/jupyter-matplotlib.png differ
diff --git a/talks/fosdem-2020/guix-jupyter/images/jupyter-select-kernel.png
b/talks/fosdem-2020/guix-jupyter/images/jupyter-select-kernel.png
new file mode 100644
index 0000000..b23cd8d
Binary files /dev/null and
b/talks/fosdem-2020/guix-jupyter/images/jupyter-select-kernel.png differ
diff --git a/talks/fosdem-2020/guix-jupyter/images/mybinder-web.png
b/talks/fosdem-2020/guix-jupyter/images/mybinder-web.png
new file mode 100644
index 0000000..39d22fa
Binary files /dev/null and
b/talks/fosdem-2020/guix-jupyter/images/mybinder-web.png differ
diff --git a/talks/fosdem-2020/guix-jupyter/images/pin.png
b/talks/fosdem-2020/guix-jupyter/images/pin.png
new file mode 100644
index 0000000..6231006
Binary files /dev/null and b/talks/fosdem-2020/guix-jupyter/images/pin.png
differ
diff --git a/talks/fosdem-2020/guix-jupyter/images/pip-install-photo.png
b/talks/fosdem-2020/guix-jupyter/images/pip-install-photo.png
new file mode 100644
index 0000000..637e0ad
Binary files /dev/null and
b/talks/fosdem-2020/guix-jupyter/images/pip-install-photo.png differ
diff --git a/talks/fosdem-2020/guix-jupyter/images/pip-install-scared.png
b/talks/fosdem-2020/guix-jupyter/images/pip-install-scared.png
new file mode 100644
index 0000000..61f997f
Binary files /dev/null and
b/talks/fosdem-2020/guix-jupyter/images/pip-install-scared.png differ
diff --git a/talks/fosdem-2020/guix-jupyter/rules.ini
b/talks/fosdem-2020/guix-jupyter/rules.ini
new file mode 100644
index 0000000..5a74423
--- /dev/null
+++ b/talks/fosdem-2020/guix-jupyter/rules.ini
@@ -0,0 +1,9 @@
+;; Rules for Rubber.
+
+[dot-pdf]
+target = (.*)\.pdf
+source = \1.dot
+rule = shell
+cost = 0
+command = dot -Tpdf -Gratio=.78 -o $target $source
+message = rendering $source into $target
diff --git a/talks/fosdem-2020/guix-jupyter/talk.tex
b/talks/fosdem-2020/guix-jupyter/talk.tex
new file mode 100644
index 0000000..a6571b4
--- /dev/null
+++ b/talks/fosdem-2020/guix-jupyter/talk.tex
@@ -0,0 +1,330 @@
+% The comment below tells Rubber to compile the .dot files.
+%
+% rubber: module graphics
+% rubber: rules rules.ini
+
+% Make sure URLs are broken on hyphens.
+% See <https://tex.stackexchange.com/questions/3033/forcing-linebreaks-in-url>.
+\RequirePackage[hyphens]{url}
+
+\documentclass[aspectratio=169]{beamer}
+
+\usetheme{default}
+
+\usefonttheme{structurebold}
+
+% Nice sans-serif font.
+\usepackage[sfdefault,lining]{FiraSans} %% option 'sfdefault' activates Fira
Sans as the default text font
+%% \usepackage[fakebold]{firamath-otf}
+\renewcommand*\oldstylenums[1]{{\firaoldstyle #1}}
+
+% Nice monospace font.
+\usepackage{inconsolata}
+%% \renewcommand*\familydefault{\ttdefault} %% Only if the base font of the
document is to be typewriter style
+\usepackage[T1]{fontenc}
+
+\usepackage{helvet}
+\usecolortheme{seagull} % white on black
+
+\usepackage[utf8]{inputenc}
+\PassOptionsToPackage{hyphens}{url}\usepackage{hyperref,xspace,multicol}
+
+\usepackage[absolute,overlay]{textpos}
+\usepackage{tikz}
+\usetikzlibrary{arrows,shapes,trees,shadows,positioning}
+\usepackage{fancyvrb} % for '\Verb'
+\usepackage{xifthen} % for '\isempty'
+
+% Remember the position of every picture.
+\tikzstyle{every picture}+=[remember picture]
+
+\tikzset{onslide/.code args={<#1>#2}{%
+ \only<#1>{\pgfkeysalso{#2}} % \pgfkeysalso doesn't change the path
+}}
+
+% Colors.
+\definecolor{guixred1}{RGB}{226,0,38} % red P
+\definecolor{guixorange1}{RGB}{243,154,38} % guixorange P
+\definecolor{guixyellow}{RGB}{254,205,27} % guixyellow P
+\definecolor{guixred2}{RGB}{230,68,57} % red S
+\definecolor{guixred3}{RGB}{115,34,27} % dark red
+\definecolor{guixorange2}{RGB}{236,117,40} % guixorange S
+\definecolor{guixtaupe}{RGB}{134,113,127} % guixtaupe S
+\definecolor{guixgrey}{RGB}{91,94,111} % guixgrey S
+\definecolor{guixdarkgrey}{RGB}{46,47,55} % guixdarkgrey S
+\definecolor{guixblue1}{RGB}{38,109,131} % guixblue S
+\definecolor{guixblue2}{RGB}{10,50,80} % guixblue S
+\definecolor{guixgreen1}{RGB}{133,146,66} % guixgreen S
+\definecolor{guixgreen2}{RGB}{157,193,7} % guixgreen S
+
+\setbeamerfont{title}{size=\huge}
+\setbeamerfont{frametitle}{size=\huge}
+\setbeamerfont{normal text}{size=\Large}
+
+% White-on-black color theme.
+\setbeamercolor{structure}{fg=guixorange1,bg=black}
+\setbeamercolor{title}{fg=white,bg=black}
+\setbeamercolor{date}{fg=guixorange1,bg=black}
+\setbeamercolor{frametitle}{fg=white,bg=black}
+\setbeamercolor{titlelike}{fg=white,bg=black}
+\setbeamercolor{normal text}{fg=white,bg=black}
+\setbeamercolor{alerted text}{fg=guixyellow,bg=black}
+\setbeamercolor{section in toc}{fg=white,bg=black}
+\setbeamercolor{section in toc shaded}{fg=white,bg=black}
+\setbeamercolor{subsection in toc}{fg=guixorange1,bg=black}
+\setbeamercolor{subsection in toc shaded}{fg=white,bg=black}
+\setbeamercolor{subsubsection in toc}{fg=guixorange1,bg=black}
+\setbeamercolor{subsubsection in toc shaded}{fg=white,bg=black}
+\setbeamercolor{frametitle in toc}{fg=white,bg=black}
+\setbeamercolor{local structure}{fg=guixorange1,bg=black}
+
+\newcommand{\highlight}[1]{\alert{\textbf{#1}}}
+
+\title{Towards Reproducible Jupyter Notebooks}
+
+\author{Ludovic Courtès\\Pierre-Antoine Rouby}
+\date{\small{FOSDEM\\ \oldstylenums{02/02/2020}}}
+
+\setbeamertemplate{navigation symbols}{} % remove the navigation bar
+
+\AtBeginSection[]{
+ \begin{frame}
+ \frametitle{}
+ \tableofcontents[currentsection]
+ \end{frame}
+}
+
+
+\newcommand{\screenshot}[2][width=\paperwidth]{
+ \begin{frame}[plain]
+ \begin{tikzpicture}[remember picture, overlay]
+ \node [at=(current page.center), inner sep=0pt]
+ {\includegraphics[{#1}]{#2}};
+ \end{tikzpicture}
+ \end{frame}
+}
+
+
+\begin{document}
+
+\begin{frame}[plain, fragile]
+ \vspace{10mm}
+ \Huge{\textbf{Towards Reproducible\\ Jupyter Notebooks}}
+ \\[2cm]
+ \large{Ludovic Courtès, Pierre-Antoine Rouby}
+ \\[2mm]
+ \alert{FOSDEM, \oldstylenums{02/02/2020}}
+
+ \vfill{}
+ \hfill{\includegraphics[width=0.2\paperwidth]{images/inria-white-2019}}
+ \vspace{2mm}
+\end{frame}
+
+
+\setbeamercolor{normal text}{bg=guixred3}
+\begin{frame}[plain]
+ \Huge{Jupyter = reproducible science\uncover<2->{?}}
+\end{frame}
+
+\setbeamercolor{normal text}{bg=white}
+\screenshot{images/jupyter-matplotlib}
+\screenshot{images/pip-install-scared}
+%% \screenshot{images/conda-broke-tweet}
+\screenshot{images/mybinder-web}
+\screenshot{images/binder-config-files}
+
+
+\setbeamercolor{normal text}{bg=guixblue2}
+\begin{frame}[plain]
+ \Huge{What if notebooks were self-contained, ``deployment-aware''?}
+\end{frame}
+
+%% \setbeamercolor{normal text}{bg=white}
+%% \begin{frame}[plain]
+%%
\center{\includegraphics[width=0.6\textwidth]{images/Guix-horizontal-print}}\\[1.0cm]
+%% \end{frame}
+
+\setbeamercolor{normal text}{bg=guixtaupe}
+\begin{frame}[fragile]%{``Virtual environments''}
+ \LARGE{
+ \begin{semiverbatim}
+\$ guix \alert{environment} --ad-hoc \\
+ python python-numpy python-scipy \\
+ -- python3
+ \end{semiverbatim}
+ }
+\end{frame}
+
+\setbeamercolor{normal text}{bg=white}
+\begin{frame}[plain, fragile]
+ \center{\includegraphics[width=0.35\textwidth]{images/guix-jupyter}}
+
+ \begin{tikzpicture}[overlay]
+ \node[text=guixdarkgrey, anchor=south, at=(current page.south),
+ inner sep=3mm]
+
{\url{https://hpc.guix.info/blog/2019/10/towards-reproducible-jupyter-notebooks}};
+ \end{tikzpicture}
+
+\end{frame}
+
+\screenshot{images/jupyter-select-kernel}
+\screenshot{images/environment}
+
+\begin{frame}[fragile]
+ \begin{tikzpicture}[remember picture, overlay]
+ %
https://commons.wikimedia.org/wiki/File:TeamTimeCar.com-BTTF_DeLorean_Time_Machine-OtoGodfrey.com-JMortonPhoto.com-07.jpg
+ \node [at=(current page.center), inner sep=0pt]
+ {\includegraphics[width=\paperwidth]{images/delorean}};
+ \node [rounded corners=4, text centered, anchor=north,
+ text width=10cm,
+ inner sep=3mm, opacity=.75, text opacity=1]
+ at (current page.center) {
+ \textbf{\Huge{travel in space \emph{and} time!}}
+ };
+ \end{tikzpicture}
+\end{frame}
+
+\screenshot{images/pin}
+
+
+\screenshot{images/container}
+\screenshot{images/download}
+\screenshot{images/eelco-pointer-discipline}
+
+\setbeamercolor{normal text}{bg=guixblue2}
+\begin{frame}[plain]
+ \Huge{\textbf{Wrap-up.}}
+\end{frame}
+
+
+\setbeamercolor{normal text}{bg=guixdarkgrey}
+\begin{frame}[plain]
+ \center{\Huge{\textbf{Guix-Jupyter =}}}\\[1cm]
+
+ \LARGE{
+ \begin{itemize}
+ \item \textbf{self-contained} notebooks
+ \item automatic \& \textbf{reproducible deployment}
+ \item code runs in \textbf{isolated environment}
+ \end{itemize}
+ }
+\end{frame}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\setbeamercolor{normal text}{bg=black}
+\begin{frame}[plain]
+
+\vfill{
+ \vspace{3cm}
+
\center{\includegraphics[width=0.5\textwidth]{images/guixhpc-logo-transparent}}\\[1.0cm]
+ \center{\alert{\url{https://hpc.guix.info}}} \\[0.2cm]
+ \texttt{address@hidden |} @GuixHPC
+ \\[1.2cm]
+}
+\end{frame}
+
+\setbeamercolor{normal text}{bg=guixgreen1}
+\begin{frame}[fragile]
+ \Huge{\textbf{Bonus slides!}}
+\end{frame}
+
+\setbeamercolor{normal text}{bg=white}
+\begin{frame}[fragile]
+ \begin{tikzpicture}[client/.style = {
+ text width=35mm, minimum height=2cm,
+ text centered,
+ rounded corners=2mm,
+ fill=guixorange1, text=white
+ },
+ kernel/.style = {
+ rectangle, text width=35mm, text centered,
+ rounded corners=2mm, minimum height=15mm,
+ top color=guixorange1,
+ bottom color=guixyellow,
+ text=black
+ }]
+ \matrix[row sep=3mm, column sep=1cm] {
+ & \node(jupyter)[client]{\large{\textbf{Jupyter}}}; & \\
+
+ & \node(guixjupyter)[client]{\large{Guix-Jupyter}}; & \\[1.2cm]
+
+ \node(kernel1)[kernel]{\large{IPykernel}}; &
+ \node(kernel2)[kernel]{\large{IRkernel}}; &
+ \node(kernel3)[kernel]{\large{IJulia}};
+ \\
+ };
+ \end{tikzpicture}
+
+ \begin{tikzpicture}[overlay]
+ \path[very thick, draw=guixorange1]
+ (jupyter.south) edge [->] (guixjupyter.north);
+ \path[very thick, draw=guixorange1]
+ (guixjupyter.south) edge [out=30, in=90, ->] (kernel1.north);
+ \path[very thick, draw=guixorange1]
+ (guixjupyter.south) edge [out=-100, in=90, ->] (kernel2.north);
+ \path[very thick, draw=guixorange1]
+ (guixjupyter.south) edge [out=-30, in=120, ->] (kernel3.north);
+ \end{tikzpicture}
+\end{frame}
+
+
+\setbeamercolor{normal text}{bg=guixdarkgrey}
+\begin{frame}
+ \Huge{\textbf{Open issues}}\\[2cm]
+
+ \Large{
+ \begin{itemize}
+ \item how can we improve the \textbf{user interface}?
+ \item should deployment be \textbf{built into Jupyter}?
+ \item what about \textbf{interoperability}?
+ \item ...
+ \end{itemize}
+ }
+\end{frame}
+
+
+\begin{frame}{}
+ \begin{textblock}{12}(2, 6)
+ \tiny{
+ Copyright \copyright{} 2010, 2012--2020 Ludovic Courtès
\texttt{address@hidden}.\\[3.0mm]
+ GNU Guix logo, CC-BY-SA 4.0, \url{https://gnu.org/s/guix/graphics}.
+ \\[1.5mm]
+ DeLorean time machine picture \copyright{} 2014 Oto Godfrey and
+ Justin Morton, CC-BY-SA 4.0,
+
\url{https://commons.wikimedia.org/wiki/File:TeamTimeCar.com-BTTF_DeLorean_Time_Machine-OtoGodfrey.com-JMortonPhoto.com-07.jpg}.
+ \\[1.5mm]
+ Copyright of other images included in this document is held by
+ their respective owners.
+ \\[3.0mm]
+ This work is licensed under the \alert{Creative Commons
+ Attribution-Share Alike 3.0} License. To view a copy of this
+ license, visit
+ \url{https://creativecommons.org/licenses/by-sa/3.0/} or send a
+ letter to Creative Commons, 171 Second Street, Suite 300, San
+ Francisco, California, 94105, USA.
+ \\[2.0mm]
+ At your option, you may instead copy, distribute and/or modify
+ this document under the terms of the \alert{GNU Free Documentation
+ License, Version 1.3 or any later version} published by the Free
+ Software Foundation; with no Invariant Sections, no Front-Cover
+ Texts, and no Back-Cover Texts. A copy of the license is
+ available at \url{https://www.gnu.org/licenses/gfdl.html}.
+ \\[2.0mm]
+ % Give a link to the 'Transparent Copy', as per Section 3 of the GFDL.
+ The source of this document is available from
+ \url{https://git.sv.gnu.org/cgit/guix/maintenance.git}.
+ }
+ \end{textblock}
+\end{frame}
+
+\end{document}
+
+% Local Variables:
+% coding: utf-8
+% comment-start: "%"
+% comment-end: ""
+% ispell-local-dictionary: "francais"
+% compile-command: "rubber --pdf talk.tex"
+% End:
+
+%% LocalWords: Reproducibility