\documentclass[aspectratio=169]{beamer} \usepackage{microtype} \usepackage{tikz} \usetikzlibrary{fit} \usepackage[style=verbose-ibid,url=false,natbib=true]{biblatex} \addbibresource{references.bib} \renewcommand*{\footnotesize}{\Tiny} \setlength{\footnotesep}{3pt} \definecolor{bngreen}{HTML}{3c8e64} \definecolor{bnorange}{HTML}{e08919} %\setbeamercolor*{structure}{bg=white,fg=bngreen} \usecolortheme[named=bngreen]{structure} \setbeamertemplate{navigation symbols}{} \setbeamertemplate{headline}{\hfill\includegraphics[width=.7cm]{logo-running}\hspace{0.1cm}\vspace{-.7cm}} \author{Justin Bed\H{o}\\WEHI} \title{\includegraphics[width=.7\linewidth]{logo}\\functional, reproducible bioinformatics workflows} \date{November 10, 2020} \begin{document} { \setbeamertemplate{headline}{} \begin{frame} \maketitle \end{frame} } \begin{frame} \frametitle{Core problems} \begin{enumerate} \item \emph{Managing software versions and dependencies}. \begin{itemize} \item Conda \item BioConda~\autocite{Grning2018} \item apt-get \end{itemize} \item \emph{Managing computational environments}. \begin{itemize} \item Docker \item Singularity \item \emph{virtual machines} \end{itemize} \item \emph{Managing workflows}. \begin{itemize} \item Toil~\autocite{toil} \item SnakeMake~\autocite{Koster2012} \item NextFlow~\autocite{di_tommaso_nextflow_2017} \end{itemize} \end{enumerate} \end{frame} \begin{frame}[label=dag] \begin{center} \begin{tikzpicture}[->,>=stealth,shorten >=1pt,auto,node distance=2cm,thick] \node (a) {align}; \node (s) [below of=a] {sort}; \node (c) [below of=s] {calling}; \path (a) edge node {} (s); \path (s) edge node {} (c); \pause \node (input) [above of=a] {input}; \path (input) edge node {} (a); \node (ref) [right of=a] {reference}; \path (ref) edge node {} (a); \node (db) [right of=c] {dbNSFP}; \path (db) edge node {} (c); \pause \node (bwa) [left of=a] {BWA}; \path (bwa) edge node {} (a); \node (samtools) [left of=s] {samtools}; \path (samtools) edge node {} (s); \node (platypus) [left of=c] {platypus}; \path (platypus) edge node {} (c); \pause \node (glib) [left of=samtools] {glibc,$\cdots$}; \node (python) [left of=platypus] {python}; \path (glib) edge node {} (bwa); \path (glib) edge node {} (samtools); \path (python) edge node {} (platypus); \path (glib) edge node {} (python); \pause \node[draw=bngreen, fit=(bwa) (samtools) (platypus) (glib) (python),label=containers](cont){}; \node[draw=bnorange, fit=(ref) (db),label=tarball](tar){}; \end{tikzpicture} \end{center} \end{frame} \begin{frame} \frametitle{Containers do not solve reproducibility} \begin{minipage}{.2\textwidth} \includegraphics[height=.9\textheight]{docker} \end{minipage} \begin{minipage}{.78\textwidth} \begin{enumerate} \item Shifts the problem \item Containers provide isolated distributable computational environments \item Overkill for reproducible bioinformatics: e.g., don't need virtualised networking (or even networks at all!) \end{enumerate} \end{minipage} \end{frame} \begin{frame} \frametitle{BioNix contributions} \begin{enumerate} \item Builds on Nix, a robust functional package manager \item Manages both software and workflows within the one system \item Implicitly specifies its entire computational environment \item Simple, purely functional domain-specific language, simplifying specifying workflows to function composition \item Typing to reduce errors~\autocite{Bed2019} \end{enumerate} \end{frame} \begin{frame} \frametitle{What is Nix?} \begin{enumerate} \item Simple configuration language (like JSON + functions) \item Build engine that \emph{realises} \emph{derivations} \item Derivations are complete descriptions for producing build products: all inputs and a build recipe \item Controlled \emph{side effects}\footnote{stuff not captured by the derivation}: none allowed during a build \item Output location unique and determined by hashing the derivation: i.e., hash based version management \item Deterministic $\Rightarrow$ reproducible \end{enumerate} \end{frame} \begin{frame} \frametitle{Example} \begin{minipage}{.4\textwidth} \includegraphics[width=.8\linewidth]{graph} \end{minipage} \begin{minipage}{.55\textwidth} \begin{overprint} \onslide<1>\includegraphics[width=\linewidth]{pipeline} \onslide<2>\includegraphics[width=.75\linewidth]{bwa-stage} \onslide<3>\includegraphics[width=\linewidth]{bwa-drv} \end{overprint} \end{minipage} \end{frame} \againframe<4>{dag} \begin{frame} \frametitle{Demo} \pause \includegraphics[width=\linewidth]{demo-graph} \end{frame} \end{document}