├── 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 | [](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 |
--------------------------------------------------------------------------------