---
# System prepended metadata

title: CodeRefinery Uppsala workshop 2023-05 planning
tags: [Workshop-2023-May-Uppsala]

---

---
tags: Workshop-2023-May-Uppsala
---

# CodeRefinery Uppsala workshop 2023-05 planning

[toc]



## Links
- [Workshop page](https://coderefinery.github.io/2023-05-09-uppsala/)
- This document: https://hackmd.io/@coderefinery/2023-may-planning


## Advertisement text

CodeRefinery workshop, Uppsala, May 9-11, 2023
Organised by CodeRefinery and partners, among which are NAISS, UPPMAX, PDC, and ENCCS.

Do you write code for your research? Do you manage data? Most importantly, are you doing it properly? Has it ever happened to you to have to rewrite or simply copy-paste codes from one folder to another, possibly losing things during the process? Have you ever opened an old code you wrote and had no clue what it does? Maybe you feel you waste a lot of time doing a lot of manual work to process your data and would like to automate it? Or maybe you also are not doing any of this yet, but would like to avoid these issues from happening in the future and do things properly from the beginning?

If you answered yes to any of the previous questions, then you are strongly encouraged to participate in the CodeRefinery workshop in Uppsala on May 9-11, 2023.

Topics covered in the workshop include:

Using Git to maintain your codes and collaborate with others
Principles of reproducible research and FAIR
Good coding practices in general (writing documentation, testing, how to choose an appropriate license)
The Workshop will not teach you to code, but all the "good practice skills" that are needed to write good maintainable software and achieve reproducible research.

The workshop will alternate between type along tutorials and hands-on exercises. You may register for parts of the workshop.

Workshop page:  https://coderefinery.github.io/2023-05-09-uppsala.
Registration link: https://forms.gle/ZrHLow4HnCqYK49VA.

### Advertised to

- [x] NAISS training newsletter
- [x] Olle, Materials Theory, UU
- [x] Kersti, Chemistry, UU
- [x] Anna, Applied Physics, KTH
- [x] Raquel, Materials Science, KTH
- [x] UPPMAX newsletter, out April 26
- [x] ENCCS newsletter
- [x] ENCCS website
- [x] SeRC mailing lists 
- [x] eSSENCE mailing list
- [x] SciLifeLab
- [ ] ENCCS LinkedIn and Twitter
- [ ] Twitter CodeRefinery
- [ ] LinkedIn CodeRefinery

## Teachers and helpers

Diana: interested in Git intro and Git collab.
Thor: any lesson except social coding and maybe not modular code development
Johan: can teach some of the lessons, no particular preference
Anastasiia: helper
Qiang: helper
Pavlin: at least helper, maybe teach documentation and/or Jupyter
Björn: at least helper, maybe teacher as well...

## Lesson distribution
- [ ] [day 1 morning - git-intro](https://coderefinery.github.io/git-intro/): Diana
- [ ] [day 1 afternoon - git-intro](https://coderefinery.github.io/git-intro/): Björn
- [ ] [day 2 - git-collab](https://coderefinery.github.io/git-collaborative/): Thor
- [ ] [day 2 - reproducible research](https://coderefinery.github.io/reproducible-research/): Pavlin
- [ ] [day 2 - social coding](https://coderefinery.github.io/social-coding/): Johan
- [ ] [day 3 - jupyter](https://coderefinery.github.io/jupyter/): Pavlin
- [ ] [day 3 - documentation](https://coderefinery.github.io/documentation/): Björn
- [ ] [day 3 - testing](https://coderefinery.github.io/testing/): Johan
- [ ] [day 3 - modular code development](https://coderefinery.github.io/modular-type-along/): Thor

## Helpers
- [ ] [day 0 - installation help](https://coderefinery.github.io/installation/): Björn, Diana
- [ ] [day 1 - git-intro](https://coderefinery.github.io/git-intro/): Pavlin, Qiang, Anastasiia
- [ ] [day 1 - git-intro](https://coderefinery.github.io/git-intro/): Pavlin, Qiang, Johan, Anastasiia
- [ ] [day 2 - git-collab](https://coderefinery.github.io/git-collaborative/): Pavlin, Johan
- [ ] [day 2 - reproducible research](https://coderefinery.github.io/reproducible-research/): Thor, Johan
- [ ] [day 2 - social coding](https://coderefinery.github.io/social-coding/): Pavlin
- [ ] [day 3 - jupyter](https://coderefinery.github.io/jupyter/): Diana, Thor, Qiang, Johan
- [ ] [day 3 - documentation](https://coderefinery.github.io/documentation/): Pavlin, Diana, Qiang, Johan
- [ ] [day 3 - testing](https://coderefinery.github.io/testing/): Qiang, Thor
- [ ] [day 3 - modular code development](https://coderefinery.github.io/modular-type-along/): Qiang, Johan, Björn

### AOB

- do any lessons need to be re-adjusted to in-person teaching


## To do
- [x] email regarding requirements (Diana)
- [x] HackMD document for Q&A (Diana)
- [x] sticky notes: red & green (Anastasiia); have other colors as well
- [ ] power cords (Pavlin)
- [ ] Guest wifi accounts
- [ ] coffee breaks with catering? Diana: unfortunately not as it is against the department's policy
- [x] create map showing lecture room locations - link on workshop page
- [ ] prepare in-person ice breakers
- [x] ambitious outreach!
- [ ] teachers go through lessons to decide time needed

## Detailed schedule    **being edited currently**

## Schedule Day 1, morning
- 09:00 - 09:15 (15 min) Welcome and practical information (Diana)
- 09:15 - 12:00 Introduction to version control (part 1/2) (Diana)
    - 09:15 - 09:30 (15 min) [Motivation - teaching & demo](https://coderefinery.github.io/git-intro/motivation/#motivation)
    - 09:30 - 09:45 (15 min) [Basics - teaching & type along](https://coderefinery.github.io/git-intro/basics/#basics)
    - 09:45 - 10:05 (20 min) [Basics - exercises](https://coderefinery.github.io/git-intro/basics/#exercise-record-changes)
      1. [Record changes](https://coderefinery.github.io/git-intro/basics/#exercise-record-changes)
      2. [Optional: Comparing, renaming, and removing](https://coderefinery.github.io/git-intro/basics/#optional-exercises-comparing-renaming-and-removing) - if time allows
    - 10:05 - 10:25 (20 min) [Basics - History, commit log, ignoring - teaching](https://coderefinery.github.io/git-intro/basics/#git-history-and-log)
   - 10:25 - 10:40 (15 min) :coffee: :walking: :tea: Break
    - 10:40 - 10:55 (15 min) [Branching and merging - teaching](https://coderefinery.github.io/git-intro/branches/#branching-and-merging)
    - 10:55 - 11:15 (20 min) [Branching and merging - exercises](https://coderefinery.github.io/git-intro/branches/#exercise-create-and-commit-to-branches)
        1. [Create and commit to branches](https://coderefinery.github.io/git-intro/branches/#exercise-create-and-commit-to-branches) Teaching resumed before merging branches.
        2. [Optional exercises with branches: Fast-forward merge and Rebasing](https://coderefinery.github.io/git-intro/branches/#optional-exercises-with-branches) - if time allows
    - 11:15 - 11:30 (15 min) Summarize branching and merging
    - 11:30 - 11:40 (10 min) [Conflict resolution (teaching)](https://coderefinery.github.io/git-intro/conflicts/)
    - 11:40 - 12:00 (20 min) [Exercise conflict resolution](https://coderefinery.github.io/git-intro/conflicts/#exercise-create-and-resolve-a-conflict)


## Schedule Day 1, afternoon
* 13:00 - 13:10 (10 min) Recap and Q&A from day 1, morning
* 13:10 - 16:00 Introduction to version control (part 2/2) (Björn)
    - 13:10 - 13:20 (10 min) [Sharing repositories online - teaching/type-along](https://coderefinery.github.io/git-intro/remotes/#sharing-repositories-online) 
    - 13:20 - 13:40 (20 min) Exercise: [Pushing our guacamole recipe repository to GitHub](https://coderefinery.github.io/git-intro/remotes/#pushing-our-guacamole-recipe-repository-to-github)
    - 13:40 - 13:55 (15 min) [Inspecting history - teaching/type-along](https://coderefinery.github.io/git-intro/archaeology/#inspecting-history) 
    - 13:55 - 14:25 (30 min) [Inspecting history - exercises](https://coderefinery.github.io/git-intro/archaeology/#exercise-basic-archaeology-commands) 
        1. [Basic archeology commands](https://coderefinery.github.io/git-intro/archaeology/#exercise-basic-archaeology-commands)
        2. [Optional: Git bisect](https://coderefinery.github.io/git-intro/archaeology/#optional-exercise-git-bisect) - to be done if time allows
    - 14:25 - 14:40 :coffee: :walking: :tea: Break
    - 14:40 - 14:50 (10 min) Summarize inspecting history
    - 14:50 - 15:05 (15 min) [Undoing and recovering - teaching/type-along](https://coderefinery.github.io/git-intro/recovering/#undoing-and-recovering) 
    - 15:05 - 15:25 (20 min) [Undoing and recovering - exercises](https://coderefinery.github.io/git-intro/recovering/#exercise-revert-a-commit) 
        1. [Revert a commit](https://coderefinery.github.io/git-intro/recovering/#exercise-revert-a-commit)
        2. [Modify a previous commit](https://coderefinery.github.io/git-intro/recovering/#exercise-modify-a-previous-commit)
        3. [Git reset](https://coderefinery.github.io/git-intro/recovering/#exercise-git-reset)
    - 15:25 - 15:40 (15 min) Summarize undoing and recovering and discussion and mention that staging area exists
    - 15:40 - 16:00 (20 min) [How much Git is necessary?](https://coderefinery.github.io/git-intro/level/#practical-advice-how-much-git-is-necessary) 


## Schedule Day 2, morning

* 08:50 - 09:00 Soft start and icebreaker question
* 09:00 - 12:00 [Collaborative distributed version control](https://coderefinery.github.io/git-collaborative/) (Thor)
  - 09:00 - 09:15 Recap Git, any Hackmd questions to highlight
  - 09:15 - 09:30 Concepts around collaboration
    1. Explain terms. Pull, push, clone, fork. Focus on pull and not fetch.
    2. Focus more on Clone and less on Generating from templates and importing
  - 09:30 - 11:10 Centralized workflow 
    - 9:30 - 9:45 : Explain concepts.
    - 9:45 - 09:50 Inform clearly what is expected outcome.
    - 09:50 - 10:20 Excercise
  - 10:20 - 10:35 :coffee: :walking: :tea: Break
    - 10:35 - 10:50 Instructors go through the exercise
  - 10:50 - 12:00 Distributed version control and forking workflow + one break
    - 10:50 - 11:00 - Concepts and what are exercise outcomes
    - 11:00 - 11:30 - Exercise
    - 11:30 - 11:40 - Instructors go through excercises
  - 11:40 - 12:00 - How to contribute changes to somebody else’s project and Q&A


## Schedule Day 2, afternoon

* 13:00 - 14:45 [Reproducible research](https://coderefinery.github.io/reproducible-research/) (Pavlin)
    - 13:00 - 13:10 [Motivation](https://coderefinery.github.io/reproducible-research/motivation/)
    - 13:10 - 13:20 [Organizing your projects](https://coderefinery.github.io/reproducible-research/organizing-projects/)
    - 13:20 - 13:50 [Recording dependencies](https://coderefinery.github.io/reproducible-research/dependencies/)
       - discussion (5 min)
       - [exercise (20 min)](https://coderefinery.github.io/documentation/writing-readme-files/#exercises)
       - discussion (5 min)
    - 13:50 - 14:20 [Recording computational steps](https://coderefinery.github.io/reproducible-research/workflow-management/)
       - discussion (5 min)
       - [exercise (20 min)](https://coderefinery.github.io/reproducible-research/workflow-management/#exercise-using-snakemake)
       - discussion (5 min)
    - 14:20 - 14:30 [Recording environments](https://coderefinery.github.io/reproducible-research/environments/)
    - 14:30 - 14:45 [Sharing code and data](https://coderefinery.github.io/reproducible-research/sharing/)
        - [demo (15 min)](https://coderefinery.github.io/reproducible-research/sharing/#connecting-repositories-to-zenodo)

- 14:45 - 15:00 :coffee: :walking: :tea: Break

* 15:00 - 16:00 [Social coding](https://coderefinery.github.io/social-coding/) (Johan)
  - 15:00 - 15:15 [Social coding (15 min)](https://coderefinery.github.io/social-coding/social-coding/)
  - 15:15 - 15:45 [Licensing (30 min)](https://coderefinery.github.io/social-coding/licensing/)
  - 15:45 - 16:00 [Software citation (15 min)](https://coderefinery.github.io/social-coding/software-citation/)


## Schedule Day 3, morning

* 09:00 - 10:25 [Jupyter](https://coderefinery.github.io/jupyter/) (Pavlin)
    - 09:00 - 09:10 [Jupyter notebooks](https://coderefinery.github.io/jupyter/motivation/)
    - 09:10 - 09:25 [JupyterLab and notebook interface](https://coderefinery.github.io/jupyter/interface/)
    - 09:25 - 09:50 [A first computational notebook](https://coderefinery.github.io/jupyter/first-notebook/)
      - intro to the exercise (5 min)
      - [breakout room exercise (20 min)](https://coderefinery.github.io/jupyter/sharing/)
    - 09:50 - 10:00 [Notebooks and version control demo, 10-15 min](https://coderefinery.github.io/jupyter/version-control/)
    - 10:00 - 10:20 [Sharing notebooks](https://coderefinery.github.io/jupyter/sharing/)
      - [Binder Breakout room exercise (20 min)](https://coderefinery.github.io/jupyter/sharing/#sharing-dynamic-notebooks-on-binder)
    - 10:20 - 10:25 Wrap-up
    - 10:25 - 10:40 Break

* 10:40 - 12:00 [Documentation](https://coderefinery.github.io/documentation/) (Björn)
    - 10:40 - 10:50 [Motivation and tools](https://coderefinery.github.io/documentation/wishlist/)
        - create a wishlist in HackMD
    - 10:50 - 11:10 [Writing good README files](https://coderefinery.github.io/documentation/writing-readme-files/#writing-good-readme-files)
        - brief discussion
        - [15 minutes for exercises](https://coderefinery.github.io/documentation/writing-readme-files/#exercises), choosing either 1, 2 or 3 (or do multiple of time allows)
        - brief discussion
    - 11:10 - 11:45 [Sphinx and markdown](https://coderefinery.github.io/documentation/sphinx/)
        - discussion (5 min)
        - [Exercise 1 as type along (10 min)](https://coderefinery.github.io/documentation/sphinx/#exercise-sphinx-basics)
        - [Exercise 2, exercise 3 if time allows (20 min)](https://coderefinery.github.io/documentation/sphinx/#exercise-sphinx-content)
        - Discussion, going over exercise (5 min)
    - 11:45 - 11:55 [Deploying Sphinx documentation to GitHub Pages](https://coderefinery.github.io/documentation/gh_workflow/#deploying-sphinx-documentation-to-github-pages)
        - [Exercise 1 as demo](https://coderefinery.github.io/documentation/gh_workflow/#exercise-deploy-sphinx-documentation-to-github-pages)
    - 11:55 - 12:00 [Summary](https://coderefinery.github.io/documentation/summary/)


## Schedule Day 3, afternoon

* 13:00 - 14:30 [Software testing](https://coderefinery.github.io/testing/) (Johan)
  - 13:00-13:05 [Motivation](https://coderefinery.github.io/testing/motivation/)
  - 13:05-13:15 [Concepts](https://coderefinery.github.io/testing/concepts/)
  - 13:15-13:40 [Testing locally](https://coderefinery.github.io/testing/pytest/)
      - 5 min talking
      - 15 min exercises
      - 5 min going over exercises and discussion
  - 13:40-14:05 [Automated testing](https://coderefinery.github.io/testing/continuous-integration/)
      - type-along session
  - 14:05-14:30 [Test design](https://coderefinery.github.io/testing/test-design/)
      - discussion: 5 minutes
      - Exercises: 10 minutes. Any of exercises Design-1 to Design-8 that learners want to do.
      - discussion and type-along of advanced exercises: 10 minutes
* 14:30 - 14:45 :coffee: :walking: :tea: Break 
* 14:45 - 15:45 [Modular coding](https://coderefinery.github.io/modular-type-along/) (Thor)
* 15:45 - 16:00 [Concluding remarks and where to go from here](https://github.com/coderefinery/workshop-outro/blob/master/README.md)
