forked from RConsortium/isc-proposal
-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.html
464 lines (440 loc) · 30.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
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="Zhian N. Kamvar on behalf of “The Carpentries”" />
<meta name="dcterms.date" content="2022-10-01" />
<title>Multi-Language Lessons in The Carpentries Workbench</title>
<style>
html {
line-height: 1.5;
font-family: Georgia, serif;
font-size: 20px;
color: #1a1a1a;
background-color: #fdfdfd;
}
body {
margin: 0 auto;
max-width: 36em;
padding-left: 50px;
padding-right: 50px;
padding-top: 50px;
padding-bottom: 50px;
hyphens: auto;
word-wrap: break-word;
text-rendering: optimizeLegibility;
font-kerning: normal;
}
@media (max-width: 600px) {
body {
font-size: 0.9em;
padding: 1em;
}
}
@media print {
body {
background-color: transparent;
color: black;
font-size: 12pt;
}
p, h2, h3 {
orphans: 3;
widows: 3;
}
h2, h3, h4 {
page-break-after: avoid;
}
}
p {
margin: 1em 0;
}
a {
color: #1a1a1a;
}
a:visited {
color: #1a1a1a;
}
img {
max-width: 100%;
}
h1, h2, h3, h4, h5, h6 {
margin-top: 1.4em;
}
h5, h6 {
font-size: 1em;
font-style: italic;
}
h6 {
font-weight: normal;
}
ol, ul {
padding-left: 1.7em;
margin-top: 1em;
}
li > ol, li > ul {
margin-top: 0;
}
blockquote {
margin: 1em 0 1em 1.7em;
padding-left: 1em;
border-left: 2px solid #e6e6e6;
color: #606060;
}
code {
font-family: Menlo, Monaco, 'Lucida Console', Consolas, monospace;
font-size: 85%;
margin: 0;
}
pre {
margin: 1em 0;
overflow: auto;
}
pre code {
padding: 0;
overflow: visible;
}
.sourceCode {
background-color: transparent;
overflow: visible;
}
hr {
background-color: #1a1a1a;
border: none;
height: 1px;
margin: 1em 0;
}
table {
margin: 1em 0;
border-collapse: collapse;
width: 100%;
overflow-x: auto;
display: block;
font-variant-numeric: lining-nums tabular-nums;
}
table caption {
margin-bottom: 0.75em;
}
tbody {
margin-top: 0.5em;
border-top: 1px solid #1a1a1a;
border-bottom: 1px solid #1a1a1a;
}
th {
border-top: 1px solid #1a1a1a;
padding: 0.25em 0.5em 0.25em 0.5em;
}
td {
padding: 0.125em 0.5em 0.25em 0.5em;
}
header {
margin-bottom: 4em;
text-align: center;
}
#TOC li {
list-style: none;
}
#TOC a:not(:hover) {
text-decoration: none;
}
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
span.underline{text-decoration: underline;}
div.column{display: inline-block; vertical-align: top; width: 50%;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style>
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
</head>
<body>
<header id="title-block-header">
<h1 class="title">Multi-Language Lessons in The Carpentries Workbench</h1>
<p class="author">Zhian N. Kamvar on behalf of “The Carpentries”</p>
<p class="date">2022-10-01</p>
</header>
<nav id="TOC" role="doc-toc">
<ul>
<li><a href="#signatories">Signatories</a>
<ul>
<li><a href="#project-team">Project team</a></li>
<li><a href="#consulted">Consulted</a></li>
</ul></li>
<li><a href="#problem-statement">Problem Statement</a></li>
<li><a href="#the-proposal">The Proposal</a>
<ul>
<li><a href="#overview">Overview</a></li>
<li><a href="#minimum-viable-product">Minimum Viable Product</a></li>
</ul></li>
<li><a href="#project-plan">Project plan</a>
<ul>
<li><a href="#start-up-phase">Start-up phase</a></li>
<li><a href="#technical-delivery">Technical delivery</a></li>
<li><a href="#other-aspects">Other aspects</a></li>
</ul></li>
<li><a href="#requirements">Requirements</a>
<ul>
<li><a href="#people">People</a></li>
<li><a href="#tools-tech">Tools & Tech</a></li>
<li><a href="#funding">Funding</a></li>
</ul></li>
<li><a href="#success">Success</a>
<ul>
<li><a href="#definition-of-done">Definition of done</a></li>
<li><a href="#measuring-success">Measuring success</a></li>
<li><a href="#future-work">Future work</a></li>
<li><a href="#key-risks">Key risks</a></li>
</ul></li>
</ul>
</nav>
<!--
## NOTES
These are notes from talking with Yanina about [my twitter thread](https://twitter.com/ZKamvar/status/1573363038669111298?s=20&t=fhQlFMOf1AuH2baVbjvsCQ)
lessons that are not in R can use this infrastructure <- this is a good pitch
The fact that The Carpentries has high impact for larger communities.
Proposals like this have a good chance.
Try to highlight a tool for people who want to create training materials with The Carpentries philosophy
lesson will have evidence-based teaching practices.
we are providing tools to make it easier. No expertise on GitHub Actions, Quarto, YAML needed.
Highlight that The Carpentries materials are used in other places.
> The primary purpose of the R Consortium (collectively, the “Purpose”) is to:
>
>(a) advance the worldwide promotion of and support for the R open source
>language and environment as the preferred language for statistical computing
>and graphics (the “Environment”);
>
>(b) establish, maintain, seek support for, and develop infrastructure projects
>and technical and infrastructure collaboration initiatives related to the
>Environment, and such other initiatives as may be appropriate to support,
>enable and promote the Environment;
>
>(c) encourage and increase user adoption, involvement with, and contribution
>to, the Environment;
>
>(d) facilitate communication and collaboration among users and developers of
>the Environment, the R Consortium and the R Foundation for Statistical
>Computing (the “R Foundation”);
>
>(e) support and maintain policies set by the Board; and
>
>(f) undertake such other activities as may from time to time be appropriate to
>further the purposes and achieve the goals set forth above.
>
>In furtherance of these efforts, the R Consortium shall seek to solicit the
>participation of all interested parties on a fair, equitable and open basis.
>*[R Consortium Bylaws, Section 1.4](https://bylaws.r-consortium.org)*
-->
<h2 id="signatories">Signatories</h2>
<!--
This section provides the ISC with a view of the support received from the community for a proposal. Acceptance isn't predicated on popularity but community acceptance is important. Willingness to accept outside input is also a good marker for project delivery.
An optional section would be for R-Core signatories where changes to R are proposed.
-->
<h3 id="project-team">Project team</h3>
<!--
Who are the people responsible for actually delivering the project if the proposal gets accepted and are already signed up and rearing to go?
-->
<p>Dr. Zhian N. Kamvar (Lesson Infrastructure Developer, The Carpentries)—Lead Developer<br />
Dr. Toby Hodges (Director of Curriculum, The Carpentries)—Community Advocate<br />
Dr. Kari L. Jordan (Executive Director The Carpentries)—Supervisor</p>
<h3 id="consulted">Consulted</h3>
<!--
Who has been given the opportunity to provide feedback on the proposal? This should include any R Consortium & ISC members who the proposal has been discussed with.
-->
<p>Dr. Yanina Bellini Saibene—R Consortium ISC member<br />
Dr. Erin Becker—Associate Director, The Carpentries</p>
<h2 id="problem-statement">Problem Statement</h2>
<!--
Outlining the issue / weak point / problem to be solved by this proposal. This should be a compelling section that sets the reader up for the next section - the proposed solution!
It is important to cover:
- [ ] What the problem is
- [ ] Who it affects
- [ ] Have there been previous attempts to resolve the problem
- [ ] Why it should be tackled
-->
<p>Of all languages, R is the most versatile when it comes to literate programming and the ability to rapidly publish results thanks to the advent of R Markdown. More importantly, unlike JSON-based formats like Jupyter notebooks, R Markdown enables <strong>reproducible collaboration</strong> under version control. Literate programming also enables the creation of maintainable and reproducible teaching materials. To host such materials, however, requires not only expertise in a domain area, it also requires knowledge of continuous deployment systems, reproducible workflows, and UI elements for the Web. Designed with our Core Values in mind, The Carpentries<a href="#fn1" class="footnote-ref" id="fnref1" role="doc-noteref"><sup>1</sup></a> lesson infrastructure provides templating, guidance, and tools to allow rapid development and publication of high-quality lesson content. The lesson contributor only needs to focus on writing the content of the lesson in Markdown or R Markdown. With this infrastructure, we champion community collaboration and access for all.</p>
<p>The infrastructure—called The Carpentries Workbench<a href="#fn2" class="footnote-ref" id="fnref2" role="doc-noteref"><sup>2</sup></a>—is a “batteries-included” setup for building lessons that allows anyone to take new or pre-existing Markdown or R Markdown lesson materials and create a lesson site. The Carpentries Workbench uses {knitr} to render R Markdown documents to Markdown, followed by pandoc and {pkgdown} to render Markdown to HTML. For lessons that teach R, authoring R Markdown with a seamless integration with {renv} ensures that lessons are reproducible by default. Moreover, integration with GitHub Actions means that pull request previews can show lesson maintainers exactly where output in a lesson has changed from new contributions or package updates.</p>
<p>Lessons that do not teach R, however, must use plain Markdown where the output of demonstrative and exercise code is copy and pasted into lessons. Copy and pasting outputs is inherently non-reproducible and makes non-R lessons difficult to maintain as the software ecosystem changes and evolves. Ultimately, these extra steps are significant burdens in a volunteer framework. They result not only in lost contributions to existing lessons, but also in lessons that were never developed.</p>
<p>For context, The Carpentries teaches 36 core lessons through its three Lesson Programs, Software, Library and Data Carpentry. Six of these lessons teach core R skills, which are widely used within and outside The Carpentries with 60,000 unique views for the “R for Ecologists” lesson alone from June to August 2022. In addition, there are over 100 community-developed lessons on a wide range of topics in The Carpentries Incubator, 15 of which use R. This means that there are over one hundred lessons that potentially stand to benefit from literate programming.</p>
<p>There have been attempts in The Carpentries community to enable literate programming for lessons teaching with languages other than R. Some lesson authors who work with Python have created a separate folder of Jupyter notebooks and render them to Markdown, which is then used as the input for the lesson (see <em>Intro to MRI Data in Python</em><a href="#fn3" class="footnote-ref" id="fnref3" role="doc-noteref"><sup>3</sup></a> for example). This allows the lead developers to work in a framework that offers the benefits of literate programming, but it hampers collaboration because the documentation for lesson infrastructure does not apply to this framework and people who want to contribute may attempt to edit the Markdown output, when they should be contributing to the notebooks.</p>
<p>Others, such as the <em>Learn To Discover</em> group<a href="#fn4" class="footnote-ref" id="fnref4" role="doc-noteref"><sup>4</sup></a> have used {reticulate} in The Carpentries Workbench to provide interoperability between R and Python. This gives the advantage that contributors are able to contribute to the lesson, but the format is not familiar or clear, and the approach does not generally extend to enable literate programming in other languages.</p>
<p>In both cases, the lesson authors needed knowledge of continuous deployment, reproducible workflows, and of the underlying framework to accomplish their goals.</p>
<p>We value people first, access for all, community collaboration, and strength through diversity, and we want our lesson infrastructure to reflect these values. We propose to eliminate the extra burdens required to contribute to non-R lessons and create opportunities to create cross-language lessons by integrating Quarto<a href="#fn5" class="footnote-ref" id="fnref5" role="doc-noteref"><sup>5</sup></a> into The Carpentries Workbench. Released in July 2022, Quarto is a framework based on the same principles as R Markdown that allows anyone to write their analysis in their preferred programming language and easily publish their results in a reproducible manner.</p>
<p>We have lowered the barrier for others to access our evidence-based approach to lesson design and deployment. Because The Carpentries materials are always open-source, many organisations have used and remixed our infrastructure for their own purposes. By incorporating Quarto, we will be able to increase the quality of non-R lessons and help strengthen the bridge between languages to enable lessons in other languages and eventually polyglot lessons. This will in turn help train future generations of researchers to work reproducibly.</p>
<h2 id="the-proposal">The Proposal</h2>
<!--
This is where the proposal should be outlined.
-->
<h3 id="overview">Overview</h3>
<!--
At a high-level address what your proposal is and how it will address the problem identified. Highlight any benefits to the R Community that follow from solving the problem. This should be your most compelling section.
-->
<p>We will enable support for reproducible publishing of non-R languages in The Carpentries lesson infrastructure by integrating the Quarto publishing engine into The Carpentries Workbench. The Carpentries Workbench is an opinionated lesson publication system as a set of R packages that prioritises accessibility and sensible defaults to produce Carpentries-styled lessons. With a modular foundation, The Carpentries Workbench uses a two-step workflow that first renders R Markdown to Markdown via {knitr} followed by a step that uses Pandoc to render Markdown to HTML templating. Because this is a similar model to that used by Quarto, we propose to replace the underlying engines of {knitr} + Pandoc with Quarto in our modular foundation without affecting the superstructure.</p>
<p>Our goal is to eliminate barriers to contribution of lesson materials by increasing the number of langugages available. Moreover, Quarto will enable development of lessons demonstrating Python to R, Julia to R, or any other multi-lingual workflow. These multi-lingual lessons can demonstrate R’s strengths in the context of another language and help promote R to people who would not have previously encountered the language.</p>
<p>By reducing barriers to contribution, more people will be empowered to create educational materials <em>based on The Carpentries philosophy</em>. These new educational materials will help to usher in a new generation of data scientists and researchers from more diverse backgrounds who will have the confidence and ability to use reproducible research practices to solve problems.</p>
<!--
Go into more detail about the specifics of the project and it delivers against the problem.
Depending on project type the detail section should include:
- [x] Minimum Viable Product
- [x] Architecture
- [x] Assumptions
-->
<h3 id="minimum-viable-product">Minimum Viable Product</h3>
<dl>
<dt>Support for <code>*.qmd</code> files in The Carpentries Workbench</dt>
<dd><p>The Carpentries Workbench should treat any <code>*.qmd</code> files as valid input documents by default. Note that <code>*.ipynb</code> documents should first be converted to <code>*.qmd</code>.</p>
</dd>
<dt>Documentation for non-R lessons</dt>
<dd><p>Tutorial, How-to guide, Reference, and Explanation documents will help make clear the features and limitations of the Quarto integration.</p>
</dd>
<dt>Unit, integration, and regression tests for Python, SQL, and BASH</dt>
<dd><p>These languages are the most commonly taught in our ecosystem and should have robust tests.</p>
</dd>
<dt>Blog Post</dt>
<dd><p>A blog post that summarises the feedback from our community members who maintain lessons in Python, BASH, and SQL.</p>
</dd>
<dt>Non-invasive integration with Pyenv</dt>
<dd><p>Pyenv is the most common mechanism for defining requirements for a Python project. We want to embed this to enable the same approach to reproducibility that we have for R lessons.</p>
</dd>
<dt>Quarto template for Carpentries-style lessons</dt>
<dd><p>This template will allow folks who want to create lessons without the Workbench to take advantage of its accessible layout and styling.</p>
</dd>
</dl>
<p>The Quarto integration itself will be implemented in the {sandpaper}<a href="#fn6" class="footnote-ref" id="fnref6" role="doc-noteref"><sup>6</sup></a> package and the template will be implemented in {varnish}<a href="#fn7" class="footnote-ref" id="fnref7" role="doc-noteref"><sup>7</sup></a>. The tutorial, how-to guide, and explanation documents will be implemented with The Carpentries Workbench template while the reference documents will be implemented in {pkgdown} for {sandpaper}.</p>
<p>We are assuming here that The Workbench will have wide acceptance.</p>
<h2 id="project-plan">Project plan</h2>
<h3 id="start-up-phase">Start-up phase</h3>
<!--
Covering the planning phase, this section should provide a relatively detailed plan of how work will start on the project. This section is important because projects need to get up and running quickly.
- [ ] Setting up collaboration platform inc. code for contributors etc.
- [ ] Licence decisions
- [ ] Reporting framework
-->
<p>The startup phase will be relatively light as the components for these features will live inside of established packages. Licenses for this work will be MIT. The reporting will be done publicly via bi-monthly blog post updates to The Carpentries Blog series “The Dovetail”<a href="#fn8" class="footnote-ref" id="fnref8" role="doc-noteref"><sup>8</sup></a></p>
<h3 id="technical-delivery">Technical delivery</h3>
<!--
Covering the actual delivery of the project this section should provide at least a high-level the implementation.
Including target dates is really important as you need to be committed and the ISC need to have a means of tracking delivery
-->
<p>We have identified several steps to achieve our goals in roughly six months:</p>
<ul>
<li>Phase 1: Initial development of core functionality <strong>(6 weeks)</strong>
<ul>
<li><strong>Week 1:</strong> Use tutorial-driven development to first document the typical workflow for a lesson that does not use R.</li>
<li><strong>Weeks 2-3:</strong> Replace {knitr} with {quarto} inside of <code>sandpaper:::render_html()</code> to achieve polyglot capabilities.</li>
<li><strong>Weeks 4-6:</strong> Harness pyenv to create non-invasive versioning system for Python documents.</li>
</ul></li>
<li>Phase 2: Development of Quarto templates <strong>(8 weeks)</strong>
<ul>
<li><strong>Weeks 7-10:</strong> Alpha testing of local workflows with users with various levels of expertise and development of remote workflows.</li>
<li><strong>Weeks 11-12:</strong> Create lua filters to replace XPath manipulation currently in {sandpaper}.</li>
<li><strong>Week 13:</strong> Create pandoc templates. <!-- Extremely Milton Dammers as portrayed by Jeffrey Combs in the 1996 thriller "The Frighteners" voice: The number 13... Unlucky for some --></li>
<li><strong>Week 14:</strong> Update {varnish} and <code>sandpaper:::build_html()</code> to use Quarto pandoc templates.</li>
</ul></li>
<li>Phase 3: Beta testing, conversion, and deployment <strong>(11 weeks)</strong>
<ul>
<li><strong>Week 15-18:</strong> Test conversion on lesson infrastructure.</li>
<li><strong>Week 19:</strong> Release updated workbench and {varnish} as a Quarto theme.</li>
<li><strong>Week 20-25:</strong> remove outputs from Python lessons, convert to Quarto, validate, and release lessons.</li>
</ul></li>
</ul>
<h3 id="other-aspects">Other aspects</h3>
<!--
Covering non-technical activities like on-going publicity, paper preparation, discussion groups etc. that might be required to facilitate successful delivery of the project.
- [ ] Announcement post
- [ ] Delivery blog post
- [ ] Twitter
- [ ] UseR!
- [ ] ISC meetings
-->
<p>As The Carpentries is a global community, we will continue to keep the community abreast of the updates happening with this project by using the communication channels available to us. This includes posting updates in the bi-monthly Dovetail blog post series, Carpentries Clippings, and hosting quarterly community discussions. Beyond The Carpentries community, we will be posting things we learn along the way to the rOpenSci development corner <a href="#fn9" class="footnote-ref" id="fnref9" role="doc-noteref"><sup>9</sup></a>. We aim to present the results of this work at the UseR!, SciPy, RSE, and Open Education conferences in 2023.</p>
<h2 id="requirements">Requirements</h2>
<!--
An idea of what is required to make the project actually happen
-->
<h3 id="people">People</h3>
<!--
Who needs to be involved, what's the proposed structure, what will it take to get their involvement?
-->
<p>The Carpentries is a global community of 4,000+ trained volunteer Instructors, who have taught workshops that have reached 90,000+ learners. Our workshops teach introductory computing and data analytical skills to researchers. R is taught in more than half of our workshops. All the lesson materials are available for free, under a Creative Commons Attribution License, and have been developed by hundreds of contributors who abide by our Code of Conduct<a href="#fn10" class="footnote-ref" id="fnref10" role="doc-noteref"><sup>10</sup></a>.</p>
<p>Zhian N. Kamvar is the Lesson Infrastructure Developer for The Carpentries and an experienced R developer with 8 authored packages on CRAN spanning reproducible research, population genetics, and epidemiology. He is responsible for designing and creating The Carpentries Workbench. He will lead the integration effort, blog post construction, as well as submission to conference proceedings.</p>
<p>Toby Hodges is the Director of Curriculum for The Carpentries and is an experienced community manager, having maintained community submissions to The Carpentries Incubator since 2020. He has designed and taught workshops that introduce the Workbench to audiences who are both experienced and new to The Carpentries. He will be responsible for developing high-level tutorials and setup documents for the new version of the Workbench that uses Quarto.</p>
<p>Kari L. Jordan is the Executive Director for The Carpentries. She has been involved with The Carpentries since 2016 and has been responsible for directing and coordinating the execution of our strategic plan since 2020. She is the direct supervisor of Zhian N. Kamvar and will provide oversight of the project.</p>
<h3 id="tools-tech">Tools & Tech</h3>
<!--
What is going to be needed to deliver this project?
Will cloud computing be used - if yes are there are necessary components that will be deciding factors between providers?
Are there tools or tech that don't exist that will be produced to facilitate the project?
-->
<p>All tools and technology are publicly and freely available for the project. Primary development is to take place on Zhian N. Kamvar’s work computer, and continuous integration on MacOS, Windows, and Ubuntu platforms will take place on GitHub actions. Provisioning and generation of components needed for dynamic lesson content will take place on GitHub actions. Blog posts will be hosted on The Carpentries website, hosted by AWS.</p>
<h3 id="funding">Funding</h3>
<!--
[TO DO] THE GUIDANCE IS PRETTY UNCLEAR, ESP IN LIGHT OF GABOR'S PROPOSAL VS AWARD SIZE
-->
<p>Funding for this project will go to support Zhian N. Kamvar and Toby Hodges’ time to develop the infrastructure and documentation. This project is expected to take roughly 500 hours of time to complete (25 weeks at 20 hours per week of effort), which can be divided up into tiers based on the timeline of deliverables, with estimates for $78USD/hour. We are requesting for partial funding of the direct labor costs of this work.</p>
<ol type="1">
<li>Initial development of core functionality (Weeks 1-6): 120 hours, $9,360USD, <strong>$7,500USD requested</strong></li>
<li>Development of Quarto templates (Weeks 7-14): 180 hours, $12,480USD, <strong>$7,5000USD requested</strong></li>
<li>Beta testing and deployment (Weeks 15-25): 220 hours, $17,160USD, <strong>$10,000USD requested</strong></li>
</ol>
<p>Total funding needed for all deliverables (25 weeks): 500 hours @ 78/hour: $39,000USD,<br />
<strong>$25,000USD requested</strong></p>
<h2 id="success">Success</h2>
<!--
Projects should have a definition of done that is measurable, and a thorough understanding going in of what the risks are to delivery
-->
<h3 id="definition-of-done">Definition of done</h3>
<!--
What does success look like?
-->
<p>This project will have succeeeded when our core Python lessons can include dynamically generated plots and output. Reaching this stage means that we have successfully implemented Quarto into the Workbench and documented the new functionality. All Python lessons in the core curriculum of our Lesson Programs will use Quarto, and the Maintainers of these lessons will be able to comfortably work with the infrastructure.</p>
<h3 id="measuring-success">Measuring success</h3>
<!--
How will we know when success is achieved, what markers can we use along the way
-->
<p>Markers of success in this project will include:</p>
<ol type="1">
<li>the ability to port our existing official lessons that use Python to use dynamic generation of plots and output in their lessons.</li>
<li>creation of four levels of documentation: tutorial, how-to, discussion, and reference.</li>
<li>at least one maintainer from each Python lesson being able to build their lesson locally.</li>
<li>at least one lesson in The Carpentries Incubator using literate programming for a non-R lesson.</li>
</ol>
<h3 id="future-work">Future work</h3>
<!--
How could this be extended / developed in the future by yourself and/or the community in general?
-->
<p>Upon completion of this project, the next step would be to examine the dependency provisioning structure for the Workbench and generalise it for more languages. Moreover, ports of the Workbench to other languages can help lesson developers who simply do not wish to use R as an interface.</p>
<h3 id="key-risks">Key risks</h3>
<!--
What sort of things could come up that can delay or break the project?
- [ ] People
- [ ] Processes
- [ ] Tooling & Technology
- [ ] Costs
-->
<p>Some key risks that could delay the project would be:</p>
<ul>
<li>Significant changes to the pricing model or ethical standing of GitHub Actions, which The Carpentries uses heavily to dynamically deploy lessons. This is mitigated by ensuring that core deployment mechanisms in the R packages are agnostic to higher-level frameworks so that we can pivot to a different deploy system if needed.</li>
<li>Lack of uptake by communities outside The Carpentries. We will mitigate this by publicising our work from the start of the project, and soliciting feedback from early adopters.</li>
<li>Staffing shortages due to unanticipated circumstances (COVID, natural disaster, etc). <!-- ZNK: yes, I know this is Too Dark Park, but I _think_ it should be addressed --> The project team will provide training on the Workbench to Carpentries core team and community members, to increase the number of people able to contribute to the project.</li>
<li>Running arbitrary code in literate programming documents is a security risk and could pose a situation where bad actors inject malicious code into our lesson websites. This is mitigated by secruity protocols from The Workbench that leverage the principle of least privilege and regular rotation of access tokens on GitHub.</li>
</ul>
<section class="footnotes" role="doc-endnotes">
<hr />
<ol>
<li id="fn1" role="doc-endnote"><p>About The Carpentries: <a href="https://carpentries.org/about" class="uri">https://carpentries.org/about</a>, Our Values: <a href="https://carpentries.org/values" class="uri">https://carpentries.org/values</a><a href="#fnref1" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
<li id="fn2" role="doc-endnote"><p>The Carpentries Workbench: <a href="https://carpentries.github.io/workbench" class="uri">https://carpentries.github.io/workbench</a><a href="#fnref2" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
<li id="fn3" role="doc-endnote"><p><a href="https://github.com/carpentries-incubator/SDC-BIDS-IntroMRI/tree/3d9d687a7c49c6af761a9170ed7ea60f16fcc0d2">github: carpentries-incubator/SDC-BIDS-IntroMRI</a><a href="#fnref3" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
<li id="fn4" role="doc-endnote"><p><a href="https://github.com/LearnToDiscover/Basic_Python">github: LearnToDiscover/BasicPython</a><a href="#fnref4" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
<li id="fn5" role="doc-endnote"><p><a href="https://quarto.org/" class="uri">https://quarto.org/</a><a href="#fnref5" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
<li id="fn6" role="doc-endnote"><p><a href="https://carpentries.github.io/sandpaper" class="uri">https://carpentries.github.io/sandpaper</a><a href="#fnref6" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
<li id="fn7" role="doc-endnote"><p><a href="https://carpentries.github.io/varnish" class="uri">https://carpentries.github.io/varnish</a><a href="#fnref7" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
<li id="fn8" role="doc-endnote"><p><a href="https://carpentries.org/posts-by-tags/#blog-tag-dovetail">link: blog posts tagged with “dovetail”</a><a href="#fnref8" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
<li id="fn9" role="doc-endnote"><p><a href="https://ropensci.org/blog/2022/09/23/ropensci-news-digest-september-2022/#package-development-corner">link: rOpenSci news digest 2022-09</a><a href="#fnref9" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
<li id="fn10" role="doc-endnote"><p><a href="https://docs.carpentries.org/topic_folders/policies/code-of-conduct.html" class="uri">https://docs.carpentries.org/topic_folders/policies/code-of-conduct.html</a><a href="#fnref10" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
</ol>
</section>
</body>
</html>