diff --git a/img/rdm-use-cases-a.dot b/img/rdm-use-cases-a.dot index 0182f9f24a60b5e76a4cac823ff2144bdd806812..137593ac0cc4f751ce0a0ff855b5f89c096719e2 100644 --- a/img/rdm-use-cases-a.dot +++ b/img/rdm-use-cases-a.dot @@ -34,9 +34,9 @@ digraph { paper_version_a[label = "nature-review-1"] } - script_version_a -> software_a_version_a [label = "\n\n", lhead = cluster_software_a] + script_version_a -> software_a_version_a [label = "\n\n"] - script_version_a -> software_b_version_a [label = "\n\n", lhead = cluster_software_b] + script_version_a -> software_b_version_a [label = "\n\n"] - paper_version_a -> script_version_a [label = "\n\n", lhead = cluster_script] + paper_version_a -> script_version_a [label = "\n\n"] } diff --git a/img/rdm-use-cases-b.dot b/img/rdm-use-cases-b.dot index 91e10b18ca0da08f664f1d05516d057bb849e2e0..84543afc2b10d9b7c3bdccddc277347cabf718a1 100644 --- a/img/rdm-use-cases-b.dot +++ b/img/rdm-use-cases-b.dot @@ -37,12 +37,12 @@ digraph { paper_version_b[label = "nature-review-2"] } - script_version_a -> software_a_version_a [label = "\n\n", lhead = cluster_software_a] - script_version_b -> software_a_version_a [label = "\n\n", lhead = cluster_software_a] + script_version_a -> software_a_version_a [label = "\n\n"] + script_version_b -> software_a_version_a [label = "\n\n"] - script_version_a -> software_b_version_a [label = "\n\n", lhead = cluster_software_b] - script_version_b -> software_b_version_b [label = "\n\n", lhead = cluster_software_b] + script_version_a -> software_b_version_a [label = "\n\n"] + script_version_b -> software_b_version_b [label = "\n\n"] - paper_version_a -> script_version_a [label = "\n\n", lhead = cluster_script] - paper_version_b -> script_version_b [label = "\n\n", lhead = cluster_script] + paper_version_a -> script_version_a [label = "\n\n"] + paper_version_b -> script_version_b [label = "\n\n"] } diff --git a/img/rdm-use-cases.dot b/img/rdm-use-cases.dot index 45fdd1095b36a657a040877165a59d4630248979..eefbc1c2ced646bc7d18026dab623a8f840e5af4 100644 --- a/img/rdm-use-cases.dot +++ b/img/rdm-use-cases.dot @@ -38,13 +38,13 @@ digraph { paper_version_c[label = "nature-final"] } - script_version_a -> software_a_version_a [label = "\n\n", lhead = cluster_software_a] - script_version_b -> software_a_version_a [label = "\n\n", lhead = cluster_software_a] + script_version_a -> software_a_version_a [label = "\n\n"] + script_version_b -> software_a_version_a [label = "\n\n"] - script_version_a -> software_b_version_a [label = "\n\n", lhead = cluster_software_b] - script_version_b -> software_b_version_b [label = "\n\n", lhead = cluster_software_b] + script_version_a -> software_b_version_a [label = "\n\n"] + script_version_b -> software_b_version_b [label = "\n\n"] - paper_version_a -> script_version_a [label = "\n\n", lhead = cluster_script] - paper_version_b -> script_version_b [label = "\n\n", lhead = cluster_script] - paper_version_c -> script_version_b [label = "\n\n", lhead = cluster_script] + paper_version_a -> script_version_a [label = "\n\n"] + paper_version_b -> script_version_b [label = "\n\n"] + paper_version_c -> script_version_b [label = "\n\n"] } diff --git a/rdm.html b/rdm.html new file mode 100644 index 0000000000000000000000000000000000000000..545da9cd0de53afe089d2a6d9aa067a76e2c78e5 --- /dev/null +++ b/rdm.html @@ -0,0 +1,498 @@ +<!DOCTYPE html> +<html> + <head> + <title>git@rdm</title> + <link rel="stylesheet" href="reveal.js/dist/reveal.css"> + <link rel="stylesheet" href="reveal.js/dist/theme/black.css"> + <link rel="stylesheet" href="css/company-logo.css" /> + <link rel="stylesheet" href="css/ribbon.css" /> + <link rel="stylesheet" href="css/crawl.css" /> + </head> + + <body> + <div class="reveal"> + <div class="slides"> + + <!--------------------------------------------------------------------- + <!-- intro + <!--------------------------------------------------------------------> + + <section> + <section id="title" data-markdown> + # git and rdm + ## (... and reproducibility) + + notes: + - `make -B` to create images, then reload + </section> + + <section id="intro-objectives" data-markdown> + ## objectives + + - show how git relates to RDM + - ... and reproducibility + </section> + + <section id="intro-agenda" data-markdown> + ## agenda + + 1. motivation + 1. ~~teach ***how*** to use git/GitHub/GitLab~~ + 1. use cases + 1. anti-patterns + 1. platforms + 1. Q & A + + notes: + - feel free to interrupt with immediate questions + - more involved detailed discussion as part of Q & A + </section> + + <section id="intro-version-control" data-markdown> + ## about version control + + > records changes + + what who when (why) + + notes: + - the **why** (aka context) is optional + - you have to do this + - you have to care about it + </section> + + <section id="intro-about-git" data-markdown> + ## about git + + ### best tool for the job + + - simple by design + - powerful if needed + - documentation / community + - industry standard + + notes: + - git name: "the stupid content tracker" + - doc: finding answers with web searches + </section> + + <section id="intro-about-me" data-markdown> + ## about me + + - scientific computing support @ iDiv since 2014 + - satisfied git user since 2010 + + > There will never be a better version control system than git. + > + > -- Christian Krause, 2017 + </section> + + <section id="intro-about-you" data-markdown> + ## about you + +  + + notes: + - who has never used any VCS before? + - who actively maintains a VCS repository? + </section> + </section> + + <!--------------------------------------------------------------------- + <!-- motivation + <!--------------------------------------------------------------------> + + <section> + <section id="motivation" data-markdown> + # motivation + + > Why should I use version control? + + notes: + - motivation chapter is about the concept of version control + - git is just a tool to do it + </section> + + <section id="motivation-avoid-mess" data-markdown> + ## motivation #1 + ### avoid mess + +  + + notes: + - who has seen such a mess? + - who has contributed to such a mess? + - who has created such a mess? + </section> + + <section id="motivation-want-structure" data-markdown> + ## motivation #1 + ### want structure + +  + + notes: + - structure: who, when + - why is hidden (only shows message header, not body) + - ability to inspect old versions and their diff + - ability to revert/undo a change + </section> + + <section id="motivation-playground" data-markdown> + ## motivation #2 + ### throw-away playgrounds + +  + + notes: + - test stuff without interfering + - throw away if garbage + - integrate if good + - switch back and forth without pain + </section> + + <section id="motivation-collaboration-1" data-markdown> + ## motivation #c + ### collaboration made easy + + <!-- do not fix this typo, it is here on purpose to show collab --> + > This text cntains a typo. + + notes: + - demo GitLab (change **target branch** to create merge request) + - this is how you can do reviews of drafts + - discuss this slide/chapter/section link + </section> + + <section id="motivation-collaboration-2" data-markdown> + ## motivation #c + +  + + notes: + - might not seem like much + - but you are still making the world a better place + - and it is not too much effort + </section> + + <section id="motivation-automation" data-markdown> + ## motivation #a + ### automation + + - ***quality*** + - **code analysis** + - **spell check** + - **software testing** + - enforce **style guide** + - ***deployment*** (app store, web server) + + notes: + - basically, everything you can script + - refresh presentation before next slide + </section> + + <section class="star-wars" id="motivation-wars"> + <div class="crawl"> + <div class="title"> + <h1>motivation #wars</h1> + </div> + + <div data-markdown> + 1. view the ***history*** of changes + + 1. know ***why*** someone changed it + + 1. ***revert*** a bad change + + 1. maintain ***multiple versions*** + + 1. see the ***diff*** of two versions + + 1. find commit ***that broke*** something + + 1. have free ***backup*** + + 1. have ***non-interfering*** playgrounds + + 1. have ***automated*** testing + + 1. have ***automated*** deployment + + 1. ***contribute*** to a project + + 1. ***share*** your code + + 1. let other people do the work ***for you*** + </div> + + <img src="http://i.giphy.com/90F8aUepslB84.gif" /> + </div> + </section> + </section> + + <!--------------------------------------------------------------------- + <!-- use cases + <!--------------------------------------------------------------------> + + <section> + <section id="use-cases" data-markdown> + # use cases + ##### for + ### version control system (vcs) + ##### aka + ### source code management (scm) + </section> + + <section id="use-case-software" data-markdown> + ## software + + - generic (as in parameterized) + - (ideally) tested + + notes: + - e.g. R package + </section> + + <section id="use-case-scripting" data-markdown> + ## scripting + ##### aka + ### how to run `$software` + + - ... in `$environment` + - digital lab notes + - **reproducibility** !!1! + - execution scalability + + notes: + - separate software from scripting + - `$enviroment`: multiple scripts/configurations for different + environments: + - EasyBuild, conda, singularity + - RStudio server, HPC cluster + - execution scalability: running software or script without having + to change it + - keep failed attempts in branches + - e.g. highly parameterized software, make a record of bad + parameter sets + </section> + + <section id="use-case-publishing" data-markdown> + # publishing + ### (markdown (with some tex)) + + - paper / thesis / book + - presentation + - documentation + - blog + + notes: + - who is using markdown? + - who is using tex? + - who is using word? why? + - markdown with tex + - git.idiv.de/help + - search for markdown + - search for math + - show example + </section> + + <section id="use-case-integrated-1" data-markdown> + ## integration + +  + + notes: + - software A: tried and tested, reference to compare to + - software B: your experimental better version + </section> + + <section id="use-case-integrated-2" data-markdown> + ## integration + +  + </section> + + <section id="use-case-integrated-3" data-markdown> + ## integration + +  + </section> + + <section id="use-case-integrated-data" data-markdown> + ## integration + +  + </section> + </section> + + <!--------------------------------------------------------------------- + <!-- anti patterns + <!--------------------------------------------------------------------> + + <section> + <section id="anti-patterns" data-markdown> + # anti-patterns + +  + + notes: + - does anyone know what an anti-pattern is? + </section> + + <section id="anti-patterns-def" data-markdown> + # anti-patterns + + > An anti-pattern is a common response to a recurring problem that + is usually ineffective and risks being highly counterproductive. + + notes: + - most anti-patterns about how to use git + - focus here is on these relating to RDM and reproducibility + </section> + + <section id="anti-pattern-binary" data-markdown> + # binary files + ### (aka non-text) + + - no diff with binary + - use textual representation + - convert with automation + + notes: + - can someone give me an example of text file? + - markdown + - source code, scripts (R, shell) + - XSV + - can someone give me an example of binary file? + - compiled programs + - MS word excel + - PDF PS + - don't just put everything in the repo, use *ignore + </section> + + <section id="anti-pattern-big-data" data-markdown> + # data in git + ## (scientific/big data) + + - version control for data is **DIFF**erent !!1! + - git is VCS for text, not for data + + notes: + - do you release data with every script change? no, too expensive + - you don't ever put data files in a git repository + - not even with LFS + - big ball of mud, no metadata + </section> + </section> + + <!--------------------------------------------------------------------- + <!-- platforms + <!--------------------------------------------------------------------> + + <section> + <section id="platforms-list" data-markdown> + # platforms + + - GitHub + - https://github.com/idiv-biodiversity (cloud) + - GitLab + - https://gitlab.com (cloud) + - https://git.idiv.de (self-hosted @ iDiv) + </section> + + <section id="platforms-purpose" data-markdown> + # platforms + + - enable collaboration + - bug tracker / feature requests + - documentation / wiki + - project management tools + - issue boards, milestones, gantt + - trigger automation + - publish/download releases + </section> + </section> + + <!--------------------------------------------------------------------- + <!-- q & a + <!--------------------------------------------------------------------> + + <section> + <section id="q-n-a" data-markdown> + # Q & A + + notes: + - walk through examples of software/script/publishing + - walk through one of your use cases + - demo consulting + </section> + + <section id="consulting" data-markdown> + # consulting + + [christian.krause@idiv.de](mailto:christian.krause@idiv.de) + </section> + </section> + + <!--------------------------------------------------------------------- + <!-- eof + <!--------------------------------------------------------------------> + + <section id="eof" data-background="img/trex.png" data-markdown> + ### thanks for listening + # EOF + </section> + + <!--------------------------------------------------------------------- + <!-- backup + <!--------------------------------------------------------------------> + + <section> + <section id="backup" data-markdown> + # backup slides + </section> + + <section id="empty" data-markdown> + </section> + </section> + </div> + </div> + + <!------------------------------------------------------------------------- + <!-- css/js + <!------------------------------------------------------------------------> + + <!-- company logo --> + + <div class="logo-wrapper"> + <a href="https://www.idiv.de/"> + <img src="img/company-logo-small.png" /> + </a> + </div> + + <!-- ribbon --> + + <div class="ribbon-wrapper right"> + <div class="ribbon"> + <a href="https://git.idiv.de/sc/edu/git-seminar/edit/master/basics.html" + target="_blank"> + edit + </a> + </div> + </div> + + <!-- reveal.stuff --> + + <script src="reveal.js/dist/reveal.js"></script> + <script src="reveal.js/plugin/highlight/highlight.js"></script> + <script src="reveal.js/plugin/markdown/markdown.js"></script> + <script src="reveal.js/plugin/notes/notes.js"></script> + + <script> + Reveal.initialize({ + hash: true, + plugins: [RevealHighlight, RevealMarkdown, RevealNotes] + }); + </script> + </body> +</html>