diff --git a/03-Thr/README.md b/03-Thr/README.md index 415f9ee3..c8fefaa3 100644 --- a/03-Thr/README.md +++ b/03-Thr/README.md @@ -1,11 +1,6 @@ # Thursday tutorials -## Tutorial 1 -- Presenter: +## Open Science and Reproducible Workflows +- Presenter: Andy Teucher - Presentation materials: - [YouTube recording]() - -## Tutorial 2 -- Presenter: -- Presentation materials: -- [YouTube recording]() diff --git a/03-Thr/open-science/.gitignore b/03-Thr/open-science/.gitignore new file mode 100644 index 00000000..567ef0e5 --- /dev/null +++ b/03-Thr/open-science/.gitignore @@ -0,0 +1,4 @@ +/.quarto/ +**/*.quarto_ipynb +/slides_files/ +slides.html diff --git a/03-Thr/open-science/img/CARE-1.png b/03-Thr/open-science/img/CARE-1.png new file mode 100644 index 00000000..c0e61a2f Binary files /dev/null and b/03-Thr/open-science/img/CARE-1.png differ diff --git a/03-Thr/open-science/img/CARE-2.png b/03-Thr/open-science/img/CARE-2.png new file mode 100644 index 00000000..17744d89 Binary files /dev/null and b/03-Thr/open-science/img/CARE-2.png differ diff --git a/03-Thr/open-science/img/CARE.png b/03-Thr/open-science/img/CARE.png new file mode 100644 index 00000000..d35b6163 Binary files /dev/null and b/03-Thr/open-science/img/CARE.png differ diff --git a/03-Thr/open-science/img/FAIR.png b/03-Thr/open-science/img/FAIR.png new file mode 100644 index 00000000..fbf76374 Binary files /dev/null and b/03-Thr/open-science/img/FAIR.png differ diff --git a/03-Thr/open-science/img/FNIGC-OCAP.png b/03-Thr/open-science/img/FNIGC-OCAP.png new file mode 100644 index 00000000..6e9d047e Binary files /dev/null and b/03-Thr/open-science/img/FNIGC-OCAP.png differ diff --git a/03-Thr/open-science/img/julia-logo.svg b/03-Thr/open-science/img/julia-logo.svg new file mode 100644 index 00000000..e54ed4f1 --- /dev/null +++ b/03-Thr/open-science/img/julia-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/03-Thr/open-science/img/python-logo.png b/03-Thr/open-science/img/python-logo.png new file mode 100644 index 00000000..738f6ed4 Binary files /dev/null and b/03-Thr/open-science/img/python-logo.png differ diff --git a/03-Thr/open-science/img/r-logo.png b/03-Thr/open-science/img/r-logo.png new file mode 100644 index 00000000..be48e307 Binary files /dev/null and b/03-Thr/open-science/img/r-logo.png differ diff --git a/03-Thr/open-science/img/tooling-people.png b/03-Thr/open-science/img/tooling-people.png new file mode 100644 index 00000000..b18c4a0c Binary files /dev/null and b/03-Thr/open-science/img/tooling-people.png differ diff --git a/03-Thr/open-science/outline.md b/03-Thr/open-science/outline.md new file mode 100644 index 00000000..b2576425 --- /dev/null +++ b/03-Thr/open-science/outline.md @@ -0,0 +1,35 @@ +## What is Open Science + +- Open Data +- Open Source tools +- Open Code +- Open Access publications + +## Open Data + +### FAIR Principles + +### CARE Principles + +## Open Source Tools + +## Open Code + +### Reproducible Workflows + +https://andyteucher.ca/pc-intermediate-r/workflows.html + +- Open Data +- Programmatic analysis (e.g., R, Python, Julia) +- Version Control +- Dependency management (e.g., uv/pixi/conda, renv) +- Literate Programming (https://andyteucher.ca/pc-intermediate-r/quarto.html) +- Containerization (e.g., Docker) + +### Licensing + +https://andyteucher.ca/pc-intermediate-r/git-github.html?q=license#/choose-a-license + +## Resources + +Checklists: https://github.com/oceanhackweek/ohwyy_proj_template/issues diff --git a/03-Thr/open-science/slides.qmd b/03-Thr/open-science/slides.qmd new file mode 100644 index 00000000..ba32d92f --- /dev/null +++ b/03-Thr/open-science/slides.qmd @@ -0,0 +1,184 @@ +--- +title: "Open Science and Reproducible Workflows" +format: + revealjs: + theme: [moon, slides.scss] +--- + +## What is Open Science + +> The principles of open science are to make ... scientific research +> transparent, available, and reproducible.\ +> - **NASA Open Science** + +- [Open Data\*]{.fragment .bold-in fragment-index=1} +- [Open Source tools\*]{.fragment .bold-in fragment-index=1} +- [Open Code\*]{.fragment .bold-in fragment-index=1} +- Open Access publications + +[**\*Open Data Science**]{.fragment fragment-index=1} + +::: notes +- Reproducibility is the key +- Not just for peers and the scientific community, but important for + collaboration +- You will always have at least one collaborator - your future self +::: + +## Open Data Science + +[**The tooling and people enabling reproducible, transparent, and inclusive +practices for data-intensive science**]{.small} + +![](img/tooling-people.png) + +::: notes +**A beautiful feedback loop:** Using similar tooling promotes and streamlines +teamwork. And teamwork better equips you to learn new tooling. With this shared +mindset, the idea of team becomes ever-broadening, along with your abilities to +adapt to an evolving softwarescape. +::: + +# Open Data + +## FAIR Principles + +::: {.columns} +::::: {.column width="40%"} +- **F**indable +- **A**ccessible +- **I**nteroperable +- **R**eusable +::::: + +::::: {.column width="60%"} +![](img/FAIR.png){height="500px"} : +::::: +::: + + + +## CARE Principles + +![](img/CARE.png) + + + +::: notes +emphasis on greater data sharing creates a tension for Indigenous Peoples who +are also asserting greater control over the application and use of Indigenous +data and Indigenous Knowledge for collective benefit. + +- FAIR is mostly about how data is managed and stored, while CARE is about how + data is used and shared with respect to Indigenous Peoples. + +Collective Benefit Data ecosystems shall be designed and function in ways that +enable Indigenous Peoples to derive benefit from the data. + +Authority to Control Indigenous Peoples' rights and interests in Indigenous data +must be recognised and their authority to control such data be empowered. +Indigenous data governance enables Indigenous Peoples and governing bodies to +determine how Indigenous Peoples, as well as Indigenous lands, territories, +resources, knowledges and geographical indicators, are represented and +identified within data. + +Responsibility Those working with Indigenous data have a responsibility to share +how those data are used to support Indigenous Peoples' self determination and +collective benefit. Accountability requires meaningful and openly available +evidence of these efforts and the benefits accruing to Indigenous Peoples. + +Ethics Indigenous Peoples' rights and wellbeing should be the primary concern at +all stages of the data life cycle and across the data ecosystem. +::: + +-------------------------------------------------------------------------------- + +![](img/CARE-1.png) + +[Reused under CC-BY 4.0 license, from +https://www.gida-global.org/careprinciples](https://static1.squarespace.com/static/5d3799de845604000199cd24/t/640792a43ba5c11a1073bbc8/1678217895508/TheCAREPrinciples.pdf){.small} + +-------------------------------------------------------------------------------- + +![](img/CARE-2.png) + +[Reused under CC-BY 4.0 license, from +https://www.gida-global.org/careprinciples](https://static1.squarespace.com/static/5d3799de845604000199cd24/t/640792a43ba5c11a1073bbc8/1678217895508/TheCAREPrinciples.pdf){.small} + +## FNIGC in Canada + +![](img/FNIGC-OCAP.png) + + + +::: notes +- FNIGC is the First Nations Information Governance Centre +- Ownership, Control, Access, and Possession (OCAP) is a set of standards that + establish how First Nations data should be collected, protected, used, or + shared. +- Course - Fundamentals of OCAP +::: + +# Open Source Tools + +::: {.columns} +::::: {.column width="40%"} +![](img/r-logo.png){height="300px" fig-align="center"} +::::: + +::::: {.column width="60%"} +![](img/python-logo.png){height="200px" fig-align="center"} +::::: +::: + +![](img/julia-logo.svg){height="200px" fig-align="center"} + +::: notes +- if you use proprietary software, you are not able to share your code and + workflows with others and they won't be able to run it without purchasing the + software +- R and Python are the most popular programming languages for data science and + scientific computing +- Julia is a newer programming language that is gaining popularity in the + scientific computing community +::: + +# Open Code + +## Reproducible Workflows + +- Open Data +- Programmatic analysis (e.g., R, Python, Julia) +- Project-oriented Workflows +- Version Control +- Dependency management (e.g., uv/pixi/conda, renv) +- Literate Programming (Quarto, Jupyter Noteboks) +- Containerization (e.g., Docker) + +## Licensing + +> By default, a GitHub repo without an open source licence applied to it is +> **not open source** (All Rights Reserved). + +- MIT is a good, permissive license for most projects +- Apache 2.0 is similar, but adds an explicit patent grant + +### For work + +```r +usethis::use_mit_license( + copyright_holder = "His Majesty the King in Right of Canada, as represented by the Minister responsible for Fisheries and Oceans Canada" +) +``` + +### For personal projects {style="padding-top: 30px;"} + +```r +usethis::use_mit_license( + copyright_holder = "Andy Teucher" +) +``` + +## Resources + +Checklists: https://github.com/oceanhackweek/ohwyy_proj_template/issues diff --git a/03-Thr/open-science/slides.scss b/03-Thr/open-science/slides.scss new file mode 100644 index 00000000..98893fb3 --- /dev/null +++ b/03-Thr/open-science/slides.scss @@ -0,0 +1,217 @@ +/*-- scss:defaults --*/ +// fonts +@import 'https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible:ital,wght@0,400;0,700;1,400;1,700&display=swap'; +@import 'https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible:ital,wght@0,400;0,700;1,400;1,700&family=Gochi+Hand&display=swap'; + +$font-family-sans-serif: "Atkinson Hyperlegible", sans-serif; + +$body-bg:#325c65ff; +$body-color: #FFFFFF; +$link-color: #C7B41D; +$presentation-font-size-root: 40px; +$git-orange: #ffa500; +$highlight-term-color: #e2b4c3ff; +$quote-color: adjust-color($color: $highlight-term-color, $lightness: 5%, $alpha: 1.0); + +// headings +$headingTextTransform: none; +$h1-font-size: 1.6em !default; +$h2-font-size: 1.3em !default; +$h3-font-size: 1.15em !default; + +/*-- scss:rules --*/ + +.h-center { + margin: 0 auto; +} +.w-90 { + width: 90%; +} + +/* Handwriting */ +.hand{ + font-family: 'Gochi Hand', cursive; + font-size: 125%; +} + +.color-gold { + color: #C7B41D; +} + +.color-yellow { + color: #ffed27ff; +} + +.small { + font-size: 0.75em; +} + +.brshort { + line-height: 10px; +} + +.reveal .slide .question { + margin: 1em; + padding-left: 1.0em; + padding-top: 0.25em; + padding-bottom: 0.25em; + background: #2fc89fff; + text-align: center; +} + +.reveal .slide .question p::before { + content: "🤔 "; +} + +.reveal .slide .notebox { + margin: 1em; + padding-left: 1.0em; + padding-top: 0.25em; + padding-bottom: 0.25em; + background: #f6d770ff; + border: 3px solid #fff; + color: #000000; + text-align: center; +} + +.reveal .slide .poll { + border-left: 3px solid #FFD166; + padding-left: 0.5em; + padding-top: 0.25em; + padding-bottom: 0.25em; + background: #FFEDC2; +} + +.reveal .slide .appex { + border-left: 3px solid #003559; + margin-top: 0.5em; + margin-bottom: 0.5em; + padding: 0.5em; + background: #EBF7FF; +} + +.subtitle { + color: $link-color; + font-size: $h2-font-size; + font-family: $presentation-heading-font; +} + +.author { + color: $link-color; + font-size: $h2-font-size; + font-family: $presentation-heading-font; +} + +.footer { + color: $link-color; + font-family: $presentation-heading-font; +} + +.reveal .slide-number { + color: $link-color; + font-family: $presentation-heading-font; +} + +.reveal .panel-tabset [role=tab] { + font-size: 0.8em; +} + +.reveal .footer { + color: $link-color; +} + +.huge-primary { + font-family: $font-family-sans-serif; + font-size: 1500%; + font-weight: bold; + color: rgba(225, 237, 116, 1); +} + +.center-x{ + text-align: center; +} + +.important { + color: $link-color; +} + +.black-code { + color: #000000; + font-family: $font-family-monospace; + font-size: 2em; +} + +.black-code-smaller { + color: #000000; + font-family: $font-family-monospace; + font-size: 1.5em; +} + +.black-code-smallest { + color: #000000; + font-family: $font-family-monospace; + font-size: 1em; +} + +.vertical-center { + margin: auto; + width: 50%; +} + +#vcenter { + vertical-align: middle; +} + +.v-center-container { + display: flex; + justify-content: center; + align-items: center; + height: 90%; +} + +.reveal .slides .cell-output-tall code { + max-height: 600px; +} + +.reveal .slides .resources { + position: absolute; + bottom: 0; + right: 0; + padding: 5px 0 0 0; + border-top: $link-color 1px solid; +} + +.reveal .slides .resources p { + font-size: 0.75em; + color: $link-color; + margin: 0; +} + +span.highlight-term { + color: $highlight-term-color; + font-weight: bold; + font-style: italic; +} + +span.git-orange { + color: $git-orange; +} + +.reveal .slides .sourceCode code { + background-color: #3a3a3aff; +} + +.reveal .slides blockquote { + font-style: italic; + color: $quote-color; + border-color: $quote-color; +} + +.reveal .slides section .fragment.bold-in { + opacity: 1; + visibility: inherit; +} + +.reveal .slides section .fragment.bold-in.visible { + font-weight: bold; +}