class: title-slide, left, middle <h1> Intro to project management <br> with git, <svg style="height:0.8em;top:.04em;position:relative;" viewBox="0 0 496 512"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> GitHub and RStudio </h1> <br> <h3> Alex Hurley <br> <em>University of Birmingham</em> </h3> <br> <br> .small[<svg style="height:0.8em;top:.04em;position:relative;" viewBox="0 0 576 512"><path d="M488 312.7V456c0 13.3-10.7 24-24 24H348c-6.6 0-12-5.4-12-12V356c0-6.6-5.4-12-12-12h-72c-6.6 0-12 5.4-12 12v112c0 6.6-5.4 12-12 12H112c-13.3 0-24-10.7-24-24V312.7c0-3.6 1.6-7 4.4-9.3l188-154.8c4.4-3.6 10.8-3.6 15.3 0l188 154.8c2.7 2.3 4.3 5.7 4.3 9.3zm83.6-60.9L488 182.9V44.4c0-6.6-5.4-12-12-12h-56c-6.6 0-12 5.4-12 12V117l-89.5-73.7c-17.7-14.6-43.3-14.6-61 0L4.4 251.8c-5.1 4.2-5.8 11.8-1.6 16.9l25.5 31c4.2 5.1 11.8 5.8 16.9 1.6l235.2-193.7c4.4-3.6 10.8-3.6 15.3 0l235.2 193.7c5.1 4.2 12.7 3.5 16.9-1.6l25.5-31c4.2-5.2 3.4-12.7-1.7-16.9z"/></svg> [aglhurley.rbind.io](https://aglhurley.rbind.io) <svg style="height:0.8em;top:.04em;position:relative;" viewBox="0 0 512 512"><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> [aglhurley](https://twitter.com/aglhurley)] --- class: inverse, center Science is messy. <br> Data isn't pretty. <br> Analyses can be tough. <br> <br> <br> <br> <br> # _Debugging, data management, publishing/sharing code, archiving... ?_ --- # Overview -- 1. Git 2. GitHub (Website & Desktop) 3. Simple workflow with RStudio --- class: inverse, center, middle # Introducing Git --- layout: true # Git ## What does version control do? --- - Git is a command-line program (_with GUI options_) - Tracks changes: + what + when + who + why (!) --- layout: true # Git --- ## Why use version control? .center[<img src="https://img.devrant.com/devrant/rant/r_1408498_yE2gf.jpg" height="400px" width="380px" />] --- ## Why use version control? .center[<img src="https://media.giphy.com/media/2KAGlmkPywhZS/giphy.gif" height="400px" width="300px" />] --- ## Workflow ![](./diagrams/git_workflow.png) --- ## Some hints - _.gitignore_: contains folders and files you do not want to track (e.g. _*.csv_, _credit_card_info.txt_) - `git revert <commit #>` takes you back to better times - `git clone` allows you to mirror a repository onto your local machine (e.g hosted on GitHub, GitLab, BitBucket) -- ### For collaboration - forks, branches - pull requests - merge -- ## Some tips - *Git and GitHub have great documentation,* - [_Happy Git and GitHub for the useR_](http://happygitwithr.com) (J. Bryan, J. Hester) is an excellent resource --- layout: false class: inverse, center, middle # Introducing GitHub <br> # <svg style="height:0.8em;top:.04em;position:relative;" viewBox="0 0 496 512"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> --- layout: true # GitHub --- ## What does GitHub provide -- - free hosting (private repos for students) - convenient web GUI - pre-defined settings (licenses, _.gitignore_) -- - issue tracker - project management - exposure (_Readme.md_; great example from [`drake`](https://github.com/ropensci/drake)) --- ## First Steps - Register with [GitHub](https::/github.com) - Download [GitHub Desktop](https://desktop.github.com/) - Create new repository -- .center[<img src="./diagrams/github_website.png" height="300px" width="640px" />] --- ## First Steps - Register with [GitHub](https::/github.com) - Download [GitHub Desktop](https://desktop.github.com/) - Create new repository -- - Open *GitHub Desktop*, follow instructions - `clone` repository to your local machine -- .center[<img src="./diagrams/github_desktop.png" height="300px" width="640px" />] --- ## First Steps - Register with [GitHub](https::/github.com) - Download [GitHub Desktop](https://desktop.github.com/) - Create new repository - Open *GitHub Desktop*, follow instructions - `clone` repository to your local machine -- - commence work, save, `commit`, `push` -- .center[<img src="./diagrams/github_desktop_commit.png" height="300px" width="800px" />] --- ## First Steps - Register with [GitHub](https::/github.com) - Download [GitHub Desktop](https://desktop.github.com/) - Create new repository - Open *GitHub Desktop*, follow instructions - `clone` repository to your local machine - commence work, save, `commit`, `push` -- .center[<img src="./diagrams/github_desktop_commit_b.png" height="300px" width="800px" />] --- ## First Steps - Register with [GitHub](https::/github.com) - Download [GitHub Desktop](https://desktop.github.com/) - Create new repository - Open *GitHub Desktop*, follow instructions - `clone` repository to your local machine - commence work, save, `commit`, `push` ### Some other things.. - if collaborating: always `fetch` + `pull` before pushing (be up to date and prevent conflicts) - `commit` after a meaningful addition or change has been made - always use clear messages (try to make future-you not hate current-you) --- layout: false class: inverse, center, middle # GitHub Desktop Quick live-demo --- class: inverse, center, middle # GitHub and Projects --- layout: true # Github and Projects --- ## Capabilities - control access and contributors - provide easily accessible documentation (Readme's, Wiki pages, data codebooks) - Can host project websites (e.g. [aglhurley](https::/aglhurley.rbind.io)) -- - manage tasks - open/track issues (new features, old bugs, fieldwork) and assign individuals - can be used for open peer review (e.g. [`hddtools`](https://github.com/ropensci/onboarding/issues/73)) -- ## Examples: (Check issue section) - [the-hull/saddleworth](https://github.com/the-Hull/saddleworth) (private) - [cboettig/nonparametric-bayes](https://github.com/cboettig/nonparametric-bayes) - [bpbond/cpcrw_incubation](https://github.com/bpbond/cpcrw_incubation/) --- ## Project Management .center[<img src="./diagrams/github_projects.PNG" height="500px" width="750px" />] --- class: inverse, middle, center Quick live demo --- layout: false class: inverse, middle, center # RStudio workflow --- layout: true # Rstudio workflow --- ## Main goals for a project: 1. Coherent and easy-to-navigate structure (folders) 2. Portable (packages, file paths) 3. Version controlled 3. Well documented (Scripts, literate programming for analyses and/or codebooks) -- **RStudio can allow integrating all aspects of your workflow**. --- ## Project Structure .pull-left[ - Set-up in _RStudio_ (`File` `\(\rightarrow\)` `New Project`) + multiple options (e.g. _from Version Control_ ` clones` directly; requires standalone git installation) - Create suitable folder structure + R Package structure is common ] .center[![](./diagrams/rstudio_folders.PNG)] --- ## Project Structure .pull-left[ - Set-up in _RStudio_ (`File` `\(\rightarrow\)` `New Project`) + multiple options (e.g. _from Version Control_ ` clones` directly; requires standalone git installation) - Create suitable folder structure + R Package structure is common + **but adjust as needed** ] .center[![](./diagrams/rstudio_folders_personal.PNG)] --- ## Portability - Use relative file paths in scripts / documents .center[ _C:/welcome_to_my_world/data_ 😒 😫 _./data/_ (dot refers to project's root) 😀 _../other_project_ (dot-dot refers to project's parent) 🤓 ] - Isolate or list the software you use (keep track of versions) + Microsoft's `snapshot` package + RStudio's `packrat` package (integrated into _RStudio_) + `sessionInfo()` at document end --- ## Documentation / Write-up - Plain text can be version controlled, rich-text (_docx_, _odt_) cannot - Markdown (_.md_) common - RMarkdown for literate programming (`knitr` package) -- ## Example Try `File` `\(\rightarrow\)` `New File` `\(\rightarrow\)` `R Markdown` and hit the _knit_ button, or press `ctrl`+`shift`+`k` --- ## Documentation / Write-up - Use literate programming through `knitr` ```r # Rcode stored and evaluated as document is rendered nrow_iris <- nrow(iris) # call in-line using `r nrow_iris` ``` .center[ _The data set has a total of 150 observations_] -- - There are many available output formats and templates + html + pdf / latex (e.g. `\(2\delta x^2yz+5\)` ) + word + templates for many journals (e.g. `rticles` package) -- - Thinking "Help!"? Try this [Definitive Guide](https://bookdown.org/yihui/rmarkdown/) by (Y. Xie, J. Allaire, G. Grolemund) --- class: inverse, middle, center Quick live demo --- layout: false class: inverse, middle, center **Project management:** .center[<img src="https://media.giphy.com/media/dJGYFScvBjfRabiH7m/giphy.gif" height="300px" width="320x" />] ** Thanks for listenining! ** Ask me 3+ questions!