├── CNAME ├── logo.png ├── .prettierc.toml ├── banihirwe_cv.pdf ├── .gitignore ├── banihirwe_cv-2-pages.pdf ├── banihirwe_cv-one-page.pdf ├── src ├── data │ ├── language_skills.csv │ ├── contact_info.csv │ ├── text_blocks.csv │ ├── entries.csv │ └── banihirwe_cv_data - entries.csv ├── render_cv.r ├── dd_cv.css ├── cv.rmd └── cv_printing_functions.r ├── .github ├── dependabot.yaml └── workflows │ └── build.yaml ├── environment.yaml ├── .pre-commit-config.yaml ├── install_dep.r ├── README.md └── renv.lock /CNAME: -------------------------------------------------------------------------------- 1 | cv.andersonbanihirwe.dev 2 | -------------------------------------------------------------------------------- /logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andersy005/cv/main/logo.png -------------------------------------------------------------------------------- /.prettierc.toml: -------------------------------------------------------------------------------- 1 | tabWidth = 2 2 | semi = false 3 | singleQuote = true 4 | -------------------------------------------------------------------------------- /banihirwe_cv.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andersy005/cv/main/banihirwe_cv.pdf -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .Rproj.user 2 | .Rhistory 3 | .RData 4 | .Ruserdata 5 | .DS_Store 6 | *.Rproj 7 | -------------------------------------------------------------------------------- /banihirwe_cv-2-pages.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andersy005/cv/main/banihirwe_cv-2-pages.pdf -------------------------------------------------------------------------------- /banihirwe_cv-one-page.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andersy005/cv/main/banihirwe_cv-one-page.pdf -------------------------------------------------------------------------------- /src/data/language_skills.csv: -------------------------------------------------------------------------------- 1 | Name of language,Relative numeric level of skill 2 | skill,level 3 | Javascript (d3.js),4.5 4 | C++,3 5 | Python,5 6 | Bash,3.5 7 | -------------------------------------------------------------------------------- /.github/dependabot.yaml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: 'github-actions' 4 | directory: '/' 5 | schedule: 6 | interval: monthly 7 | 8 | groups: 9 | actions: 10 | patterns: 11 | - '*' 12 | -------------------------------------------------------------------------------- /src/data/contact_info.csv: -------------------------------------------------------------------------------- 1 | Id of contact section,Icon used from font-awesome 4 to label this contact section,The actual value written for the contact entry 2 | loc,icon,contact 3 | email,envelope,axbanihirwe@gmail.com 4 | github,github,github.com/andersy005 5 | website,link,blog.andersonbanihirwe.dev 6 | linkedin,linkedin,linkedin.com/in/andersy005 7 | -------------------------------------------------------------------------------- /src/data/text_blocks.csv: -------------------------------------------------------------------------------- 1 | Id used for finding text block,Contents of text block. Supports markdown formatting. 2 | loc,text 3 | intro,"I contribute to and maintain several libraries within the open source scientific Python stack, particularly around improving scalability of Python tools in order to handle terabyte-scale datasets on HPC and cloud platforms." 4 | -------------------------------------------------------------------------------- /environment.yaml: -------------------------------------------------------------------------------- 1 | name: r-base 2 | channels: 3 | - nodefaults 4 | - conda-forge 5 | dependencies: 6 | - r-asioheaders 7 | - r-base 8 | - r-devtools 9 | - r-essentials 10 | - r-fs 11 | - r-googledrive 12 | - r-googlesheets4 13 | - r-websocket 14 | - unzip 15 | - libcurl 16 | - openssl 17 | - libxml2 18 | - pandoc 19 | - r-curl 20 | - r-servr 21 | - r-bookdown 22 | - r-pagedown 23 | # - rstudio>=1.1 24 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | repos: 2 | - repo: https://github.com/pre-commit/pre-commit-hooks 3 | rev: v4.6.0 4 | hooks: 5 | - id: trailing-whitespace 6 | - id: end-of-file-fixer 7 | - id: check-docstring-first 8 | - id: check-json 9 | - id: check-yaml 10 | - id: double-quote-string-fixer 11 | 12 | # - repo: https://github.com/prettier/prettier 13 | # rev: 2.1.2 14 | # hooks: 15 | # - id: prettier 16 | -------------------------------------------------------------------------------- /install_dep.r: -------------------------------------------------------------------------------- 1 | options(unzip = Sys.which("unzip")) 2 | Sys.which("tar") 3 | 4 | # install.packages('renv') 5 | 6 | # # Initialize renv and restore from the lockfile if it exists 7 | # if (!file.exists("renv.lock")) { 8 | # renv::init(bare = TRUE) 9 | # } else { 10 | # renv::restore() 11 | # } 12 | install.packages(c('remotes', 'devtools')) 13 | remotes::install_github('mitchelloharawild/icons@v0.1.0') 14 | devtools::install_github("nstrayer/datadrivencv") 15 | 16 | # # Snapshot the current state of the library 17 | # renv::snapshot() 18 | -------------------------------------------------------------------------------- /src/render_cv.r: -------------------------------------------------------------------------------- 1 | # This script builds both the HTML and PDF versions of your CV 2 | 3 | # If you wanted to speed up rendering for googlesheets driven CVs you could use 4 | # this script to cache a version of the CV_Printer class with data already 5 | # loaded and load the cached version in the .Rmd instead of re-fetching it twice 6 | # for the HTML and PDF rendering. This exercise is left to the reader. 7 | 8 | # Knit the HTML version 9 | rmarkdown::render("cv.rmd", 10 | params = list(pdf_mode = FALSE), 11 | output_file = "../index.html") 12 | 13 | # Knit the PDF version to temporary html location 14 | tmp_html_cv_loc <- fs::file_temp(ext = ".html") 15 | rmarkdown::render("cv.rmd", 16 | params = list(pdf_mode = TRUE), 17 | output_file = tmp_html_cv_loc) 18 | 19 | # Convert to PDF using Pagedown 20 | pagedown::chrome_print(input = tmp_html_cv_loc, 21 | output = "../banihirwe_cv.pdf") 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # My pagedown rendered CV 2 | 3 | [![Build](https://github.com/andersy005/cv/actions/workflows/build.yaml/badge.svg)](https://github.com/andersy005/cv/actions/workflows/build.yaml) 4 | - [My pagedown rendered CV](#my-pagedown-rendered-cv) 5 | - [Dependencies](#dependencies) 6 | - [Building it](#building-it) 7 | 8 | ## Dependencies 9 | 10 | - [pagedown](https://pagedown.rbind.io/) 11 | - [datadrivencv](http://nickstrayer.me/datadrivencv/) 12 | 13 | ## Building it 14 | 15 | ```r 16 | # install.packages("devtools") 17 | devtools::install_github("nstrayer/datadrivencv") 18 | ``` 19 | 20 | ```r 21 | # run ?datadrivencv::use_datadriven_cv to see more details 22 | datadrivencv::use_datadriven_cv( 23 | full_name = "Anderson Banihirwe", 24 | data_location = "https://docs.google.com/spreadsheets/d/10wYJwHo-xOG1U-V0xrf6mGBlVZwAX2rLOG4IS4D9ikQ", 25 | pdf_location = "https://github.com/andersy005/cv/raw/master/banihirwe_cv.pdf", 26 | html_location = "andersonbanihirwe.dev/cv/", 27 | source_location = "https://github.com/andersy005/cv" 28 | ) 29 | ``` 30 | -------------------------------------------------------------------------------- /.github/workflows/build.yaml: -------------------------------------------------------------------------------- 1 | name: Build 2 | on: 3 | push: 4 | branches: 5 | - main 6 | workflow_dispatch: # allows you to trigger the workflow run manually 7 | jobs: 8 | build: 9 | if: "!contains(github.event.head_commit.message, 'skip ci')" 10 | runs-on: ubuntu-latest 11 | env: 12 | GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} 13 | defaults: 14 | run: 15 | shell: bash -l {0} 16 | steps: 17 | 18 | - uses: actions/checkout@v4 19 | - uses: r-lib/actions/setup-pandoc@v2 20 | 21 | - uses: r-lib/actions/setup-r@v2 22 | with: 23 | r-version: '4.1.2' 24 | use-public-rspm: true 25 | 26 | # - uses: r-lib/actions/setup-renv@v2 27 | 28 | - name: Install dependencies 29 | run: | 30 | Rscript install_dep.r 31 | 32 | # - name: Upload renv.lock to GitHub Artifacts 33 | # uses: actions/upload-artifact@v3 34 | # with: 35 | # name: renv-lockfile 36 | # path: renv.lock 37 | 38 | - name: Render Resume 39 | run: | 40 | cd src/ 41 | Rscript render_cv.r 42 | 43 | - name: Commit up-to-date files 44 | run: | 45 | git config --global user.email "action@github.com" 46 | git config --global user.name "GitHub Action" 47 | git add . && git commit -m "[skip ci] Add up-to-date files." 48 | 49 | - name: Push commit 50 | uses: ad-m/github-push-action@master 51 | with: 52 | github_token: ${{ secrets.GITHUB_TOKEN }} 53 | branch: ${{ github.event.pull_request.head.ref }} 54 | force: true 55 | -------------------------------------------------------------------------------- /src/dd_cv.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css?family=Montserrat|Playfair+Display&display=swap"); 2 | 3 | /* Main text is monserrat*/ 4 | body { 5 | font-family: "Montserrat", sans-serif; 6 | font-weight: 300; 7 | line-height: 1.3; 8 | color: #444; 9 | } 10 | 11 | /* Give headers playfair font */ 12 | h1, 13 | h2, 14 | h3 { 15 | font-family: "Playfair Display", serif; 16 | color: #000; 17 | } 18 | 19 | /* When in PDF export mode make sure superscripts are nice and small and italic */ 20 | sup { 21 | font-size: 0.45rem; 22 | font-style: italic; 23 | } 24 | 25 | /* Avoid the breaking within a section */ 26 | .blocks { 27 | break-inside: avoid; 28 | } 29 | 30 | * { 31 | /* Override default right margin for sidebar*/ 32 | --pagedjs-margin-right: 0.2in; 33 | --pagedjs-margin-left: 0.2in; 34 | } 35 | 36 | /* Customize some of the sizing variables */ 37 | :root { 38 | --sidebar-width: 12rem; /* Shrink sidebar width */ 39 | --sidebar-background-color: #f7fbff; /* Make sidebar blue */ 40 | --sidebar-horizontal-padding: 0.01in; /* Reduce sidebar padding */ 41 | --decorator-outer-dim: 10px; /* Make position deliniating circles larger */ 42 | --decorator-border: 2px solid #bdd7e7; /* Make timeline a blue as well*/ 43 | } 44 | 45 | .details .place { 46 | margin-top: 0.25rem; 47 | } 48 | 49 | .main-block:not(.concise) .details div { 50 | padding-top: 0.005rem; 51 | } 52 | 53 | /* Laptop icon isn't centered by default which is lame */ 54 | .fa-laptop { 55 | margin-left: -3px; 56 | } 57 | 58 | /* When we have links at bottom in a list make sure they actually are numbered */ 59 | #links li { 60 | list-style-type: decimal; 61 | } 62 | 63 | /* Dont put the little fake list point in front of links */ 64 | .aside li::before { 65 | display: none; 66 | } 67 | 68 | /* Move closer to start and up towards header */ 69 | .aside ul { 70 | padding-left: 1rem; 71 | } 72 | 73 | .aside li::before { 74 | position: relative; 75 | margin-left: -4.25pt; 76 | content: "• "; 77 | } 78 | 79 | /* Make sure elements in asside are centered and have a nice small text */ 80 | .aside { 81 | width: calc(var(--sidebar-width) + 9px); 82 | line-height: 1.2; 83 | font-size: 0.75rem; 84 | } 85 | 86 | /* Make little circle outline be a light blue */ 87 | .decorator::after { 88 | background-color: #08306b; 89 | } 90 | 91 | /* Remove the fake bullets from lists */ 92 | .aside li::before { 93 | content: auto; 94 | } 95 | 96 | .skill-bar { 97 | color: white; 98 | padding: 0.1rem 0.25rem; 99 | margin-top: 3px; 100 | position: relative; 101 | width: 100%; 102 | } 103 | 104 | 105 | /* When the class no-timeline is added we remove the after psuedo element from the header... */ 106 | 107 | /* Removes the psuedo element on h2 tags for this section */ 108 | .section.no-timeline h2::after { 109 | content: none; 110 | } 111 | 112 | /* Without adding padding the content is all up on the title */ 113 | .section.no-timeline h2 { 114 | padding-bottom: 1rem; 115 | } 116 | 117 | /* Add styles for little cards */ 118 | .info-card{ 119 | width: 220px; 120 | float: left; 121 | padding: 0.5rem; 122 | margin: 0.5rem; 123 | box-shadow: 1px 1px 4px black; 124 | } 125 | -------------------------------------------------------------------------------- /src/cv.rmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Anderson Banihirwe's CV" 3 | author: Anderson Banihirwe 4 | date: "`r Sys.Date()`" 5 | params: 6 | pdf_mode: 7 | value: true 8 | output: 9 | pagedown::html_resume: 10 | css: ['dd_cv.css', 'resume'] 11 | self_contained: true 12 | --- 13 | 14 | ```{r, include=FALSE} 15 | knitr::opts_chunk$set( 16 | results='asis', 17 | echo = FALSE 18 | ) 19 | 20 | library(magrittr) # For the pipe 21 | source("cv_printing_functions.r") 22 | 23 | # Read in all data and initialize a CV printer object 24 | CV <- create_CV_object( 25 | data_location = "https://docs.google.com/spreadsheets/d/10wYJwHo-xOG1U-V0xrf6mGBlVZwAX2rLOG4IS4D9ikQ", 26 | pdf_mode = params$pdf_mode 27 | ) 28 | 29 | ``` 30 | 31 | 32 | ```{r} 33 | # When in pdf export mode the little dots are unaligned, so fix that with some conditional CSS. 34 | if(params$pdf_mode) { 35 | cat(" 36 | ") 41 | } 42 | ``` 43 | 44 | 45 | Aside 46 | ================================================================================ 47 | 48 | ```{r} 49 | # Build interactive network of positions colored by section 50 | # and connected if they occurred in the same year 51 | datadrivencv::build_network_logo(CV$entries_data) 52 | ``` 53 | 54 | ```{r} 55 | if(params$pdf_mode){ 56 | cat("View this CV online with links at _cv.andersonbanihirwe.dev_") 57 | } else { 58 | cat("[ Download a PDF of this CV](https://github.com/andersy005/cv/raw/master/banihirwe_cv.pdf)") 59 | } 60 | ``` 61 | 62 | Contact {#contact} 63 | -------------------------------------------------------------------------------- 64 | 65 | ```{r} 66 | CV %>% print_contact_info() 67 | ``` 68 | 69 | 70 | 71 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | Disclaimer {#disclaimer} 81 | -------------------------------------------------------------------------------- 82 | 83 | 86 | 87 | Last updated on `r Sys.Date()`. 88 | 89 | 90 | 91 | Main 92 | ================================================================================ 93 | 94 | Anderson Banihirwe {#title} 95 | -------------------------------------------------------------------------------- 96 | 97 | ```{r} 98 | # Note the special double pipe so we modify the CV object in place 99 | CV %<>% print_text_block("intro") 100 | ``` 101 | 102 | 103 | 104 | Education {data-icon=graduation-cap data-concise=true} 105 | -------------------------------------------------------------------------------- 106 | 107 | ```{r} 108 | CV %<>% print_section('education') 109 | ``` 110 | 111 | Professional Experience {data-icon=suitcase} 112 | -------------------------------------------------------------------------------- 113 | 114 | 115 | ```{r} 116 | CV %<>% print_section('industry_positions') 117 | ``` 118 | 119 | 120 | 123 | 124 | Selected Publications, Posters, and Talks {data-icon=book} 125 | -------------------------------------------------------------------------------- 126 | 127 | ```{r} 128 | CV %<>% print_section('academic_articles') 129 | ``` 130 | 131 | 132 | 133 | ```{r} 134 | CV %<>% print_links() 135 | ``` 136 | -------------------------------------------------------------------------------- /src/data/entries.csv: -------------------------------------------------------------------------------- 1 | Where in your CV this entry belongs,Main title of the entry,Location the entry occured,Primary institution affiliation for entry,Start date of entry (year),"End year of entry. Set to ""current"" if entry is still ongoing.","Each description column is a separate bullet point for the entry. If you need more description bullet points simply add a new column with title ""description_{4,5,..}""",,,A filter variable that is used to decide if entry is in the smaller resume. 2 | section,title,loc,institution,start,end,description_1,description_2,description_3,in_resume 3 | education,"B.S., Computer Systems Engineering",University of Arkansas at Little Rock,"Little Rock, AR",2014,2018,,,,TRUE 4 | industry_positions,Software Engineer,National Center for Atmospheric Research,"Boulder, CO",2018-10,current,"Assisted with the development, implementation, and maintenance of software contributions to Open Source packages --namely dask, xarray, intake, jupyter --- used by the Pangeo community as they pertain to NCAR systems or data.",Developed and maintened Pangeo-related installations and deployments on premise High Performance Computing (HPC) systems or commercial cloud that access NCAR resources.,"Assisted with the development and deployment of live (virtual or in-person) and online/self-paced education material, including training websites, Jupyter notebook examples, and teaching modules.",TRUE 5 | industry_positions,Software Developer Intern,Quansight,"Austin, TX",2018-05,2018-09,"Developed [xndframes](https://github.com/xnd-project/xndframes), a Pandas ExtensionDtype/Array backed by [xnd](https://github.com/xnd-project), a container type that maps most Python values relevant for scientific computing directly to typed memory.",Worked on integrating [cuDF](https://github.com/rapidsai/cudf) - GPU dataframe library with [Apache Arrow](https://arrow.apache.org/) library.,Worked closely with a customer to port existing Postgres code base to a Dask based workflow.,TRUE 6 | industry_positions,Data Science Intern,First Orion,"Little Rock, AR",2017-11,2018-04,"Built scoring, predictive models with Scikit-learn, Dask, and Apache Spark using First Orion's proprietary telecommunication data.",,,TRUE 7 | industry_positions,Research Intern,National Center for Atmospheric Research,"Boulder, CO",2017-05,2017-08,"Developed [spark-xarray](https://ncar.github.io/PySpark4Climate/), a Python package that integrates PySpark and xarray for climate data analysis.",,,TRUE 8 | academic_articles,[The Pangeo Ecosystem: Interactive Computing Tools for the Geosciences: Benchmarking on HPC](https://doi.org/10.1007/978-3-030-44728-1_12),2019 Supercomputing Conference Workshop on Interactive High-Performance Computing,,,2020,"Authored with Tina Erica Odaka, Guillaume Eynard-Bontemps, Aurelien Ponte, Guillaume Maze, Kevin Paul, Jared Baker, Ryan Abernathey.",,,TRUE 9 | academic_articles,"Zarr: chunked, compressed, multidimensional arrays",2020 Cloud Native Geospatial Outreach Day,Online,,2020-09,"Invited talk about [Zarr](https://github.com/zarr-developers), an open source data format for the storage of chunked, compressed, multidimensional arrays.",Recorded talk: https://www.youtube.com/watch?v=cOMkgQssVPk&list=PL3QzFgBMGnbQWbW-V09AzSfCbnf6Q87Rq&index=4&t=1471s,Slides: https://talks.andersonbanihirwe.dev/zarr-cloud-native-geospatial-2020.html,TRUE 10 | academic_articles,Intake-ESM – Making It Easier To Consume Climate and Weather Data,2020 ESIP Summer Meeting,Online,,2020-07,"Invited talk about intake-esm, an intake plugin for working with Earth System Model (ESM) datasets.",Recorded talk: https://youtu.be/OpzF6IwIHRA?t=1400,Slides: https://talks.andersonbanihirwe.dev/intake-esm-esip-2020.html,TRUE 11 | academic_articles,[Intake / Pangeo Catalog: Making It Easier To Consume Earth’s Climate and Weather Data](https://github.com/earthcube2020/ec20_banihirwe_etal),2020 EarthCube Annual Meeting,Online,,2020-06,Contributed Jupyter notebook about [Pangeo](https://pangeo.io/)'s data cataloging efforts.,,,TRUE 12 | academic_articles,[Perceptual Judgments to Detect Computer Generated Forged Faces in Social Media](https://www.researchgate.net/profile/Mariofanna_Milanova/publication/333414231_Perceptual_Judgments_to_Detect_Computer_Generated_Forged_Faces_in_Social_Media/links/5e2c963092851c3aaddac2f5/Perceptual-Judgments-to-Detect-Computer-Generated-Forged-Faces-in-Social-Media.pdf),IAPR Workshop on Multimodal Pattern Recognition of Social Signals in Human-Computer Interaction,,,2019,"Authored with Suzan Anwar, Mariofanna Milanova, Mardin Anwer.",,,TRUE 13 | academic_articles,[Interactive Supercomputing with Dask and Jupyter](https://youtu.be/vhawO8fgD64),2019 Scientific Computing with Python conference,"Austin, TX",,2019-07,Contributed talk about Dask and Jupyter.,Recorded talk: https://youtu.be/vhawO8fgD64,Slides: https://andersonbanihirwe.dev/talks/dask-jupyter-scipy-2019.html,TRUE 14 | academic_articles,[Beyond Matplotlib - Tutorial: Building Interactive Climate Data Visualizations with Bokeh and Friends](https://sea.ucar.edu/event/beyond-matplotlib-building-interactive-climate-data-visualizations-bokeh-and-friends),2018 UCAR Software Engineering Assembly conference,"Boulder, CO",,2018-04,Contributed tutorial about interactive visualization with Python.,Tutorial materials: https://github.com/andersy005/beyond-matplotlib-tutorial-sea-2018,,TRUE 15 | academic_articles,"PySpark for ""Big"" Atmospheric Data Analysis",Eighth Symposium on Advances in Modeling and Analysis Using Python,"Austin, TX",,2018-01,Contributed talk about [spark-xarray](https://ncar.github.io/PySpark4Climate/sparkxarray/overview/).,Recorded Talk: https://ams.confex.com/ams/98Annual/webprogram/Paper334546.html,Slides: https://opensky.ucar.edu/islandora/object/conference%3A3443,TRUE 16 | -------------------------------------------------------------------------------- /src/data/banihirwe_cv_data - entries.csv: -------------------------------------------------------------------------------- 1 | Where in your CV this entry belongs,Main title of the entry,Location the entry occured,Primary institution affiliation for entry,Start date of entry (year),"End year of entry. Set to ""current"" if entry is still ongoing.","Each description column is a separate bullet point for the entry. If you need more description bullet points simply add a new column with title ""description_{4,5,..}""",,,A filter variable that is used to decide if entry is in the smaller resume. 2 | section,title,loc,institution,start,end,description_1,description_2,description_3,in_resume 3 | education,"B.S., Computer Systems Engineering",University of Arkansas at Little Rock,"Little Rock, AR",2014,2018,,,,TRUE 4 | industry_positions,Software Engineer,National Center for Atmospheric Research,"Boulder, CO",2018-10,current,"Assisted with the development, implementation, and maintenance of software contributions to Open Source packages --namely dask, xarray, intake, jupyter --- used by the Pangeo community as they pertain to NCAR systems or data.",Assisted with the development and maintenance of Pangeo-related installations and deployments on premise High Performance Computing (HPC) systems or commercial cloud that access NCAR resources.,"Assisted with the development and deployment of live (virtual or in-person) and online/self-paced education material, including training websites, Jupyter notebook examples, and teaching modules.",TRUE 5 | industry_positions,Software Developer Intern,Quansight,"Austin, TX",2018-05,2018-09,"Developed [xndframes](https://github.com/xnd-project/xndframes), a Pandas ExtensionDtype/Array backed by [xnd](https://github.com/xnd-project), a container type that maps most Python values relevant for scientific computing directly to typed memory.",Worked on integrating [cuDF](https://github.com/rapidsai/cudf) - GPU dataframe library with [Apache Arrow](https://arrow.apache.org/) library.,Worked closely with a customer to port existing Postgres code base to a Dask based workflow.,TRUE 6 | industry_positions,Data Science Intern,First Orion,"Little Rock, AR",2017-11,2018-04,"Built scoring, predictive models with Scikit-learn, Dask, and Apache Spark using First Orion's proprietary telecommunication data.",,,TRUE 7 | industry_positions,Research Intern,National Center for Atmospheric Research,"Boulder, CO",2017-05,2017-08,"Developed [spark-xarray](https://ncar.github.io/PySpark4Climate/), a Python package that integrates PySpark and xarray for climate data analysis.",,,TRUE 8 | academic_articles,[The Pangeo Ecosystem: Interactive Computing Tools for the Geosciences: Benchmarking on HPC](https://doi.org/10.1007/978-3-030-44728-1_12),2019 Supercomputing Conference Workshop on Interactive High-Performance Computing,,,2020,"Authored with Tina Erica Odaka, Guillaume Eynard-Bontemps, Aurelien Ponte, Guillaume Maze, Kevin Paul, Jared Baker, Ryan Abernathey.",,,TRUE 9 | academic_articles,"Zarr: chunked, compressed, multidimensional arrays",2020 Cloud Native Geospatial Outreach Day,Online,,2020-09,"Invited talk about [Zarr](https://github.com/zarr-developers), an open source data format for the storage of chunked, compressed, multidimensional arrays.",Recorded talk: https://www.youtube.com/watch?v=cOMkgQssVPk&list=PL3QzFgBMGnbQWbW-V09AzSfCbnf6Q87Rq&index=4&t=1471s,Slides: https://talks.andersonbanihirwe.dev/zarr-cloud-native-geospatial-2020.html,TRUE 10 | academic_articles,Intake-ESM – Making It Easier To Consume Climate and Weather Data,2020 ESIP Summer Meeting,Online,,2020-07,"Invited talk about intake-esm, an intake plugin for working with Earth System Model (ESM) datasets.",Recorded talk: https://youtu.be/OpzF6IwIHRA?t=1400,Slides: https://talks.andersonbanihirwe.dev/intake-esm-esip-2020.html,TRUE 11 | academic_articles,[Intake / Pangeo Catalog: Making It Easier To Consume Earth’s Climate and Weather Data](https://github.com/earthcube2020/ec20_banihirwe_etal),2020 EarthCube Annual Meeting,Online,,2020-06,Contributed Jupyter notebook about [Pangeo](https://pangeo.io/)'s data cataloging efforts.,,,TRUE 12 | academic_articles,[Perceptual Judgments to Detect Computer Generated Forged Faces in Social Media](https://www.researchgate.net/profile/Mariofanna_Milanova/publication/333414231_Perceptual_Judgments_to_Detect_Computer_Generated_Forged_Faces_in_Social_Media/links/5e2c963092851c3aaddac2f5/Perceptual-Judgments-to-Detect-Computer-Generated-Forged-Faces-in-Social-Media.pdf),IAPR Workshop on Multimodal Pattern Recognition of Social Signals in Human-Computer Interaction,,,2019,"Authored with Suzan Anwar, Mariofanna Milanova, Mardin Anwer.",,,TRUE 13 | academic_articles,[Interactive Supercomputing with Dask and Jupyter](https://youtu.be/vhawO8fgD64),2019 Scientific Computing with Python conference,"Austin, TX",,2019-07,Contributed talk about Dask and Jupyter.,Recorded talk: https://youtu.be/vhawO8fgD64,Slides: https://andersonbanihirwe.dev/talks/dask-jupyter-scipy-2019.html,TRUE 14 | academic_articles,[Beyond Matplotlib - Tutorial: Building Interactive Climate Data Visualizations with Bokeh and Friends](https://sea.ucar.edu/event/beyond-matplotlib-building-interactive-climate-data-visualizations-bokeh-and-friends),2018 UCAR Software Engineering Assembly conference,"Boulder, CO",,2018-04,Contributed tutorial about interactive visualization with Python.,Tutorial materials: https://github.com/andersy005/beyond-matplotlib-tutorial-sea-2018,,TRUE 15 | academic_articles,"PySpark for ""Big"" Atmospheric Data Analysis",Eighth Symposium on Advances in Modeling and Analysis Using Python,"Austin, TX",,2018-01,Contributed talk about [spark-xarray](https://ncar.github.io/PySpark4Climate/sparkxarray/overview/).,Recorded Talk: https://ams.confex.com/ams/98Annual/webprogram/Paper334546.html,Slides: https://opensky.ucar.edu/islandora/object/conference%3A3443,TRUE 16 | -------------------------------------------------------------------------------- /src/cv_printing_functions.r: -------------------------------------------------------------------------------- 1 | # This file contains all the code needed to parse and print various sections of your CV 2 | # from data. Feel free to tweak it as you desire! 3 | 4 | 5 | #' Create a CV_Printer object. 6 | #' 7 | #' @param data_location Path of the spreadsheets holding all your data. This can be 8 | #' either a URL to a google sheet with multiple sheets containing the four 9 | #' data types or a path to a folder containing four `.csv`s with the neccesary 10 | #' data. 11 | #' @param source_location Where is the code to build your CV hosted? 12 | #' @param pdf_mode Is the output being rendered into a pdf? Aka do links need 13 | #' to be stripped? 14 | #' @param sheet_is_publicly_readable If you're using google sheets for data, 15 | #' is the sheet publicly available? (Makes authorization easier.) 16 | #' @return A new `CV_Printer` object. 17 | create_CV_object <- function(data_location, 18 | pdf_mode = FALSE, 19 | sheet_is_publicly_readable = TRUE) { 20 | 21 | cv <- list( 22 | pdf_mode = pdf_mode, 23 | links = c() 24 | ) 25 | 26 | is_google_sheets_location <- stringr::str_detect(data_location, "docs\\.google\\.com") 27 | 28 | if(is_google_sheets_location){ 29 | if(sheet_is_publicly_readable){ 30 | # This tells google sheets to not try and authenticate. Note that this will only 31 | # work if your sheet has sharing set to "anyone with link can view" 32 | googlesheets4::gs4_deauth() 33 | } else { 34 | # My info is in a public sheet so there's no need to do authentication but if you want 35 | # to use a private sheet, then this is the way you need to do it. 36 | # designate project-specific cache so we can render Rmd without problems 37 | options(gargle_oauth_cache = ".secrets") 38 | } 39 | 40 | read_gsheet <- function(sheet_id){ 41 | googlesheets4::read_sheet(data_location, sheet = sheet_id, skip = 1, col_types = "c") 42 | } 43 | cv$entries_data <- read_gsheet(sheet_id = "entries") 44 | cv$skills <- read_gsheet(sheet_id = "language_skills") 45 | cv$text_blocks <- read_gsheet(sheet_id = "text_blocks") 46 | cv$contact_info <- read_gsheet(sheet_id = "contact_info") 47 | } else { 48 | # Want to go old-school with csvs? 49 | cv$entries_data <- readr::read_csv(paste0(data_location, "entries.csv"), skip = 1) 50 | cv$skills <- readr::read_csv(paste0(data_location, "language_skills.csv"), skip = 1) 51 | cv$text_blocks <- readr::read_csv(paste0(data_location, "text_blocks.csv"), skip = 1) 52 | cv$contact_info <- readr::read_csv(paste0(data_location, "contact_info.csv"), skip = 1) 53 | } 54 | 55 | 56 | extract_year <- function(dates){ 57 | date_year <- stringr::str_extract(dates, "(20|19)[0-9]{2}") 58 | date_year[is.na(date_year)] <- lubridate::year(lubridate::ymd(Sys.Date())) + 10 59 | 60 | date_year 61 | } 62 | 63 | parse_dates <- function(dates){ 64 | 65 | date_month <- stringr::str_extract(dates, "(\\w+|\\d+)(?=(\\s|\\/|-)(20|19)[0-9]{2})") 66 | date_month[is.na(date_month)] <- "1" 67 | 68 | paste("1", date_month, extract_year(dates), sep = "-") %>% 69 | lubridate::dmy() 70 | } 71 | 72 | # Clean up entries dataframe to format we need it for printing 73 | cv$entries_data %<>% 74 | tidyr::unite( 75 | tidyr::starts_with('description'), 76 | col = "description_bullets", 77 | sep = "\n- ", 78 | na.rm = TRUE 79 | ) %>% 80 | dplyr::mutate( 81 | description_bullets = ifelse(description_bullets != "", paste0("- ", description_bullets), ""), 82 | start = ifelse(start == "NULL", NA, start), 83 | end = ifelse(end == "NULL", NA, end), 84 | start_year = extract_year(start), 85 | end_year = extract_year(end), 86 | no_start = is.na(start), 87 | has_start = !no_start, 88 | no_end = is.na(end), 89 | has_end = !no_end, 90 | timeline = dplyr::case_when( 91 | no_start & no_end ~ "N/A", 92 | no_start & has_end ~ as.character(end), 93 | has_start & no_end ~ paste("Current", "-", start), 94 | TRUE ~ paste(end, "-", start) 95 | ) 96 | ) %>% 97 | dplyr::arrange(desc(parse_dates(end))) %>% 98 | dplyr::mutate_all(~ ifelse(is.na(.), 'N/A', .)) 99 | 100 | cv 101 | } 102 | 103 | 104 | # Remove links from a text block and add to internal list 105 | sanitize_links <- function(cv, text){ 106 | if(cv$pdf_mode){ 107 | link_titles <- stringr::str_extract_all(text, '(?<=\\[).+?(?=\\])')[[1]] 108 | link_destinations <- stringr::str_extract_all(text, '(?<=\\().+?(?=\\))')[[1]] 109 | 110 | n_links <- length(cv$links) 111 | n_new_links <- length(link_titles) 112 | 113 | if(n_new_links > 0){ 114 | # add links to links array 115 | cv$links <- c(cv$links, link_destinations) 116 | 117 | # Build map of link destination to superscript 118 | link_superscript_mappings <- purrr::set_names( 119 | paste0("", (1:n_new_links) + n_links, ""), 120 | paste0("(", link_destinations, ")") 121 | ) 122 | 123 | # Replace the link destination and remove square brackets for title 124 | text <- text %>% 125 | stringr::str_replace_all(stringr::fixed(link_superscript_mappings)) %>% 126 | stringr::str_replace_all('\\[(.+?)\\]', "\\1") 127 | } 128 | } 129 | 130 | list(cv = cv, text = text) 131 | } 132 | 133 | 134 | #' @description Take a position data frame and the section id desired and prints the section to markdown. 135 | #' @param section_id ID of the entries section to be printed as encoded by the `section` column of the `entries` table 136 | print_section <- function(cv, section_id, glue_template = "default"){ 137 | 138 | if(glue_template == "default"){ 139 | glue_template <- " 140 | ### {title} 141 | 142 | {loc} 143 | 144 | {institution} 145 | 146 | {timeline} 147 | 148 | {description_bullets} 149 | \n\n\n" 150 | } 151 | 152 | section_data <- dplyr::filter(cv$entries_data, section == section_id) 153 | 154 | # Take entire entries data frame and removes the links in descending order 155 | # so links for the same position are right next to each other in number. 156 | for(i in 1:nrow(section_data)){ 157 | for(col in c('title', 'description_bullets')){ 158 | strip_res <- sanitize_links(cv, section_data[i, col]) 159 | section_data[i, col] <- strip_res$text 160 | cv <- strip_res$cv 161 | } 162 | } 163 | 164 | print(glue::glue_data(section_data, glue_template)) 165 | 166 | invisible(strip_res$cv) 167 | } 168 | 169 | 170 | 171 | #' @description Prints out text block identified by a given label. 172 | #' @param label ID of the text block to print as encoded in `label` column of `text_blocks` table. 173 | print_text_block <- function(cv, label){ 174 | text_block <- dplyr::filter(cv$text_blocks, loc == label) %>% 175 | dplyr::pull(text) 176 | 177 | strip_res <- sanitize_links(cv, text_block) 178 | 179 | cat(strip_res$text) 180 | 181 | invisible(strip_res$cv) 182 | } 183 | 184 | 185 | 186 | #' @description Construct a bar chart of skills 187 | #' @param out_of The relative maximum for skills. Used to set what a fully filled in skill bar is. 188 | print_skill_bars <- function(cv, out_of = 5, bar_color = "#969696", bar_background = "#d9d9d9", glue_template = "default"){ 189 | 190 | if(glue_template == "default"){ 191 | glue_template <- " 192 |
{skill}
" 198 | } 199 | cv$skills %>% 200 | dplyr::mutate(width_percent = round(100*as.numeric(level)/out_of)) %>% 201 | glue::glue_data(glue_template) %>% 202 | print() 203 | 204 | invisible(cv) 205 | } 206 | 207 | 208 | 209 | #' @description List of all links in document labeled by their superscript integer. 210 | print_links <- function(cv) { 211 | n_links <- length(cv$links) 212 | if (n_links > 0) { 213 | cat(" 214 | Links {data-icon=link} 215 | -------------------------------------------------------------------------------- 216 | 217 |
218 | 219 | 220 | ") 221 | 222 | purrr::walk2(cv$links, 1:n_links, function(link, index) { 223 | print(glue::glue('{index}. {link}')) 224 | }) 225 | } 226 | 227 | invisible(cv) 228 | } 229 | 230 | 231 | 232 | #' @description Contact information section with icons 233 | print_contact_info <- function(cv){ 234 | glue::glue_data( 235 | cv$contact_info, 236 | "- {contact}" 237 | ) %>% print() 238 | 239 | invisible(cv) 240 | } 241 | -------------------------------------------------------------------------------- /renv.lock: -------------------------------------------------------------------------------- 1 | { 2 | "R": { 3 | "Version": "4.1.2", 4 | "Repositories": [ 5 | { 6 | "Name": "RSPM", 7 | "URL": "https://packagemanager.posit.co/cran/latest" 8 | }, 9 | { 10 | "Name": "CRAN", 11 | "URL": "https://cran.rstudio.com" 12 | } 13 | ] 14 | }, 15 | "Packages": { 16 | "AsioHeaders": { 17 | "Package": "AsioHeaders", 18 | "Version": "1.22.1-2", 19 | "Source": "Repository", 20 | "Repository": "RSPM", 21 | "Hash": "85bf3bd8fa58da21a22d84fd4f4ef0a8" 22 | }, 23 | "R6": { 24 | "Package": "R6", 25 | "Version": "2.5.1", 26 | "Source": "Repository", 27 | "Repository": "CRAN", 28 | "Requirements": [ 29 | "R" 30 | ], 31 | "Hash": "470851b6d5d0ac559e9d01bb352b4021" 32 | }, 33 | "Rcpp": { 34 | "Package": "Rcpp", 35 | "Version": "1.0.12", 36 | "Source": "Repository", 37 | "Repository": "CRAN", 38 | "Requirements": [ 39 | "methods", 40 | "utils" 41 | ], 42 | "Hash": "5ea2700d21e038ace58269ecdbeb9ec0" 43 | }, 44 | "askpass": { 45 | "Package": "askpass", 46 | "Version": "1.2.0", 47 | "Source": "Repository", 48 | "Repository": "CRAN", 49 | "Requirements": [ 50 | "sys" 51 | ], 52 | "Hash": "cad6cf7f1d5f6e906700b9d3e718c796" 53 | }, 54 | "base64enc": { 55 | "Package": "base64enc", 56 | "Version": "0.1-3", 57 | "Source": "Repository", 58 | "Repository": "CRAN", 59 | "Requirements": [ 60 | "R" 61 | ], 62 | "Hash": "543776ae6848fde2f48ff3816d0628bc" 63 | }, 64 | "bit": { 65 | "Package": "bit", 66 | "Version": "4.0.5", 67 | "Source": "Repository", 68 | "Repository": "RSPM", 69 | "Requirements": [ 70 | "R" 71 | ], 72 | "Hash": "d242abec29412ce988848d0294b208fd" 73 | }, 74 | "bit64": { 75 | "Package": "bit64", 76 | "Version": "4.0.5", 77 | "Source": "Repository", 78 | "Repository": "RSPM", 79 | "Requirements": [ 80 | "R", 81 | "bit", 82 | "methods", 83 | "stats", 84 | "utils" 85 | ], 86 | "Hash": "9fe98599ca456d6552421db0d6772d8f" 87 | }, 88 | "bookdown": { 89 | "Package": "bookdown", 90 | "Version": "0.39", 91 | "Source": "Repository", 92 | "Repository": "RSPM", 93 | "Requirements": [ 94 | "R", 95 | "htmltools", 96 | "jquerylib", 97 | "knitr", 98 | "rmarkdown", 99 | "tinytex", 100 | "xfun", 101 | "yaml" 102 | ], 103 | "Hash": "cb4f7066855b6f936e8d25edc9a9cff9" 104 | }, 105 | "brew": { 106 | "Package": "brew", 107 | "Version": "1.0-10", 108 | "Source": "Repository", 109 | "Repository": "CRAN", 110 | "Hash": "8f4a384e19dccd8c65356dc096847b76" 111 | }, 112 | "brio": { 113 | "Package": "brio", 114 | "Version": "1.1.5", 115 | "Source": "Repository", 116 | "Repository": "CRAN", 117 | "Requirements": [ 118 | "R" 119 | ], 120 | "Hash": "c1ee497a6d999947c2c224ae46799b1a" 121 | }, 122 | "bslib": { 123 | "Package": "bslib", 124 | "Version": "0.7.0", 125 | "Source": "Repository", 126 | "Repository": "CRAN", 127 | "Requirements": [ 128 | "R", 129 | "base64enc", 130 | "cachem", 131 | "fastmap", 132 | "grDevices", 133 | "htmltools", 134 | "jquerylib", 135 | "jsonlite", 136 | "lifecycle", 137 | "memoise", 138 | "mime", 139 | "rlang", 140 | "sass" 141 | ], 142 | "Hash": "8644cc53f43828f19133548195d7e59e" 143 | }, 144 | "cachem": { 145 | "Package": "cachem", 146 | "Version": "1.1.0", 147 | "Source": "Repository", 148 | "Repository": "CRAN", 149 | "Requirements": [ 150 | "fastmap", 151 | "rlang" 152 | ], 153 | "Hash": "cd9a672193789068eb5a2aad65a0dedf" 154 | }, 155 | "callr": { 156 | "Package": "callr", 157 | "Version": "3.7.6", 158 | "Source": "Repository", 159 | "Repository": "CRAN", 160 | "Requirements": [ 161 | "R", 162 | "R6", 163 | "processx", 164 | "utils" 165 | ], 166 | "Hash": "d7e13f49c19103ece9e58ad2d83a7354" 167 | }, 168 | "cellranger": { 169 | "Package": "cellranger", 170 | "Version": "1.1.0", 171 | "Source": "Repository", 172 | "Repository": "RSPM", 173 | "Requirements": [ 174 | "R", 175 | "rematch", 176 | "tibble" 177 | ], 178 | "Hash": "f61dbaec772ccd2e17705c1e872e9e7c" 179 | }, 180 | "cli": { 181 | "Package": "cli", 182 | "Version": "3.6.2", 183 | "Source": "Repository", 184 | "Repository": "CRAN", 185 | "Requirements": [ 186 | "R", 187 | "utils" 188 | ], 189 | "Hash": "1216ac65ac55ec0058a6f75d7ca0fd52" 190 | }, 191 | "clipr": { 192 | "Package": "clipr", 193 | "Version": "0.8.0", 194 | "Source": "Repository", 195 | "Repository": "CRAN", 196 | "Requirements": [ 197 | "utils" 198 | ], 199 | "Hash": "3f038e5ac7f41d4ac41ce658c85e3042" 200 | }, 201 | "commonmark": { 202 | "Package": "commonmark", 203 | "Version": "1.9.1", 204 | "Source": "Repository", 205 | "Repository": "CRAN", 206 | "Hash": "5d8225445acb167abf7797de48b2ee3c" 207 | }, 208 | "cpp11": { 209 | "Package": "cpp11", 210 | "Version": "0.4.7", 211 | "Source": "Repository", 212 | "Repository": "CRAN", 213 | "Requirements": [ 214 | "R" 215 | ], 216 | "Hash": "5a295d7d963cc5035284dcdbaf334f4e" 217 | }, 218 | "crayon": { 219 | "Package": "crayon", 220 | "Version": "1.5.2", 221 | "Source": "Repository", 222 | "Repository": "CRAN", 223 | "Requirements": [ 224 | "grDevices", 225 | "methods", 226 | "utils" 227 | ], 228 | "Hash": "e8a1e41acf02548751f45c718d55aa6a" 229 | }, 230 | "credentials": { 231 | "Package": "credentials", 232 | "Version": "2.0.1", 233 | "Source": "Repository", 234 | "Repository": "CRAN", 235 | "Requirements": [ 236 | "askpass", 237 | "curl", 238 | "jsonlite", 239 | "openssl", 240 | "sys" 241 | ], 242 | "Hash": "c7844b32098dcbd1c59cbd8dddb4ecc6" 243 | }, 244 | "curl": { 245 | "Package": "curl", 246 | "Version": "5.2.1", 247 | "Source": "Repository", 248 | "Repository": "CRAN", 249 | "Requirements": [ 250 | "R" 251 | ], 252 | "Hash": "411ca2c03b1ce5f548345d2fc2685f7a" 253 | }, 254 | "datadrivencv": { 255 | "Package": "datadrivencv", 256 | "Version": "0.1.0", 257 | "Source": "GitHub", 258 | "Remotes": "ropenscilabs/icon", 259 | "RemoteType": "github", 260 | "RemoteHost": "api.github.com", 261 | "RemoteRepo": "datadrivencv", 262 | "RemoteUsername": "nstrayer", 263 | "RemoteRef": "HEAD", 264 | "RemoteSha": "0b598044602568d3f793bea136e846ded0a33776", 265 | "Requirements": [ 266 | "dplyr", 267 | "fs", 268 | "glue", 269 | "googlesheets4", 270 | "icon", 271 | "lubridate", 272 | "magrittr", 273 | "pagedown", 274 | "purrr", 275 | "readr", 276 | "stringr", 277 | "tidyr", 278 | "whisker" 279 | ], 280 | "Hash": "e3dbdaf4bdff839bb140307773b33f6d" 281 | }, 282 | "desc": { 283 | "Package": "desc", 284 | "Version": "1.4.3", 285 | "Source": "Repository", 286 | "Repository": "CRAN", 287 | "Requirements": [ 288 | "R", 289 | "R6", 290 | "cli", 291 | "utils" 292 | ], 293 | "Hash": "99b79fcbd6c4d1ce087f5c5c758b384f" 294 | }, 295 | "devtools": { 296 | "Package": "devtools", 297 | "Version": "2.4.5", 298 | "Source": "Repository", 299 | "Repository": "CRAN", 300 | "Requirements": [ 301 | "R", 302 | "cli", 303 | "desc", 304 | "ellipsis", 305 | "fs", 306 | "lifecycle", 307 | "memoise", 308 | "miniUI", 309 | "pkgbuild", 310 | "pkgdown", 311 | "pkgload", 312 | "profvis", 313 | "rcmdcheck", 314 | "remotes", 315 | "rlang", 316 | "roxygen2", 317 | "rversions", 318 | "sessioninfo", 319 | "stats", 320 | "testthat", 321 | "tools", 322 | "urlchecker", 323 | "usethis", 324 | "utils", 325 | "withr" 326 | ], 327 | "Hash": "ea5bc8b4a6a01e4f12d98b58329930bb" 328 | }, 329 | "diffobj": { 330 | "Package": "diffobj", 331 | "Version": "0.3.5", 332 | "Source": "Repository", 333 | "Repository": "CRAN", 334 | "Requirements": [ 335 | "R", 336 | "crayon", 337 | "methods", 338 | "stats", 339 | "tools", 340 | "utils" 341 | ], 342 | "Hash": "bcaa8b95f8d7d01a5dedfd959ce88ab8" 343 | }, 344 | "digest": { 345 | "Package": "digest", 346 | "Version": "0.6.35", 347 | "Source": "Repository", 348 | "Repository": "CRAN", 349 | "Requirements": [ 350 | "R", 351 | "utils" 352 | ], 353 | "Hash": "698ece7ba5a4fa4559e3d537e7ec3d31" 354 | }, 355 | "downlit": { 356 | "Package": "downlit", 357 | "Version": "0.4.3", 358 | "Source": "Repository", 359 | "Repository": "CRAN", 360 | "Requirements": [ 361 | "R", 362 | "brio", 363 | "desc", 364 | "digest", 365 | "evaluate", 366 | "fansi", 367 | "memoise", 368 | "rlang", 369 | "vctrs", 370 | "withr", 371 | "yaml" 372 | ], 373 | "Hash": "14fa1f248b60ed67e1f5418391a17b14" 374 | }, 375 | "dplyr": { 376 | "Package": "dplyr", 377 | "Version": "1.1.4", 378 | "Source": "Repository", 379 | "Repository": "RSPM", 380 | "Requirements": [ 381 | "R", 382 | "R6", 383 | "cli", 384 | "generics", 385 | "glue", 386 | "lifecycle", 387 | "magrittr", 388 | "methods", 389 | "pillar", 390 | "rlang", 391 | "tibble", 392 | "tidyselect", 393 | "utils", 394 | "vctrs" 395 | ], 396 | "Hash": "fedd9d00c2944ff00a0e2696ccf048ec" 397 | }, 398 | "ellipsis": { 399 | "Package": "ellipsis", 400 | "Version": "0.3.2", 401 | "Source": "Repository", 402 | "Repository": "CRAN", 403 | "Requirements": [ 404 | "R", 405 | "rlang" 406 | ], 407 | "Hash": "bb0eec2fe32e88d9e2836c2f73ea2077" 408 | }, 409 | "evaluate": { 410 | "Package": "evaluate", 411 | "Version": "0.24.0", 412 | "Source": "Repository", 413 | "Repository": "CRAN", 414 | "Requirements": [ 415 | "R", 416 | "methods" 417 | ], 418 | "Hash": "a1066cbc05caee9a4bf6d90f194ff4da" 419 | }, 420 | "fansi": { 421 | "Package": "fansi", 422 | "Version": "1.0.6", 423 | "Source": "Repository", 424 | "Repository": "CRAN", 425 | "Requirements": [ 426 | "R", 427 | "grDevices", 428 | "utils" 429 | ], 430 | "Hash": "962174cf2aeb5b9eea581522286a911f" 431 | }, 432 | "fastmap": { 433 | "Package": "fastmap", 434 | "Version": "1.2.0", 435 | "Source": "Repository", 436 | "Repository": "CRAN", 437 | "Hash": "aa5e1cd11c2d15497494c5292d7ffcc8" 438 | }, 439 | "fontawesome": { 440 | "Package": "fontawesome", 441 | "Version": "0.5.2", 442 | "Source": "Repository", 443 | "Repository": "CRAN", 444 | "Requirements": [ 445 | "R", 446 | "htmltools", 447 | "rlang" 448 | ], 449 | "Hash": "c2efdd5f0bcd1ea861c2d4e2a883a67d" 450 | }, 451 | "fs": { 452 | "Package": "fs", 453 | "Version": "1.6.4", 454 | "Source": "Repository", 455 | "Repository": "CRAN", 456 | "Requirements": [ 457 | "R", 458 | "methods" 459 | ], 460 | "Hash": "15aeb8c27f5ea5161f9f6a641fafd93a" 461 | }, 462 | "gargle": { 463 | "Package": "gargle", 464 | "Version": "1.5.2", 465 | "Source": "Repository", 466 | "Repository": "RSPM", 467 | "Requirements": [ 468 | "R", 469 | "cli", 470 | "fs", 471 | "glue", 472 | "httr", 473 | "jsonlite", 474 | "lifecycle", 475 | "openssl", 476 | "rappdirs", 477 | "rlang", 478 | "stats", 479 | "utils", 480 | "withr" 481 | ], 482 | "Hash": "fc0b272e5847c58cd5da9b20eedbd026" 483 | }, 484 | "generics": { 485 | "Package": "generics", 486 | "Version": "0.1.3", 487 | "Source": "Repository", 488 | "Repository": "RSPM", 489 | "Requirements": [ 490 | "R", 491 | "methods" 492 | ], 493 | "Hash": "15e9634c0fcd294799e9b2e929ed1b86" 494 | }, 495 | "gert": { 496 | "Package": "gert", 497 | "Version": "2.0.1", 498 | "Source": "Repository", 499 | "Repository": "CRAN", 500 | "Requirements": [ 501 | "askpass", 502 | "credentials", 503 | "openssl", 504 | "rstudioapi", 505 | "sys", 506 | "zip" 507 | ], 508 | "Hash": "f70d3fe2d9e7654213a946963d1591eb" 509 | }, 510 | "gh": { 511 | "Package": "gh", 512 | "Version": "1.4.1", 513 | "Source": "Repository", 514 | "Repository": "CRAN", 515 | "Requirements": [ 516 | "R", 517 | "cli", 518 | "gitcreds", 519 | "glue", 520 | "httr2", 521 | "ini", 522 | "jsonlite", 523 | "lifecycle", 524 | "rlang" 525 | ], 526 | "Hash": "fbbbc48eba7a6626a08bb365e44b563b" 527 | }, 528 | "gitcreds": { 529 | "Package": "gitcreds", 530 | "Version": "0.1.2", 531 | "Source": "Repository", 532 | "Repository": "CRAN", 533 | "Requirements": [ 534 | "R" 535 | ], 536 | "Hash": "ab08ac61f3e1be454ae21911eb8bc2fe" 537 | }, 538 | "glue": { 539 | "Package": "glue", 540 | "Version": "1.7.0", 541 | "Source": "Repository", 542 | "Repository": "CRAN", 543 | "Requirements": [ 544 | "R", 545 | "methods" 546 | ], 547 | "Hash": "e0b3a53876554bd45879e596cdb10a52" 548 | }, 549 | "googledrive": { 550 | "Package": "googledrive", 551 | "Version": "2.1.1", 552 | "Source": "Repository", 553 | "Repository": "RSPM", 554 | "Requirements": [ 555 | "R", 556 | "cli", 557 | "gargle", 558 | "glue", 559 | "httr", 560 | "jsonlite", 561 | "lifecycle", 562 | "magrittr", 563 | "pillar", 564 | "purrr", 565 | "rlang", 566 | "tibble", 567 | "utils", 568 | "uuid", 569 | "vctrs", 570 | "withr" 571 | ], 572 | "Hash": "e99641edef03e2a5e87f0a0b1fcc97f4" 573 | }, 574 | "googlesheets4": { 575 | "Package": "googlesheets4", 576 | "Version": "1.1.1", 577 | "Source": "Repository", 578 | "Repository": "RSPM", 579 | "Requirements": [ 580 | "R", 581 | "cellranger", 582 | "cli", 583 | "curl", 584 | "gargle", 585 | "glue", 586 | "googledrive", 587 | "httr", 588 | "ids", 589 | "lifecycle", 590 | "magrittr", 591 | "methods", 592 | "purrr", 593 | "rematch2", 594 | "rlang", 595 | "tibble", 596 | "utils", 597 | "vctrs", 598 | "withr" 599 | ], 600 | "Hash": "d6db1667059d027da730decdc214b959" 601 | }, 602 | "highr": { 603 | "Package": "highr", 604 | "Version": "0.11", 605 | "Source": "Repository", 606 | "Repository": "CRAN", 607 | "Requirements": [ 608 | "R", 609 | "xfun" 610 | ], 611 | "Hash": "d65ba49117ca223614f71b60d85b8ab7" 612 | }, 613 | "hms": { 614 | "Package": "hms", 615 | "Version": "1.1.3", 616 | "Source": "Repository", 617 | "Repository": "RSPM", 618 | "Requirements": [ 619 | "lifecycle", 620 | "methods", 621 | "pkgconfig", 622 | "rlang", 623 | "vctrs" 624 | ], 625 | "Hash": "b59377caa7ed00fa41808342002138f9" 626 | }, 627 | "htmltools": { 628 | "Package": "htmltools", 629 | "Version": "0.5.8.1", 630 | "Source": "Repository", 631 | "Repository": "CRAN", 632 | "Requirements": [ 633 | "R", 634 | "base64enc", 635 | "digest", 636 | "fastmap", 637 | "grDevices", 638 | "rlang", 639 | "utils" 640 | ], 641 | "Hash": "81d371a9cc60640e74e4ab6ac46dcedc" 642 | }, 643 | "htmlwidgets": { 644 | "Package": "htmlwidgets", 645 | "Version": "1.6.4", 646 | "Source": "Repository", 647 | "Repository": "CRAN", 648 | "Requirements": [ 649 | "grDevices", 650 | "htmltools", 651 | "jsonlite", 652 | "knitr", 653 | "rmarkdown", 654 | "yaml" 655 | ], 656 | "Hash": "04291cc45198225444a397606810ac37" 657 | }, 658 | "httpuv": { 659 | "Package": "httpuv", 660 | "Version": "1.6.15", 661 | "Source": "Repository", 662 | "Repository": "CRAN", 663 | "Requirements": [ 664 | "R", 665 | "R6", 666 | "Rcpp", 667 | "later", 668 | "promises", 669 | "utils" 670 | ], 671 | "Hash": "d55aa087c47a63ead0f6fc10f8fa1ee0" 672 | }, 673 | "httr": { 674 | "Package": "httr", 675 | "Version": "1.4.7", 676 | "Source": "Repository", 677 | "Repository": "CRAN", 678 | "Requirements": [ 679 | "R", 680 | "R6", 681 | "curl", 682 | "jsonlite", 683 | "mime", 684 | "openssl" 685 | ], 686 | "Hash": "ac107251d9d9fd72f0ca8049988f1d7f" 687 | }, 688 | "httr2": { 689 | "Package": "httr2", 690 | "Version": "1.0.1", 691 | "Source": "Repository", 692 | "Repository": "CRAN", 693 | "Requirements": [ 694 | "R", 695 | "R6", 696 | "cli", 697 | "curl", 698 | "glue", 699 | "lifecycle", 700 | "magrittr", 701 | "openssl", 702 | "rappdirs", 703 | "rlang", 704 | "vctrs", 705 | "withr" 706 | ], 707 | "Hash": "03d741c92fda96d98c3a3f22494e3b4a" 708 | }, 709 | "icon": { 710 | "Package": "icon", 711 | "Version": "0.1.0", 712 | "Source": "GitHub", 713 | "RemoteType": "github", 714 | "RemoteHost": "api.github.com", 715 | "RemoteRepo": "icons", 716 | "RemoteUsername": "mitchelloharawild", 717 | "RemoteRef": "v0.1.0", 718 | "RemoteSha": "4ef7ed0a88f006d1d15a97a8b0ba1cc1df6d6c93", 719 | "Requirements": [ 720 | "R", 721 | "htmltools", 722 | "knitr", 723 | "rmarkdown" 724 | ], 725 | "Hash": "7364e6ad857c897cbd5eb574fc89c424" 726 | }, 727 | "ids": { 728 | "Package": "ids", 729 | "Version": "1.0.1", 730 | "Source": "Repository", 731 | "Repository": "RSPM", 732 | "Requirements": [ 733 | "openssl", 734 | "uuid" 735 | ], 736 | "Hash": "99df65cfef20e525ed38c3d2577f7190" 737 | }, 738 | "ini": { 739 | "Package": "ini", 740 | "Version": "0.3.1", 741 | "Source": "Repository", 742 | "Repository": "CRAN", 743 | "Hash": "6154ec2223172bce8162d4153cda21f7" 744 | }, 745 | "jquerylib": { 746 | "Package": "jquerylib", 747 | "Version": "0.1.4", 748 | "Source": "Repository", 749 | "Repository": "CRAN", 750 | "Requirements": [ 751 | "htmltools" 752 | ], 753 | "Hash": "5aab57a3bd297eee1c1d862735972182" 754 | }, 755 | "jsonlite": { 756 | "Package": "jsonlite", 757 | "Version": "1.8.8", 758 | "Source": "Repository", 759 | "Repository": "CRAN", 760 | "Requirements": [ 761 | "methods" 762 | ], 763 | "Hash": "e1b9c55281c5adc4dd113652d9e26768" 764 | }, 765 | "knitr": { 766 | "Package": "knitr", 767 | "Version": "1.47", 768 | "Source": "Repository", 769 | "Repository": "CRAN", 770 | "Requirements": [ 771 | "R", 772 | "evaluate", 773 | "highr", 774 | "methods", 775 | "tools", 776 | "xfun", 777 | "yaml" 778 | ], 779 | "Hash": "7c99b2d55584b982717fcc0950378612" 780 | }, 781 | "later": { 782 | "Package": "later", 783 | "Version": "1.3.2", 784 | "Source": "Repository", 785 | "Repository": "CRAN", 786 | "Requirements": [ 787 | "Rcpp", 788 | "rlang" 789 | ], 790 | "Hash": "a3e051d405326b8b0012377434c62b37" 791 | }, 792 | "lifecycle": { 793 | "Package": "lifecycle", 794 | "Version": "1.0.4", 795 | "Source": "Repository", 796 | "Repository": "CRAN", 797 | "Requirements": [ 798 | "R", 799 | "cli", 800 | "glue", 801 | "rlang" 802 | ], 803 | "Hash": "b8552d117e1b808b09a832f589b79035" 804 | }, 805 | "lubridate": { 806 | "Package": "lubridate", 807 | "Version": "1.9.3", 808 | "Source": "Repository", 809 | "Repository": "RSPM", 810 | "Requirements": [ 811 | "R", 812 | "generics", 813 | "methods", 814 | "timechange" 815 | ], 816 | "Hash": "680ad542fbcf801442c83a6ac5a2126c" 817 | }, 818 | "magrittr": { 819 | "Package": "magrittr", 820 | "Version": "2.0.3", 821 | "Source": "Repository", 822 | "Repository": "CRAN", 823 | "Requirements": [ 824 | "R" 825 | ], 826 | "Hash": "7ce2733a9826b3aeb1775d56fd305472" 827 | }, 828 | "memoise": { 829 | "Package": "memoise", 830 | "Version": "2.0.1", 831 | "Source": "Repository", 832 | "Repository": "CRAN", 833 | "Requirements": [ 834 | "cachem", 835 | "rlang" 836 | ], 837 | "Hash": "e2817ccf4a065c5d9d7f2cfbe7c1d78c" 838 | }, 839 | "mime": { 840 | "Package": "mime", 841 | "Version": "0.12", 842 | "Source": "Repository", 843 | "Repository": "CRAN", 844 | "Requirements": [ 845 | "tools" 846 | ], 847 | "Hash": "18e9c28c1d3ca1560ce30658b22ce104" 848 | }, 849 | "miniUI": { 850 | "Package": "miniUI", 851 | "Version": "0.1.1.1", 852 | "Source": "Repository", 853 | "Repository": "CRAN", 854 | "Requirements": [ 855 | "htmltools", 856 | "shiny", 857 | "utils" 858 | ], 859 | "Hash": "fec5f52652d60615fdb3957b3d74324a" 860 | }, 861 | "openssl": { 862 | "Package": "openssl", 863 | "Version": "2.2.0", 864 | "Source": "Repository", 865 | "Repository": "CRAN", 866 | "Requirements": [ 867 | "askpass" 868 | ], 869 | "Hash": "2bcca3848e4734eb3b16103bc9aa4b8e" 870 | }, 871 | "pagedown": { 872 | "Package": "pagedown", 873 | "Version": "0.20", 874 | "Source": "Repository", 875 | "Repository": "RSPM", 876 | "Requirements": [ 877 | "R", 878 | "bookdown", 879 | "htmltools", 880 | "httpuv", 881 | "jsonlite", 882 | "later", 883 | "processx", 884 | "rmarkdown", 885 | "servr", 886 | "websocket", 887 | "xfun" 888 | ], 889 | "Hash": "d1cb0a04921876e321420588e9a5aa91" 890 | }, 891 | "pillar": { 892 | "Package": "pillar", 893 | "Version": "1.9.0", 894 | "Source": "Repository", 895 | "Repository": "CRAN", 896 | "Requirements": [ 897 | "cli", 898 | "fansi", 899 | "glue", 900 | "lifecycle", 901 | "rlang", 902 | "utf8", 903 | "utils", 904 | "vctrs" 905 | ], 906 | "Hash": "15da5a8412f317beeee6175fbc76f4bb" 907 | }, 908 | "pkgbuild": { 909 | "Package": "pkgbuild", 910 | "Version": "1.4.4", 911 | "Source": "Repository", 912 | "Repository": "CRAN", 913 | "Requirements": [ 914 | "R", 915 | "R6", 916 | "callr", 917 | "cli", 918 | "desc", 919 | "processx" 920 | ], 921 | "Hash": "a29e8e134a460a01e0ca67a4763c595b" 922 | }, 923 | "pkgconfig": { 924 | "Package": "pkgconfig", 925 | "Version": "2.0.3", 926 | "Source": "Repository", 927 | "Repository": "CRAN", 928 | "Requirements": [ 929 | "utils" 930 | ], 931 | "Hash": "01f28d4278f15c76cddbea05899c5d6f" 932 | }, 933 | "pkgdown": { 934 | "Package": "pkgdown", 935 | "Version": "2.0.9", 936 | "Source": "Repository", 937 | "Repository": "CRAN", 938 | "Requirements": [ 939 | "R", 940 | "bslib", 941 | "callr", 942 | "cli", 943 | "desc", 944 | "digest", 945 | "downlit", 946 | "fs", 947 | "httr", 948 | "jsonlite", 949 | "magrittr", 950 | "memoise", 951 | "purrr", 952 | "ragg", 953 | "rlang", 954 | "rmarkdown", 955 | "tibble", 956 | "whisker", 957 | "withr", 958 | "xml2", 959 | "yaml" 960 | ], 961 | "Hash": "8bf1151ed1a48328d71b937e651117a6" 962 | }, 963 | "pkgload": { 964 | "Package": "pkgload", 965 | "Version": "1.3.4", 966 | "Source": "Repository", 967 | "Repository": "CRAN", 968 | "Requirements": [ 969 | "R", 970 | "cli", 971 | "crayon", 972 | "desc", 973 | "fs", 974 | "glue", 975 | "methods", 976 | "pkgbuild", 977 | "rlang", 978 | "rprojroot", 979 | "utils", 980 | "withr" 981 | ], 982 | "Hash": "876c618df5ae610be84356d5d7a5d124" 983 | }, 984 | "praise": { 985 | "Package": "praise", 986 | "Version": "1.0.0", 987 | "Source": "Repository", 988 | "Repository": "CRAN", 989 | "Hash": "a555924add98c99d2f411e37e7d25e9f" 990 | }, 991 | "prettyunits": { 992 | "Package": "prettyunits", 993 | "Version": "1.2.0", 994 | "Source": "Repository", 995 | "Repository": "CRAN", 996 | "Requirements": [ 997 | "R" 998 | ], 999 | "Hash": "6b01fc98b1e86c4f705ce9dcfd2f57c7" 1000 | }, 1001 | "processx": { 1002 | "Package": "processx", 1003 | "Version": "3.8.4", 1004 | "Source": "Repository", 1005 | "Repository": "CRAN", 1006 | "Requirements": [ 1007 | "R", 1008 | "R6", 1009 | "ps", 1010 | "utils" 1011 | ], 1012 | "Hash": "0c90a7d71988856bad2a2a45dd871bb9" 1013 | }, 1014 | "profvis": { 1015 | "Package": "profvis", 1016 | "Version": "0.3.8", 1017 | "Source": "Repository", 1018 | "Repository": "CRAN", 1019 | "Requirements": [ 1020 | "R", 1021 | "htmlwidgets", 1022 | "purrr", 1023 | "rlang", 1024 | "stringr", 1025 | "vctrs" 1026 | ], 1027 | "Hash": "aa5a3864397ce6ae03458f98618395a1" 1028 | }, 1029 | "progress": { 1030 | "Package": "progress", 1031 | "Version": "1.2.3", 1032 | "Source": "Repository", 1033 | "Repository": "RSPM", 1034 | "Requirements": [ 1035 | "R", 1036 | "R6", 1037 | "crayon", 1038 | "hms", 1039 | "prettyunits" 1040 | ], 1041 | "Hash": "f4625e061cb2865f111b47ff163a5ca6" 1042 | }, 1043 | "promises": { 1044 | "Package": "promises", 1045 | "Version": "1.3.0", 1046 | "Source": "Repository", 1047 | "Repository": "CRAN", 1048 | "Requirements": [ 1049 | "R6", 1050 | "Rcpp", 1051 | "fastmap", 1052 | "later", 1053 | "magrittr", 1054 | "rlang", 1055 | "stats" 1056 | ], 1057 | "Hash": "434cd5388a3979e74be5c219bcd6e77d" 1058 | }, 1059 | "ps": { 1060 | "Package": "ps", 1061 | "Version": "1.7.6", 1062 | "Source": "Repository", 1063 | "Repository": "CRAN", 1064 | "Requirements": [ 1065 | "R", 1066 | "utils" 1067 | ], 1068 | "Hash": "dd2b9319ee0656c8acf45c7f40c59de7" 1069 | }, 1070 | "purrr": { 1071 | "Package": "purrr", 1072 | "Version": "1.0.2", 1073 | "Source": "Repository", 1074 | "Repository": "CRAN", 1075 | "Requirements": [ 1076 | "R", 1077 | "cli", 1078 | "lifecycle", 1079 | "magrittr", 1080 | "rlang", 1081 | "vctrs" 1082 | ], 1083 | "Hash": "1cba04a4e9414bdefc9dcaa99649a8dc" 1084 | }, 1085 | "ragg": { 1086 | "Package": "ragg", 1087 | "Version": "1.3.2", 1088 | "Source": "Repository", 1089 | "Repository": "CRAN", 1090 | "Requirements": [ 1091 | "systemfonts", 1092 | "textshaping" 1093 | ], 1094 | "Hash": "e3087db406e079a8a2fd87f413918ed3" 1095 | }, 1096 | "rappdirs": { 1097 | "Package": "rappdirs", 1098 | "Version": "0.3.3", 1099 | "Source": "Repository", 1100 | "Repository": "CRAN", 1101 | "Requirements": [ 1102 | "R" 1103 | ], 1104 | "Hash": "5e3c5dc0b071b21fa128676560dbe94d" 1105 | }, 1106 | "rcmdcheck": { 1107 | "Package": "rcmdcheck", 1108 | "Version": "1.4.0", 1109 | "Source": "Repository", 1110 | "Repository": "CRAN", 1111 | "Requirements": [ 1112 | "R6", 1113 | "callr", 1114 | "cli", 1115 | "curl", 1116 | "desc", 1117 | "digest", 1118 | "pkgbuild", 1119 | "prettyunits", 1120 | "rprojroot", 1121 | "sessioninfo", 1122 | "utils", 1123 | "withr", 1124 | "xopen" 1125 | ], 1126 | "Hash": "8f25ebe2ec38b1f2aef3b0d2ef76f6c4" 1127 | }, 1128 | "readr": { 1129 | "Package": "readr", 1130 | "Version": "2.1.5", 1131 | "Source": "Repository", 1132 | "Repository": "RSPM", 1133 | "Requirements": [ 1134 | "R", 1135 | "R6", 1136 | "cli", 1137 | "clipr", 1138 | "cpp11", 1139 | "crayon", 1140 | "hms", 1141 | "lifecycle", 1142 | "methods", 1143 | "rlang", 1144 | "tibble", 1145 | "tzdb", 1146 | "utils", 1147 | "vroom" 1148 | ], 1149 | "Hash": "9de96463d2117f6ac49980577939dfb3" 1150 | }, 1151 | "rematch": { 1152 | "Package": "rematch", 1153 | "Version": "2.0.0", 1154 | "Source": "Repository", 1155 | "Repository": "RSPM", 1156 | "Hash": "cbff1b666c6fa6d21202f07e2318d4f1" 1157 | }, 1158 | "rematch2": { 1159 | "Package": "rematch2", 1160 | "Version": "2.1.2", 1161 | "Source": "Repository", 1162 | "Repository": "CRAN", 1163 | "Requirements": [ 1164 | "tibble" 1165 | ], 1166 | "Hash": "76c9e04c712a05848ae7a23d2f170a40" 1167 | }, 1168 | "remotes": { 1169 | "Package": "remotes", 1170 | "Version": "2.5.0", 1171 | "Source": "Repository", 1172 | "Repository": "CRAN", 1173 | "Requirements": [ 1174 | "R", 1175 | "methods", 1176 | "stats", 1177 | "tools", 1178 | "utils" 1179 | ], 1180 | "Hash": "3ee025083e66f18db6cf27b56e23e141" 1181 | }, 1182 | "renv": { 1183 | "Package": "renv", 1184 | "Version": "1.0.7", 1185 | "Source": "Repository", 1186 | "Repository": "RSPM", 1187 | "Requirements": [ 1188 | "utils" 1189 | ], 1190 | "Hash": "397b7b2a265bc5a7a06852524dabae20" 1191 | }, 1192 | "rlang": { 1193 | "Package": "rlang", 1194 | "Version": "1.1.4", 1195 | "Source": "Repository", 1196 | "Repository": "CRAN", 1197 | "Requirements": [ 1198 | "R", 1199 | "utils" 1200 | ], 1201 | "Hash": "3eec01f8b1dee337674b2e34ab1f9bc1" 1202 | }, 1203 | "rmarkdown": { 1204 | "Package": "rmarkdown", 1205 | "Version": "2.27", 1206 | "Source": "Repository", 1207 | "Repository": "CRAN", 1208 | "Requirements": [ 1209 | "R", 1210 | "bslib", 1211 | "evaluate", 1212 | "fontawesome", 1213 | "htmltools", 1214 | "jquerylib", 1215 | "jsonlite", 1216 | "knitr", 1217 | "methods", 1218 | "tinytex", 1219 | "tools", 1220 | "utils", 1221 | "xfun", 1222 | "yaml" 1223 | ], 1224 | "Hash": "27f9502e1cdbfa195f94e03b0f517484" 1225 | }, 1226 | "roxygen2": { 1227 | "Package": "roxygen2", 1228 | "Version": "7.3.1", 1229 | "Source": "Repository", 1230 | "Repository": "CRAN", 1231 | "Requirements": [ 1232 | "R", 1233 | "R6", 1234 | "brew", 1235 | "cli", 1236 | "commonmark", 1237 | "cpp11", 1238 | "desc", 1239 | "knitr", 1240 | "methods", 1241 | "pkgload", 1242 | "purrr", 1243 | "rlang", 1244 | "stringi", 1245 | "stringr", 1246 | "utils", 1247 | "withr", 1248 | "xml2" 1249 | ], 1250 | "Hash": "c25fe7b2d8cba73d1b63c947bf7afdb9" 1251 | }, 1252 | "rprojroot": { 1253 | "Package": "rprojroot", 1254 | "Version": "2.0.4", 1255 | "Source": "Repository", 1256 | "Repository": "CRAN", 1257 | "Requirements": [ 1258 | "R" 1259 | ], 1260 | "Hash": "4c8415e0ec1e29f3f4f6fc108bef0144" 1261 | }, 1262 | "rstudioapi": { 1263 | "Package": "rstudioapi", 1264 | "Version": "0.16.0", 1265 | "Source": "Repository", 1266 | "Repository": "CRAN", 1267 | "Hash": "96710351d642b70e8f02ddeb237c46a7" 1268 | }, 1269 | "rversions": { 1270 | "Package": "rversions", 1271 | "Version": "2.1.2", 1272 | "Source": "Repository", 1273 | "Repository": "CRAN", 1274 | "Requirements": [ 1275 | "curl", 1276 | "utils", 1277 | "xml2" 1278 | ], 1279 | "Hash": "a9881dfed103e83f9de151dc17002cd1" 1280 | }, 1281 | "sass": { 1282 | "Package": "sass", 1283 | "Version": "0.4.9", 1284 | "Source": "Repository", 1285 | "Repository": "CRAN", 1286 | "Requirements": [ 1287 | "R6", 1288 | "fs", 1289 | "htmltools", 1290 | "rappdirs", 1291 | "rlang" 1292 | ], 1293 | "Hash": "d53dbfddf695303ea4ad66f86e99b95d" 1294 | }, 1295 | "servr": { 1296 | "Package": "servr", 1297 | "Version": "0.30", 1298 | "Source": "Repository", 1299 | "Repository": "RSPM", 1300 | "Requirements": [ 1301 | "R", 1302 | "httpuv", 1303 | "jsonlite", 1304 | "mime", 1305 | "xfun" 1306 | ], 1307 | "Hash": "562294886e51319dfad3f3e6e61fb0b8" 1308 | }, 1309 | "sessioninfo": { 1310 | "Package": "sessioninfo", 1311 | "Version": "1.2.2", 1312 | "Source": "Repository", 1313 | "Repository": "CRAN", 1314 | "Requirements": [ 1315 | "R", 1316 | "cli", 1317 | "tools", 1318 | "utils" 1319 | ], 1320 | "Hash": "3f9796a8d0a0e8c6eb49a4b029359d1f" 1321 | }, 1322 | "shiny": { 1323 | "Package": "shiny", 1324 | "Version": "1.8.1.1", 1325 | "Source": "Repository", 1326 | "Repository": "CRAN", 1327 | "Requirements": [ 1328 | "R", 1329 | "R6", 1330 | "bslib", 1331 | "cachem", 1332 | "commonmark", 1333 | "crayon", 1334 | "fastmap", 1335 | "fontawesome", 1336 | "glue", 1337 | "grDevices", 1338 | "htmltools", 1339 | "httpuv", 1340 | "jsonlite", 1341 | "later", 1342 | "lifecycle", 1343 | "methods", 1344 | "mime", 1345 | "promises", 1346 | "rlang", 1347 | "sourcetools", 1348 | "tools", 1349 | "utils", 1350 | "withr", 1351 | "xtable" 1352 | ], 1353 | "Hash": "54b26646816af9960a4c64d8ceec75d6" 1354 | }, 1355 | "sourcetools": { 1356 | "Package": "sourcetools", 1357 | "Version": "0.1.7-1", 1358 | "Source": "Repository", 1359 | "Repository": "CRAN", 1360 | "Requirements": [ 1361 | "R" 1362 | ], 1363 | "Hash": "5f5a7629f956619d519205ec475fe647" 1364 | }, 1365 | "stringi": { 1366 | "Package": "stringi", 1367 | "Version": "1.8.4", 1368 | "Source": "Repository", 1369 | "Repository": "CRAN", 1370 | "Requirements": [ 1371 | "R", 1372 | "stats", 1373 | "tools", 1374 | "utils" 1375 | ], 1376 | "Hash": "39e1144fd75428983dc3f63aa53dfa91" 1377 | }, 1378 | "stringr": { 1379 | "Package": "stringr", 1380 | "Version": "1.5.1", 1381 | "Source": "Repository", 1382 | "Repository": "CRAN", 1383 | "Requirements": [ 1384 | "R", 1385 | "cli", 1386 | "glue", 1387 | "lifecycle", 1388 | "magrittr", 1389 | "rlang", 1390 | "stringi", 1391 | "vctrs" 1392 | ], 1393 | "Hash": "960e2ae9e09656611e0b8214ad543207" 1394 | }, 1395 | "sys": { 1396 | "Package": "sys", 1397 | "Version": "3.4.2", 1398 | "Source": "Repository", 1399 | "Repository": "CRAN", 1400 | "Hash": "3a1be13d68d47a8cd0bfd74739ca1555" 1401 | }, 1402 | "systemfonts": { 1403 | "Package": "systemfonts", 1404 | "Version": "1.1.0", 1405 | "Source": "Repository", 1406 | "Repository": "CRAN", 1407 | "Requirements": [ 1408 | "R", 1409 | "cpp11", 1410 | "lifecycle" 1411 | ], 1412 | "Hash": "213b6b8ed5afbf934843e6c3b090d418" 1413 | }, 1414 | "testthat": { 1415 | "Package": "testthat", 1416 | "Version": "3.2.1.1", 1417 | "Source": "Repository", 1418 | "Repository": "CRAN", 1419 | "Requirements": [ 1420 | "R", 1421 | "R6", 1422 | "brio", 1423 | "callr", 1424 | "cli", 1425 | "desc", 1426 | "digest", 1427 | "evaluate", 1428 | "jsonlite", 1429 | "lifecycle", 1430 | "magrittr", 1431 | "methods", 1432 | "pkgload", 1433 | "praise", 1434 | "processx", 1435 | "ps", 1436 | "rlang", 1437 | "utils", 1438 | "waldo", 1439 | "withr" 1440 | ], 1441 | "Hash": "3f6e7e5e2220856ff865e4834766bf2b" 1442 | }, 1443 | "textshaping": { 1444 | "Package": "textshaping", 1445 | "Version": "0.4.0", 1446 | "Source": "Repository", 1447 | "Repository": "CRAN", 1448 | "Requirements": [ 1449 | "R", 1450 | "cpp11", 1451 | "lifecycle", 1452 | "systemfonts" 1453 | ], 1454 | "Hash": "5142f8bc78ed3d819d26461b641627ce" 1455 | }, 1456 | "tibble": { 1457 | "Package": "tibble", 1458 | "Version": "3.2.1", 1459 | "Source": "Repository", 1460 | "Repository": "CRAN", 1461 | "Requirements": [ 1462 | "R", 1463 | "fansi", 1464 | "lifecycle", 1465 | "magrittr", 1466 | "methods", 1467 | "pillar", 1468 | "pkgconfig", 1469 | "rlang", 1470 | "utils", 1471 | "vctrs" 1472 | ], 1473 | "Hash": "a84e2cc86d07289b3b6f5069df7a004c" 1474 | }, 1475 | "tidyr": { 1476 | "Package": "tidyr", 1477 | "Version": "1.3.1", 1478 | "Source": "Repository", 1479 | "Repository": "RSPM", 1480 | "Requirements": [ 1481 | "R", 1482 | "cli", 1483 | "cpp11", 1484 | "dplyr", 1485 | "glue", 1486 | "lifecycle", 1487 | "magrittr", 1488 | "purrr", 1489 | "rlang", 1490 | "stringr", 1491 | "tibble", 1492 | "tidyselect", 1493 | "utils", 1494 | "vctrs" 1495 | ], 1496 | "Hash": "915fb7ce036c22a6a33b5a8adb712eb1" 1497 | }, 1498 | "tidyselect": { 1499 | "Package": "tidyselect", 1500 | "Version": "1.2.1", 1501 | "Source": "Repository", 1502 | "Repository": "RSPM", 1503 | "Requirements": [ 1504 | "R", 1505 | "cli", 1506 | "glue", 1507 | "lifecycle", 1508 | "rlang", 1509 | "vctrs", 1510 | "withr" 1511 | ], 1512 | "Hash": "829f27b9c4919c16b593794a6344d6c0" 1513 | }, 1514 | "timechange": { 1515 | "Package": "timechange", 1516 | "Version": "0.3.0", 1517 | "Source": "Repository", 1518 | "Repository": "RSPM", 1519 | "Requirements": [ 1520 | "R", 1521 | "cpp11" 1522 | ], 1523 | "Hash": "c5f3c201b931cd6474d17d8700ccb1c8" 1524 | }, 1525 | "tinytex": { 1526 | "Package": "tinytex", 1527 | "Version": "0.51", 1528 | "Source": "Repository", 1529 | "Repository": "CRAN", 1530 | "Requirements": [ 1531 | "xfun" 1532 | ], 1533 | "Hash": "d44e2fcd2e4e076f0aac540208559d1d" 1534 | }, 1535 | "tzdb": { 1536 | "Package": "tzdb", 1537 | "Version": "0.4.0", 1538 | "Source": "Repository", 1539 | "Repository": "RSPM", 1540 | "Requirements": [ 1541 | "R", 1542 | "cpp11" 1543 | ], 1544 | "Hash": "f561504ec2897f4d46f0c7657e488ae1" 1545 | }, 1546 | "urlchecker": { 1547 | "Package": "urlchecker", 1548 | "Version": "1.0.1", 1549 | "Source": "Repository", 1550 | "Repository": "CRAN", 1551 | "Requirements": [ 1552 | "R", 1553 | "cli", 1554 | "curl", 1555 | "tools", 1556 | "xml2" 1557 | ], 1558 | "Hash": "409328b8e1253c8d729a7836fe7f7a16" 1559 | }, 1560 | "usethis": { 1561 | "Package": "usethis", 1562 | "Version": "2.2.3", 1563 | "Source": "Repository", 1564 | "Repository": "CRAN", 1565 | "Requirements": [ 1566 | "R", 1567 | "cli", 1568 | "clipr", 1569 | "crayon", 1570 | "curl", 1571 | "desc", 1572 | "fs", 1573 | "gert", 1574 | "gh", 1575 | "glue", 1576 | "jsonlite", 1577 | "lifecycle", 1578 | "purrr", 1579 | "rappdirs", 1580 | "rlang", 1581 | "rprojroot", 1582 | "rstudioapi", 1583 | "stats", 1584 | "utils", 1585 | "whisker", 1586 | "withr", 1587 | "yaml" 1588 | ], 1589 | "Hash": "d524fd42c517035027f866064417d7e6" 1590 | }, 1591 | "utf8": { 1592 | "Package": "utf8", 1593 | "Version": "1.2.4", 1594 | "Source": "Repository", 1595 | "Repository": "CRAN", 1596 | "Requirements": [ 1597 | "R" 1598 | ], 1599 | "Hash": "62b65c52671e6665f803ff02954446e9" 1600 | }, 1601 | "uuid": { 1602 | "Package": "uuid", 1603 | "Version": "1.2-0", 1604 | "Source": "Repository", 1605 | "Repository": "RSPM", 1606 | "Requirements": [ 1607 | "R" 1608 | ], 1609 | "Hash": "303c19bfd970bece872f93a824e323d9" 1610 | }, 1611 | "vctrs": { 1612 | "Package": "vctrs", 1613 | "Version": "0.6.5", 1614 | "Source": "Repository", 1615 | "Repository": "CRAN", 1616 | "Requirements": [ 1617 | "R", 1618 | "cli", 1619 | "glue", 1620 | "lifecycle", 1621 | "rlang" 1622 | ], 1623 | "Hash": "c03fa420630029418f7e6da3667aac4a" 1624 | }, 1625 | "vroom": { 1626 | "Package": "vroom", 1627 | "Version": "1.6.5", 1628 | "Source": "Repository", 1629 | "Repository": "RSPM", 1630 | "Requirements": [ 1631 | "R", 1632 | "bit64", 1633 | "cli", 1634 | "cpp11", 1635 | "crayon", 1636 | "glue", 1637 | "hms", 1638 | "lifecycle", 1639 | "methods", 1640 | "progress", 1641 | "rlang", 1642 | "stats", 1643 | "tibble", 1644 | "tidyselect", 1645 | "tzdb", 1646 | "vctrs", 1647 | "withr" 1648 | ], 1649 | "Hash": "390f9315bc0025be03012054103d227c" 1650 | }, 1651 | "waldo": { 1652 | "Package": "waldo", 1653 | "Version": "0.5.2", 1654 | "Source": "Repository", 1655 | "Repository": "CRAN", 1656 | "Requirements": [ 1657 | "R", 1658 | "cli", 1659 | "diffobj", 1660 | "fansi", 1661 | "glue", 1662 | "methods", 1663 | "rematch2", 1664 | "rlang", 1665 | "tibble" 1666 | ], 1667 | "Hash": "c7d3fd6d29ab077cbac8f0e2751449e6" 1668 | }, 1669 | "websocket": { 1670 | "Package": "websocket", 1671 | "Version": "1.4.1", 1672 | "Source": "Repository", 1673 | "Repository": "RSPM", 1674 | "Requirements": [ 1675 | "AsioHeaders", 1676 | "R6", 1677 | "cpp11", 1678 | "later" 1679 | ], 1680 | "Hash": "76e0d400757e318cca33def29ccebbc2" 1681 | }, 1682 | "whisker": { 1683 | "Package": "whisker", 1684 | "Version": "0.4.1", 1685 | "Source": "Repository", 1686 | "Repository": "CRAN", 1687 | "Hash": "c6abfa47a46d281a7d5159d0a8891e88" 1688 | }, 1689 | "withr": { 1690 | "Package": "withr", 1691 | "Version": "3.0.0", 1692 | "Source": "Repository", 1693 | "Repository": "CRAN", 1694 | "Requirements": [ 1695 | "R", 1696 | "grDevices", 1697 | "graphics" 1698 | ], 1699 | "Hash": "d31b6c62c10dcf11ec530ca6b0dd5d35" 1700 | }, 1701 | "xfun": { 1702 | "Package": "xfun", 1703 | "Version": "0.44", 1704 | "Source": "Repository", 1705 | "Repository": "CRAN", 1706 | "Requirements": [ 1707 | "grDevices", 1708 | "stats", 1709 | "tools" 1710 | ], 1711 | "Hash": "317a0538d32f4a009658bcedb7923f4b" 1712 | }, 1713 | "xml2": { 1714 | "Package": "xml2", 1715 | "Version": "1.3.6", 1716 | "Source": "Repository", 1717 | "Repository": "CRAN", 1718 | "Requirements": [ 1719 | "R", 1720 | "cli", 1721 | "methods", 1722 | "rlang" 1723 | ], 1724 | "Hash": "1d0336142f4cd25d8d23cd3ba7a8fb61" 1725 | }, 1726 | "xopen": { 1727 | "Package": "xopen", 1728 | "Version": "1.0.1", 1729 | "Source": "Repository", 1730 | "Repository": "CRAN", 1731 | "Requirements": [ 1732 | "R", 1733 | "processx" 1734 | ], 1735 | "Hash": "423df1e86d5533fcb73c6b02b4923b49" 1736 | }, 1737 | "xtable": { 1738 | "Package": "xtable", 1739 | "Version": "1.8-4", 1740 | "Source": "Repository", 1741 | "Repository": "CRAN", 1742 | "Requirements": [ 1743 | "R", 1744 | "stats", 1745 | "utils" 1746 | ], 1747 | "Hash": "b8acdf8af494d9ec19ccb2481a9b11c2" 1748 | }, 1749 | "yaml": { 1750 | "Package": "yaml", 1751 | "Version": "2.3.8", 1752 | "Source": "Repository", 1753 | "Repository": "CRAN", 1754 | "Hash": "29240487a071f535f5e5d5a323b7afbd" 1755 | }, 1756 | "zip": { 1757 | "Package": "zip", 1758 | "Version": "2.3.1", 1759 | "Source": "Repository", 1760 | "Repository": "CRAN", 1761 | "Hash": "fcc4bd8e6da2d2011eb64a5e5cc685ab" 1762 | } 1763 | } 1764 | } 1765 | --------------------------------------------------------------------------------