diff --git a/document.tex b/document.tex new file mode 100644 index 0000000..ff2125e --- /dev/null +++ b/document.tex @@ -0,0 +1,595 @@ +\begin{frame} + + \titlepage + \centering + +\end{frame} + + +\begin{frame} + \begin{block}{This really happened...} + + \vspace{5mm} + \uncover<2->{Distributed version control using email, USB keys and CD-ROMS} +\end{block} + +\end{frame} + +\begin{frame} + \begin{block}{} +You developed some code and published an article + \end{block} + +\end{frame} + + + +\begin{frame} + \begin{block}{} +Now you've been invited to give a presentation + \end{block} + +\end{frame} + +\begin{frame} + \begin{block}{} +Presentations need pictures + \end{block} + +\end{frame} + +\begin{frame} + \begin{block}{} +Re-run the analysis to get the images + \end{block} + +\end{frame} + +\begin{frame} + \begin{block}{} +The image in the article looked like + \end{block} + +\end{frame} + + +\begin{frame} + \begin{block}{} + \includegraphics[width=\columnwidth]{images/good} + \end{block} + +\end{frame} + +\begin{frame} + \begin{block}{} +With the same data it now looks like + \end{block} + +\end{frame} + +\begin{frame} + \begin{block}{} + \includegraphics[width=\columnwidth]{images/notgood} + \end{block} + +\end{frame} + + +\begin{frame} + \begin{block}{} + +\textit{This is less than ideal...} + \end{block} + +\end{frame} + + +\begin{frame} + \begin{block}{Either:} + \vspace{5mm} + \uncover<2->{The article is wrong and should be withdrawn}\\ + \vspace{5mm} + \uncover<3->{Since publication you have added a bug in the code}\\ + \end{block} +\end{frame} + + +\begin{frame} + \begin{block}{How can we know?} + \vspace{5mm} + \uncover<2->{Version control to the rescue!}\\ + \vspace{5mm} + \uncover<3->{The version used for the article was tagged as version 1.1}\\ + \end{block} +\end{frame} + + + +\begin{frame} + \begin{block}{} +\textit{git checkout version 1.1}\\ + \vspace{5mm} + \uncover<2->{\textit{and relax}} + \end{block} + \end{frame} + +\begin{frame} + \begin{block}{Tags} + \vspace{5mm} +\uncover<2->{This point in history is important enough to give it a special name} + \end{block} + +\end{frame} + +\begin{frame} + \begin{block}{} + \vspace{5mm} +\tiny +\tt + \uncover<1->{git tag -a v1.1 -m "As used to publish: Pumpkins for Biofuels, Smith et al. 2017"}\\ +\vspace{5mm} + \uncover<2->{git tag -a v1.2 -m "As used to publish: Turnips as a viable Pumpkin substitute? Smith et al. 2018"}\\ + +\end{block} +\end{frame} + + +\begin{frame} + \begin{block}{} +Next time add unit tests + \end{block} + +\end{frame} + + + + +\begin{frame} + \begin{block}{Repositories?} + \vspace{2mm} + \uncover<2->{gitlab}\\ + \vspace{2mm} + \uncover<3->{github}\\ + \vspace{2mm} + \uncover<4->{c4science}\\ + \vspace{2mm} + \uncover<5->{bitbucket}\\ + \end{block} +\end{frame} + +\begin{frame} + \begin{block}{} +\textit{Is it a bird? Is it a plane?} + \end{block} + +\end{frame} + + +\begin{frame} + \begin{block}{} +\textit{Is it a VCS in the cloud?} + \end{block} +\end{frame} + + +\begin{frame} + \begin{block}{Repositories for VCS} + \vspace{5mm} + \uncover<2->{Version control is good}\\ + \vspace{5mm} + \uncover<3->{Running a VCS server is less good}\\ + \vspace{5mm} + \uncover<4->{Use a dedicated service!}\\ + \end{block} +\end{frame} + + +\begin{frame} + \begin{block}{Repositories for Collaboration} + \vspace{5mm} + \uncover<2->{Now things get interesting} + \end{block} +\end{frame} + + +\begin{frame} + \begin{block}{} + \uncover<2->{1. Download code with FTP}\\ + \vspace{2mm} + \uncover<3->{2. Edit code and create a patch}\\ + \vspace{2mm} + \uncover<4->{3. Send patch to a mailing list}\\ + \vspace{2mm} + \uncover<5->{4. Await responses from the list}\\ + \vspace{2mm} + \uncover<6->{5. The maintainer adds the patch}\\ + \vspace{2mm} + \uncover<7->{6. GOTO 1}\\ + \end{block} +\end{frame} + + +\begin{frame} + \begin{block}{Repositories for Collaboration} + \vspace{5mm} + \uncover<2->{A shared workspace for collaborative development}\\ + \vspace{5mm} + \uncover<3->{Much more than a VCS} + + \end{block} +\end{frame} + +\begin{frame} + \begin{block}{} +A social network for coders? + \end{block} +\end{frame} + +\begin{frame} + \begin{block}{Repositories are now normal} + \vspace{5mm} + \uncover<2->{At a conference we suggest an improvement}\\ + \vspace{5mm} + \uncover<3->{\textit{Make a pull request!}} + + \end{block} +\end{frame} + +\begin{frame} + \begin{block}{Altruistic coding?} + \vspace{5mm} + \uncover<2->{Anybody can improve or fix things}\\ + + \end{block} +\end{frame} + + +\begin{frame} + \begin{block}{} +Need a new feature? + \end{block} +\end{frame} + +\begin{frame} + \begin{block}{} +Found a useful tool? + \end{block} +\end{frame} + +\begin{frame} + \begin{block}{Eigen} + \vspace{5mm} + \uncover<2->{If you use C++ and matrices you probably want Eigen}\\ + \vspace{5mm} + \uncover<3->{Initially one academic developer}\\ + \vspace{5mm} + \uncover<4->{Then a second came along}\\ + \vspace{5mm} + \uncover<5->{Now 2 core developers and 150+ contributors}\\ + \end{block} +\end{frame} + +\begin{frame} + \begin{block}{} +Look at the commit history + \end{block} +\end{frame} + +\begin{frame} + \begin{block}{} +Intital commit + + \end{block} +\end{frame} + +\begin{frame} + \begin{block}{} + \vspace{5mm} +\tiny +\tt +commit 3036eeca0abfee39d2a0feab4ae3ff1d28975999\\ +Author: Benoit Jacob \\ +Date: Wed May 30 06:24:51 2007 +0000\\ + \vspace{5mm} +Starting Eigen 2 development. The current plan is to use\\ the last +release of tvmet (inactive for 2 years \\and developer unreachable) as the + basis for eigen2, because it provides seemingly good expression template + mechanisms, we want that, and it would take years to reinvent that + wheel.\\ We'll see. So this commit imports the last tvmet release. +\normalsize +\end{block} +\end{frame} + +\begin{frame} + \begin{block}{} +4th commit + + \end{block} +\end{frame} + + + +\begin{frame} + \begin{block}{} + \vspace{5mm} +\tiny +\tt +commit 7947ae0e502d4a71b5db19e582399a17d5647273\\ +Author: Benoit Jacob \\ +Date: Wed May 30 12:14:09 2007 +0000\\ + \vspace{5mm} + A TODO to motivate hundreds of hackers to help \\ with Eigen 2 development.\\ + \vspace{2mm} + Cheesy slashdot joke included.\\ +\normalsize +\end{block} +\end{frame} + +\begin{frame} + \begin{block}{} +Repositories don't have to be open to everybody + \end{block} +\end{frame} + +\begin{frame} + \begin{block}{} + \vspace{5mm} + \uncover<1->{Write code and publish a paper }\\ + \vspace{5mm} + \uncover<2->{Keep developing the code for the next article}\\ + \vspace{5mm} + \uncover<3->{What do you want to make public?}\\ + \vspace{5mm} + \end{block} +\end{frame} + + + +% Technical and political aspects + + +\begin{frame} + \begin{block}{} +The commit history shows how your code developed + \end{block} +\end{frame} + + +\begin{frame} + \begin{block}{} + \vspace{5mm} +\tiny +\tt +commit 1234567890abcdefghijklmnopqrstuvwxyz\\ +Author: Bob Smith \\ +Date: Wed May 13 17:11:09 2018 +0000\\ + \vspace{5mm} + Fix the scaling algorithm - it's been wrong \\ since the beginning but + amazingly no-one\\ has noticed until now.\\ + \normalsize +\end{block} +\end{frame} + +\begin{frame} + \begin{block}{} + \vspace{5mm} +\tiny +\tt +commit 0234567890abcdefghijklmnopqrstuvwxyz\\ +Author: Bob Smith \\ +Date: Wed May 28 09:32:09 2018 +0000\\ + \vspace{5mm} + Initial release of the BioCode package by the \\ Smith lab at the + ETH Lausanne. \\www.ethl.ch/smithlab + \normalsize +\end{block} +\end{frame} + + +\begin{frame} + \begin{block}{External contributions?} + \vspace{5mm} + \uncover<2->{Once open it's difficult to rewrite history}\\ + \vspace{5mm} + \uncover<3->{The commit is the acknowledgement!} + \end{block} +\end{frame} + +\begin{frame} + \begin{block}{Public and private?} + \vspace{5mm} + \uncover<2->{One repository for the public}\\ + \vspace{5mm} + \uncover<3->{Another for private development}\\ + \vspace{5mm} + \uncover<4->{This looks like gitflow} + \end{block} +\end{frame} + +% Example here + + + +\begin{frame} + \begin{block}{Recent history} + \vspace{5mm} + \uncover<2->{Google code}\\ + \vspace{5mm} + \uncover<3->{Sourceforge} + \end{block} +\end{frame} + + +\begin{frame} + \begin{block}{} +Google code is no more\\ +\vspace{5mm} +\tiny +\tt +Google Code was launched in 2006, with the goal of making it easier to collaborate with others on open-source software. +It offered Subversion, Mercurial, and Git source code hosting. It soon expanded to offer wikis, downloads, and even issue tracking.\\ +\vspace{2mm} +But alas, in 2015 Google bid farewell to the service, which had since been eclipsed by other, richer open-source project hosting providers.\\ + +\normalsize +\end{block} +\end{frame} + +\begin{frame} + \begin{block}{} +Sourceforge: from poster-boy to pariah in one easy takeover.\\ + \vspace{5mm} + \uncover<2->{1999-2012: The place to be seen}\\ + \vspace{5mm} + \uncover<3->{2012-20??: The place to avoid} +\end{block} +\end{frame} + +\begin{frame} + \begin{block}{Near future} + \vspace{5mm} + \uncover<2->{Microsoft}\\ + \vspace{5mm} + \uncover<3->{LinkedIn}\\ + \vspace{5mm} + \uncover<4->{GitHub}\\ + + \end{block} +\end{frame} + +\begin{frame} + \begin{block}{} + \uncover<1->{The terms and conditions for free services can and will change.}\\ + \vspace{5mm} + \uncover<2->{You are the product}\\ + + \end{block} +\end{frame} + +\begin{frame} + \begin{block}{Don't get trapped} + \vspace{5mm} +\uncover<1->{ c4science/gitlab/other and mirror to github?} + \end{block} +\end{frame} + +\begin{frame} + \begin{block}{Eigen} + \vspace{5mm} +\uncover<1->{Bitbucket and Github}\\ + \vspace{5mm} + \small +\uncover<2->{bitbucket.org/eigen/eigen}\\ + \vspace{2mm} +\uncover<2->{github.com/eigenteam/eigen-git-mirror}\\ +\normalsize + + \end{block} +\end{frame} + +\begin{frame} + \begin{block}{Quantum Espresso} + \vspace{5mm} +\uncover<1->{Gitlab and Github}\\ + \vspace{5mm} + \small +\uncover<2->{gitlab.com/QEF/q-e}\\ + \vspace{2mm} +\uncover<2->{github.com/QEF/q-e}\\ +\normalsize + + \end{block} +\end{frame} + + + +\begin{frame} + \begin{block}{Repositories are not} + \vspace{5mm} + \uncover<2->{data stores}\\ + \vspace{5mm} + \uncover<3->{libraries}\\ + \vspace{5mm} + \uncover<4->{archives}\\ + \end{block} +\end{frame} + + + +\begin{frame} + \begin{block}{} + Can we reference a tag from a repository? + \end{block} +\end{frame} + +\begin{frame} + \begin{block}{} + \tiny +\textit{In order to estimate the turnip supply needed to replace pumpkins for traditional biofuel applications we use the BioCode package (2)}\\ + +\textit{[2] BioCode v0.3 www.c4science.ch/BioCode/source/tags/v0.3} +\normalsize + \end{block} +\end{frame} + + +\begin{frame} + \begin{block}{} + \tiny +\textit{Einstein, A. \\ + \vspace{5mm} +\"{U}ber einen die Erzeugung und Verwandlung des Lichtes betreffenden heuristischen Gesichtspunkt\\ + \vspace{5mm} +Zentralbibliothek Z\"{u}rich} +\normalsize + \end{block} +\end{frame} + + +\begin{frame} + \begin{block}{} + \tiny +\textit{Einstein, A. \\ + \vspace{5mm} +\"{U}ber einen die Erzeugung und Verwandlung des Lichtes betreffenden heuristischen Gesichtspunkt (\emph{1905})\\ + \vspace{5mm} +Annalen der Physik 322 s.132-148 } +\normalsize + \end{block} +\end{frame} + +\begin{frame} + \begin{block}{} + \uncover<1->{Author}\\ + \vspace{2mm} + \uncover<2->{Title}\\ + \vspace{2mm} + \uncover<3->{Date}\\ + \vspace{2mm} + \uncover<4->{Journal}\\ + \vspace{2mm} + \uncover<5->{Volume}\\ + \vspace{2mm} + \uncover<6->{Pages}\\ + \end{block} +\end{frame} + +\begin{frame} + \begin{block}{What can we do?} + \vspace{5mm} + \uncover<2->{Digital Object Identifier (DOI)}\\ + \vspace{5mm} + \uncover<3->{JOSS}\\ + \vspace{5mm} + \uncover<4->{Zenodo}\\ + \vspace{5mm} +\uncover<5->{Digital Archives?}\\ + \vspace{5mm} + \end{block} +\end{frame} + +% THE END + +\begin{frame} +\end{frame} + diff --git a/images/good.png b/images/good.png new file mode 100644 index 0000000..102a7f1 Binary files /dev/null and b/images/good.png differ diff --git a/images/notgood.png b/images/notgood.png new file mode 100644 index 0000000..0e71937 Binary files /dev/null and b/images/notgood.png differ diff --git a/slides.tex b/slides.tex new file mode 100644 index 0000000..971d756 --- /dev/null +++ b/slides.tex @@ -0,0 +1,40 @@ +\documentclass[20pt, xcolor={usenames,dvipsnames}]{beamer} + +\usepackage{alltt} + +\usepackage{color} +\usepackage{graphicx} +\usepackage[utf8]{inputenc} + +\hypersetup{ + pdftitle={Version control and collaborative research}, + pdfauthor={SCITAS}, + colorlinks=true, + urlcolor=darkgray +} + +\beamertemplatenavigationsymbolsempty + +\setbeamercolor{title}{fg=black} +\setbeamercolor{author}{fg=darkgray} + +\title{Version control and collaborative research} + +\author{SCITAS} + + +\institute{\'{E}cole Polytechnique F\'{e}d\'{e}rale de Lausanne} +\date{} + + +\defbeamertemplate{itemize item}{hollow circle}{$\circ$} +\setbeamertemplate{itemize item}[hollow circle] +\setbeamercolor{itemize item}{fg=gray} + +\setbeamercolor{structure}{fg=darkgray} % itemize, enumerate, etc + + +\begin{document} +\input{document} +\end{document} + diff --git a/slides_20181204.pdf b/slides_20181204.pdf new file mode 100644 index 0000000..ed864ff Binary files /dev/null and b/slides_20181204.pdf differ