CINXE.COM

Bioconductor’s Participation in Galaxy Smorgasbord 2023: A Recap – Bioconductor community blog

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head> <meta charset="utf-8"> <meta name="generator" content="quarto-1.6.40"> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes"> <meta name="author" content="Maria Doyle"> <meta name="author" content="Alex Mahmoud"> <meta name="dcterms.date" content="2023-06-16"> <meta name="description" content="Bioconductor made its first appearance at the Galaxy Smorgasbord this year. This post provides a summary of our successful participation."> <title>Bioconductor’s Participation in Galaxy Smorgasbord 2023: A Recap – Bioconductor community blog</title> <style> code{white-space: pre-wrap;} span.smallcaps{font-variant: small-caps;} div.columns{display: flex; gap: min(4vw, 1.5em);} div.column{flex: auto; overflow-x: auto;} div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;} ul.task-list{list-style: none;} ul.task-list li input[type="checkbox"] { width: 0.8em; margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */ vertical-align: middle; } </style> <script src="../../site_libs/quarto-nav/quarto-nav.js"></script> <script src="../../site_libs/quarto-nav/headroom.min.js"></script> <script src="../../site_libs/clipboard/clipboard.min.js"></script> <script src="../../site_libs/quarto-search/autocomplete.umd.js"></script> <script src="../../site_libs/quarto-search/fuse.min.js"></script> <script src="../../site_libs/quarto-search/quarto-search.js"></script> <meta name="quarto:offset" content="../../"> <script src="../../site_libs/quarto-html/quarto.js"></script> <script src="../../site_libs/quarto-html/popper.min.js"></script> <script src="../../site_libs/quarto-html/tippy.umd.min.js"></script> <script src="../../site_libs/quarto-html/anchor.min.js"></script> <link href="../../site_libs/quarto-html/tippy.css" rel="stylesheet"> <link href="../../site_libs/quarto-html/quarto-syntax-highlighting-549806ee2085284f45b00abea8c6df48.css" rel="stylesheet" id="quarto-text-highlighting-styles"> <script src="../../site_libs/bootstrap/bootstrap.min.js"></script> <link href="../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet"> <link href="../../site_libs/bootstrap/bootstrap-9c546a04fa00a275547e7eb78afa1c09.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light"> <script id="quarto-search-options" type="application/json">{ "location": "navbar", "copy-button": false, "collapse-after": 3, "panel-placement": "end", "type": "overlay", "limit": 50, "keyboard-shortcut": [ "f", "/", "s" ], "show-item-context": false, "language": { "search-no-results-text": "No results", "search-matching-documents-text": "matching documents", "search-copy-link-title": "Copy link to search", "search-hide-matches-text": "Hide additional matches", "search-more-match-text": "more match in this document", "search-more-matches-text": "more matches in this document", "search-clear-button-title": "Clear", "search-text-placeholder": "", "search-detached-cancel-button-title": "Cancel", "search-submit-button-title": "Submit", "search-label": "Search" } }</script> <script defer="" data-domain="bioconductor.github.io/biocblog" src="https://plausible.io/js/script.js"></script> <link rel="stylesheet" href="../../styles.css"> <meta property="og:title" content="Bioconductor’s Participation in Galaxy Smorgasbord 2023: A Recap – Bioconductor community blog"> <meta property="og:description" content="Bioconductor made its first appearance at the Galaxy Smorgasbord this year. This post provides a summary of our successful participation."> <meta property="og:image" content="https://blog.bioconductor.org/posts/2023-06-16-smorgasbord-recap/bioconductor-galaxy.png"> <meta property="og:site_name" content="Bioconductor community blog"> <meta property="og:image:height" content="972"> <meta property="og:image:width" content="1427"> </head> <body class="nav-fixed fullcontent"> <div id="quarto-search-results"></div> <header id="quarto-header" class="headroom fixed-top quarto-banner"> <nav class="navbar navbar-expand-lg " data-bs-theme="dark"> <div class="navbar-container container-fluid"> <div class="navbar-brand-container mx-auto"> <a class="navbar-brand" href="../../index.html"> <span class="navbar-title">Bioconductor community blog</span> </a> </div> <div id="quarto-search" class="" title="Search"></div> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Toggle navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarCollapse"> <ul class="navbar-nav navbar-nav-scroll ms-auto"> <li class="nav-item"> <a class="nav-link" href="../../about.html"> <span class="menu-text">About</span></a> </li> <li class="nav-item"> <a class="nav-link" href="../../contributing.html"> <span class="menu-text">Contributing</span></a> </li> <li class="nav-item compact"> <a class="nav-link" href="https://github.com/bioconductor/biocblog"> <i class="bi bi-github" role="img"> </i> <span class="menu-text"></span></a> </li> <li class="nav-item compact"> <a class="nav-link" href="https://genomic.social/@bioconductor"> <i class="bi bi-mastodon" role="img"> </i> <span class="menu-text"></span></a> </li> <li class="nav-item compact"> <a class="nav-link" href="https://www.linkedin.com/company/bioconductor/"> <i class="bi bi-linkedin" role="img"> </i> <span class="menu-text"></span></a> </li> <li class="nav-item compact"> <a class="nav-link" href="https://www.youtube.com/user/bioconductor"> <i class="bi bi-youtube" role="img"> </i> <span class="menu-text"></span></a> </li> <li class="nav-item compact"> <a class="nav-link" href="https://slack.bioconductor.org/"> <i class="bi bi-slack" role="img"> </i> <span class="menu-text"></span></a> </li> <li class="nav-item compact"> <a class="nav-link" href="../../index.xml"> <i class="bi bi-rss" role="img"> </i> <span class="menu-text"></span></a> </li> </ul> </div> <!-- /navcollapse --> <div class="quarto-navbar-tools"> </div> </div> <!-- /container-fluid --> </nav> </header> <!-- content --> <header id="title-block-header" class="quarto-title-block default page-columns page-full"> <div class="quarto-title-banner page-columns page-full"> <div class="quarto-title column-body"> <h1 class="title">Bioconductor’s Participation in Galaxy Smorgasbord 2023: A Recap</h1> <div> <div class="description"> <p>Bioconductor made its first appearance at the Galaxy Smorgasbord this year. This post provides a summary of our successful participation.</p> </div> </div> <div class="quarto-categories"> <div class="quarto-category">events</div> <div class="quarto-category">education</div> </div> </div> </div> <div class="quarto-title-meta"> <div> <div class="quarto-title-meta-heading">Authors</div> <div class="quarto-title-meta-contents"> <p><a href="https://github.com/mblue9">Maria Doyle</a> </p> <p><a href="https://github.com/almahmoud">Alex Mahmoud</a> </p> </div> </div> <div> <div class="quarto-title-meta-heading">Published</div> <div class="quarto-title-meta-contents"> <p class="date">June 16, 2023</p> </div> </div> </div> </header><div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar"> <!-- sidebar --> <!-- margin-sidebar --> <!-- main --> <main class="content quarto-banner-title-block" id="quarto-document-content"> <p>We’re delighted to share that Bioconductor was part of the <a href="https://gallantries.github.io/video-library/events/smorgasbord3/">Galaxy Smörgåsbord</a> global online training for the first time this year. Over the week of May 22-26, we extended the power of R and Bioconductor to a wider, global audience.</p> <section id="tutorials-and-engagement" class="level2"> <h2 class="anchored" data-anchor-id="tutorials-and-engagement">Tutorials and Engagement</h2> <p>Our contribution to the Smorgasbord event centered on a series of comprehensive Bioconductor tutorials available on <a href="https://gallantries.github.io/video-library/modules/bioconductor">this page</a>. This presented an excellent opportunity for learners to explore Bioconductor’s robust capabilities in bioinformatics and computational biology. The tutorials were facilitated through the Galaxy platform, with all necessary packages pre-installed for a smooth, hassle-free learning experience. In a collaborative spirit, instructors (acknowledged below) volunteered to answer learners’ questions on their respective tutorials through the Galaxy Training Network Slack during the training week. A total of 13 Bioconductor tutorials were offered, resulting in 62 registered users, 128 workshop launches, and 27 R histories submitted for Smorgasbord certificate.</p> </section> <section id="competition" class="level2"> <h2 class="anchored" data-anchor-id="competition">Competition</h2> <p>To further encourage active participation, we ran a friendly competition. Participants who completed a Bioconductor tutorial and submitted an R history before June 4th were eligible to win a free virtual registration to the Bioconductor conference <a href="https://bioc2023.bioconductor.org/">BioC2023</a>. We congratulate the winner, Paul Yu, a Master’s student from De La Salle University, Manila, Philippines!</p> </section> <section id="our-new-infrastructure" class="level2"> <h2 class="anchored" data-anchor-id="our-new-infrastructure">Our New Infrastructure</h2> <p>The Smörgåsbord event also marked the public launch of the new Bioconductor Workshop platform, a successor to the <a href="https://github.com/seandavi/Orchestra">Orchestra platform</a>. The new platform (<a href="https://workshop.bioconductor.org/">workshop.bioconductor.org</a>) is a Kubernetes deployment of a Galaxy fork, notably leveraging the Kubernetes Interactive Tools runner to launch Bioconductor RStudio-based containers, each representing a workshop. This stack is running on a cluster of Jetstream2 nodes, supported by NSF ACCESS allocation BIR190004. This platform will be employed for the annual Bioconductor conference <a href="https://bioc2023.bioconductor.org/">BioC2023</a>, and the <a href="https://www.iscb.org/ismbeccb2023">ISMB/ECCB 2023</a> conference.</p> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="bioconductor-galaxy.png" class="img-fluid figure-img"></p> <figcaption>Bioconductor Galaxy Platform</figcaption> </figure> </div> </section> <section id="looking-ahead" class="level2"> <h2 class="anchored" data-anchor-id="looking-ahead">Looking Ahead</h2> <p>By adopting Galaxy, Bioconductor hopes to broaden both the breadth of workshops available in the Galaxy Training Network, as well as the audience of Bioconductor workshops. A broader range of learning opportunities will empower scientists to excel in their research and tackle more complex questions with greater confidence and efficiency. We also hope to work with the usegalaxy.* administrators to make Bioconductor workshops available on all usegalaxy instances. We look forward to seeing more learners engage with Bioconductor tutorials, and we are excited about the potential for Bioconductor to contribute to more global learning initiatives like this.</p> </section> <section id="acknowledgements" class="level2"> <h2 class="anchored" data-anchor-id="acknowledgements">Acknowledgements</h2> <p>A big thank you to all <a href="https://gallantries.github.io/video-library/modules/bioconductor">the Bioconductor Smörgåsbord instructors</a>, Laurent Gatto, Charlotte Soneson, Kevin Rue-Albrecht, Federico Marini, Stefano Mangiola, Aidan Lakshman, Chloe Mirzayi, Maddy Griswold, Megan Vandenberg, Stephanie Zimmerman, Matt Ritchie, Yunshun Chen, Dharmesh Bhuva, Mike Love, Alan Murphy, all the helpers, including our <a href="https://bioconductor.github.io/biocblog/posts/2023-02-24-carpentries-update/">Bioconductor Carpentries Instructors</a>, and the Smorgasbord organizers, Saskia Hiltemann and Helena Rasche.</p> </section> <p> © 2025 Bioconductor. Content is published under <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons CC-BY-4.0 License</a> for the text and <a href="https://opensource.org/licenses/BSD-3-Clause">BSD 3-Clause License</a> for any code. | <a href="https://www.r-bloggers.com">R-Bloggers</a> </p></main> <!-- /main --> <script id="quarto-html-after-body" type="application/javascript"> window.document.addEventListener("DOMContentLoaded", function (event) { const toggleBodyColorMode = (bsSheetEl) => { const mode = bsSheetEl.getAttribute("data-mode"); const bodyEl = window.document.querySelector("body"); if (mode === "dark") { bodyEl.classList.add("quarto-dark"); bodyEl.classList.remove("quarto-light"); } else { bodyEl.classList.add("quarto-light"); bodyEl.classList.remove("quarto-dark"); } } const toggleBodyColorPrimary = () => { const bsSheetEl = window.document.querySelector("link#quarto-bootstrap"); if (bsSheetEl) { toggleBodyColorMode(bsSheetEl); } } toggleBodyColorPrimary(); const icon = ""; const anchorJS = new window.AnchorJS(); anchorJS.options = { placement: 'right', icon: icon }; anchorJS.add('.anchored'); const isCodeAnnotation = (el) => { for (const clz of el.classList) { if (clz.startsWith('code-annotation-')) { return true; } } return false; } const onCopySuccess = function(e) { // button target const button = e.trigger; // don't keep focus button.blur(); // flash "checked" button.classList.add('code-copy-button-checked'); var currentTitle = button.getAttribute("title"); button.setAttribute("title", "Copied!"); let tooltip; if (window.bootstrap) { button.setAttribute("data-bs-toggle", "tooltip"); button.setAttribute("data-bs-placement", "left"); button.setAttribute("data-bs-title", "Copied!"); tooltip = new bootstrap.Tooltip(button, { trigger: "manual", customClass: "code-copy-button-tooltip", offset: [0, -8]}); tooltip.show(); } setTimeout(function() { if (tooltip) { tooltip.hide(); button.removeAttribute("data-bs-title"); button.removeAttribute("data-bs-toggle"); button.removeAttribute("data-bs-placement"); } button.setAttribute("title", currentTitle); button.classList.remove('code-copy-button-checked'); }, 1000); // clear code selection e.clearSelection(); } const getTextToCopy = function(trigger) { const codeEl = trigger.previousElementSibling.cloneNode(true); for (const childEl of codeEl.children) { if (isCodeAnnotation(childEl)) { childEl.remove(); } } return codeEl.innerText; } const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', { text: getTextToCopy }); clipboard.on('success', onCopySuccess); if (window.document.getElementById('quarto-embedded-source-code-modal')) { const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', { text: getTextToCopy, container: window.document.getElementById('quarto-embedded-source-code-modal') }); clipboardModal.on('success', onCopySuccess); } var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//); var mailtoRegex = new RegExp(/^mailto:/); var filterRegex = new RegExp("https:\/\/blog\.bioconductor\.org\/"); var isInternal = (href) => { return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href); } // Inspect non-navigation links and adorn them if external var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)'); for (var i=0; i<links.length; i++) { const link = links[i]; if (!isInternal(link.href)) { // undo the damage that might have been done by quarto-nav.js in the case of // links that we want to consider external if (link.dataset.originalHref !== undefined) { link.href = link.dataset.originalHref; } } } function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) { const config = { allowHTML: true, maxWidth: 500, delay: 100, arrow: false, appendTo: function(el) { return el.parentElement; }, interactive: true, interactiveBorder: 10, theme: 'quarto', placement: 'bottom-start', }; if (contentFn) { config.content = contentFn; } if (onTriggerFn) { config.onTrigger = onTriggerFn; } if (onUntriggerFn) { config.onUntrigger = onUntriggerFn; } window.tippy(el, config); } const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]'); for (var i=0; i<noterefs.length; i++) { const ref = noterefs[i]; tippyHover(ref, function() { // use id or data attribute instead here let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href'); try { href = new URL(href).hash; } catch {} const id = href.replace(/^#\/?/, ""); const note = window.document.getElementById(id); if (note) { return note.innerHTML; } else { return ""; } }); } const xrefs = window.document.querySelectorAll('a.quarto-xref'); const processXRef = (id, note) => { // Strip column container classes const stripColumnClz = (el) => { el.classList.remove("page-full", "page-columns"); if (el.children) { for (const child of el.children) { stripColumnClz(child); } } } stripColumnClz(note) if (id === null || id.startsWith('sec-')) { // Special case sections, only their first couple elements const container = document.createElement("div"); if (note.children && note.children.length > 2) { container.appendChild(note.children[0].cloneNode(true)); for (let i = 1; i < note.children.length; i++) { const child = note.children[i]; if (child.tagName === "P" && child.innerText === "") { continue; } else { container.appendChild(child.cloneNode(true)); break; } } if (window.Quarto?.typesetMath) { window.Quarto.typesetMath(container); } return container.innerHTML } else { if (window.Quarto?.typesetMath) { window.Quarto.typesetMath(note); } return note.innerHTML; } } else { // Remove any anchor links if they are present const anchorLink = note.querySelector('a.anchorjs-link'); if (anchorLink) { anchorLink.remove(); } if (window.Quarto?.typesetMath) { window.Quarto.typesetMath(note); } if (note.classList.contains("callout")) { return note.outerHTML; } else { return note.innerHTML; } } } for (var i=0; i<xrefs.length; i++) { const xref = xrefs[i]; tippyHover(xref, undefined, function(instance) { instance.disable(); let url = xref.getAttribute('href'); let hash = undefined; if (url.startsWith('#')) { hash = url; } else { try { hash = new URL(url).hash; } catch {} } if (hash) { const id = hash.replace(/^#\/?/, ""); const note = window.document.getElementById(id); if (note !== null) { try { const html = processXRef(id, note.cloneNode(true)); instance.setContent(html); } finally { instance.enable(); instance.show(); } } else { // See if we can fetch this fetch(url.split('#')[0]) .then(res => res.text()) .then(html => { const parser = new DOMParser(); const htmlDoc = parser.parseFromString(html, "text/html"); const note = htmlDoc.getElementById(id); if (note !== null) { const html = processXRef(id, note); instance.setContent(html); } }).finally(() => { instance.enable(); instance.show(); }); } } else { // See if we can fetch a full url (with no hash to target) // This is a special case and we should probably do some content thinning / targeting fetch(url) .then(res => res.text()) .then(html => { const parser = new DOMParser(); const htmlDoc = parser.parseFromString(html, "text/html"); const note = htmlDoc.querySelector('main.content'); if (note !== null) { // This should only happen for chapter cross references // (since there is no id in the URL) // remove the first header if (note.children.length > 0 && note.children[0].tagName === "HEADER") { note.children[0].remove(); } const html = processXRef(null, note); instance.setContent(html); } }).finally(() => { instance.enable(); instance.show(); }); } }, function(instance) { }); } let selectedAnnoteEl; const selectorForAnnotation = ( cell, annotation) => { let cellAttr = 'data-code-cell="' + cell + '"'; let lineAttr = 'data-code-annotation="' + annotation + '"'; const selector = 'span[' + cellAttr + '][' + lineAttr + ']'; return selector; } const selectCodeLines = (annoteEl) => { const doc = window.document; const targetCell = annoteEl.getAttribute("data-target-cell"); const targetAnnotation = annoteEl.getAttribute("data-target-annotation"); const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation)); const lines = annoteSpan.getAttribute("data-code-lines").split(","); const lineIds = lines.map((line) => { return targetCell + "-" + line; }) let top = null; let height = null; let parent = null; if (lineIds.length > 0) { //compute the position of the single el (top and bottom and make a div) const el = window.document.getElementById(lineIds[0]); top = el.offsetTop; height = el.offsetHeight; parent = el.parentElement.parentElement; if (lineIds.length > 1) { const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]); const bottom = lastEl.offsetTop + lastEl.offsetHeight; height = bottom - top; } if (top !== null && height !== null && parent !== null) { // cook up a div (if necessary) and position it let div = window.document.getElementById("code-annotation-line-highlight"); if (div === null) { div = window.document.createElement("div"); div.setAttribute("id", "code-annotation-line-highlight"); div.style.position = 'absolute'; parent.appendChild(div); } div.style.top = top - 2 + "px"; div.style.height = height + 4 + "px"; div.style.left = 0; let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter"); if (gutterDiv === null) { gutterDiv = window.document.createElement("div"); gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter"); gutterDiv.style.position = 'absolute'; const codeCell = window.document.getElementById(targetCell); const gutter = codeCell.querySelector('.code-annotation-gutter'); gutter.appendChild(gutterDiv); } gutterDiv.style.top = top - 2 + "px"; gutterDiv.style.height = height + 4 + "px"; } selectedAnnoteEl = annoteEl; } }; const unselectCodeLines = () => { const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"]; elementsIds.forEach((elId) => { const div = window.document.getElementById(elId); if (div) { div.remove(); } }); selectedAnnoteEl = undefined; }; // Handle positioning of the toggle window.addEventListener( "resize", throttle(() => { elRect = undefined; if (selectedAnnoteEl) { selectCodeLines(selectedAnnoteEl); } }, 10) ); function throttle(fn, ms) { let throttle = false; let timer; return (...args) => { if(!throttle) { // first call gets through fn.apply(this, args); throttle = true; } else { // all the others get throttled if(timer) clearTimeout(timer); // cancel #2 timer = setTimeout(() => { fn.apply(this, args); timer = throttle = false; }, ms); } }; } // Attach click handler to the DT const annoteDls = window.document.querySelectorAll('dt[data-target-cell]'); for (const annoteDlNode of annoteDls) { annoteDlNode.addEventListener('click', (event) => { const clickedEl = event.target; if (clickedEl !== selectedAnnoteEl) { unselectCodeLines(); const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active'); if (activeEl) { activeEl.classList.remove('code-annotation-active'); } selectCodeLines(clickedEl); clickedEl.classList.add('code-annotation-active'); } else { // Unselect the line unselectCodeLines(); clickedEl.classList.remove('code-annotation-active'); } }); } const findCites = (el) => { const parentEl = el.parentElement; if (parentEl) { const cites = parentEl.dataset.cites; if (cites) { return { el, cites: cites.split(' ') }; } else { return findCites(el.parentElement) } } else { return undefined; } }; var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]'); for (var i=0; i<bibliorefs.length; i++) { const ref = bibliorefs[i]; const citeInfo = findCites(ref); if (citeInfo) { tippyHover(citeInfo.el, function() { var popup = window.document.createElement('div'); citeInfo.cites.forEach(function(cite) { var citeDiv = window.document.createElement('div'); citeDiv.classList.add('hanging-indent'); citeDiv.classList.add('csl-entry'); var biblioDiv = window.document.getElementById('ref-' + cite); if (biblioDiv) { citeDiv.innerHTML = biblioDiv.innerHTML; } popup.appendChild(citeDiv); }); return popup.innerHTML; }); } } }); </script> </div> <!-- /content --> </body></html>

Pages: 1 2 3 4 5 6 7 8 9 10