]> git.donarmstrong.com Git - using_make_for_science.git/blobdiff - using_make_for_science.Rnw
add relevant xkcd
[using_make_for_science.git] / using_make_for_science.Rnw
index 8ff99d10871fb6470e71e3d43a677c3f6518bc0e..9fd424a3eb6ce1d2514644c519653b8815cfd3fa 100644 (file)
@@ -89,6 +89,8 @@
 \subject{make for science}
 \begin{document}
 
+\IfFileExists{./relevant_xkcd.png}{\frame[plain]{\centering \includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{./relevant_xkcd.png}}}
+
 \frame[plain]{\titlepage}
 
 \mode<article>{\maketitle}
   \item Simple rules -- all of the rules are in a simple text file
     which is easily edited and version controlled
   \item Reasonable debugging -- you can see the commands that make is
-    going to run fairly easily: \mintinline{shell}{make -n tgt;}
+    going to run fairly easily: \mintinline{shell}{make -n target;}
   \item Parallel -- make can make targets in parallel:
     \mintinline{shell}{make -j8 all;}
   \item Language agnostic -- make doesn't care what language your code
@@ -200,7 +202,7 @@ TARGETS: PREREQUISITES
 \item Variables can come from the environment and can be overridden on
   the command line: \mintinline{shell}{make FOO=bleargh} or
   \mintinline{shell}{FOO=blah make}.
-\item \mintinline{make}{$@} -- tgt name %$
+\item \mintinline{make}{$@} -- target name %$
 \item \mintinline{make}{$*} -- current stem %$ 
 \item \mintinline{make}{$^} -- all prerequisites %$
 \item \mintinline{make}{$<} -- first prerequisite %$
@@ -230,17 +232,17 @@ TARGETS: PREREQUISITES
 
 \begin{frame}[fragile]{How does make know what to build?}
 \begin{minted}[showtabs]{make}
-first_tgt: 
+first_target: 
        touch $@
-second_tgt: first_tgt
+second_target: first_target
        touch $@
 \end{minted}
   \begin{itemize}
-  \item By default, make builds the first tgt.
-  \item You can specify a specific tgt to build on the command line
-    (\mintinline{shell}{make first_tgt}).
-  \item You can change the default tgt by using the variable
-    \mintinline{make}{.DEFAULT_GOAL := second_tgt}
+  \item By default, make builds the first target.
+  \item You can specify a specific target to build on the command line
+    (\mintinline{shell}{make first_target}).
+  \item You can change the default target by using the variable
+    \mintinline{make}{.DEFAULT_GOAL := second_target}
   \end{itemize}
 \end{frame}
 
@@ -252,12 +254,12 @@ second_tgt: first_tgt
 .PHONY: clean
 
 clean:
-       rm -f first_tgt second_tgt
+       rm -f first_target second_target
 \end{minted}
   \begin{itemize}
   \item \mintinline{make}{.PHONY} -- any time make considers this
-    tgt, it is run unconditionally, even if a file exists.
-  \item \mintinline{make}{.ONESHELL} -- when a tgt is built, all
+    target, it is run unconditionally, even if a file exists.
+  \item \mintinline{make}{.ONESHELL} -- when a target is built, all
     lines will be given to a single invocation of the shell.
   \item Lots of other special targets which are not described here.
   \end{itemize}
@@ -288,9 +290,12 @@ clean:
 \subsection{This Presentation}
 
 \begin{frame}[fragile]{How this presentation is made}
-\inputminted[showtabs]{make}{Makefile}
+\inputminted[showtabs,breaklines,firstline=3]{make}{Makefile}
+\end{frame}
+\begin{frame}[fragile]{How this presentation is made}
   \begin{itemize}
-  \item all is the default tgt
+  \item all is the default 
+  \item Download the optional relevant\_xkcd.png
   \item Make .tex files from the knitr source.
   \item The third rule uses latexmk to build the pdf using \XeLaTeX.
   \end{itemize}
@@ -335,7 +340,17 @@ FASTQ_FILES:=$(patsubst %,%_1.fastq.gz,$(SRRS))  $(patsubst %,%_2.fastq.gz,$(SRR
 endif
 
 make_fastq: $(FASTQ_FILES)
+\end{minted}
+%$
+\begin{itemize}
+\item Use ifeq/else/endif to handle paired reads differently from
+  unpaired reads
+\item FASTQ\_FILES is the full set of fastq files dumped from the SRAs.
+\end{itemize}
+\end{frame}
 
+\begin{frame}[fragile]{Calling records from SRA: Dumping fastq #2}
+\begin{minted}[showtabs,breaklines]{make}
 ifeq ($(NREADS),1)
 $(FASTQ_FILES): %.fastq.gz: %.sra
 else
@@ -346,8 +361,8 @@ endif
 \end{minted}
 %$
   \begin{itemize}
-  \item Call fastq-dump to dump the fastq files
   \item Handles NREADS of 1 and 2 differently
+  \item Call fastq-dump to dump the fastq files
   \end{itemize}
 \end{frame}
 
@@ -434,12 +449,17 @@ TARGET: PREREQ1 PREREQ1
 
 \subsection{Complicated Workflows}
 
-\begin{frame}{What about complicated workflows?}
+\begin{frame}[fragile]{What about complicated workflows?}
   \begin{itemize}
   \item If your workflow is really complicated, what then?
   \item Use some other language to write your workflow in
   \item Use a simple makefile which just runs the workflow
   \end{itemize}
+  \begin{minted}[showtabs,breaklines]{make}
+complicated_workflow_done: req1 req2 req3
+       ./complicated_workflow.sh $^;
+       touch $@;
+\end{minted}
 \end{frame}
 
 \section{Further Resources}