---
# System prepended metadata

title: 002 Internal

---

# 002 Internal

# todo

- jitsi

# Plan

- :03 Welcome and credits
    - Brief intro of us
    - what the series is about
    - Credits:
      - OBS
      - hackmd: If you have spare cycles, please help keep hackmd organized and copy questions from chat to there.
      - feedback
      - suggestions for topics
    - Topics of session this time (Github PRs and dependency management)
        - We try to have some basic stuff, and get more advanced towards the end
        - We show examples, but the full story is usually deeper.  We can go deeper in the later discussion.
- :05 From last time: Zenodo publications in google scholar?
    - a zenodo question, has anyone managed for their zenodo publication to show up in google scholar?
    - No, seems like various technical reasons, such as mixed content and URL structure
    - https://github.com/openjournals/brief-ideas/issues/132#issuecomment-335700342
- :20 How do you make a Github pull request using the web interface?
    - RB: Explain what PRs are, they are called MRs on Github = **change proposal**
    - RD: Please ask questions in hackmd
    - RD: last time we asked participants to share a code or pull request and got a suggestion
    - RD: Introduce our guest
    - RB asks C:
      - "Before we go into the example: What do you usually use Github for?" (CB: collaboration on papers)
      - "How do you review each others changes/make sure you agree on the content?" ...
      - what is this project about?
      - why are you collaborating on this using GitHub and pull requests?
    - RB starts sharing screen and we browse https://github.com/mlswg/mls-protocol
      - RB scrolls a bit and comments on README, CI, contributing guide
      - RB can ask C: where are the HTML pages served which are automatically built? (the "make upload")
      - RB looks at existing PRs
      - RB opens up the Markdown file both in rendered and in raw
    - Two ideas for changes (you can decide):
      - we add a table of contents (more than one line)
      - or we add proper Python highlighting (one-liner)
    - RB demonstrates how to submit the change through web interface
      - I might ask you what would be a good title for the PR
      - OK if I ask you about your GH username to ping you?
    - What's a draft PR. vs making an issue to discuss first?
    - RB will ask you whether you have questions and thank you Chris
    - To audience: Come back next time to see how it turns out!
    - Idea 1: If we have time, RB shows 1-2 real life PRs, either outs or from some open source project which is not too niche/difficult
    - Idea 2: we discuss with Richard what are the things we look at when reviewing a pull request
    - Questions? Please write in hackmd.
- RD: Keeping your code clean: using a code linter (pylint)
    - [setup: rm ~/.cache/pre-commit/ ~/.git/hooks/pre-commit .venv; create .venv, pip install pylint]
    - What's a code linter?
    - `pip install pylint`
    - `pylint messy.py`
    - What if we want to lint always?
    - `pip install pre-commit`
    - `pre-commit install`
    - `# pylint: disable=unused-argument`
    - When is this a good idea?
- 5 Q&A
  - encourage help in organizing hackpad

=== halfway ===

- 15 RD: Managing dependencies in code
    - Learning outcome: in Python, use and create a requirements.txt file.
    - If you take someone else's code, do you think you could run it?  Why not?

    - demo code: `rsh-demo`
        - python3 dependencies.py
    - requirements.txt
        - make sample requirements.txt
    - How to install these things?  virtualenvs
        - `virtualenv` vs `python3 -m venv`
        - python3 -m venv venv3
        - source ./venv3/bin/activate
        - which python
        - which pip
        - pip install mock
    - How do I figure out what my dependencies are?
        - trial and error.  try to keep started early
        - Make your environment reproducible: delete and start over is never bad!
        - networkx<2.0
    - What if stuff changes?  What if we want exactly reproducible?
        - pip freeze
    - What about a library?  `setup.py`
        - 

    - Other ways to record dependencies (other languages)
        - requirements.txt for pip
        - environment.yml for conda
        - setup.py vs requirements.txt
        - But there are other options: Pipenv, poetry
    - virtualenvironments is Python
        - .
        - alias for "ve"
    - Strict dependencies (deployments, environments) vs very flexible dependencies (libraries)
    - How it work in other languages:
        - R: `renv`
        - C++ code: through CMake, conan.io, conda, ...
        - Newer languages tend to have it more built-in.
    - More advanced options: containers    
        - Entire OS in a package
    - Mention ReproHacks

- 3 Two interesting .gitconfig tricks: excludesfile and insteadOf
    - `git config --global core.excludesfile=~/.gitignore`
    - `git config --global url.git@github.com:ResearchSoftwareHour/.insteadOf rsh:`
- 3 TILs
    - encourage using TILs
- 3 Julia Evan's blog and zines
    - Julia Evans blog and zines
- 10 Q&A
- 2 Clarify ways to contribute to RSH
- 1 Conclusion
- Epilogue discussion