diff --git a/document.tex b/document.tex index ff2125e..b199b94 100644 --- a/document.tex +++ b/document.tex @@ -1,595 +1,615 @@ \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} + \uncover<2->{Distributed, asynchronous 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} +\begin{frame} + \begin{block}{} + \begin{center} + \includegraphics[height=7cm]{images/gitflow} + \end{center} + \end{block} + +\end{frame} + + +\begin{frame} + \begin{block}{} + \begin{center} + \includegraphics[width=\columnwidth]{images/gitflow_zoom} + \end{center} + \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} +Zentralbibliothek Z\"{u}rich, 3 Stock, Bücherschrank 283, Brett 5 } \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/gitflow.png b/images/gitflow.png new file mode 100644 index 0000000..5b96426 Binary files /dev/null and b/images/gitflow.png differ diff --git a/images/gitflow_zoom.png b/images/gitflow_zoom.png new file mode 100644 index 0000000..ba53657 Binary files /dev/null and b/images/gitflow_zoom.png differ