Merge pull request #1 from swcarpentry/gh-pages
authorErin Becker <erinstellabecker@gmail.com>
Tue, 30 Jan 2018 20:02:58 +0000 (12:02 -0800)
committerGitHub <noreply@github.com>
Tue, 30 Jan 2018 20:02:58 +0000 (12:02 -0800)
updating my fork

39 files changed:
CONDUCT.md
LICENSE.md
Makefile
_includes/carpentries.html
_includes/dc/intro.html [new file with mode: 0644]
_includes/dc/schedule.html [new file with mode: 0644]
_includes/dc/syllabus.html [new file with mode: 0644]
_includes/dc/who.html [new file with mode: 0644]
_includes/episode_navbar.html
_includes/episode_title.html
_includes/lc/intro.html [new file with mode: 0644]
_includes/lc/schedule.html [new file with mode: 0644]
_includes/lc/syllabus.html [new file with mode: 0644]
_includes/lc/who.html [new file with mode: 0644]
_includes/lesson_footer.html
_includes/links.md [new file with mode: 0644]
_includes/main_title.html
_includes/navbar.html
_includes/sc/intro.html [new file with mode: 0644]
_includes/sc/schedule.html [new file with mode: 0644]
_includes/sc/syllabus.html [new file with mode: 0644]
_includes/sc/who.html [new file with mode: 0644]
_includes/syllabus.html
_includes/workshop_footer.html
_layouts/base.html
_layouts/break.html
_layouts/episode.html
_layouts/workshop.html
assets/css/lesson.scss
assets/css/syntax.css [new file with mode: 0644]
assets/img/lc-icon-black.png [new file with mode: 0644]
assets/img/lc-icon-black.svg
assets/js/lesson.js
bin/chunk-options.R
bin/extract_figures.py [deleted file]
bin/generate_md_episodes.R
bin/lesson_check.py
bin/lesson_initialize.py
bin/workshop_check.py

index e83b08fa924a73ddc516da51b49599f964e7d8a9..5e4943b4caf8680fce2d651c01b542b8feddc5be 100644 (file)
@@ -32,13 +32,14 @@ or other unprofessional conduct.
 
 Project maintainers have the right and responsibility to remove, edit, or reject
 comments, commits, code, wiki edits, issues, and other contributions
-that are not aligned to this Code of Conduct.
+that are not aligned to our [Code of Conduct][coc].
 Project maintainers who do not follow the Code of Conduct may be removed from the project team.
 
 Instances of abusive, harassing, or otherwise unacceptable behavior
-may be reported by opening an issue or contacting one or more of the project maintainers.
+may be reported by following our [reporting guidelines][coc-reporting].
 
-This Code of Conduct is adapted from
-the [Contributor Covenant][contrib-covenant] Version 1.0.0.
 
-[contrib-covenant]: http://contributor-covenant.org/
+- [Software and Data Carpentry Code of Conduct][coc]
+- [Code of Conduct Reporting Guide][coc-reporting]
+
+{% include links.md %}
index 179758a7e987f1a075ab394a104ba2bdf129c302..0e87b5877a1cb3753b50851a10e70fb51568dd95 100644 (file)
@@ -1,7 +1,7 @@
 ---
 layout: page
 title: "Licenses"
-permalink: /license/
+root: .
 ---
 ## Instructional Material
 
@@ -78,6 +78,6 @@ are registered trademarks of [NumFOCUS][numfocus].
 
 [cc-by-human]: https://creativecommons.org/licenses/by/4.0/
 [cc-by-legal]: https://creativecommons.org/licenses/by/4.0/legalcode
-[mit-license]: http://opensource.org/licenses/mit-license.html
-[numfocus]: http://numfocus.org/
-[osi]: http://opensource.org
+[mit-license]: https://opensource.org/licenses/mit-license.html
+[numfocus]: https://numfocus.org/
+[osi]: https://opensource.org
index b5dfe2fa455b72c0bd029122cdc129a71cbd5d66..df31f00cfc7ad62b0afc849061a287392998f06c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -65,9 +65,9 @@ MARKDOWN_SRC = \
   index.md \
   CONDUCT.md \
   setup.md \
-  $(wildcard _episodes/*.md) \
+  $(sort $(wildcard _episodes/*.md)) \
   reference.md \
-  $(wildcard _extras/*.md) \
+  $(sort $(wildcard _extras/*.md)) \
   LICENSE.md
 
 # Generated lesson files in the order they appear in the navigation menu.
@@ -75,9 +75,9 @@ HTML_DST = \
   ${DST}/index.html \
   ${DST}/conduct/index.html \
   ${DST}/setup/index.html \
-  $(patsubst _episodes/%.md,${DST}/%/index.html,$(wildcard _episodes/*.md)) \
+  $(patsubst _episodes/%.md,${DST}/%/index.html,$(sort $(wildcard _episodes/*.md))) \
   ${DST}/reference/index.html \
-  $(patsubst _extras/%.md,${DST}/%/index.html,$(wildcard _extras/*.md)) \
+  $(patsubst _extras/%.md,${DST}/%/index.html,$(sort $(wildcard _extras/*.md))) \
   ${DST}/license/index.html
 
 ## lesson-md        : convert Rmarkdown files to markdown
@@ -95,10 +95,6 @@ lesson-check :
 lesson-check-all :
        @bin/lesson_check.py -s . -p ${PARSER} -l -w
 
-## lesson-figures   : re-generate inclusion displaying all figures.
-lesson-figures :
-       @bin/extract_figures.py -p ${PARSER} ${MARKDOWN_SRC} > _includes/all_figures.html
-
 ## unittest         : run unit tests on checking tools.
 unittest :
        python bin/test_lesson_check.py
index a0e0181fc7bf984d7b95a9c0b70e1230d6e350a4..4d5c9060eb4872847bda25e4a2f1fb0138194287 100644 (file)
 <br/>
 <div class="row">
   <div class="col-md-2" align="center">
-    <a href="{{ site.lc_site }}"><img src="{{ page.root }}/assets/img/lc-icon-black.svg" alt="Library Carpentry logo" /></a>
+    <a href="{{ site.lc_site }}"><img src="{{ page.root }}/assets/img/lc-icon-black.png" alt="Library Carpentry logo" /></a>
   </div>
   <div class="col-md-8">
-    Library Carpentry is made by librarians to help librarians
+    <a href="{{ site.lc_site }}">Library Carpentry</a> is made by librarians to help librarians
     automate repetitive, boring, error-prone tasks;
     create, maintain and analyse sustainable and reusable data;
     work effectively with IT and systems colleagues;
diff --git a/_includes/dc/intro.html b/_includes/dc/intro.html
new file mode 100644 (file)
index 0000000..741aeeb
--- /dev/null
@@ -0,0 +1,18 @@
+<p>
+  <a href="{{site.dc_site}}">Data Carpentry</a>
+  aims to help researchers get their work done
+  in less time and with less pain
+  by teaching them basic research computing skills.
+  This hands-on workshop will cover basic concepts and tools,
+  including program design, version control, data management,
+  and task automation.
+  Participants will be encouraged to help one another
+  and to apply what they have learned to their own research problems.
+</p>
+<p align="center">
+  <em>
+    For more information on what we teach and why,
+    please see our paper
+    "<a href="http://journals.plos.org/plosbiology/article?id=10.1371/journal.pbio.1001745">Best Practices for Scientific Computing</a>".
+  </em>
+</p>
diff --git a/_includes/dc/schedule.html b/_includes/dc/schedule.html
new file mode 100644 (file)
index 0000000..6894a19
--- /dev/null
@@ -0,0 +1,24 @@
+<div class="row">
+  <div class="col-md-6">
+    <h3>Day 1</h3>
+    <table class="table table-striped">
+      <tr> <td>09:00</td>  <td>Automating tasks with the Unix shell</td> </tr>
+      <tr> <td>10:30</td>  <td>Coffee</td> </tr>
+      <tr> <td>12:00</td>  <td>Lunch break</td> </tr>
+      <tr> <td>13:00</td>  <td>Building programs with Python</td> </tr>
+      <tr> <td>14:30</td>  <td>Coffee</td> </tr>
+      <tr> <td>16:00</td>  <td>Wrap-up</td> </tr>
+    </table>
+  </div>
+  <div class="col-md-6">
+    <h3>Day 2</h3>
+    <table class="table table-striped">
+      <tr> <td>09:00</td>  <td>Version control with Git</td> </tr>
+      <tr> <td>10:30</td>  <td>Coffee</td> </tr>
+      <tr> <td>12:00</td>  <td>Lunch break</td> </tr>
+      <tr> <td>13:00</td>  <td>Managing data with SQL</td> </tr>
+      <tr> <td>14:30</td>  <td>Coffee</td> </tr>
+      <tr> <td>16:00</td>  <td>Wrap-up</td> </tr>
+    </table>
+  </div>
+</div>
diff --git a/_includes/dc/syllabus.html b/_includes/dc/syllabus.html
new file mode 100644 (file)
index 0000000..a325cee
--- /dev/null
@@ -0,0 +1,96 @@
+<div class="row">
+  <div class="col-md-6">
+    <h3 id="syllabus-shell">The Unix Shell</h3>
+    <ul>
+      <li>Files and directories</li>
+      <li>History and tab completion</li>
+      <li>Pipes and redirection</li>
+      <li>Looping over files</li>
+      <li>Creating and running shell scripts</li>
+      <li>Finding things</li>
+      <li><a href="{{site.swc_pages}}/shell-novice/reference/">Reference...</a></li>
+    </ul>
+  </div>
+  <div class="col-md-6">
+    <h3 id="syllabus-python">Programming in Python</h3>
+    <ul>
+      <li>Using libraries</li>
+      <li>Working with arrays</li>
+      <li>Reading and plotting data</li>
+      <li>Creating and using functions</li>
+      <li>Loops and conditionals</li>
+      <li>Defensive programming</li>
+      <li>Using Python from the command line</li>
+      <li><a href="{{site.swc_pages}}/python-novice-inflammation/reference/">Reference...</a></li>
+    </ul>
+  </div>
+  <!--
+  <div class="col-md-6">
+    <h3 id="syllabus-r">Programming in R</h3>
+    <ul>
+      <li>Working with vectors and data frames</li>
+      <li>Reading and plotting data</li>
+      <li>Creating and using functions</li>
+      <li>Loops and conditionals</li>
+      <li>Using R from the command line</li>
+      <li><a href="{{site.swc_pages}}/r-novice-inflammation/reference/">Reference...</a></li>
+    </ul>
+  </div>
+  -->
+  <!--
+  <div class="col-md-6">
+    <h3 id="syllabus-matlab">Programming in MATLAB</h3>
+    <ul>
+      <li>Working with arrays</li>
+      <li>Reading and plotting data</li>
+      <li>Creating and using functions</li>
+      <li>Loops and conditionals</li>
+      <li>Defensive programming</li>
+      <li><a href="{{site.swc_pages}}/matlab-novice-inflammation/reference/">Reference...</a></li>
+     </ul>
+   </div>
+   -->
+</div>
+
+<div class="row">
+  <div class="col-md-6">
+    <h3 id="syllabus-git">Version Control with Git</h3>
+    <ul>
+      <li>Creating a repository</li>
+      <li>Recording changes to files: <code>add</code>, <code>commit</code>, ...</li>
+      <li>Viewing changes: <code>status</code>, <code>diff</code>, ...</li>
+      <li>Ignoring files</li>
+      <li>Working on the web: <code>clone</code>, <code>pull</code>, <code>push</code>, ...</li>
+      <li>Resolving conflicts</li>
+      <li>Open licenses</li>
+      <li>Where to host work, and why</li>
+      <li><a href="{{site.swc_pages}}/git-novice/reference/">Reference...</a></li>
+    </ul>
+  </div>
+  <!--
+  <div class="col-md-6">
+    <h3 id="syllabus-sql">Managing Data with SQL</h3>
+    <ul>
+      <li>Reading and sorting data</li>
+      <li>Filtering with <code>where</code></li>
+      <li>Calculating new values on the fly</li>
+      <li>Handling missing values</li>
+      <li>Combining values using aggregation</li>
+      <li>Combining information from multiple tables using <code>join</code></li>
+      <li>Creating, modifying, and deleting data</li>
+      <li>Programming with databases</li>
+      <li><a href="{{site.swc_pages}}/sql-novice-survey/reference/">Reference...</a></li>
+    </ul>
+  </div>
+   -->
+  <div class="col-md-6">
+    <h3 id="syllabus-r">Open Refine</h3>
+    <ul>
+      <li>Introduction to OpenRefine</li>
+      <li>Importing data</li>
+      <li>Basic functions</li>
+      <li>Advanced Functions</li>
+      <li><a href="{{site.lc_pages}}library-openrefine/reference">Reference...</a></li>
+    </ul>
+  </div>
+</div>
diff --git a/_includes/dc/who.html b/_includes/dc/who.html
new file mode 100644 (file)
index 0000000..2d8e94a
--- /dev/null
@@ -0,0 +1,8 @@
+<p id="who">
+  <strong>Who:</strong>
+  The course is aimed at graduate students and other researchers.
+  <strong>
+    You don't need to have any previous knowledge of the tools
+    that will be presented at the workshop.
+  </strong>
+</p>
index 1f6e033dc7825788fc159e3c5f085da20f61bef3..c2bc80e84105e5d6c2bef7c830e23ea01f264c02 100644 (file)
@@ -2,8 +2,8 @@
   Navigation bar for an episode.
 {% endcomment %}
 <div class="row">
-  <div class="col-md-1">
-    <h3>
+  <div class="col-xs-1">
+    <h3 class="text-left">
       {% if page.previous.url %}
       <a href="{{ page.root }}{{ page.previous.url }}"><span class="glyphicon glyphicon-menu-left" aria-hidden="true"></span><span class="sr-only">previous episode</span></a>
       {% else %}
       {% endif %}
     </h3>
   </div>
-  <div class="col-md-10">
+  <div class="col-xs-10">
     {% if include.episode_navbar_title %}
     <h3 class="maintitle"><a href="{{ page.root }}/">{{ site.title }}</a></h3>
-    <h1 class="maintitle">{{ page.title }}</h1>
     {% endif %}
   </div>
-  <div class="col-md-1">
-    <h3>
+  <div class="col-xs-1">
+    <h3 class="text-right">
       {% if page.next.url %}
       <a href="{{ page.root }}{{ page.next.url }}"><span class="glyphicon glyphicon-menu-right" aria-hidden="true"></span><span class="sr-only">next episode</span></a>
       {% else %}
index 5b9c821cae653b287ad995116b5af7dccf9a0572..d0abc654593423464e2082976e9b2c8879aa2b95 100644 (file)
@@ -1,42 +1,9 @@
-{% comment %}
-  Find previous and next episodes (if any).
-{% endcomment %}
-{% for episode in site.episodes  %}
-  {% if episode.url == page.url %}
-    {% unless forloop.first %}
-      {% assign prev_episode = prev %}
-    {% endunless %}
-    {% unless forloop.last %}
-      {% assign next_episode = site.episodes[forloop.index] %}
-    {% endunless %}
-  {% endif %}
-  {% assign prev = episode %}
-{% endfor %}
-
-{% comment %}
-  Display title and prev/next links.
-{% endcomment %}
 <div class="row">
   <div class="col-md-1">
-    <h3>
-      {% if prev_episode %}
-      <a href="{{ page.root }}{{ prev_episode.url }}"><span class="glyphicon glyphicon-menu-left"></span></a>
-      {% else %}
-      <a href="{{ page.root }}"><span class="glyphicon glyphicon-menu-up"></span></a>
-      {% endif %}
-    </h3>
   </div>
   <div class="col-md-10">
-    <h3 class="maintitle"><a href="{{ page.root }}/">{{ site.title }}</a></h3>
     <h1 class="maintitle">{{ page.title }}</h1>
   </div>
   <div class="col-md-1">
-    <h3>
-      {% if next_episode %}
-      <a href="{{ page.root }}{{ next_episode.url }}"><span class="glyphicon glyphicon-menu-right"></span></a>
-      {% else %}
-      <a href="{{ page.root }}"><span class="glyphicon glyphicon-menu-up"></span></a>
-      {% endif %}
-    </h3>
   </div>
 </div>
diff --git a/_includes/lc/intro.html b/_includes/lc/intro.html
new file mode 100644 (file)
index 0000000..6794b54
--- /dev/null
@@ -0,0 +1,19 @@
+<p>
+  <a href="{{site.lc_site}}">Library Carpentry</a>
+  is made by librarians, for librarians to help you:
+</p>
+<ul>
+  <li>automate repetitive, boring, error-prone tasks</li>
+  <li>create, maintain and analyse sustainable and reusable data</li>
+  <li>work effectively with IT and systems colleagues</li>
+  <li>better understand the use of software in research</li>
+  <li>and much more...</li>
+</ul>
+<p align="center">
+  <em>
+    Library Carpentry introduces you to the fundamentals of computing
+    and provides you with a platform for further self-directed learning.
+    For more information on what we teach and why, please see our paper
+    "<a href="http://doi.org/10.18352/lq.10176">Library Carpentry: software skills training for library professionals</a>".
+  </em>
+</p>
diff --git a/_includes/lc/schedule.html b/_includes/lc/schedule.html
new file mode 100644 (file)
index 0000000..cc2b592
--- /dev/null
@@ -0,0 +1,24 @@
+<div class="row">
+  <div class="col-md-6">
+    <h3>Day 1</h3>
+    <table class="table table-striped">
+      <tr> <td>09:00</td>  <td>Data Intro for Librarians</td> </tr>
+      <tr> <td>10:30</td>  <td>Coffee</td> </tr>
+      <tr> <td>12:00</td>  <td>Lunch break</td> </tr>
+      <tr> <td>13:00</td>  <td>Shell Lessons for Libraries</td> </tr>
+      <tr> <td>14:30</td>  <td>Coffee</td> </tr>
+      <tr> <td>16:00</td>  <td>Wrap-up</td> </tr>
+    </table>
+  </div>
+  <div class="col-md-6">
+    <h3>Day 2</h3>
+    <table class="table table-striped">
+      <tr> <td>09:00</td>  <td>Git Intro for Librarians</td> </tr>
+      <tr> <td>10:30</td>  <td>Coffee</td> </tr>
+      <tr> <td>12:00</td>  <td>Lunch break</td> </tr>
+      <tr> <td>13:00</td>  <td>OpenRefine for Librarians</td> </tr>
+      <tr> <td>14:30</td>  <td>Coffee</td> </tr>
+      <tr> <td>16:00</td>  <td>Wrap-up</td> </tr>
+    </table>
+  </div>
+</div>
diff --git a/_includes/lc/syllabus.html b/_includes/lc/syllabus.html
new file mode 100644 (file)
index 0000000..e2c7012
--- /dev/null
@@ -0,0 +1,69 @@
+<div class="row">
+  <div class="col-md-6">
+    <h3 id="syllabus-python">Data Intro</h3>
+    <ul>
+      <li>Intro to data</li>
+      <li>Jargon busting</li>
+      <li>Keyboard shortcuts</li>
+      <li>Plain text formats</li>
+      <li>Naming files</li>
+      <li>Regular expressions</li>
+      <li><a href="https://data-lessons.github.io/library-data-intro/reference/">Reference...</a></li>
+    </ul>
+  </div>
+  <div class="col-md-6">
+    <h3 id="syllabus-shell">The Unix Shell</h3>
+    <ul>
+      <li>Files and directories</li>
+      <li>History and tab completion</li>
+      <li>Counting and sorting contents in files</li>
+      <li>Pipes and redirection</li>
+      <li>Mining or searching in files</li>
+      <li><a href="https://data-lessons.github.io/library-shell/reference/">Reference...</a></li>
+    </ul>
+  </div>
+
+</div>
+
+<div class="row">
+  <div class="col-md-6">
+    <h3 id="syllabus-git">Version Control with Git</h3>
+    <ul>
+      <li>Creating a repository</li>
+      <li>Configuring git</li>
+      <li>Recording changes to files: <code>add</code>, <code>commit</code>, ...</li>
+      <li>Viewing state changes with <code>status</code></li>
+      <li>Working on the web: <code>clone</code>, <code>pull</code>, <code>push</code>, ...</li>
+      <li>Where to host work, and why</li>
+      <li><a href="https://data-lessons.github.io/library-git/reference">Reference...</a></li>
+    </ul>
+  </div>
+  <div class="col-md-6">
+    <div class="col-md-6">
+      <h3 id="syllabus-r">Open Refine</h3>
+      <ul>
+        <li>Introduction to OpenRefine</li>
+        <li>Importing data</li>
+        <li>Basic functions</li>
+        <li>Advanced Functions</li>
+        <li><a href="https://data-lessons.github.io/library-openrefine/reference">Reference...</a></li>
+      </ul>
+    </div>
+  </div>
+</div>
+<!--div class="row">
+  <div class="col-md-6">
+    <h3 id="syllabus-sql">SQL Intro</h3>
+    <ul>
+      <li>What is SQL?</li>
+      <li>Intro to SQLite Manager</li>
+      <li>Importing a database</li>
+      <li>Reading and sorting data</li>
+      <li>Filtering with <code>where</code></li>
+      <li>Combining values using aggregation</li>
+      <li>Combining information from multiple tables using <code>join</code></li>
+      <li><a href="https://data-lessons.github.io//library-sql/reference/">Reference...</a></li>
+    </ul>
+  </div>
+</div>
+-->
diff --git a/_includes/lc/who.html b/_includes/lc/who.html
new file mode 100644 (file)
index 0000000..fd9b38c
--- /dev/null
@@ -0,0 +1,8 @@
+<p id="who">
+  <strong>Who:</strong>
+  The course is for librarians, archivists, and other information workers.
+  <strong>
+    You don't need to have any previous knowledge of the tools that
+    will be presented at the workshop.
+  </strong>
+</p>
index fa5d888701737e2e3d34f6f0a28bcb1f6870307c..f36bc09c368d0b741ffdb0127156e556313233a1 100644 (file)
@@ -31,7 +31,7 @@
        /
        <a href="{{ site.github.repository_url }}/blob/gh-pages/CITATION">Cite</a>
        /
-       <a href="{{ site.contact }}">Contact</a>
+       <a href="{{ site.email }}">Contact</a>
       </h4>
     </div>
   </div>
diff --git a/_includes/links.md b/_includes/links.md
new file mode 100644 (file)
index 0000000..2dfecd6
--- /dev/null
@@ -0,0 +1,35 @@
+[cc-by-human]: https://creativecommons.org/licenses/by/4.0/
+[cc-by-legal]: https://creativecommons.org/licenses/by/4.0/legalcode
+[concept-maps]: https://carpentries.github.io/instructor-training/05-memory/
+[email]: mailto:lessons@software-carpentry.org
+[contrib-covenant]: https://contributor-covenant.org/
+[contributing]: {{ site.github.repository_url }}/blob/gh-pages/CONTRIBUTING.md
+[cran-checkpoint]: https://cran.r-project.org/web/packages/checkpoint/index.html
+[cran-knitr]: https://cran.r-project.org/web/packages/knitr/index.html
+[cran-stringr]: https://cran.r-project.org/web/packages/stringr/index.html
+[github-importer]: https://import.github.com/
+[importer]: https://github.com/new/import
+[jekyll-collection]: https://jekyllrb.com/docs/collections/
+[jekyll-install]: https://jekyllrb.com/docs/installation/
+[jekyll-windows]: http://jekyll-windows.juthilo.com/
+[jekyll]: https://jekyllrb.com/
+[jupyter]: https://jupyter.org/
+[mit-license]: https://opensource.org/licenses/mit-license.html
+[morea]: https://morea-framework.github.io/
+[numfocus]: https://numfocus.org/
+[osi]: https://opensource.org
+[pandoc]: https://pandoc.org/
+[paper-now]: https://github.com/PeerJ/paper-now
+[python-gapminder]: https://swcarpentry.github.io/python-novice-gapminder/
+[pyyaml]: https://pypi.python.org/pypi/PyYAML
+[r-markdown]: http://rmarkdown.rstudio.com/
+[rstudio]: https://www.rstudio.com/
+[ruby-install-guide]: https://www.ruby-lang.org/en/downloads/
+[ruby-installer]: https://rubyinstaller.org/
+[rubygems]: https://rubygems.org/pages/download/
+[styles]: https://github.com/swcarpentry/styles/
+[training]: https://swcarpentry.github.io/instructor-training/
+[workshop-repo]: {{ site.workshop_repo }}
+[yaml]: http://yaml.org/
+[coc]: https://software-carpentry.org/conduct/
+[coc-reporting]: https://software-carpentry.org/CoC-reporting/
index 8e22ced110926139022b54a201d66a46c34d491d..d007abae203592c924f78bd178f2d22538214e07 100644 (file)
@@ -1,4 +1,4 @@
 {% comment %}
   Main title for lesson pages.
 {% endcomment %}
-<h1 class="maintitle"><a href="{{ page.root }}/">{{ site.title }}</a>{% if page.title %}: {{ page.title }}{% endif %}</h1>
+<h1 class="maintitle"><a href="{{ page.root }}{% link index.md %}">{{ site.title }}</a>{% if page.title %}: {{ page.title }}{% endif %}</h1>
index 6b21afc7613cc27c56c8b6178379f9d6fbb637a2..d4481859806775f325f312c303f21da4332629d7 100644 (file)
       </a>
       {% elsif page.carpentry == "lc" %}
       <a href="{{ site.lc_site }}" class="pull-left">
-        <img class="navbar-logo" src="{{ page.root }}/assets/img/lc-icon-black.svg" alt="Library Carpentry logo" />
-      </a>
-      {% elsif site.carpentry == "swc" %}
-      <a href="{{ site.swc_site }}" class="pull-left">
-        <img class="navbar-logo" src="{{ page.root }}/assets/img/swc-icon-blue.svg" alt="Software Carpentry logo" />
-      </a>
-      {% elsif site.carpentry == "dc" %}
-      <a href="{{ site.dc_site }}" class="pull-left">
-        <img class="navbar-logo" src="{{ page.root }}/assets/img/dc-icon-black.svg" alt="Data Carpentry logo" />
-      </a>
-      {% elsif site.carpentry == "lc" %}
-      <a href="{{ site.lc_site }}" class="pull-left">
-        <img class="navbar-logo" src="{{ page.root }}/assets/img/lc-icon-black.svg" alt="Library Carpentry logo" />
+        <img class="navbar-logo" src="{{ page.root }}/assets/img/lc-icon-black.png" alt="Library Carpentry logo" />
       </a>
       {% endif %}
 
       {% comment %} Always show link to home page. {% endcomment %}
-      <a class="navbar-brand" href="{{ page.root }}/">Home</a>
+      <a class="navbar-brand" href="{{ page.root }}{% link index.md %}">Home</a>
 
     </div>
     <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
       <ul class="nav navbar-nav">
 
        {% comment %} Always show code of conduct. {% endcomment %}
-        <li><a href="{{ page.root }}/conduct/">Code of Conduct</a></li>
+        <li><a href="{{ page.root }}{% link CONDUCT.md %}">Code of Conduct</a></li>
 
-       {% comment %} Show setup instructions, reference guide, and lesson episodes for lessons. {% endcomment %}
         {% if site.kind == "lesson" %}
-        <li><a href="{{ page.root }}/setup/">Setup</a></li>
+       {% comment %} Show setup instructions. {% endcomment %}
+        <li><a href="{{ page.root }}{% link setup.md %}">Setup</a></li>
+
+        {% comment %} Show lesson episodes for lessons. {% endcomment %}
         <li class="dropdown">
           <a href="{{ page.root }}/" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Episodes <span class="caret"></span></a>
           <ul class="dropdown-menu">
             {% for episode in site.episodes %}
             <li><a href="{{ page.root }}{{ episode.url }}">{{ episode.title }}</a></li>
             {% endfor %}
+           <li role="separator" class="divider"></li>
+            <li><a href="{{ page.root }}{% link aio.md %}">All in one page (Beta)</a></li>
           </ul>
         </li>
        {% endif %}
 
        {% comment %} Show extras for lessons or if this is the main workshop-template repo (where they contain documentation). {% endcomment %}
-       {% if site.kind == "lesson" or site.github.repository_name == "workshop-template" %}
+       {% if site.kind == "lesson" %}
         <li class="dropdown">
           <a href="{{ page.root }}/" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Extras <span class="caret"></span></a>
           <ul class="dropdown-menu">
-            <li><a href="{{ page.root }}/reference/">Reference</a></li>
+            <li><a href="{{ page.root }}{% link reference.md %}">Reference</a></li>
             {% for extra in site.extras %}
             <li><a href="{{ page.root }}{{ extra.url }}">{{ extra.title }}</a></li>
             {% endfor %}
@@ -75,7 +67,7 @@
        {% endif %}
 
        {% comment %} Always show license. {% endcomment %}
-        <li><a href="{{ page.root }}/license/">License</a></li>
+        <li><a href="{{ page.root }}{% link LICENSE.md %}">License</a></li>
        {% if page.source %}
        {% if page.source == "Rmd" %}
        <li><a href="{{site.github.repository_url}}/edit/gh-pages/{{page.path|replace: "_episodes", "_episodes_rmd" | replace: ".md", ".Rmd"}}">Improve this page <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span></a></li>
diff --git a/_includes/sc/intro.html b/_includes/sc/intro.html
new file mode 100644 (file)
index 0000000..7b9fbf5
--- /dev/null
@@ -0,0 +1,18 @@
+<p>
+  <a href="{{site.swc_site}}">Software Carpentry</a>
+  aims to help researchers get their work done
+  in less time and with less pain
+  by teaching them basic research computing skills.
+  This hands-on workshop will cover basic concepts and tools,
+  including program design, version control, data management,
+  and task automation.
+  Participants will be encouraged to help one another
+  and to apply what they have learned to their own research problems.
+</p>
+<p align="center">
+  <em>
+    For more information on what we teach and why,
+    please see our paper
+    "<a href="http://journals.plos.org/plosbiology/article?id=10.1371/journal.pbio.1001745">Best Practices for Scientific Computing</a>".
+  </em>
+</p>
diff --git a/_includes/sc/schedule.html b/_includes/sc/schedule.html
new file mode 100644 (file)
index 0000000..6894a19
--- /dev/null
@@ -0,0 +1,24 @@
+<div class="row">
+  <div class="col-md-6">
+    <h3>Day 1</h3>
+    <table class="table table-striped">
+      <tr> <td>09:00</td>  <td>Automating tasks with the Unix shell</td> </tr>
+      <tr> <td>10:30</td>  <td>Coffee</td> </tr>
+      <tr> <td>12:00</td>  <td>Lunch break</td> </tr>
+      <tr> <td>13:00</td>  <td>Building programs with Python</td> </tr>
+      <tr> <td>14:30</td>  <td>Coffee</td> </tr>
+      <tr> <td>16:00</td>  <td>Wrap-up</td> </tr>
+    </table>
+  </div>
+  <div class="col-md-6">
+    <h3>Day 2</h3>
+    <table class="table table-striped">
+      <tr> <td>09:00</td>  <td>Version control with Git</td> </tr>
+      <tr> <td>10:30</td>  <td>Coffee</td> </tr>
+      <tr> <td>12:00</td>  <td>Lunch break</td> </tr>
+      <tr> <td>13:00</td>  <td>Managing data with SQL</td> </tr>
+      <tr> <td>14:30</td>  <td>Coffee</td> </tr>
+      <tr> <td>16:00</td>  <td>Wrap-up</td> </tr>
+    </table>
+  </div>
+</div>
diff --git a/_includes/sc/syllabus.html b/_includes/sc/syllabus.html
new file mode 100644 (file)
index 0000000..a325cee
--- /dev/null
@@ -0,0 +1,96 @@
+<div class="row">
+  <div class="col-md-6">
+    <h3 id="syllabus-shell">The Unix Shell</h3>
+    <ul>
+      <li>Files and directories</li>
+      <li>History and tab completion</li>
+      <li>Pipes and redirection</li>
+      <li>Looping over files</li>
+      <li>Creating and running shell scripts</li>
+      <li>Finding things</li>
+      <li><a href="{{site.swc_pages}}/shell-novice/reference/">Reference...</a></li>
+    </ul>
+  </div>
+  <div class="col-md-6">
+    <h3 id="syllabus-python">Programming in Python</h3>
+    <ul>
+      <li>Using libraries</li>
+      <li>Working with arrays</li>
+      <li>Reading and plotting data</li>
+      <li>Creating and using functions</li>
+      <li>Loops and conditionals</li>
+      <li>Defensive programming</li>
+      <li>Using Python from the command line</li>
+      <li><a href="{{site.swc_pages}}/python-novice-inflammation/reference/">Reference...</a></li>
+    </ul>
+  </div>
+  <!--
+  <div class="col-md-6">
+    <h3 id="syllabus-r">Programming in R</h3>
+    <ul>
+      <li>Working with vectors and data frames</li>
+      <li>Reading and plotting data</li>
+      <li>Creating and using functions</li>
+      <li>Loops and conditionals</li>
+      <li>Using R from the command line</li>
+      <li><a href="{{site.swc_pages}}/r-novice-inflammation/reference/">Reference...</a></li>
+    </ul>
+  </div>
+  -->
+  <!--
+  <div class="col-md-6">
+    <h3 id="syllabus-matlab">Programming in MATLAB</h3>
+    <ul>
+      <li>Working with arrays</li>
+      <li>Reading and plotting data</li>
+      <li>Creating and using functions</li>
+      <li>Loops and conditionals</li>
+      <li>Defensive programming</li>
+      <li><a href="{{site.swc_pages}}/matlab-novice-inflammation/reference/">Reference...</a></li>
+     </ul>
+   </div>
+   -->
+</div>
+
+<div class="row">
+  <div class="col-md-6">
+    <h3 id="syllabus-git">Version Control with Git</h3>
+    <ul>
+      <li>Creating a repository</li>
+      <li>Recording changes to files: <code>add</code>, <code>commit</code>, ...</li>
+      <li>Viewing changes: <code>status</code>, <code>diff</code>, ...</li>
+      <li>Ignoring files</li>
+      <li>Working on the web: <code>clone</code>, <code>pull</code>, <code>push</code>, ...</li>
+      <li>Resolving conflicts</li>
+      <li>Open licenses</li>
+      <li>Where to host work, and why</li>
+      <li><a href="{{site.swc_pages}}/git-novice/reference/">Reference...</a></li>
+    </ul>
+  </div>
+  <!--
+  <div class="col-md-6">
+    <h3 id="syllabus-sql">Managing Data with SQL</h3>
+    <ul>
+      <li>Reading and sorting data</li>
+      <li>Filtering with <code>where</code></li>
+      <li>Calculating new values on the fly</li>
+      <li>Handling missing values</li>
+      <li>Combining values using aggregation</li>
+      <li>Combining information from multiple tables using <code>join</code></li>
+      <li>Creating, modifying, and deleting data</li>
+      <li>Programming with databases</li>
+      <li><a href="{{site.swc_pages}}/sql-novice-survey/reference/">Reference...</a></li>
+    </ul>
+  </div>
+   -->
+  <div class="col-md-6">
+    <h3 id="syllabus-r">Open Refine</h3>
+    <ul>
+      <li>Introduction to OpenRefine</li>
+      <li>Importing data</li>
+      <li>Basic functions</li>
+      <li>Advanced Functions</li>
+      <li><a href="{{site.lc_pages}}library-openrefine/reference">Reference...</a></li>
+    </ul>
+  </div>
+</div>
diff --git a/_includes/sc/who.html b/_includes/sc/who.html
new file mode 100644 (file)
index 0000000..2d8e94a
--- /dev/null
@@ -0,0 +1,8 @@
+<p id="who">
+  <strong>Who:</strong>
+  The course is aimed at graduate students and other researchers.
+  <strong>
+    You don't need to have any previous knowledge of the tools
+    that will be presented at the workshop.
+  </strong>
+</p>
index 95ec2e13a77744e0c6e2d316d625131095614b8a..92270f835e6f799412411a2aeda03a5b26e94c2a 100644 (file)
@@ -17,7 +17,7 @@
   <tr>
     {% if multiday %}<td class="col-md-1"></td>{% endif %}
     <td class="{% if multiday %}col-md-1{% else %}col-md-2{% endif %}"></td>
-    <td class="col-md-3"><a href="{{ page.root }}/setup">Setup</a></td>
+    <td class="col-md-3"><a href="{{ page.root }}{% link setup.md %}">Setup</a></td>
     <td class="col-md-7">Download files required for the lesson</td>
   </tr>
   {% for episode in site.episodes %}
index 3ae63e6dc8f48dd341532e0fd95582e72e50c6e5..897e421d0ad452383ab9528e866a127f58f0fef5 100644 (file)
@@ -3,14 +3,22 @@
 {% endcomment %}
 <footer>
   <div class="row">
-    <div class="col-md-4" align="left">
-      <h4><a href="{{ site.swc_site }}">Software Carpentry</a></h4>
+    <div class="col-md-6" align="left">
+      <h4>
+       Copyright &copy; 2016
+       {% if site.carpentry == "swc" %}
+       <a href="{{ site.swc_site }}">Software Carpentry Foundation</a>
+       {% elsif site.carpentry == "dc" %}
+       <a href="{{ site.dc_site }}">Data Carpentry</a>
+       {% elsif site.carpentry == "lc" %}
+       <a href="{{ site.lc_site }}">Library Carpentry</a>
+       {% endif %}
+      </h4>
     </div>
-    <div class="col-md-4" align="right">
-      <h4><a href="{{ site.dc_site }}">Data Carpentry</a></h4>
-    </div>
-    <div class="col-md-4" align="right">
-      <h4><a href="{{ site.lc_site }}">Library Carpentry</a></h4>
+    <div class="col-md-6" align="right">
+      <h4>
+       <a href="mailto:{{ site.email }}">Contact</a>
+      </h4>
     </div>
   </div>
 </footer>
index 365d2e50fcb0f226f37f02e54d7b6ac3503ad815..f1e90d1ad2e958b8eafe5799657a0bb42ea8306d 100644 (file)
@@ -12,6 +12,7 @@
     <link rel="stylesheet" type="text/css" href="{{ page.root }}/assets/css/bootstrap.css" />
     <link rel="stylesheet" type="text/css" href="{{ page.root }}/assets/css/bootstrap-theme.css" />
     <link rel="stylesheet" type="text/css" href="{{ page.root }}/assets/css/lesson.css" />
+    <link rel="stylesheet" type="text/css" href="{{ page.root }}/assets/css/syntax.css" />
     {% if site.carpentry == "swc" %}
     <link rel="shortcut icon" type="image/x-icon" href="/favicon-swc.ico" />
     {% elsif site.carpentry == "dc" %}
index 6e2a6a092f60e11ddda3ddd0cbb891a46db48b15..ac582324bf3132a257655cbb43c55464386be73e 100644 (file)
@@ -2,6 +2,9 @@
 layout: base
 ---
 {% include episode_navbar.html episode_navbar_title=true %}
+<article>
+{% include episode_title.html %}
 {% include episode_break.html %}
 {{content}}
+</article>
 {% include episode_navbar.html episode_navbar_title=false %}
index d774a6814733acd55e13a7d9c2ac132cd2a4eba8..0b276e773a269213fb0eb745fad9c413f7fc55d6 100644 (file)
@@ -2,7 +2,10 @@
 layout: base
 ---
 {% include episode_navbar.html episode_navbar_title=true %}
+<article>
+{% include episode_title.html %}
 {% include episode_overview.html %}
 {{content}}
 {% include episode_keypoints.html %}
+</article>
 {% include episode_navbar.html episode_navbar_title=false %}
index 2f4cd3040f92ddf477a539171b23fe83a06734d1..ccd8747ee6027197b799c3dbfb24327f2f5d14e6 100644 (file)
@@ -16,7 +16,7 @@
     <meta name="eventbrite" content="{{page.eventbrite}}" />
     <meta name="instructor" content="{{page.instructor|join:'|'}}" />
     <meta name="helper" content="{{page.helper|join:'|'}}" />
-    <meta name="contact" content="{{page.contact}}" />
+    <meta name="contact" content="{{page.email}}" />
     {% if page.redirect %}
     <meta http-equiv="refresh" content="0; url={{page.redirect}}" />
     {% endif %}
index fe008e501b4f65585309f8297a5d734685bbba2c..abbaecb738f85f74f69134bc3f3d2956faf73570 100644 (file)
@@ -153,3 +153,25 @@ span.fold-unfold {
   margin-left: 1em;
   opacity: 0.5;
 }
+
+
+//----------------------------------------
+// keyboard key style, from StackExchange.
+//----------------------------------------
+
+kbd {
+    display: inline-block;
+    margin: 0 .1em;
+    padding: .1em .6em;
+    font-family: Arial,"Helvetica Neue",Helvetica,sans-serif;
+    font-size: 11px;
+    line-height: 1.4;
+    color: #242729;
+    text-shadow: 0 1px 0 #FFF;
+    background-color: #e1e3e5;
+    border: 1px solid #adb3b9;
+    border-radius: 3px;
+    box-shadow: 0 1px 0 rgba(12,13,14,0.2), 0 0 0 2px #FFF inset;
+    white-space: nowrap;
+    font-style: normal;
+}
diff --git a/assets/css/syntax.css b/assets/css/syntax.css
new file mode 100644 (file)
index 0000000..572069c
--- /dev/null
@@ -0,0 +1,69 @@
+.highlight .hll { background-color: #ffffcc }
+.highlight  { background: #f8f8f8; }
+.highlight .c { color: #408080; font-style: italic } /* Comment */
+.highlight .err { border: 1px solid #FF0000 } /* Error */
+.highlight .k { color: #008000; font-weight: bold } /* Keyword */
+.highlight .o { color: #666666 } /* Operator */
+.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
+.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
+.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
+.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #A00000 } /* Generic.Deleted */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #FF0000 } /* Generic.Error */
+.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.highlight .gi { color: #00A000 } /* Generic.Inserted */
+.highlight .go { color: #888888 } /* Generic.Output */
+.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.highlight .gt { color: #0044DD } /* Generic.Traceback */
+.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
+.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { color: #008000 } /* Keyword.Pseudo */
+.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #B00040 } /* Keyword.Type */
+.highlight .m { color: #666666 } /* Literal.Number */
+.highlight .s { color: #BA2121 } /* Literal.String */
+.highlight .na { color: #7D9029 } /* Name.Attribute */
+.highlight .nb { color: #008000 } /* Name.Builtin */
+.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
+.highlight .no { color: #880000 } /* Name.Constant */
+.highlight .nd { color: #AA22FF } /* Name.Decorator */
+.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
+.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #0000FF } /* Name.Function */
+.highlight .nl { color: #A0A000 } /* Name.Label */
+.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
+.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
+.highlight .nv { color: #19177C } /* Name.Variable */
+.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mb { color: #666666 } /* Literal.Number.Bin */
+.highlight .mf { color: #666666 } /* Literal.Number.Float */
+.highlight .mh { color: #666666 } /* Literal.Number.Hex */
+.highlight .mi { color: #666666 } /* Literal.Number.Integer */
+.highlight .mo { color: #666666 } /* Literal.Number.Oct */
+.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
+.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
+.highlight .sc { color: #BA2121 } /* Literal.String.Char */
+.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
+.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
+.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
+.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
+.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
+.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
+.highlight .sx { color: #008000 } /* Literal.String.Other */
+.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
+.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
+.highlight .ss { color: #19177C } /* Literal.String.Symbol */
+.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
+.highlight .fm { color: #0000FF } /* Name.Function.Magic */
+.highlight .vc { color: #19177C } /* Name.Variable.Class */
+.highlight .vg { color: #19177C } /* Name.Variable.Global */
+.highlight .vi { color: #19177C } /* Name.Variable.Instance */
+.highlight .vm { color: #19177C } /* Name.Variable.Magic */
+.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
diff --git a/assets/img/lc-icon-black.png b/assets/img/lc-icon-black.png
new file mode 100644 (file)
index 0000000..5e3d9fe
Binary files /dev/null and b/assets/img/lc-icon-black.png differ
index df711892ac71a9dc1792a77167a6634020b6b23c..3adf606649b0504b94f796d8cc6190b0e2868fc7 100644 (file)
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
- "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
-<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
- width="600.000000pt" height="200.000000pt" viewBox="0 0 600.000000 200.000000"
- preserveAspectRatio="xMidYMid meet">
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
 
-<g transform="translate(0.000000,200.000000) scale(0.100000,-0.100000)"
-fill="#000000" stroke="none">
-<path d="M1005 1355 l0 -325 248 0 247 0 0 83 0 82 -152 0 -153 0 0 243 0 242
--95 0 -95 0 0 -325z"/>
-<path d="M1545 1355 l0 -325 98 0 97 0 0 325 0 325 -97 0 -98 0 0 -325z"/>
-<path d="M1835 1356 l0 -326 190 0 c105 0 208 5 229 10 81 18 128 74 133 157
-5 75 -18 120 -75 148 -23 11 -41 22 -42 25 0 3 14 11 31 19 35 15 68 77 69
-126 0 51 -40 116 -85 139 -36 19 -61 21 -245 24 l-205 3 0 -325z m326 164 c22
--12 26 -59 7 -78 -7 -7 -40 -12 -80 -12 l-68 0 0 50 0 50 61 0 c33 0 69 -5 80
--10z m9 -233 c17 -9 26 -22 28 -44 5 -46 -26 -63 -110 -63 l-68 0 0 60 0 60
-63 0 c34 0 73 -6 87 -13z"/>
-<path d="M2465 1355 l0 -325 96 0 95 0 -4 115 -5 115 47 0 c64 0 85 -24 122
--137 l29 -93 103 0 c56 0 102 3 102 8 0 8 -82 202 -102 240 -7 13 -23 29 -36
-36 l-24 13 35 22 c45 27 68 78 68 146 0 91 -37 145 -120 173 -21 8 -106 12
--220 12 l-186 0 0 -325z m309 165 c21 -8 26 -16 26 -43 0 -47 -15 -57 -87 -57
-l-63 0 0 55 0 55 49 0 c27 0 61 -4 75 -10z"/>
-<path d="M3290 1665 c0 -8 -47 -151 -105 -319 -58 -167 -105 -307 -105 -310 0
--3 46 -6 103 -6 l103 0 14 68 15 67 100 0 100 0 15 -67 14 -68 103 0 c57 0
-103 3 103 7 0 3 -47 143 -105 310 -58 167 -105 310 -105 318 0 12 -22 15 -125
-15 -103 0 -125 -3 -125 -15z m174 -317 l6 -28 -55 0 c-30 0 -55 1 -55 3 0 2 6
-26 14 53 8 27 20 69 27 94 l12 45 22 -70 c12 -38 25 -82 29 -97z"/>
-<path d="M3805 1355 l0 -325 96 0 95 0 -4 115 -5 115 47 0 c64 0 85 -24 122
--137 l29 -93 103 0 c56 0 102 3 102 8 0 8 -82 202 -102 240 -7 13 -23 29 -36
-36 l-24 13 35 22 c45 27 68 78 68 146 0 91 -37 145 -120 173 -21 8 -106 12
--220 12 l-186 0 0 -325z m309 165 c21 -8 26 -16 26 -43 0 -47 -15 -57 -87 -57
-l-63 0 0 55 0 55 49 0 c27 0 61 -4 75 -10z"/>
-<path d="M4380 1674 c0 -3 13 -24 28 -47 16 -23 68 -108 115 -189 l87 -146 0
--131 0 -131 95 0 95 0 0 130 0 130 115 192 c63 105 115 193 115 195 0 1 -49 3
--109 3 l-108 0 -53 -107 -52 -108 -52 107 -51 107 -112 0 c-62 1 -113 -2 -113
--5z"/>
-<path d="M357 999 c-160 -38 -254 -197 -228 -386 18 -121 73 -203 169 -250 50
--25 68 -28 152 -28 84 0 102 3 152 28 59 29 96 68 122 131 26 62 22 73 -29 80
--148 20 -132 22 -148 -15 -18 -45 -38 -60 -85 -66 -88 -12 -142 56 -142 177 0
-39 6 85 14 104 39 94 169 104 206 16 14 -35 12 -34 113 -15 43 8 80 15 82 15
-6 0 -12 55 -28 87 -24 46 -95 102 -151 118 -54 16 -140 18 -199 4z"/>
-<path d="M2995 1003 l-230 -3 0 -325 0 -325 253 0 252 0 0 80 0 79 -157 3
--158 3 -3 48 -3 48 138 -2 138 -2 0 78 0 79 -138 -3 -138 -3 3 44 3 43 153 0
-152 0 0 83 c0 72 -2 82 -17 80 -10 -2 -121 -4 -248 -5z"/>
-<path d="M4000 923 l0 -83 100 0 100 0 0 -245 0 -245 98 0 97 0 -3 245 -4 245
-106 0 106 0 0 83 0 82 -300 0 -300 0 0 -82z"/>
-<path d="M990 985 c0 -8 -47 -151 -105 -319 -58 -167 -105 -307 -105 -310 0
--3 46 -6 103 -6 l103 0 14 68 15 67 100 0 100 0 15 -67 14 -68 103 0 c57 0
-103 3 103 7 0 3 -47 143 -105 310 -58 167 -105 310 -105 318 0 12 -22 15 -125
-15 -103 0 -125 -3 -125 -15z m174 -317 l6 -28 -55 0 c-30 0 -55 1 -55 3 0 2 6
-26 14 53 8 27 20 69 27 94 l12 45 22 -70 c12 -38 25 -82 29 -97z"/>
-<path d="M1505 675 l0 -325 96 0 95 0 -4 115 -5 115 47 0 c64 0 85 -24 122
--137 l29 -93 103 0 c56 0 102 3 102 8 0 8 -82 202 -102 240 -7 13 -23 29 -36
-36 l-24 13 35 22 c45 27 68 78 68 146 0 91 -37 145 -120 173 -21 8 -106 12
--220 12 l-186 0 0 -325z m309 165 c21 -8 26 -16 26 -43 0 -47 -15 -57 -87 -57
-l-63 0 0 55 0 55 49 0 c27 0 61 -4 75 -10z"/>
-<path d="M2155 675 l0 -325 97 0 97 0 -6 98 -6 99 89 6 c100 7 145 19 190 53
-97 72 100 276 4 344 -57 41 -111 50 -294 50 l-171 0 0 -325z m320 159 c25 -10
-36 -49 24 -81 -14 -38 -25 -43 -96 -43 l-63 0 0 65 0 65 59 0 c33 0 67 -3 76
--6z"/>
-<path d="M3345 675 l0 -325 95 0 95 0 -3 177 -3 178 24 -40 c13 -22 50 -80 83
--130 34 -49 73 -111 88 -137 l28 -48 96 0 97 0 0 325 0 325 -95 0 -95 0 3
--177 4 -178 -111 169 c-61 93 -111 173 -111 178 0 4 -44 8 -97 8 l-98 0 0
--325z"/>
-<path d="M4655 675 l0 -325 96 0 95 0 -4 115 -5 115 47 0 c64 0 85 -24 122
--137 l29 -93 103 0 c56 0 102 3 102 8 0 8 -82 202 -102 240 -7 13 -23 29 -36
-36 l-24 13 35 22 c45 27 68 78 68 146 0 91 -37 145 -120 173 -21 8 -106 12
--220 12 l-186 0 0 -325z m309 165 c21 -8 26 -16 26 -43 0 -47 -15 -57 -87 -57
-l-63 0 0 55 0 55 49 0 c27 0 61 -4 75 -10z"/>
-<path d="M5230 994 c0 -3 13 -24 28 -47 16 -23 68 -108 115 -189 l87 -146 0
--131 0 -131 95 0 95 0 0 130 0 130 115 192 c63 105 115 193 115 195 0 1 -49 3
--109 3 l-108 0 -53 -107 -52 -108 -52 107 -51 107 -112 0 c-62 1 -113 -2 -113
--5z"/>
-</g>
-</svg>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   id="svg2"
+   xml:space="preserve"
+   width="1056"
+   height="816"
+   viewBox="0 0 1056 816"
+   sodipodi:docname="lc-icon-black.svg"
+   inkscape:version="0.92.1 r"><metadata
+     id="metadata8"><rdf:RDF><cc:Work
+         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+     id="defs6"><clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath18"><path
+         d="M 0,612 H 792 V 0 H 0 Z"
+         id="path16"
+         inkscape:connector-curvature="0" /></clipPath></defs><sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="923"
+     inkscape:window-height="480"
+     id="namedview4"
+     showgrid="false"
+     inkscape:zoom="0.28921569"
+     inkscape:cx="528"
+     inkscape:cy="408"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="g10" /><g
+     id="g10"
+     inkscape:groupmode="layer"
+     inkscape:label="LibraryCarpentryLogo_Draft_04"
+     transform="matrix(1.3333333,0,0,-1.3333333,0,816)"><g
+       id="g12"><g
+         id="g14"
+         clip-path="url(#clipPath18)"><g
+           id="g20"
+           transform="translate(314.9707,239.4268)"><path
+             d="M 0,0 C 8.395,0 13.455,3.795 18.055,7.935 V 21.506 C 6.095,21.391 -9.775,21.391 -9.775,9.431 -9.775,3.335 -6.441,0 0,0 m 18.055,29.786 v 5.405 c 0,5.175 -3.105,9.662 -12.651,9.662 -10.465,0 -16.791,-4.832 -17.94,-4.832 -1.61,0 -4.025,4.486 -4.025,5.751 0,2.991 10.12,7.36 21.621,7.36 14.26,0 22.656,-6.67 22.656,-18.055 V 9.315 c 0,-9.43 1.38,-13.916 1.38,-14.49 0,-2.185 -4.715,-2.646 -6.21,-2.646 -2.761,0 -3.335,4.831 -4.026,8.05 -4.37,-4.83 -10.695,-8.625 -19.321,-8.625 -11.155,0 -19.666,5.406 -19.666,17.251 0,19.436 20.586,20.701 38.182,20.931"
+             style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path22"
+             inkscape:connector-curvature="0" /></g><g
+           id="g24"
+           transform="translate(362.2344,274.3887)"><path
+             d="m 0,0 c 0,9.43 -1.381,13.915 -1.381,14.49 0,2.186 4.716,2.645 6.211,2.645 2.76,0 3.336,-4.6 4.025,-7.59 3.911,5.52 8.51,8.625 13.34,8.625 4.487,0 6.671,-1.955 6.671,-4.484 0,-2.186 -0.92,-6.211 -2.3,-6.211 C 25.071,7.475 24.15,8.74 20.24,8.74 14.261,8.74 9.66,1.725 9.66,1.725 v -42.092 c 0,-1.611 -1.38,-2.53 -4.599,-2.53 H 4.6 c -3.22,0 -4.6,0.919 -4.6,2.53 z"
+             style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path26"
+             inkscape:connector-curvature="0" /></g><g
+           id="g28"
+           transform="translate(427.4404,239.541)"><path
+             d="m 0,0 h 0.69 c 9.89,0.23 15.065,7.706 15.065,21.392 0,14.835 -5.06,23.231 -14.145,23.231 -5.06,0 -10.81,-2.761 -15.526,-7.935 V 5.176 C -9.776,1.726 -4.945,0 0,0 m -13.916,-29.211 c 0,-1.609 -1.38,-2.53 -4.601,-2.53 h -0.459 c -3.22,0 -4.6,0.921 -4.6,2.53 v 64.059 c 0,9.429 -1.38,13.915 -1.38,14.49 0,2.185 4.715,2.644 6.21,2.644 2.761,0 3.335,-4.599 4.025,-7.589 5.636,5.865 11.731,8.625 18.286,8.625 13.801,0 22.311,-12.88 22.311,-30.362 v -1.035 c 0,-19.32 -9.66,-30.131 -23.346,-30.131 -7.131,0 -11.961,2.415 -16.446,5.865 z"
+             style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path30"
+             inkscape:connector-curvature="0" /></g><g
+           id="g32"
+           transform="translate(506.4453,266.1074)"><path
+             d="M 0,0 C 0,12.076 -4.6,18.172 -13.801,18.172 -23.806,18.172 -29.096,12.076 -29.9,0 Z m -13.455,26.451 c 15.756,0 23.691,-10.465 23.691,-30.015 0,-1.381 -2.416,-4.715 -3.795,-4.715 H -29.9 c 0.92,-12.766 6.324,-18.517 17.711,-18.517 10.004,0 15.64,4.83 16.79,4.83 1.61,0 4.025,-4.485 4.025,-5.75 0,-2.761 -9.085,-7.36 -20.701,-7.36 -19.091,0 -28.177,9.775 -28.177,30.361 0,20.356 9.201,31.166 26.797,31.166"
+             style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path34"
+             inkscape:connector-curvature="0" /></g><g
+           id="g36"
+           transform="translate(531.7422,274.3887)"><path
+             d="m 0,0 c 0,9.43 -1.38,13.915 -1.38,14.49 0,2.186 4.716,2.645 6.21,2.645 2.761,0 3.336,-4.6 4.025,-7.59 4.831,5.405 11.501,8.625 17.942,8.625 11.73,0 18.746,-7.015 18.746,-18.631 v -39.906 c 0,-1.611 -1.381,-2.53 -4.601,-2.53 h -0.46 c -3.22,0 -4.6,0.919 -4.6,2.53 v 38.986 c 0,7.016 -4.255,11.156 -11.731,11.156 -5.174,0 -10.695,-3.105 -14.491,-8.05 v -42.092 c 0,-1.611 -1.379,-2.53 -4.599,-2.53 h -0.46 c -3.22,0 -4.601,0.919 -4.601,2.53 z"
+             style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path38"
+             inkscape:connector-curvature="0" /></g><g
+           id="g40"
+           transform="translate(598.2119,283.5889)"><path
+             d="M 0,0 H -5.751 C -7.36,0 -8.05,1.034 -8.05,3.45 v 1.38 c 0,2.415 0.69,3.45 2.299,3.45 L 0,8.28 1.38,20.356 c 0.115,1.61 1.266,2.53 3.68,2.53 h 1.15 c 2.416,0 3.45,-0.92 3.45,-2.53 V 8.28 h 9.661 c 1.61,0 2.3,-1.035 2.3,-3.45 V 3.45 C 21.621,1.034 20.931,0 19.321,0 H 9.66 v -35.767 c 0,-6.9 2.876,-8.51 6.21,-8.51 3.336,0 3.91,0.575 4.945,0.575 1.611,0 2.416,-4.486 2.416,-5.405 0,-3.106 -5.291,-3.451 -8.396,-3.451 C 9.085,-52.558 0,-50.027 0,-36.687 Z"
+             style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path42"
+             inkscape:connector-curvature="0" /></g><g
+           id="g44"
+           transform="translate(635.5859,274.3887)"><path
+             d="m 0,0 c 0,9.43 -1.38,13.915 -1.38,14.49 0,2.186 4.716,2.645 6.21,2.645 2.761,0 3.336,-4.6 4.025,-7.59 3.911,5.52 8.511,8.625 13.341,8.625 4.486,0 6.671,-1.955 6.671,-4.484 0,-2.186 -0.92,-6.211 -2.301,-6.211 -1.494,0 -2.415,1.265 -6.325,1.265 C 14.262,8.74 9.66,1.725 9.66,1.725 v -42.092 c 0,-1.611 -1.379,-2.53 -4.599,-2.53 h -0.46 c -3.22,0 -4.601,0.919 -4.601,2.53 z"
+             style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path46"
+             inkscape:connector-curvature="0" /></g><g
+           id="g48"
+           transform="translate(669.7402,288.6484)"><path
+             d="m 0,0 c -0.114,0.346 -0.344,1.035 -0.344,1.496 0,1.15 1.494,1.955 4.945,1.955 h 0.92 c 2.299,0 4.025,-0.461 4.6,-1.841 L 25.762,-39.906 41.057,1.61 c 0.461,1.38 2.3,1.841 4.716,1.841 3.45,0 4.946,-0.69 4.946,-1.955 0,-0.461 -0.115,-0.92 -0.346,-1.611 L 20.816,-78.434 c -0.689,-1.724 -2.644,-2.415 -5.404,-2.415 h -1.726 c -2.53,0 -3.795,0.691 -3.795,1.841 0,0.69 0.23,0.92 10.236,25.301 z"
+             style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path50"
+             inkscape:connector-curvature="0" /></g><g
+           id="g52"
+           transform="translate(173.6738,440.5723)"><path
+             d="m 0,0 c 0,1.609 1.381,2.529 4.602,2.529 h 0.459 c 3.22,0 4.6,-0.92 4.6,-2.529 v -55.548 c 0,-1.61 -1.38,-2.53 -4.6,-2.53 H 4.602 c -3.221,0 -4.602,0.92 -4.602,2.53 z m -0.459,19.32 v 6.785 c 0,1.611 1.38,2.531 4.6,2.531 h 1.38 c 3.22,0 4.6,-0.92 4.6,-2.531 V 19.32 c 0,-1.609 -1.38,-2.529 -4.6,-2.529 h -1.38 c -3.22,0 -4.6,0.92 -4.6,2.529"
+             style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path54"
+             inkscape:connector-curvature="0" /></g><g
+           id="g56"
+           transform="translate(228.6465,390.4297)"><path
+             d="m 0,0 c 9.084,0 14.145,8.395 14.145,23.23 0,13.686 -5.175,21.163 -15.066,21.392 h -0.69 c -4.946,0 -9.776,-1.726 -13.915,-5.175 V 7.936 C -10.811,2.76 -5.061,0 0,0 m -25.188,76.248 c 0,1.61 1.381,2.53 4.601,2.53 h 0.46 c 3.221,0 4.601,-0.92 4.601,-2.53 v -28.98 c 4.485,3.449 9.315,5.865 16.446,5.865 13.685,0 23.346,-10.811 23.346,-30.132 v -1.035 c 0,-17.482 -8.511,-30.362 -22.311,-30.362 -6.557,0 -12.651,2.761 -18.287,8.626 -0.805,-4.025 -1.84,-6.786 -1.84,-6.786 -0.46,-1.034 -1.494,-1.38 -3.105,-1.38 h -0.459 c -2.416,0 -3.452,0.92 -3.452,2.531 z"
+             style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path58"
+             inkscape:connector-curvature="0" /></g><g
+           id="g60"
+           transform="translate(269.4678,425.3906)"><path
+             d="m 0,0 c 0,9.432 -1.38,13.916 -1.38,14.491 0,2.185 4.715,2.646 6.21,2.646 2.761,0 3.335,-4.601 4.025,-7.591 3.911,5.52 8.511,8.626 13.341,8.626 4.485,0 6.67,-1.955 6.67,-4.486 0,-2.185 -0.92,-6.209 -2.3,-6.209 -1.495,0 -2.415,1.263 -6.325,1.263 C 14.261,8.74 9.66,1.726 9.66,1.726 v -42.092 c 0,-1.611 -1.38,-2.53 -4.6,-2.53 H 4.601 C 1.38,-42.896 0,-41.977 0,-40.366 Z"
+             style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path62"
+             inkscape:connector-curvature="0" /></g><g
+           id="g64"
+           transform="translate(326.9688,390.4297)"><path
+             d="m 0,0 c 8.395,0 13.455,3.795 18.055,7.936 v 13.57 C 6.095,21.391 -9.775,21.391 -9.775,9.43 -9.775,3.335 -6.441,0 0,0 m 18.055,29.786 v 5.405 c 0,5.176 -3.105,9.661 -12.651,9.661 -10.465,0 -16.791,-4.831 -17.94,-4.831 -1.61,0 -4.025,4.486 -4.025,5.75 0,2.991 10.12,7.362 21.621,7.362 14.26,0 22.656,-6.671 22.656,-18.057 V 9.315 c 0,-9.43 1.38,-13.916 1.38,-14.491 0,-2.184 -4.715,-2.644 -6.21,-2.644 -2.761,0 -3.335,4.83 -4.026,8.05 -4.37,-4.831 -10.695,-8.626 -19.321,-8.626 -11.155,0 -19.666,5.406 -19.666,17.251 0,19.436 20.586,20.702 38.182,20.931"
+             style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path66"
+             inkscape:connector-curvature="0" /></g><g
+           id="g68"
+           transform="translate(374.2324,425.3906)"><path
+             d="m 0,0 c 0,9.432 -1.381,13.916 -1.381,14.491 0,2.185 4.716,2.646 6.211,2.646 2.76,0 3.336,-4.601 4.025,-7.591 3.911,5.52 8.51,8.626 13.34,8.626 4.487,0 6.671,-1.955 6.671,-4.486 0,-2.185 -0.92,-6.209 -2.3,-6.209 C 25.071,7.477 24.15,8.74 20.24,8.74 14.261,8.74 9.66,1.726 9.66,1.726 v -42.092 c 0,-1.611 -1.38,-2.53 -4.599,-2.53 H 4.6 c -3.22,0 -4.6,0.919 -4.6,2.53 z"
+             style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path70"
+             inkscape:connector-curvature="0" /></g><g
+           id="g72"
+           transform="translate(408.3867,439.6523)"><path
+             d="m 0,0 c -0.115,0.345 -0.345,1.035 -0.345,1.494 0,1.151 1.495,1.955 4.945,1.955 h 0.921 c 2.299,0 4.024,-0.459 4.6,-1.84 L 25.762,-39.907 41.057,1.609 c 0.461,1.381 2.3,1.84 4.715,1.84 3.451,0 4.945,-0.689 4.945,-1.955 0,-0.459 -0.114,-0.92 -0.344,-1.609 L 20.816,-78.434 c -0.69,-1.725 -2.645,-2.416 -5.406,-2.416 h -1.724 c -2.53,0 -3.795,0.691 -3.795,1.84 0,0.691 0.23,0.92 10.235,25.302 z"
+             style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path74"
+             inkscape:connector-curvature="0" /></g><g
+           id="g76"
+           transform="translate(268.1396,298.084)"><path
+             d="m 0,0 h -46.771 v -23.824 l 20.206,0.731 c 0,0 18.242,-2.564 26.565,23.093"
+             style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path78"
+             inkscape:connector-curvature="0" /></g><g
+           id="g80"
+           transform="translate(186.2686,298.084)"><path
+             d="m 0,0 h -42.728 v -25.971 c 9.594,-3.48 13.341,-10.605 25.592,-10.605 9.515,0 13.448,2.511 17.136,5.279 z"
+             style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path82"
+             inkscape:connector-curvature="0" /></g><g
+           id="g84"
+           transform="translate(209.8252,213.8242)"><path
+             d="m 0,0 c 0,-4.353 -2.758,-7.882 -6.156,-7.882 -3.4,0 -6.157,3.529 -6.157,7.882 v 88.789 c 0,4.357 2.757,7.885 6.157,7.885 3.398,0 6.156,-3.528 6.156,-7.885 z m 97.275,115.246 h -2.406 v 5.904 c 0.123,0.248 0.2,0.528 0.2,0.827 v 24.638 c 0,1 -0.78,1.811 -1.744,1.811 H 20.678 c -0.499,0.054 -0.99,-0.082 -1.342,-0.432 l -39.469,-39.023 c -0.385,-0.381 -0.516,-0.926 -0.424,-1.473 V -14.907 c 0,-0.786 0.368,-1.451 0.879,-1.705 l 37.85,-37.372 c 0.118,-0.117 0.256,-0.2 0.402,-0.267 0.25,-0.142 0.533,-0.23 0.84,-0.23 h 54.664 v -1.984 c 0,-1.01 0.798,-1.828 1.783,-1.828 h 16.87 c 0.986,0 1.784,0.818 1.784,1.828 v 32.827 c 0,1.011 -0.798,1.828 -1.784,1.828 h -16.87 c -0.985,0 -1.783,-0.817 -1.783,-1.828 v -2.586 H 30.566 L 8.307,-4.243 V 97.994 l 22.425,22.172 h 35.677 v -4.92 h -2.608 c -1.039,0 -1.881,-0.779 -1.881,-1.744 v -5.291 c 0,-0.965 0.842,-1.744 1.881,-1.744 h 33.474 c 1.038,0 1.883,0.779 1.883,1.744 v 5.291 c 0,0.965 -0.845,1.744 -1.883,1.744"
+             style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path86"
+             inkscape:connector-curvature="0" /></g><g
+           id="g88"
+           transform="translate(130.4912,285.0215)"><path
+             d="m 0,0 c 0,-3.017 -2.265,-5.463 -5.058,-5.463 -2.793,0 -5.056,2.446 -5.056,5.463 0,3.016 2.263,5.461 5.056,5.461 C -2.265,5.461 0,3.016 0,0 m 10.128,209.072 v 8.47 H -20.243 V -25.936 h 30.371 v 64.17 H 2.394 v 5.678 h 7.734 V 61.827 H -2.553 v 5.679 H 10.128 V 85.421 H 2.394 v 5.681 h 7.734 v 17.914 H -2.553 v 5.679 h 12.681 v 17.914 H 2.394 v 5.68 h 7.734 v 17.914 H -2.553 v 5.68 h 12.681 v 17.914 H 2.394 v 5.681 h 7.734 v 17.916 H -2.553 v 5.678 z"
+             style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path90"
+             inkscape:connector-curvature="0" /></g><g
+           id="g92"
+           transform="translate(107.7373,298.084)"><path
+             d="m 0,0 h -36.196 c 9.542,-26.602 27.375,-23.093 27.375,-23.093 L 0,-23.428 Z"
+             style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path94"
+             inkscape:connector-curvature="0" /></g><g
+           id="g96"
+           transform="translate(331.3496,127.376)"><path
+             d="m 0,0 h -16.679 c -0.957,0 -1.731,-0.771 -1.731,-1.726 V -2.75 h -11.653 v 5.289 c 0,1.065 -0.859,1.927 -1.918,1.927 h -1.387 v 20.79 h -8.378 V 4.466 h -1.386 c -1.06,0 -1.918,-0.862 -1.918,-1.927 V -2.75 h -37.023 l 0.01,0.706 c 0,0.69 -0.654,2.1 -1.276,2.1 h -0.994 v 0.019 l -6.413,-0.001 v -13.827 l 3.643,10e-4 c 0.114,-0.043 0.231,-0.08 0.358,-0.08 h 3.406 c 0.622,0 1.123,0.56 1.123,1.25 l 0.035,2.363 h 37.131 v -5.794 c 0,-1.064 0.858,-1.926 1.918,-1.926 h 11.151 c 1.059,0 1.918,0.862 1.918,1.926 v 5.794 h 11.653 v -1.529 c 0,-0.954 0.774,-1.726 1.731,-1.726 H 0 c 0.956,0 1.731,0.772 1.731,1.726 V -1.726 C 1.731,-0.771 0.956,0 0,0"
+             style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path98"
+             inkscape:connector-curvature="0" /></g><g
+           id="g100"
+           transform="translate(285.8154,217.1611)"><path
+             d="m 0,0 h 3.998 v -21.466 h 8.919 V 0 h 3.999 c 1.023,0 1.855,0.781 1.855,1.745 v 5.292 c 0,0.088 -0.014,0.174 -0.027,0.258 V 9.589 H -1.828 V 7.295 C -1.842,7.211 -1.855,7.125 -1.855,7.037 V 1.745 C -1.855,0.781 -1.025,0 0,0"
+             style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path102"
+             inkscape:connector-curvature="0" /></g></g></g></g></svg>
\ No newline at end of file
index c51dca6498c33938938fa80ec57b7f67b26bd337..185da920220429f734256180b9d7baf41323d45e 100644 (file)
@@ -3,7 +3,7 @@ $("table").addClass("table table-striped");
 
 
 // Handle foldable challenges and solutions (on click and at start).
-$(".challenge,.discussion,.solution").click(function(event) {
+$(".solution").click(function(event) {
     var trigger = $(event.target).has(".fold-unfold").size() > 0
                || $(event.target).filter(".fold-unfold").size() > 0;
     if (trigger) {
@@ -12,7 +12,7 @@ $(".challenge,.discussion,.solution").click(function(event) {
         event.stopPropagation();
     }
 });
-$(".challenge,.discussion,.solution").each(function() {
+$(".solution").each(function() {
     $(">*:not(h2)", this).toggle();
     var h2 = $("h2:first", this);
     h2.append("<span class='fold-unfold glyphicon glyphicon-collapse-down'></span>");
index d956f60d0fd7787274c07aee9e9ad1dc5d6fa965..f9435842034b264d147ef9549eab7ed94b595dff 100644 (file)
@@ -37,7 +37,7 @@ opts_chunk$set(tidy = FALSE, results = "markup", comment = NA,
 hook_in <- function(x, options) {
   stringr::str_c("\n\n~~~\n",
                  paste0(x, collapse="\n"),
-                 "\n~~~\n{: .r}\n\n")
+                 "\n~~~\n{: .language-r}\n\n")
 }
 
 hook_out <- function(x, options) {
diff --git a/bin/extract_figures.py b/bin/extract_figures.py
deleted file mode 100755 (executable)
index 63a7752..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/usr/bin/env python
-
-from __future__ import print_function
-import sys
-import os
-import glob
-from optparse import OptionParser
-
-from util import Reporter, read_markdown, IMAGE_FILE_SUFFIX
-
-def main():
-    """Main driver."""
-
-    args = parse_args()
-    images = []
-    for filename in args.filenames:
-        images += get_images(args.parser, filename)
-    save(sys.stdout, images)
-
-
-def parse_args():
-    """Parse command-line arguments."""
-
-    parser = OptionParser()
-    parser.add_option('-p', '--parser',
-                      default=None,
-                      dest='parser',
-                      help='path to Markdown parser')
-
-    args, extras = parser.parse_args()
-    require(args.parser is not None,
-            'Path to Markdown parser not provided')
-    require(extras,
-            'No filenames specified')
-
-    args.filenames = extras
-    return args
-
-
-def get_filenames(source_dir):
-    """Get all filenames to be searched for images."""
-
-    return glob.glob(os.path.join(source_dir, '*.md'))
-
-
-def get_images(parser, filename):
-    """Extract all images from file."""
-
-    content = read_markdown(parser, filename)
-    result = []
-    find_image_nodes(content['doc'], result)
-    find_image_links(content['doc'], result)
-    return result
-
-
-def find_image_nodes(doc, result):
-    """Find all nested nodes representing images."""
-
-    if (doc['type'] == 'img') or \
-       ((doc['type'] == 'html_element') and (doc['value'] == 'img')):
-        alt = doc['attr'].get('alt', '')
-        result.append({'alt': alt, 'src': doc['attr']['src']})
-    else:
-        for child in doc.get('children', []):
-            find_image_nodes(child, result)
-
-
-def find_image_links(doc, result):
-    """Find all links to files in the 'fig' directory."""
-
-    if ((doc['type'] == 'a') and ('attr' in doc) and ('href' in doc['attr'])) \
-       or \
-       ((doc['type'] == 'html_element') and (doc['value'] == 'a') and ('href' in doc['attr'])):
-        path = doc['attr']['href']
-        if os.path.splitext(path)[1].lower() in IMAGE_FILE_SUFFIX:
-            result.append({'alt':'', 'src': doc['attr']['href']})
-    else:
-        for child in doc.get('children', []):
-            find_image_links(child, result)
-
-
-def save(stream, images):
-    """Save results as Markdown."""
-
-    text = '\n<hr/>\n'.join(['<p><img alt="{0}" src="{1}" /></p>'.format(img['alt'], img['src']) for img in images])
-    print(text, file=stream)
-
-
-def require(condition, message):
-    """Fail if condition not met."""
-
-    if not condition:
-        print(message, file=sys.stderr)
-        sys.exit(1)
-
-
-if __name__ == '__main__':
-    main()
index 6d8a2d784339382bb2c8c85bfd34b25efb4b5faa..6c27d9c9245fc5b6d1c5aaa82af2ea4073e59b80 100644 (file)
@@ -1,17 +1,19 @@
 generate_md_episodes <- function() {
 
+    library("methods")
+    
     if (require("knitr") && packageVersion("knitr") < '1.9.19')
         stop("knitr must be version 1.9.20 or higher")
 
     if (!require("stringr"))
         stop("The package stringr is required for generating the lessons.")
 
-    if (require("checkpoint")) {
+    if (require("checkpoint") && packageVersion("checkpoint") >=  '0.4.0') {
         required_pkgs <-
-            checkpoint:::projectScanPackages(project = "_episodes_rmd",
-                                             verbose=FALSE, use.knitr = TRUE)$pkgs
+             checkpoint:::scanForPackages(project = "_episodes_rmd",
+                                          verbose=FALSE, use.knitr = TRUE)$pkgs
     } else {
-        stop("The checkpoint package is required to build the lessons.")
+        stop("The checkpoint package (>= 0.4.0) is required to build the lessons.")
     }
 
     missing_pkgs <- required_pkgs[!(required_pkgs %in% rownames(installed.packages()))]
@@ -22,15 +24,29 @@ generate_md_episodes <- function() {
         install.packages(missing_pkgs)
     }
 
-    ## find all the Rmd files, and generates the paths for their respective outputs
+    ## find all the Rmd files, and generate the paths for their respective outputs
     src_rmd <- list.files(pattern = "??-*.Rmd$", path = "_episodes_rmd", full.names = TRUE)
     dest_md <- file.path("_episodes", gsub("Rmd$", "md", basename(src_rmd)))
-
+    
     ## knit the Rmd into markdown
     mapply(function(x, y) {
         knitr::knit(x, output = y)
     }, src_rmd, dest_md)
-
+    
+    # Read the generated md files and add comments advising not to edit them
+    vapply(dest_md, function(y) {
+      con <- file(y)
+      mdfile <- readLines(con)
+      if (mdfile[1] != "---")
+        stop("Input file does not have a valid header")
+      mdfile <- append(mdfile, "# Please do not edit this file directly; it is auto generated.", after = 1)
+      mdfile <- append(mdfile, paste("# Instead, please edit", 
+                                     basename(y), "in _episodes_rmd/"), after = 2)
+      writeLines(mdfile, con)
+      close(con)
+      return(paste("Warning added to YAML header of", y))
+    },
+    character(1))
 }
 
 generate_md_episodes()
index 8244222b5bd30e80516666d1dde76756c9c9300a..66f6310c0d41e415c83d50e38a0b1aba92ee0d9f 100755 (executable)
@@ -31,7 +31,6 @@ REQUIRED_FILES = {
     '%/LICENSE.md': True,
     '%/README.md': False,
     '%/_extras/discuss.md': True,
-    '%/_extras/figures.md': True,
     '%/_extras/guide.md': True,
     '%/index.md': True,
     '%/reference.md': True,
@@ -72,12 +71,14 @@ KNOWN_CODEBLOCKS = {
     'error',
     'output',
     'source',
-    'bash',
-    'make',
-    'matlab',
-    'python',
-    'r',
-    'sql'
+    'language-bash',
+    'html',
+    'language-make',
+    'language-matlab',
+    'language-python',
+    'language-r',
+    'language-shell',
+    'language-sql'
 }
 
 # What fields are required in teaching episode metadata?
@@ -114,7 +115,6 @@ def main():
     for filename in docs.keys():
         checker = create_checker(args, filename, docs[filename])
         checker.check()
-    check_figures(args.source_dir, args.reporter)
 
     args.reporter.report()
 
@@ -163,7 +163,7 @@ def check_config(reporter, source_dir):
     reporter.check_field(config_file, 'configuration', config, 'kind', 'lesson')
     reporter.check_field(config_file, 'configuration', config, 'carpentry', ('swc', 'dc', 'lc'))
     reporter.check_field(config_file, 'configuration', config, 'title')
-    reporter.check_field(config_file, 'configuration', config, 'contact')
+    reporter.check_field(config_file, 'configuration', config, 'email')
 
     reporter.check({'values': {'root': '..'}} in config.get('defaults', []),
                    'configuration',
@@ -255,38 +255,6 @@ def check_fileset(source_dir, reporter, filenames_present):
                    seen)
 
 
-def check_figures(source_dir, reporter):
-    """Check that all figures are present and referenced."""
-
-    # Get references.
-    try:
-        all_figures_html = os.path.join(source_dir, '_includes', 'all_figures.html')
-        with open(all_figures_html, 'r') as reader:
-            text = reader.read()
-        figures = P_FIGURE_REFS.findall(text)
-        referenced = [os.path.split(f)[1] for f in figures if '/fig/' in f]
-    except FileNotFoundError as e:
-        reporter.add(all_figures_html,
-                     'File not found')
-        return
-
-    # Get actual image files (ignore non-image files).
-    fig_dir_path = os.path.join(source_dir, 'fig')
-    actual = [f for f in os.listdir(fig_dir_path) if os.path.splitext(f)[1] in IMAGE_FILE_SUFFIX]
-
-    # Report differences.
-    unexpected = set(actual) - set(referenced)
-    reporter.check(not unexpected,
-                   None,
-                   'Unexpected image files: {0}',
-                   ', '.join(sorted(unexpected)))
-    missing = set(referenced) - set(actual)
-    reporter.check(not missing,
-                   None,
-                   'Missing image files: {0}',
-                   ', '.join(sorted(missing)))
-
-
 def create_checker(args, filename, info):
     """Create appropriate checker for file."""
 
index 540bb08c83724f964570874b1b6e796640ac99d9..757779609994f62f9a0995cf64c41f8c447513de 100755 (executable)
@@ -45,7 +45,7 @@ This is a good way to introduce yourself
 and to meet some of our community members.
 
 1.  If you do not have a [GitHub][github] account,
-    you can [send us comments by email][contact].
+    you can [send us comments by email][email].
     However,
     we will be able to respond more quickly if you use one of the other methods described below.
 
@@ -151,22 +151,22 @@ and have final say over what gets merged into the lesson.
 General discussion of [Software Carpentry][swc-site] and [Data Carpentry][dc-site]
 happens on the [discussion mailing list][discuss-list],
 which everyone is welcome to join.
-You can also [reach us by email][contact].
+You can also [reach us by email][email].
 
-[contact]: mailto:admin@software-carpentry.org
+[email]: mailto:admin@software-carpentry.org
 [dc-issues]: https://github.com/issues?q=user%3Adatacarpentry
 [dc-lessons]: http://datacarpentry.org/lessons/
 [dc-site]: http://datacarpentry.org/
 [discuss-list]: http://lists.software-carpentry.org/listinfo/discuss
-[github]: http://github.com
+[github]: https://github.com
 [github-flow]: https://guides.github.com/introduction/flow/
 [github-join]: https://github.com/join
 [how-contribute]: https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github
 [issues]: https://github.com/swcarpentry/FIXME/issues/
 [repo]: https://github.com/swcarpentry/FIXME/
 [swc-issues]: https://github.com/issues?q=user%3Aswcarpentry
-[swc-lessons]: http://software-carpentry.org/lessons/
-[swc-site]: http://software-carpentry.org/
+[swc-lessons]: https://software-carpentry.org/lessons/
+[swc-site]: https://software-carpentry.org/
 '''
 
 ROOT_CONFIG_YML = '''\
@@ -183,7 +183,7 @@ title: "Lesson Title"
 # Contact.  This *must* include the protocol: if it's an email
 # address, it must look like "mailto:lessons@software-carpentry.org",
 # or if it's a URL, "https://gitter.im/username/ProjectName".
-contact: "mailto:lessons@software-carpentry.org"
+email: "mailto:lessons@software-carpentry.org"
 
 #------------------------------------------------------------
 # Generic settings (should not need to change).
@@ -202,7 +202,7 @@ dc_site: "http://datacarpentry.org"
 swc_github: "https://github.com/swcarpentry"
 swc_site: "https://software-carpentry.org"
 swc_pages: "https://swcarpentry.github.io"
-lc_site: "http://librarycarpentry.github.io/"
+lc_site: "https://librarycarpentry.github.io/"
 template_repo: "https://github.com/swcarpentry/styles"
 example_repo: "https://github.com/swcarpentry/lesson-example"
 example_site: "https://swcarpentry.github.com/lesson-example"
@@ -222,9 +222,10 @@ start_time: 0
 collections:
   episodes:
     output: true
-    permalink: /:path/
+    permalink: /:path/index.html
   extras:
     output: true
+    permalink: /:path/index.html
 
 # Set the default layout for things in the episodes collection.
 defaults:
@@ -241,14 +242,15 @@ exclude:
   - Makefile
   - bin
 
-# Turn off built-in syntax highlighting.
-highlighter: false
+# Turn on built-in syntax highlighting.
+highlighter: rouge
 '''
 
 ROOT_INDEX_MD = '''\
 ---
 layout: lesson
 root: .
+permalink: index.html  # Is the only page that don't follow the partner /:path/index.html
 ---
 FIXME: home page introduction
 
@@ -261,7 +263,7 @@ FIXME: home page introduction
 ROOT_REFERENCE_MD = '''\
 ---
 layout: reference
-permalink: /reference/
+root: .
 ---
 
 ## Glossary
@@ -273,11 +275,50 @@ ROOT_SETUP_MD = '''\
 ---
 layout: page
 title: Setup
-permalink: /setup/
+root: .
 ---
 FIXME
 '''
 
+ROOT_AIO_MD = '''\
+---
+layout: page 
+root: .
+---
+<script>
+  window.onload = function() {
+    var lesson_episodes = [
+    {% for episode in site.episodes %}
+    "{{ episode.url}}"{% unless forloop.last %},{% endunless %}
+    {% endfor %}
+    ];
+    var xmlHttp = [];  /* Required since we are going to query every episode. */
+    for (i=0; i < lesson_episodes.length; i++) {
+      xmlHttp[i] = new XMLHttpRequest();
+      xmlHttp[i].episode = lesson_episodes[i];  /* To enable use this later. */
+      xmlHttp[i].onreadystatechange = function() {
+      if (this.readyState == 4 && this.status == 200) {
+        var article_here = document.getElementById(this.episode);
+        var parser = new DOMParser();
+        var htmlDoc = parser.parseFromString(this.responseText,"text/html");
+        var htmlDocArticle = htmlDoc.getElementsByTagName("article")[0];
+        article_here.innerHTML = htmlDocArticle.innerHTML;
+        }
+      }
+      episode_url = "{{ page.root }}" + lesson_episodes[i];
+      xmlHttp[i].open("GET", episode_url);
+      xmlHttp[i].send(null);
+    }
+  }
+</script>
+{% comment %}
+Create anchor for each one of the episodes.
+{% endcomment %}
+{% for episode in site.episodes %}
+<article id="{{ episode.url }}"></article>
+{% endfor %}
+'''
+
 EPISODES_INTRODUCTION_MD = '''\
 ---
 title: "Introduction"
@@ -296,7 +337,6 @@ EXTRAS_ABOUT_MD = '''\
 ---
 layout: page
 title: About
-permalink: /about/
 ---
 {% include carpentries.html %}
 '''
@@ -305,7 +345,6 @@ EXTRAS_DISCUSS_MD = '''\
 ---
 layout: page
 title: Discussion
-permalink: /discuss/
 ---
 FIXME
 '''
@@ -314,24 +353,52 @@ EXTRAS_FIGURES_MD = '''\
 ---
 layout: page
 title: Figures
-permalink: /figures/
 ---
-{% include all_figures.html %}
+<script>
+  window.onload = function() {
+    var lesson_episodes = [
+    {% for episode in site.episodes %}
+    "{{ episode.url}}"{% unless forloop.last %},{% endunless %}
+    {% endfor %}
+    ];
+    var xmlHttp = [];  /* Required since we are going to query every episode. */
+    for (i=0; i < lesson_episodes.length; i++) {
+      xmlHttp[i] = new XMLHttpRequest();
+      xmlHttp[i].episode = lesson_episodes[i];  /* To enable use this later. */
+      xmlHttp[i].onreadystatechange = function() {
+        if (this.readyState == 4 && this.status == 200) {
+          var article_here = document.getElementById(this.episode);
+          var parser = new DOMParser();
+          var htmlDoc = parser.parseFromString(this.responseText,"text/html");
+          var htmlDocArticle = htmlDoc.getElementsByTagName("article")[0];
+          article_here.appendChild(htmlDocArticle.getElementsByTagName("h1")[0]);
+          for (let image of htmlDocArticle.getElementsByTagName("img")) {
+            article_here.appendChild(image);
+          }
+        }
+      }
+      episode_url = "{{ page.root }}" + lesson_episodes[i];
+      xmlHttp[i].open("GET", episode_url);
+      xmlHttp[i].send(null);
+    }
+  }
+</script>
+{% comment %}
+Create anchor for each one of the episodes.
+{% endcomment %}
+{% for episode in site.episodes %}
+<article id="{{ episode.url }}"></article>
+{% endfor %}
 '''
 
 EXTRAS_GUIDE_MD = '''\
 ---
 layout: page
 title: "Instructor Notes"
-permalink: /guide/
 ---
 FIXME
 '''
 
-INCLUDES_ALL_FIGURES_HTML = '''\
-<!-- empty -->
-'''
-
 BOILERPLATE = (
     ('AUTHORS', ROOT_AUTHORS),
     ('CITATION', ROOT_CITATION),
@@ -340,12 +407,12 @@ BOILERPLATE = (
     ('index.md', ROOT_INDEX_MD),
     ('reference.md', ROOT_REFERENCE_MD),
     ('setup.md', ROOT_SETUP_MD),
+    ('aio.md', ROOT_AIO_MD),
     ('_episodes/01-introduction.md', EPISODES_INTRODUCTION_MD),
     ('_extras/about.md', EXTRAS_ABOUT_MD),
     ('_extras/discuss.md', EXTRAS_DISCUSS_MD),
     ('_extras/figures.md', EXTRAS_FIGURES_MD),
     ('_extras/guide.md', EXTRAS_GUIDE_MD),
-    ('_includes/all_figures.html', INCLUDES_ALL_FIGURES_HTML)
 )
 
 
index d3051bf1a9dca94682b810990e6927b53ba239af..f82ce3d69417e3cd1990aea96603afcda2e2aff9 100755 (executable)
@@ -21,7 +21,7 @@ URL_PATTERN = r'https?://.+'
 CARPENTRIES = ("dc", "swc")
 DEFAULT_CONTACT_EMAIL = 'admin@software-carpentry.org'
 
-USAGE = 'Usage: "check-workshop path/to/root/directory"'
+USAGE = 'Usage: "workshop_check.py path/to/root/directory"'
 
 # Country and language codes.  Note that codes mean different things: 'ar'
 # is 'Arabic' as a language but 'Argentina' as a country.
@@ -205,13 +205,20 @@ def check_helpers(helpers):
 @look_for_fixme
 def check_email(email):
     """
-    'contact' must be a valid email address consisting of characters,
-    an '@', and more characters.  It should not be the default contact
-    email address 'admin@software-carpentry.org'.
+    'email' must be a comma-separated list of valid email addresses.
+    The list may be empty. A valid email address consists of characters,
+    an '@', and more characters.  It should not contain the default contact
     """
 
-    return bool(re.match(EMAIL_PATTERN, email)) and \
-           (email != DEFAULT_CONTACT_EMAIL)
+    # YAML automatically loads list-like strings as lists.
+    if (isinstance(emails, list) and len(emails) >= 0):
+        for email in emails:
+            if ((not bool(re.match(EMAIL_PATTERN, email))) or (email == DEFAULT_CONTACT_EMAIL)):
+                return False
+    else:
+        return False
+  
+    return True
 
 
 def check_eventbrite(eventbrite):
@@ -227,12 +234,12 @@ def check_eventbrite(eventbrite):
 
 
 @look_for_fixme
-def check_etherpad(etherpad):
+def check_collaborative_notes(collaborative_notes):
     """
-    'etherpad' must be a valid URL.
+    'collaborative_notes' must be a valid URL.
     """
 
-    return bool(re.match(URL_PATTERN, etherpad))
+    return bool(re.match(URL_PATTERN, collaborative_notes))
 
 
 @look_for_fixme
@@ -286,13 +293,14 @@ HANDLERS = {
                    'helper list isn\'t a valid list of format ' +
                    '["First helper", "Second helper",..]'),
 
-    'contact':    (True, check_email,
-                   'contact email invalid or still set to ' +
+    'email':    (True, check_emails,
+                   'contact email list isn\'t a valid list of format ' +
+                   '["me@example.org", "you@example.org",..] or contains incorrectly formatted email addresses or ' +
                    '"{0}".'.format(DEFAULT_CONTACT_EMAIL)),
 
     'eventbrite': (False, check_eventbrite, 'Eventbrite key appears invalid'),
 
-    'etherpad':   (False, check_etherpad, 'Etherpad URL appears invalid'),
+    'collaborative_notes':   (False, check_collaborative_notes, 'Collaborative Notes URL appears invalid'),
 
     'venue':      (False, check_pass, 'venue name not specified'),