-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.html
849 lines (823 loc) · 46.7 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.3.450">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<meta name="author" content="UCSB MEDS">
<title>MEDS Computing Requirements & Software Installation Guide</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align: middle;
}
/* CSS for syntax highlighting */
pre > code.sourceCode { white-space: pre; position: relative; }
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
pre > code.sourceCode > span:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode > span { color: inherit; text-decoration: inherit; }
div.sourceCode { margin: 1em 0; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
pre > code.sourceCode { white-space: pre-wrap; }
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
}
pre.numberSource code
{ counter-reset: source-line 0; }
pre.numberSource code > span
{ position: relative; left: -4em; counter-increment: source-line; }
pre.numberSource code > span > a:first-child::before
{ content: counter(source-line);
position: relative; left: -1em; text-align: right; vertical-align: baseline;
border: none; display: inline-block;
-webkit-touch-callout: none; -webkit-user-select: none;
-khtml-user-select: none; -moz-user-select: none;
-ms-user-select: none; user-select: none;
padding: 0 4px; width: 4em;
}
pre.numberSource { margin-left: 3em; padding-left: 4px; }
div.sourceCode
{ }
@media screen {
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
}
</style>
<script src="index_files/libs/clipboard/clipboard.min.js"></script>
<script src="index_files/libs/quarto-html/quarto.js"></script>
<script src="index_files/libs/quarto-html/popper.min.js"></script>
<script src="index_files/libs/quarto-html/tippy.umd.min.js"></script>
<script src="index_files/libs/quarto-html/anchor.min.js"></script>
<link href="index_files/libs/quarto-html/tippy.css" rel="stylesheet">
<link href="index_files/libs/quarto-html/quarto-syntax-highlighting.css" rel="stylesheet" id="quarto-text-highlighting-styles">
<script src="index_files/libs/bootstrap/bootstrap.min.js"></script>
<link href="index_files/libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="index_files/libs/bootstrap/bootstrap.min.css" rel="stylesheet" id="quarto-bootstrap" data-mode="light">
<link href="index_files/libs/quarto-contrib/fontawesome6-0.1.0/all.css" rel="stylesheet">
<link href="index_files/libs/quarto-contrib/fontawesome6-0.1.0/latex-fontsize.css" rel="stylesheet">
<style>html{ scroll-behavior: smooth; }</style>
</head>
<body>
<div id="quarto-content" class="page-columns page-rows-contents page-layout-article toc-left">
<div id="quarto-sidebar-toc-left" class="sidebar toc-left">
<nav id="TOC" role="doc-toc" class="toc-active">
<h2 id="toc-title">Table of contents</h2>
<ul>
<li><a href="#install" id="toc-install" class="nav-link active" data-scroll-target="#install"><i class="fa-solid fa-download" aria-label="download"></i> Installation Guide</a>
<ul class="collapse">
<li><a href="#install-R" id="toc-install-R" class="nav-link" data-scroll-target="#install-R">1. Install or update R</a></li>
<li><a href="#install-RStudio" id="toc-install-RStudio" class="nav-link" data-scroll-target="#install-RStudio">2. Install or update RStudio</a></li>
<li><a href="#Quarto" id="toc-Quarto" class="nav-link" data-scroll-target="#Quarto">3. Install Quarto <em>if necessary</em> (automatically installed with RStudio)</a></li>
<li><a href="#check-git" id="toc-check-git" class="nav-link" data-scroll-target="#check-git">4. Check for git</a></li>
<li><a href="#GitHub" id="toc-GitHub" class="nav-link" data-scroll-target="#GitHub">5. Create a GitHub account</a></li>
<li><a href="#configure-git" id="toc-configure-git" class="nav-link" data-scroll-target="#configure-git">6. Configure git</a></li>
<li><a href="#GitHub-PAT" id="toc-GitHub-PAT" class="nav-link" data-scroll-target="#GitHub-PAT">7. Store your GitHub personal access token (PAT)</a></li>
<li><a href="#install-Anaconda" id="toc-install-Anaconda" class="nav-link" data-scroll-target="#install-Anaconda">8. Install Anaconda</a></li>
<li><a href="#install-vscode" id="toc-install-vscode" class="nav-link" data-scroll-target="#install-vscode">9. Install VS Code</a></li>
<li><a href="#install-Cyberduck" id="toc-install-Cyberduck" class="nav-link" data-scroll-target="#install-Cyberduck">10. Install Cyberduck</a></li>
<li><a href="#install-VPN" id="toc-install-VPN" class="nav-link" data-scroll-target="#install-VPN">11. Install UCSB’s Pulse Secure Campus VPN (Virtual Private Network)</a></li>
<li><a href="#Slack" id="toc-Slack" class="nav-link" data-scroll-target="#Slack">12. Create your Slack account and join MEDS</a></li>
<li><a href="#Google-apps" id="toc-Google-apps" class="nav-link" data-scroll-target="#Google-apps">13. Access Google apps through your <span class="citation" data-cites="ucsb.edu">@ucsb.edu</span> account</a></li>
<li><a href="#Access-IDs" id="toc-Access-IDs" class="nav-link" data-scroll-target="#Access-IDs">14. Request key card access to Bren / NCEAS</a></li>
</ul></li>
<li><a href="#comp-reqs" id="toc-comp-reqs" class="nav-link" data-scroll-target="#comp-reqs"><i class="fa-solid fa-laptop-code" aria-label="laptop-code"></i> Computing requirements & recommendations</a>
<ul class="collapse">
<li><a href="#req-comp-specs" id="toc-req-comp-specs" class="nav-link" data-scroll-target="#req-comp-specs">Specifically, your computer should:</a></li>
<li><a href="#new-comps" id="toc-new-comps" class="nav-link" data-scroll-target="#new-comps">If you are purchasing a new computer:</a></li>
<li><a href="#loaner-equipment" id="toc-loaner-equipment" class="nav-link" data-scroll-target="#loaner-equipment">Loaner equipment</a></li>
<li><a href="#home-setup" id="toc-home-setup" class="nav-link" data-scroll-target="#home-setup">Home setup</a></li>
</ul></li>
</ul>
</nav>
</div>
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
</div>
<main class="content" id="quarto-document-content">
<header id="title-block-header" class="quarto-title-block default">
<div class="quarto-title">
<h1 class="title">MEDS Computing Requirements & Software Installation Guide</h1>
</div>
<div class="quarto-title-meta">
<div>
<div class="quarto-title-meta-heading">Author</div>
<div class="quarto-title-meta-contents">
<p><a href="https://bren.ucsb.edu/masters-programs/master-environmental-data-science/academics-meds">UCSB MEDS</a> </p>
</div>
</div>
<div>
<div class="quarto-title-meta-heading">Modified</div>
<div class="quarto-title-meta-contents">
<p class="date-modified">July 1, 2024</p>
</div>
</div>
</div>
</header>
<p>Incoming MEDS students should follow the steps detailed in this <a href="#install">software installation guide</a> <em>before</em> summer orientation – there will be a dedicated troubleshooting session during orientation, should you need help completing any of the installations.</p>
<p>Please carefully read through the <a href="#comp-reqs">computing requirements & recommendations</a> section before deciding on what computer to purchase / use ahead of MEDS.</p>
<section id="install" class="level2">
<h2 class="anchored" data-anchor-id="install"><i class="fa-solid fa-download" aria-label="download"></i> Installation Guide</h2>
<section id="install-R" class="level3">
<h3 class="anchored" data-anchor-id="install-R">1. Install or update R</h3>
<p>Visit <a href="https://cloud.r-project.org/">cloud.r-project.org</a> to download the most recent version of R for your operating system. You should have <em>at least</em> version 4.4.0 (released 2024-04-24) running when you start MEDS.</p>
</section>
<section id="install-RStudio" class="level3">
<h3 class="anchored" data-anchor-id="install-RStudio">2. Install or update RStudio</h3>
<p>While R is a programming language, RStudio is a software (often referred to as an IDE, <strong>I</strong>ntegrated <strong>D</strong>evelopment <strong>E</strong>nvironment) that provides R programmers with a neat, easy-to-use interface for coding in R. There are a number of IDEs out there, but RStudio is arguably the best and definitely most popular among R programmers.</p>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
NOTE: You need <em>both</em> R and RStudio installed
</div>
</div>
<div class="callout-body-container callout-body">
<p>RStudio will not work without R installed, and you won’t particularly enjoy using R without having RStudio installed. Be sure to install <em>both</em>!</p>
<div class="cell" data-layout-align="center">
<div class="cell-output-display">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="images/R_RStudio.png" class="img-fluid figure-img" width="859"></p>
</figure>
</div>
</div>
</div>
<div class="center-text gray-text">
<p>Image Credit: <a href="https://mgimond.github.io/ES218/">Exploratory Data Analysis in R</a>, by Manny Gimond</p>
</div>
</div>
</div>
<ul>
<li><p><strong>New install:</strong> To install RStudio, visit <a href="https://www.rstudio.com/products/rstudio/">rstudio.com/products/rstudio/</a>. Download the free (“Open Source Edition”) Desktop version for your operating system. You should install the most up-to-date version available that is supported by your operating system.</p></li>
<li><p><strong>Update:</strong> If you already have RStudio and need to update, open RStudio, and under <em>Help</em> (in the top menu), choose <em>Check for updates</em>. If you have the most recent release, it will return <em>No update available. You are running the most recent version of RStudio</em>. Otherwise, you should follow the instructions to install an updated version.</p></li>
<li><p>Open RStudio (click on the logo shown below):</p></li>
</ul>
<div class="cell" data-layout-align="center">
<div class="cell-output-display">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="images/rstudio-logo.png" class="img-fluid figure-img" style="width:15.0%"></p>
</figure>
</div>
</div>
</div>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Note for <em><i class="fa-brands fa-apple" aria-label="apple"></i> Mac</em> users: you may need to install command line tools and XQuartz.
</div>
</div>
<div class="callout-body-container callout-body">
<p><strong>If upon opening RStudio you are prompted to install Command Line Tools, do it.</strong></p>
<ul>
<li><strong>To install command line tools</strong> (if you’re not automatically prompted), run <code>xcode-select --install</code> in the RStudio Terminal</li>
<li><strong>To install XQuartz,</strong> visit <a href="https://www.xquartz.org/">xquartz.org</a></li>
</ul>
<p><em>(Note for <i class="fa-brands fa-windows" aria-label="windows"></i> Windows users: Windows machines should already have command line tools installed, and XQuartz is only required for Macs).</em></p>
</div>
</div>
</section>
<section id="Quarto" class="level3">
<h3 class="anchored" data-anchor-id="Quarto">3. Install Quarto <em>if necessary</em> (automatically installed with RStudio)</h3>
<p>Quarto is a scientific publishing tool built on Pandoc that allows R, Python, Julia, and ObservableJS users to create dynamic documents, websites, books and more.</p>
<p>Quarto is included with RStudio v2022.07.1+ <strong>so there no need for a separate download/install</strong> if you have the latest version of RStudio! You can find all releases (current, pre, and older releases) on the Quarto website <a href="https://quarto.org/docs/download/">download page</a>, should you want/need to reference them.</p>
</section>
<section id="check-git" class="level3">
<h3 class="anchored" data-anchor-id="check-git">4. Check for git</h3>
<p>You should already have git on your device, but let’s check for it anyway.</p>
<ul>
<li><p>Open RStudio</p></li>
<li><p>In the Terminal, run the following command (choose the option for your operating system):</p></li>
</ul>
<div class="tabset-margin-container"></div><div class="panel-tabset">
<ul class="nav nav-tabs" role="tablist"><li class="nav-item" role="presentation"><a class="nav-link active" id="tabset-1-1-tab" data-bs-toggle="tab" data-bs-target="#tabset-1-1" role="tab" aria-controls="tabset-1-1" aria-selected="true" href=""><i class="fa-brands fa-apple" aria-label="apple"></i> Mac</a></li><li class="nav-item" role="presentation"><a class="nav-link" id="tabset-1-2-tab" data-bs-toggle="tab" data-bs-target="#tabset-1-2" role="tab" aria-controls="tabset-1-2" aria-selected="false" href=""><i class="fa-brands fa-windows" aria-label="windows"></i> Windows</a></li></ul>
<div class="tab-content">
<div id="tabset-1-1" class="tab-pane active" role="tabpanel" aria-labelledby="tabset-1-1-tab">
<div class="cell">
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>RStudio Terminal</strong></pre>
</div>
<div class="sourceCode cell-code" id="cb1"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="fu">which</span> git</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
</div>
</div>
</div>
<div id="tabset-1-2" class="tab-pane" role="tabpanel" aria-labelledby="tabset-1-2-tab">
<div class="cell">
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>RStudio Terminal</strong></pre>
</div>
<div class="sourceCode cell-code" id="cb2"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="ex">where</span> git</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
</div>
</div>
</div>
</div>
</div>
<ul>
<li>If you get something that looks like a file path to git on your computer (e.g. <code>/usr/local/bin/git</code> on a Mac, <code>C:\Program Files\Git\mingw64\bin\git.exe</code> on Windows, though it could differ slightly on your computer), then you have git installed. If you instead get no response at all, you should download & install git here: <a href="https://git-scm.com/downloads">git-scm.com/downloads</a></li>
</ul>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<strong>An aside:</strong> We’ll be using git <em>a lot</em> throughout MEDS.
</div>
</div>
<div class="callout-body-container callout-body">
<p>GitHub’s <a href="https://github.com/git-guides">Git Guides</a> are a really wonderful resource to refer to!</p>
</div>
</div>
</section>
<section id="GitHub" class="level3">
<h3 class="anchored" data-anchor-id="GitHub">5. Create a GitHub account</h3>
<ul>
<li>If you don’t already have a GitHub account, go to <a href="https://github.com" class="uri">https://github.com</a> and create one. Check out Jenny Bryan’s <a href="https://happygitwithr.com/github-acct.html">Happy Git with R, Ch. 4</a> for some helpful considerations when choosing a username. We suggest that you use a <em>personal email</em> or your <em><span class="citation" data-cites="bren.ucsb.edu">@bren.ucsb.edu</span></em> email when setting up your account (rather than your <em><span class="citation" data-cites="ucsb.edu">@ucsb.edu</span> email</em>, which will be deactivated after you graduate).</li>
</ul>
</section>
<section id="configure-git" class="level3">
<h3 class="anchored" data-anchor-id="configure-git">6. Configure git</h3>
<ul>
<li>In RStudio, open the Terminal. Run the following commands (by pressing <strong>return</strong> after each line). Be sure to replace the username (keep the quotation marks!) with <em>your</em> GitHub username and the email with the email you used for your GitHub account.</li>
</ul>
<div class="cell">
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>RStudio Terminal</strong></pre>
</div>
<div class="sourceCode cell-code" id="cb3"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="fu">git</span> config <span class="at">--global</span> user.name <span class="st">"Jane Doe"</span></span>
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a><span class="fu">git</span> config <span class="at">--global</span> user.email [email protected]</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
</div>
</div>
<ul>
<li>Then, in the Terminal run the following, and carefully check that the name and email returned match your GitHub information:</li>
</ul>
<div class="cell">
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>RStudio Terminal</strong></pre>
</div>
<div class="sourceCode cell-code" id="cb4"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="fu">git</span> config <span class="at">--list</span> <span class="at">--global</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
</div>
</div>
<div class="callout callout-style-default callout-important callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
IMPORTANT: If you’re configuring git on a <strong>Bren server</strong> (e.g. Taylor or Tsosie), you must also run the following in the Terminal
</div>
</div>
<div class="callout-body-container callout-body">
<div class="cell">
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>RStudio Terminal</strong></pre>
</div>
<div class="sourceCode cell-code" id="cb5"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="fu">git</span> config <span class="at">--global</span> credential.helper <span class="st">'cache --timeout=10000000'</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
</div>
</div>
<p>This prevents important credentials (e.g. a GitHub Personal Access Token, PAT, which you’ll set in step #7) from being removed from the server’s memory. You <strong>do not</strong> need to complete this step when configuring git on your local computer.</p>
</div>
</div>
</section>
<section id="GitHub-PAT" class="level3">
<h3 class="anchored" data-anchor-id="GitHub-PAT">7. Store your GitHub personal access token (PAT)</h3>
<p><strong>First:</strong> What even is a personal access token? From GitHub’s documentation:</p>
<blockquote class="blockquote">
<p>Personal access tokens (PATs) are an alternative to using passwords for authentication to GitHub when using the <a href="https://docs.github.com/en/rest/overview/other-authentication-methods#via-oauth-and-personal-access-tokens">GitHub API</a> or the <a href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token#using-a-token-on-the-command-line">command line</a>.</p>
</blockquote>
<p>This means that in order to push your work (files, scripts, etc.) from your laptop (or any other computer) to GitHub, you’ll need to first to generate a PAT. <strong>Importantly, you’ll need to generate a PAT for each computer you wish to work from.</strong> For example, we will complete the following steps to create a PAT for your personal laptop, but you’ll also need to create a PAT if/when you choose to work on a second computer at home or any of the Bren servers. Good news is that you can follow these same steps when you’re ready to set up additional PATs on other machines. For now, let’s get a PAT for our personal laptop squared away:</p>
<ul>
<li>Once you have git configured successfully, install the <code>{usethis}</code> package in R by running the following in the RStudio Console:</li>
</ul>
<div class="cell">
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>RStudio Console</strong></pre>
</div>
<div class="sourceCode cell-code" id="cb6"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a><span class="fu">install.packages</span>(“usethis”)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
</div>
</div>
<p>A lot of scary looking red text will show up while this is installing - don’t panic. If you get to the end and see something like below (with no error) it’s installed successfully.</p>
<div class="cell" data-layout-align="center">
<div class="cell-output-display">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="images/install-pkg-success.png" class="img-fluid figure-img" width="520"></p>
</figure>
</div>
</div>
</div>
<ul>
<li>Run the following in the RStudio Console:</li>
</ul>
<div class="cell">
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>RStudio Console</strong></pre>
</div>
<div class="sourceCode cell-code" id="cb7"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a>usethis<span class="sc">::</span><span class="fu">create_github_token</span>() </span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
</div>
</div>
<ul>
<li>Enter your GitHub password if/when prompted. You’ll be taken to a screen that looks like this:</li>
</ul>
<div class="cell" data-layout-align="center">
<div class="cell-output-display">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="images/new-pat.png" class="img-fluid figure-img" width="1000"></p>
</figure>
</div>
</div>
</div>
<ul>
<li><p>In the <strong>Note</strong> field, you should see some autopopulated text: <code>R:GITHUB_PAT</code>. We suggest changing this to something that signifies what machine it’s being used for. For example, if you are generating a PAT for your laptop, you might choose to rename it, <code>My Personal Laptop</code>.</p></li>
<li><p>Next, you’ll see a section called <strong>Select scopes</strong> with reasonable options already selected for you. Do not change anything. Just scroll down to the bottom of that page and click the green <strong>Generate token</strong> button:</p></li>
</ul>
<div class="cell" data-layout-align="center">
<div class="cell-output-display">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="images/generate-token.png" class="img-fluid figure-img" width="615"></p>
</figure>
</div>
</div>
</div>
<ul>
<li><p>Copy the generated PAT to your clipboard</p></li>
<li><p>Back in RStudio, run the following in the Console:</p></li>
</ul>
<div class="cell">
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>RStudio Console</strong></pre>
</div>
<div class="sourceCode cell-code" id="cb8"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a>gitcreds<span class="sc">::</span><span class="fu">gitcreds_set</span>()</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
</div>
</div>
<p>This will prompt you to paste the PAT you just copied from GitHub. Paste the PAT, press Enter to run. You should see something like this show up if all is well so far (you’ll have pasted your PAT where the example below says “REDACTED”):</p>
<div class="cell" data-layout-align="center">
<div class="cell-output-display">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="images/gitcreds-set.png" class="img-fluid figure-img" width="489"></p>
</figure>
</div>
</div>
</div>
<ul>
<li>In the RStudio Console, run:</li>
</ul>
<div class="cell">
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>RStudio Console</strong></pre>
</div>
<div class="sourceCode cell-code" id="cb9"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a>usethis<span class="sc">::</span><span class="fu">git_sitrep</span>()</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
</div>
</div>
<p>Does it return information about your connected GitHub account that looks something like below? Great! You’ve configured git and successfully stored your PAT.</p>
<div class="cell" data-layout-align="center">
<div class="cell-output-display">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="images/git_sitrep.png" class="img-fluid figure-img" width="469"></p>
</figure>
</div>
</div>
</div>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<strong>A note on expiring tokens:</strong>
</div>
</div>
<div class="callout-body-container callout-body">
<p>Setting an expiration date on personal access tokens is highly recommended in order to keep your information secure. GitHub will send you an email when it’s time to regenerate a token that’s about to expire. Follow the email prompts, then use <code>gitcreds::gitcreds_set()</code> to reset your token.</p>
</div>
</div>
</section>
<section id="install-Anaconda" class="level3">
<h3 class="anchored" data-anchor-id="install-Anaconda">8. Install Anaconda</h3>
<p>Anaconda is a distribution of the Python and R programming languages that aims to simplify package management and deployment. You’ll need to download the Graphical Installer, which provides a graphical user interface (GUI) to facilitate writing code. Choose the option for your operating system:</p>
<div class="tabset-margin-container"></div><div class="panel-tabset">
<ul class="nav nav-tabs" role="tablist"><li class="nav-item" role="presentation"><a class="nav-link active" id="tabset-2-1-tab" data-bs-toggle="tab" data-bs-target="#tabset-2-1" role="tab" aria-controls="tabset-2-1" aria-selected="true" href=""><i class="fa-brands fa-apple" aria-label="apple"></i> Mac</a></li><li class="nav-item" role="presentation"><a class="nav-link" id="tabset-2-2-tab" data-bs-toggle="tab" data-bs-target="#tabset-2-2" role="tab" aria-controls="tabset-2-2" aria-selected="false" href=""><i class="fa-brands fa-windows" aria-label="windows"></i> Windows</a></li></ul>
<div class="tab-content">
<div id="tabset-2-1" class="tab-pane active" role="tabpanel" aria-labelledby="tabset-2-1-tab">
<p><a href="https://repo.anaconda.com/archive/Anaconda3-2021.05-MacOSX-x86_64.pkg">Click here to download 64-bit Graphical Installer for MacOS</a>. This might pop open a new tab with a “redirecting you to…” phrase, but Anaconda should be downloading at the same time. It might take a couple minutes. After it’s downloaded, click it and hit Allow if you see the following:</p>
<div class="cell" data-layout-align="center">
<div class="cell-output-display">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="images/allow-program.png" class="img-fluid figure-img" width="264"></p>
</figure>
</div>
</div>
</div>
<p>Follow the installation steps to complete Anaconda installation.</p>
</div>
<div id="tabset-2-2" class="tab-pane" role="tabpanel" aria-labelledby="tabset-2-2-tab">
<p><a href="https://repo.anaconda.com/archive/Anaconda3-2024.02-1-Windows-x86_64.exe">Click here to download the 64-bit Graphical Installer Anaconda for Windows</a>. Run the executable to install, which will look something like this:</p>
<div class="grid">
<div class="g-col-12 g-col-md-4">
<div class="cell" data-layout-align="center">
<div class="cell-output-display">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="images/anaconda1.png" class="img-fluid figure-img" width="445"></p>
</figure>
</div>
</div>
</div>
</div>
<div class="g-col-12 g-col-md-4">
<div class="cell" data-layout-align="center">
<div class="cell-output-display">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="images/anaconda2.png" class="img-fluid figure-img" width="247"></p>
</figure>
</div>
</div>
</div>
</div>
<div class="g-col-12 g-col-md-4">
<div class="cell" data-layout-align="center">
<div class="cell-output-display">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="images/anaconda3.png" class="img-fluid figure-img" width="247"></p>
</figure>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section id="install-vscode" class="level3">
<h3 class="anchored" data-anchor-id="install-vscode">9. Install VS Code</h3>
<p>Visual Studio Code (aka VS Code) is a language-agnostic source-code editor – it’s works similarly to RStudio, but allows users to install extensions which add support for <em>lots</em> of different languages, debuggers, tools, etc. <a href="https://code.visualstudio.com/download">Download VS Code for your operating system here</a>.</p>
<div class="cell" data-layout-align="center">
<div class="cell-output-display">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="images/vs-code.png" class="img-fluid figure-img" style="width:40.0%"></p>
</figure>
</div>
</div>
</div>
</section>
<section id="install-Cyberduck" class="level3">
<h3 class="anchored" data-anchor-id="install-Cyberduck">10. Install Cyberduck</h3>
<p>Cyberduck is a program that allows you to browse files on a remote server. <a href="https://cyberduck.io/">Download here</a>.</p>
</section>
<section id="install-VPN" class="level3">
<h3 class="anchored" data-anchor-id="install-VPN">11. Install UCSB’s Pulse Secure Campus VPN (Virtual Private Network)</h3>
<p>For secure remote access to the UCSB’s campus network when you’re not physically present on campus, you’ll need to download and install the Pulse Secure VPN client. This will allow you to access UCSB’s technology resources (including servers, journal subscriptions, etc.) anytime and from anywhere.</p>
<p>See this <a href="https://www.ets.ucsb.edu/network-infrastructure-services/pulse-secure-campus-vpn">Bren Zendesk article</a> for directions on how to get started.</p>
</section>
<section id="Slack" class="level3">
<h3 class="anchored" data-anchor-id="Slack">12. Create your Slack account and join MEDS</h3>
<ul>
<li><p><a href="https://join.slack.com/t/ucsb-meds/shared_invite/zt-so8oh7xf-w41bSnbBWAiMOXKPf5j_qw">Click here</a> to join our UCSB-MEDS Slack Workspace</p></li>
<li><p>Customize your profile with your name and photo (adding a photo helps instructors and TAs learn your names more quickly!).</p></li>
<li><p>Join the summer course channels (<code>#eds-212</code>, <code>#eds-221</code>, <code>#eds-214</code>, <code>#eds-217</code>)</p></li>
</ul>
<!-- - ~~Read through the [Slack Resource Guide](https://ucsb-meds.github.io/meds-slack.html)~~ -->
</section>
<section id="Google-apps" class="level3">
<h3 class="anchored" data-anchor-id="Google-apps">13. Access Google apps through your <span class="citation" data-cites="ucsb.edu">@ucsb.edu</span> account</h3>
<p>Once enrolled and your UCSBnetID is activated, you will have access to your <a href="https://www.connect.ucsb.edu/usage">UCSB Connect Account</a> which provides email, calendaring, and collaboration services. <em>You must use this account ([email protected]) to log in and access all of your Google Apps (including Google Calendar, Google Drive, etc.).</em></p>
<p>The <a href="https://calendar.google.com/calendar/u/0/embed?src=c_1886ai526iqschc9mnpj6cu753n60@resource.calendar.google.com&ctz=America/Los_Angeles"><strong>MEDS Google Calendar</strong></a> contains all classes and events relevant for our MEDS students. Feel free to add this to your calendar if you find it helpful. To do so, log in to <a href="https://www.google.com/calendar">Google Calendar</a> using your <span class="citation" data-cites="ucsb.edu">@ucsb.edu</span> credentials > Click on the <code>+</code> next to “Other calendars” on the left-hand side of your screen and choose “Browse resources” > Click the drop down arrow next to “bren” and check the box next to “bren-calendar-meds”</p>
</section>
<section id="Access-IDs" class="level3">
<h3 class="anchored" data-anchor-id="Access-IDs">14. Request key card access to Bren / NCEAS</h3>
<p>New students must <a href="https://www.accessid.ucsb.edu/">request an Access ID Card</a> (aka your UCSB photo identification), which are available for pickup at the <a href="https://www.ucen.ucsb.edu/">UCEN</a> 24 hours after your request is made. We recommend submitting your request before summer orientation, so that it’s ready for pickup during your first day on campus.</p>
<p>Once you receive your Access ID Card, you must complete <a href="https://bren.formstack.com/forms/buildingsecurity">this form</a> to gain key card access to Bren (after hours) and NCEAS (all hours).</p>
<p><br></p>
<div class="center-text body-text-l dark-blue-text">
<p><strong><em>~ END Installation Guide ~</em></strong></p>
</div>
<p><br></p>
</section>
</section>
<section id="comp-reqs" class="level2">
<h2 class="anchored" data-anchor-id="comp-reqs"><i class="fa-solid fa-laptop-code" aria-label="laptop-code"></i> Computing requirements & recommendations</h2>
<p>The MEDS program requires all students to have a personal laptop to use during the program. Our curriculum is designed to work across different operating systems and computers, as long as they meet some minimum requirements.</p>
<section id="req-comp-specs" class="level3">
<h3 class="anchored" data-anchor-id="req-comp-specs">Specifically, your computer should:</h3>
<ul>
<li>be no more than 4 years old, and in any case be fully supported by the manufacturer. For example, <a href="https://support.apple.com/en-us/HT201624">Apple won’t repair anything that’s more than 7 years old</a><br>
</li>
<li>be running Windows, macOS, or Linux (Please note that we offer limited support for Linux)<br>
</li>
<li>have at least 50 GB storage space available for MEDS applications and coursework<br>
</li>
<li>have at least 8 GB of RAM (the more the better!)<br>
</li>
<li>have a 64-bit CPU</li>
</ul>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Be sure to install the latest operating system
</div>
</div>
<div class="callout-body-container callout-body">
<p>If you already have a laptop that you plan to use in MEDS, be sure to install the latest operating system before the program begins:</p>
<ul>
<li><strong>Mac users:</strong> be sure to update macOS to the newest supported version, as indicated by <em>System Preferences→Software Update</em>.</li>
<li><strong>Windows users:</strong> you should have Windows 10 installed <!-- but if you don't, you can [purchase Windows 10 Education for $14.99 from UCSB](https://ucsb.onthehub.com/WebStore/OfferingDetails.aspx?o=14f7e678-4731-e511-940e-b8ca3a5db7a1). --></li>
</ul>
</div>
</div>
</section>
<section id="new-comps" class="level3">
<h3 class="anchored" data-anchor-id="new-comps">If you are purchasing a new computer:</h3>
<p>We recommend:</p>
<ul>
<li>at least 16 GB of RAM</li>
<li>at least 512 GB of SSD (not “disk”!) storage</li>
<li>the manucafturer’s extended warranty or service plan (e.g., <a href="https://www.apple.com/support/products/mac/">AppleCare+</a>).</li>
</ul>
<!-- ~~If you are trying to decide between Mac and Windows we would recommend a Mac, but if you purchase or already have a Windows PC, don’t worry that will be just fine as long as it meets our minimum requirements.~~ Choosing between a Mac and Windows machine (aka a PC) can be a personal and / or financial preference. If you're having trouble deciding between the two, we recommend a Mac -- these are popular and user-friendly machines, and the majority of our instructors / staff are Mac users. -->
<p>You can <a href="https://www.apple.com/us-hed/shop">purchase a Macbook Air using the higher education discount</a> for $899 before tax and AppleCare. A PC can cost anywhere from $500 to more than $3,000; you generally get what you pay for.</p>
</section>
<section id="loaner-equipment" class="level3">
<h3 class="anchored" data-anchor-id="loaner-equipment">Loaner equipment</h3>
<p>If your computer breaks or dies, we can typically loan you a Windows laptop for up to a month (which should be long enough to have your computer repaired or to purchase a new one).</p>
</section>
<section id="home-setup" class="level3">
<h3 class="anchored" data-anchor-id="home-setup">Home setup</h3>
<p>You may consider having a dedicated computer setup that includes an external monitor, keyboard, and / or mouse at home. A stable at-home WiFi connection is necessary for completing work remotely (i.e. off-campus).</p>
<p><br></p>
<div class="center-text body-text-l dark-blue-text">
<p><strong><em>~ END Computing Requirements & Recommendations ~</em></strong></p>
</div>
</section>
</section>
</main>
<!-- /main column -->
<script id="quarto-html-after-body" type="application/javascript">
window.document.addEventListener("DOMContentLoaded", function (event) {
const toggleBodyColorMode = (bsSheetEl) => {
const mode = bsSheetEl.getAttribute("data-mode");
const bodyEl = window.document.querySelector("body");
if (mode === "dark") {
bodyEl.classList.add("quarto-dark");
bodyEl.classList.remove("quarto-light");
} else {
bodyEl.classList.add("quarto-light");
bodyEl.classList.remove("quarto-dark");
}
}
const toggleBodyColorPrimary = () => {
const bsSheetEl = window.document.querySelector("link#quarto-bootstrap");
if (bsSheetEl) {
toggleBodyColorMode(bsSheetEl);
}
}
toggleBodyColorPrimary();
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {
placement: 'right',
icon: icon
};
anchorJS.add('.anchored');
const isCodeAnnotation = (el) => {
for (const clz of el.classList) {
if (clz.startsWith('code-annotation-')) {
return true;
}
}
return false;
}
const clipboard = new window.ClipboardJS('.code-copy-button', {
text: function(trigger) {
const codeEl = trigger.previousElementSibling.cloneNode(true);
for (const childEl of codeEl.children) {
if (isCodeAnnotation(childEl)) {
childEl.remove();
}
}
return codeEl.innerText;
}
});
clipboard.on('success', function(e) {
// button target
const button = e.trigger;
// don't keep focus
button.blur();
// flash "checked"
button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copied!");
let tooltip;
if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copied!");
tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual",
customClass: "code-copy-button-tooltip",
offset: [0, -8]});
tooltip.show();
}
setTimeout(function() {
if (tooltip) {
tooltip.hide();
button.removeAttribute("data-bs-title");
button.removeAttribute("data-bs-toggle");
button.removeAttribute("data-bs-placement");
}
button.setAttribute("title", currentTitle);
button.classList.remove('code-copy-button-checked');
}, 1000);
// clear code selection
e.clearSelection();
});
function tippyHover(el, contentFn) {
const config = {
allowHTML: true,
content: contentFn,
maxWidth: 500,
delay: 100,
arrow: false,
appendTo: function(el) {
return el.parentElement;
},
interactive: true,
interactiveBorder: 10,
theme: 'quarto',
placement: 'bottom-start'
};
window.tippy(el, config);
}
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
for (var i=0; i<noterefs.length; i++) {
const ref = noterefs[i];
tippyHover(ref, function() {
// use id or data attribute instead here
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
try { href = new URL(href).hash; } catch {}
const id = href.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
return note.innerHTML;
});
}
let selectedAnnoteEl;
const selectorForAnnotation = ( cell, annotation) => {
let cellAttr = 'data-code-cell="' + cell + '"';
let lineAttr = 'data-code-annotation="' + annotation + '"';
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
return selector;
}
const selectCodeLines = (annoteEl) => {
const doc = window.document;
const targetCell = annoteEl.getAttribute("data-target-cell");
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
const lineIds = lines.map((line) => {
return targetCell + "-" + line;
})
let top = null;
let height = null;
let parent = null;
if (lineIds.length > 0) {
//compute the position of the single el (top and bottom and make a div)
const el = window.document.getElementById(lineIds[0]);
top = el.offsetTop;
height = el.offsetHeight;
parent = el.parentElement.parentElement;
if (lineIds.length > 1) {
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
height = bottom - top;
}
if (top !== null && height !== null && parent !== null) {
// cook up a div (if necessary) and position it
let div = window.document.getElementById("code-annotation-line-highlight");
if (div === null) {
div = window.document.createElement("div");
div.setAttribute("id", "code-annotation-line-highlight");
div.style.position = 'absolute';
parent.appendChild(div);
}
div.style.top = top - 2 + "px";
div.style.height = height + 4 + "px";
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
if (gutterDiv === null) {
gutterDiv = window.document.createElement("div");
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
gutterDiv.style.position = 'absolute';
const codeCell = window.document.getElementById(targetCell);
const gutter = codeCell.querySelector('.code-annotation-gutter');
gutter.appendChild(gutterDiv);
}
gutterDiv.style.top = top - 2 + "px";
gutterDiv.style.height = height + 4 + "px";
}
selectedAnnoteEl = annoteEl;
}
};
const unselectCodeLines = () => {
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
elementsIds.forEach((elId) => {
const div = window.document.getElementById(elId);
if (div) {
div.remove();
}
});
selectedAnnoteEl = undefined;
};
// Attach click handler to the DT
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
for (const annoteDlNode of annoteDls) {
annoteDlNode.addEventListener('click', (event) => {
const clickedEl = event.target;
if (clickedEl !== selectedAnnoteEl) {
unselectCodeLines();
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
if (activeEl) {
activeEl.classList.remove('code-annotation-active');
}
selectCodeLines(clickedEl);
clickedEl.classList.add('code-annotation-active');
} else {
// Unselect the line
unselectCodeLines();
clickedEl.classList.remove('code-annotation-active');
}
});
}
const findCites = (el) => {
const parentEl = el.parentElement;
if (parentEl) {
const cites = parentEl.dataset.cites;
if (cites) {
return {
el,
cites: cites.split(' ')
};
} else {
return findCites(el.parentElement)
}
} else {
return undefined;
}
};
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
for (var i=0; i<bibliorefs.length; i++) {
const ref = bibliorefs[i];
const citeInfo = findCites(ref);
if (citeInfo) {
tippyHover(citeInfo.el, function() {
var popup = window.document.createElement('div');
citeInfo.cites.forEach(function(cite) {
var citeDiv = window.document.createElement('div');
citeDiv.classList.add('hanging-indent');
citeDiv.classList.add('csl-entry');
var biblioDiv = window.document.getElementById('ref-' + cite);
if (biblioDiv) {
citeDiv.innerHTML = biblioDiv.innerHTML;
}
popup.appendChild(citeDiv);
});
return popup.innerHTML;
});
}
}
});
</script>
</div> <!-- /content -->
<script src="index_files/libs/quarto-html/zenscroll-min.js"></script>
</body></html>