From 00d6e90cbc97db42de431ce9f938ae50637e1a1b Mon Sep 17 00:00:00 2001 From: Helena Rasche Date: Tue, 21 Nov 2023 14:33:37 +0100 Subject: [PATCH 01/11] support citing quotes --- assets/css/main.scss | 5 ++++- assets/js/main.js | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/assets/css/main.scss b/assets/css/main.scss index 7c88abe8391c4d..69ea7ddf2e0841 100644 --- a/assets/css/main.scss +++ b/assets/css/main.scss @@ -412,9 +412,12 @@ div.language-diff .p { padding-right: 1em; } -footer { +body > footer { margin-top: 5em; text-align: center; +} + +footer { color: var(--text-color-muted); font-size: $font-size - 2; } diff --git a/assets/js/main.js b/assets/js/main.js index 880f2c42581112..306ddafde852ba 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -195,3 +195,10 @@ document.querySelectorAll('div.highlight').forEach((snippet) => { var clipboardSnippets=new ClipboardJS('[data-clipboard-snippet]',{ target:function(trigger){return trigger.nextElementSibling; }}); + +// Cited blockquotes +document.querySelectorAll("blockquote[cite]").forEach(bq => { + var url = bq.getAttribute("cite"); + var author = "— " + bq.getAttribute("author") + " " || ""; + bq.insertAdjacentHTML("beforeend", ``) +}) From 7cb5c321966181518bf922ed5ea32ace019e7622 Mon Sep 17 00:00:00 2001 From: Helena Rasche Date: Tue, 21 Nov 2023 14:37:39 +0100 Subject: [PATCH 02/11] add two blogposts --- news/_posts/2023-11-21-mastodon.md | 17 +++++++++++++++++ news/_posts/2023-11-21-video.md | 23 +++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 news/_posts/2023-11-21-mastodon.md create mode 100644 news/_posts/2023-11-21-video.md diff --git a/news/_posts/2023-11-21-mastodon.md b/news/_posts/2023-11-21-mastodon.md new file mode 100644 index 00000000000000..a3f6edf743eac0 --- /dev/null +++ b/news/_posts/2023-11-21-mastodon.md @@ -0,0 +1,17 @@ +--- +title: "GTN has left Twitter/X as of October" +contributions: + authorship: [hexylena] +tags: [gtn, communications] +layout: news +--- + +We did not formally announce it at the time, but the Galaxy Training Network +has migrated from Twitter/X to Mastodon, as that platform no longer aligns with +the Galaxy Project Code of Conduct [nor our community values.](https://www.mediamatters.org/twitter/musk-endorses-antisemitic-conspiracy-theory-x-has-been-placing-ads-apple-bravo-ibm-oracle) + +If you'd like to keep up to date with the GTN, we encourage you to [follow us on mastodon](https://mstdn.science/@gtn). The [fediverse and mastodon](https://en.wikipedia.org/wiki/Fediverse) are an open, standards compliant social network that is significantly more aligned with our community values and priorities of keeping community safe. + +Are you not a fediverse user? Do you not have a mastodon account? That's ok! +Every mastodon account has a built in [RSS feed which you can use to stay updated](https://mstdn.science/@gtn.rss), +and the GTN has an [RSS feed as well for our news](https://training.galaxyproject.org/training-material/feed.xml). diff --git a/news/_posts/2023-11-21-video.md b/news/_posts/2023-11-21-video.md new file mode 100644 index 00000000000000..b33f8fde1bf61c --- /dev/null +++ b/news/_posts/2023-11-21-video.md @@ -0,0 +1,23 @@ +--- +title: "Feedback: Easy slide recordings" +contributions: + authorship: [hexylena] +tags: [feedback, testimonial, gtn] +layout: news +--- + +I recently imported [Friends Don't Let Friends Make Bad Graphs](https://github.com/cxli233/FriendsDontLetFriends), a fantastic and educational github repository showcasing some common visualisation mistakes, that was available under an open license, to the GTN. Then the GTN [automatically made a video for me.]({% link videos/watch.md %}?v=visualisation/tutorials/bad-graphs/slides) + +> [It was] really truly magical to be able to generate a 12 minute video in about the same amount of time that was spent importing the content + reformatting it +{: .quote cite="https://matrix.to/#/%23Galaxy-Training-Network_Lobby%3Agitter.im/%247oeH_z7dGcO0T9z1BRk0HU6P2yTPBHNfdfzJBo0-WIM?via=matrix.org&via=gitter.im" author="@hexylena"} + +Just by adding the slides, with good speaker notes made from the discussion that already existing +I simply had to add the slides, turn the discussion into speaker notes, and that was it. I was done. +Once the PR was merged, the video was created, and available to watch on the GTN. + +The video has perfectly accurate subtitles for anyone who is hard of hearing or d/Deaf, the slides are also available in plain text formats for those who prefer them, all from my contribution of a single, reformatted, markdown file. + + From 86406d23e683bea6957ac870889b5f62de91163d Mon Sep 17 00:00:00 2001 From: Helena Rasche Date: Tue, 21 Nov 2023 14:37:49 +0100 Subject: [PATCH 03/11] document quotation box improvements --- .../create-new-tutorial-content/tutorial.md | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/topics/contributing/tutorials/create-new-tutorial-content/tutorial.md b/topics/contributing/tutorials/create-new-tutorial-content/tutorial.md index cae2d2f18daa27..8a89e4d12f4a19 100644 --- a/topics/contributing/tutorials/create-new-tutorial-content/tutorial.md +++ b/topics/contributing/tutorials/create-new-tutorial-content/tutorial.md @@ -321,8 +321,7 @@ We can also cross-reference images inside our Markdown with an anchor. For examp > should be functional; `figcaption` descriptions should be editorial or > illustrative.** > -> [*via thoughtbot.com*](https://thoughtbot.com/blog/alt-vs-figcaption) -{: .quote} +{: .quote cite="https://thoughtbot.com/blog/alt-vs-figcaption" author="thoughtbot.com"} As an example for this image: @@ -854,6 +853,22 @@ Rendered: > ``` {: .code-out} +## **Quote** boxes + +{% raw %} +```markdown +> If you don't know where you're going, you might not get there. +{: .quote cite="https://en.m.wikiquote.org/wiki/Yogi_Berra" author="Yogi Berra"} +``` +{% endraw %} + +Rendered: + +> If you don't know where you're going, you might not get there. +{: .quote cite="https://en.m.wikiquote.org/wiki/Yogi_Berra" author="Yogi Berra"} + +The citation and author parameters are optional, and if provided the `cite` key must be a URL. + # Additional Features to Improve Learning Here we cover additional features you can use throughout your tutorials to improve the learning experience. From 7aa8aef5c64d4e1a31b10f5e5a75e01fa29658dd Mon Sep 17 00:00:00 2001 From: Helena Rasche Date: Tue, 21 Nov 2023 14:51:32 +0100 Subject: [PATCH 04/11] add support for cite_url specifically for quotes --- _plugins/jekyll-scholar.rb | 50 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/_plugins/jekyll-scholar.rb b/_plugins/jekyll-scholar.rb index 1b01bff809e263..8a4e277f8d5bb9 100644 --- a/_plugins/jekyll-scholar.rb +++ b/_plugins/jekyll-scholar.rb @@ -66,6 +66,55 @@ def render(context) end end + # {% cite_url X %} which generates URL for the article + class CiteUrlTag < Liquid::Tag + def initialize(tag_name, text, tokens) + super + @text = text.strip + end + + def render(context) + page = context.registers[:page] + site = context.registers[:site] + Gtn::Scholar.load_bib(site) + + # Mark this page as having citations + page['cited'] = true + + return "@#{@text}" if page['citation_target'] == 'R' + + # Which page is rendering this tag? + source_page = page['path'] + + # Citation Frequency + site.config['citation_count'] = Hash.new(0) if !site.config.key?('citation_count') + site.config['citation_count'][@text] += 1 + + # If the overall cache is nil, create it + site.config['citation_cache'] = {} if site.config['citation_cache'].nil? + # If the individual page in the chace is nil, create it. + site.config['citation_cache'][source_page] = [] if site.config['citation_cache'][source_page].nil? + + # Push it to our cache. + site.config['citation_cache'][source_page].push(@text) + + begin + doi = site.config['cached_citeproc'].items[@text].doi + url = site.config['cached_citeproc'].items[@text].url + if !doi.nil? + "https://doi.org/#{doi}" + elsif !url.nil? + url + end + res = url + rescue StandardError => e + puts "[GTN/scholar] Could not render #{@text} from #{source_page} (#{e})" + res = %(https://example.com/ERROR+INVALID+CITATION+#{@text}) + end + res + end + end + # {% bibliography %} which generates the bibliography class BibTag < Liquid::Tag def initialize(tag_name, text, tokens) @@ -107,4 +156,5 @@ def render(context) end Liquid::Template.register_tag('cite', Jekyll::CiteTag) +Liquid::Template.register_tag('cite_url', Jekyll::CiteUrlTag) Liquid::Template.register_tag('bibliography', Jekyll::BibTag) From 4e89afb9f028f1e99d6fc3bbf285bd0a69fdce23 Mon Sep 17 00:00:00 2001 From: Helena Rasche Date: Tue, 21 Nov 2023 14:51:43 +0100 Subject: [PATCH 05/11] Update all our quotes to use new features --- assets/js/main.js | 2 +- news/_posts/2023-02-02-black-history-month.md | 4 ++-- news/_posts/2023-05-11-ro-crate.md | 4 ++-- .../admin/tutorials/ansible-galaxy/tutorial.md | 4 ++-- topics/admin/tutorials/apptainer/tutorial.md | 7 ++----- topics/admin/tutorials/celery/tutorial.md | 3 +-- topics/admin/tutorials/cvmfs-manual/tutorial.md | 3 +-- topics/admin/tutorials/cvmfs/tutorial.md | 3 +-- .../debruijn-graph-assembly/tutorial.md | 2 +- .../tutorials/ecoli_comparison/tutorial.md | 3 +-- .../tutorials/mrsa-illumina/tutorial.md | 2 +- .../tutorials/mrsa-nanopore/tutorial.md | 2 +- .../tutorials/admin-knitting/tutorial.md | 4 ++-- .../tutorials/learning-principles/tutorial.md | 8 ++++---- .../contributing/tutorials/python/tutorial.md | 8 ++++---- .../tutorials/snakemake/tutorial.md | 4 ++-- .../data-science/tutorials/sql-game/tutorial.md | 17 +++++++++++------ .../tutorials/mtb_phylogeny/tutorial.md | 4 ++-- .../tutorials/intro-to-ml-with-r/tutorial.md | 4 +--- .../visualisation/tutorials/circos/tutorial.md | 3 +-- .../visualisation/tutorials/jbrowse/tutorial.md | 3 +-- 21 files changed, 44 insertions(+), 50 deletions(-) diff --git a/assets/js/main.js b/assets/js/main.js index 306ddafde852ba..12df6faba1f55c 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -199,6 +199,6 @@ var clipboardSnippets=new ClipboardJS('[data-clipboard-snippet]',{ // Cited blockquotes document.querySelectorAll("blockquote[cite]").forEach(bq => { var url = bq.getAttribute("cite"); - var author = "— " + bq.getAttribute("author") + " " || ""; + var author = bq.getAttribute("author") ? "— " + bq.getAttribute("author") + " " : ""; bq.insertAdjacentHTML("beforeend", ``) }) diff --git a/news/_posts/2023-02-02-black-history-month.md b/news/_posts/2023-02-02-black-history-month.md index 4f0c4592840748..1e83cc681d3355 100644 --- a/news/_posts/2023-02-02-black-history-month.md +++ b/news/_posts/2023-02-02-black-history-month.md @@ -18,8 +18,8 @@ Johns Hopkins has announced the construction of a new building named in her hono ## Bioethics -> Lacks's case is one of many examples of the lack of informed consent in 20th century medicine. Communication between tissue donors and doctors was virtually nonexistent (i.e. cells were taken without patient consent, nor were they told what the cells would be used for). Johns Hopkins Hospital, where Lacks received treatment and had her tissue harvested, was the only hospital in the Baltimore area where African American patients could receive free care. The patients receiving free care from this segregated sect of the hospital often became research subjects without their knowledge. Lacks's family also had no access to her patient files and had no say in who received HeLa cells or what they would be used for. Additionally, as HeLa cells were popularized and used more frequently throughout the scientific community, Lacks's relatives received no financial benefit and continued to live with limited access to healthcare. [via Wikipedia](https://en.wikipedia.org/wiki/HeLa#Controversy) -{: .quote} +> Lacks's case is one of many examples of the lack of informed consent in 20th century medicine. Communication between tissue donors and doctors was virtually nonexistent (i.e. cells were taken without patient consent, nor were they told what the cells would be used for). Johns Hopkins Hospital, where Lacks received treatment and had her tissue harvested, was the only hospital in the Baltimore area where African American patients could receive free care. The patients receiving free care from this segregated sect of the hospital often became research subjects without their knowledge. Lacks's family also had no access to her patient files and had no say in who received HeLa cells or what they would be used for. Additionally, as HeLa cells were popularized and used more frequently throughout the scientific community, Lacks's relatives received no financial benefit and continued to live with limited access to healthcare. +{: .quote cite="https://en.wikipedia.org/wiki/HeLa#Controversy"} We recommend the book ["The Immortal Life of Henrietta Lacks"](https://en.wikipedia.org/wiki/The_Immortal_Life_of_Henrietta_Lacks) for further reading on the topic. diff --git a/news/_posts/2023-05-11-ro-crate.md b/news/_posts/2023-05-11-ro-crate.md index 651ea716c8431c..7e9cc98f2515ea 100644 --- a/news/_posts/2023-05-11-ro-crate.md +++ b/news/_posts/2023-05-11-ro-crate.md @@ -17,8 +17,8 @@ brought several RO-Crate related tutorials into the Galaxy Training Network, und ## What are RO-Crates? -> RO-Crate is a community effort to establish a lightweight approach to packaging research data with their metadata. It is based on schema.org annotations in JSON-LD, and aims to make best-practice in formal metadata description accessible and practical for use in a wider variety of situations, from an individual researcher working with a folder of data, to large data-intensive computational research environments. -- [RO-Crate Specification](https://www.researchobject.org/ro-crate/) -{: .quote} +> RO-Crate is a community effort to establish a lightweight approach to packaging research data with their metadata. It is based on schema.org annotations in JSON-LD, and aims to make best-practice in formal metadata description accessible and practical for use in a wider variety of situations, from an individual researcher working with a folder of data, to large data-intensive computational research environments. +{: .quote cite="https://www.researchobject.org/ro-crate/"} These are *the* way to package up your research in a well annotated and {FAIR} manner. diff --git a/topics/admin/tutorials/ansible-galaxy/tutorial.md b/topics/admin/tutorials/ansible-galaxy/tutorial.md index 73a4aad3977e65..1f32ed8c888d21 100644 --- a/topics/admin/tutorials/ansible-galaxy/tutorial.md +++ b/topics/admin/tutorials/ansible-galaxy/tutorial.md @@ -54,8 +54,8 @@ edam_ontology: This tutorial assumes you have some familiarity with [Ansible](https://www.ansible.com/resources/get-started) and are comfortable with writing and running playbooks. Here we'll see how to install a Galaxy server using an Ansible playbook. The Galaxy Project has decided on Ansible for all of its deployment recipes. For our project, Ansible is even more fitting due to its name: -> An ansible is a category of fictional device or technology capable of instantaneous or faster-than-light communication. It can send and receive messages to and from a corresponding device over any distance or obstacle whatsoever with no delay, even between star systems (Source: [Wikipedia](https://en.wikipedia.org/wiki/Ansible)) -{: .quote} +> An ansible is a category of fictional device or technology capable of instantaneous or faster-than-light communication. It can send and receive messages to and from a corresponding device over any distance or obstacle whatsoever with no delay, even between star systems +{: .quote cite="https://en.wikipedia.org/wiki/Ansible"} We want to give you a comprehensive understanding of how the Galaxy installation occurs, but we want to avoid you having to write a "custom" Galaxy installation playbook which you would eventually throw away, in order to use the official playbooks. Given these goals, we will go through the playbook in depth first, and then move to a hands-on portion later. If you are not interested in the inner workings, you can [skip to that section now](#installing-galaxy). diff --git a/topics/admin/tutorials/apptainer/tutorial.md b/topics/admin/tutorials/apptainer/tutorial.md index 64c403caba1741..210c367dfebc34 100644 --- a/topics/admin/tutorials/apptainer/tutorial.md +++ b/topics/admin/tutorials/apptainer/tutorial.md @@ -37,8 +37,7 @@ Make sure to read the documentation on [container in Galaxy](https://docs.galaxy > BioContainers is a community-driven project that provides the infrastructure and basic guidelines to create, manage and distribute bioinformatics packages (e.g Conda) and containers (e.g Docker, Apptainer). BioContainers is based on the popular frameworks Conda, Docker and Apptainer. > -> -- [https://biocontainers-edu.readthedocs.io/en/latest/what_is_biocontainers.html](https://biocontainers-edu.readthedocs.io/en/latest/what_is_biocontainers.html) -{: .quote} +{: .quote cite="https://biocontainers-edu.readthedocs.io/en/latest/what_is_biocontainers.html"} Apptainer is an alternative to Docker that is much friendlier for HPCs @@ -59,9 +58,7 @@ Apptainer is an alternative to Docker that is much friendlier for HPCs {: .comment} > Apptainer is a container platform. It allows you to create and run containers that package up pieces of software in a way that is portable and reproducible. -> -> -- [https://sylabs.io/guides/3.7/user-guide/introduction.html](https://sylabs.io/guides/3.7/user-guide/introduction.html) -{: .quote} +{: .quote cite="https://sylabs.io/guides/3.7/user-guide/introduction.html"} > > diff --git a/topics/admin/tutorials/celery/tutorial.md b/topics/admin/tutorials/celery/tutorial.md index 32acd1e4cafa63..1b8d52bb05f061 100644 --- a/topics/admin/tutorials/celery/tutorial.md +++ b/topics/admin/tutorials/celery/tutorial.md @@ -50,8 +50,7 @@ From the Celery website: > >Language interoperability can also be achieved exposing an HTTP endpoint and having a task that requests it (webhooks)." > -> -- [https://docs.celeryq.dev/en/stable/getting-started/introduction.html#what-s-a-task-queue](https://docs.celeryq.dev/en/stable/getting-started/introduction.html#what-s-a-task-queue) -{: .quote} +{: .quote cite="https://docs.celeryq.dev/en/stable/getting-started/introduction.html#what-s-a-task-queue"} [A slideshow presentation on this subject is available](slides.html). diff --git a/topics/admin/tutorials/cvmfs-manual/tutorial.md b/topics/admin/tutorials/cvmfs-manual/tutorial.md index b83d091f67e5bf..1937f999c47dd0 100644 --- a/topics/admin/tutorials/cvmfs-manual/tutorial.md +++ b/topics/admin/tutorials/cvmfs-manual/tutorial.md @@ -32,8 +32,7 @@ From the Cern website: > The CernVM File System provides a scalable, reliable and low-maintenance software distribution service. It was developed to assist High Energy Physics (HEP) collaborations to deploy software on the worldwide-distributed computing infrastructure used to run data processing applications. CernVM-FS is implemented as a POSIX read-only file system in user space (a FUSE module). Files and directories are hosted on standard web servers and mounted in the universal namespace /cvmfs." > -> -- [https://cernvm.cern.ch/portal/filesystem](https://cernvm.cern.ch/portal/filesystem) -{: .quote} +{: .quote cite="https://cernvm.cern.ch/portal/filesystem"} [A slideshow presentation on this subject]({% link topics/admin/tutorials/cvmfs/slides.html %}) is available. More [details are available on usegalaxy.org (Galaxy Main's) reference data setup](https://galaxyproject.org/admin/reference-data-repo/#usegalaxyorg-reference-data) and CVMFS system. diff --git a/topics/admin/tutorials/cvmfs/tutorial.md b/topics/admin/tutorials/cvmfs/tutorial.md index f9643fd54879b3..ff583d45423b97 100644 --- a/topics/admin/tutorials/cvmfs/tutorial.md +++ b/topics/admin/tutorials/cvmfs/tutorial.md @@ -67,8 +67,7 @@ From the Cern website: > The CernVM File System provides a scalable, reliable and low-maintenance software distribution service. It was developed to assist High Energy Physics (HEP) collaborations to deploy software on the worldwide-distributed computing infrastructure used to run data processing applications. CernVM-FS is implemented as a POSIX read-only file system in user space (a FUSE module). Files and directories are hosted on standard web servers and mounted in the universal namespace /cvmfs." > -> -- [https://cernvm.cern.ch/portal/filesystem](https://cernvm.cern.ch/portal/filesystem) -{: .quote id="cvmfs-quote"} +{: .quote id="cvmfs-quote" cite="https://cernvm.cern.ch/portal/filesystem"} > All right, just a quick recap. CVMFS or > Cern-VMFS is a distributed file system perfectly diff --git a/topics/assembly/tutorials/debruijn-graph-assembly/tutorial.md b/topics/assembly/tutorials/debruijn-graph-assembly/tutorial.md index 125a5cecedeeab..4a06b3e5f8bbf5 100644 --- a/topics/assembly/tutorials/debruijn-graph-assembly/tutorial.md +++ b/topics/assembly/tutorials/debruijn-graph-assembly/tutorial.md @@ -225,7 +225,7 @@ The next thing to be aware of is that there can be multiple valid interpretation > ![Simple example 4](https://camo.githubusercontent.com/58d0aa7eff4cfd3d36c9210e9f6a2f0265396715/687474703a2f2f72727769636b2e6769746875622e696f2f42616e646167652f696d616765732f77696b692f73696d706c655f6578616d706c655f342e706e67) > > Additional knowledge, such as information on the approximate size of the bacterial chromosome, can help the researcher to rule out the first alternative. In this way, Bandage has assisted in turning a fragmented assembly of three contigs into a completed genome of one sequence. -{: .quote} +{: .quote cite="https://github.com/rrwick/Bandage/wiki/Simple-example"} # Assemble with SPAdes diff --git a/topics/assembly/tutorials/ecoli_comparison/tutorial.md b/topics/assembly/tutorials/ecoli_comparison/tutorial.md index a34b608ba1ead4..a86d403aa4d7a4 100644 --- a/topics/assembly/tutorials/ecoli_comparison/tutorial.md +++ b/topics/assembly/tutorials/ecoli_comparison/tutorial.md @@ -815,8 +815,7 @@ Earlier we [downloaded](#hands-on-uploading-sequences-and-annotations) gene anno > 19 | product_length: length of the product corresponding to the accession.version in column 11. Protein product lengths are in amino acid units, and do not include the stop codon which is included in column 18. Additionally, product_length may differ from feature_interval_length if the product contains sequence differences vs. the genome, as found for some RefSeq transcript and protein products based on mRNA sequences and also for INSDC proteins that are submitted to correct genome discrepancies. > 20 | attributes: semi-colon delimited list of a controlled set of qualifiers. The list currently includes: partial, pseudo, pseudogene, ribosomal_slippage, trans_splicing, anticodon=NNN (for tRNAs), old_locus_tag=XXX > -> *from [ftp.ncbi.nlm.nih.gov/genomes/genbank/README.txt](ftp://ftp.ncbi.nlm.nih.gov/genomes/genbank/README.txt)* -{: .quote} +{: .quote cite="https://ftp.ncbi.nlm.nih.gov/genomes/genbank/README.txt"} Our objective is to convert these data into BED. In this analysis we want to initially concentrate on protein coding regions. To do this let's select all lines from the annotation datasets that contain the term `CDS`, then diff --git a/topics/assembly/tutorials/mrsa-illumina/tutorial.md b/topics/assembly/tutorials/mrsa-illumina/tutorial.md index 3dddcfd9ce9da5..78a7bd1e9188d4 100644 --- a/topics/assembly/tutorials/mrsa-illumina/tutorial.md +++ b/topics/assembly/tutorials/mrsa-illumina/tutorial.md @@ -61,7 +61,7 @@ Japan" from {% cite Hikichi_2019 %} which describes: > range from asymptomatic colonization of the nasal mucosa to soft tissue > infection to fulminant invasive disease. Here, we report the complete > genome sequences of eight MRSA strains isolated from patients in Japan. -{: .quote} +{: .quote cite="{% cite_url Hikichi_2019 %}"} > > diff --git a/topics/assembly/tutorials/mrsa-nanopore/tutorial.md b/topics/assembly/tutorials/mrsa-nanopore/tutorial.md index 32297fd6aaf3ba..f0286b482cf64b 100644 --- a/topics/assembly/tutorials/mrsa-nanopore/tutorial.md +++ b/topics/assembly/tutorials/mrsa-nanopore/tutorial.md @@ -63,7 +63,7 @@ Japan" from {% cite Hikichi_2019 %} which describes: > range from asymptomatic colonization of the nasal mucosa to soft tissue > infection to fulminant invasive disease. Here, we report the complete > genome sequences of eight MRSA strains isolated from patients in Japan. -{: .quote} +{: .quote cite="{% cite_url Hikichi_2019 %}"} > > diff --git a/topics/contributing/tutorials/admin-knitting/tutorial.md b/topics/contributing/tutorials/admin-knitting/tutorial.md index 15660e11b17802..bbed016db7907e 100644 --- a/topics/contributing/tutorials/admin-knitting/tutorial.md +++ b/topics/contributing/tutorials/admin-knitting/tutorial.md @@ -55,8 +55,8 @@ The `data-commit` will be turned into the commit message, so, you can write some In knitting you sometimes need to rip out the stitches, a process sometimes called frogging. -> If they are not secured, the loops of a knitted course will come undone when their yarn is pulled; this is known as ripping out, unravelling knitting, or humorously, frogging (because you 'rip it', this sounds like a frog croaking: 'rib-bit'). [via Wikipedia](https://en.wikipedia.org/wiki/Knitting) -{: .quote} +> If they are not secured, the loops of a knitted course will come undone when their yarn is pulled; this is known as ripping out, unravelling knitting, or humorously, frogging (because you 'rip it', this sounds like a frog croaking: 'rib-bit'). +{: .quote cite="https://en.wikipedia.org/wiki/Knitting"} ```console $ python bin/knit-frog.py topics/admin/tutorials/singularity/tutorial.md /tmp/03-singularity diff --git a/topics/contributing/tutorials/learning-principles/tutorial.md b/topics/contributing/tutorials/learning-principles/tutorial.md index 1d715d3da57081..6639df164d90ab 100644 --- a/topics/contributing/tutorials/learning-principles/tutorial.md +++ b/topics/contributing/tutorials/learning-principles/tutorial.md @@ -110,11 +110,11 @@ A metaphor is a word from one thematic domain that has been embedded in another We can use metaphors to shape and reveal our way of thinking about learning and, therefore, shape our actions as teachers. --- -> *A mind is a fire to be kindled, not a vessel to be filled* -> -> Plutard + +> A mind is a fire to be kindled, not a vessel to be filled > -{: .quote} +{: .quote author="Plutard"} + --- How the mind-as-a-vessel-to-be-filled metaphor may affect your way of teaching? You are likely to spend your time in the class at the blackboard, trying to 'transmit' to the students your own knowledge. diff --git a/topics/contributing/tutorials/python/tutorial.md b/topics/contributing/tutorials/python/tutorial.md index c5ca494b23b2a9..4a7de8cdeb380d 100644 --- a/topics/contributing/tutorials/python/tutorial.md +++ b/topics/contributing/tutorials/python/tutorial.md @@ -75,8 +75,8 @@ The student's mental model of the code underlies everything they do as a program > affects course performance and also increases self efficacy, the other key > element in course performance. Given this double impact, helping students > develop good mental models should remain a goal in introductory programming -> courses. {% cite Ramalingam_2004 %} -{: .quote} +> courses. +{: .quote cite="{% cite_url Ramalingam_2004 %}"} This is a foundational skill to be able to *think* through a program, step by step, and understand how the code executes and which variables exist when, and what their values should be. This mental modelling allows students to predict the behaviour of a system, and when it diverges from their prediction, recognise any potential bugs. @@ -185,8 +185,8 @@ Which option is prefgerrable depends strongly on how advanced your students are. Debugging is the act of identify and resolving "bugs" or defects within code, a term popularly attributed to my personal hero Admiral Grace Hopper: -> While she was working on a Mark II computer at Harvard University, her associates discovered a moth stuck in a relay and thereby impeding operation, whereupon she remarked that they were "debugging" the system ({% cite enwiki:1069955193 %}) -{: .quote} +> While she was working on a Mark II computer at Harvard University, her associates discovered a moth stuck in a relay and thereby impeding operation, whereupon she remarked that they were "debugging" the system +{: .quote cite="{% cite_url enwiki:1069955193 %}"} Debugging also functions as a reinforcement method we can use once students have an ok mental model of code execution, a necessary pre-requisite for this activity, which can be further developed through debugging ({% cite Ramalingam_2004 %}) alongside their self-efficacy ({% cite Michaeli_2019 %}). Debugging activities can take many forms but most commonly the task is to correct incorrect code, an activity that works best if they are primed with a number of methods of debugging ({% cite Murphy_2008 %}) such as the "Wolf Fence" ({% cite Gauss_1982 %}), commenting out code, or breakpoints. diff --git a/topics/data-science/tutorials/snakemake/tutorial.md b/topics/data-science/tutorials/snakemake/tutorial.md index 76b7673abbd4a7..d9598edeb0da41 100644 --- a/topics/data-science/tutorials/snakemake/tutorial.md +++ b/topics/data-science/tutorials/snakemake/tutorial.md @@ -288,8 +288,8 @@ This also how we can really easily parallelise workflows: because we know the de # Snakemake -> The Snakemake workflow management system is a tool to create reproducible and scalable data analyses. Workflows are described via a human readable, Python based language. They can be seamlessly scaled to server, cluster, grid and cloud environments, without the need to modify the workflow definition. Finally, Snakemake workflows can entail a description of required software, which will be automatically deployed to any execution environment. [source](https://snakemake.readthedocs.io/en/stable/index.html) -{: .quote} +> The Snakemake workflow management system is a tool to create reproducible and scalable data analyses. Workflows are described via a human readable, Python based language. They can be seamlessly scaled to server, cluster, grid and cloud environments, without the need to modify the workflow definition. Finally, Snakemake workflows can entail a description of required software, which will be automatically deployed to any execution environment. +{: .quote cite="https://snakemake.readthedocs.io/en/stable/index.html"} Snakemake addresses a lot of the issues with make for use in scientific contexts: clearer pipelines and dependencies. We did not talk about it in the previous section, but where did `bowtie2` and `bowtie2-build` come from? How did those get installed? What versions are they? None of that information is included in the Makefile diff --git a/topics/data-science/tutorials/sql-game/tutorial.md b/topics/data-science/tutorials/sql-game/tutorial.md index 53814de18d67ed..56dedfb2f7b854 100644 --- a/topics/data-science/tutorials/sql-game/tutorial.md +++ b/topics/data-science/tutorials/sql-game/tutorial.md @@ -23,21 +23,26 @@ key_points: notebook: language: python subtopic: sql -contributors: -- hexylena -- NUKnightLab -- gallantries -- avans-atgm +contributions: + authorship: + - NUKnightLab + - hexylena + funding: + - gallantries + - avans-atgm tags: - game - SQL +license: MIT +copyright: Copyright (c) 2018 NUKnightLab --- This is not a tutorial like most GTN content but a fun exercise for you to play around and learn a bit about SQL in a more 'practical', and hopefully re-inforce the skills you covered in Basic and Advanced SQL skills. It makes use of the [NUKnightLab/sql-mysteries](https://github.com/NUKnightLab/sql-mysteries) SQL murder mystery project and released under open licenses: +> Source > Original code for NUKnightLab/sql-mysteries is released under the MIT License. > Original text and other content is released under Creative Commons CC BY-SA 4.0. -{: .quote} +{: .comment} Download the database and connector: diff --git a/topics/evolution/tutorials/mtb_phylogeny/tutorial.md b/topics/evolution/tutorials/mtb_phylogeny/tutorial.md index 920a505ee8655f..366c594281059b 100644 --- a/topics/evolution/tutorials/mtb_phylogeny/tutorial.md +++ b/topics/evolution/tutorials/mtb_phylogeny/tutorial.md @@ -35,8 +35,8 @@ tags: --- -> "Nothing in biology makes sense except in the light of evolution." -- Theodosius Dobzhansky, 1973 -{: .quote} +> "Nothing in biology makes sense except in the light of evolution." +{: .quote author="Theodosius Dobzhansky" year="1973"} Phylogenetic trees are a tool for organizing biological diversity. Just as maps provide a spatial framework to the geographer, phylogenies provide an evolutionary context to the biologist: they capture the relationship among "things" (species, individuals, genes), represented as tips in the tree, based on common ancestry. diff --git a/topics/statistics/tutorials/intro-to-ml-with-r/tutorial.md b/topics/statistics/tutorials/intro-to-ml-with-r/tutorial.md index 3ae9ed10d93914..b16d793ecc6a61 100644 --- a/topics/statistics/tutorials/intro-to-ml-with-r/tutorial.md +++ b/topics/statistics/tutorials/intro-to-ml-with-r/tutorial.md @@ -117,9 +117,7 @@ Tip 4 in the "Ten quick tips for machine learning in computational biology" ({% > This algorithm-selection step, which usually occurs at the beginning of a machine learning journey, can be dangerous for beginners. In fact, an inexperienced practitioner might end up choosing a complicated, inappropriate data mining method which might lead him/her to bad results, as well as to lose precious time and energy. Therefore, this is our tip for the algorithm selection: if undecided, start with the simplest algorithm (Hand DJ, "Classifier technology and the illusion of progress". Stat Sci. 2006; 21(1):1–14). > > By employing a simple algorithm, you will be able to keep everything under control, and better understand what is happening during the application of the method. In addition, a simple algorithm will provide better generalization skills, less chance of overfitting, easier training and faster learning properties than complex methods. As David J. Hand explained, complex models should be employed only if the dataset features provide some reasonable justification for their usage. -> -> (from {% cite Chicco_2017 %}) -{: .quote} +{: .quote cite="{% cite_url Chicco_2017 %}"} # Exploratory Data Analysis (EDA) and Unsupervised Learning diff --git a/topics/visualisation/tutorials/circos/tutorial.md b/topics/visualisation/tutorials/circos/tutorial.md index c5aa36ea4f7985..8247a8a367df0b 100644 --- a/topics/visualisation/tutorials/circos/tutorial.md +++ b/topics/visualisation/tutorials/circos/tutorial.md @@ -538,8 +538,7 @@ You should see a plot like: > > 2. Low **copy number states- alternation between 2 states** (sometimes 3) suggesting that rearrangements occurred in a short period of time. > > 3. In chromothriptic areas you get **alternation of regions which retain heterozygosity-two copy (no loss or gain), with regions that have loss of heterozygosity- one copy** (heterozygous deletion). This suggest that the rearrangements took place at a time that both parental copies of the chromosome were present and hence early on the development of the cancer cell. > > -> > *from [https://en.wikipedia.org/wiki/Chromothripsis](https://en.wikipedia.org/wiki/Chromothripsis)* -> {: .quote} +> {: .quote cite="https://en.wikipedia.org/wiki/Chromothripsis"} > {: .comment} diff --git a/topics/visualisation/tutorials/jbrowse/tutorial.md b/topics/visualisation/tutorials/jbrowse/tutorial.md index 1d15a0f67fccad..19bd61e9aa6d49 100644 --- a/topics/visualisation/tutorials/jbrowse/tutorial.md +++ b/topics/visualisation/tutorials/jbrowse/tutorial.md @@ -24,8 +24,7 @@ contributors: > JBrowse ({% cite Buels_2016 %}) is a fast, embeddable genome browser built completely with JavaScript > and HTML5, with optional run-once data formatting tools written in Perl. > -> *from [http://jbrowse.org/](http://jbrowse.org/)* -{: .quote} +{: .quote cite="https://jbrowse.org/jbrowse1.html"} The Galaxy tool accepts data in many formats: From 59d2390f4e9381e47314c0fe60870bec008c3465 Mon Sep 17 00:00:00 2001 From: Helena Rasche Date: Tue, 21 Nov 2023 14:55:01 +0100 Subject: [PATCH 06/11] restructure to handle other cases slightly better --- assets/js/main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/js/main.js b/assets/js/main.js index 12df6faba1f55c..741eb0edc949ea 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -198,7 +198,7 @@ var clipboardSnippets=new ClipboardJS('[data-clipboard-snippet]',{ // Cited blockquotes document.querySelectorAll("blockquote[cite]").forEach(bq => { - var url = bq.getAttribute("cite"); + var url = bq.getAttribute("cite") ? `Source` : ""; var author = bq.getAttribute("author") ? "— " + bq.getAttribute("author") + " " : ""; - bq.insertAdjacentHTML("beforeend", ``) + bq.insertAdjacentHTML("beforeend", `
${author}${url}
`) }) From 753a2e6d7b8d1ed0f8dfbfa901077c3f976da8b1 Mon Sep 17 00:00:00 2001 From: Helena Rasche Date: Tue, 21 Nov 2023 14:57:15 +0100 Subject: [PATCH 07/11] handle author only case --- assets/js/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/main.js b/assets/js/main.js index 741eb0edc949ea..b0de75db847c7f 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -197,7 +197,7 @@ var clipboardSnippets=new ClipboardJS('[data-clipboard-snippet]',{ }}); // Cited blockquotes -document.querySelectorAll("blockquote[cite]").forEach(bq => { +document.querySelectorAll("blockquote[cite],blockquote[author]").forEach(bq => { var url = bq.getAttribute("cite") ? `Source` : ""; var author = bq.getAttribute("author") ? "— " + bq.getAttribute("author") + " " : ""; bq.insertAdjacentHTML("beforeend", `
${author}${url}
`) From 356e8bdda04accd9068d34d3146c5b0eb7afe1f3 Mon Sep 17 00:00:00 2001 From: Helena Rasche Date: Tue, 21 Nov 2023 14:59:25 +0100 Subject: [PATCH 08/11] add examples/test cases --- .../tutorials/create-new-tutorial-content/tutorial.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/topics/contributing/tutorials/create-new-tutorial-content/tutorial.md b/topics/contributing/tutorials/create-new-tutorial-content/tutorial.md index 8a89e4d12f4a19..dfeb80218e11b7 100644 --- a/topics/contributing/tutorials/create-new-tutorial-content/tutorial.md +++ b/topics/contributing/tutorials/create-new-tutorial-content/tutorial.md @@ -867,7 +867,13 @@ Rendered: > If you don't know where you're going, you might not get there. {: .quote cite="https://en.m.wikiquote.org/wiki/Yogi_Berra" author="Yogi Berra"} -The citation and author parameters are optional, and if provided the `cite` key must be a URL. +The citation and author parameters are both optional. If provided the `cite` key must be a URL. + +> If you don't know where you're going, you might not get there. +{: .quote cite="https://en.m.wikiquote.org/wiki/Yogi_Berra"} + +> If you don't know where you're going, you might not get there. +{: .quote author="Yogi Berra"} # Additional Features to Improve Learning From 1bfa3a962ad9c9fec14ff3ac51919ad4a55c3050 Mon Sep 17 00:00:00 2001 From: Helena Rasche Date: Thu, 23 Nov 2023 10:08:43 +0100 Subject: [PATCH 09/11] fix some links --- topics/assembly/tutorials/debruijn-graph-assembly/tutorial.md | 4 ++-- topics/contributing/tutorials/python/tutorial.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/topics/assembly/tutorials/debruijn-graph-assembly/tutorial.md b/topics/assembly/tutorials/debruijn-graph-assembly/tutorial.md index 4a06b3e5f8bbf5..75331556b1de34 100644 --- a/topics/assembly/tutorials/debruijn-graph-assembly/tutorial.md +++ b/topics/assembly/tutorials/debruijn-graph-assembly/tutorial.md @@ -27,9 +27,9 @@ contributors: In this activity, we will perform *de novo* assemblies of a short read set using the Velvet Optimiser and the SPAdes assemblers. We are using the Velvet Optimiser for illustrative purposes. For real assembly work, a more suitable assembler should be chosen - such as SPAdes. -The Velvet Optimiser is a script written by Simon Gladman to optimise the k-mer size and coverage cutoff parameters for Velvet. More information can be found [here](https://github.com/slugger70/VelvetOptimiser) +The Velvet Optimiser is a script written by {% include _includes/contributor-badge.html id="slugger70" %} to optimise the k-mer size and coverage cutoff parameters for Velvet. More information can be found [in its repository](https://github.com/slugger70/VelvetOptimiser). -SPAdes is a de novo genome assembler written by Pavel Pevzner's group in St. Petersburg. More details on it can be found [here](http://cab.spbu.ru/software/spades/) +SPAdes is a de novo genome assembler written by Pavel Pevzner's group in St. Petersburg. More details on it can be found [on Spades' website](http://cab.spbu.ru/software/spades/)> diff --git a/topics/contributing/tutorials/python/tutorial.md b/topics/contributing/tutorials/python/tutorial.md index 4a7de8cdeb380d..9da942e19a1ac1 100644 --- a/topics/contributing/tutorials/python/tutorial.md +++ b/topics/contributing/tutorials/python/tutorial.md @@ -139,7 +139,7 @@ This was generated by [hexylena/auto-python](https://github.com/hexylena/auto-py When teaching programming one must constantly be cognisant of the student's cognitive load. It is a complicated task that demands a lot of students, requiring types of explicit logic analysis that they may not have engaged in before. Both learning based on problem-solving and worked examples may cause high cognitive loads for different audiences, and exploring alternatives is important ({% cite Retnowati_2017 %}). Faded examples such as what is seen below are exactly such an alternative, starting with a fully worked example and removing successive components until we reach a problem description requiring a full solution. This leads to fewer unproductive learning events ({% cite Renkl_2004 %}). ```python -# Write a function that multiplies two numbers +### Write a function that multiplies two numbers def multiply(a, b): c = a * b return c From c54af076a3b5c94010f351374c71d8c740229dbf Mon Sep 17 00:00:00 2001 From: Helena Rasche Date: Thu, 23 Nov 2023 10:08:56 +0100 Subject: [PATCH 10/11] workaround inability of parser to handle code blocks --- topics/contributing/tutorials/python/tutorial.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/topics/contributing/tutorials/python/tutorial.md b/topics/contributing/tutorials/python/tutorial.md index 9da942e19a1ac1..d25dfa8ff97823 100644 --- a/topics/contributing/tutorials/python/tutorial.md +++ b/topics/contributing/tutorials/python/tutorial.md @@ -148,7 +148,7 @@ def multiply(a, b): The initial problem shows the entire solution to students ```python -# Write a function that adds two numbers +### Write a function that adds two numbers def add(___): ____ return c @@ -157,7 +157,7 @@ def add(___): Increased fading, here we call out blanks students should fill in specifically with syntactically incorrect underscores. ```python -# Write a function that subtracts two numbers +### Write a function that subtracts two numbers ``` Final fading, the entire problem is gone except for the description of what they need to do. @@ -191,7 +191,7 @@ Debugging is the act of identify and resolving "bugs" or defects within code, a Debugging also functions as a reinforcement method we can use once students have an ok mental model of code execution, a necessary pre-requisite for this activity, which can be further developed through debugging ({% cite Ramalingam_2004 %}) alongside their self-efficacy ({% cite Michaeli_2019 %}). Debugging activities can take many forms but most commonly the task is to correct incorrect code, an activity that works best if they are primed with a number of methods of debugging ({% cite Murphy_2008 %}) such as the "Wolf Fence" ({% cite Gauss_1982 %}), commenting out code, or breakpoints. ```python -# Fix me! +### Fix me! for number in range(10): # use a if the number is a multiple of 3, otherwise use b if Number \% 3 == 0: From 1f3e244cd5d3cf4ca8e538967485dc21eefd0dab Mon Sep 17 00:00:00 2001 From: Helena Rasche Date: Thu, 23 Nov 2023 10:09:40 +0100 Subject: [PATCH 11/11] final a11y issues --- topics/visualisation/tutorials/circos/tutorial.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/topics/visualisation/tutorials/circos/tutorial.md b/topics/visualisation/tutorials/circos/tutorial.md index 8247a8a367df0b..37ec4eb80c9335 100644 --- a/topics/visualisation/tutorials/circos/tutorial.md +++ b/topics/visualisation/tutorials/circos/tutorial.md @@ -382,7 +382,7 @@ The first data track we will configure, will be the structural variants (SVs) us SVs are usually described in terms of the SV **breakpoints** (or **junctions**); sets of genomic locations which are separated by a large distance on the reference genome, but have become adjacent in the sample through the occurrence of structural variants. Unfortunately, there is no standard file format for SV data, with different SV callers outputting different formats. Therefore, our first step will be to transform our input dataset to the Circos format for link tracks. -**SV File Format:** +### SV File Format ``` #ASSEMBLY_ID GS000008107-ASM @@ -402,7 +402,7 @@ SVs are usually described in terms of the SV **breakpoints** (or **junctions**); ``` -**Circos Input Format:** +### Circos Input Format ``` chromosome - start - end - chromosome - start - end