bssw-tutorial / bssw-tutorial.github.io

Top level web presence for the Better Scientific Software tutorial
https://bssw-tutorial.github.io/
5 stars 1 forks source link

bssw-tutorial.github.io

This is the source for https://bssw-tutorial.github.io, which is the primary web presence for the Better Scientific Software tutorials, produced by the IDEAS Productivity project.

Overview

This is plain vanilla Jekyll site, currently using the default Minima theme, which uses some structured data and a fair amount of Liquid scripting to present a web site hosting a subspace for each tutorial presentation (since 2021; eventually we'll incorporate the back catalog). The main page lists all of the tutorials, categorized into

Events appear in the appropriate section based on the information in their _data files (primarily dates). Of course the site must be rebuilt for changes to appear.

Each tutorial event is given a page of its own, and can have child pages as needed.

Conventions

Each tutorial is given an "event label", which is used in many different contexts, both in the file structure of the repository and in the scripting that builds the site. The event label is comprised of the event date in ISO 8601 format (YYYY-MM-DD) and a shorthand tag, usually based on the hosting venue (e.g., atpesc, ecpam, or sc).

Events often start as "planned" rather than "scheduled", meaning that the specific date of the tutorial is not known. The convention in this case is to start with an event label based on the hosting venue (i.e., the first day of the conference, or the first day of the tutorials, if known) and then change the label to the correct date once it is known. This is a bit inconvenient, as it requires changes in several places in the repository, but we prefer to have the final event label represent the actual date of the tutorial.

Rebuilding

The site uses plugins that aren't blessed for GitHub Pages, and is rebuilt and deployed using the Build and deploy jekyll site action. This action is triggered by commits to be main, and can also be triggered manually (a workflow_dispatch trigger).

You can track the progress of the action on the Actions tab of the repository.

It might be reasonable to automatically rebuild on a schedule to ensure that tutorials progress from the Scheduled list to the Past list, but at present, the events are infrequent enough that automating this seems to be overkill -- simpler just to remember to rebuild after the event.

Repository Structure

The overall folder and file structure is largely that of a typical Jekyll site tree, but we mention some of the primary features to help those who might not be that familiar with Jekyll and to point out specific aspects of this site.

Creating a New Tutorial Event

This section will walk you through the lifecycle of a tutorial event.

Creating a Planned Event

1) Add the event to _data/tutorials.csv. The event-label list should be kept in lexical (chornological) order. The possible status values are planned or scheduled. (Scheduled events become past events based on the date.)

2) Create a directory in _data/bsswt/ corresponding to the event-label.

3) Create a _data/bsswt/<event-label>/event.yml file and populate it with the appropriate information. (Or copy from a recent event and modify.) The core information for a planned event is:

title: tutorial title, in quotes, e.g., "Better Scientific Software" (required)
title-type: the label associated with the event, e.g., "tutorial" or "track" (required)
title-url: a URL to link the tutorial title to, e.g., the conference program page (optional)
startdate: "the starting date of the conference (since we don't yet know the actual schedule), e.g., 2021-11-15 (required)"
enddate: the ending date of the conference (since we don't yet know the actual schedule) (optional)
venue: the name of the hosting venue (e.g., conference), in quotes, e.g., "The International Conference for High-Performance Computing, Networking, Storage, and Analysis (SC21)" (required)
venue-type: the label associated with the venue, e.g., "conference" or "workshop" (optional)
venue-url: A URL to linke the venue to, e.g., https://sc21.supercomputing.org/ (optional)
location: the geographic local or the event, in quotes, e.g., "St. Louis, Missouri and online" (optional)

4) Create the top level event directory, using the same event-label you've been using in the _data folder.

5) Create an index.md file and populate it with the appropriate information. This file usually consists only of a YAML metadata block which defines the sequence of content sections to include. An example of this file is shown below. As stated in the comments within the file, initially you usually only include the description and acknowledgement sections. Sections are included in the order listed in the sections variable. Note: Older events may include a redirect_from variable, which is used to accommodate a restructuring of the web site while ensuring that older URLs which have been advertised in various places remain valid. It should not be needed for new events.

---
layout: bsswt-event-page
event-label: 2021-11-15-sc
# A typical initial tutorial page might include:
#         [description,acknowledgments-ecp]
# A typical complete tutorial page would include: 
#         [description,agenda,presentation-slides,how-to-participate,hands-on-exercises,stay-in-touch,resources-from-presentations,requested-citation,acknowledgments-ecp]
sections: [description,agenda,presentation-slides,hands-on-exercises,related-events,stay-in-touch,resources-from-presentations,requested-citation,acknowledgments-ecp]
---

6) Create a section-description.md file in the event directory and populate it with the description or abstract for the tutorial event. The description is unique to each event, so there is currently no generic description block in the _includes directory (but maybe there should be). The file must start with the following line, which provides the section heading on the assembled page.

{% assign headings = headings | push: "Description" %}

7) If needed create a section-acknowledgements.md file in the event directory and populate it with the appropriate sponsorship acknowledgement. The generic _includes/section-acknowledgements.md will be used is there is no file in the event directory to supersede it. The generic file contains the standard IDEAS-ECP acknowledgement, which applies to most of our tutorials. If you create your own acknowledgement section for the event, it must begin with the following line to set the section heading for the assembled page.

{% assign headings = headings | push: "Acknowledgements" %}

Transitioning to a Scheduled Event

Once you have a firm day and time for the event, you will need to update the relevant directory names and metadata entries. There is no particular minimum requirements for the event page content to make the transition from planned to scheduled. Initially, this change is simply about where in the main page list the event appears. You can add content to the event page at any time, following the guidance in Filling Out the Event Page, below.

1) In _data/tutorials.csv adjust the event label to reflect the actual event date, and change the status to scheduled.

2) In _data/bsswt/ rename the event directory to reflect the actual event date (same as the event label, above).

3) In _data/bsswt/<event-label>/event.yml update the metadata as appropriate. If your event is on a single day, you can comment out the enddate key. The time field is free-form. Make sure to include the time zone along with the time. Convention is to always use the natural time zone of the hosting venue.

4) Rename the top level event directory to reflect the actual event date (same as the event label).

5) In <event-label>/index.md update the event-label value to reflect the new event label.

Filling Out the Event Page

Building out the contents of the page for a tutorial event can be carried out incrementally, section by section, as appropriate, under the control of YAML metadata in the <event-label>/index.md file, for example:

---
layout: bsswt-event-page
event-label: 2021-11-15-sc
# A typical initial tutorial page might include:
#         [description,acknowledgments-ecp]
# A typical complete tutorial page would include: 
#         [description,agenda,presentation-slides,how-to-participate,hands-on-exercises,stay-in-touch,resources-from-presentations,requested-citation,acknowledgments-ecp]
sections: [description,agenda,presentation-slides,hands-on-exercises,related-events,stay-in-touch,resources-from-presentations,requested-citation,acknowledgments-ecp]
---

The sections shown in the sections array above are typical, but not limiting. Sections can be added or removed, and their order changed simply by changing the sections array contents. They are included into the events index.md page in the order that they appear in the sections array. The scripting the builds the page looks for section content in two places: First in the <event-label>/ directory and then in the _include/ directory. In this way, local versions of a section, which are tailored for the event will take precedence over the stock versions in _includes/. For some sections, it does not make sense to have a stock version, while for others the stock version is parameterized in such a way that rarely is an event-specific version needed.

Section files are, by convention, named section-<section-heading>.md regardless of which location they are in. They should contain Markdown and may also use Liquid scripting. The first line of a section file must contain a line of Liquid script which adds the textual heading for the section to an array of those heading, where Acknowledgments is replaced with whatever heading text is appropriate.

{% assign headings = headings | push: "Acknowledgements" %}

Below are specific instructions on a section-by-section basis.

Description

This is usually the abstract or description of the tutorial, but can be whatever descriptive text is needed. There is very brief stock description if you don't want to provide one tailored to the event. The description section is usually included on the event page from the start (even at the Planned stage).

Acknowledgments

This is usually the funding acknowledgement. There is a stock acknowledgment of ECP support that should suffice for all but the earliest tutorials. The acknowledgments-ecp section is usually included on the event page from the start (even at the Planned stage).

Agenda

While the agenda can be defined manually, there is now scripting that can render a properly structured spreadsheet in the usual form in which present an agenda. The spreadsheet, in our Google Drive workspace, is setup with formulas to simplify calculating times for each module. It also supports hiding columns. Detailed instructions on the use of the agenda spreadsheet template can be found in Using the Agenda Spreadsheet

If the automatic agenda is sufficient for your needs, you can set it up with the following steps:

1) Download the spreadsheet as a CSV (comma-separated variable) format file and move it into _data/bsswt/<event-label>/agenda.csv. 2) Add the _data/bsswt/<event-label>/presentations.yml file to provide the full presentation titles. This file is tracked in https://github.com/bssw-tutorial/presentations/blob/main/presentations.yml and should be keep up to date with new presentation labels or changes to titles there. 3) Add the agenda section to the sections array in the <event-label>/index.md metadata. 4) Make sure that all of your presenters have entries in the _people/ folder. 5) Since you know the staffing, you can also add it to _data/bsswt/<event-label>/event.yml in the presenter-ids and helper-ids variables.

If you want to leverage the automatic agenda capability, but need to provide additional text along with the table, you can copy _includes/section-agenda.md to your <event-label>/ directory and modify it.

Presentation-slides

Our convention is to post the PDFs of the presentations to an archival service, like FigShare, and obtain a DOI for then to reference on the event page. With FigShare, the DOI can be reserved once the record is started, well in advance of actual publication. The DOI is captured in _data/bsswt/<event-label>/artifacts.yml with an entry of the form:

  - label: Presentation Slides
    format: FigShare
    doi: 10.6084/m9.figshare.16556628

The stock section-presentation-slides.md include file keys on an artifact entry labeled Presentation Slides and provides a link to the given DOI. If the Presentations Slides artifact is not available, the stock version of the section will indicate that the presentations will be published shortly before the event.

Best practice is to reserve the DOI early in the process (it is also needed for the citation information on the licensing slide included in all of the presentations), add it to artifacts.yml, confirm locally that it is properly formatted, and then comment out the artifact entry until the presentations are published. When uncommented, you should observe the Presentation Slides artifact (with the event's entry on the main page as well as at the top of the event page), as well as the seeing the proper DOI in the Presentation Slides section.

Best practice is to use the form of the DOI that always points to the latest version of the archival record.

The stock section does not accommodate a version history. That could be added via a local section include file (starting from _includes/section-presentation-slides.md). It is not clear how useful it is to tutorial participants to track the version history. This is a possible future enhancement.

Resources-from-presentations

The purpose of this section is to list the resources (links) that are mentioned in the various presentations in a way that might be (a) easier to access, and (b) places them all together in a single place.

The stock section (_includes/section-resources-from-presentations.md) usually provides what is desired here. It depends on the following files:

The resource listings themselves live in the event's directory: <event-label>/presentation-resources/<presentation-label>.md. Each file contains a list of resources for the particular presentation of the filename. By convention, the file starts with a comment to help identify which presentation the resources are for, and contains an unordered list of the resources in the same order as they're found in the presentation. The resource files must change as the presentations evolve, so each event has its own copy. The presentation-resources directory can usually be copied from most recent past tutorial as a starting point.

The stock definition of this section will process the resource files in the agenda order. The rendered listing will have the module number and presentation title for each (generated by the section file) and include the content of the <presentation-label>.md file. Resources for presentations not included on the agenda are not listed, and their resource files are simply ignored. Thus it is safe to propagate the full set of presentation-resources from one tutorial to the next.

How-to-participate

There is no stock section-how-to-participate.md. If it is to be used, it should be provided in the event directory.

Stay-in-touch

The stock section-stay-in-touch.md lists the tutorial mailing list, mentions that we'll respond to PRs and issues from the hands-on exercises, the IDEAS announcement list and the BSSw digest.

Requested-citation

The stock section-requested-citation.md will usually suffice for this. It constructs the citation from the presenters, the event name, the venue information, and the DOI link. It requires the following data to be set:

If the required information is not set, it will display "To be announced".

Hands-on-exercises

The section-hands-on-exercises.md file is currently specific to the event. It is probably most convenient to copy it and the related hands-on files from a recent tutorial with a hands-on:

The section-hands-on-exercises.md file should then be modified so that the hands-on activities follow the agenda order. Hands-ons for modules that are not being presented can be removed from the file or can be listed separately as things to try even though they weren't presented.

Various files for the hands-ons need the _data/bsswt/artifacts.yml file have a label: Hands-On Code Repository entry.