CodeRefinery Teaching essential tools so that researchers can make full use of software, computing, and data. Zola 2026-01-22T00:00:00+00:00 https://coderefinery.org/atom.xml Upcoming and recent workshops and events 2026-01-22T00:00:00+00:00 2026-01-22T00:00:00+00:00 Unknown https://coderefinery.org/workshops/upcoming/ <h2 id="upcoming-coderefinery-workshops">Upcoming CodeRefinery workshops</h2> <!-- If you edit this section, also update the date on top of this page. This is important for RSS feed. --> <ul> <li><a rel="external" href="https://coderefinery.github.io/2026-03-17-workshop/">CodeRefinery tools workshop (online)</a> - March 17-19 and 24-26 2026 (compact format)</li> </ul> <p>Don't want you to miss a workshop or event? The best way to stay informed is to join <a href="https://coderefinery.org/about/newsletter/">our newsletter</a> You can also subscribe to our <a href="/atom.xml">RSS feed</a>.</p> <h2 id="upcoming-workshops-from-partner-organizations">Upcoming workshops from partner organizations</h2> <p>Partners are invited to <a rel="external" href="https://github.com/coderefinery/coderefinery.org/edit/main/content/workshops/upcoming.md">send a pull request</a> to list your workshop/event here.</p> <h2 id="recent-workshops-and-events">Recent workshops and events</h2> <ul> <li><a rel="external" href="https://coderefinery.github.io/2025-09-09-workshop/">CodeRefinery tools workshop (online)</a> - September 9-11 2025 + 6 following Wednesdays (long format)</li> <li><a rel="external" href="https://biont.biobyte.de/HklzRkuZRjS6ORgHCiA-HA">BioNT- NumPy and Pandas fundamentals for handling biological datasets</a> (May 27-28, 2025)</li> <li><a rel="external" href="https://coderefinery.github.io/2025-03-25-workshop/">CodeRefinery tools workshop (online)</a> (Mar 25-27 &amp; Apr 1-3, 2025)</li> <li><a rel="external" href="https://www.aalto.fi/en/events/python-for-scientific-computing-5-7november2024">Python for Scientific Computing (online)</a> (Nov 5-7, 2024)</li> <li><a rel="external" href="https://github.com/PDC-support/build-systems-course">Build Systems Course and Hackathon (online)</a> (Oct 8-11, 2024)</li> <li><a rel="external" href="https://coderefinery.github.io/2024-09-10-workshop/">CodeRefinery tools workshop (online)</a> (Sep 10-12 &amp; 17-19, 2024)</li> <li><a rel="external" href="https://coderefinery.github.io/train-the-trainer/">CodeRefinery train the trainer workshop (online)</a> (four Tuesdays between Aug 13 and Sep 3).</li> <li><a rel="external" href="https://coderefinery.github.io/2024-08-27-gothenburg/">CodeRefinery tools workshop (Gothenburg)</a> (Aug 27-29, 2024)</li> <li><a rel="external" href="https://coderefinery.github.io/mini-workshop/">Mini-workshop</a> at the European Light Field Imaging Workshop 2024 (Jun 25-27, 2024)</li> <li><a rel="external" href="https://scicomp.aalto.fi/training/scip/ttt4hpc-2024/">Tuesday Tools &amp; Techniques for High Performance Computing (online)</a> (Mar and Apr, 2024)</li> <li><a rel="external" href="https://coderefinery.github.io/2024-03-12-workshop/">CodeRefinery tools workshop (online)</a> (Mar 12-14 &amp; 19-21, 2024)</li> <li><a rel="external" href="https://scicomp.aalto.fi/training/scip/python-for-scicomp-2023/">Python for Scientific Computing (online)</a> (Nov 7-10, 2023)</li> <li><a rel="external" href="https://coderefinery.github.io/2023-09-19-workshop/">CodeRefinery tools workshop, Sep 19-21 and 26-28, 2023</a></li> <li><a rel="external" href="https://scicomp.aalto.fi/training/scip/python-for-scicomp-2022/">Python for Scientific Computing (online)</a> (Nov 22-25, 2022)</li> <li><a href="https://coderefinery.org/workshops/past/">All our past workshops and events</a></li> </ul> Advanced git / git masterclass materials and topic collection 2025-10-08T00:00:00+00:00 2025-10-08T00:00:00+00:00 Unknown https://coderefinery.org/blog/git-material/ <hr /> <p>TL;DR</p> <p>The January 2025 CodeRefinery Open House on “Git masterclass” brought together educators and practitioners to share and map advanced Git teaching resources. The blog compiles existing materials (from Carpentries, universities, CodeRefinery, etc.) and organizes them around key themes: recovering from mistakes, changing history, collaborative workflows, merging/rebasing, user experience, and project organization. It also highlights best practices (commit messages, templates, large files, automation) and links to tools, cheatsheets, and talks. The session served as a starting point, and we plan future discussions to potentially creating new lessons to fill gaps and support flexible teaching.</p> <hr /> <h2 id="background">Background</h2> <p>On January 14, 2025, we held an Open House session on "Git masterclass". Educators and practitioners from various institutions and communities came to share resources and discuss topics usually not taught in basic git classes. This blog post provides an overview of the materials and topics discussed. Please refer to <a rel="external" href="https://coderefinery.org/blog/open-house-git-masterclass/">https://coderefinery.org/blog/open-house-git-masterclass/</a> for an overview of the OpenHouse session itself.</p> <h2 id="list-of-material-we-know-about">List of material we know about</h2> <ul> <li><strong>Advanced Git in Carpentries incubator (pre-alpha)</strong> <ul> <li><a rel="external" href="https://carpentries-incubator.github.io/advanced-git/">Rendered webpage</a></li> <li><a rel="external" href="https://github.com/carpentries-incubator/advanced-git">GitHub repo (see issues for items in dev)</a></li> </ul> </li> </ul> <ul> <li> <p><strong>Other Carpentries incubator projects on intermediate and advanced Git</strong></p> <ul> <li><a rel="external" href="https://carpentries-incubator.github.io/gitlab-novice/">GitLab novice</a></li> <li><a rel="external" href="https://carpentries-incubator.github.io/git-novice-branch-pr/">Git novice branch pr</a></li> </ul> </li> <li> <p><a rel="external" href="https://sa2c.swansea.ac.uk/git-demystified/"><strong>Git - beyond the basics</strong> by Swansea</a></p> </li> <li> <p><strong>Heidelberg University material for intermediate/expert Git courses</strong></p> <ul> <li><a rel="external" href="https://docs.google.com/document/d/1lUyXwlvU4NJLizreJc4LD6JISk8Ev9_L2LUmxBqaFys/edit?usp=sharing">Intermediate Git</a></li> <li><a rel="external" href="https://docs.google.com/document/d/1vogIBg0U5kKXrTAHTSO3xeK33Oyq4VTAwDxwDr8VSSg/edit?usp=sharing">Expert Git</a></li> </ul> </li> <li> <p><a rel="external" href="https://github.com/esciencecenter-digital-skills/git-lesson">Collaborative version control with Git and GitHub by <strong>NL e-Science Center</strong> </a></p> </li> <li> <p><strong>CodeRefinery</strong></p> <ul> <li><a rel="external" href="https://coderefinery.github.io/git-intro/">Introductory Git</a></li> <li><a rel="external" href="https://coderefinery.github.io/git-collaborative/">Collaborative Git</a></li> <li>(+ blogpost about why they don't start with <code>git init</code> anymore: https://coderefinery.org/blog/2024/04/19/git-lesson-rewrite/)</li> <li><a rel="external" href="https://coderefinery.github.io/git-branch-design/">Git branch design</a> (old material, we haven't touched or used this in many years)</li> <li><a rel="external" href="https://aaltoscicomp.github.io/cheatsheets/git-the-way-you-need-it-cheatsheet.pdf">Git cheatsheet</a></li> <li><a rel="external" href="https://coderefinery.github.io/github-without-command-line/">Collaborating and sharing using GitHub without command line</a>: this was used few years ago, a bit outdated now (since the "Introductory Git" lesson can now be done without command line) but there might be some good things in there</li> </ul> </li> <li> <p><a rel="external" href="https://srse-git-github-zero2hero.netlify.app/"><strong>Git and GitHub through GitKraken : From Zero to Hero</strong></a></p> </li> <li> <p><a rel="external" href="https://fair2-for-research-software.github.io/git-with-it/"><strong>University of Sheffield - Git with it</strong></a></p> </li> <li> <p><a rel="external" href="https://mmesiti.github.io/git-intermediate/"><strong>KIT - Intermediate git</strong></a>, mostly CodeRefinery material, but with some additions</p> </li> <li> <p><a rel="external" href="https://git.uni-jena.de/zedif/courses/git-intermediate-4h"><strong>zedif Jena - Collaborative Version Control with Git: An Advanced Workshop</strong></a></p> </li> <li> <p><a rel="external" href="https://nclrse-training.github.io/git-ultra-novice/"><strong>Basic GitHub but including pull requests and branching by Newcastle</strong></a></p> </li> <li> <p><strong>Met Office Resources - Custom Software Carpentry Lessons</strong></p> <ul> <li><a rel="external" href="https://github.com/MetOffice/git-novice/">git novice</a></li> <li><a rel="external" href="https://github.com/metOffice/git-working-practices">git working practices</a></li> </ul> </li> </ul> <h3 id="other-resources-on-teaching-git">Other resources on teaching git</h3> <p>A list of other resources that can be helpful when learning about or teaching git:</p> <ul> <li><a rel="external" href="https://ohshitgit.com/">Oh Shit, Git!?!</a></li> <li><a rel="external" href="https://www.youtube.com/watch?v=aolI_Rz0ZqY">Scott Chacon's FOSDEM 2024 talk on Git Tips and Tricks.</a></li> <li><a rel="external" href="https://wizardzines.com/comics/every-git-command/">"Every git command I use" by Julia Evans</a></li> <li><a rel="external" href="https://ndpsoftware.com/git-cheatsheet.html#loc=stash">Interactive git cheatsheet</a></li> <li><a rel="external" href="https://cbea.ms/git-commit/">cbeams blogpost about writing commit messages</a></li> <li><a rel="external" href="https://devhints.io/git-branch">devhints git branch cheatsheet</a></li> <li><a rel="external" href="https://github.com/mpi-astronomy/data_science_training_materials/blob/main/files/python_projects.ipynb">About Python packaging and code organization</a></li> </ul> <h2 id="topic-collection">Topic collection</h2> <p>During the open house session we collected topics we would find interesting to have as part of an advanced git or git masterclass course. We then started to link existing materials to the topics. The following is a preliminary collection of topics and their links to at least some of the materials. We encourage anyone who knows about more links of topics and materials to contribute to this blogpost by sending a pull request to <a rel="external" href="https://github.com/coderefinery/coderefinery.org/">https://github.com/coderefinery/coderefinery.org/</a>.</p> <h3 id="recovering-from-local-mistakes">Recovering from local mistakes</h3> <ul> <li>Creating a mental model for commits and branches that allows learners to understand how different commands move along the tree and convey principles and some more theoretical understanding of how git <em>actually</em> works, to give some explanation for (e.g.) how to undo things <ul> <li><a rel="external" href="https://learngitbranching.js.org/">https://learngitbranching.js.org/</a></li> <li><a rel="external" href="http://onlywei.github.io/explain-git-with-d3/">Visualizing Git Concepts with D3</a></li> <li>Collaborate on a meaningful example to convey mental model/understanding which would still be motivating</li> </ul> </li> <li>Recovering from making commits to the wrong branch <ul> <li><a rel="external" href="https://coderefinery.github.io/git-intro/recovering/">https://coderefinery.github.io/git-intro/recovering/</a> (materials exist but we typically don't manage to teach this due to time in our "normal" workshop)</li> </ul> </li> <li>Undoing/partially doing add (command-line or GUI-assisted) <ul> <li><a rel="external" href="https://kernelnewbies.org/FirstKernelPatch#CommittingChanges">https://kernelnewbies.org/FirstKernelPatch#CommittingChanges</a></li> </ul> </li> <li>Editing a previous commit (log, splitting, reverting)</li> <li>Available material which covers multiple of the above: <ul> <li><a rel="external" href="https://mmesiti.github.io/git-intermediate/git-states/">https://mmesiti.github.io/git-intermediate/git-states/</a></li> <li><a rel="external" href="http://www.ndpsoftware.com/git-cheatsheet.html#loc=workspace;">http://www.ndpsoftware.com/git-cheatsheet.html#loc=workspace;</a></li> <li><a rel="external" href="https://firstaidgit.io/">https://firstaidgit.io/</a></li> </ul> </li> <li>Using the reflog to recover from bad resets <ul> <li><a rel="external" href="https://ohshitgit.com/#magic-time-machine">https://ohshitgit.com/#magic-time-machine</a></li> </ul> </li> </ul> <h3 id="changing-history">Changing history</h3> <ul> <li> <p>How to modify an open pull request/ merge request - responding to code review with changes (rebase, squash, edit commits)</p> <ul> <li>Make additional commits so that reviewers can see changes</li> <li><a rel="external" href="https://coderefinery.github.io/git-collaborative/code-review/#how-to-modify-a-pull-request-to-address-the-review-comments">CodeRefinery git collaborative lesson on code review</a></li> </ul> </li> <li> <p>How to remove something from the history</p> <ul> <li>Start with <code>git revert</code> and how it doesn't actually remove from history. Removing from history completely can be done using <a rel="external" href="https://rtyley.github.io/bfg-repo-cleaner/">BFG-repo-cleaner</a>.</li> </ul> </li> <li> <p>Interactive rebase to squash/delete/re-order commits</p> <ul> <li>Gradually introduce rebase: Amending/Fixup first, then interactive rebase. Do not overwhelm with full power, links into creating clearer history while working.</li> <li>XKCD comic as motivation to git rebase. This repository implements the git history of that comic and fixes it: <a rel="external" href="https://github.com/ssciwr/git-rebase-xkcd-example">https://github.com/ssciwr/git-rebase-xkcd-example</a> (Details in Heidelberg university material)</li> <li>Squashing commits into a logical unit using reset</li> </ul> </li> <li> <p>Creating clearer history while working</p> <ul> <li>Partial staging and committing</li> <li>Pulling with rebase</li> </ul> </li> <li> <p>Temporary work and stashing</p> <ul> <li>Small episode in Heidelberg university material</li> </ul> </li> <li> <p><a rel="external" href="https://www.pauline-vos.nl/atomic-commits/">Atomic commits</a>, using <code>git commit --amend</code> and <code>git commit --fixup</code> which provide a gentle introduction to <code>git rebase -i</code> (see above)</p> </li> <li> <p>History inspection</p> <ul> <li>Which branches and commit have you worked on? (Analysing/Debugging history - Meta Level)</li> <li>Searching through code changes with "pickaxe"</li> <li>Finding a commit that introduced a bug with git annotate or bisect</li> <li>Example repository with two bugs hidden in history (1 functional, 1 performance): <a rel="external" href="https://github.com/ssciwr/git-bisect-example">https://github.com/ssciwr/git-bisect-example</a> (Details in Uni Heidelberg material)</li> </ul> </li> </ul> <h3 id="collaborative-workflows">Collaborative workflows</h3> <ul> <li>Importance of having a workflow: contributing changes is key for reproducibility, many users fork a project and change it and then just use their own version. Also trains useful transferable skills to industry/research software engineering. <ul> <li><a rel="external" href="https://carpentries-incubator.github.io/advanced-git/07-branching-models/index.html">https://carpentries-incubator.github.io/advanced-git/07-branching-models/index.html</a></li> <li><a rel="external" href="https://carpentries-incubator.github.io/gitlab-novice/04-collaboration.html">https://carpentries-incubator.github.io/gitlab-novice/04-collaboration.html</a></li> <li>(not sure where this goes) <a rel="external" href="https://carpentries-incubator.github.io/collaborative-git-and-github-lesson/aio.html">https://carpentries-incubator.github.io/collaborative-git-and-github-lesson/aio.html</a></li> </ul> </li> <li>Git project guidelines, i.e., no merge request without an issue, only a limited number of people merge to master/main, etc. A collection of the most important guidelines, familiarize participants with different options.</li> <li>Forking workflow <ul> <li><a rel="external" href="https://carpentries-incubator.github.io/advanced-git/09-forking/index.html">https://carpentries-incubator.github.io/advanced-git/09-forking/index.html</a></li> <li><a rel="external" href="https://carpentries-incubator.github.io/git-novice-branch-pr/10-pull-requests/">https://carpentries-incubator.github.io/git-novice-branch-pr/10-pull-requests/</a></li> </ul> </li> <li>GitFlow, different variations, with or without a development branch, feature branches, hotfixes <ul> <li><a rel="external" href="https://carpentries-incubator.github.io/advanced-git/08-gitflow/index.html">https://carpentries-incubator.github.io/advanced-git/08-gitflow/index.html</a></li> <li><a rel="external" href="https://medium.com/@onatkorucu/dont-use-git-flow-in-2023-move-to-trunk-based-development-instead-1ac5bd7cb10">Blog Post on why 'gitflow' may not be a good fit for your project</a></li> <li><a rel="external" href="https://moldstud.com/articles/p-what-are-some-alternative-workflows-to-gitflow-that-developers-can-consider">Blog Post on alternatives to Gitflow</a></li> </ul> </li> <li>Working with PR/MRs and code review</li> <li>Organizing commit history for keeping code reviewers' sanity</li> <li>Stacked Branches Workflow</li> </ul> <h3 id="combining-changes">Combining changes</h3> <ul> <li>More advanced merge situations</li> <li>Cherry-picking to apply change from a single commit (as alternatives to merge)</li> <li>Comparing rebasing with merging and understanding when to prefer one or the other</li> <li>Rebasing across conflicts <ul> <li>First should cover the two ways of updating branches, either <code>git merge</code> or <code>git rebase</code> and explain why and when you might prefer one of the other. Both can result in conflicts though!</li> <li>Then go on to explain how to resolve conflicts.</li> <li>Some of this is covered in the <a rel="external" href="https://fair2-for-research-software.github.io/git-collaboration/diverging_branches.html">Diverging branches chapter</a></li> </ul> </li> </ul> <h3 id="user-interfaces-and-experience">User interfaces and experience</h3> <ul> <li>Nice life hacks in <code>.gitconfig</code> <ul> <li><code>includeIf</code> to have custom configuration based on directory path.</li> <li>using <code>aliases</code></li> <li><code>conflictstyle = diff3</code> under <code>[merge]</code> to not only see a conflict but also what the original code was when resolving</li> <li><code>defaultBranch = main</code></li> <li><code>pushDefault = origin</code></li> <li>Aliases to avoid long complicated commands</li> <li>how to not reveal your email address if you prefer to not reveal it</li> </ul> </li> <li>Using GitHub/GitLab command line utilities (PRs from command lines)</li> <li>Collaborate between Windows users and *nix users (line ending issue)</li> <li>git hooks <ul> <li><a rel="external" href="https://pre-commit.com">pre-commit</a>, some blog posts on this can be found <a rel="external" href="https://blog.nshephard.dev/#category=pre-commit">on Neil;s website</a> and there is a chapter on this in <a rel="external" href="https://fair2-for-research-software.github.io/git-collaboration/hooks.html">fair for research software</a></li> </ul> </li> <li>GitHub actions / GitLab CI/CD <ul> <li>running GHA locally: <a rel="external" href="https://github.com/nektos/act">act</a></li> <li>ssh-ing into failed job runners using <a rel="external" href="https://github.com/mxschmitt/action-tmate">tmate</a> and debug the issue on GitHub</li> </ul> </li> <li>Git shell prompts <ul> <li>Oh-my-zsh (default on OSX) provides nice Git prompts via themes.</li> <li>how to customize fish shell for Git</li> </ul> </li> <li>how to use GUI for line-based "git add -p" commands, difftool, mergetool <ul> <li><a rel="external" href="https://difftastic.wilfred.me.uk/">difftastic</a></li> <li><a rel="external" href="https://carpentries-incubator.github.io/advanced-git/16-tools/index.html">https://carpentries-incubator.github.io/advanced-git/16-tools/index.html</a></li> </ul> </li> <li>excellent tool for diffing and integrates easily with Git (see <a rel="external" href="https://difftastic.wilfred.me.uk/git.html">git configuration</a>) <ul> <li><a rel="external" href="https://github.com/dandavison/delta">delta</a> - syntax-highlighting pager that can be customized</li> <li>meld as difftool/mergetool</li> </ul> </li> <li>Signing commits can be a pain point as GPG is a bit of a pain to use in and of itself. <ul> <li>Can sign with SSH keys these days.</li> </ul> </li> <li>How to some ignore files globally for all your repos (these are typically ignore patterns that relate to individual settings rather than ignore paths that would be useful for all)</li> </ul> <h3 id="organizing-projects">Organizing projects</h3> <p><em>Suggestion: this topic belongs on a 'RSE/Data Manager track' of git training, separate from a 'researcher/user track' that focuses more on daily usage, recipes etc - 'history' &amp; 'recovering' sections.</em></p> <ul> <li>Nesting repositories with git submodules</li> <li>Tracking large files with git-lfs/ git-annex / <a rel="external" href="https://dvc.org/">dvc</a></li> <li>Partial cloning for huge repositories</li> <li>Making &amp; distributing template repositories <ul> <li><a rel="external" href="https://github.com/showyourwork/showyourwork">Show your work templating package</a></li> <li><a rel="external" href="https://cookiecutter-data-science.drivendata.org/">Cookiecutter</a></li> <li><a rel="external" href="https://github.com/jdeplaa/open-data-template">Open data template</a></li> <li><a rel="external" href="https://github.com/mpi-astronomy/mpia-python-template">MPIA Python template</a></li> </ul> </li> </ul> <p><strong>Best practices:</strong></p> <ul> <li>How to write a 'proper' git commit message</li> <li>What to do when you have hundreds or thousands of repositories in various states of completion/abandonment, e.g. using GitHub's labels and/or other features</li> <li>Naming conventions</li> </ul> <p>These best practices could be served by e.g. blog posts disseminated via community forums, but they probably don't need to be part of a formal course.</p> <p><strong>Resources:</strong></p> <ul> <li>For keeping track on multiple repositories / places using <a rel="external" href="https://datalad.org">DataLad</a> could be a solution (based on git-annex)</li> <li><a rel="external" href="https://osf.io/akef3">CleanCode</a> as setting a base for the (code in the) repository</li> </ul> <h2 id="acknowledgement">Acknowledgement</h2> <p>This collection and overview was developed collaboratively during a CodeRefinery OpenHouse session. Thanks goes out to all participants: Radovan Bast, Lukas C. Bossert, Richard Darst, Nishka Dasgupta, Jonathan Hartman, Marc-André Hermanns, Diana Iusan, Dominic Kempf, Christian Knüpfer, Michele Mesiti, Iva Momcheva, Joe Marsh Rossney, Neil Shepard, Jannetta Steyn, Dimitrios Theodorakis.</p> <h2 id="outlook">Outlook</h2> <p>In this Open House session, we looked back: we shared experiences and links to already existing materials. We also preliminary identified topics of interest to the community based on previous experiences.</p> <p>For the next session, we aim to <strong>look into the future: What lessons are missing, where do we put them and how do we collaborate</strong> on something useful for the community to mix and match as needed. If you want to be part of this discussion, please contact [email protected].</p> CodeRefinery Open House - advanced git / git masterclass 2025-01-31T00:00:00+00:00 2025-01-31T00:00:00+00:00 Unknown https://coderefinery.org/blog/open-house-git-masterclass/ <h1 id="open-house-session-on-advanced-git-curriculum">Open house session on advanced git curriculum</h1> <p>On January 14, 2025, we held an Open House session was to discuss the need to develop an intermediate to advanced Git curriculum, sometimes also referred to as a "Git masterclass". We invited educators and practitioners from various institutions and communities to share resources, identify curriculum gaps, and start strategizing on lesson development.</p> <p>We reached out to the community during different events, in several RSE chats (including the CodeRefinery Zulip chat) and via CodeRefinery social media accounts with a variation of this text:</p> <pre class="giallo" style="color: #383A42; background-color: #FAFAFA;"><code data-lang="plain"><span class="giallo-l"><span>Are you teaching Git?</span></span> <span class="giallo-l"></span> <span class="giallo-l"><span>Come to our Open House session on Tuesday Jan 14 and discuss with few people who</span></span> <span class="giallo-l"><span>are interested in how a lesson could look like which goes beyond basic Git.</span></span> <span class="giallo-l"></span> <span class="giallo-l"><span>Let&#39;s share materials, find the gaps in the curriculums and collaborate to fill these gaps. </span></span> <span class="giallo-l"></span> <span class="giallo-l"><span>Connection details and agenda: XXX</span></span></code></pre><h2 id="session-overview">Session Overview:</h2> <ul> <li> <p><strong>Participants</strong>: The session included representatives from organizations such as the University of Tromsø (NO), Met Office (UK), CSC-IT Center for Science (FI), the University of Sheffield (UK), RWTH Aachen University (DE), the University of Jena (DE), UPPMAX (SE), the Max Planck Institute for Astronomy (DE), Danmarks Meteorologiske Institut (DK), Karlsruher Institute für Technologie (DE), UK Centre for Ecology &amp; Hydrology, Aalto University (FI), Newcastle University (UK) and Heidelberg University (DE).</p> </li> <li> <p><strong>Objectives</strong>: The primary goals were to exchange teaching materials, discuss experiences in instructing Git, and collaboratively think about a curriculum that addresses advanced Git topics beyond the basics.</p> </li> </ul> <h2 id="key-activities">Key Activities:</h2> <ul> <li> <p><strong>Introductions:</strong> Participants introduced themselves, detailing their affiliations, experiences with Git, teaching backgrounds, and objectives for the session.</p> </li> <li> <p><strong>Resource Sharing:</strong> Attendees shared links to existing materials and compiled a list of advanced Git topics to be covered in the curriculum. See next upcoming blogpost (Feb'25) for more details.</p> </li> <li> <p><strong>Experience Exchange:</strong> Small group discussions facilitated the sharing of teaching experiences, challenges faced, and effective strategies for conveying complex Git concepts.</p> </li> <li> <p><strong>Keyword Collection:</strong> The group identified key topics and discussed their relevance within the proposed curriculum.</p> </li> <li> <p><strong>Breakout Sessions:</strong> Participants divided into groups focusing on specific themes such as: - Recovery - History - User Interfaces - Project Organization - Collaborative Workflows</p> </li> <li> <p><strong>Gap Identification:</strong> We concluded the session with a discussion aimed at identifying gaps in existing materials and planning future collaborative efforts to develop comprehensive lessons.</p> </li> </ul> <h2 id="outcomes-and-insights">Outcomes and Insights:</h2> <ul> <li> <p><strong>Resource Compilation:</strong> A diverse array of teaching materials and resources were shared, providing a solid foundation for the curriculum development.</p> </li> <li> <p><strong>Community Building:</strong> The session fostered a sense of community among Git educators, highlighting the value of collaboration in enhancing teaching methodologies.</p> </li> <li> <p><strong>Future Collaboration:</strong> Participants expressed interest in ongoing collaboration to refine and expand the advanced Git curriculum.</p> </li> </ul> <h2 id="personal-reflections">Personal Reflections:</h2> <p>Engaging with fellow educators and practitioners provided valuable insights into the diverse approaches to teaching Git. The collaborative nature of the session underscored the importance of sharing knowledge and resources to improve educational outcomes.</p> <h2 id="conclusion">Conclusion:</h2> <p>The Open House session in January 2025, marked a significant step toward developing a comprehensive intermediate to advanced Git curriculum. The collective expertise and willingness to collaborate among participants set a strong foundation for future efforts in this area. We will soon also share the outcomes and materials in more detail. Stay tuned!</p> <h2 id="call-to-action">Call to Action:</h2> <p>We encourage all educators and practitioners interested in contributing to the development of the advanced Git curriculum to join future sessions and collaborate in this ongoing initiative. For this you can join our chat (https://coderefinery.zulipchat.com) or reach out to [email protected].</p> CodeRefinery - Celebrating eight years 2024-09-19T00:00:00+00:00 2024-09-19T00:00:00+00:00 Unknown https://coderefinery.org/blog/2024/09/19/celebrating-8-years/ <img width="600px" src="/blog/2024-09-19-celebration/cr-small.jpg" alt="CodeRefinery logo as a hand-carved wooden stand"> <!-- toc --> <h2 id="coderefinery-started-8-years-ago">CodeRefinery started 8 years ago</h2> <p>In October 2024 the CodeRefinery project was celebrating the conclusion of its 8th year of existence. During that time about 9 online and 28 in-person workshops were held by ~30 instructors, organizers and facilitators teaching good enough research software engineering practices to ~3000 participants from ~20 countries, of many scientific fields, career stages and preferred programming languages. We would like to celebrate this achievement with you, by looking back at the history and achievements unlocked over the years and also ask you to share your best memories. Spoiler: Even though this is a "looking back" post, CodeRefinery will not cease to exist anytime soon if we can help it. We'd just like to celebrate the project and highlight the contributions of key members.</p> <p>The project grew out of an initially local course (given at KTH Stockholm in 2014 and 2015) and in 2016 became a Nordic project. Rossen Apostolov (KTH Stockholm) submitted a proposal to the Nordic e-Infrastructure Collaboration (NeIC) in 2015 and NeIC quickly recognized it as a potentially impactful project worth co-funding. The project was started in 2016, under the leadership of Radovan Bast, project manager of CodeRefinery for the whole duration of the project.</p> <p>Thor Wikfeldt remembers: "[...] I have had the privilege of working with Radovan Bast since 2016 when the CodeRefinery project was launched, and I joined under his leadership. Among all the highly competent individuals I have encountered in my career, Radovan stands out for his relentless dedication and selfless commitment to making a meaningful impact on the world. He has inspired me to not only become a better teacher and developer of training materials but also to be more productive, collaborative and generous in my professional life. Radovan took CodeRefinery from a mere concept to a pioneering educational project that is now well- known not only in the Nordic region (where it started) but globally. [...] "</p> <h2 id="what-is-coderefinery">What is CodeRefinery?</h2> <p>CodeRefinery acts as a hub for FAIR (Findable, Accessible, Interoperable, and Reusable) software practices. It currently focuses on the Nordic/Baltic countries, but aims to expand beyond this region. CodeRefinery aims to operate as a community project with support from academic organizations. The project started in 2016 and has developed a broad curriculum of openly maintained and reviewed lessons, has taught hundreds of participants across all academic disciplines, and has managed to build a community of instructors, learners, team leads (who help learners during exercises), expert helpers (who support team leads), local organizers and partner organizations.</p> <p>The project idea/directive grew out of two courses given at PDC/KTH in 2014 and 2015, which focused on research software engineering tools and techniques. The courses were popular and it was clear that the demand is not limited to the Stockholm region and we approached NeIC to bring this project to a Nordic level, both to have more impact, but also to connect instructors across Nordic borders. The first CodeRefinery workshop was given late 2016 and since then the lesson material has evolved a lot and we have delivered many more workshops, both in-person and online.</p> <p>CodeRefinery has established itself as a highly successful initiative that improves coding skills at an intermediate level, bridging the gap between Software Carpentry for beginners, and the more advanced/bespoke training offered by other universities and HPC/computational research initiatives.</p> <p>The objectives of the CodeRefinery project are:</p> <ul> <li>Organize and deliver workshops and events</li> <li>Develop and maintain a lesson portfolio</li> <li>Build a community and network of instructors and volunteer helpers</li> <li>Operate a Nordic GitLab service</li> <li>Support the community of Nordic research software engineers</li> </ul> <h2 id="coderefinery-workshops">CodeRefinery workshops</h2> <p>The CodeRefinery project provides open, reusable and self-learning ready lesson materials developed by experts from different countries, organizations and scientific backgrounds. CodeRefinery focuses on maintaining collaboration in lesson development, teaching and workshop organization. Workshops with multiple roles especially highlight the value of collaborative efforts.</p> <p>The workshops are focused around exercises and discussions and participants are encouraged to form teams for these sessions. The learning outcomes for each lesson are defined and shared in the beginning of each lesson.</p> <p>We kindly request feedback from participants after each workshop day. Feedback is gathered using known tools with no separation between workshop and feedback. If necessary and possible, given feedback is already implemented for the next workshop day.</p> <p>The CodeRefinery project maintains manuals with a collection of work processes and ideas (<a rel="external" href="https://coderefinery.github.io/manuals/">https://coderefinery.github.io/manuals/</a>). It summarizes how meetings, workshops and other topics work and serves as basis for e.g. the helper onboarding for the workshop.</p> <h2 id="bring-your-own-classroom">Bring your own classroom</h2> <p>When switching from in-person to online workshops the CodeRefinery team put a lot of effort in embracing the online workshop format. A lot of thought has been put into our online hand-on, demo and screen sharing setups in order to provide the best possible learning experience to participants.</p> <p>Since 2020 we had multiple local classrooms join our workshop and have adapted the format to accommodate these special circumstances.</p> <p>Paula Martinez Lavanchy shares: "[...][W]e have been ‘bringing our own class’ to the CodeRefinery workshops by joining the streaming of the lessons from the classroom with our participants and helpers. TU Delft researchers provided very positive feedback about this initiative reflected in comments such as:</p> <p>“It's great and extremely useful. If it was it for me I would make it mandatory knowledge. It's really important that TU Delft continues promoting these workshops.”</p> <p>“Excellent workshop: the graduate school would be so much better with more of these practical &amp; technical workshops”</p> <p>The CodeRefinery initiative has helped us and benefit TU Delft researchers in several ways:</p> <ul> <li>The possibility of joining the workshops allowed us to advance with the implementation of our Vision for Research Data &amp; Software management training and the implementation of TU Delft Research Software Policy by providing high quality and well-received training on FAIR software practices.•</li> <li>The involvement of our data stewards, software engineers and trainers as helpers in the CodeRefinery workshops have also provided them with a great opportunity to continuously improve their skills and learn from this great community.</li> <li>The CodeRefinery learning materials are openly available and of excellent quality. We often refer our researchers to use them as consultation materials on our websites and/or guides. [...]"</li> </ul> <h2 id="sharing-experiences-and-support-for-doing-your-own-thing">Sharing experiences and support for doing your own thing</h2> <p>But the CodeRefinery project does not only focus on own workshops, it also wants to make it easier for others to provide clean and functional lesson materials with all the features needed for computational topics by providing a public lesson template (<a rel="external" href="https://github.com/coderefinery/sphinx-lesson">https://github.com/coderefinery/sphinx-lesson</a>). In addition, the ways that teaching has worked well for CodeRefinery are shared through train the trainer workshops, which have been presented in different forums and to various groups (<a rel="external" href="https://coderefinery.github.io/train-the-trainer/">https://coderefinery.github.io/train-the-trainer/</a>).</p> <p>The lesson development process always involves multiple experts. All discussions and reviews are public and can be found on our GitHub pages (<a rel="external" href="https://github.com/coderefinery">https://github.com/coderefinery</a>).</p> <p>Since it is free and open to reuse, there is no full overview about who has reused CodeRefinery materials. But when talking to people at conferences and other events we often get to hear that teachers are happily reusing the CodeRefinery materials for their lectures.</p> <p>Two larger programs that have been built on top of CodeRefinery materials are the Netherlands eScience Center workshop on "Good practices in research software development" (<a rel="external" href="https://www.esciencecenter.nl/event/good-practices-in-research-software-development-5/">https://www.esciencecenter.nl/event/good-practices-in-research-software-development-5/</a>) and the "EuroCC best practices in HPC training" program lead by ENCCS Sweden (<a rel="external" href="https://enccs.github.io/instructor-training/">https://enccs.github.io/instructor-training/</a>).</p> <p>Mateusz Kuzak and his team from the Netherlands eScience center explain:</p> <p>"[...] At the Center, we have been successfully using the training materials developed by the CodeRefinery project since 2020. At that time, CodeRefinery filled the gap in the intermediate research software skills for researchers. We already delivered training based on the Carpentries and were looking for more advanced content for researchers already doing some programming. What I appreciate about the project is that Radovan and others didn’t just reinvent everything. They build the Trainer the Trainer programme on top of excellent Carpentries Instructor Training. They also realised that the pedagogical methodology used by the Carpentries, heavily dependent on live coding, would not work that well for intermediate audiences. They developed a curriculum rich in independent work on complex exercises. At the eScience Center, we found that approach more effective for less novice learners. CodeRefinery was also very innovative, introducing a distributed online approach with many helpers supporting locally or in online breakout rooms. I believe that helps with scaling the course and reaching a new audience that otherwise wouldn't be able to access this training. We at the eScience Center will continue reusing and contributing to the CodeRefinery project. [...]"</p> <h2 id="more-than-just-workshops">More than just workshops</h2> <p>The main CodeRefinery workshop is organized twice a year and it is free and open for everyone. Everyone is encouraged to ask their questions and discuss the topics that interest them in a collaborative document. Instructors have a variety of different scientific and cultural backgrounds and are in different stages in their career.<br /> After each workshop participants are encouraged to join the community which mainly lives in the CodeRefinery Zulip chat that to date is a home to 446 people with about 10% being really active. The chat is also home to the Nordic-RSE and Nordic-HPC communities which are tightly knit with CodeRefinery. The chat serves as a space for planning, support and discussions around different topics. Participants of the CodeRefinery workshops are encouraged to use the chat also beyond the workshop to ask their questions around workshop topics and beyond. Some participants even have found their way into the project this way.</p> <p>While the workshops are the main event for CodeRefinery, it is also a community with an open heart for supporting research computing and providing courses on a researchers level. Research Software Hour was born from the community, and has brought topics of Research Software Engineering that you cannot teach in a class to the research community (<a rel="external" href="https://researchsoftwarehour.github.io/">https://researchsoftwarehour.github.io/</a>).</p> <p>A Zenodo community is available to collect all CodeRefinery and CodeRefinery related outputs: <a rel="external" href="https://zenodo.org/communities/coderefinery/records?q=&amp;l=list&amp;p=1&amp;s=10&amp;sort=newest">https://zenodo.org/communities/coderefinery/records?q=&amp;l=list&amp;p=1&amp;s=10&amp;sort=newest</a></p> <p>CodeRefinery is also active on social media: LinkedIn (347 followers), X (844 followers) and Mastodon (313 followers).</p> <h2 id="reaching-out">Reaching out</h2> <p>The CodeRefinery project has been mentioned alongside other successful programs such as the Carpentries in Research Software Engineering related publications:</p> <ul> <li> <p>I. A. Cosden, K. McHenry and D. S. Katz, "Research Software Engineers: Career Entry Points and Training Gaps," in Computing in Science &amp; Engineering, vol. 24, no. 6, pp. 14-21, Nov.-Dec. 2022, doi: 10.1109/MCSE.2023.3258630 or on arxiv; page 7</p> </li> <li> <p>US Research Software Engineer Association, &amp; IEEE Computer Society. (2023). Research Software Engineers: Creating a Career Path—and a Career. Zenodo. <a rel="external" href="https://doi.org/10.5281/zenodo.10073233">https://doi.org/10.5281/zenodo.10073233</a> ; page 19</p> </li> <li> <p>Barker, M., Breitmoser, E., Broadbent, P., Chue Hong, N., Hettrick, S., Lampaki, I., Quinn, A., &amp; Taylor, R. (2024). Software and skills for research computing in the UK. Zenodo. <a rel="external" href="https://doi.org/10.5281/zenodo.10473186">https://doi.org/10.5281/zenodo.10473186</a> ; page 15</p> </li> <li> <p>Software Sustainability Institute Blog post on Free resources for technical staff: Career development and research software training by A. Nenadic and S. Aragon: <a rel="external" href="https://www.software.ac.uk/blog/free-resources-technical-staff-career-development-and-research-software-training">https://www.software.ac.uk/blog/free-resources-technical-staff-career-development-and-research-software-training</a></p> </li> <li> <p>Goth F, Alves R, Braun M et al. Foundational Competencies and Responsibilities of a Research Software Engineer [version 1; peer review: awaiting peer review]. F1000Research 2024, 13:1429 <a rel="external" href="https://doi.org/10.12688/f1000research.157778.1">https://doi.org/10.12688/f1000research.157778.1</a></p> </li> </ul> <p>A collection of reports (<a rel="external" href="https://coderefinery.org/about/reports/">https://coderefinery.org/about/reports/</a>) and presentations (<a rel="external" href="https://coderefinery.org/about/presentations/">https://coderefinery.org/about/presentations/</a>) about the project are collected on our website.</p> <p>Project members have been actively seeking opportunities to spread the word and share the experiences from running the CodeRefinery workshops at conferences in the research computing world. Among others the project has been presented at Supercomputing (SC) conference in the US, International SuperComputing (ISC) in Germany, SIAM, RSECon and CarpentryCon in recent years.</p> <h2 id="the-future">The future</h2> <p>We are currently in the third round of funding by NeiC (one person to coordinate the efforts, other partners support in-kind) and considering our next steps.</p> <p>One thing is clear: CodeRefinery will not end or cease to exist.</p> <p>We are in contact with funders and past and potential future organizations to make these efforts go on and likely we will continue the funded coordination + in-kind partners model. For other structures we may collaborate with other organizations and projects.</p> <p>If this project and its mission sounds like something you would like to join or support, we have multiple ways to get involved from spreading the word as an ambassador, supporting material and workshop format development, becoming an instructor and teaching with us to organizing workshops with us or on your own. Please contact [email protected] or join our chat (<a rel="external" href="https://coderefinery.zulipchat.com/">https://coderefinery.zulipchat.com/</a>) and we can discuss in more detail.</p> CodeRefinery train the trainer workshop 2024-09-09T00:00:00+00:00 2024-09-09T00:00:00+00:00 Unknown https://coderefinery.org/blog/train-the-trainer/ <p>Supported by the Nordic e-Infrastructure Collaboration (NeiC), CodeRefinery is dedicated to promoting FAIR (Findable, Accessible, Interoperable, and Reusable) research software development. Our workshops provide essential training in research software development, and we are constantly evolving our teaching methods to create an effective and inclusive learning environment.</p> <p>Our Train the Trainer workshops are designed to share our best practices and provide insights into our approach. The sessions are highly interactive, encouraging participants to share their own experiences. While there’s no obligation to become a CodeRefinery instructor after attending, we warmly welcome anyone interested in joining our community of instructors.</p> <p>This blog post serves as a report on the workshop and a compilation of the invaluable contributions made by participants throughout the sessions.</p> <h2 id="workshop-setup">Workshop setup</h2> <p>The August/September 2024 workshop was not our first time sharing our methods, but with the many changes over the years, we updated the materials accordingly. We also introduced more exercises and discussions to help participants connect and learn from each other.</p> <p>We spread the four half-day workshop sessions across four consecutive Tuesdays in an effort to make it more manageable and engaging.</p> <h2 id="workshop-materials">Workshop materials</h2> <p>All materials from the workshop are available with a DOI on <a rel="external" href="https://zenodo.org/doi/10.5281/zenodo.13736614">Zenodo</a>). We chose not to record the sessions to ensure a comfortable and open environment for interaction. However, you can find materials from previous iterations of our <a rel="external" href="https://coderefinery.github.io/train-the-trainer/branch/instructor-training/">CodeRefinery instructor training</a> and <a rel="external" href="https://coderefinery.github.io/train-the-trainer/branch/community-teaching/">Community teaching</a>.</p> <p>The materials are licensed under Creative Commons Attribution 4.0 International, and we encourage anyone to reuse them. If you do, let us know so we can help advertise your materials or course on our website!</p> <p>You can also learn how to create your own lesson materials using the CodeRefinery lesson template in the episode <a rel="external" href="https://coderefinery.github.io/train-the-trainer/lessons-with-git/#coderefinery-lesson-template">Lessons with version control episode</a>.</p> <h2 id="participants">Participants</h2> <p>This workshop attracted record interest, with 82 registrations from 22 countries. The majority of participants were from Finland, the United Kingdom, Norway, Sweden, the Netherlands, and Germany, with 10-40 attendees joining each session. Since the sessions were standalone, participants could choose which ones to attend.</p> <p>We gathered on Zoom, utilizing breakout rooms and collaborative notes for discussions and questions. The notes are archived on the <a rel="external" href="https://coderefinery.github.io/train-the-trainer/notes-archive/">materials web page</a>.</p> <h2 id="workshop-themes-and-topics">Workshop themes and topics</h2> <p>The main topics discussed in the workshop were:</p> <ul> <li>Session 1: About lesson design, deployment and iterative improvement (Aug 13)</li> <li>Session 2: Tools and techniques adopted in CodeRefinery workshops (Aug 20)</li> <li>Session 3: About teaching &amp; cool things we all would like to share (Aug 27)</li> <li>Session 4: Workshop streaming practices and post-workshop tasks (Sep 3)</li> </ul> <h3 id="session-1-about-lesson-design-deployment-and-iterative-improvement">Session 1: About lesson design, deployment and iterative improvement</h3> <p>In this session, we explored the evolution of CodeRefinery lesson materials and how anyone can contribute to their ongoing development. A key aspect is version control, which ensures lessons are shareable and easy to contribute to. We discussed our preference for Sphinx with the sphinx-lesson extension.</p> <p>We introduced "backward lesson design," where we start from learning objectives and learner personas, and work backwards to create effective lessons. Feedback collection, its conversion into actionable improvements, and the impact of these refinements were also key topics.</p> <p>During group work, participants shared their methods for creating lesson materials and gathering feedback.</p> <h3 id="session-2-tools-and-techniques-adopted-in-coderefinery-workshops">Session 2: Tools and techniques adopted in CodeRefinery workshops</h3> <p>This session gave participants a behind-the-scenes look at how we run large CodeRefinery workshops. We covered event setup, roles, and how we maintain interactivity through collaborative documents and "bring your own classroom" setups.</p> <p>We discussed onboarding new instructors and helpers, teaching preparation (sound, screen sharing), and the importance of teaching "good enough" practices in intermediate software development tools, given the difficulty of defining "best practices." Our workshops aim to cater to all skill levels, with a focus on competent practitioners.</p> <p>Collaboration plays a key role in our workshops, and we highlighted the importance of assigning a Collaborative Document Manager to handle questions and interactions. Participants practiced setting up effective screen shares, ensuring readability, tested their sound levels and learned different ways to adjust it as well as ways of adjusting terminal prompts for teaching.</p> <h3 id="session-3-about-teaching-cool-things-we-all-would-like-to-share">Session 3: About teaching &amp; cool things we all would like to share</h3> <p>This session focused on teaching techniques, co-teaching models, and useful tools. We discussed Computational Thinking, a framework that breaks problem-solving into four parts: decomposition, pattern recognition, abstraction, and algorithmic design.</p> <p>We also examined the benefits of co-teaching, where complementary skills enhance the learning experience and reduce the workload for individual instructors. Participants shared their perspectives on teaching and discussed how team teaching can improve lesson delivery.</p> <p>In the "cool gems" session we had a few tool presentations:</p> <ul> <li><a rel="external" href="https://www.thregr.org/wavexx/software/screenkey">Screenkey for showing keyboard shortcuts</a></li> <li><a rel="external" href="https://github.com/bast/teaching-setup">Containerized teaching setup</a></li> <li>A DIY teaching clock, showing chunks of 5/10 minutes in black and white sections instead of numbers</li> </ul> <h3 id="session-4-workshop-streaming-practices-and-post-workshop-tasks">Session 4: Workshop streaming practices and post-workshop tasks</h3> <p>In this session, we covered streaming and recording workflows, with a focus on using Open Broadcaster Software (OBS) and ffmpeg. While managing a streaming setup can seem daunting, we broke down the process to show that each step is manageable. We also discussed video editing as a valuable tool for improving teaching.</p> <p>Participants had hands-on experience with OBS, a powerful but accessible tool, not just for workshops but for personal projects too. While OBS may appear complex, once the pieces fall into place, it's an intuitive tool for enhancing online workshops.</p> <h3 id="interested-in-joining-next-time">Interested in joining next time?</h3> <p>We are still collecting full workshop feedback and link it here later. You can however already find all notes, questions and single day feedbacks from the <a rel="external" href="https://coderefinery.github.io/train-the-trainer/notes-archive">materials - notes archive</a>. Through this Train the Trainer workshop, we hope to empower more instructors to contribute to CodeRefinery and foster an inclusive community of practice around research software development. We look forward to seeing how participants will apply these skills and insights in their own teaching endeavors.</p> <p>No matter if you are an instructor or want to observe or support the project in some other way, you are very welcome. Learn more about the project and available lesson materials by checking out <a rel="external" href="https://coderefinery.org">CodeRefinery webpage</a> and sign up for the <a rel="external" href="https://coderefinery.org/about/newsletter">Coderefinery newsletter</a> to get to know about the next iteration. If you do not have any resources to join, but would like to support the project, please consider becoming a <a rel="external" href="https://coderefinery.org/join/individuals/#coderefinery-ambassador">CodeRefinery ambassador</a>.</p> <h2 id="collection-of-teaching-related-tips-and-tricks-gathered-throughout-the-workshop-through-questions-to-the-audience">Collection of teaching related tips and tricks gathered throughout the workshop through questions to the audience</h2> <h3 id="what-is-the-hardest-thing-about-teaching-for-you">What is the hardest thing about teaching for you?</h3> <ul> <li>Knowing how "it's going", whether learners are happy or not (especially when teaching online) :+1:</li> <li>The preparation the night before. It is always much more that I would hope, no matter how prepared I want it to be :+1: :+1:</li> <li>Managing groups with vastly different academic backgrounds</li> <li>Teaching wide spectrum of skill level at the same time. :+1: :+1: :+1: :+1:</li> <li>Time management! (Knowing how much can fit in a sessions) :+1: :+1:</li> <li>General preparation time, how to fit it into the regular work schedule, and estimate how much time is needed for prep.</li> <li>How to reduce too much text into just the right amount</li> <li>Preparation of the session material and estimating the right amount of time for each section</li> <li>Getting learners to take the first step: sign up for and attend a workshop, when they don't think programming is a skill they can learn</li> <li>Getting learners to take the <em>second</em> step: translating what they've learned in a workshop into something they can apply</li> <li>preparation and time management</li> <li>Engaging with the students which was much easier for me when I used to coach</li> <li>Finding the right depth for an unknown audience for "my topic"</li> <li>education background of participants and their learning objectives</li> </ul> <h3 id="what-is-the-best-thing-about-teaching-for-you">What is the best thing about teaching for you?</h3> <ul> <li>Seeing when learner gets interested/curious about something and takes inspiration from the course. :+1:</li> <li>Seeing it works and someone can do something new.</li> <li>Motivated students grasping new stuff</li> <li>Students picking up and running with the material and skills I give them and using it for their own work. :+1:</li> <li>The "ah-ha!" moment when a student gets it! :+1::100: :+1:</li> <li>Learning from students who know about some topic more than you do. :+1:</li> <li>Being able to help people reach their goals, by showing them something new.</li> <li>Teaching is optimism acted out in the hope of making a difference both ways I suppose.</li> <li>The feeling of accomplishment when you see learning grow and implement the learnings :book:</li> <li>mutual learning and impact on learners :+1:</li> <li>Results and feedbacks / Mutual interests and interesting discussions</li> <li>mutual learning and I can also learn lots of things and new ideas from participants</li> </ul> <h3 id="when-you-start-preparing-a-new-lesson-or-training-material-where-do-you-start">When you start preparing a new lesson or training material, where do you start?</h3> <ul> <li>I look at existing materials on the same topic, but chose/refine topics based on the perceived needs/interests of the presumed audience</li> <li>Outline of structure and Material collection for a new lesson :+1:</li> <li>What material I have already? (what other material is already out there?)</li> <li>Start by looking for related resources (documents, videos, courses, etc) to have a base data and better understanding of what have been done around the topic</li> <li>Know your audience</li> <li>Review existing material</li> <li>Think about learning objectives (to keep focus on essential things)</li> <li>Think of three things simple enough that they will be remembered the next day. Design around that.</li> <li>I write down the thoughts that I have and then go back and structure it.</li> </ul> <h3 id="what-tricks-help-you-with-writer-s-block-or-the-empty-page-problem">What tricks help you with “writer’s block” or the empty page problem?</h3> <ul> <li>Write anything down that comes to mind, sometimes draw something, looking out the window :)</li> <li>Do a mind map - what concepts do I want to get across?</li> <li>Starting small, for example a list of headings and then building around it. :+1:</li> <li>What does one know about the target audience and why should they be spending longer than 1 minute listening to what they will eventually get to hear?</li> <li>Get some inspiration from another source.</li> <li>Start with the three things above</li> <li>Start with the plan and the overview design</li> <li>Some kind of outline / main message(s)</li> <li>Start with three things. Three supporting points for each of these.</li> </ul> <h3 id="maybe-you-haven-t-designed-training-material-yet-but-how-do-you-start-when-creating-a-new-presentation">Maybe you haven’t designed training material yet. But how do you start when creating a new presentation?</h3> <ul> <li>Think about the learning objectives and try to break them down into steps</li> <li>Title, Objectives, target audience and Plan</li> <li>Some kind of outline / main message(s). Get as many images as I can, instead of words</li> <li>Draft an outline and use chatgpt to fill in details</li> <li>Example of how the teaching content is applied in a real-world context</li> </ul> <h3 id="if-your-design-process-has-changed-over-time-please-describe-what-you-used-to-do-and-what-you-do-now-instead">If your design process has changed over time, please describe what you used to do and what you do now instead.</h3> <ul> <li>I look more at existing materials and try to get more information about the audience. Unfortunately getting information about the audience before the event is hard</li> <li>I used to start from the beginning and get from there but that often meant a very polished start and a rushed end. Now I try an overview first, then fill out sparse details at every section</li> <li>Updating the data and tweak the presentation</li> <li>If I am teaching a small group (or one to one) talk to them before hand - find out what they know already, what they want to learn.</li> </ul> <h3 id="what-do-you-know-now-about-preparing-lessons-training-presentations-that-you-wish-you-knew-earlier">What do you know now about preparing lessons/training/presentations that you wish you knew earlier?</h3> <ul> <li>less is more. It's better to have 2-3 main messages rather than trying to show everything in one go :+1: :+1: :+1: :+1:</li> <li>how much practice time the learners need to master what's taught</li> <li>Don't worry about something going wrong. It often makes the lesson (and thus the material) more persistent in memory. :+1:</li> <li>Try and remove everything except what you want the person to learn <ul> <li>That's a very tough part for me in the sense that I never know how much of an underlying "black box" is still ok....</li> </ul> </li> <li>Designing intermediate materials is hard, and requires putting some "gatekeeping" making sure that learners are directed to appropriate courses</li> <li>When I see a cool graphic, concept, slide, etc., download it and save it in my 'new-materials' folder to use later on!</li> <li>I have come to the conclusion that perhaps a more "agile" approach to developing materials (try to do design/teaching iterations quickly) might be the best way to go, but there are risks with this approach too</li> </ul> <h3 id="what-tricks-techniques-have-you-tried-in-your-teaching-or-seen-in-someone-else-s-teaching-that-you-think-have-been-particularly-effective-in-collecting-feedback-from-learners">What tricks/techniques have you tried in your teaching or seen in someone else's teaching that you think have been particularly effective in collecting feedback from learners?</h3> <ul> <li>preparing a survey and emailing it to participants as soon as the event ends (usually get fewer than 50% of answers but it's a representative enough sample)</li> <li>do engage with the audience, give them the time to get the courage to speak up</li> <li>Be the audience yourself <ul> <li>yes! some problems/issues I don't notice as instructor, only as listener</li> </ul> </li> <li>Have time (e.g. 5 min) in the session to fill out the feedback form</li> <li>If the course/workshop has several days/sections do a couple questions every change, then a full one afterwards</li> <li>"Traffic light" feedback (e.g. for pacing or progress on exercises): give each learner two different coloured post-it notes for in-person, or use emoji for online, to indicate a current status</li> </ul> <h3 id="do-you-teach-and-organize-teaching-alone-or-with-others-what-would-you-prefer-and-why">Do you teach and organize teaching alone or with others? What would you prefer and why?</h3> <ul> <li>Coming together is a beginning; keeping together is progress; working together is success. – Edward Everett Hale</li> <li>These days always with others. Alone is easier to prepare but almost always is harder during it.</li> <li>Teaching with very diverse partners, it can be challenging to find a common language with people very different than you.</li> <li>I teach alone, in the future there will be more collaboration with multiple team members. Both approaches have their pros and cons.</li> <li>Both has its own distinct advantages</li> <li>Most of my teaching is on my own, as a freelancer its more expensive to work with colleagues than to deliver a course on my own.</li> <li>Teaching together, learns from each other, feedbacks to improve</li> <li>Not formally taught yet, only given presentations actually .</li> <li>collective teaching would benefit the teachers with collaborative curriculum and experiences sharing.</li> </ul> <h3 id="if-applicable-have-you-seen-any-challenges-when-teaching-together-and-how-to-overcome-them">If applicable, have you seen any challenges when teaching together and how to overcome them?</h3> <ul> <li>It actually requires preparation,</li> <li>Is it about teaching or about inspiring ? Discover the answer and get inspired ...</li> <li>It's like being in a band: you might be great at improvising and your band-partners might be great at improvising too, but a bit of rehearsing makes even the impro gig much better</li> <li>Need to plan before session, difficult if people don't 'plan' in the same way, e.g. with the same time frame.</li> <li>Heterogeneity in learners make it impossible to get the same result from everyone. <ul> <li>In fact, the same applies to teachers :D</li> </ul> </li> <li>Teaching together requires to have similar opinions on how to teach. I share views only with ~40% of my colleagues I think.</li> <li>No Teaching experience but it is good to give the outline of the lessons beforehand and learning goals.</li> </ul> <h3 id="how-might-breaking-down-a-complex-problem-into-smaller-parts-change-your-approach-to-problem-solving-in-your-current-projects">How might breaking down a complex problem into smaller parts change your approach to problem-solving in your current projects?</h3> <ul> <li>Avoids cognitive overload</li> <li>I used to give an example about this in workshops of cutting long tree into pieces from top to avoid that it falls and destroy a house bloc.</li> <li>Easier to start on something small</li> <li>Each individual part is familiar and can take existing solutions.</li> <li>Only focus on the new things</li> <li>One can lose oversight of where is supposed to be getting to due to problems with summation of biases introduced during the solving of the parts.</li> </ul> <h3 id="can-you-think-of-a-research-project-where-identifying-patterns-in-your-data-led-to-new-insights-or-breakthroughs">Can you think of a research project where identifying patterns in your data led to new insights or breakthroughs?</h3> <ul> <li>Multi-targeted drug design where you need to identify both chemical and biological pathways/patterns</li> <li>Distilling complex physics problems into simpler 1D statistics is very often done.</li> <li>I used to do bioinformatics, pretty much everything in biology is about patterns in strings of characters (DNA, proteins). Finding those patterns and using them is the way to go</li> <li>Pattern recognition DOES NOT lead to new insight, it is new insight which allows for the recognition of a 'pattern', the latter being an allocation of possible bias.</li> </ul> <h3 id="what-challenges-do-you-face-when-trying-to-simplify-complex-concepts-in-your-field-and-how-do-you-decide-which-details-to-focus-on">What challenges do you face when trying to simplify complex concepts in your field, and how do you decide which details to focus on?</h3> <ul> <li>Absence of a terminology / jargon to describe a new idea. :+1:</li> <li>Similar to above, when teaching often students know what they want to achieve, but don't have the terminology to express it, so working through what they want is helpful, after teaching them some terminology.</li> <li>Whatever is most useful to the learner first?</li> <li>I work with researchers in different fields. I don't always fully understand their domain knowledge but I can take the basics or generalities and get code that works for them</li> <li>A very practical problem is trying to resist going for a coffee in the midst of taking a shot at a complex concept, in the hope that the true details are to be found in the coffee.</li> <li>not all information is easy to find or a lot of conflicting information or even sometimes information explosion</li> </ul> <h3 id="how-do-you-determine-the-priority-of-tasks-when-designing-algorithms-for-your-academic-projects-and-what-criteria-do-you-use-to-ensure-that-the-most-critical-tasks-are-addressed-first">How do you determine the priority of tasks when designing algorithms for your academic projects, and what criteria do you use to ensure that the most critical tasks are addressed first?</h3> <ul> <li>Working chronologically when going through a problem - start at the beginning.</li> <li>What gives the more insight with the least effort can be a nice start</li> <li>Talk to colleagues and Subject matter experts to understand various perspective to decide and prioritize.</li> <li>Logic will get you from A to B. Imagination will take you everywhere. - Albert Einstein.</li> </ul> <h3 id="has-anyone-found-a-nice-online-tool-to-draw">Has anyone found a nice online tool to draw?</h3> <ul> <li>I love this tool suite https://excalideck.com/ <ul> <li>For drawing https://excalidraw.com/</li> </ul> </li> <li>I have seen Miro ...</li> <li>I think the Code Refineries use something for their graphics that looks a bit 'cartoony' - but I cannot remember what it is called! <ul> <li>Drawn on remarkable and then coloured and tidied up in Inkscape. :+1: <ul> <li>I am a big fan of remarkable. I think sharing option is fairly good. Unfortunately bit expensive tool.</li> <li>true, for me it was worth it already for the pdf annotation for research papers, cannot read on computer screen</li> </ul> </li> </ul> </li> <li>https://webwhiteboard.com/</li> <li>https://www.youtube.com/watch?v=4-l8MY5kYGc</li> <li>Figma and Kahoot are useful as well</li> </ul> <h3 id="showing-keyboard-shortcuts-on-screen">Showing keyboard shortcuts on screen</h3> <ul> <li>Screenkey: <a rel="external" href="https://www.thregr.org/wavexx/software/screenkey">Screenkey for showing keyboard shortcuts</a> <ul> <li>Is there a Windows version people can recommend? <ul> <li>I found this list of alternative for windows users like me: https://alternativeto.net/software/screenkey/ :+1:</li> <li>I sometimes use the on-screen keyboard already provided by the OS :+1:</li> </ul> </li> </ul> </li> </ul> <h3 id="what-s-the-most-interesting-or-useful-thing-you-ve-learned-from-an-online-workshop-not-specifically-this-one-and-how-have-you-applied-it-planning-to-apply-in-your-life-or-work">What’s the most interesting or useful thing you’ve learned from an online workshop (not specifically this one), and how have you applied it/planning to apply in your life or work</h3> <ul> <li>Having breaks every hour or so</li> <li>New approach to screensharing, using the 'portrait' approach</li> <li>Manage breathing: reduce stress and use silence to let the audience grasp what you're saying</li> <li>Well, the most interesting or useful thing I've learned from online workshops is how not to conduct a workshop, or at least some elements of the same, and I have applied this understanding by engaging in the global effort to discover more about how not to conduct a workshop, or at least some elements of the same, with the motto: That's one small step for a man, one giant leap for mankind..</li> </ul> <h3 id="how-can-you-divide-teaching-into-separate-independent-tasks">How can you divide teaching into separate independent tasks?</h3> <ul> <li>By content blocks, having roles like main and assistant...</li> <li>Having responsibility for different sections of the course.</li> <li>Wow, now that's what we call a question... bravo... indeed, how does one separate sleeping and snoring into separate independent tasks...</li> <li>Course, exercises, resources, tools and forms.</li> <li>Different people teach different topics</li> <li>CodeRefinery answer: the big logical blocks are instructors, in-person and breakout room helpers, and Notes-questions answers.</li> </ul> Bring your own classroom to a CodeRefinery workshop 2024-08-19T00:00:00+00:00 2024-08-19T00:00:00+00:00 Unknown https://coderefinery.org/blog/bring-your-own-classroom/ <img width="75%" src="/blog/BYOC.png" alt="Graphical representation of the possibilities of joining a CodeRefinery workshop: As individual learner, online classroom or local classroom, everyone watches the stream and interacts with the instructors via collaborative notes, learners in classrooms can in addition interact with each other and their team lead"> <p>CodeRefinery, supported by the Nordic e-infrastructure collaboration (NeiC), is dedicated to enhancing FAIR (Findable, Accessible, Interoperable, and Reusable) research software development practices. Our workshops aim to provide essential training in research software development, and we’re continually exploring new methods to make this learning process effective and inclusive.</p> <p><strong>A Collaborative Effort Across Borders</strong></p> <p>CodeRefinery hosts two workshops annually, supported by a wide network of Nordic universities and organizations. This collaboration helps us make Research Software Engineering (RSE) practices widely accessible and inclusive, reaching learners from varied academic backgrounds and levels. While the current network is concentrated on the Nordics, we welcome learners, instructors and organizations from all over the world to join us.</p> <p><strong>Open Source Learning Materials and Inclusive Workshops</strong></p> <p>At CodeRefinery, we believe in open access to education. Our workshop materials are freely available online (<a rel="external" href="https://coderefinery.org/lessons/">https://coderefinery.org/lessons/</a>), and sessions are streamed live and recorded for on-demand access on the <a rel="external" href="https://www.youtube.com/channel/UC47aupE7HKGduAjXKt1Gwrg">CodeRefinery YouTube channel</a>. This supports that anyone, regardless of their location, can benefit from high-quality training.</p> <p>During the workshops, we use a collaborative document that allows participants to interact with instructors in real-time. For us, the collaborative document bridges the gap between traditional in-person instruction and the virtual environment, fostering an interactive learning experience for everyone.</p> <p><strong>Scaling with Community Support: Bring your own classroom</strong></p> <p>An innovative aspect of CodeRefinery's approach to online workshops is the collaboration with local partners to scale the workshop experience while maintaining a sense of community. Local partners organize viewing rooms, either online or in-person, where <strong>learners can gather to watch the live stream, discuss the material, and collaborate on exercises</strong>. A local team leader facilitates discussions and provides learners with support and encouragement.</p> <p>This setup not only scales the workshops to accommodate a larger number of learners but also preserves the interactive and community-centric atmosphere of smaller workshops. It encourages learners to learn from each other, share their experiences, and apply the skills they are acquiring in a supportive group environment. Through the support from a local team lead from the same organization, possibly even the same domain, discussions can be more comfortable and targeted on learners own work.</p> <p>Local partners have the flexibility to engage in the workshop preparation and organization as much as they wish, though it is not required. This also means that a local partner can provide their learners with a full workshop experience, with possible tailored discussions, without the need for local instructors or the organizational burden of organizing a full workshop. This way, "bringing your own classroom" to a CodeRefinery workshop can also serve as a testbed for offering this type of course; if a community responds well to certain topics of the workshop, an organization could expand their own course offering based on the experiences collected with us, e.g. by adapting CodeRefinery lesson materials to their own need. We offer a one-hour onboarding session prior to the workshop to orient you on the workshop proceedings and share insights on managing a local team. This session also provides ample opportunity for questions and discussions. Following the workshop, we actively seek feedback from both learners and local hosts, including team leads. This iterative process has been invaluable in refining and enhancing the workshop experience over time.</p> <p><strong>Bring Your Own Classroom Experiences from Previous Workshops</strong></p> <p>Paula Martinez Lavanchy, TU Delft:</p> <blockquote> <p>Our collaboration with the CodeRefinery initiative started in 2020, when we collaboratively organised a Train-the-Trainer activity and co-organizing a CodeRefinery online workshop where TU Delft researchers joined as participants and our data stewards and research software engineers joined as helpers. Since then, we have been ‘bringing our own class’ to the CodeRefinery workshops by joining the streaming of the lessons from the classroom with our participants and helpers.</p> </blockquote> <blockquote> <p>The CodeRefinery initiative has helped us and benefit TU Delft researchers in several ways:</p> <ul> <li>The possibility of joining the workshops allowed us to advance with the implementation of our Vision for Research Data &amp; Software management training and the implementation of TU Delft Research Software Policy by providing high quality and well-received training on FAIR software practices.</li> <li>The involvement of our data stewards, software engineers and trainers as helpers in the CodeRefinery workshops have also provided them with a great opportunity to continuously improve their skills and learn from this great community.</li> <li>The CodeRefinery learning materials are openly available and of excellent quality. We often refer our researchers to use them as consultation materials on our websites and/or guides.</li> </ul> </blockquote> <p>Lisanna Paladin, EMBL:</p> <blockquote> <p>We represent an established training entity within our institute (EMBL), and decided to present your workshop in the same way we present ours: adding your event to our calendars, having an internal registration to sort out rooms, and explaining that we will have the only role of helpers during your streamed lessons. I think that this worked well in advertising the opportunity and providing locally the essential pre-workshop installation assistance, but it posed a significant challenge: those that didn’t read carefully the workshop description on our website expected us to be the instructors and higher levels of interactivity with them. Besides this point on expectations management, I think your format really allows to reach the biggest possible audience, while also fostering the creation of local communities. We had in-room discussions during the breaks and created a local chat channel for the participants. That was used also in the following days while they were testing the skills learned on their setups. We were inspired by your format in designing ours for the BioNT project.</p> </blockquote> <p>Candy Eugenie Charlotte Anquetil Ep Deck, NTNU:</p> <blockquote> <p>First of all, I personally think that CodeRefinery is an excellent way to get familiar with Git. I am myself an engineer working in academia and helping other in everyday task. I took this course in 2021 and at first, I did not really know what to think about it ... I thought it was a lot of informations and I was a bit scared that I would have missed something. However, because all the materials are available online, I knew it was possible to go back and redo things if needed. As a person taking the course from home during the pandemic I thought it was a bit difficult to motivate myself all along the 6 half days. This is probably why I thought it could be interesting to organize rooms here at NTNU in order to have people sitting, talking, sharing and helping each other, ... One of the biggest challenge is to keep the whole classroom from first to last day ... I think it's impossible 🙂 I think different reasons can be cited here :</p> <ul> <li>some people are going to conferences (I had the case where someone took the 2 first days and left afterwards)</li> <li>some have teaching duties</li> <li>some are taking other mandatory courses (This might be relevant to PhDs)</li> <li>some people think they are too good and do not need to take the course and drop it (which I think is a mistake)</li> <li>some people think they are not good enough (same remark here) ... they find the path too fast but they can easily catch up during the breaks when we help onsite.</li> <li>some people here register and do not bother showing up (This is one of of the free workshop) ... or come the first day and leave then.</li> </ul> </blockquote> <blockquote> <p>6 half days is time demanding. I would assume the impact would be better if we sort of organise something like what is coming up in Gothenburg (August 27-29, 2024) People taking the workshop here at NTNU ... from beginning to end (more or less) are usually super happy and enthusiastic when it ends [...] I really think people taking the course learned a lot. I would assume that in person course would definitely be more successful ... However, I understand the difficulty when the instructors come from different countries and when you want to offer the workshop for free !</p> </blockquote> <p>Jakob Sauer Jørgensen, DTU:</p> <blockquote> <p>I am a Senior Researcher at the Technical University of Denmark (DTU). On two occasions I have participated in multi-day online CodeRefinery workshops as the local facilitator: In Oct. 2020 with a learner group of six and in Mar. 2024 with a learner group of seven, in both cases a mix of postdocs, PhD, MSc and BSc students. (I have also participated in two other CodeRefinery focused workshops on unit testing in 2021 and “Train the Trainer” in 2024.)</p> </blockquote> <blockquote> <p>Both workshops were a great success. We organized a physical room with everyone around one big table attending together in a kind of hackathon style, with our employer kindly sponsoring lunch and coffee to keep us going. Through the CodeRefinery online training, my participants were taken from no or very basic knowledge of scientific coding tools and practices to using version control, unit tests and collaborative workflows in the scientific work. I can tell it has helped them in their individual projects and have also been instrumental for a joint effort of a python library we are developing together. The online lecture format with plenty of hands-on exercises worked really well. I had not tried the format with being a local facilitator before and on the first run was a bit nervous if I would be able to “answer everything” and make it a productive event. But it worked really well, there was a prep meeting before the event and lots of support throughout in the form of expert helpers checking in on us in our online breakout room as well as the ingenious collaborative document for asking questions and receiving answers live (I have adopted this technique in online workshops I have run since myself). This made my job as local facilitator very straightforward and it was my impression that participants also felt very well supported through the combination of the local facilitator as a first contact and then further online support. On the second run in 2024, there wasn’t a breakout room and no expert helper coming to see us due to a change in the teaching setup, but it wasn’t a problem as still the format with the collaborative document plus the local facilitator provided plenty of support.</p> </blockquote> <blockquote> <p>I think the most challenging part for me was perhaps on the second run to facilitate the second of the two weeks, where the format had just been changed to less hands-on exercise based and more discussion based. I didn’t feel so well prepared for what was coming (to be fair I hadn’t had much time to prepare) and I think engagement from my team was a bit less that week. I think the material had perhaps just been reworked and there were some suggestions given and I could probably have prepared more – perhaps there is a way to facilitate this a bit more centrally.</p> </blockquote> <blockquote> <p>In general, I believe attending these workshops as a group helped tremendously compared to attending individually (and compared to my fall back solution of teaching people individually which is always less effective due to other commitments, distractions etc.) due to being able to learn together and discuss in person with team mates.</p> </blockquote> <p>If YOU have hosted your own classroom or have attended a local classroom at a CodeRefinery workshop, please share your feedback with us via [email protected]. We will continuously add it to this blogpost.</p> <p><strong>Many Ways to Join the Experience</strong></p> <p>CodeRefinery’s workshops are more than just educational events — they are a step towards more open and collaborative research practices. You can get involved as a learner, team leader, or local partner. We welcome your participation!</p> <p>If you can’t join us directly but want to support our mission, consider becoming a <a rel="external" href="https://coderefinery.org/join/individuals/#coderefinery-ambassador">CodeRefinery ambassador</a>.</p> <p>To stay updated on upcoming workshops and opportunities, visit the <a rel="external" href="https://coderefinery.org">CodeRefinery website</a> and/or subscribe to the <a rel="external" href="https://postit.csc.fi/sympa/subscribe/coderefinery">CodeRefinery newsletter</a>. Let’s work together to advance FAIR research software practices!</p> <p>If you’re interested in bringing your own classroom to our next workshop, contact us at [email protected] .</p> <p>References to previous blog posts discussing the approach:</p> <ul> <li><a rel="external" href="https://coderefinery.org/blog/workshop-plan/">Workshop format development discussion</a></li> <li><a rel="external" href="https://coderefinery.org/blog/2022/11/28/teams/">Teams in CodeRefinery workshops</a></li> <li><a rel="external" href="https://coderefinery.org/blog/2022/11/07/reverse-hybrid/">Discussion on the "reverse hybrid" approach</a></li> </ul> Results from our 2024 post workshop survey 2024-08-10T00:00:00+00:00 2024-08-10T00:00:00+00:00 Unknown https://coderefinery.org/blog/2024/08/10/post-workshop-survey/ <!-- toc --> <h2 id="about-this-survey">About this survey</h2> <p>In early 2024 we sent out a survey to participants of our workshops from 2022 and 2023. We received 129 responses and this blog post summarizes the findings.</p> <p>You can also browse the <a rel="external" href="https://github.com/coderefinery/2024-post-workshop-survey/blob/main/form.pdf">survey questions</a> and the <a rel="external" href="https://github.com/coderefinery/2024-post-workshop-survey">Jupyter notebook</a> which generated the plots. We have archived the results <a rel="external" href="https://doi.org/10.5281/zenodo.13292363">on Zenodo</a>.</p> <p>For each plot we will also provide a summary in text form right below each plot. Further below you can find answers to free-form questions as well as suggestions for improvement which we received from the survey participants.</p> <p>One thing we did not do with the answers was to try to cross-correlate questions (for instance to correlate feedback with career stage or academic discipline).</p> <p>We are very grateful for the feedback and suggestions and we will use them to improve our workshops in the future. We also appreciate very valuable input on how to improve survey questions by experts at RISE Research Institutes of Sweden.</p> <h2 id="how-much-time-have-you-saved">How much time have you saved?</h2> <p><img src="https://raw.githubusercontent.com/coderefinery/2024-post-workshop-survey/main/notebook/time-saved.png" alt="Plot estimating time saving" /></p> <p>In your estimate, how much time per month have you saved as a result of attending a CodeRefinery workshop?</p> <ul> <li>No time saved: 20</li> <li>Minutes: 32</li> <li>Hours: 59</li> <li>Days: 17</li> </ul> <h2 id="is-your-code-more-reusable">Is your code more reusable?</h2> <p><img src="https://raw.githubusercontent.com/coderefinery/2024-post-workshop-survey/main/notebook/reusable.png" alt="Plot about whether code is more reusable" /></p> <p>After attending the workshop, would you judge your code to be more reusable or not more reusable?</p> <ul> <li>My code is more reusable: 90</li> <li>My code is not more reusable: 9</li> <li>Not sure: 30</li> </ul> <h2 id="has-it-become-easier-to-collaborate">Has it become easier to collaborate?</h2> <p><img src="https://raw.githubusercontent.com/coderefinery/2024-post-workshop-survey/main/notebook/collaboration.png" alt="Plot about whether collaboration is easier" /></p> <p>After attending the workshop, has it become easier or not for you to collaborate on software development with your colleagues and collaborators?</p> <ul> <li>Collaboration is easier: 91</li> <li>Collaboration is not easier: 6</li> <li>Not sure: 32</li> </ul> <h2 id="have-you-introduced-your-colleagues-to-new-tools-and-practices">Have you introduced your colleagues to new tools and practices?</h2> <p><img src="https://raw.githubusercontent.com/coderefinery/2024-post-workshop-survey/main/notebook/colleagues.png" alt="Plot about whether colleagues have been introduced" /></p> <p>Have you introduced one or more of your colleagues to new tools or practices as a result of the workshop?</p> <ul> <li>I have introduced one or more of my colleagues to new tools or practices: 79</li> <li>I have not introduced one or more of my colleagues to new tools or practices: 33</li> <li>Not sure: 16</li> </ul> <h2 id="how-likely-are-you-to-recommend">How likely are you to recommend?</h2> <p><img src="https://raw.githubusercontent.com/coderefinery/2024-post-workshop-survey/main/notebook/recommending.png" alt="How likely are you to recommend?" /></p> <p>How likely is it that you would recommend CodeRefinery workshop to a friend or colleague?</p> <ul> <li>10: 64</li> <li>9: 21</li> <li>8: 24</li> <li>7: 11</li> <li>6: 3</li> <li>5: 1</li> <li>4: 1</li> <li>3: 3</li> <li>0: 1</li> </ul> <h2 id="pre-recorded-lectures-live-online-teaching-or-in-person-teaching">Pre-recorded lectures, live online teaching, or in-person teaching?</h2> <p><img src="https://raw.githubusercontent.com/coderefinery/2024-post-workshop-survey/main/notebook/pre-recorded-or-live-or-in-person.png" alt="Would you prefer pre-recorded lectures, live online teaching, or in-person teaching?" /></p> <p>Would you prefer pre-recorded lectures, live online teaching, or in-person teaching?</p> <ul> <li>I would prefer pre-recorded lectures combined with live discussions: 36</li> <li>I would prefer online teaching (lectures are live): 62</li> <li>I would prefer in-person teaching: 30</li> </ul> <h2 id="what-would-be-the-ideal-format">What would be the ideal format?</h2> <p><img src="https://raw.githubusercontent.com/coderefinery/2024-post-workshop-survey/main/notebook/format.png" alt="What would be the ideal format for you?" /></p> <p>What would be the ideal format for you?</p> <ul> <li>One week with half days (3 or 4 half-days): 32</li> <li>One week with full days (3 or 4 full days): 13</li> <li>Two weeks (6 half-days): 25</li> <li>Two weeks (6 half-days) but split into two separate logical courses: 24</li> <li>Lesson series over 6 weeks with one session per week: 17</li> <li>Lessons are available in a catalogue of videos and can be followed anytime: 18</li> </ul> <h2 id="participation-style">Participation style</h2> <p><img src="https://raw.githubusercontent.com/coderefinery/2024-post-workshop-survey/main/notebook/participation-style.png" alt="Participation style" /></p> <p>Participation style</p> <ul> <li>Individual learner: 95</li> <li>Learner in a team: 15</li> <li>Team leader/ helper (online): 9</li> <li>Team leader/ helper (in person): 8</li> </ul> <h2 id="career-stage">Career stage</h2> <p><img src="https://raw.githubusercontent.com/coderefinery/2024-post-workshop-survey/main/notebook/career-stage.png" alt="Career stage" /></p> <p>Career stage</p> <ul> <li>Undergraduate student: 3</li> <li>Graduate student/ PhD student: 63</li> <li>Postdoc: 18</li> <li>Researcher: 19</li> <li>Professor: 4</li> <li>Research software engineer/ Scientific programmer: 12</li> <li>Industry: 4</li> <li>Other: 6</li> </ul> <h2 id="academic-discipline">Academic discipline</h2> <p><img src="https://raw.githubusercontent.com/coderefinery/2024-post-workshop-survey/main/notebook/academic-discipline.png" alt="Academic discipline" /></p> <p>Academic discipline</p> <ul> <li>Physical Sciences: 30</li> <li>Earth and Related Environmental Sciences: 18</li> <li>Biological Sciences: 13</li> <li>Chemical Sciences: 11</li> <li>Computer and Information Sciences: 11</li> <li>Other Engineering and Technologies: 6</li> <li>Health Sciences: 5</li> <li>Psychology: 4</li> <li>Mathematics: 4</li> <li>Mechanical Engineering: 3</li> <li>Civil Engineering: 3</li> <li>Environmental Engineering: 3</li> <li>Medical Engineering: 2</li> <li>Medical Biotechnology: 2</li> <li>Clinical Medicine: 2</li> <li>Other Medical and Health Sciences: 2</li> <li>Other: 2</li> <li>Other Social Sciences: 2</li> <li>Chemical Engineering: 1</li> <li>Electrical Engineering, Electronic Engineering, Information Engineering: 1</li> <li>Economics and Business: 1</li> <li>History and Archaeology: 1</li> <li>Nano-technology: 1</li> <li>Other Natural Sciences: 1</li> </ul> <h2 id="has-anything-else-changed-in-how-you-write-code-for-your-research-after-attending-the-workshop">Has anything else changed in how you write code for your research after attending the workshop?</h2> <ul> <li> <p>I started doing documentation in Read the Docs and it really makes the difference. Thank you!</p> </li> <li> <p>Usage of documentation with sphinx to pages planned, not done for now.</p> </li> <li> <p>I learned to use Git and GitHub.</p> </li> <li> <p>Optimized coding.</p> </li> <li> <p>Modularity, smaller functions.</p> </li> <li> <p>I use Git extensively since attending the workshop.</p> </li> <li> <p>GitHub, Bash, Python, and others were very useful even if many things I did already know in advance.</p> </li> <li> <p>Especially code documentation improved a lot as a consequence of the course.</p> </li> <li> <p>I use Git for myself and it is nice, but I think so much depends on your supervisors, so ... there is little leverage for me to change things.</p> </li> <li> <p>When I don't know how to do something, I use your lesson material as a reference.</p> </li> <li> <p>I think I am a lot more confident when writing code now.</p> </li> <li> <p>I write my code so that it is more easier to read by others.</p> </li> <li> <p>I write more cleaner code, I think. I have a better understanding of testing routines, though haven't incorporated them yet myself.</p> </li> <li> <p>Commenting and code structure.</p> </li> <li> <p>My code is more streamlined and elegant when it comes to reproducibility.</p> </li> <li> <p>More comments, splitting files in separate notebooks, etc.</p> </li> <li> <p>Learned to use Git and GitHub better.</p> </li> <li> <p>I have changed some of my earlier code to be more "modular", that it is easier and quicker to run. At least that. Workshop has also made some changes in how I think about coding, that will probably show in my future work. So, the workshop felt very useful.</p> </li> <li> <p>Give more emphasis to code structure (architecture) and adopting a consistent way of writing code.</p> </li> <li> <p>I have gotten better at using functions in code, previously it was much more script-esque. I have referred several junior colleagues to your workshops as well (and they've also found them valuable).</p> </li> <li> <p>I try to be tidier but it is hard.</p> </li> <li> <p>Started using Git.</p> </li> <li> <p>I have improved my reusability and documentation of my codes.</p> </li> <li> <p>I thank my past self for writing such clear codes now.</p> </li> <li> <p>Considering the latest workshop, the most important topic for me is the "How to document your research software". After the workshop, I have used "GitHub Pages" and "GitHub Actions" for the main documentation of the project that I am currently working on.</p> </li> <li> <p>I document my code more thoroughly.</p> </li> <li> <p>I didn't know how to use git version control before. Now I find it so useful!</p> </li> <li> <p>Better documentation + Easier to test.</p> </li> <li> <p>I have started writing more modular code and I use git more diligently, too.</p> </li> <li> <p>I use Git in much more sophisticated way and enjoy it!</p> </li> <li> <p>I think more on the potential reader of my code and make it more comprehensible.</p> </li> <li> <p>It is hard to tell, since I took CodeRefinery in the beginning in my PhD. I think the focus on tests and test-driven development has had a good impact on my coding.</p> </li> <li> <p>The most important outcome I got from CodeRefinery was learning version control.</p> </li> <li> <p>I am way more careful to commit regularly to my repositories and keep track of changes better.</p> </li> <li> <p>No. But I am mainly an experimental scientist. Coding isn't a big part of my work.</p> </li> <li> <p>I use Git more consistently and I learned that making my code more easily understandable does not in fact cost me as much more time as it saves. I have known that I have room to grow for a long time, but would like to mention that just the fact that I finally made time for the workshop and I focused on developing my coding for a few days helped as well.</p> </li> <li> <p>I try to write more functions to reuse code for multiple purposes. Furthermore, I've started using virtual engines.</p> </li> <li> <p>Haven't coded a lot since then so hard to say.</p> </li> <li> <p>I write self explanatory commit messages.</p> </li> <li> <p>I back up in git repositories almost all my code.</p> </li> <li> <p>I try to document my code as I am writing it.</p> </li> <li> <p>I am just starting to apply the information from "HPC Best Practices." From previous workshops, it has been a useful reference point to discuss collaborative workflow with colleagues.</p> </li> <li> <p>My code was always a mess that was meant to be solely my personal playground. The workshop definitely changed my mindset about it - now I think in the process of what is the best way to write the code (and comment it) so it can be used by other people without any (or at least, big) difficulties. I don't use Git actively at the moment, but it was great to receive the necessary toolkit for efficiently working with it. I think I will definitely need it at some point!</p> </li> <li> <p>I've been trying to use Git for all of my projects.</p> </li> <li> <p>A lot has changed on the way how I run code and test it. I attended code refinery while I was still new to programming so it was difficult to put into use the learning from code refinery. Now that I actually do coding for my research, I expect to make the most of the workshop.</p> </li> <li> <p>I am using Snakemake now. Right now I think it might not speed up my work because I am still learning, but I think the benefits will come over time.</p> </li> <li> <p>Making my codes easier to share, comment them and version control.</p> </li> <li> <p>It maybe not directly related to the code itself but I've learned a lot of new what is always very beneficial in this area.</p> </li> <li> <p>Slightly. I was aware of much already in the course.</p> </li> <li> <p>I don't have a lot of versions of my code anymore. I have my codes in a Git repository that can be shared with my publications.</p> </li> <li> <p>I can write code more compactly and with high performance.</p> </li> <li> <p>I tend to write more functions with documentation and test units.</p> </li> <li> <p>More testing and better documentation.</p> </li> <li> <p>I try to create new Git branch for every new line of development to always have a working version of the code.</p> </li> <li> <p>I haven't been writing a lot of code since the workshop so I haven't really had a chance to put everything into practice, but I'm trying to create a project environment for each project and I have been documenting my working process in RMarkdown notebooks. The notebooks have been really helpful for my research process.</p> </li> <li> <p>I am trying to keep good practices in mind. I am trying to use proper workflows (raise issue ==&gt; create branch ==&gt; deploy fix ==&gt; push ==&gt; merge request), etc.</p> </li> <li> <p>Not after this workshop just when I tried it in my own projects.</p> </li> <li> <p>I use more arrays, which speeds up my work a lot.</p> </li> <li> <p>I try to use GitHub now. try to do at least some version control.</p> </li> <li> <p>Better commenting.</p> </li> <li> <p>It has been easier to get to know other's code projects because I have learned some of the conventions eg. in naming.</p> </li> <li> <p>Now I use Git for managing the code folders.</p> </li> <li> <p>I tried to follow the rules to make it more reusable.</p> </li> <li> <p>I am more organised thanks to the use of Git.</p> </li> <li> <p>No.</p> </li> <li> <p>More focus on version control and testing.</p> </li> <li> <p>My code is still so bad that I haven't benefited from it yet. But I am definitely going to integrate it. Actually, thanks for asking, I will just get a few words of advice from my colleague on how best to apply what I learned at your workshop! :)</p> </li> <li> <p>Made life easier when I work with git tool.</p> </li> <li> <p>For me trying to write more readable and reusable code is taking a bit more time at the moment, but that is because I do not write code very much so I take a lot of time planning the code and the parts and how they are most fluently glued together. So I expect it to become easier and take less time with practice.</p> </li> <li> <p>I'm actively trying to use Git, and back-up my projects (code, useful articles) in my personal GitHub. I try to update it and, though I've not done so yet, I intend to use tags to keep track of milestones along the project.</p> </li> <li> <p>I started using Git on all my projects.</p> </li> <li> <p>I started using renv to track which version of packages I am using.</p> </li> <li> <p>Forcing myself to write function description prior to actually writing the function.</p> </li> <li> <p>Creating all code under Git control.</p> </li> <li> <p>Trying more modular approaches.</p> </li> <li> <p>I think my code now is modular. The way I organize my repositories reflects it too.</p> </li> </ul> <h2 id="what-topic-s-should-we-add-to-our-workshops">What topic(s) should we add to our workshops?</h2> <p>[Answers like "None", "Nothing", "Everything was on point", etc., are not shown in the results below.]</p> <ul> <li> <p>More advanced topics on GitLab.</p> </li> <li> <p>Hands-on with setting up, training and running AI-models.</p> </li> <li> <p>Java APIs.</p> </li> <li> <p>Java for beginners.</p> </li> <li> <p>Automation with Azure.</p> </li> <li> <p>OOP with Python.</p> </li> <li> <p>Xarray and/or similar useful libraries</p> </li> <li> <p>Some stuff related to Quantum Computing could be quite interesting. Also some more "technical computer skills" (how its works by inside, compilations..) could be interesting.</p> </li> <li> <p>It would be good if in the workshop you also showed how to connect GIT to a private repository on GitHub and later how to synchronize such a connection with VS Code or RStudio.</p> </li> <li> <p>I have not managed, unfortunately, to make git a regular part of my workflow. For that, I find that a short revision few weeks after the course would be useful.</p> </li> <li> <p>Linting/debugging and maybe more time for testing.</p> </li> <li> <p>Besa training.</p> </li> <li> <p>Matlab training.</p> </li> <li> <p>Python training.</p> </li> <li> <p>Visualisation with Python, Matplotlib of gridded data (thinking about maps, projections). And also setting up figures with multiple plots. Smart ways to get reusable code for creating figures.</p> </li> <li> <p>Processing of non-linear timestamp data; Combination of float, string, object data in the same data analysis.</p> </li> <li> <p>The actual pieces of code shown were minimal and went quite fast whereas there was a lot of discussion in very general analogy level which wasn't so helpful.</p> </li> <li> <p>Could mention VSCode's version control instead of just using the terminal.</p> </li> <li> <p>Git (always useful).</p> </li> <li> <p>Python: managing problem with installation packages.</p> </li> <li> <p>Python: debug (within some environment: Spyder (?).</p> </li> <li> <p>How to use Google Colab.</p> </li> <li> <p>Maybe: Docker / code ocean ...</p> </li> <li> <p>Maybe more on organizing "analysis script" type projects - at least where I am this is a more common than developing software packages.</p> </li> <li> <p>I think the program was good, but the Git part was most useful.</p> </li> <li> <p>I think the current topics are very good. I felt like the course was a nice introduction to all the topics, even for the length of it it felt a bit crowded, so I think it is good as it is.</p> </li> <li> <p>VS Code and GitHub Copilot or using AI for coding.</p> </li> <li> <p>I know that GitLab Pages and GitLab CI have similar workflows but you might also consider creating some examples for those alternatives as well.</p> </li> <li> <p>Maybe something about reproducibility (like Docker containers etc.) or code publications beyond Zenodo.</p> </li> <li> <p>A small note on how to correctly version-control Jupyter notebooks would be useful.</p> </li> <li> <p>It would have been nice to spend a couple of minutes on GitHub Desktop (not all of us are Terminal fans).</p> </li> <li> <p>Build systems: For example Make or CMake.</p> </li> <li> <p>HPC: What are supercomputers and how to use them. What are GPUs, how to program and use them.</p> </li> <li> <p>Object Orient Programming (for Python).</p> </li> <li> <p>Use of AI tools for coding.</p> </li> <li> <p>Perhaps package building for Python? Or a practical example of Docker application? But this is more for a subsequent workshop, I would not remove anything from the workshop as I attended it.</p> </li> <li> <p>Go further on how to browse some else's code.</p> </li> <li> <p>Further on recovery options of erroneous commits.</p> </li> <li> <p>A bit on debugging.</p> </li> <li> <p>More than additional topics, interactive/exercise segments should be added after topics to reinforce learning. This was more the case in earlier workshops than the day 1 HPC best practices workshop.</p> </li> <li> <p>In terms of content covered, although challenging, more concrete examples on how to find the right amount of memory and CPUs to allocate a job would be incredibly valuable.</p> </li> <li> <p>For the general CodeRefinery workshop, I think a "putting it all together" unit, including hands-on exercises, would be incredibly helpful, and almost essential, to see the extent of a baseline application of the knowledge included.</p> </li> <li> <p>Since Visual Studio code is quite popular editor it would be good to teach running Jupyter notebooks in Visual Studio Code.</p> </li> <li> <p>The courses are very complete, perhaps something about dataset sharing.</p> </li> <li> <p>ML maybe =)</p> </li> <li> <p>Something about docker maybe? It's used more and more in my experience.</p> </li> <li> <p>Perhaps a couple of more advances focused workshops of advances git to save time and make it easier to manage code and collaborating.</p> </li> <li> <p>Code for publishing.</p> </li> <li> <p>PEP 8 style.</p> </li> <li> <p>Maybe for more advanced courses: Object based coding.</p> </li> <li> <p>Functionalizing a code.</p> </li> <li> <p>I think it is just right. Adding more may be too overwhelming for a beginner.</p> </li> <li> <p>Testing.</p> </li> <li> <p>Refactoring.</p> </li> <li> <p>Management in general (partly done already).</p> </li> <li> <p>I would have liked to spend more time on reproducible environments.</p> </li> <li> <p>Difficult to know. I recently would have benefited from knowing more about (c)cmake, but this becomes very specific. Git is likely the one thing that has most general applicability from your education suite.</p> </li> <li> <p>More focus on writing statistical code (as opposed to software).</p> </li> <li> <p>The topics look fine the overall organization of the workshop was a limiting factor. There were too many participants and it got chaotic due to the limited number of teachers. Maybe CodeRefinery should focus on quality rather than on quantity, for instance deliver courses with reduced number of participants on-line. Also, CodeRefinery can coordinate with universities where local instructors could teach the courses locally.</p> </li> <li> <p>Conda environments.</p> </li> <li> <p>Using pycharm for some code development and version control.</p> </li> <li> <p>More testing and how to switch from chaotic version control to a good one. Now there is only from scratch, but it would be helpful to go over from midpoint.</p> </li> <li> <p>How to use Chatgpt to assist coding.</p> </li> <li> <p>Using a IDE for Python programming: Notebook &amp; Git/Github integration, debugging, etc.</p> </li> <li> <p>Docker or containerization in general.</p> </li> <li> <p>How about software design for research? How to write reusable and maintainable code when you don't know today what you need tomorrow, or when students, who may have been sole authors, move on.</p> </li> <li> <p>More examples of Pull requests, forks and upstream repositories or local repositories.</p> </li> <li> <p>More advanced topics on git collaboration.</p> </li> <li> <p>Since I work with R I would have liked to get more R specific information. But I can see how it can be difficult to add specific info if everyone uses a different language.</p> </li> <li> <p>Conda vs mamba, module management?</p> </li> <li> <p>Code architecture and data repository architecture and management.</p> </li> </ul> <h2 id="what-topic-s-should-we-remove">What topic(s) should we remove?</h2> <p>[Answers like "None", "Nothing", "Everything was on point", "All the topics are relevant", etc., are not shown in the results below.]</p> <ul> <li> <p>The course is very good as it is ... However, The 6 half days over 2 consecutive weeks is not very convenient for some people here ... However, I understand the difficulty to bring together online helpers and instructors. You are doing a good job ! Keep going !</p> </li> <li> <p>Reproducible research and social coding are a little vague for my taste. So if you need more time, I'd skip them.</p> </li> <li> <p>Jupyter</p> </li> <li> <p>The Open Science workshop day has a lot of potential, but there is too little time with too few interactions with too many topics to make a difference. The exercises are not very engaging and you did not go deep enough in the aspects you try to cover.</p> </li> <li> <p>Jupyter notebook, because Python is too slow.</p> </li> <li> <p>I attended the workshop about Git and was surprised that also other topics were covered. Maybe have shorter, more focused courses instead of the current format.</p> </li> <li> <p>In the first workshop I attended, the general code refinery workshop, I did not get enough of a grasp on Snakemake, and other tools I understood well mainly because of prior experience. I think this was a wonderful workshop that I have repeatedly recommended to my colleagues, but I think more time should be given to fully try out and cement each tool introduced. I would roughly add 50-100% more time to the course and spend all the added time on more live exercise walk-through and coaching while people work on exercises individually. I would not remove any topics.</p> </li> <li> <p>I found the basic Git introduction to be rather tedious, so I lost my focus and motivation. This made it difficult to prioritize attending the final parts of the workshop over other duties, so I eventually opted out completely.</p> </li> <li> <p>I would much prefer an approach were participants are assumed to be at a somewhat competent level from the get-go. Preparation material could be provided ahead of time for the beginners.</p> </li> <li> <p>Maybe automated testing and modular coding to put that in a separate workshop about improving coding practices.</p> </li> <li> <p>Documentation was a lot of things in a very short time. I say just choose one of the documentation options to explain.</p> </li> <li> <p>None of them. Or split the topic of collaborative programming (Day 1 to 3) and documentation (Day 4 to 6) to two separate courses.</p> </li> <li> <p>I don't think anything should be removed...maybe a second workshop that goes into more depth on reproducibility?</p> </li> <li> <p>How about you ask registrants to pick their three/five/x favorite topics from a list upon registration, and you select the N most popular ones? Perhaps makes it more difficult to prepare, and perhaps makes it more difficult for participants to commit, but since participation (at least online) is a relatively low commitment, maybe it is okay anyway?</p> </li> <li> <p>Maybe a small practice session for some of the presenters - a few of the presenters could improve their communication skills. I know it is a small thing, but just adding 10-20% humor or more energy into a presentation can really significantly affect the learning output for students.</p> </li> <li> <p>For me personally the Jupyter notebooks session was less helpful. But that doesn't mean it should necessarily be removed.</p> </li> </ul> <h2 id="other-feedback">Other feedback</h2> <ul> <li> <p>Let me highlight it here: your format is great! The features I liked in particular:</p> <ul> <li>HackMD and very high quality feedback there</li> <li>type-along sessions</li> <li>dialogue between the two teachers as a format of the lecture. Many thanks for your effort!</li> </ul> </li> <li> <p>It was great that I could watch the few sessions that O unfortunately couldn't attend on video.</p> </li> <li> <p>Thanks a lot for organizing these super useful workshops and for promoting/creating a environment very relaxed and inclusive learning environment.</p> </li> </ul> Citation Information for Open Source Lessons 2024-07-30T00:00:00+00:00 2024-07-30T00:00:00+00:00 Unknown https://coderefinery.org/blog/2024/07/30/lesson-cffs/ <div class="uk-alert-danger" uk-alert> <p>This post was originally published on the <a rel="external" href="https://carpentries.org/blog/2024/07/lesson-cffs/">Carpentries blog</a> and is cross-posted here.</p> </div> <!-- toc --> <p>In this post, co-authored by members of the CodeRefinery project and The Carpentries Curriculum Team, we discuss the current state and potential future applications of the Citation File Format (CFF) for open source lesson projects. The post concludes with a set of recommendations for what information should be captured in a <code>CITATION.cff</code> and how.</p> <h2 id="what-is-the-citation-file-format-cff">What is the Citation File Format (CFF)?</h2> <p>The <a rel="external" href="https://citation-file-format.github.io/">Citation File Format</a> is a plain-text human- and machine readable citation information metadata for software and datasets. The text files contain standardized fields and use the <a rel="external" href="https://en.wikipedia.org/wiki/YAML">YAML</a> serialization language. These fields are listed in a <code>CITATION.cff</code> text file, including but not limited to authors, title, version, identifiers, and type. Type is currently restricted to software and dataset. While lessons are neither software nor a dataset, the metadata collected in the CFF file represents well everything needed in order to also cite lesson materials.</p> <p>Popular tools and platforms like GitHub, Zenodo, and Zotero integrate with the Citation File Format and understand and use <code>CITATION.cff</code> files.</p> <img width="80%" src="/blog/cite-this-repository.png" alt="GitHub displays a 'Cite this repository' pop-up on projects containing a CITATION.cff file."> <p>Creating a new <code>CITATION.cff</code> file is easy with the initializer <a rel="external" href="https://citation-file-format.github.io/cff-initializer-javascript/">CFF-init</a>, but fields need to be filled with care. The webtool can also be used to update an existing CFF: the current version is uploaded to the site, pre-populating fields in the form with the information in the file.</p> <p>CFF can be converted to other formats (APA-like plaintext, BibTeX, CodeMeta, EndNote, RIS, schema.org JSON, .zenodo.json) using <a rel="external" href="https://github.com/citation-file-format/cffconvert">cffconvert</a>. This tool can also be used to validate the CFF file on the command line to make sure that all fields are valid and all required fields are present. The validation step can be automated and part of code review using the <a rel="external" href="https://github.com/marketplace/actions/cff-validator">cff-validator</a> GitHub Actions workflow.</p> <h2 id="why-we-want-to-make-lessons-citable">Why we want to make lessons citable</h2> <p>The motivation to adopt and integrate CFF into lesson metadata and to make lessons citable is first and foremost to give the many contributors, editors, and lesson maintainers credit and hopefully more visibility for their work (which is sometimes paid but often on volunteer basis). Lessons can then be cited and their contributors can point to these on their CVs to highlight their work and the reach of their work.</p> <p>The second motivation is that by assigning a digital object identifier to lessons we have a chance to make the material more persistent and findable beyond the lifetime of projects. Many projects are limited in time and we wish to avoid that knowledge and lessons simply disappear when a project website is discontinued.</p> <p>Citation File Format was conceived to describe software and data, and it is sometimes not obvious how it should translate to "creative" outputs like lessons. Nevertheless, Open Source lessons like those created by the CodeRefinery and Carpentries communities are similar to software projects in many of the ways that matter for CFF: they have a commit history, an open license, multiple versions, publicly-accessible repositories, etc. Another similarity to software and data projects is that it is often not clear how Open Source lessons should be cited by those who have used and benefited from them. The growing ecosystem of tools and platforms that support CFF lead us to conclude that adopting the format is the sensible choice when providing citation information for our lessons.</p> <h2 id="towards-fair-metadata-for-lessons">Towards FAIR metadata for lessons</h2> <p>In future, we hope to establish a yearly release cycle for stable lessons. Lessons in the early stages of development, which can be expected to undergo relatively frequent and dramatic changes, may be released more often and less regularly. Before each release, we plan to verify the <code>CITATION.cff</code> file, and then create a new release with the version tag in the form <code>YYYY-MM-DD</code>.</p> <p>Ideally, the CFF file is continuously modified with pull requests (or merge requests) that bring in lesson changes. With pull/merge requests as the main mechanism to suggest changes, updating the author information becomes part of code/lesson review, and is ideally not postponed to the time when we finalize a new release.</p> <p>A successful adoption of the CFF metadata in lessons could bring us one step closer to have a well-defined FAIR metadata for lessons by reusing some of the information captured in the CFF metadata. For this, we will need to compare metadata specifications of related efforts (e.g. <a rel="external" href="https://bioschemas.org/profiles/TrainingMaterial/1.0-RELEASE">the TrainingMaterial specification from BioSchemas</a>, <a rel="external" href="https://schema.org/Course">the Course specification from schema.org</a>) to find and define a common overlap (however, we might explore this in more detail in a future blog post).</p> <h2 id="next-steps">Next steps</h2> <p>We will start integrating the CFF first into few of our lessons (in order to test and debug the process and to collect more experience and possibly identify new problems that we did not anticipate). Eventually, we will roll this out to all our lessons. Our hope is, that other projects will then follow our example and also contribute to the process itself.</p> <p>The first step towards making a lesson citable is often to collect a list of all contributors and to reach out to them to get their consent to be listed. CodeRefinery plans to do this through GitHub issues tracked close to the corresponding lesson repositories (<a rel="external" href="https://github.com/coderefinery/documentation/pull/270#issuecomment-1673439760">review an example from CodeRefinery</a>). The Carpentries already records community members' consent to be included in lesson publications as part of their profile in the community database, <a rel="external" href="https://amy.carpentries.org/">AMY</a>. (You can log in an update your content preferences any time!)</p> <p>In order to simplify the process of uploading release artifacts to Zenodo we will create a GitHub Actions workflow which will upload the data and the metadata to Zenodo using the Zenodo API. Although further development is required to implement this workflow, <a rel="external" href="https://project.software-metadata.pub/">the HERMES tool</a> may be pivotal in the retrieval, collation, processing, and publication of the relevant metadata.</p> <p>What should be the release artifacts? Our plan is to upload both the lesson sources as well as a generated PDF/HTML from the lesson sources. This workflow will be run on each release creation. Using the Zenodo API rather than uploading the lessons manually offers several advantages, foremost that we can avoid the situation that future updates to a lesson record would be tied to the person who uploaded the first version. By the time we will want to upload the next version, that person might have already left the organization or project. Instead, we should be able to share the permission to update the lesson record and metadata within organizations, projects, and research groups (where applicable).</p> <p>Thanks for reading this far! Do you have ideas for how citation information could be used in our lessons, or feedback about the proposed implementation above? If so, we would be delighted to <a href="mailto:[email protected]">discuss it further</a>. For those interested in the finer details of CFF for lesson projects, the remainder of this post describes the specific information that we recommend to include in the <code>CITATION.cff</code> of an open source lesson.</p> <hr /> <h2 id="what-information-should-be-captured-in-a-cff-for-a-lesson">What information should be captured in a CFF for a lesson?</h2> <p>Based on previous experience and discussions at various conferences and events, we have developed the following list of information that should be captured in the CFF of an open source lesson.</p> <h3 id="authorship-information">Authorship information</h3> <p>Lessons are usually the product of numerous and diverse contributions from a group of people. Contributions can be made in a wide variety of different ways: most directly by writing and committing content to the default branch of the project, but also by providing feedback on pull requests, contributing to discussions on issues and elsewhere that influence the content, and/or providing input during the initial planning/ideation of the project. The list of authors should aim to include everyone who has contributed to the project, <em>whether or not they are represented in the commit history</em>. Although some omissions are inevitable, especially on large/long-established projects, capturing all of these contributions in the author list best represents the open and collaborative nature of such projects. This aligns with one of <a rel="external" href="https://carpentries.org/values/">the core values of The Carpentries community</a>: <em>valuing all contributions</em>.</p> <p>Inclusion of non-committing contributors complicates the definition of an order of authors in the list. Furthermore, we feel that any order based solely on the commit history of the project -- whether by number of commits or number of lines added/deleted -- are imprecise proxies to the magnitude and importance of contributions. Therefore, our recommendation is to provide a list of authors ordered alphabetically by last name.</p> <p>At the time of writing, the Citation File Format specification does not provide a way to describe different types of contribution (e.g. according to <a rel="external" href="https://credit.niso.org/">the CRediT framework</a>). Where a subset of authors should be given further prominence, we recommend capturing this in a published record of the lesson e.g. on Zenodo, where more fine-grained definition of contributor roles is possible. For example, The Carpentries lists lesson Maintainers as Editors in the related Zenodo records. For CodeRefinery, everyone is currently added as Creator.</p> <h3 id="the-project-type">The project <code>type</code></h3> <p>At time of writing, <a rel="external" href="https://github.com/citation-file-format/citation-file-format/blob/main/schema-guide.md">the CFF specification</a> only provides for two types of project: software and dataset. It may not be immediately clear which of these categories a lesson falls into. However, <a rel="external" href="https://github.com/carpentries/sandpaper/issues/508#issuecomment-1700592304">the CFF team recommends that lesson projects specify <code>"dataset"</code> as the <code>type</code> in their <code>CITATION.cff</code> file</a>.</p> <h3 id="references">References</h3> <p>The <code>references</code> field in a CFF can be used to recognise and credit resources that your lesson is based on/draws from/is inspired by. This is a great way to provide attribution to other Open Source content that has been modified/adapted for inclusion in your lesson, literature cited in your lesson, etc.</p> <h3 id="abstract">Abstract</h3> <p>The <code>abstract</code> field of the <code>CITATION.cff</code> should be used to provide a brief description of the lesson, including its target audience and a list of its learning objectives/intended learning outcomes.</p> <h3 id="doi">DOI</h3> <p>A <a rel="external" href="https://the-turing-way.netlify.app/communication/citable/citable-steps.html#dois">Digital Object Identifier</a> (DOI) provides a permanent record of your lesson, usually associated with a particular version published online. It should be included in the lesson CFF, and updated regularly as the lesson evolves, so that any citation made from it will include information about exactly which incarnation of the lesson was used. You might receive a DOI when the lesson is published e.g. in <a rel="external" href="https://jose.theoj.org/">The Journal of Open Source Education</a> and you can also obtain one yourself by creating a Zenodo record for the lesson. We recommend that you publish a lesson to Zenodo early, e.g. when you are ready to teach it for the first time (to use The Carpentries terminology, when it enters alpha testing), and release new versions on the same Zenodo record as the lesson develops.</p> <p>The CFF specification allows for a DOI to be included with the <code>doi</code> field, or as one entry in the <code>identifiers</code> array. Either method is valid -- <code>doi</code> being simpler and more concise, but <code>identifiers</code> being produced when using <code>cffinit</code> to create/update the CFF -- and we make no specific recommendation either way.</p> <h3 id="other-information">Other information</h3> <p>The following fields should also be included in a lesson's <code>CITATION.cff</code>:</p> <ul> <li>license</li> <li>cff-version - use the latest version whenever possible</li> <li>title: descriptive of the content, if possible specifying that this is lesson material</li> </ul> <h3 id="examples">Examples</h3> <ul> <li>Example in a CodeRefinery lesson: <ul> <li><a rel="external" href="https://zenodo.org/records/8280235">Zenodo</a></li> <li><a rel="external" href="https://github.com/coderefinery/documentation/blob/main/CITATION.cff">CFF</a></li> </ul> </li> <li>Example in The Carpentries Collaborative Lesson Development Training repository: <ul> <li><a rel="external" href="https://github.com/carpentries/lesson-development-training/blob/main/CITATION.cff">CFF</a></li> </ul> </li> </ul> Summary of business and financing models -planning session Tromsø 2024 2024-06-17T00:00:00+00:00 2024-06-17T00:00:00+00:00 Unknown https://coderefinery.org/blog/2024/06/17/finance-models/ <h1 id="summary-of-business-and-financing-models-planning-session-tromso-2024">Summary of business and financing models -planning session Tromsø 2024</h1> <!-- toc --> <h2 id="financing-coderefinery-from-reality-to-expectations">Financing CodeRefinery - from reality to expectations</h2> <p>CodeRefinery is receiving funding from the parent organisation <a rel="external" href="https://neic.no">NeiC</a>. That covers two half-time personnel and some operational costs, like travelling. Apart from those two project people, the activities and products of CodeRefinery are largely run and produced by people from organisations who see the value of letting their employees to spend time on CodeRefinery activities. This in-kind model has made all CodeRefinery work possible.</p> <p>CodeRefinery is a project, not a company or organisation (situation Feb 2024). This means we cannot invoice for our work. If some company would like to have tailored training form us and is willing to pay forit, we have no way to handle the transactions.</p> <p>During our meetup at Tromsø Feb 2024 we held a session to brainstorm possible ways to let CodeRefinery operations continue.</p> <ul> <li>We would need a way to invoice.</li> <li>We would not want people to work for free</li> <li>We should be able to accept grant funding</li> <li>Many CodeRefinery team members would like to continue in-kind work</li> <li>People would like multiple different ways of working: in-kind, freelancer, direct employment to name a few</li> </ul> <h3 id="open-source-open-core">Open source – open core?</h3> <p>CodeRefinery is an open project and the outputs are openly licensed with distributed copyright. If we are to introduce paid products and/or services we need to be very transparent of the guiding principles and the business model. One example is the open-core model in software industry, where basic functionality is offered open source and free, but premium features are behind a paywall.</p> <p>Our warm-up exercise in the workshop session was to gather ideas what CR should offer for free, and what possibly could be behind paywall. This is not a definitive list, but something to start the discussions with.</p> <p><strong>CR could offer for free:</strong></p> <ul> <li>General or introductory course and lesson materials, possibly without integration</li> <li>General CR workshop in some format</li> <li>Tutorial videos eg. in YouTube</li> </ul> <p><strong>CR could charge a fee for:</strong></p> <ul> <li>Advanced courses</li> <li>Customised training</li> <li>Courses for private sector</li> <li>Training for organisations that do not contribute to CodeRefinery but want the training</li> <li>In-person events like summer schools</li> <li>Workshop collaborative notes access</li> <li>Technical consultation for research</li> </ul> <h3 id="towards-a-business-model">Towards a business model</h3> <p>For a business model one needs to consider for example the following questions: "Who are our customers?", "What services we offer?", "What are the potential sources of income?", "Who are the other operators in the field?". We filled in a flowchart consisting of Customers, Service Providers and the flows of value in both directions.</p> <p><strong>Potential customer segments</strong></p> <ul> <li>Organisations that want to build the employee competence eg. in version control</li> <li>PhD students and researchers</li> <li>Universities that want to include our topics in their curricula</li> <li>Research projects that want to outsource training work packages</li> <li>Small SaaS startups</li> </ul> <p><strong>Potential services</strong></p> <ul> <li>Courses, workshops or summer schools</li> <li>A lecturer for an university course</li> <li>Bootcamps for companies' new employees</li> <li>Consultation of technical support for research teams or companies</li> <li>Consultation for individuals eg. a monthly zoom call</li> </ul> <p><strong>Potential service providers</strong></p> <ul> <li>A freelancer trainer or RSE</li> <li>An in-kind employee from a partner organisation</li> </ul> <p><strong>Potential income/resources</strong></p> <ul> <li>A partner organisation lets people to work for CR = in-kind contribution</li> <li>Funding from EU or a funding agency <ul> <li>Funding agencies could require projects to get training in reproducible research</li> </ul> </li> <li>Subscriptions eg. Patreon</li> <li>Course/workshop fees</li> <li>Service fees (from eg. consultation)</li> <li>YouTube ad revenue</li> <li>Sponsorships: we advertise a product we think is worth it to our target groups and get paid to do it</li> </ul> <h3 id="next-steps">Next steps</h3> <p>Some of these listed items have more potential than the others – and some of them might have synergies together. Then it comes to the decisions about our vision and guiding principles. Those can indicate whether some of the options listed here don't represent what we want CodeRefiery to be. We (CodeRefinery) could formulate a business plan as a tool to refine the ideas and find out the most feasible solution.</p> Why should your organization support CodeRefinery and how? 2024-06-07T00:00:00+00:00 2024-06-07T00:00:00+00:00 Unknown https://coderefinery.org/blog/2024/06/07/organisation-info-support-cr-how/ <h1 id="why-should-your-organization-support-coderefinery-and-how">Why should your organization support CodeRefinery and how?</h1> <p>There are many courses at universities and on the internet about learning how to code for researchers. But not many teach about sustainable software development or how to collaborate with others.</p> <p>The consequences of this gap are that researchers tend to start from scratch, code on their own, or that a lot of time is spent on figuring out old codes by onself or others instead of spending that valuable time on research.</p> <p>The idea of the CodeRefinery project is to help researchers that already know how to code (in any language) to increase their codes reproducibility and show some tools that can help on this journey.</p> <p>CodeRefinery is a growing training network. We try to make this project more accessible and inclusive. We developed public and freely available and reusable learning and teaching materials on many topics around research software development in order to improve its FAIR-ness (Findable, Accessible, Interoperable, Reusable).</p> <p>Our workshops foster collaborative research/work environment to increase productivity and efficiency. The workshops themselves are interactive online events, to which participants can join individually or in team. Teams usually have some kind of advanced person with them to guide through the exercise sessions.</p> <p>From our point of view, organizations can support the CodeRefinery project in many different ways, as can be seen from the following figure:</p> <p><img src="/blog/CR_organization.png" alt="Figure showing different possibilities for organizations to support the project, description below" /></p> <h3 id="advertise">Advertise</h3> <p>The easiest way to support us is to advertise the workshop to your network. In that way, you can get people that know about FAIR software development back and can start implementing it in their work creating a more collaborative working environment regarding research software. By participating, your organization contributes to improving research software quality.</p> <h3 id="observe">Observe</h3> <p>If you are curious about how these workshops work, you can always send observers: a CodeRefinery workshop is a special event, let your teachers observe how we do things and maybe we can learn a thing or two from each other.</p> <h3 id="teach-with-us">Teach with us</h3> <p>The most valuable contribution for us is to let your experienced employees work on lesson development, or be an instructor on worktime ("contribute in kind"). That way we can learn from each other and everyone can bring in their expertise to make the project sustainable. In-kind contribution can be facilitated by including it as apart of your organisation's culture to develop employee's competence and accelerate knowledge transfer.</p> <h3 id="provide-a-local-team-space">Provide a local team space</h3> <p>If you want to provide a better way of learning together in a CodeRefinery workshop, provide a (virtual or real) room for a team from your institution to join the workshop together ("bring your own classroom"). This facilitates collaborative learning. You can make use of our central registration system or use your own (if you need control over own registration, credits, schedule).We mention all "local breakout rooms" on our webpage, if wished, to maximize outreach for these possibilities.</p> <h3 id="collaborative-workshops">Collaborative Workshops</h3> <p>Within the CodeRefinery community an organization can also collaborate with CodeRefinery partner organizations on other trainings that otherwise could not happen due to missing resources for. In that way we can share the "burden" of teaching. One example for such collaboration: Aalto university HPC kickstart with participants from all over Nordics, partners contribute to teaching and cluster specific instructions</p> <h3 id="user-community">User Community</h3> <p>If you are a part of a specific user community or a project, you can benefit similarly by supporting CodeRefinery.</p> <p>The CodeRefinery team is happy to discuss these or other possibilities further via email or arrange a meeting. Please contact [email protected], if you are interested.</p> <p><em>Together we can improve research software practices, promote collaboration, develop expertise, and establish an inclusive training network!</em></p> In-person meeting summary: Community 2024-04-20T00:00:00+00:00 2024-04-20T00:00:00+00:00 Unknown https://coderefinery.org/blog/2024/04/10/writing-retreat-community.md/ <p>As mentioned in a previous blog post on social media strategy, it is our desire to build and expand the CodeRefinery community around our shared interest in FAIR research software practices. currently, the CodeRefinery community mainly lives in the Zulip chat, which is something we want to expand to our various social media platforms. People that mainly engage in our chat are spread all over the Nordics. Some of these people are even located in the same country, but can live hundreds of kilometers apart. In order to bring the community together and develop an onboarding strategy to the community, we first need to look at what the CodeRefinery community actually is.</p> <h2 id="the-coderefinery-community">The CodeRefinery community</h2> <p>The first question we asked to the participants of the in-person meeting in Tromsø was "What is the CodeRefinery community to you?". Answers:</p> <ul> <li>A place where it feels safe to ask questions around the coderefinery workshop, but also beyond</li> <li>A place to get some interesting tips that i didn't know i needed to know (TIL)</li> <li>RSE (Research Software Engineers) that like teaching</li> <li>A small group of people that found each other and want to make the (research)world a better place + a slightly larger group of people that find the topics more or less interesting and more or less follow what is happening</li> <li>A place to share working experience and interactions with those having similar interest <ul> <li>Brainstroming discussion on varied topics</li> </ul> </li> <li>Place to get feedback and input on ideas and tasks</li> <li>Place to learn things and ask for help</li> <li>Place where there is a lot of discussions going on</li> </ul> <h2 id="zulip-chat">Zulip chat</h2> <p>The level of engagement in the community is largely tied to how much time people spend in the chat, which often is not too much. Everyone already has their own work chat, that needs to be followed, and having all the different chats and platforms can easily get overwhelming.</p> <p>The main reason to engage in the chat is to ask questions and read the answers as well as coordinate CodeRefinery and other than CodeRefinery workshops (often around High Performance Computing (HPC)). The "monday morning hello" (in #general stream) was mentioned as one way of feeling engaged with and welcome by the community.</p> <p>Apart from "not enough time" to follow the chat, also its unorganized nature was mentioned as a reason not to engage. We briefly disucussed that this can partly be solved by using the chat differently, following/unfollowing topics and streams that are of interest to oneself and setting up notifications properly. Another way to limit the information overflow could be to take better care of marking topics as "resolved", when there is nothing to be discussed anymore.</p> <p>We have since been discussing a chat cleanup and reorganization/renaming strategy (to be implemented in early summer '24) and will be sharing tips on how to use Zulip efficiently as blog, event or video. In addition to that, admins will try to be more active in managing the chat. After the reorganization and the addition of an events channel will also try to share more events of interest to the community via chat and our <a rel="external" href="https://coderefinery.org/calendars/">calendars</a> where appropriate.</p> <p>We already implemented a "CodeRefinery for busy people" weekly chat summary, which anyone can sign up to here: <a rel="external" href="https://postit.csc.fi/sympa/subscribe/coderefinery-team">https://postit.csc.fi/sympa/subscribe/coderefinery-team</a>. In addition to that, we will also continue the less frequent (~one email every one/two months) <a rel="external" href="https://postit.csc.fi/sympa/subscribe/coderefinery">newsletter</a>.</p> <h2 id="sharing-the-work">Sharing the work</h2> <p>One big ask from the community was to share the work/tasks more open and completely. We used to have a large list of tasks sorted by amount of time a community member has to spare. While this was considered a good idea, the tasks often lacked description, and so were not taken over by the community. We have therefore started to move the tasks back to the github organization, where all open tasks are assigned to repositories and described in enough detail that anyone in the community could pick up the task. The tasks are also labelled by the time it approximately takes to fulfill the task and urgency. Anyone can find the board under the <a rel="external" href="https://github.com/orgs/coderefinery/projects/7">Coderefinery GitHub organization</a>.</p> <h2 id="community-calls">Community calls</h2> <p>An additional request by the participants for more community engagement, was to restart community calls. So we decided to have some more and more regularly in the future. A challenge to ourselves will be to also make those engaging and worth of spending ones time. These community calls can have a specific topic and/or serve as Q&amp;A and discussion sessions for the community. It is important to us that the community gets something out from them. We also invite the community to shape these calls, by suggesting topics or take over the organization of a call. In order to attract people to the community calls, the topics and dates should be set as early as possible.</p> <h2 id="extending-the-instructor-helper-organizer-pool">Extending the instructor/helper/organizer pool</h2> <p>We also brainstormed ideas for attracting more people to be instructors/helpers/organizers of the CodeRefinery workshop. Since we upscaled the workshop from ~20 people in person workshops to ~200 online participants, being an instructor or helper in the workshop has become more complex. It is less interesting to teach to the stream, which on our end is just a pretty empty Zoom call. Our co-teaching model ensures that the instructor is never alone and the collaborative document is used to influence the teaching, but that does not replace a room full of learners. The current workshop format also seems very complex for newcomers and we have not been offering a train-the-trainer program lately (planned for fall 2024 now! - stay tuned). Due to the sometimes a little bit chaotic planning phase and usually enough team members signing up for the workshop we have not done much active outreach for the workshops lately. For this to work it might be required to contact possible instructors more directly and offer direct mentoring. Which is something we are very keen on providing and making it fun and interesting for everyone to contribute. Again, people need to get something out from it.</p> <h2 id="other-ideas">Other ideas</h2> <p>In order to engage with the community a few other ideas were discussed as well: We could approach different domain communities by visiting their events and presenting CodeRefinery. In addition, we could organize our own info events, targeting different groups to engage more directly. Here, also our close connection to the RSE community could be used more. Another idea was to offer further BYOC (bring your own code) sessions to provide the possibility of interacting with CodeRefinery instructors and asking for support.</p> In-person meeting summary: Onboarding 2024-04-20T00:00:00+00:00 2024-04-20T00:00:00+00:00 Unknown https://coderefinery.org/blog/2024/04/10/writing-retreat-onboarding.md/ <p>In order to provide newcomers to the CodeRefinery community a good experience that inspires them to stay we need to create a welcoming atmosphere and provide a good onboarding.</p> <h2 id="coderefinery-onboarding">CodeRefinery onboarding</h2> <p>Currently, our onboarding procedure varies from case to case. The team at in-person meeting are mainly in-kind contributions to the project that joined the project on own incentive (usually after a workshop) or by being sent by their managers. Everyone got at least one personal meeting with the project manager, which introduced them to whatever was needed at the time. One thing that many of the team mentioned was that they wish they had gotten more introduction to the Zulip chat. ( More on improvement suggestions in the "community" blog post).</p> <p>Team members generally agreed that active participation an interest in strategy and availability to help/teach makes them part of the CodeRefinery team. Everyone present felt well onboarded.</p> <h2 id="roles">Roles</h2> <p>We currently have a few different roles a community member fits into:</p> <ul> <li>team (mostly in-kind contributions and highly motivated individuals, onboarding via team meeting and personal chat with the project manager),</li> <li>instructors (Workshop team leader onboarding or personal onboarding by co-instructor or the workshop organizer, often no further community engagement),</li> <li>helper / team leader (onboarding before each workshop, often no further community engagement),</li> <li>"everyone in chat" (no specific onboarding, unless they use #new-members stream; info from website)</li> </ul> <h2 id="where-to-find-information">Where to find information</h2> <p>We discussed what information potential future community members should get from the website and what should be made available later:</p> <ul> <li>What do I get in return?</li> <li>How do I get started, show me the steps</li> <li>What kind of responsibilities/roles are there in the community</li> <li>How can I help or "I have only half a day this month, where can I help which will be meaningful?"</li> </ul> <p>All those are very good points which we will make sure to inlcude on the website, our project board and the chat redesign (see community blog).</p> <h2 id="the-perfect-onboarding">The perfect onboarding</h2> <p>We also asked the question: "In a perfect world where everything is possible, money and time is not an issue, how would onboarding look?" to see what the ideal onboarding for participants of the meeting would look like. These were the answers:</p> <ul> <li>Join community call -&gt; We have more community calls and better advertising of them planned in the future</li> <li>One manual page which gives overview -&gt; We since created: https://coderefinery.github.io/manuals/onboarding/</li> <li>A video that explains how to join</li> <li>Each new member gets a mentor/buddy who mentors for a while and is their main contact and who connects them to other people</li> <li>In person event</li> <li>Co-teaching with a mentor (as one option)</li> </ul> <p>The mentor system we will try to implement better in the future also beyond the workshop.</p> <h2 id="new-roles">New roles</h2> <p>We also asked if we need to add more roles in the community and what those would be. Most CodeRefinery team members do not have specific roles unless they decide so themselves. Roles that we do not currently have in the community:</p> <ul> <li>Ambassadors; people that could already be called ambassadors are local organizers of teams to watch the CodeRefinery workshop stream and do the exercises together and training coordinators in organizations or projects that help advertising the workshops -&gt; We have since started to implement the <a rel="external" href="https://coderefinery.github.io/manuals/ambassadors/">CodeRefinery ambassador program</a> and plan to invite our known suspects soon. If you want to become an ambassador, please check out the <a rel="external" href="https://coderefinery.org/join/individuals/#coderefinery-ambassador">ambassador section on our website</a>.</li> <li>Board; in order to continue working on CodeRefinery after the project funding ends we need to define who can make decisions</li> <li>Contributors; e.g. lesson material contributors need to acknowledged better (citation file format (.cff) in progress) and</li> <li>Heroes.</li> </ul> <p>We are currently working on fleshing out what it would mean to be a CodeRefinery ambassador, what they can get out from it and how we can support future ambassadors. This could be similar to onboarding a new team member, e.g. via a community call, mentoring or some kind of a welcome package. Whenever we reach out to different research communities and during our workshops we could advertise this role. In the end it should be easy to become an ambassador and people should be able to make it whatever they need it to be.</p> Drafting a governance structure for 2025 and beyond 2024-04-19T00:00:00+00:00 2024-04-19T00:00:00+00:00 Unknown https://coderefinery.org/blog/2024/04/19/drafting-a-governance/ <!-- toc --> <h2 id="executive-summary">Executive summary</h2> <p>CodeRefinery's NeIC sponshorship may be coming to an end, and the feeling is that partners want the collaboration to continue with some sort of structure. In short, we propose to organize as a community project with a steering group of interested partners that could take over CodeRefinery management on 2025-01-01:</p> <ul> <li>CodeRefinery continues with roughly the same vision and mission as now: <ul> <li>We want to promote reproducible science by training and community.</li> <li>We will continue giving courses like we have been doing (but with more possibility of new partners joining and custom teaching styles, including small local courses).</li> </ul> </li> <li>Board: a steering group of organizational partners and some community representatives. <ul> <li>The steering group will meet occasionally to discuss high-level matters and the broad direction.</li> <li>The steering group can make agreements on behalf of CodeRefinery.</li> <li>Updates the governance documents and accepts new organizational partners via majority vote.</li> </ul> </li> <li>Community managers: Coordinate the project on a day-to-day basis. <ul> <li>Appointed by the steering group (with consultation of the community).</li> <li>Handle most of the day-to-day organizational activities (or delegate them).</li> <li>Report to and work with the board.</li> </ul> </li> <li>Community: <ul> <li>Operated as an open-source project with an open community membership of individuals.</li> <li>The board can work with organizational partners to define in-kind contributions and roles.</li> <li>Recognized as decided by board/community managers.</li> </ul> </li> <li>We don't currently plan a separate legal entity just for CodeRefinery.</li> </ul> <p>There are ideas on these matters is below, but there will be much more among the "founding board" as it works towards formally defining a collaboration agreement.</p> <h2 id="mission-vision-and-guiding-principles-early-draft">Mission, vision, and guiding principles (early draft)</h2> <p>(when thinking of these, think "what makes us different from others?")</p> <p><strong>Mission</strong> (what we do and why we do it¸ 2025):</p> <ul> <li>CodeRefinery improves science and research by providing education in the tools of computational science to a diverse audience. <ul> <li>CR empowers XX by providing skills needed for achieving YY through providing training on practical skills.</li> </ul> </li> <li>Fill gaps between academia's lack of training in certain areas.</li> <li>Preparing people and communities for high-performance computing and AI.</li> <li>Foster a culture of FAIR, collaboration and openness in research software practices.</li> </ul> <p><strong>Vision</strong> (what we want to achieve):</p> <ul> <li>We create a highly skilled academic community who can do better, more reproducible science.</li> <li>Our core workshops are a regular recommendation for any students or researchers who does computational research.</li> <li>We have a wide variety of other rotating workshops, organized by partners but with contribution by many.</li> <li>When research projects need extra training, they think of us and our team.</li> <li>Skilled trainers and build knowledge transfer and build competence.</li> <li>Highly skilled researchers and staff.</li> <li>Create a group of good trainers in partner institutes.</li> <li>Bringing academia into digital age.</li> <li>Equip society with tools for collaborative and reusable research.</li> </ul> <p><strong>Guiding principles</strong> (when a difficult decision needs to be made, we invoke the following guiding principles):</p> <ul> <li>At our core, we are an open project and structure our working methods like one. Our outputs are openly licensed with distributed copyright.</li> <li>We optimise for practical usability for those who lack skills in reproducible computational work. We don't try to replace career-oriented IT training.</li> <li>Make people's lives easier (but we need to make this more tangible).</li> <li>When in doubt, do what makes science/research/academics more reproducible.</li> <li>Make it easier for people and organizations to participate.</li> <li>Encourage collaboration when possible to do so.</li> </ul> <h2 id="structure-and-responsibilities">Structure and responsibilities</h2> <h3 id="project-governance-2016-2024">Project governance 2016 - 2024</h3> <ul> <li>Initially: NeIC board</li> <li>NeIC board transfers management to steering group via project directive</li> <li>Project partners each appoint a steering group member</li> <li>Steering group meets 2-3 times per year and makes big picture decisions</li> <li>Day to day decisions by project manager in communication with steering group and project owner (NeIC)</li> <li>Project manager reports to NeIC and project owner and steering group</li> <li>Project manager is responsible for the project budget</li> <li>Project manager tries to get support and consensus from the project team and community</li> </ul> <h3 id="scope-and-responsibilities-for-future-board">Scope and responsibilities for future board</h3> <ul> <li>Strategic and organisational planning</li> <li>Ensuring the effective implementation of community objectives</li> <li>Financial oversight</li> <li>Business plan and budget plan</li> <li>Capacity plan</li> <li>Fostering collaboration among members</li> <li>Name, brand, and public image</li> <li>Steering the lesson portfolio</li> <li>Coordinate community initiatives</li> <li>Manage accounts: Freshdesk, Twitter, Fosstodon, GitHub, domain name, HackMD, Indico, chat, mailing list, GitLab, YouTube</li> <li>Manage the data and data sharing policies</li> <li>Contact point</li> <li>GitLab (maybe)</li> <li>Intellectual property</li> </ul> <h3 id="outline-of-the-structure">Outline of the structure</h3> <ul> <li>Partners: the institutions that collaborate, and unaffiliated individuals.</li> <li>Board: high-level strategy and help. Can be consulted on big decisions and for tricky trade-offs. Within mission statement, delegates all other decisions to community managers.</li> <li>Community managers: Manage day-to-day work and connection with steering group. Build consensus among those doing the actual work for the day-to-day operations.</li> <li>Community: does work</li> </ul> <h3 id="board">Board</h3> <ul> <li>Initial board is one person per organization of the NeIC project.</li> <li>Board decides its future composition, probably once a year.</li> <li>Board confirms partner-level contributions.</li> <li>Board confirms community managers (likely with the community's input) and delegates most daily operation to them.</li> </ul> <h3 id="community-managers">Community managers</h3> <ul> <li>Coordinate most of the day-to-day work.</li> <li>Are responsible to the board, but mainly lead the community in doing the work.</li> <li>Ensure rough consensus and push things forward if it can't be done.</li> <li>Can appoint (=recognize on the website) leads in different areas.</li> </ul> <h3 id="community">Community</h3> <ul> <li>Community doe most of the work, and should be recognized as decided by the community managers and board.</li> <li>This is a volunteer organization, no person has any requirement to do anything.</li> <li>Members are expected to abide by our community standards of cooperation and respect.</li> </ul> <h2 id="working-methods">Working methods</h2> <h3 id="code-of-conduct">Code of conduct</h3> <p>We take our <a rel="external" href="https://coderefinery.org/about/code-of-conduct/">code of conduct</a> as starting point but suggest to adapt it to the governance structure and decision making process.</p> <h3 id="conflict-resolution">Conflict resolution</h3> <p>Questions to be worked out:</p> <ul> <li>What to do if there is conflict within leadership?</li> <li>Conflict within community?</li> <li>Conflict between leadership and community?</li> <li>What if a collaboration partner becomes problematic? (mission, guiding principles, code of conduct)</li> </ul> <h3 id="community-meetings-communication-and-reporting-mechanisms">Community meetings, communication, and reporting mechanisms</h3> <p>This needs to be worked out. Data sharing policy needs to be worked out.</p> <h3 id="amendments-to-the-governance-document">Amendments to the governance document</h3> <p>Board can change based on majority vote.</p> <h3 id="periodic-review-and-evaluation">Periodic review and evaluation</h3> <ul> <li>How often do we review the governance document?</li> <li>How do we evaluate the success of the community and project?</li> </ul> <h2 id="discussion-points-during-the-in-person-meeting-in-february-2024">Discussion points during the in-person meeting in February 2024</h2> <ul> <li>Mission, vision, guiding principles: what is missing?</li> <li>Initial board composition? The NeIC project partners? What if they prefer not to or are inactive? <ul> <li>proportional to activity 2023-2024?</li> </ul> </li> <li>What if a board member leaves?</li> <li>Can community elect a board member? <ul> <li>Should be able to, yes.</li> </ul> </li> <li>What decision necessitates board input? <ul> <li>Initially guiding principles (part of foundation document), in principle anything they haven't delegated to a community manager.</li> </ul> </li> <li>At which level of support should a partner be offered a board seat? <ul> <li>Board decides. Initial principle is "those with in-kind work".</li> </ul> </li> <li>"This is a volunteer organization, no person has any requirement to do anything." - this is currently not the case but maybe we want this to be the case? <ul> <li>I guess that's more for community, rather than paid staff. Paid staff do what their employer says.</li> </ul> </li> <li>Responsibilities for future board: what should be left out or added?</li> <li>Who/what has ownership over intellectual property (IP)? Maybe case-by-case? <ul> <li>case: teaching material publicly available – CC-licence?</li> <li>Transferring IP is probably very hard. Distributed IP is probably needed.</li> </ul> </li> <li>Independent non-profit organization</li> <li>Find the carpentries cooperation model and propose them to be in the board <ul> <li>E.g. Science library of University of Oslo</li> </ul> </li> </ul> <h2 id="inspirations-for-this-document">Inspirations for this document</h2> <ul> <li>NeIC/NICEST2 project governance draft (big thanks to A. Fouilloux)</li> <li><a rel="external" href="https://carpentries.org/blog/2024/02/revisions-to-the-carpentries-governance-structure/">https://carpentries.org/blog/2024/02/revisions-to-the-carpentries-governance-structure/</a></li> <li><a rel="external" href="https://hackclub.com/team/">https://hackclub.com/team/</a></li> <li><a rel="external" href="https://jupyterhub-team-compass.readthedocs.io/">https://jupyterhub-team-compass.readthedocs.io/</a></li> </ul> We have completely changed our Git lessons. Hopefully to the better. 2024-04-19T00:00:00+00:00 2024-04-19T00:00:00+00:00 Unknown https://coderefinery.org/blog/2024/04/19/git-lesson-rewrite/ <!-- toc --> <img width="50%" src="/blog/git-lesson-rewrite.jpg" alt="photo of a white board where we planned the first three workshop days"> <h2 id="status-and-big-picture-summary-of-changes">Status and big picture summary of changes</h2> <p>We have completely changed our Git lessons before the <a rel="external" href="https://coderefinery.github.io/2024-03-12-workshop/">March workshop</a> in which we taught the new format:</p> <ul> <li>Start from GitHub instead of on the command line.</li> <li>Start from an existing repository instead of with an empty one.</li> <li>Only on second course day we move to local work on the laptop.</li> <li>Offer several tracks to participate in the lesson (GitHub, VS Code, and command line) and learners can choose which one they want to follow.</li> <li>Use a new example where we collaboratively edit a cooking recipe book.</li> </ul> <p>You can also have a look at the <a rel="external" href="https://github.com/coderefinery/git-intro/issues/430">issue</a> where these changes were discussed and tracked.</p> <h2 id="motivation-for-this-change">Motivation for this change</h2> <ul> <li>Learners are more likely to start from an existing repo or to already have some project that is not yet on Git</li> <li>Might feel more motivating to see something "real" instead of starting from something empty</li> <li>Many do not work in the terminal but rather in an IDE or editor</li> <li>Making a terminal available on Windows is not always easy</li> <li>Previously we tried to explain basic concepts in a terminal but they might be easier to explain in a web interface</li> <li>It should be possible to participate and learn without a functioning local installation of Git and Bash</li> <li>Give everybody the feeling of accomplishment and everybody should be able to do the most basic Git/GitHub tasks after the 2-3 half days</li> <li>Avoid troubles with main/master naming</li> <li>We introduce forks and pull requests already on day 1: this can free up time for day 3 to do more interesting things there</li> <li>Also the "non-programmers" can benefit from this course</li> <li>In future we might not need "Collaborating and sharing using GitHub without command line" as standalone lesson anymore</li> <li>Gives more opportunity to "sneak in" some branch design discussions</li> <li>Might make the lesson more interesting and fun for new instructors and helpers to join</li> </ul> <h2 id="discussion-points-during">Discussion points during</h2> <p>Metaphors should be so generic that they can apply to literally everyone e.g. inheritance in object-oriented programming can be explained using a family tree. Some potential metaphors: Time machine, photo album, or a detailed diary that documents your project (you can go back to any page to see what you did there). We need to be able to explain git in a short introduction so that people not familiar with git at all. Tie in with a metaphor (as previously mentioned) then create a visual (ideally a video, but could also be an image) to explain that metaphor.</p> <p>We have also discussed whether instead of providing a single course for all, we should have at least two introductions and classify materials into different levels (introductory, intermediate, advanced). For "coders" and future Git power users we might need a "Git masterclass" with all scenarios and command line. For general learners who are interested in version control, we might need a course that focuses on concepts, empowering them, and providing visuals. However, are learners able to self-assess their level?</p> <p>We also noted that it could be useful to modularize the first two days so that they could be swapped without friction.</p> <p>We discussed the risk of oversimplifying the lesson.</p> <p>Executive summary from our discussion session was:</p> <ul> <li>We found the suggested changes would be an improvement but they would need to be worked out in more detail.</li> <li>We were concerned about whether this is doable in terms of preparation time and in doubt post-pone to future.</li> <li>We recommended to modularize to make it possible to re-shuffle and choose.</li> <li>We noted the need to think and elaborate a bit more before we commit to implement this change.</li> </ul> <h2 id="how-did-it-go">How did it go?</h2> <p>We decided to go ahead and implement the change in a massive sprint. It would be nice to be able to post-pone to later "when we have more time" but from the past we know that that time never comes.</p> <p>We were very happy with the new format for days 1 and 2 but then we realized that day 3 also needed to be adjusted to not feel disconnected and repetitive.</p> <p>The new lessons are available at:</p> <ul> <li><a rel="external" href="https://coderefinery.github.io/git-intro/">https://coderefinery.github.io/git-intro/</a></li> <li><a rel="external" href="https://coderefinery.github.io/git-collaborative/">https://coderefinery.github.io/git-collaborative/</a></li> </ul> <p>The feedback was generally positive both from learners and co-organizers. As an instructor I had the feeling that we managed to cover more ground and more exercises in this edition of the workshop than in past years.</p> <p>One downside of the change which happened over two weeks just before the workshop was that it was more difficult for co-instructors and team leaders to prepare since the lesson received changes until the day before the event.</p> The Modular Code Developement Lesson 2024-04-19T00:00:00+00:00 2024-04-19T00:00:00+00:00 Unknown https://coderefinery.org/blog/2024/04/19/in-person-modular-code-development-lesson/ <h2 id="introduction">Introduction</h2> <p>Currently we do a lesson on Modular Code Development. We start out with a simple plotting script and end up with a script which is more general and have a wider use. The script move from a Jupyter Notebook to the command line. In parallel there is ongoing discussion on what to do next with the script in the shared HackMD document.</p> <p>The challenge with the current lesson is that it is python based. Mostly python users are engaged in the discussion. How can we engaged a larger part of the audience, and how can we cater for the non-python users?</p> <p>To cater for the non-python user we can have several streams where one stream is dedicated to a programming language.</p> <p>There were people who like the lesson as it is. The question about AI was raised. Shold we mention GitHub Copilot or ChatGPT? This feels natural as tools are used more and more for support in the code development process. We did not conclude.</p> <h2 id="conclusion">Conclusion</h2> <p>We had a hard time of finding a way to make it more engaging, in a way that everyone could follow along. The conclusion was to add tabs for R, Matlab, Julias in the "instructor guide".</p> CodeRefinery Social Media Strategy 2024-04-19T00:00:00+00:00 2024-04-19T00:00:00+00:00 Unknown https://coderefinery.org/blog/2024/04/19/in-person-social-media-strategy/ <h2 id="introduction">Introduction</h2> <p>We looked at our social media strategy and discussed to improve it to engage our audience and cultivate our brand presence during our in-person meeting in Tromsø (26 Feb-1 Mar, 2024).</p> <p>We have already documented CodeRefinery outreach and marketing plan. Link <a rel="external" href="https://coderefinery.github.io/manuals/outreach/">here</a>.</p> <h2 id="discussion">Discussion</h2> <h3 id="why-do-we-need-a-social-media-strategy">Why do we need a social media strategy?</h3> <p>We need a good social media strategy to:</p> <ul> <li>reach wider audience</li> <li>to establisg CodeRefinery(CR) brand beyond nordic</li> <li>to build an engaged community</li> <li>let the world know about the good work we do</li> <li>expand our training network</li> </ul> <h3 id="our-targeted-audience">Our targeted audience</h3> <ul> <li>Students, researchers</li> <li>Possible future CodeRefinery Teachers</li> <li>University teachers, who then steer students to us</li> </ul> <h3 id="our-social-media-platforms">Our Social media platforms</h3> <p>Currently we are using following platforms:</p> <ul> <li><a rel="external" href="https://www.linkedin.com/company/coderefinery-research-software-development/?viewAsMember=true">Linkedin</a></li> <li><a rel="external" href="https://fosstodon.org/@coderefinery">Mastodon</a></li> <li><a rel="external" href="https://twitter.com/coderefine">Twitter X</a></li> <li><a rel="external" href="https://www.youtube.com/@coderefinery3414">YouTube</a></li> <li><a rel="external" href="https://coderefinery.zulipchat.com">Zulip Chats</a></li> </ul> <p>We paln to continue using these platforms and we decided that we don't need a complicate things by adding more platforms for our social media activities.</p> <p>It seems to be possible to post in multiple some at once + schedule posts with eg.</p> <ul> <li>https://www.socialchamp.io/blog/post-to-all-social-media-at-once/</li> <li>https://go.loomly.com/schedule-social-media-posts/</li> <li>https://blog.hootsuite.com/post-to-all-social-media-at-once/</li> </ul> <h3 id="our-smart-goals">Our SMART Goals</h3> <p>We defined our SMART(Specific, Measurable, Attainable, Relevant &amp; Time-based) goals to help us to ensure that our objectives are attainable within a certain time frame. Our SMART Goals are:</p> <ul> <li>To onboard <a rel="external" href="https://coderefinery.github.io/manuals/ambassadors/">CodeRefinery ambassadors</a></li> <li>Frequent actions on social media (not limited to the workshops)</li> <li>Add video/visual contents to social media posts to get more visibility</li> <li>Improve outreach/publicity/webinars to various research community and encourage engagement on social media</li> <li>Tagging: Tag CodeRefinery when it is relevant, and use hashtags when posting on social media</li> <li>Promote user generated content campaigns</li> <li>Post behind the scene contents</li> <li>Boost our brand awareness</li> <li>Coordinate the timing of announcement</li> <li>Encourage institutions to mention CodeRefinery in there posts when it is relevant.</li> </ul> <p>We have our own challenges to achieve our social media strategy goals as most of us are not major social media people, but we'd like to try to be more engaging.</p> <p>Our desire is to build and expand CodeRefinery community around our shared interest in FAIR research software practices globally. It will take time to reach our desired goal, but we are optimistic and proud of our work. We can definitly achieve our desired goals wih the support of our community members/ambassadors and partner organisations.</p> <h2 id="epilogue">Epilogue</h2> <p>We are acting on these ideas and it looks promising as our increased visibility in social media platforms is evident.</p> Asynchronous vs. Live Online Teaching: Understanding the Pros and Cons 2024-04-18T00:00:00+00:00 2024-04-18T00:00:00+00:00 Unknown https://coderefinery.org/blog/2024/04/18/in-person-asynchronous-versus-live-online-teaching/ <h2 id="introduction">Introduction</h2> <p>The comparison of asynchronous and live (synchronous) online teaching highlights key benefits and drawbacks that suit different learning preferences and logistical needs.</p> <h2 id="asynchronous-teaching-pros-and-cons">Asynchronous Teaching: Pros and Cons</h2> <h3 id="pros">Pros:</h3> <ol> <li>Flexibility in scheduling</li> <li>Self-paced learning</li> <li>Access to a broad range of resources</li> </ol> <h3 id="cons">Cons:</h3> <ol> <li>Limited real-time interaction</li> <li>Requires significant self-discipline</li> <li>Delayed feedback, though mitigatable via Q&amp;A sessions</li> </ol> <h2 id="live-teaching-online-pros-and-cons">Live Teaching Online: Pros and Cons</h2> <h3 id="pros-1">Pros:</h3> <ol> <li>Immediate interaction and feedback</li> <li>Structured learning schedule</li> <li>Enhanced engagement and motivation</li> </ol> <h3 id="cons-1">Cons:</h3> <ol> <li>Reduced flexibility in scheduling</li> <li>Potential technical and connectivity issues</li> <li>Limited access to past session materials</li> </ol> <h2 id="coderefinery-q-a-sessions">CodeRefinery Q&amp;A Sessions</h2> <p>Utilize pre-recorded lectures for content delivery, supplemented by regular, shorter live Q&amp;A sessions for interactive engagement and query resolution.</p> <h2 id="preparation-for-live-sessions">Preparation for Live Sessions</h2> <p>Efficiency in Q&amp;A sessions is improved by having students submit questions in advance, allowing instructors to concentrate on prevalent issues and intricate questions.</p> <h2 id="summaries-from-discussion">Summaries from discussion</h2> <p>The discussion delved into various strategies to enhance student engagement in asynchronous learning environments, emphasizing the importance of certificates coupled with challenging exercises. The exercises should be designed to be sufficiently difficult to maintain engagement, and personalized projects can further enhance involvement. Additionally, the possibility of automating exercise evaluation and certificate issuance was explored, with considerations on how this could be implemented efficiently across platforms. Other engagement tactics included incorporating polls, Kahoot-like feedback, utilizing chat platforms like Zulip for topic-wise discussions, and potentially establishing a public, moderated forum like CodeRefinery for peer-reviewed evaluations.</p> <p>Addressing technical and connectivity issues in live online teaching was another focal point. Strategies discussed included integrating tech checks into registration processes in a gamified manner, recording lectures for later viewing to accommodate technical difficulties, and providing support from helpers in breakout rooms during live sessions. The integration of asynchronous and live teaching methods was also considered, acknowledging that while some students require direct instruction, others may thrive in self-directed environments. The suggestion to guide students to platforms like Zulip for questions and incorporating alternative session formats during sign-up highlighted a flexible approach to accommodate diverse learning preferences. Additionally, the discussion emphasized the importance of facilitating interactive and responsive learning experiences in both asynchronous and live settings, recognizing the challenges of maintaining momentum and support for learners with limited continuous study time.</p> <h2 id="platforms">Platforms</h2> <p>In addition to discussing engagement strategies and technical considerations, various platforms were mentioned as potential tools which provide a proof of concept for asychronous learning. These included well-known platforms like Coursera, Udemy, and edX, which offer a wide range of courses and educational resources. Additionally, the discussion touched upon MOOC platforms like mooc.com and Moodle, with the recognition that many universities have their own Moodle instances for course management. The conversation also briefly explored specialized platforms such as LeetCode for coding practice, as well as the possibility of building custom platforms like IQMAcademy.</p> <h4 id="notes-on-platforms">Notes on platforms</h4> <p>If we opt to create our own platform, it's advisable to keep it lightweight, considering options like hosting videos on YouTube or utilizing tools like HedgeDoc for documentation. Utilizing Moodle might be too heavyweight for our needs. The decision to develop our own platform would primarily hinge on the necessity for automated exercises and certifications. However, existing platforms offer the advantage of providing tools to structure learning paths, though developing a course on such platforms requires substantial upfront effort. Nonetheless, prioritizing modularity and content reusability could lead to universities integrating our materials into their courses, thereby handling their own exercises and certifications.</p> <h2 id="summary">Summary</h2> <p>This is an ongoing question with regards to what is the best way for students to learn and instructors to teach. Given that CodeRefinery is spread across the whole world, the online space has many possibilities, so it's not an easy decision because there are pros and cons to both options. With the above-mentioned information, we have more insights into those pros and cons which can be taken into future discussions on the topic.</p> In-person meeting: install instructions update 2024-04-04T00:00:00+00:00 2024-04-04T00:00:00+00:00 Unknown https://coderefinery.org/blog/2024/04/04/in-person-install-instructions-session/ <p>This session of our 2024 February in-person meeting focused on the install instructions. By it's nature, it related to how we were going to teach the lessons (would we offer multiple paths? Would the second week be active or passive?)</p> <h2 id="the-core-problem">The core problem</h2> <p>Using git and computational tools can be hard. It can be made even harder by the long steps needed to install the tools - which has to happen <em>before</em> we get contact with the learners.</p> <p>But, not everything is hard. Many commercial tools are easy to use. For example, VS Code came up many times. VS Code is easy to install, and (on Windows) will automatically prompt you to install Git when needed. But it goes beyond that: VS Code provides some sort of out-of-the-box working authenciton to GitHub, even on Windows, that's based on SSO or OAuth, that "just works". There isn't any extra need for another page on setting this up. This kind of usability is what we need, though unfortunately this is often only present in these high-level tools (which we don't want to favor only one or the other).</p> <p>So, what do we do? Keep up with our strategy of universal, low-level tools, or recommend some high-level that make installation (and use) easy?</p> <h2 id="what-we-did">What we did</h2> <p>For this session itself, most of it was discussion of both the tools and the idea above, trying to decide what to do. We had practically already decided to teach the 2024 March workshop this way:</p> <ul> <li>Week 1: day 1 through GitHub web interface, day 2-3 has options for VS Code, command line, and maybe others (RStudio) (but day2-3 would only be demonstrated with VS Code).</li> <li>Week 2: Would be all demo-based, we wouldn't expect any installation or exercises from users.</li> </ul> <p>With this, for week 1, we could take advantage of VS Code's ease of use to handle the difficult setup (we could tell people "just install VS Code. It provides the terminal, Git authentication, and editor, all together". For Windows, Git had to be installed separately but that is fairly easy). We skipped requiring installing Conda and the conda environment and getting it working for week 2 (many things could go wrong here).</p> <p>We made a <a href="https://coderefinery.org/blog/2024/02/29/install-instructions/">blog post</a> and posted about our ideas on social media to try to get feedback. We didn't get much.</p> <p>As of mid-2024, this can be seen at our <a rel="external" href="https://coderefinery.github.io/installation/">installation instructions</a>.</p> <h2 id="detailed-notes">Detailed notes</h2> <p>Below is pasted our raw detailed notes, for archival purposes.</p> <p>Current state:</p> <ul> <li>Mostly works (but every time needs updates)</li> <li>There is much there, it's hard to know what to focus on depending on how you want to attend</li> <li>VSCode and other editors mostly missing.</li> </ul> <p>Suggestions</p> <ul> <li>Think about the table on the main page</li> <li>Make an "editors" section, get an expert in each IDE to contribute</li> <li>Some ideas in issues: <a rel="external" href="https://github.com/coderefinery/installation/issues">https://github.com/coderefinery/installation/issues</a></li> <li>Think about <em>usability</em>: get experts in each OS/editor to contribut.</li> </ul> <p>Discussion:</p> <ul> <li>It would take ~1 day to go through all these and get set up.</li> <li>For week 2, how to communicate "you don't have to do this." <ul> <li>Remove "what to do" table on the front page. Move install to-do list to the front page.</li> <li>Install instructions should say "Week 1: do this [list]. Week 2: optional, [list]"</li> </ul> </li> <li>Can we do everything by docker/container? What if we containerize everything?</li> </ul> <p>To do:</p> <ul> <li>GitHub account: shorten</li> <li>Shell and git: <ul> <li>Windows: vscode instead</li> <li>MacOS: developer tools, or xcode</li> <li>Linux: install package (use package manager)? <ul> <li>Fresh instaltions no Git</li> </ul> </li> <li>remove "set default branch (move it to lesson)"\</li> <li>check if two more windows settings are needed</li> </ul> </li> <li>SSH connection to GitHub: Add "VSCode" tab to install instructions</li> <li>Remove git-bash from windows</li> <li>Redo/change install verification videos</li> <li>Post to CR chat/social media and ask "For [operating system x], what's the easiest way to get started with an editor and git. This is for a person new to scientific computing and doesn't have extensive command line experience. Usability is more important than perfection here. They should have git, authentication to clone/push/pull from github, edit files, and commit them."</li> </ul> <h2 id="epilogue">Epilogue</h2> <p>We applied these ideas for our 2024 March workshop, and it worked out quite well. We were happy with both the lesson redesign, and the new install instructions. We didn't notice any major problems with the installation (and we seemed to get fewer live questions about problems with software installation, and more questions about the main topic. This was a big win).</p> In-person meeting summary: video production 2024-04-04T00:00:00+00:00 2024-04-04T00:00:00+00:00 Unknown https://coderefinery.org/blog/2024/04/04/in-person-video-production-session.md/ <p>This session, on the first day, went over the basics of video production. Richard has handled video production (streaming, producing videos after the event), and this provided a much-needed introduction to what happens behind the scenes.</p> <p>The initial goals were to:</p> <ul> <li>allow others to help with video processing during workshops</li> <li>allow others to use our best practices.</li> </ul> <h2 id="video-editing">Video editing</h2> <p>First, we practiced video editing with <a rel="external" href="https://github.com/coderefinery/ffmpeg-editlist">ffmpeg-editlist</a> really nice and easy to use. It allows powerful-enough editing for splicing without learning a full editor, and storing the progress in git. This can allow distribution of the work, too - even to those who don't know all the details but can write descriptions or find cut points by playing the file.</p> <p>The exercise we did are located <a rel="external" href="https://coderefinery.github.io/community-teaching/video-editing/">in the Video editing section of the Community teaching lesson</a>. There is a demonstration of the video releasing process <a rel="external" href="https://piped.video/watch?v=_CoBNe-n2Ak">here</a>.</p> <p>The conclusion was that video editing wasn't <em>that</em> hard and more people should know about the possibilities. However, it still is more work and for workload reasons needs someone other than main instructors to do it. (Richard's rule of thumb is "do it the same night, or it will never get done" - ffmpeg-editlist makes it easy to do a bad-enough job to accomplish that.)</p> <h2 id="livestreaming">Livestreaming</h2> <p>As for streaming, we brainstormed ideas on how to make the workshop easier to follow ("where are we right now?", "what are we supposed to do right now?") and easier to video-edit afterwards. Ideas included:</p> <ul> <li>status bar overlay that shows the breadcrumb including where we are at the lesson</li> <li>status text overlay that shows whether the workshop is in exercise or lesson etc.</li> </ul> <p>Both of these require some work, but more importantly someone to watch over it and make sure it's up to date. Our notes-based system is at least the same tool for everything.</p> <p>We got overview of OBS settings: the setting files are in <a rel="external" href="https://github.com/coderefinery/obs-config">obs-config repo</a>. They can be downloaded and imported to the OBS Studio. This is a bit harder to use in practice, since it requires understanding about OBS, but it's definitely doable. We have a <a rel="external" href="https://coderefinery.github.io/manuals/obs/">long description of OBS theory</a>. The participants left more prepared to get involved with streaming.</p> <h2 id="epilogue">Epilogue</h2> <p>Based on these discussions, we made an <a rel="external" href="https://github.com/coderefinery/obs-coderefinery-control">OBS control panel</a> which was used in the 2024 March workshop to allow others to manage the stream some. It's still in development, but could allow us to go to the next stage of large-scale collaboration.</p> <h2 id="see-also">See also</h2> <ul> <li><a rel="external" href="https://coderefinery.github.io/community-teaching/video-recording/">Community teaching, Video Recording</a></li> <li><a rel="external" href="https://coderefinery.github.io/community-teaching/video-editing/">Community teaching, Video editing</a></li> <li><a rel="external" href="https://coderefinery.github.io/community-teaching/livestreaming/">Community teaching, Livestreaming</a></li> <li><a rel="external" href="https://coderefinery.github.io/manuals/coderefinery-mooc/">CR manuals, MOOC strategy</a></li> <li><a rel="external" href="https://coderefinery.github.io/manuals/obs/">CR manuals, OBS theory</a></li> <li><a rel="external" href="https://coderefinery.github.io/manuals/video-editor/">CR manuals, Video editor role description</a></li> <li><a rel="external" href="https://coderefinery.github.io/manuals/broadcaster/">CR manuals, Broadcaster role description</a></li> </ul> Help us do the next CodeRefinery workshop (2024 H2) 2024-03-25T00:00:00+00:00 2024-03-25T00:00:00+00:00 Unknown https://coderefinery.org/blog/2024/03/25/next-cr-workshop-help-needed/ <p>As usual, our workshop in 2024 March has worked very well, and our feedback is as positive as ever. The technical setup worked smoothly, and <a href="https://coderefinery.org/blog/2024/03/17/streaming-training-workshop/">we are working to share our livestreaming technique with others</a>. But there's another thing we need: the mere fact we have hundreds of registrations, multiple partners, and more than 10 instructors means <strong>we need more help to keep these going</strong>.</p> <p><strong>We won't schedule another very large CodeRefinery workshop until we can be sure we have enough people to distribute the load widely enough to make it worth it. If we don't get that, we'll scale down to what is manageable. Your help is essential. We give an initial deadline of the end of April to figure out our status and do rough timetabling.</strong></p> <p>The good thing is that instructors and helpers are not what is in short supply, but something more about bigger picture stuff. We've developed good processes and pretty well know what works, but as we move to the sustainability phase, we can't do everything ourselves. For example, we would be happy to have:</p> <ul> <li> <p><strong>Instructor coordinator</strong>, who can keep track of all of our instructors and make sure the necessary onboarding and all is done.</p> </li> <li> <p><strong>Registration coordinator</strong>, who can help manage all of the registrations and communication.</p> </li> <li> <p><strong>Partner coordinator</strong> who can help with outreach to partners (other universities for example) who advertise our workshop and organize local sessions.</p> </li> </ul> <p>None of these are exactly hard, and we can help you learn what is needed (but also there is a lot that can be improved for the future - new visions are welcome).</p> <p>Our vision is that our commonly shareable online, live-streamed course can be used by as many organizations and learners as possible. We have the base and now we need the communication and outreach to make that possible. (If you can't help directly, but want to be part of this vision, also let us know) Whoever joins would basically become part of CodeRefinery for the purposes of organization - your voice would matter as much as anyone else.</p> <p>TODO who to contact.</p> <p>See also</p> <ul> <li>(manuals links? website links?)</li> </ul> Anyone want a streaming training workshop? 2024-03-17T00:00:00+00:00 2024-03-17T00:00:00+00:00 Unknown https://coderefinery.org/blog/2024/03/17/streaming-training-workshop/ <p>If you haven't noticed, CodeRefinery livestreams it's workshops (see refs below). We can reach a virtually unlimited number of people and easily make recordings for later, yet our co-teaching and Collab notes system still makes a workshop that feels interactive and fun to attend. <strong>Does anyone want to learn how to do this yourselves?</strong></p> <h2 id="a-workshop-idea">A workshop idea</h2> <p>Richard Darst has been doing most of the streaming and would like to teach others. Richard can host people in Helsinki, Finland for some workshop, or if people fund travel somewhere else we can host it there. A workshop would include:</p> <ul> <li>Basic streaming theory</li> <li>Setting up <a rel="external" href="https://obsproject.com/">OBS-Studio</a> for streaming</li> <li>Recording and publishing videos rapidly (by the same night, every time).</li> <li>How to make a livestream course lively (co-teaching, Collab Notes, lesson design, screenshare style)</li> <li>Time to test and practice all of the above.</li> <li>Improving our documentation</li> </ul> <p>Most of the above is in theory documented in the <a rel="external" href="https://coderefinery.github.io/manuals/">CodeRefinery manuals</a>, but reading is hard and seeing by example with mentoring is easy.</p> <p>An ideal host would be an EU or regional computing competence center, open science organization, or someone interested in teaching innovation, who can host a public workshop, and be able to help in advertising the workshop to other interested parties. (This could be tried online, but when we are setting up computers to do the screencapture of a meeting, while also doing another meeting to share that screen capture... it might get a bit complex.)</p> <p>Contact us at [email protected] or [email protected], or via the <a rel="external" href="https://coderefinery.github.io/manuals/chat/">CodeRefinery chat</a>.</p> <h2 id="gallery">Gallery</h2> <p>How the MOOC stragegy works:<br> <img alt="Schematic diagram of the MOOC strategy. Streaming to Twitch, and watching, feedback by collaborative notes." src="https://coderefinery.github.io/manuals/_images/mooc-diagram.png" style="max-width: 420px"></p> <p>A usable view from the learner side:<br> <img alt="Screenshot of a desktop with half the screen for instructor screenshare and the other half for the learns to work." src="https://coderefinery.github.io/manuals/_images/layout--learner-livestream-sidebyside-onebrowser.png" style="max-width: 500px"></p> <p>An extremely high-quality screen sharing setup:<br> <img alt="A 840 wide x 1080 tall screenshot or instructors, web browser, and terminal" src="https://coderefinery.github.io/manuals/_images/s10-kickstart-prompt-log.png" style="max-width: 420px"></p> <p>OBS isn't that hard:<br> <img alt="OBS screenshot with labels of some key points" src="https://coderefinery.github.io/manuals/_images/obs--controls.png" style="max-width: 420px"></p> <p>Our recently-created streaming control panel:<br> <img alt="Screenshot of a small control-panel looking window" src="https://coderefinery.github.io/manuals/_images/obs--controlpanel-1.png" style="max-width: 420px"></p> <h2 id="see-also">See also</h2> <ul> <li>CodeRefinery "Community teaching" training: <a rel="external" href="https://coderefinery.github.io/community-teaching/">https://coderefinery.github.io/community-teaching/</a></li> <li>CodeRefinery manuals: <a rel="external" href="https://coderefinery.github.io/manuals/">https://coderefinery.github.io/manuals/</a></li> <li>CodeRefinery MOOC strategy: <a rel="external" href="https://coderefinery.github.io/manuals/coderefinery-mooc/">https://coderefinery.github.io/manuals/coderefinery-mooc/</a></li> <li>OBS theory: <a rel="external" href="https://coderefinery.github.io/manuals/obs/">https://coderefinery.github.io/manuals/obs/</a></li> <li>Many other articles in <a href="https://coderefinery.org/blog/2024/03/17/streaming-training-workshop/@blog/_index">this blog</a></li> </ul> Recap of the first week of the spring 2024 workshop 2024-03-15T00:00:00+00:00 2024-03-15T00:00:00+00:00 Unknown https://coderefinery.org/blog/2024/03/15/week1-march-workshop-rework/ <p>What an exciting first 3 days of the CodeRefinery workshop we had!</p> <p>Our Git lesson got fully rewritten right before the workshop to make it more welcoming to beginners and closer to how researchers would encounter Git in their work. And that without the need for any coding: All our Git exercises are around a recipe book.</p> <h3 id="week-1-recap">Week 1 recap</h3> <p>We start with the GitHub web interface, explore existing repositories, making our own fork of an existing repository, committing our own contributions to our own branch and merge it to the main content by pull request.</p> <p>Only on day 2 we switched from working in the GitHub web interface to working locally. Here we provided 2-4 tracks: Working on the command line , in VScode, RStudio or staying in the web interface.</p> <p>We cloned a repository and repeated the actions from before locally: committing, branching, merging. Then we also checked how we can inspect the history of existing projects and how commit messages can help us understand how a repository has developed over time.</p> <p>At the end of day 2, we also learned to estimate how much Git is necessary or helpful for different types of projects.</p> <p>Day 3 was all about collaboration and it got a bit chaotic, but the good kind of chaotic. We first learned about the basic workflow of contributing when multiple people are working on the same repository. Writing issues, suggesting changes via pull requests and connecting the two. Then we went on to code review, and practiced that on our recipe book, we don't want any typos there!</p> <p>In the afternoon we also practiced how to contribute to projects that we are not a part of via forks and pull requests as well as how automated tests can help the code review.</p> <h3 id="thank-you">Thank you!</h3> <p>Now we have a nice recipe base for our next CodeRefinery in person meeting. And participants have hopefully learned something along the way.</p> <p>The downside of changing the entire week right before the course however made it possibly more difficult for team leaders and volunteers to prepare and it was a difficult choice to make and we appreciate their patience and flexibility and trust.</p> <p>Thanks to everyone involved!</p> <h3 id="materials-and-recordings">Materials and recordings</h3> <p>You can watch the recordings of the first 3 days of the workshop <a rel="external" href="https://www.youtube.com/watch?v=9eUUd40HkYI&amp;list=PLpLblYHCzJADIsbUhXSrC0qW5wDsH-F9U">on YouTube</a>, reuse the lesson materials for your own course if you like (<a rel="external" href="https://coderefinery.org/lessons/core/">https://coderefinery.org/lessons/core/</a>) and check out one of the resulting collaborative <a rel="external" href="https://github.com/cr-workshop-exercises/centralized-workflow-exercise-recorded">recipe books of this course</a> for cooking inspiration.</p> <p>Next week (Tue 19.03.24- Thu 21.03.24) we will continue with other topics around FAIR research software development; event page with materials, questions and answers and more information: <a rel="external" href="https://coderefinery.github.io/2024-03-12-workshop/">https://coderefinery.github.io/2024-03-12-workshop/</a></p> <p>See you there or in one of our future workshops!</p> Help us make usable IDE/git install instructions 2024-02-29T00:00:00+00:00 2024-02-29T00:00:00+00:00 Unknown https://coderefinery.org/blog/2024/02/29/install-instructions/ <p>At the current CodeRefinery meeting, we had a session on installation instructions. It was clear that the instructions, and really everything we teach, needs to be tied to what is easy to install and set up these days (not just because it's easy to teach, but because if it's easy to install that's what most people use). <strong>Help us to figure out what current best practices are.</strong></p> <p>We've mostly taught git from the command line so far. That's going to change when we go web-first (to explain concepts). But, as one example, when looking at ways to simply command line linking, there are lots of modern tools such as the "git credential manager", which make linking remotes more automatic than SSH keys. IDEs make it easy to clone, commit, and push. We should use all the modern work - but what to recommend? There are so many operating systems and IDEs, we can't know them all.</p> <h2 id="our-question-to-the-world">Our question to the world</h2> <p>Imagine someone new to scientific computing, using your operating system. They aren't a developer, they are a scientist (broadly defined) or similar, trying to get some other stuff done. What do you recommend to them to install and use? Are there special instructions on configuring it?</p> <p>Usability is more important than perfection here. You want them to get started without major problems, so that they can be happy now and be motivated to learn more later. You aren't there to teach them every step of the way. They should have some editor to use, <em>git</em>, <em>git authentication to Github</em>, be able to edit files, add them, commit them, and get them to appear on Github? They should be able to access the shell some way, but it doesn't have to be the main feature (an editor's terminal is OK, as long as it probably works with Git, including whatever config and auth is needed).</p> <p>We want some <em>common</em> solutions, even if not perfectly free/open source (though of course that is preferable). We will likely recommend VSCode/VSCodium since it's most used by our communities, but would like to provide instructions for other IDSs as well.</p> <h2 id="how-to-respond">How to respond</h2> <p>We recommend to respond to one our social medias or Github repos:</p> <ul> <li><a rel="external" href="https://fosstodon.org/@coderefinery">Mastodon</a></li> <li><a rel="external" href="https://twitter.com/coderefine">Twitter</a></li> <li><a rel="external" href="https://www.linkedin.com/company/coderefinery-research-software-development/?viewAsMember=true">LinkedIn</a></li> <li><a rel="external" href="https://github.com/coderefinery/installation/">Github issues in coderefinery/installation</a></li> </ul> <h2 id="see-also">See also</h2> <ul> <li><a rel="external" href="https://coderefinery.github.io/installation/">Our current installation instructions</a></li> </ul> Workshop format 2024-02-27T00:00:00+00:00 2024-02-27T00:00:00+00:00 Unknown https://coderefinery.org/blog/workshop-plan/ <h1 id="possible-workshop-formats-v-1-0">Possible workshop-formats [V 1.0]</h1> <p>During the CodeRefinery writing retreat in Tromsø, we tried to formulate the best workshop format considering following factors.</p> <ol> <li>Best way to reach the audience.</li> <li>Best use of available resources to CR and foreseen challenges due to end of funding period.</li> <li>Best value for host institutes, of CR staff and CR workshop participants</li> </ol> <p>We evaluated four possible formats.</p> <ol> <li>In-person workshops</li> <li>Small scale online workshop</li> <li>Large scale online workshops</li> <li>Large scale workshop with local in-person meetups</li> </ol> <h2 id="summary">Summary</h2> <h3 id="in-person-workshops">In-person workshops</h3> <p>the host institution invites participants and covers the costs associated with the workshop, including travel expenses for speakers. CodeRefinery workshops can add value to the competence of employees, and the training can be included as part of grant proposals. In-person workshops require high-quality courses and may involve training the trainers. In-person workshops have a maximum attendance limit of around 40 participants and offer benefits such as better feedback, increased learner commitment, improved evaluation of productivity, and individualized help.</p> <h3 id="small-scale-online-workshop">Small scale online workshop</h3> <p>Sustainability of the program relies on effective publicity and promotional activities. Small scale online workshops can be initiated by the host or organization and offer flexibility in terms of spreading content, providing continuous feedback, and offering individualized help.</p> <h3 id="large-scale-online-workshops">Large scale online workshops</h3> <p>Large scale online workshops initiated by the CodeRefinery require more organizational work and face challenges in receiving continuous feedback, learner commitment, and individualized help.</p> <h3 id="large-scale-workshop-with-local-in-person-meetups">Large scale workshop with local in-person meetups</h3> <p>Large scale workshops with local in-person meetups offer better individualized help and continuous feedback but require logistical coordination. The cost per learner can be estimated, and the physical space should accommodate breaks and exercise sessions for collaboration. Local in-person meetups have shown benefits, particularly on day 3, while the impact decreases in later days.</p> <h2 id="details-of-the-discussions">Details of the discussions</h2> <ol> <li> <p>In-person workshops</p> <ul> <li>Invited by host</li> <li>Costs reimbursed by host (Travel money etc.), maybe speaker paid by host <ul> <li>Host institution facilitate employee competence</li> <li>Make it easy for people to add this to their grant proposals (give them template text)</li> </ul> </li> <li>More obligations for CR (high-quality course) <ul> <li>We should train the trainers</li> <li>We have co-teaching which gives added value</li> </ul> </li> <li>More work delegation to host</li> <li>Needs some limit of attendance eg. Max 40 per class <ul> <li>Usually not everyone show up -&gt; Tweak the maximum so that it is manageable but no-shows bring some added comfort</li> </ul> </li> <li>Benefits of in-person <ul> <li>Better continues feedback</li> <li>Better commitment by learners</li> <li>Better evaluation of productivity</li> <li>Better individual help</li> <li>Can do few days longer sessions</li> </ul> </li> <li>Sustainability in a long run comes down to publicity <ul> <li>This model is very localised -&gt; we need to have the networks up in various places <ul> <li>Current staff is localised in nordics</li> </ul> </li> <li>Teasers of the workshop in conferences</li> <li>Webpages should be rewritten to accomodate and advertise the new model</li> <li>Other webinars and talks to advertise more</li> </ul> </li> </ul> </li> <li> <p>Small scale online workshop</p> <ul> <li>Initiated by host or CR <ul> <li>If initiated by a host as tailored workshop then should be possible to reimburse for the speaker</li> </ul> </li> <li>Less costs <ul> <li>No travel funding required</li> </ul> </li> <li>Benefits of small online <ul> <li>Can be spread across multiple days with shorter courses</li> <li>Good continues feedback</li> <li>Good commitment by learners <ul> <li>if active participation</li> </ul> </li> <li>Good evaluation of productivity</li> <li>Good individual help <ul> <li>more helpers with expertise in using windows os, linux, and mac os</li> <li>in-person helpers are more difficult to arrange anyway</li> </ul> </li> </ul> </li> <li>Max 40 participants <ul> <li>effective interactions with participents</li> </ul> </li> </ul> </li> <li> <p>Large scale online workshops</p> <ul> <li>Initiated by CR</li> <li>More organizational work for CR</li> <li>Low level of obligation (by learners)</li> <li>Can accommodate 100s of participants</li> <li>Inadequate continues feedback</li> <li>Hard to judge learner commitment</li> <li>Harder to evaluate productivity</li> <li>Harder and not scalable to provide individual help</li> <li>All questions are documented and answers reusable</li> <li>More prone to technical issues</li> <li>Technical problems of learners become more visible as events get larger</li> <li>Can be spread across multiple days with shorter courses</li> <li>It became harder to motivate persons to join as instructors</li> <li>Communicating pre-requisites becomes harder, pre-requisites less likely followed</li> <li>More questions get asked and more answers get seen</li> </ul> </li> <li> <p>Large scale workshop with local in-person meetups</p> <ul> <li>Better Individual help</li> <li>Better continuous feed back issues <ul> <li>Continous quizzes after each exercise to gauge in real-time how the students understand the material. (must be anonymous)</li> </ul> </li> <li>More than one host needs to handle logistics</li> <li>Disparate learner competence groups</li> <li>Better commitment by hosts</li> <li>Better commitment by learners</li> <li>Possible distraction due to technical issues</li> <li>Better to confine to few longer days</li> <li>What has the highest cost, physical courses or online courses? Can we estimate cost per learner in different scenaria?</li> <li>The room requires breaks and exercise session so that they have enough room/time to work together.</li> <li>Based on personal experience, day 3 benefited from local in-person meetups, the remaining days (especially week 2) barely did.</li> </ul> </li> </ol> Summary from a brainstorming meeting about the project future 2024-01-24T00:00:00+00:00 2024-01-24T00:00:00+00:00 Unknown https://coderefinery.org/blog/2024/01/24/project-future-concept-board/ <p>On January 23, 2024, we held a meeting where we wanted to explore <strong>ideas for the future of the CodeRefinery project</strong> from team members and the community.</p> <p>In most meetings only very few people speak and most participants don't say anything. We wanted to change this and tried to create a welcoming meeting environment with a facilitator who hopefully only facilitates and meeting participants where hopefully everybody gets the chance to contribute. We used a concept board and collected ideas visually (screenshots are below).</p> <p>In this post we summarize our findings and lessons learned. If you only have 3 minutes, then read the summary (first section).</p> <!-- toc --> <h2 id="summary-of-ideas-that-were-voted-as-most-important">Summary of ideas that were voted as most important</h2> <p>We provide more details in screenshots below. Here we only summarize the points that received votes answering the question: "which ideas are most important for you". The ideas are summarized here without being commented. They of course need to be followed-up somehow but this we will do in future meetings and events.</p> <h3 id="needs">Needs</h3> <p>In your current position, what do you need in order to be able to contribute to the project 1 year from now (in terms of work time, financing, governance, administration, accounting, leadership, credit)?</p> <p><strong>Recognition and credit</strong> (12 votes combined):</p> <ul> <li>Strong publication or white paper about CR and its importance/benefits</li> <li>Recognition of our good teaching practices</li> <li>Collect and showcase where else our materials are used</li> <li>Formalize credit to outside contributors</li> </ul> <p><strong>Collaboration and experimentation</strong> (12 votes combined):</p> <ul> <li>Collaboration with passionate people who enjoy teaching</li> <li>Two-way learning</li> <li>More opportunities for future development</li> <li>Experiment beyond the usual tools workshop</li> </ul> <p><strong>Overlap with high-performance computing</strong> (6 votes):</p> <ul> <li>Subject overlap with skills and tools of relevance for HPC</li> </ul> <p><strong>Roadmap</strong> (6 votes combined):</p> <ul> <li>Statement how CodeRefinery fits into the FAIR ecosystem</li> <li>Concrete and public roadmap for the future</li> </ul> <p><strong>Administrative/financial needs</strong> (6 votes combined):</p> <ul> <li>Tasks that have a clear work-time estimation</li> <li>Cost projects also for in-kind work</li> <li>Home organization securing funding</li> <li>If outside regular job, then compensated for the work</li> </ul> <h3 id="wants">Wants</h3> <p>What do you wish from the project in terms of lesson portfolio, format, and collaboration in order to still be around 1 year from now?</p> <p><strong>Topics and target audience</strong> (22 votes combined):</p> <ul> <li>Stronger integration with HPC - if CR should "belong" somewhere, it should be HPC</li> <li>New topics on AI and ML</li> <li>New training material topics"</li> <li>Think about new topics for training via discussion &amp; collaboration</li> <li>Develop training material for GPU computing</li> <li>Programming lessons to go hand-in-hand with software engineering lessons</li> <li>Create new lessons based on needs and existing expertise</li> <li>Focus on academic users to make it more valuable to [academic] management</li> <li>Material suitable for the "phone generation"</li> </ul> <p><strong>Self-learning vs. real-time</strong> (11 votes combined):</p> <ul> <li>Self learning materials/courses/ asynchronous learning: some researchers don't have time for long workshops and don't wanna know all the details</li> <li>MOOC as basic service, interaction/teams delegated</li> <li>Collaboration on video material</li> </ul> <p><strong>External collaboration and conferences</strong> (5 votes combined):</p> <ul> <li>Stronger connection to other similar projects, like BSSW, INTERSECT, etc.</li> <li>Regular BoF sessions at conferences like ISC, SC, PyCon, JuliaCon, etc.</li> <li>Keep/improve connection to RSE community</li> </ul> <p><strong>Collaboration and co-hosting</strong> (5 votes combined):</p> <ul> <li>Course collaborations of courses that already exist, like currently done with Aalto HPC kickstart</li> <li>National course/workshop collaborations, offering in-person specialized short workshops</li> <li>Co-hosting of events, and co-developing of lessons</li> </ul> <p><strong>Social events and keeping up-to-date</strong> (5 votes combined):</p> <ul> <li>Social events where team members get an overview of activities in each partner organization (e.g. monthly "zoomffee")</li> <li>Easy way to follow what is going on and when to step in (something else than scrolling all chat)</li> </ul> <p><strong>Workshop format</strong> (5 votes combined):</p> <ul> <li>Smaller, shorter workshops</li> <li>Have more formalized possibility of using ready-made computing environment ("executable website")</li> </ul> <p><strong>Administration and governance</strong> (3 votes combined):</p> <ul> <li>Formalized and more official course request form, to show organizations (in and outside of CR) that this is "a thing"</li> <li>Mechanism/support for creating new "refineries" (HPC Refinery, AI Refinery, ...)</li> <li>Delegate non-profit side to DRA (for example)</li> </ul> <p><strong>Credit</strong> (3 votes):</p> <ul> <li>Official network of teachers, public on webpage, with skills</li> </ul> <p><strong>Workshop preparation</strong> (3 votes combined):</p> <ul> <li>Less lesson revision each workshop</li> <li>Up-to-date and maintained lessons</li> </ul> <h3 id="general-suggestions-for-future-meetings">General suggestions for future meetings</h3> <ul> <li>Restart monthly community chats around specific topics where one can get updates without reading all chat.</li> <li>Separate on-boarding meetings for friends and future instructors (community calls could be on-boarding meetings).</li> <li>More social media presence and dissemination.</li> <li>Create tasks forces or work packages so that others can help better and to have fewer bottlenecks in the project.</li> </ul> <hr /> <h2 id="meeting-format-and-goals">Meeting format and goals</h2> <p>To facilitate a meeting where we collect ideas from everybody but without judging them, we used a concept board and virtual sticky notes and divided the session into 3 parts:</p> <ul> <li>Start with everybody taking notes by themselves ("me"; for ourselves).</li> <li>Second step: formalize and place on concept board ("we"; randomized 1-1 pairs).</li> <li>Third step: we review and discuss as a group ("us"). Make sure that the facilitator understood what the group wanted.</li> </ul> <p>13 persons participated in this meeting (one of them, the author of this blog post, was the facilitator): <img width="100%" src="/blog/project-future-concept-board/participants.jpg" alt="screenshot of sticky notes with participant names"></p> <h2 id="timeline">Timeline</h2> <ul> <li>5 min: welcome and getting started</li> <li>5 min: everyone adds themselves to the board</li> <li>10 min "me" time: work on your own on the two boards below, without sharing your thoughts yet</li> <li>15 min "we" time: 1-1 work with a randomized partner; put ideas on the board(s)</li> <li>10 min "us" time: we cluster and organize</li> <li>10 min: voting on which ideas are most important for you (everybody got 10 votes to distribute)</li> <li>follow-up: blog post summarizing this</li> </ul> <p>Here is a screenshot from the session: <img width="100%" src="/blog/project-future-concept-board/timeline.jpg" alt="screenshot of the meeting timeline and meeting suggestions"></p> <h2 id="concept-boards-where-we-explored-what-project-members-need-and-want-from-the-project">Concept boards where we explored what project members need and want from the project</h2> <p>Meeting participants were asked to answer two questions with sticky notes (sticky note color has no meaning):</p> <ul> <li><strong>"Needs"</strong>: In your current position, what do you need in order to be able to contribute to the project 1 year from now? (in terms of work time, financing, governance, administration, accounting, leadership, credit)</li> <li><strong>"Wants"</strong>: What do you wish from the project in terms of lesson portfolio, format, and collaboration in order to still be around 1 year from now?</li> </ul> <p>We did not have enough time to cluster the notes better but to summarize the findings I have later manually clustered related votes and summed them up.</p> <img width="100%" src="/blog/project-future-concept-board/vote.jpg" alt="screenshot of the sticky notes with ideas and number of votes"> <p>The comment note that is outside that screenshot to the bottom and looks a bit cut off says: "I agree with this a way that CR should have a more defined brand - be it HPC or something else".</p> <p>Below we list the ideas also in text format.</p> <ul> <li> <p><strong>Needs</strong>: In your current position, what do you need in order to be able to contribute to the project 1 year from now? (in terms of work time, financing, governance, administration, accounting, leadership, credit)</p> <ul> <li>Company internal cost object for in-kind contribution</li> <li>Staff in my own project that are interested in working on CR</li> <li>A project in my organisation  that somehow includes CR</li> <li>Official statement of how CR fits in the ecosystem of FAIR X, to help convincing management if they say "we do already Y"</li> <li>collaborations with different people on varied topic for training and workshop, and also seeking more opportunities for future development</li> <li>Measurable benefit to Aalto (continued enrollment numbers)</li> <li>formalize contribution to the outside (credit to contributors)</li> <li>Subject overlap with skills and tools of relevance for HPC</li> <li>HPC connection</li> <li>Possibility to allocate (more) worktime for this</li> <li>"cost object" either via project funding or formalized "in-kind"</li> <li>Collaboration with passionate people who enjoys delivering, two way learning</li> <li>"Project" that includes CR as a job</li> <li>a strong publication or white paper about CR and its importance/benefits</li> <li>Plans for the future public and concrete, roadmap</li> <li>Tasks that have clear work-time estimations</li> <li>UPPMAX &amp; NAISS provide in-kind support: this has worked really well up to now, but it is dependent on the home organization to have a secure funding</li> <li>(this is a need/want) New content? New formats? Experiment beyond the usual tools workshop</li> <li>If outside regular job then some other compensation for my time</li> <li>Permission from supervisor</li> <li>possibility to join as "oneself",without organization that is "part of CR"</li> <li>collect and showcase where else than within the CR project, the materials are used -&gt; show benfit, visibility to employer</li> <li>Recognition of our good teaching practices</li> </ul> </li> <li> <p><strong>Wants</strong>: What do you wish from the project in terms of lesson portfolio, format, and collaboration in order to still be around 1 year from now?</p> <ul> <li>UPPMAX &amp; NAISS perspective: In terms of collaboration, the fact that this is a collaboration among people from several supercomputing centers makes it more valuable / "sells" better to higher ups. That is not to exclude industry, but main target audience for us/UPPMAX is academic users.</li> <li>More frequent social events eg. monthly zoomffee / networking events</li> <li>thinking more topics for training via discussion &amp; collaboration</li> <li>Self learning materials/courses/ asynchronous learning: some researchers don't have time for long workshops and don't wanna know all the details</li> <li>social events where team members get an overview of activities in  each partner organization</li> <li>CR MOOC as basic service, interaction/teams delegated</li> <li>smaller shorter workshops</li> <li>New training material topics</li> <li>Have "phone generation" suitable materials , eg IQM academy style</li> <li>National course/workshop collaborations, offering in -person specialized short workshops</li> <li>more in-person teaching</li> <li>New topics on AI and ML can be added to CR lesson portfolio</li> <li>official network of teachers, public on webpage, with skills</li> <li>stronger integration with HPC - if CR should "belong" somewhere, it should be HPC</li> <li>UPPMAX &amp; NAISS perspective: In terms of lessons, the base workshop is great. I think new lessons should be created in terms of needs and existing/wish-for expertise. CR has enabled collaboration on additional courses that are complimentary to the ones of the home institution - added value.</li> <li>co-organizing events</li> <li>course collaborations of courses that already exiost, like currently done with Aalto HPC kcikstart</li> <li>formalized and more official course request form, to show organizations (in and outside of CR) that this is "a thing"</li> <li>Have more formalized possibility of using readymade computing environment "executable website"</li> <li>regular BoF sessions at conferences like ISC, SC, PyCon, JuliaCon, etc</li> <li>programming lessons to go hand-in-hand with software engineering lessons</li> <li>Co-hosting of events, and co-developing of lessons, with PDC/NAISS</li> <li>mechanism/support for creating new "refineries" (HPC Refinery, AI Refinery, ...)</li> <li>Develop training material for GPU computing</li> <li>volunteer instructors for CR and instructor training workshops</li> <li>Easy way to follow what is going on and when to step in. (Something else than scrolling all chat)</li> <li>stronger connection to other similar projects, like BSSW, INTERSECT, etc</li> <li>UPPMAX &amp; NAISS perspective: As for the format, in my opinion going even larger in attendance would imply using a platform like LinkedIn or similar. But it does require additional effort, at least in the setup phase. This would allow for asyncrohonous learning. The danger I see with it is that it may not be appealing for the home institution.</li> <li>maintenance and further development of sphinx-lesson</li> <li>Collaborators on video-material (should we choose to make some)</li> <li>collaboration &amp; flexibility, promote two way learning</li> <li>Connection to RSE community somehow</li> <li>Delegate nonprofit side to DRA (for example)</li> <li>Denmark could use with another CR person</li> <li>Less lesson revision each workshop</li> <li>up-to-date and maintained lessons</li> </ul> </li> </ul> <h2 id="what-we-learned-about-the-meeting-format">What we learned about the meeting format</h2> <p>The format felt like the right choice. However we noted few suggestions for how we can improve such meetings in future:</p> <ul> <li>Allocate 1.5 hours instead of 1 hour.</li> <li>Add a break so that facilitator can organize boards to make it easier for all.</li> <li>Add example sticky notes.</li> <li>Suggest to make text short (some sticky notes contained too many words and were possibly not read during the 5 minute voting session).</li> </ul> Lessons learned from the September 2023 online workshop 2023-12-05T00:00:00+00:00 2023-12-05T00:00:00+00:00 Unknown https://coderefinery.org/blog/2023/12/05/lessons-learned-sep-2023/ <p>After each workshop we try to collect feedback and lessons learned from team members, learners, local organizers, and stakeholders. These documents help us preparing future workshops and events and serve as our <strong>organizational memory</strong> so that we don't forget important observations six months later. Below we summarize our lessons learned from our <a rel="external" href="https://coderefinery.github.io/2023-09-19-workshop/">September 2023 workshop</a>.</p> <p>But let us first start with a nice feedback we received:</p> <div class="uk-child-width-expand@s" uk-grid> <div class="uk-width-1-4@m"> </div> <div class="uk-text-muted"> "I've been on many courses, I organize some bioinformatics courses myself, but it was certainly one of the best if not the best course I've attended. Thank you for your time and engagement :)" </div> </div> <!-- toc --> <h2 id="material">Material</h2> <p>The team has done amazing work preparing a high-quality material:</p> <ul> <li>"We've really enjoyed the material (even without the video, it was good to follow all the tutorials you provided. Some coworkers could not attend the workshop but did the exercises on their own. They found the material so nice that they've shared it to their students.)."</li> <li>"The written course materials are really fantastic. I had to review some aspects of Git/GitHub myself before the session, and the online notes made that much more efficient."</li> </ul> <h2 id="role-of-helpers-exercise-leaders">Role of helpers/ exercise leaders</h2> <ul> <li>The role of local helpers seems more crucial before and after, than during the workshop.</li> <li>The bigger the course, the more likely we will see questions that are answered in install instructions. This supports the previous point.</li> <li>Local groups see the benefit from nurturing a local community of trainees of the CodeRefinery courses.</li> <li>"During the course I think you are already doing a wonderful job."</li> </ul> <h2 id="how-to-improve-exercises">How to improve exercises</h2> <ul> <li>Consider collecting some feedback between the explanation and start of the exercise. For example, having the attendees take part in one of these interactive online group quizzes. That provides some immediate review of the ideas and gives you feedback on anything that needs clarified.</li> <li>For the GitHub forking exercise, consider demonstrating using a split-screen simultaneously showing the two roles on one screen.</li> </ul> <h2 id="providing-a-zoom-to-work-on-exercises-together">Providing a Zoom to work on exercises together</h2> <p>This time we have again decided to provide a central Zoom for learners who are not part of a team to work on exercises together with others. However, this was mostly unused and we were unsure why precisely.</p> <ul> <li>Idea for next time: instead of us providing Zoom where nobody shows up, we offer that we can be invited to local group Zoom and they call us in.</li> <li>With self-organised Zoom: we got no contact to those who indicate "interest in being an EL/TL but don't have team ready”. If we keep the Zoom, those people could be instructed to go straight to that Zoom + usual mention about the on-boarding.</li> <li>Consider providing Zoom only after the streaming has stopped for end of the day live clarifications, Q&amp;A, etc. This in practice already happened in the live room where after the streaming people had more questions. Downside: It can be tiring after a long day.</li> </ul> <h2 id="helping-learners-to-navigate-and-find-where-we-are">Helping learners to navigate and find where we are</h2> <p>When following the different windows and at the same time listening to the stream it is easy to get distracted for a minute and miss where we are right now.</p> <ul> <li>Each exercise/type along on a new topic can start with "Check your current directory. Decide where you want to be for the next part."</li> <li>We should have a graphical prompt/box on the stream somewhere which says what people should do: "watch", "type along", "continue with XYZ".</li> </ul> <h2 id="technical-setup">Technical setup</h2> <ul> <li>Don't use new streaming setup without good advance practice. We had some behind-the-scenes hiccups the first day, but without impact on learners or the course quality.</li> <li>Self-hosted HedgeDoc seems to work really well. We observed no technical issues.</li> </ul> <h2 id="audio-quality-is-super-important">Audio quality is super important</h2> <ul> <li>Use a headset. Podcast-quality microphone on the desk was not enough and when switching to a headset, quality improved significantly.</li> <li>Headset should be wired or via a dedicated dongle (Bluetooth has too much latency).</li> </ul> <h2 id="using-main-as-the-default-branch">Using "main" as the default branch</h2> <p>This was our first workshop where we have asked participants to configure Git to use <code>main</code> as the default branch instead of <code>master</code> to avoid confusion when moving from laptop to GitHub. We did this after a lot of thinking and waiting because we knew that some learners have old versions of Git and sometimes no possibility to upgrade. Trying to make sure that our instructions and exercises work on "all" Git versions we chose to initialize Git using <code>git init -b main</code>. However, that command unfortunately failed on older Git versions to our surprise. We did not consider that possibility when testing and preparing.</p> <ul> <li>For the next workshop reconsider the default and provide a safety net. But also see the discussion below about "Should we start with the command line?" which might make this problem go away in a different way.</li> </ul> <h2 id="using-git-switch-restore-instead-of-checkout">Using git switch/restore instead of checkout</h2> <p>This change seems to have worked without problems.</p> <h2 id="should-we-start-with-the-command-line">Should we start with the command line?</h2> <ul> <li>Command line seems to be a too big of a barrier to install and learn. We are wondering whether command line should not be a separate course and we should try to not expect it.</li> <li>Consider starting the Git lesson not from the command line but from an IDE or from the web.</li> <li>Consider starting with cloning and improve a repo first (instead of <code>git init</code> as the first step).</li> <li>Already for this workshop we have provided a "web-based track" parallel to the command line track as safety net in case command line does not work. This was useful and should be developed further.</li> </ul> <h2 id="timetable">Timetable</h2> <p>Here is a list of suggestions we got on how to improve the selection of topics and the timetable.</p> <p>To improve:</p> <ul> <li>Day 1 felt too slow. Idea: "if you are able to do X and Y and Z, you can join from day 2".</li> <li>Sometimes it was too slow, too long to explain concept.</li> <li>Modular code part too much demo, too little participation, not practical enough.</li> <li>Snakemake part did not seem to fit into the flow, it felt out of place (good to know that it exists but might not use it in future; same feeling for helpers).</li> <li>It would be interesting to hear about best practices about how to write code (in a way that others can understand it).</li> <li>Idea: colorize an example code to identify room for improvement, e.g. repetition (but that is difficult to do online).</li> <li>During demo-heavy lessons it is difficult to have interaction and discussion in the room (contributes to the feeling that it is not practical).</li> <li>Git collaboration: instead of discussing the collaboration figures, show an animation or steps or visual aids - otherwise it can be confusing trying to grasp it all.</li> <li>Day 2 felt like lots of downtime (long exercises, breaks, too little time "real lesson").</li> <li>Streaming and in-person interaction is not easy to manage.</li> <li>More practical exercises needed in second week.</li> <li>"On the second week, it was a bit more difficult to know if the tools presented would be useful for us."</li> <li>Stream/exercise-combo works well for Git (first week) but less well for second week.</li> </ul> <p>To keep:</p> <ul> <li>"The first week on Git was very good, all the people that attended were already familiar with Git (they've at least heard of it or used a bit). We still have discovered some tips and now we have a better foundation about Git."</li> <li>Which days most useful? Documentation and Jupyter, then followed by Git intro day 2.</li> <li>In-person participation was appreciated.</li> <li>It was appreciated to see that programming is not just about programming (also about documentation and communication).</li> <li>The lunch break division was globally an improvement (although it also made some days feel like there were too many breaks).</li> <li>Longer break between sessions makes sure that session 1 does not eat time away from session 2.</li> </ul> <h2 id="mooc-ify-the-workshop">MOOC-ify the workshop?</h2> <p>We are considering pre-recording sessions in smaller chunks and also pre-record exercise solutions. We still want to provide an event-feeling but perhaps this can be done with a MOOC, a "flipped-classroom approach", and more focus on answering questions and bring-your-own-code sessions (see also below)?</p> <ul> <li>Streaming workshop was excellent solution during pandemic but we need to check whether this is still good fit.</li> <li>MOOC could be an interesting format.</li> <li>It could relieve some organization effort during the event at the cost of spreading the preparation over a longer time period.</li> </ul> <h2 id="bring-your-own-code-sessions">Bring-your-own-code sessions</h2> <p>This was the first workshop where we scheduled two follow-up sessions, one week after and two weeks after, where learners could bring their own code and ask questions about how to apply the course to their code and research. Unfortunately no learners showed up to these sessions. Our recommendations:</p> <ul> <li>Schedule bring your own code session already in week 2 and then with more time after the workshop.</li> <li>More active advertising, earlier in the workshop.</li> <li>Give examples for problems to bring</li> <li>Offer at different time slots.</li> <li>Consider coupling advertising with workshop survey.</li> </ul> What we plan to improve for the September 2023 workshop 2023-06-25T00:00:00+00:00 2023-06-25T00:00:00+00:00 Unknown https://coderefinery.org/blog/2023/06/25/planning-sep-workshop/ <p>In this post we wish to share our ideas for what we want to change and improve for the for the <a rel="external" href="https://coderefinery.org/workshops/upcoming/">upcoming September 2023 workshop</a>. This is based on <a href="https://coderefinery.org/blog/2023/04/12/lessons-learned-mar-2023/">lessons learned from the March 2023 workshop</a> and on two meetings we had two weeks ago with the CodeRefinery team.</p> <div class="uk-alert-primary" uk-alert> <p>We encourage the community to give us feedback on these ideas either <a rel="external" href="https://coderefinery.org/join/chat/">via chat</a> or via email to <a href="mailto:[email protected]">[email protected]</a>. We are particularly curious to hear what you think about the section <a href="https://coderefinery.org/blog/2023/06/25/planning-sep-workshop/#keep-two-weeks-or-split-in-two-or-more-parts">"Keep two weeks or split in two or more parts?"</a>.</p> </div> <!-- toc --> <h2 id="keep-two-weeks-or-split-in-two-or-more-parts">Keep two weeks or split in two or more parts?</h2> <ul> <li>Problems with current set-up (6 half-days): <ul> <li>Second week has different software requirements and is rather different from first week (git)</li> <li>It could use more exercises but there is currently not much time</li> <li>It is dense</li> <li>Not each lesson feels relevant/interesting for all</li> </ul> </li> <li>We are considering keeping first week focused on Git over 3 days as we have now, but to <strong>spread the second week over a longer time frame (one or two sessions per week)</strong>.</li> <li>Advantages of splitting it off: <ul> <li>More time per lesson</li> <li>More focused preparation</li> <li>More time between lessons (more time to prepare for us, more time to digest and apply for learners)</li> <li>Possibility to add hackathons/ more personalized Q&amp;A</li> <li>Attracting different and more interested audiences</li> <li>The second half could become more research-software-hour-y</li> <li>Enables to do more around the second weeks topics, like adding a hackathon or some panel discussion or a seminar where we could invite previous CR participants/teachers or other people to talk about cool stuff they have been doing around the topic.</li> <li>Collaborative document might be enough and Zoom rooms might not be needed.</li> </ul> </li> <li>Downsides: <ul> <li>Less cohesive workshop</li> <li>Maybe more difficult to schedule although it might be easier to commit time both for organizers and for learners (two instructors would be able to deliver the entire workshop, if needed)</li> <li>Credits? But can be solved by giving recommendations to local organizers (learning diary, quiz, git log)</li> </ul> </li> <li>It could make it more difficult for: <ul> <li>Scheduling other workshops that build on top of this workshop.</li> <li>For those who organize the streaming and video production.</li> <li>For local organizers (<strong>we are particularly interested in their feedback about this idea</strong>).</li> </ul> </li> <li>The first week part could also be extended with a hackathon (3 half-days teaching, followed by a session e.g. one week later).</li> <li>Advertise sessions with a more descriptive title (not "Jupyter", but "How to prototype in Python" or something like that).</li> <li><strong>Concrete suggestion</strong>: keep first week as is (3 half-days) but split second week into 6 two-hour to half-day sessions (reproducible research, software licensing and citation, prototyping in Python, documentation, software testing, modular code development)</li> <li><strong>UPDATE</strong>: after a lot of thinking we decided to keep two weeks this time and perhaps try a more extended format in 2024 but to separate sessions a bit during week two in order to give few sessions more time but also to make it easier for participants to only join for a specific session. In addition, we consider offering additional debrief sessions a la "research software hour" where we can go more in-depth.</li> </ul> <h2 id="creating-a-more-motivating-environment-for-volunteers">Creating a more motivating environment for volunteers</h2> <ul> <li>Improve focus so that we can improve the quality and avoid that most time dissolves in coordinating efforts that could be more focused.</li> <li>Having few days of focused time for preparation. Otherwise with 25% or less in-kind involvement, other day-to-day tasks take over.</li> <li>Organize an <strong>online writing/preparation retreat</strong> (with buddy-system, meeting times booked early).</li> <li>Keep half-day format.</li> <li>Clear session structure and clear commitment (put names behind lessons as early as possible).</li> <li>Knowing who from organizers to contact with questions.</li> </ul> <h2 id="improve-the-experience-for-helpers-exercise-leads">Improve the experience for helpers/ exercise leads</h2> <ul> <li>In the last few versions we had trouble engaging volunteer exercise leads since we either had trouble predicting and planning a central exercise zoom room, or tried without providing one. While this simplifies workshop coordination and planning, it "optimized away" helpers who came to the workshop without own team or local exercise room.</li> <li>This time we will try with a central exercise room (see next section) and try to engage them again.</li> </ul> <h2 id="workshop-format-keep-the-stream-format-but-also-provide-a-central-but-self-organized-exercise-room">Workshop format: keep the stream format but also provide a central but self-organized exercise room</h2> <ul> <li>Continue offering the hybrid format: people joining from class rooms.</li> <li>Again offer centrally managed exercise rooms for learners without own teams. Even if this means "binding" one person to manage that space.</li> <li>However, we need an easily organizable way.</li> <li>Previously it was tricky to manage central exercise rooms: <ul> <li>Rooms became imbalanced (no-shows, empty / overfull rooms) and some exercise leads had then nothing to do.</li> <li>Pre-allocating persons to rooms has previously failed: Some learners selected the "wrong" option or did not show up.</li> <li>People were confused about the model.</li> </ul> </li> <li>What we will try this time: <ul> <li>Self-organized central zoom with free-floating helpers ("expert helpers").</li> <li>We communicate clearly expectations: that we don't really know who shows up.</li> <li>Also communicate meaning of rooms (topical rooms) .</li> <li>Split on-boarding into 2: in-person helpers and Zoom helpers need different info.</li> <li>No exercise below 15 mins, otherwise no time to have discussions with helpers.</li> <li>Communicate that groups can pause the stream and ask questions later in the notes - they do not have to interrupt discussions or mute the stream.</li> </ul> </li> </ul> <h2 id="lesson-development-without-last-minute-stress">Lesson development without last-minute stress</h2> <ul> <li>Organize a 2-day online writing retreat and also a one-week in-person writing retreat later this year.</li> </ul> <h2 id="instructor-on-boarding">Instructor on-boarding</h2> <ul> <li>In past editions the instructor coordinator has met with all instructor pairs and went with them through the checklist. We will keep this.</li> <li>Tech-setup could be done all together.</li> <li>Invite past instructors who have taught the lesson in question earlier to those meetings to provide background and their experiences.</li> <li>Check questions and feedback from last time.</li> <li>Switch instructors less often? Maybe always have one person who has done the lesson before.</li> <li>Plan for an instructor training workshop after the autumn workshop and offer it also at conferences.</li> </ul> <h2 id="what-organizational-changes-are-most-important">What organizational changes are most important?</h2> <p>What would simplify coordination and planning for all involved?</p> <ul> <li>Current playbook: https://coderefinery.github.io/manuals/workshop-playbook/</li> <li>Early role decisions (commitment).</li> <li>All roles using the checklist (it is good to know what is going on in all roles).</li> </ul> <h2 id="most-important-lesson-course-changes">Most important lesson/course changes</h2> <ul> <li>We need to re-think exercises for the second week to make them more interesting. Learners sometimes don't get the point of them.</li> </ul> <h2 id="simpler-registration-form">Simpler registration form</h2> <ul> <li>Keep registration form simple but communicate the different options elsewhere, not in the form. Previously we have tried to use form questions to also communicate the options.</li> <li>Remove the "might" questions. Rather clarify participation options and give participants the flexibility to decide.</li> <li>Remove the question whether somebody is interested in following in person. Rather provide overview about local events, and have links available to local rooms on the workshop page.</li> <li>Link to partner local rooms in registration form, as a possibility for learners.</li> <li>Add an option about central zoom room.</li> <li>Record and add short video explaining the options.</li> <li>Instead of separate observer registration encourage observers to register the same way learners do.</li> <li>Try to arrive at clearer and more consistent naming for "in-person", "breakout rooms", "exercise rooms", "satellite events", ... Names need to be clarified, check also other places and choose commonly used name.</li> <li>For on-boarding we need to know if somebody is interested in being a team-lead/helper: <ul> <li>Ask whether local or central exercise room.</li> <li>Make it clearer that they can change registration.</li> <li>Communicate why we ask for this info.</li> </ul> </li> <li>Learners do not need to be asked whether alone/zoom/local.</li> <li>Do not try a two-step registration process.</li> </ul> <p>The form options will be simplified to:</p> <ul> <li><input disabled="" type="checkbox"/> learner or observer</li> <li><input disabled="" type="checkbox"/> helper at central exercise room</li> <li><input disabled="" type="checkbox"/> helper at local group</li> <li><input disabled="" type="checkbox"/> organizer of local group</li> <li><input disabled="" type="checkbox"/> instructor (I would like to teach a lesson)</li> <li>free text to share additional information with organizers</li> <li>consider asking which sessions the participant is interested in attending</li> <li>contact email for questions</li> </ul> <p>We plan to open registration before end of June 2023.</p> Lessons learned from the March 2023 online workshop 2023-04-12T00:00:00+00:00 2023-04-12T00:00:00+00:00 Unknown https://coderefinery.org/blog/2023/04/12/lessons-learned-mar-2023/ <p>March 21-23 and 28-30, 2023, we held again our <a rel="external" href="https://coderefinery.github.io/2023-03-21-workshop/">CodeRefinery online workshop</a> (6 x 3.5 hours) with 493 individual registrants and 100-200 views on average in Twitch. Here we wish to share with the community and our future selves our lessons learned: What worked well and what we need and plan to improve.</p> <p>If you think you might have solutions for us or want to discuss about the topic, please <a rel="external" href="https://coderefinery.org/organization/contact/">reach out to us</a>. This complements our lessons learned from <a rel="external" href="https://coderefinery.org/blog/2020/04/14/first-online-workshop/">our first online workshop 2020</a>, the <a rel="external" href="https://coderefinery.org/blog/2021/11/25/lessons-learned-may-2021/">May 2021 workshop</a>, and the <a rel="external" href="https://coderefinery.org/blog/2022/11/08/lessons-learned-Sep-2022/">Sep 2022 workshop</a>.</p> <p><strong>We have identified the following main issues that we want to address for future events</strong>:</p> <ul> <li>Speaking more clearly, improving mic quality, and recommending participants to get familiar with Vim, Nano, etc. before the workshop starts.</li> <li>Some attendees expressed confusion with some exercises and recommended more repetition of basic commands and more concrete examples of solutions in exercises.</li> <li>Some attendees suggested improving the teaching style by doing exercises while explaining each step, while others preferred doing the exercises themselves for better learning.</li> <li>Provide more support for online participants and having more, smaller repositories for exercises.</li> <li>Some participants found certain aspects of the training confusing, such as the merging process.</li> <li>Provide clearer instructions.</li> <li>Some participants wanted more hands-on exercises and more information on specific topics like environments, MATLAB, and good documentation and attribution practices.</li> <li>The participants suggested expanding the course duration or offering a series of mini workshops.</li> <li>They also suggested covering ethics and copyright law and providing solutions to exercises directly under each question.</li> <li>There are suggestions for improvement, including making the content more linear, explaining concepts in more detail, and providing more examples.</li> <li>The use of Sphinx, a documentation tool, was discussed, and some participants were unsure of its value.</li> <li>Suggestions for improvements included providing more information on common practices and beginner's mistakes, as well as offering more focused mentorship and help sessions after the course.</li> <li>Some participants felt that the daily schedule could be shorter or more compact.</li> <li>Cheat sheets or code checkpoints could be provided to help with finding information quickly.</li> </ul> <h2 id="daily-summaries">Daily summaries</h2> <h3 id="day-1">Day 1</h3> <ul> <li>The workshop was just right in terms of pace and highly recommendable to others.</li> <li>Participants appreciated the hands-on experience, type-along exercises, availability of workshop material, and the responsiveness of the collaborative document.</li> <li>Some participants suggested speaking more clearly, improving mic quality, and recommending participants to get familiar with Vim, Nano, etc. before the workshop starts.</li> <li>Overall, participants enjoyed the workshop and would like to join more like this.</li> </ul> <h3 id="day-2">Day 2</h3> <ul> <li>The speed and level of the workshop were appropriate and engaging.</li> <li>Several positive comments on the commands and examples covered, the breaks provided, and the helpfulness of the instructors.</li> <li>Some attendees expressed confusion with some exercises and recommended more repetition of basic commands and more concrete examples of solutions in exercises.</li> <li>Some attendees suggested improving the teaching style by doing exercises while explaining each step, while others preferred doing the exercises themselves for better learning.</li> <li>Technical questions were asked about the official Git documentation, the use of Overleaf, and the concept of stash, which were addressed by the instructors.</li> <li>Some attendees provided personal comments and suggestions for future workshops, including the possibility of working on a test project together and adding prompts to show the branch in Git repositories.</li> </ul> <h3 id="day-3">Day 3</h3> <ul> <li>General consensus that the pace of the training was appropriate.</li> <li>Many participants found the hands-on work helpful.</li> <li>Some participants encountered technical difficulties.</li> <li>Suggestions for improvements, such as providing more support for online participants and having more, smaller repositories for exercises.</li> <li>Some participants found certain aspects of the training confusing, such as the merging process.</li> <li>Suggestion for instructors to provide clearer instructions.</li> <li>Overall, a positive response to the training.</li> <li>Many participants indicated that they learned useful skills that they can apply in their work.</li> </ul> <h3 id="day-4">Day 4</h3> <ul> <li>The participants found the speed of the course to be appropriate.</li> <li>They appreciated learning about containers, as well as Snakemake, licensing, and R examples.</li> <li>Some participants wanted more hands-on exercises and more information on specific topics like environments, MATLAB, and good documentation and attribution practices.</li> <li>The participants suggested expanding the course duration or offering a series of mini workshops.</li> <li>They also suggested covering ethics and copyright law and providing solutions to exercises directly under each question.</li> <li>Overall, the participants enjoyed the course and found it to be informative and useful.</li> </ul> <h3 id="day-5">Day 5</h3> <ul> <li>Participants have varying opinions on the pace, level, and usefulness of the workshop.</li> <li>Some participants found the tools introduced to be too advanced, while others found them to be a good challenge.</li> <li>There are suggestions for improvement, including making the content more linear, explaining concepts in more detail, and providing more examples.</li> <li>The use of Sphinx, a documentation tool, was discussed, and some participants were unsure of its value.</li> <li>Overall, participants found the workshop to be informative and inspiring, with some planning to spend additional time reviewing the content.</li> </ul> <h3 id="day-6">Day 6</h3> <ul> <li>The course was generally well-received and appreciated.</li> <li>Many participants felt that they learned useful skills and would recommend the course to others.</li> <li>Suggestions for improvements included providing more information on common practices and beginner's mistakes, as well as offering more focused mentorship and help sessions after the course.</li> <li>Some participants felt that the daily schedule could be shorter or more compact.</li> <li>Cheat sheets or code checkpoints could be provided to help with finding information quickly.</li> <li>Technical concerns included difficulty with using the automatic debugging tool in GitHub.</li> <li>There were also some questions about how to receive course credits or certificates.</li> </ul> <h2 id="registration">Registration</h2> <ul> <li>The registration process has definitely been improved, but we have identified that it could be further streamlined.</li> <li>Our initial ambition was to register participants in two steps: in the first step to make sure they get all following information, and in the second step signing up more concretely to a specific format. But during the registration we decided to not ask all registrants to update their registrations. For future we wish to make this one-step.</li> </ul> <h2 id="zoom-and-twitch">Zoom and Twitch</h2> <ul> <li>Before this workshop we had decided to do away with the group Zoom rooms because it proved to be a lot of work for inconsistent results. In previous workshops we found that the problems start to mount when members don't show up for the group they signed up for. As the workshop progresses, there is a drop in attendance and this affects the Zoom breakout rooms. This in and of itself is not a big problem, but we found that we get some rooms that are completely empty; some rooms are at full capacity; and some rooms have 1 or 2 people. We then have to asses each day and rearrange people together with expert helpers. This proved to be more work for little improvement in the quality of the workshop. So, we decided to do away with the group rooms for this workshop and focus only on the collaborative document.</li> </ul> <h2 id="collaborative-notes">Collaborative notes</h2> <ul> <li>As was mentioned above, we had more hands on the collaborative document since we did away with the Zoom rooms. This proved to work well because we had a lot more people answering questions, so the document was kept updated and archived for maximum performance and accuracy.</li> </ul> <h2 id="installation-and-tools">Installation and tools</h2> <ul> <li>We could have a demo exercise (or some) that people can test before the workshop: "If you feel comfortable with this you’re gonna be fine during the workshop".</li> </ul> <h2 id="lesson-content">Lesson content</h2> <ul> <li>We could shorten the lecture-part by moving exercises to the end.</li> <li>Longer exercises would benefit in on-site rooms.</li> <li>We are constantly looking at improving the quality of the lessons we provide, so this is an ongoing process. We take into consideration all the feedback that is given through the collaborative document to inform our decisions on where we should focus for lesson improvement.</li> </ul> <h2 id="communication-with-participants">Communication with participants</h2> <ul> <li>Add all sessions to the <a rel="external" href="https://coderefinery.org/calendars/">CodeRefinery calendar</a>.</li> <li>Link all relevant repositories in one place (i.e. this calendar and anything that needs attention near a workshop). Make sure those repositories have good instructions in READMEs.</li> </ul> CodeRefinery workshop, 21-23 and 28-30 March 2023 2023-02-14T00:00:00+00:00 2023-02-14T00:00:00+00:00 Unknown https://coderefinery.org/blog/2023/02/14/march-workshop/ <p>Our March workshop is soon. By now, many of you know what a CodeRefinery workshop is - git (intro and collaborative), social coding, reproducible research, Jupyter, documentation, testing, and modular code development (<a href="https://coderefinery.org/lessons/">check all material</a>). But what's less known is all the new ways to take part.</p> <p><strong><a rel="external" href="https://coderefinery.github.io/2023-03-21-workshop/">Workshop page</a> and <a rel="external" href="https://indico.neic.no/e/coderefinery-march-2023">Register</a></strong></p> <p>In case you didn't know, we teach via livestream - which means anyone can attend and we have unlimited capicity. Our <a href="https://coderefinery.org/workshops/teaching-style/">teaching style</a> (as far as we can tell, quite unique to us!) makes the courses still engaging while allowing us to reach a much larger audience than we could otherwise. We also offer some in-person or Zoom attendance options.</p> <p>As an <strong>individual</strong>, you can attend - by yourself watching the livestream, apply to work together in a Zoom team we organize, or some local partners will even have in-person rooms to attend. Registration is <strong>not</strong> binding, sign up for information and come when you can (you won't take a seat from others). <strong>To simplify registration, you can just sign up and you'll get contacted about Zoom/in-person possibilities later.</strong></p> <p><strong>If you have some friends, work together!</strong> Book your own meeting room and watch the livestream together. We provide hands-on exercises that on which you can work together - or even try to apply the techniques to your own projects during this exercise time. Working with a friend seriously improves learning and uptake after the workshop.</p> <p><strong>If you've been to CodeRefinery before, why not volunteer?</strong> (For any of these, sign up in the normal registration form and tick the interested in being staff/observer box):</p> <ul> <li>Be a team leader to allow us to support more teams (register in the normal form and indicate this interest there).</li> <li>Be a co-instructor: thanks to our <a href="https://coderefinery.org/blog/2022/10/31/co-teaching/">co-teaching</a>, we've reduced the barrier to get started. In fact, someone that has taken CodeRefinery once would make a perfect co-instructor for a lesson, since you'll remember what it was like to be a learner and act.</li> <li>We can always use volunteers to follow up on HackMD questions, help manage Zoom, communications, and generally all the other little things that need doing.</li> </ul> <p>Why volunteer? You'll learn more of the workshop contents and get involved in our teaching network - really good for both your career and your organization.</p> <p>More than anytime before, CodeRefinery is about being accessible to as many learning styles as possible. Anyone can register and you'll get information, you can decide if you want to watch the livestream, review videos later, or just be aware of what happened and check again later.</p> <p>We hope to see you there!</p> Learner teams in courses 2022-11-28T00:00:00+00:00 2022-11-28T00:00:00+00:00 Unknown https://coderefinery.org/blog/2022/11/28/teams/ <p><em>Part of a series on the <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of Teaching</a></em></p> <p>In April/May 2020, when we started doing "large" (~100 people) online courses, we wanted a way to be more interactive. This was before the time of <a href="https://coderefinery.org/blog/2022/10/31/co-teaching/">co-teaching</a> and barely at the start of <a href="https://coderefinery.org/blog/2022/10/24/parallel-chat/">parallel chat</a>, so we were focused on the personal experience. Our solution was <strong>learner teams</strong>.</p> <h2 id="how-it-worked">How it worked</h2> <p>The basic mechanics was this:</p> <ul> <li>Learners are grouped into teams of ~5 people each. (We try no more than 6 people that don't know each other already, if a team already knows each other then we take whatever size they came with).</li> <li>Some learners registered as teams (in this case, we kept them together).</li> <li>We would also accommodate individual learners by finding suitable teams for them - and this did work well.</li> <li>Each team has an <strong>exercise leader</strong> assigned to it. It might be someone who separately volunteered, or it might be someone who is already part of the group.</li> <li>Teams are pre-assigned and static over the entire workshop. This takes more work, but means that a community forms - randomly assigning teams each day would <em>not</em> work as well.</li> <li>There are lecture parts, and there are exercise parts. During the exercise parts, everyone is moved to a breakout room. The exercise leaders work with their team to do the exercises and in general be friendly.</li> <li>We have other course staff around ("expert helpers") and they rotate between different rooms and make sure the expert helpers are doing well, if they need any help, and if they are keeping a safe and welcoming course environment.</li> </ul> <p>We have a short <a rel="external" href="https://coderefinery.github.io/manuals/team-leaders/">~1-hour training course for the exercise leaders</a>, where we try to motivate their value, give hints on promoting interaction, hints on what happens if things go badly, and especially about motivation of learners and safe learning environments.</p> <p>We would encourage entire groups to sign up together as a team. Research has shown that when two people (instead of one) learn some new skill, it is much more likely to be adopted by a group. This is the natural extension of that, and it becomes very easy to take entire groups into a course.</p> <p>For exercise leaders, detailed knowledge about the course material wasn't needed, exercise leaders could come by and help with that. The more important role of the exercise leader was social: being able to keep everyone engaged and make sure that no one felt left out. Knowing a little bit about command line interfaces and not being scared of reading error messages is a nice bonus, but not strictly needed.</p> <p><strong>Teams seemed to work best when it was actively managed.</strong> This doesn't mean forcing everyone to be a part of a team, but if someone is on a team, it's clear they are expected to take part in it. There should be a clear "do you want to take part in a team?" during the registration phase.</p> <h2 id="evaluation">Evaluation</h2> <p>Teams worked great for us to scale to ~100-120 people. We could have one instructor per lesson with plenty of staff to support the teams. We could scale up the number of people we could teach at once much more than the traditional 3-instructor model in a classroom.</p> <p>In principle, this is a lot like "work tables in a classroom". In some ways, it wasn't as nice since it was online. But in other ways, screensharing can allow everyone to see the active screen - something not easily possible with this sized groups in a classroom. Everyone had a clear team, and exercise leaders were clearly responsible for the people on their teams - which meant that fewer people were at a table but not really participating in the group.</p> <p>When teams already knew each other in advance, it worked exceptionally well. They would usually speak the same domain language and programming language, and use the same tools. Often, one team member had more experience and became the exercise leader. Even when teams didn't know each other in advance, if we could try to put people together based on these criteria, by day 2 they were working very well together.</p> <h2 id="benefits">Benefits</h2> <p>Teams allowed us to scale to an even larger number of people. Our registration was: "We take people up to the capacity of exercise leaders we have. However, we take any team that comes with their own exercise leader, even if we are over our basic capacity". This worked well.</p> <h2 id="decrease-of-teams-with-the-rise-of-livestreaming">Decrease of teams with the rise of livestreaming</h2> <p>By 2022, the roles of teams has been decreasing (though this isn't exactly a good thing). Our developments in <a href="https://coderefinery.org/blog/2022/10/31/co-teaching/">co-teaching</a>, <a href="https://coderefinery.org/blog/2022/10/24/parallel-chat/">parallel chat</a>, and <a href="https://coderefinery.org/blog/2022/11/28/teams/2022-11-14-livestreaming-courses.md">livestreaming</a> allows us to break free of the limits of zoom. Co-teaching provides engagement without needing two-way communication, parallel chat allows a way for everyone to ask questions at the same time, and with that livestreaming goes bigger than even the team-based approach. In our recent attempts at teams, even when we provided an in-person team room with staff, there were very few attendees. After spending large amounts of time setting up the teams, this was a bit disappointing. Still, this doesn't discourage us overall - if people find the mass communication to work better, that's fine! We can be available for those who want something else. Thus, or latest strategy is "livestream for the masses, higher-quality teams for those who want them."</p> <h2 id="downside-amount-of-organizational-work">Downside: amount of organizational work</h2> <p>The biggest downside is the overwhelming amount of effort needed to assign and manage teams. The more work done to make good teams, the more effort needed, and it almost needs a full-time person to manage it. This means we need to re-think our registration to make it more sustainable in the long-term.</p> <p>The advance assignment was doable, but handling last-minute changes to keep the teams balanced, or handling no-shows, was the worst part. In order for the team concept to work best, we needed to handle these cases, since a team of too few people, or without an exercise leader, or changing every day didn't work well.</p> <h2 id="summary">Summary</h2> <p>In summary, teams allowed us to make a more interactive and engaging course than many others could online. It's similar to how tables organized themselves in groups in classrooms, but by putting more attention to the arrangement, we could ensure fewer people were left out than in-person. Yet, practical difficulties and the benefits of a livestream strategy mean that teams have a less central role than they used to. In the near future, we will put extra effort into simplifying the registration system so that they can co-exist with the large livestream courses, since they are worth it when they work.</p> <h2 id="see-also">See also</h2> <ul> <li><a rel="external" href="https://coderefinery.github.io/manuals/team-leaders/">CodeRefinery manuals: Exercise leaders</a></li> <li><a rel="external" href="https://coderefinery.github.io/manuals/expert-helpers/">Expert helpers and their role in helping exercise leaders</a></li> <li>Series index: <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of Teaching</a></li> </ul> Livestreaming courses 2022-11-14T00:00:00+00:00 2022-11-14T00:00:00+00:00 Unknown https://coderefinery.org/blog/2022/11/14/livestreaming-courses/ <p><em>Part of a series on the <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of Teaching</a></em></p> <p>The idea of livestreamed courses came in early 2022, during the early phase of remote work and teaching. Everyone started online courses and events, but immediately stared hiding their connection information behind registrations because "someone might do something bad if they could join"[1]. While there was a valid short-term reason for this, something seemed wrong: the promise of the internet was that we can reach everyone. Yet here we are making things closed by default.</p> <h2 id="start-of-the-livestream-idea">Start of the livestream idea</h2> <p>I got to thinking about this, and realized we needed to re-think what it means to interact online. Our first courses used the "meeting" concept - everyone talks to everyone. But online activities with large audiences aren't like that - common mass engagement models include things like TV broadcasting, posting videos, forums, livestreams, and news articles.</p> <p>So once I understood the conceptual problem with Zoom meetings, I knew what to do. We started working towards disconnecting the core teaching parts from the meeting parts. That resulted in developments like <a href="https://coderefinery.org/blog/2022/10/24/parallel-chat/">parallel chat ("HackMD") for questions</a> and <a href="https://coderefinery.org/blog/2022/10/31/co-teaching/">co-teaching</a>, and lots more things which you will see later such as learner teams. Basically, it was a systematic process of re-thinking teaching until we <em>could</em> move on to the next step without losing essential points like interactivity or engagement.</p> <h2 id="how-livestreaming-works-for-our-courses">How livestreaming works for our courses</h2> <p>Then came <strong>livestreaming</strong>. Livestream is a fancy way of saying live video, in this context as a public broadcast over the internet. We had a few first pilots made by having Zoom do the livestreaming directly to Twitch (there is something built-in, but I didn't like it very much) - at least this let us say "anyone who wasn't able to register can watch the stream". We also got a lot of experience with streaming in our project <a rel="external" href="https://researchsoftwarehour.github.io">Research Software Hour</a>.</p> <p>The fully "proper" livestreamed course was 2021 February, our <a rel="external" href="https://scicomp.aalto.fi/training/scip/winter-kickstart-2021/">Intro to scientific computing/HPC Kickstart</a>, and was great! There were no major problems, and it actually felt pretty refreshing because for once, everything felt like it was under control. It was too early to livestream every single course, but by late 2022 we are using it for most of our capstone courses.</p> <p>How do we actually do it? Instructors teach by Zoom, but there are no learners or helpers there. The Zoom windows are captured by <a rel="external" href="https://obsproject.com/">OBS (Open Broadcaster Software)</a>, which livestreams to Twitch. Course staff can broadcast to everyone, but the audience can't interfere with each other, except through our (moderated) channels. This lets us scale far more than we could otherwise.</p> <blockquote> <p>Livestreaming is made possible by strategies like parallel chat and co-teaching. Because we livestream, we can now do reverse hybrid, be more open, produce videos immediately, work together, and simplify registration. Livestreaming is the mediator of all of our strategies - even if it's not technically required.</p> </blockquote> <h2 id="evaluation">Evaluation</h2> <blockquote> <p>I attended several "top" conferences/workshops/seminars as well as videolectures this past year in their virtual implementations, and this event is easily the best out of all of them when it comes down to presentations and audience participation!</p> <ul> <li>Feedback from Summer 2021 HPC Kickstart</li> </ul> </blockquote> <p>In general, feedback was positive.</p> <p>Let's just say there was one surprising thing we noticed: since the audience isn't in the Zoom, during breaks (when the livestream is muted and video off), the co-instructors are free to discuss without disrupting the course. This actually is great for the co-instructors to manage the flow of the course - and students can continue interacting via <a href="https://coderefinery.org/blog/2022/10/24/parallel-chat/">parallel chat</a> anyway. And when the audience is not in the stream, you can publish videos immediately with no privacy risk - which is great for accessibility.</p> <p>Livestreamed courses aren't exactly perfect, but they are pretty good and I think they should be considered more. It does take some tech setup and some time to get used to them. Most people probably wouldn't want to use it for small courses, so there is some threshold of being worth it. Whatever the case, I think it's something that everyone teaching online should think about.</p> <h2 id="see-also">See also</h2> <ul> <li><a rel="external" href="https://www.youtube.com/watch?v=WjmttAniZX8">Demo of livestream teaching</a> (check the video description to know what is going on).</li> <li><a rel="external" href="https://coderefinery.github.io/manuals/livestream-teaching/">Teaching via livestreaming</a> in the community-teaching guide.</li> <li><a rel="external" href="https://coderefinery.github.io/manuals/coderefinery-mooc/">CodeRefinery MOOC</a>, which is mainly about livestreaming.</li> </ul> <hr /> <p>[1] Incidentally, since 2020 we have had a daily online meeting, our Scientific Computing Garage help session, with the Zoom link online, and have never had any problems. My hypothesis is that if you don't have an exact data listed along with the Zoom information, it's not found by those that want to troll.</p> Lessons learned from the Sep 2022 online workshop 2022-11-08T00:00:00+00:00 2022-11-08T00:00:00+00:00 Unknown https://coderefinery.org/blog/2022/11/08/lessons-learned-Sep-2022/ <p>September 20-22 and 27-29, 2022, we held again our <a rel="external" href="https://coderefinery.github.io/2022-09-20-workshop/">CodeRefinery online workshop</a> (6 x 3.5 hours) with 204 individual registrants plus 10 teams with a total of 47 participants. Here we wish to share with the community and our future selves our lessons learned: What worked well and what we need and plan to improve. We use bullet point format for brevity. If you think you might have solutions for us or want to discuss about the topic, please [reach out to us(https://coderefinery.org/organization/contact/). This complements our lessons learned from <a rel="external" href="https://coderefinery.org/blog/2020/04/14/first-online-workshop/">our first online workshop 2020</a> and the <a rel="external" href="https://coderefinery.org/blog/2021/11/25/lessons-learned-may-2021/">May 2021 workshop</a>.</p> <p><strong>We have identified the following main issues that we want to address for future events</strong>:</p> <ul> <li>Registration process is still too complicated.</li> <li>We are asking ourselves how to further scale without being completely overwhelmed by coordination/communication/synchronization.</li> <li>There are not enough exercises, especially in the later workshop days and exercise leads often feel that they don't have enough to do so we need to improve the experience for exercise leads.</li> <li>Lots of effort goes into recruiting exercise leads but then it may be demotivating for some to participate if there are no-shows or not enough interaction in the breakout rooms.</li> </ul> <h3 id="registration">Registration</h3> <ul> <li>We still need a more lightweight system registration. <ul> <li>This is a balancing act between guiding people and trusting them to self-organise.</li> </ul> </li> <li>Could we actually get away with no registration at all? How to get stats then? <ul> <li>Zoom and Twitch give data like the number of persons viewing. One may ask in the HackMD about the country of origin and additional information for the statistics. <ul> <li>Part of it can be via the icebreaker questions.</li> </ul> </li> </ul> </li> <li>If we offer a central registration and partner registration sites, they ideally need to open at the same time, otherwise participants sign up in the "wrong" one.</li> <li>We could have registration but let people self-organise more: <ul> <li>Offer HackMD, exercise lead zoom, exercise Zoom, stream and inform people about those resources.</li> <li>Give hints about different ways to participate but no rigid instructions.</li> </ul> </li> <li>We could leave team registration completely to the partners or participants to handle: <ul> <li>Tell that they could summon teams in their organisation communication channels.</li> <li>They could indicate somewhere that they are open for managing additional teams.</li> <li>Tell organisations that they can organise their own registration.</li> </ul> </li> <li>Exercise leader registration was confusing (too many forms to fill out).</li> <li>We could ask for participants' consent to be contacted for future events organized by us to allow past participants to inform their colleagues about an upcoming workshop.</li> <li>How to deal with late registrants? <ul> <li>Should they get the Zoom link or only HackMD? <ul> <li>If not we should take those options away from the registration form. Maybe have a last minute registration form as a separate one.</li> </ul> </li> </ul> </li> <li>Consider adding others who are helping to Indico (our registration system) as managers :grin:.</li> <li>We could communicate clearer that also participating part of the workshop is possible and encouraged.</li> </ul> <h3 id="workshop-format">Workshop format</h3> <ul> <li>We noticed that most participants were interested in the Git part and after the Git lessons the interest was smaller. But it could also be that the Git lessons were the first lessons and then work load increased or interest decreased or participants found it too difficult.</li> <li>Communicate better that even if the Git part gets too difficult, the second week may still be worth watching and again easier to comprehend.</li> <li>Generally we observed a significant no-show rate (over 50%).</li> <li>Maybe this format is too big for the resources/time that we have as organisers. <ul> <li>Maybe the task distribution was not clear/visible.</li> <li>It at least difficult to get enough instructors to commit</li> </ul> </li> <li>Learners were not that motivated in joining the Otaniemi in-person (daily decreasing numbers).</li> <li>Is September too crowded with other events?</li> <li>Have we saturated the local market?</li> <li>Workshop going over lunch time (until 13:30 local time) was an issue at least in JYU and CSC, <ul> <li>People managed when topic to come after break was announced before break so that they knew if they could skip without losing the thread.</li> </ul> </li> <li>We could try flipped learning: have people watch videos / read the docs and then come on-site/online to discuss and solve problems</li> <li>Should we do more asynchronous teaching/learning?</li> </ul> <h3 id="coordination">Coordination</h3> <ul> <li>Establish the process according to the experience gained from this and previous workshops: <ul> <li>Make step-by-step instructions in manuals on how to arrange such events.</li> <li>Put everything that participants will need for the workshop already into the Indico confirmation message. <ul> <li>Info from emails sent could be also in manuals except for the links.</li> </ul> </li> </ul> </li> <li>It might be interesting to count the number of hours/emails/euros/zooms spent per participant showing up since also in this course we struggle to some extent with no-shows.</li> </ul> <h3 id="zoom-and-twitch">Zoom and Twitch</h3> <ul> <li>Ask exercise leads (ELs) not to speak in learners Zoom while lecturers speak in Twitch.</li> <li>The goal was to have Zoom instructions about breakout rooms and open breakout rooms well before the stream starts but we didn't manage that this time. We opened them ~10 minutes before exercises.</li> <li>Utilise Zoom annotate in co-teaching.</li> <li>Exercise Zoom rooms: <ul> <li>Tech questions room: difficult to follow if someone actually goes there. <ul> <li>It would be better to join the tech room during breaks, or before/after the lectures.</li> </ul> </li> <li>Quiet room had 1-3 participants always.</li> </ul> </li> <li>Exercise room instructions screen-share: We did it from separate device so we had the host computer free to operate stuff.</li> <li>We could share the Zoom link as well and consider having a password and/or waiting room (but then somebody would have to manage that).</li> <li>More interaction in video room: <ul> <li>Since there was so little interaction and not enough exercise time: some ELs felt that they "are not needed"</li> <li>Too few exercises or too short exercise time and hence not enough possibility for interaction.</li> </ul> </li> <li>Exercises felt too short (because many participants were software-unprepared).</li> <li>Navigation problems among different webpages continues to be an issue. Few suggestions on how we could solve it have been and are being discussed <a rel="external" href="https://github.com/coderefinery/coderefinery.org/issues/697">here</a>.</li> </ul> <h3 id="collaborative-notes">Collaborative notes</h3> <ul> <li>HackMD goes to Twitch chat anyway so maybe no point in keeping it as a secret. <ul> <li>Add HackMD link to the workshop page and use the workshop page as main entry point so that participants don't have to hunt for links in email inboxes.</li> </ul> </li> <li>HackMD started to be slow even if it should not with ~100 participants. <ul> <li>Numbering questions adds confusion -&gt; keep bullets and change to numbers in archive if needed. But this problem was only there because the document was sluggish at times.</li> <li>Note for future: when pre-seeding the question numbers, leave a line between them. Then, when someone pushes enter after a number to add a new line, it doesn't increment the future numbers. Just saw this, this solves a big problem with numbering.</li> </ul> </li> <li>Later in the workshop we deployed our own HedgeDoc instance, which worked quite well.</li> </ul> <h3 id="installation-and-tools">Installation and tools</h3> <ul> <li>Many did not install software beforehand. Either we haven't communicated clearly enough that this is needed or the install sessions were not recognized and not taken up. Very few people showed up at the install help sessions.</li> </ul> <h3 id="lesson-content">Lesson content</h3> <ul> <li>More big picture cohesion between exercises: It has been suggested to have a better connection between lessons and work on one repository that is continuously improved.</li> <li>Provide snapshots and starting points for those who have not done the previous exercises.</li> <li>Topics in Day 4 (at least) would deserve a longer lesson.</li> <li>We can try to communicate better that after the Git lessons it can be OK and also useful to join only for the lessons of interest (to motivate people to pop in also for 1 or 2 lessons).</li> <li>Especially in in-person: the Twitch sessions felt long (since there was so little interaction in the in-person rooms).</li> </ul> <h3 id="communication-with-participants">Communication with participants</h3> <ul> <li>Add all sessions to the <a rel="external" href="https://coderefinery.org/calendars/">CodeRefinery calendar</a>.</li> <li>Link all relevant repositories in one place (i.e. this calendar and anything that needs attention near a workshop). Make sure those repositories have good instructions in READMEs.</li> </ul> CodeRefinery Mastodon account 2022-11-08T00:00:00+00:00 2022-11-08T00:00:00+00:00 Unknown https://coderefinery.org/blog/2022/11/08/mastodon/ <p>For the obvious reasons, CodeRefinery is looking into a Mastodon account. You can now find us at <a rel="external" href="https://fosstodon.org/@coderefinery">@[email protected]</a>.</p> <p>We will try to mirror to both, at least for the time being. If anyone has ideas about how balance the two, please let us know. We will have the CodeRefinery account follow other staff and interesting people related to CodeRefinery's mission, so if you are looking for other interesting people to follow to seed your network, check that out, too.</p> <p>Mastodon is part of a federated social network, open source, and not under the influence of big companies - just what we should be supporting more of. Interested in joining yourself?</p> <ul> <li><a rel="external" href="https://mastodon.help">https://mastodon.help</a> gives a basic introduction of the how and why. <a rel="external" href="https://fedi.tips/">https://fedi.tips/</a> gives a longer FAQ (and a separate introduction).</li> <li>Usernames are like emails with a username and a server name, <code>@[email protected]</code>.</li> <li>To join, you choose a server that you feel comfortable in, and they all communicate. Some recommendations are below.</li> <li>You can follow anyone regardless of their server, but the server you choose might affect what you see in the local timelines (for example, an art-focused server will probably have more stuff interesting to artists). Later, it's easy to move and automatically redirect your followers.</li> <li>When in doubt, just join somewhere that looks reasonable - don't let the Paradox of Choice hold back progress!</li> </ul> <p>If you are just joining, you can start out by following CodeRefinery - copy <code>@[email protected]</code> to your search and follow it. You may be interested in following some of the people that we follow to seed your list.</p> <p>Deciding a server:</p> <ul> <li>We chose <a rel="external" href="https://fosstodon.org">https://fosstodon.org</a> (FOSS = "free and open source software") to focus on the software and technology side of things.</li> <li>For others in academia or research, <a rel="external" href="https://fediscience.org/server-list.html">https://fediscience.org/server-list.html</a> is a very nice list of other interesting servers.</li> <li><a rel="external" href="https://mastodon.social/">https://mastodon.social/</a> is run by the non-profit that coordinates the Mastodon open-source project, but that does <em>not</em> mean you should necessarily prefer it.</li> <li>Do a web search for server lists. There are both news articles with broad recommendations, and searchable lists with many servers for specialized topics.</li> </ul> <p>What you should know about Mastodon (especially vs. Twitter):</p> <ul> <li>It isn't designed to feed you content via internal algorithms: you have a much more active role in determining what you see. You need to find some people to follow, follow who they follow, and develop your network. At the same time, boost ("reblog") things that are good so that your network can see them.</li> <li>It's not designed for low-effort replies (quote-replies) since it makes engagement farming and negative attention. You <em>can</em> reply to posts with the reply button on each post. (don't forget you can click on post to see the thread).</li> <li>Use hashtags to make things searchable, there is no full-text search (to make it harder for random attacks based on opinions)</li> <li>"Fediverse" ("federated universe") is the term used to refer to the entire network of Mastodon servers (and more) that can communicate. It's not just Mastodon - <a rel="external" href="https://en.wikipedia.org/wiki/ActivityPub">ActivityPub</a> can communicate across different types of servers, such as image hosting, video, blogging, etc. - in theory avoiding lock-in.</li> <li>The Mastodon network is currently absorbing millions of new users in a matter of days. Especially the popular servers can be a bit behind in all of the hidden network synchronization work.</li> </ul> <p>We hope to see you there!</p> <h3 id="see-also">See also</h3> <ul> <li><a rel="external" href="https://fediscience.org/server-list.html">Academia/research server list</a></li> <li><a rel="external" href="https://mastodon.help">https://mastodon.help</a></li> <li><a rel="external" href="https://fedi.tips/">https://fedi.tips/</a></li> <li><a rel="external" href="https://www.pwnallthethings.com/p/twitter-was-special-but-its-time">About engagement farming</a></li> </ul> Video publishing supports more learning styles 2022-11-08T00:00:00+00:00 2022-11-08T00:00:00+00:00 Unknown https://coderefinery.org/blog/2022/11/21/video-publishing/ <p><em>Part of a series on the <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of Teaching</a></em></p> <p>What if all the talking in a course didn't disappear right after the course was over?</p> <p>When we went online, many people thought: avoid recording courses, that's a privacy risk for participants. I firmly think this is the right choice: I don't think any privacy risk to participants is worth it, and "don't say anything if you don't want to be recorded" isn't good enough, either - I don't want to push "publish" and have to <em>hope</em> that no one missed the warning. I don't want to motivate participants to be silent. Editing videos takes a long time and is hardly worth it.</p> <p>This is part of why we developed <a href="https://coderefinery.org/blog/2022/11/14/livestreaming-courses/">livestream teaching</a>: we want to separate the instructor interaction from learner interaction, so that there is <em>no privacy risk whatsoever when recording</em>. This only works if the livestream is engaging enough, but our previous posts show how we handled that problem.</p> <p>In order for a video to be useful, it has to be published <em>quickly</em>. Watching videos months later isn't that engaging[1], but as a immediate follow-up for things you missed, or catching up if you had to miss a day, it is <em>extremely</em> useful. We can't have a long publishing process with this.</p> <p>So, with livestreaming, what do we get?</p> <ul> <li>The livestreaming platform usually records the video, making it immediately available in raw form. This usually gets a lot of views, even if it is raw.</li> <li>Extensive editing isn't needed, since you aren't looking for privacy issues in the stream - just making it "good enough" in the amount of time you have.</li> <li>Learners can catch up immediately or refresh themselves on what they saw going off into the future.</li> <li>If learners know videos will be available, they are suddenly much more free to go with the flow of the course.</li> </ul> <p>We actually made our own tool, <a rel="external" href="https://github.com/coderefinery/ffmpeg-editlist">ffmpeg-editlist</a>, that allows us to define cut points in YAML file, and then run a process to do the editing. This allows us to distribute the editing via git, and copy-and-paste from previous years to save time. Thanks to this, it's our standard to have videos published by midnight the day of the course.</p> <p>Overall, this works well. We seem to get lots of views with the Twitch automatic video (which lasts for 7 days): the same day as the course, usually 1-2 times the number attending the livestream (<a rel="external" href="https://github.com/coderefinery/workshop-stats/blob/main/data/python-for-scicomp-2022/README.md#twitch-video-views">stats from Python for Scientific Computing 2022</a>). The YouTube videos tend to get much fewer, since it's not ready on time for people catching up the same day. I'm still the main one making the videos, but it's simple enough that others could do so. I think I put in too much effort, and if I wanted it could be much faster - say, take only an hour per day.</p> <p>I wouldn't recommend everyone try to make perfect videos for everything, but it's a nice advantage of livestreaming, and if you want text-based video editing for other events, ffmpeg-editlist might make it possible.</p> <p>In short, I don't think the point of video publishing is to make a high-quality standalone production (although we can do that, and it can work well, especially with co-teaching). The most direct impact is supporting diverse teaching styles in the short term.</p> <p>Read more:</p> <ul> <li><a rel="external" href="https://youtu.be/thvMNTBJg2Y">video demonstration of ffmpeg-editlist</a></li> <li><a rel="external" href="https://coderefinery.github.io/manuals/video-editor/">Video editor</a> role description in the CodeRefinery manuals</li> <li><a rel="external" href="https://github.com/coderefinery/ffmpeg-editlist">ffmpeg-editlist</a></li> <li><a rel="external" href="https://github.com/AaltoSciComp/video-editlists-asc/blob/master/kickstart-2022-summer.yaml">Sample ffmpeg-editlist file</a>, very well done (perhaps too much).</li> </ul> <p>[1] Before remote teaching in 2020, an argument against recording the teaching was "it won't be interesting for others to watch later". This post also shows how that's the wrong perspective: the videos aren't only for random people later, but people in the course already.</p> Reverse hybrid teaching 2022-11-07T00:00:00+00:00 2022-11-07T00:00:00+00:00 Unknown https://coderefinery.org/blog/2022/11/07/reverse-hybrid/ <p><em>Part of a series on the <a href="/blog/2022/10/17/future-of-teaching/">Future of Teaching</a></em></p> <p>In 2020, we went to remote teaching. In 2022, we are talking about hybrid so that we can keep accessibility benefits of being online, while returning to some of the benefits of interaction. But does this work? There are plenty of issues with hybrid, mainly the inequality of the people in-person and those who are remote. What can we do about this?</p> <p>We've found a surprising solution which we call <strong>reverse hybrid</strong>. Surely others have thought of this, and maybe there is even a proper name.</p> <p>Let's do a thought experiment in a large course. There is one teacher and hundreds of students. What's the benefit to students doing this in-person? It's probably not being in the same room as the teacher, since most students don't have time to ask a question, or even approach the teacher after the course. The benefit is how students can interact with each other beside the lecture. The downside is that making good, accessible online material in a lecture room is hard.</p> <p>I wouldn't quite say it's accidental, but we have started this reverse hybrid strategy: the teachers are online, and students can be in-person in small groups. We started this by encouraging students to meet up with their friends or colleagues to work on exercises, while we teach online. As things became more relaxed, we had some staff organize official in-person exercise sessions - while the current instructors kept teaching online. This has worked surprising well - students who want interaction can get it (and actually interact, without disrupting the whole course), and those that don't can still attend no matter where they are.</p> <p>But what do we lose? Do we lose interaction with instructors? As our posts on <a href="https://coderefinery.org/blog/2022/10/31/co-teaching/">co-teaching</a> and <a href="https://coderefinery.org/blog/2022/10/24/parallel-chat/">parallel chat</a> show, no! When you get to these large courses, students can't interact with instructors without technology anyway. In-person interactions aren't as anonymous, so that solution doesn't motivate all learners to be active.</p> <p>And what do we gain? The course isn't bound to one location, literally anyone in the world can attend. There are high-quality materials that everyone can review afterwards, so that the audience has the time to relax and interact. By being able to scale up, we can have more staff, which allows us to interact more via <a href="https://coderefinery.org/blog/2022/10/24/parallel-chat/">parallel chat</a> or co-instructors. It's even possible to go as far as we go and make each course an international collaboration with local breakout rooms, and plenty of staff to manage everything.</p> <p>Is "reverse hybrid" for everyone? Clearly not. I think it could work for small courses too if a teacher really promotes the use of technology to make interaction, but it might feel a bit weird - though I think it's worth trying! I think the biggest advantage is that it allows you to scale up in a way that you are <em>no longer have to teach alone</em>, which is a mindset change more than anything.</p> <p>In practice, does it work? In several cases where we had a structured in-person session, it has worked well. We know of cases of groups of friends or colleagues joining together to watch and do exercises for each of our courses, but we don't have a way to say just how many. We do have a report of it not working so well - because the online interaction dominated the in-person interaction. But is that really a negative about in-person, or an overwhelming message about how engaging our online courses are?</p> <p>See also</p> <ul> <li><a rel="external" href="https://coderefinery.github.io/manuals/co-instructors/">CodeRefinery manuals on co-instructors</a></li> <li><a rel="external" href="https://coderefinery.github.io/manuals/hackmd-mechanics/">CodeRefinery manuals on how we do parallel chat, "HackMD"</a></li> <li>Series index: <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of Teaching</a></li> </ul> Co-teaching and scaling up 2022-10-31T00:00:00+00:00 2022-10-31T00:00:00+00:00 Unknown https://coderefinery.org/blog/2022/10/31/co-teaching/ <h1 id="co-teaching">Co-teaching</h1> <p>So you are trying to teach a large online course. Everyone knows this will be boring and monotonous, right? What if we told you that our large, online, livestreamed courses feel more interactive than our old small in-person courses? Part of that is due to the <a href="https://coderefinery.org/blog/2022/10/24/parallel-chat/">parallel chat</a>, but a significant part also comes from co-teaching, the topic of this article.</p> <p>The basic idea is that we accept that the audience is probably going to be quiet, and plant someone to interact with the instructor. This person doesn't pretend to be a student, but directly acts as a co-instructor and the course becomes a discussion between them. This is different than having two instructors who alternate teaching, or an instructor or helper. It's more like a pilot-co-pilot situation, where both pilots have a certain focus, but the flying is a continual team process with each having a focus (flying and monitoring) but both constantly providing information to each other.</p> <p>Doing co-teaching in practice requires some care, but isn't that hard. There are different models, usually we try to designate a primary who is going over the course material, and the other co-instructor acts as a learner, asking questions and engaging by being the "voice of the audience". The co-instructor who isn't most actively talking spends some time watching the <a href="https://coderefinery.org/blog/2022/10/24/parallel-chat/">parallel chat</a> and raising these questions. During demo times, one common strategy is that one person is guiding and explaining the big picture and the other person is typing and explaining the small picture. Whatever happens, it works. And usually very well.</p> <p>Besides the much greater interaction, there are other benefits. It's much easier to onboard a new instructor - one can almost go straight from advanced learner to co-instructor, since "asking questions a learner might have" is enough to start. Co-teaching also reduces the stress of preparation: the instructors still have to prepare, but with two people, by simply pausing or asking a question to the other person, any gaps can be filled in.</p> <p>Perhaps the biggest disadvantages are the need for more people and to coordinate. But, there is probably less preparation total needed. It requires more staff, but we need a continual flow of instructors coming in anyway - so this helps us long-term.</p> <p>What's the minimum size course where this makes sense? In theory, it could work for very small courses, but at that size you would probably hope that the audience interacts directly. At a few tens of students, it might work, if you can keep the co-instructor discipline working well - but that might easily be forgotten if there are many questions from the audience. But I personally think that even small courses benefit from two brains, and it worth trying co-teaching at any size.</p> <p>Overall, co-teaching has revolutionized our teaching: we can feel more interactive in large courses, we can bring in new instructors more quickly, and we can teach better. It really seems to solve the boring "500-person lecture" problems that I had when I was in university. We now use co-teaching for anything that needs to seem "professional", from 20-person instructor training via Zoom to our 500-person livestreamed Python for Scientific Computing courses.</p> <p>See also:</p> <ul> <li><a rel="external" href="https://coderefinery.github.io/manuals/team-teaching/">Co-teaching in CodeRefinery manuals</a></li> <li><a rel="external" href="https://coderefinery.github.io/community-teaching/team-teaching/">Co-teaching in Community Teaching</a></li> <li>Series index: <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of Teaching</a></li> </ul> Parallel chat ("HackMD") and scaling teaching 2022-10-24T00:00:00+00:00 2022-10-24T00:00:00+00:00 Unknown https://coderefinery.org/blog/2022/10/24/parallel-chat/ <p><em>Part of a series on the <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of Teaching</a></em></p> <p>One of the most common complaints when moving online was the amount of interaction and feedback possible. How often have you heard "please turn on your cameras so I can see how it's going" - only to have no one do that. You might be surprised to learn that CodeRefinery's online courses have an order of magnitude more interaction than our in-person courses.</p> <p>Our solution is "parallel chat", or as we typically call it "HackMD" after the service we started using, <a rel="external" href="https://hackmd.io">hackmd.io</a> - although it's not really specific to that HackMD, and neither is it a chat platform. Basically, it's on online document (think etherpad/Google Docs/etc) that everyone can see and edit at the same time. Instead of asking question by voice or via classic (linear) chat, people write new questions as a bullet point in the bottom of the parallel chat. Our team of helpers answers them in sub-bullet points - and a whole discussion can happen in these bullet points.</p> <p><img src="https://coderefinery.github.io/manuals/_images/hackmd--questions2.png" alt="Demonstration of HackMD" /></p> <p>There are a variety of reasons this is so good:</p> <ul> <li>You can have multiple people asking and answering at the same time (not possible with voice, and linear chat gets confusing with)</li> <li>At the end of the course, we have a beautiful Markdown document to revise and publish. We can make sure that all questions get an complete, accurate answer.</li> <li>People can ask anonymously - which encourages questions from those who would usually be silent in courses.</li> <li>Equally, questions don't distract everyone, so there is no pressure to be quiet to let the course go on.</li> <li>You can get multiple diverse answers to the same question, showing that the instructors aren't one homogeneous group and to give multiple different solutions, when "one right answer" does not exist or is more a matter of taste.</li> <li>By having more questions asked, you can get much more feedback while teaching - so much you have to be careful to not be overloaded!</li> <li>It's fun: parallel chat via a text document isn't perfect, but it's pretty good. It allows some creativity in asking, answering, and giving feedback. For example polls can be conducted as "+" or "-" or "o" added after the options.</li> </ul> <p>Just look at the number of questions in our old courses, <a rel="external" href="https://coderefinery.github.io/2022-03-22-workshop/questions/day1/">one 3.5-hour day of our May 2022 workshop</a> - and this is day 1, when people didn't yet know how it worked.</p> <p>But there are some disadvantages:</p> <ul> <li>An absolute flood of information, which <em>will</em> be distracting to anyone trying to follow it. We warn people at the start to be careful about this, and it's mostly OK. It's anyway archived for follow-up later at one's convenience.</li> <li>Another window for people follow. Like above, we warn people to focus on the learning and parallel chat only when there is time.</li> <li>It's different, so needs some explanation (but we've seen people catch on very quickly once they see it).</li> </ul> <p>So, just how does this work? Well, we create the text document with some standard notes at the top and bottom. It's made freely editable without any login, shared to everyone in the workshop. All learners are told to ask every new question in list item at the bottom of the document - <em>always</em> the bottom, since that's the only thing we follow. The course team has this open and answers questions, focusing their attention at the bottom. Some other notes:</p> <ul> <li>Instructors should discuss it via voice often, mentioning when the look at it and when questions come from it. Let the audience know it's actually useful.</li> <li>Screenshare it during the Q&amp;A parts and breaks (you need a tool that won't show the names of anyone who might have happened to be logged in - HackMD does this properly). It provides something to look at and reminds people that it exists and has lots of answers.</li> <li>We often use it as an icebreaker as a demo. Maybe not everyone understands it.</li> <li>It can also be used for lightweight polls: learners can <code>+1</code> or add a character to a line to make simple bar graphs.</li> <li>Like we said above, it's not a perfect tool, but easy to use and fun.</li> <li>A "HackMD manager" watches it and tries to keep things organized, adds section headings, and so on. This makes it easy.</li> <li>Remember, new content only to the bottom! People can't go following multiple sections.</li> </ul> <p>We don't have unlimited scaling and there are some other problems, though. Some possible issues that may come up:</p> <ul> <li>To make this really good, you need at least one person focusing on the parallel chat - or at least <a href="https://coderefinery.org/blog/2022/10/31/co-teaching/">two co-instructors</a>. In workshops of our size, this hasn't been a big issue, though - it provides a good task for helpers.</li> <li>The tech might not scale to thousands of people - hackmd.io has worked with hundreds, or sometimes has been slow. A self-hosted hedgedoc instance has worked with hundreds and can probably go higher.</li> <li>At some point, if the parallel chat is available to everyone, trolls will start ruining it for everyone. Our plan is that the parallel chat URL is a bonus for registered participants, and sometime later we could enforce this limit even more strictly with write-protections.</li> </ul> <p>As good as this is, can in also work for small courses? In theory, yes, of course. But in practice, the smaller courses get, the harder it is...</p> <ul> <li>Lack of helpers to answer in parallel - fewer answers ⇒ fewer questions. Fewer questions ⇒ less time looking at it ⇒ less motivation to ask questions.</li> <li>But also in smaller hybrid courses it provides a great way to give equal opportunities to on-site vs online participants to ask and get answers to their questions.</li> </ul> <p>Overall parallel chat in a workshop feels extremely interactive - even more so than a medium-sized traditional in-person course. Combine with a team for teaching, and things seem to work very well.</p> <p>See also:</p> <ul> <li><a rel="external" href="https://coderefinery.github.io/manuals/hackmd-mechanics/">HackMD mechanics in CodeRefinery manuals</a></li> <li><a rel="external" href="https://coderefinery.github.io/manuals/hackmd-helper/">HackMD manager role description</a></li> <li>Series index: <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of Teaching</a></li> </ul> Python for Scientific Computing open for registration and collaborators 2022-10-21T00:00:00+00:00 2022-10-21T00:00:00+00:00 Unknown https://coderefinery.org/blog/2022/10/21/python-for-scicomp/ <p>Our next workshop, <a rel="external" href="https://scicomp.aalto.fi/training/scip/python-for-scicomp-2022/">Python for Scientific computing</a>, is ready for you! Take part in different ways:</p> <ul> <li> <p>If you want to learn, you can register. Like all of our <a rel="external" href="https://coderefinery.github.io/manuals/how-to-attend-stream/">livestream courses</a>, there are diverse ways to attend based on your needs.</p> </li> <li> <p>If you are a small group, attend together! Get a meeting room, or online meeting, and watch together. We will tell you when exercise sessions are, and then you can work together on that.</p> </li> <li> <p>If you are an organization, sponsor attendance locally! Reserve a room, open your own registration form if you want, and host the watching. There will be clear times for in-person work like this - if you contact us, we'll help you however much we can.</p> </li> </ul> <p>Python for Scientific Computing has run in 2020 and 2021, and was designed to be a next step for scientists after basic Python: not too in-depth, but showing a broad, hands-on picture of many useful tools in the Python ecosystem. All <a rel="external" href="https://aaltoscicomp.github.io/python-for-scicomp/">material</a> and teaching is open-source before, during, and after the course.</p> <p>Last year, we had 500 viewers for our peak days. Can we make 1000 or 5000 this year? - the course certainly supports it, and with your help, we can.</p> <p>If you want to contribute more (or see how we do it), join the <a rel="external" href="https://coderefinery.github.io/manuals/chat/">CodeRefinery</a> chat and introduce yourself.</p> CodeRefinery teaching strategies and the future of teaching 2022-10-17T00:00:00+00:00 2022-10-17T00:00:00+00:00 Unknown https://coderefinery.org/blog/2022/10/17/future-of-teaching/ <p><em>This is the index page of the <a href="/blog/2022/10/17/future-of-teaching/">Future of Teaching</a> series.</em></p> <p>In early 2020, global teaching got disrupted by the Covid-19 pandemic. Countless courses struggled to maintain interaction and teaching, but CodeRefinery found that by embracing the times, our teaching could become even better. <strong>This series of blog posts will discuss what we did and how you can learn from it.</strong></p> <p>So, what is the future of teaching? For type of practical, hands-on learning, we could try to classify learning situations into three types:</p> <ul> <li>Very large courses and massive open online courses (MOOC),where individual interaction isn't possible.</li> <li>Small-medium courses, 10-30 people, with traditional classroom-type interactions.</li> <li>One-on-one or small-group mentoring.</li> </ul> <p>Before Covid, CodeRefinery was in the middle category with exclusively in-person classroom sessions over a few days. During Covid, we focused on very large online courses, which incidentally corresponded with the rise of Research Software Engineering services in some of our communities. This produced an interesting effect: <strong>The middle layer got squeezed out</strong>: very large courses (with the proper tools) were better at conveying information, and mentoring and co-working was best for supporting people outside of these courses. These two things combined seemed to greatly reduce the need for traditional medium-sized courses. At the same time, the total effort became less as we scaled up, which we'll talk about later.</p> <p>Of course, you can't move medium in-person courses to large online courses without adjusting how you teach. However, once we did adjust, we were quite happy. We want to take some time in these posts to informally discuss what we did, sort of as a guide to the other information which can be found in <a rel="external" href="https://coderefinery.github.io/manuals/">our manuals</a>.</p> <p>The strategies we have developed have revolutionized the way we teach. We no longer have limited attendance because of room sizes, mandatory registration, or instructor monologues. We don't want to "return to normal", and we think that others should start learning of our developments as well.</p> <p>But we realize that not everyone can go all the way that we have gone. It takes a lot of effort to put on a livestream course with tens of staff (but still many of our strategies can be adapted by others). Medium-sized courses are still great for medium-sized communities and provide a good way for a few people to reach an audience - especially if it is local. We hope to explore the ways that what we have learned can be adapted to this kind of teaching, too. And of course, we will continue supporting medium sized courses where someone wants them, especially as a "reverse hybrid" with remote instructors but in-person exercises.</p> <p>Future blog posts in this series could include the following (this list will be updated and future blog posts will be linked below, this is the "start page" of the series):</p> <ul> <li><a href="https://coderefinery.org/blog/2022/10/24/parallel-chat/">Random access chat ("HackMD") and interaction in large courses</a></li> <li><a href="https://coderefinery.org/blog/2022/10/31/co-teaching/">Co-teaching</a></li> <li>[Teams](@/blog/2022-11-28-teams.md</li> <li><a href="https://coderefinery.org/blog/2022/11/07/reverse-hybrid/">Hybrid courses vs reverse-hybrid courses</a></li> <li>Open source courses</li> <li>Registration and learner management</li> <li><a href="https://coderefinery.org/blog/2022/11/14/livestreaming-courses/">Livestream courses</a></li> <li>Collaboration in organizing</li> <li><a href="https://coderefinery.org/blog/2022/11/21/video-publishing/">Publishing videos supports more learning styles</a></li> <li>Working together as a team</li> <li>Modular and reusable courses</li> <li>Comparison to MOOCs</li> <li>Effort needed for organizing big courses</li> <li>Measuring impact in livestream courses</li> <li>(lessons for academic teaching?)</li> </ul> <h2 id="see-also">See also</h2> <ul> <li><a rel="external" href="https://coderefinery.github.io/manuals/">CodeRefinery manuals</a></li> <li><a rel="external" href="https://coderefinery.github.io/community-teaching/">CodeRefinery community teaching training</a></li> </ul> Outcomes from online hackathon about measuring the impact of CodeRefinery workshops 2022-05-18T00:00:00+00:00 2022-05-18T00:00:00+00:00 Unknown https://coderefinery.org/blog/2022/05/18/measuring-impact/ <h2 id="introduction">Introduction</h2> <p>The main focus of our project is to train and collaborate on training and to connect training activities across different countries. But we also need to report about our training activities and we need to apply for funding from time to time. We also want to know whether we meet the needs of the community and for this we need a mechanism to measure and evaluate the impact of our workshops on software programming practices.</p> <p>We have implemented a number of ideas to measure feedback and impact. In this discussion session we re-examine these solutions and discuss how we can make these more reusable for other projects. In short:</p> <ul> <li>When we operate online and hybrid, we are accessible to many more styles of attendance (and different measurements, such as live-stream viewers).</li> <li>We have an excellent <a rel="external" href="https://coderefinery.org/about/statistics/">report as part of coderefinery.org</a>, this will be split to a separate repository that is usable separately.</li> <li>Tune our daily feedback questions and provide more time and motivation for this (see below).</li> <li>Our quantitative measures include number of registrations, number of known attendees (in person/online), and number of unknown attendees (live-stream viewers).</li> <li>Our qualitative measures include text-based feedback per day and also a post-workshop survey.</li> </ul> <h2 id="how-did-we-measure-attendance-and-impact-up-to-now">How did we measure attendance and impact up to now?</h2> <p>When our workshops were smaller and in-person, we kept track of presence/attendance and the feedback were sticky notes but over time as we moved online and grew, measuring attendance became more difficult and the numbers presented <a rel="external" href="https://coderefinery.org/about/statistics/">here</a> today represent the number of registrants and the real number of participants is probably lower.</p> <p>In addition, we have collected <a rel="external" href="https://github.com/coderefinery/pre-workshop-survey">pre-workshop survey</a> data which was part of the registration process and <a rel="external" href="https://github.com/coderefinery/post-workshop-survey">post-workshop survey</a> data which we collect 3-6 months after a workshop (we have not been very consistent with the exact intervals).</p> <p>We have originally introduced the pre-workshop survey to have a feedback mechanism for our workshop material but over the years the feedback collected during a workshop turned out to be the more useful and a more direct feedback loop (HackMD feedback is often turned into GitHub issues which later turn to lesson changes). The pre-workshop survey generated <a rel="external" href="https://github.com/coderefinery/pre-workshop-survey">interesting data</a> but it wasn't really driving lesson changes.</p> <p>Motivation to introduce the post-workshop survey was to ask whether anything has changed for the participants after a workshop in the workflows and tooling.</p> <p>Looking back at our data and how our funders and stakeholders have used it, it seems that questions about career stage, academic discipline, and participation numbers per country were the most requested results.</p> <h2 id="discussion">Discussion</h2> <p>The main points of our discussion were:</p> <ul> <li>The number of participants per country is still an important thing to measure, even if it may not be 100% accurate. <ul> <li>We can get that from registrations and Twitch data.</li> <li>Breakout rooms could be a natural way to measure attendance but with team and group registration and exercise room delegation this becomes less directly measurable.</li> </ul> </li> <li>How can we measure less but have more meaningful results while not adding too much work? <ul> <li>We should not try to achieve perfection. Some data / details cannot be collected.</li> <li>We get some feedback via email also.</li> <li>We could interview individual participants or groups for feedback / impressions on the workshop <ul> <li>That would give more profound insights on how did the students feel.</li> <li>We could ask for volunteers at the beginning of the workshop.</li> <li>Conduct the interview at the end, and turn it into a blog.</li> </ul> </li> </ul> </li> <li>We should not forget people take workshops for different reasons <ul> <li>Do some participants re-take a workshop for more in-depth knowledge? If so, are they attending partially?</li> <li>And let's not forget passive learners, who might have it running in the background to see what is going on but not be active.</li> </ul> </li> <li>Do we track how did people learn about the workshop? <ul> <li>Currently in the pre-workshop survey, but we should do it in the registration.</li> </ul> </li> <li>How to get feedback that helps us improve? <ul> <li>We could ask: why did you decide to stop following the stream?</li> <li>We do ask: what did you find useful or not so useful?</li> </ul> </li> <li>The HackMD feedback is one of the most important ways for us to improve the lessons, as opposed to the pre-workshop survey. <ul> <li>The results need to be interpreted and compiled manually.</li> </ul> </li> <li>Yet, we ask for the HackMD feedback in the last 5 min of the days, right as people are leaving. <ul> <li>Consider improvements, such as asking before, or during, the last lesson.</li> <li>Provide sufficient time for this, discuss the feedback as it comes in to motivate it.</li> </ul> </li> <li>During workshops, we should talk more about us and the workshops, and let people know the importance of surveys and feedback. We should motivate how this "pays us back".</li> <li>Our current (early 2022 and earlier) post-workshop survey questions are found at: https://github.com/coderefinery/post-workshop-survey#survey-questions</li> <li>NeIC perspective: <ul> <li>Ask project partners / stakeholders how do they benefit from CodeRefinery training and how we can improve this</li> </ul> </li> <li>How can we improve response rate? <ul> <li>Even shorter and clearer questionnaire</li> <li>Good timing for when the survey is sent to participants, it seems that Monday is the best day to send them out</li> </ul> </li> <li>How can we learn why somebody stopped? <ul> <li>Easier for the contact person of group registrations to know why some of the participants did not show up, e.g. if there are local parallel events happening at the same time</li> <li>Include a question in the registration form: would you like to withdraw your registration? If yes, please tell us why (but we need to check whether this can be implemented in our current solution)</li> <li>Post-workshop survey: section for those who attended and section for those who dropped out (the accompanying email needs to be carefully worded to motivate participation and to not sound accusative about dropping out)</li> <li>The feedback of a person who showed up but later dropped out is probably more interesting/relevant than the one of a person who did not show up at all</li> <li>Our main focus should be to make and keep it interesting for those who show up and on the material and we should not spend too much focus on no-shows</li> </ul> </li> </ul> <h2 id="what-will-we-change">What will we change?</h2> <h3 id="registration-in-addition-to-a-previous-discussion">Registration <a rel="external" href="https://coderefinery.org/blog/2022/05/04/improving-workshop-registration/">(in addition to a previous discussion)</a></h3> <ul> <li>We do ask: country and academic discipline <ul> <li>Also should allow multiple selections to mark interdisciplinary work</li> </ul> </li> <li>Here we could also ask: career stage and how did you you learn about workshop?</li> <li>For group registrations it might get a bit tricky: <ul> <li>Contact person could list the academic disciplines and the career stages of the participants (but we are unsure whether we can do that in Indico)</li> <li>Make it possible and encourage the contact person to update the registration form, e.g. at the end of the workshop</li> </ul> </li> </ul> <h3 id="pre-workshop-survey"><a rel="external" href="https://github.com/coderefinery/pre-workshop-survey">Pre-workshop survey</a></h3> <ul> <li>Integrate selected questions from the pre-workshop survey into the registration</li> <li>In hindsight the pre-workshop data has not been used to change workshop lessons <ul> <li>Live-feedback (turned into issues turned into lesson/program changes) has been the main feedback loop</li> <li>Some of the questions can be turned into icebreaker question</li> </ul> </li> </ul> <h3 id="statistics-page"><a rel="external" href="https://coderefinery.org/about/statistics/">Statistics page</a></h3> <ul> <li>Registration numbers <ul> <li>Convert from JSON to YAML (less error prone)</li> <li>Make a separate repository</li> </ul> </li> <li>Number of stream viewers <ul> <li>Combine registration numbers with streaming numbers on https://coderefinery.org/about/statistics/</li> <li>Present views per country (it seems this is non-downloadable)</li> <li>Present views over time (Twitch provides this data per 10-minute interval)</li> </ul> </li> </ul> <h3 id="live-feedback-hackmd">Live-feedback (HackMD)</h3> <ul> <li>Integrate feedback into the lesson itself, e.g. the last 10 min of the workshop are dedicate to filling it in</li> </ul> <h3 id="post-workshop-survey"><a rel="external" href="https://github.com/coderefinery/post-workshop-survey">Post-workshop survey</a></h3> <ul> <li>What to ask straight after the workshop and what to ask later? Separate survey?</li> <li>Could be integrated to the pre-workshop survey because it can be updated</li> <li>Update questions: <ul> <li>we could add the question: what would you like to learn more?</li> <li>Maybe condense a bit (less text and repetition)</li> <li>Remove suggestive questions if any</li> <li>add academic field</li> </ul> </li> <li>What data to request from groups / partners? <ul> <li>Number of participants</li> <li>How did they like the event</li> </ul> </li> </ul> Our plans to improve our workshop registration process 2022-05-04T00:00:00+00:00 2022-05-04T00:00:00+00:00 Unknown https://coderefinery.org/blog/2022/05/04/improving-workshop-registration/ <p>As we entered the sustainability phase of the CodeRefinery project, the number of participants attending our workshops continues to increase. The March 2022 online workshop on best practices for scientific software development has reached <a rel="external" href="https://coderefinery.org/workshops/past/">297 registrants</a> which is a record for us.</p> <p>Interactive lessons and team exercise work where teams of colleagues can register as a team and go through exercises as a team are among the essential ingredients of our workshops. However, we also wish to accommodate also solo learners and exercise leads in our workshops and give them the possibility to exercise with other solo learners. The challenge for us is to manage a dynamic registration process and exercise group formation without excessive effort.</p> <p>To collect ideas on how to simplify this in future, the CodeRefinery staff and some community members have brainstormed in an online hackathon on improving the workshop registration, held on May 3, 2022.</p> <p>Below we summarize our observations and strategies for the upcoming events.</p> <h3 id="goals-of-a-good-registration">Goals of a good registration</h3> <ul> <li> <p>Avoid chaos during the workshop</p> <ul> <li>Avoid misunderstandings about registration types</li> <li>Teams are clear and require minimum effort from organizers</li> </ul> </li> <li> <p>Be able to predict attendance, avoid major disappointments</p> </li> <li> <p>Reusable by different partners who have different approved survey platforms (not tied to one system, though it's OK if the questions have to be re-entered)</p> <ul> <li>E.g. not being bound only to Indico or something else that needs to be installed</li> </ul> </li> <li> <p>Collect good information on participants for reporting later</p> </li> <li> <p>Registration does not <em>have</em> to ever close</p> <ul> <li>Continued registrations allow people to join halfway through</li> <li>What needs does this have?</li> </ul> </li> <li> <p>Editable by organizers (without making a copy by exporting)</p> <ul> <li>e.g. exporting Indico to spreadsheet makes a copy, if people modify their registration our copy is invalid</li> <li>Google Docs allows a form to be directly connected to a spreadsheet, we can modify old registrations while new ones come in</li> </ul> </li> </ul> <h3 id="lessons-learned-from-a-recent-event">Lessons learned from a recent event</h3> <ul> <li>Unclear what registration options mean, people sign up for Zoom and don't show up</li> <li>We have to manage teams ourselves, which requires too much communication and manual work. Teams should be able to do this themselves.</li> <li>Scheduling teams is hard, must optimize for this and avoid all ambiguity</li> <li>Registration coordinator shouldn't teach (much, certainly not early on)</li> <li>Communication and registration is the same person or same two persons</li> <li>Communication/registration and teaching coordination should not be the same person</li> <li>Indico is a good tool but we need to remove old copy-pasted questions/options and streamline</li> <li>Allow teams to register with one contact point only</li> <li>Merging teams is hard in indico</li> <li>Adjusting teams is hard in indico</li> <li>Communication/registration/coordination is a full time job for two weeks prior to the workshop</li> <li>Question about availability is too often misunderstood: ask differently</li> <li>Optimize for fewer emails since these are difficult to delegate</li> <li>For exercise leads it is confusing whether to choose staff registration or regular registration</li> <li>It is good to leave registration open. People ask on twitch "can I have the Q&amp;A" and then I can say "not right not but if you register you will get it in an email tonight so you have it tomorrow"</li> <li>Regarding breakout rooms in Zoom and the problems with too small rooms, missing ELs, and the organisational challenges: it's worth trying something different next time, like having only one-person registrations but having numbered rooms in zoom that participants self-organise into</li> <li>Team registrations seem to have worked though and they seem to have the only groups that "survived" to the end.</li> <li>Local organizers could choose to use a centrally organized zoom if they wanted - as long as they managed the teams themselves</li> </ul> <h3 id="suggestions-for-improving-our-previous-registration-form">Suggestions for improving our previous registration form</h3> <ul> <li>"affiliation or university": have a list of institutions + "other" * free text for other institutions or companies not listed</li> <li>can we decentralize registration to groups and partners? <ul> <li>groups/partners scale as far as they like to as many helpers as they have</li> </ul> </li> <li>questions on form <ul> <li>"do you want to participate in Stockholm? click here" -&gt; another form</li> <li>"in Aalto" -&gt; another form</li> <li>none of the above -&gt; central form <ul> <li>group registration (exercise lead? or anybody as proxy?)</li> <li>register as exercise lead and want to help out a "random" group</li> <li>want to be part of a group -&gt; click here but we can't guarantee a helper, especially if you register late</li> <li>want to only watch alone</li> </ul> </li> <li>also offer options to get informed for those unsure/undecided <ul> <li>yes</li> <li>"interested"</li> </ul> </li> </ul> </li> <li>standardized reporting form for partners</li> </ul> <h3 id="how-to-manage-teams">How to manage teams?</h3> <ul> <li>Teams could handle some issues/setup themselves</li> <li>They need some templates to send information</li> <li>Which information should be sent by CR and which by the local organizers?</li> <li>Need to get statistics and feedback from the local groups</li> <li>Need to clarify if there will be "general" helpers in addition to team helpers</li> <li>Larger project partners will probably prefer offering in-person exercise groups</li> <li>How to deal with registration in the wrong form if we have several forms?</li> <li>Each partner needs to clearly commit to a certain level of support and size</li> <li>How to self-organize teams: <ul> <li>"helpers, rename yourself and join a room that does not have helpers yet"</li> <li>"learners, if you are in a room that is too empty or too full, join another one"</li> <li>this is to avoid rooms that are too full or too empty, or without helpers, or avoiding communicating which days an EL is unavailable</li> <li>what if one exercise lead or room is more popular than another room?</li> <li>how about continuity between days?</li> </ul> </li> <li>What to do with solo registrations who are not part of a group and want to be in an exercise group? <ul> <li>Is pairing up happening locally or centrally?</li> </ul> </li> </ul> <h3 id="comments-on-a-mock-up-registration-form">Comments on a mock-up registration form</h3> <p>We have together reviewed an <a rel="external" href="https://forms.gle/xNSmW7DJ43jV7NhD9">example form</a> and collected comments:</p> <ul> <li>Problems: "team organized by us" is not separated from "self-organized team"</li> <li>The "probably not but send info" does not need to be asked for each day separately</li> <li>But it's nice to offer the possibility to stay informed and decide later</li> <li>Nice to have one form both for staff and everyone else to avoid the confusion that we saw at the previous event</li> <li>"observer": let them decide whether they want emails or not</li> <li>"how do you plan on attending" <ul> <li>Option 1: <ul> <li>Maybe confusing if somebody selects both zoom and in person</li> <li>In-person breakout delegated to the local organization</li> </ul> </li> <li>Option 2:</li> </ul> </li> <li>Local rooms <ul> <li>Ask this earlier</li> </ul> </li> <li>Teams <ul> <li>Ask this question earlier</li> </ul> </li> <li>It is important that registrants can change their choices</li> <li>In general, Radio buttons are nicer than dropdowns because you get to see the answers right away <ul> <li>But dropdown takes less screen space</li> </ul> </li> </ul> <h3 id="what-if-we-get-asked-for-help-with-creating-a-registration-page-for-a-local-partner">What if we get asked for help with creating a registration page for a local partner?</h3> <ul> <li>We need to communicate who we share data with and ask for consent</li> <li>We document what we ask and what we recommend partners to ask</li> <li>We document which privacy policy we follow and which privacy standards we require</li> <li>We could offer a form/event if some local organizers need a separate form but do not want to set it up themselves</li> </ul> <h3 id="starting-point-for-the-new-registration-form">Starting point for the new registration form</h3> <ul> <li>OS <ul> <li>Dropdown</li> </ul> </li> <li>Discipline <ul> <li>Dropdown</li> </ul> </li> <li>Name <ul> <li>Open</li> </ul> </li> <li>Email <ul> <li>Open</li> </ul> </li> <li>Affiliation <ul> <li>Open</li> <li>Has not been used for reporting yet but the information is good to have</li> </ul> </li> <li>Country <ul> <li>Dropdown</li> </ul> </li> <li>Team name <ul> <li>Open</li> </ul> </li> <li>Permission to give contact details to breakout room organizer <ul> <li>Yes/no dropdown</li> </ul> </li> <li>Other notes to organizers <ul> <li>Open</li> </ul> </li> <li>Room <ul> <li>Open</li> </ul> </li> <li>Which days attending <ul> <li>Radio buttons</li> </ul> </li> <li>Type of attendee <ul> <li>Radio buttons</li> </ul> </li> <li>Do you want to attend in Zoom or follow live-stream only? <ul> <li>Dropdown/Radio buttons</li> </ul> </li> </ul> <h3 id="conclusions">Conclusions</h3> <ul> <li>Central registration is in Indico</li> <li>We can offer a copy of our Indico template for a separate event for local partners who cannot use a local registration system</li> <li>Local partners are welcome to use their own registration systems</li> <li>Teams can register as a team with a single contact point and the contact point does not have to be an exercise lead</li> <li>We offer the possibility for individual learners and individual exercise leads to self-join exercise rooms</li> <li>Workshop limits: <ul> <li>in terms of Twitch: it seems one bottleneck could be the collaborative HackMD document</li> <li>in terms of exercise groups: the number of volunteers but also groups without exercise leads can be useful</li> </ul> </li> </ul> <h3 id="follow-up-steps">Follow-up steps</h3> <ul> <li>Share a mock-up form soon with stakeholders for feedback via email and during a team meeting</li> <li>Explain the setup clearly and concisely, directly in the <a rel="external" href="https://github.com/coderefinery/template-workshop-webpage">workshop template</a></li> </ul> Lessons learned from the May 2021 online workshop 2021-11-25T00:00:00+00:00 2021-11-25T00:00:00+00:00 Unknown https://coderefinery.org/blog/2021/11/25/lessons-learned-may-2021/ <p>May 10-12 and 18-20, 2021, we gave our at that time largest <a rel="external" href="https://coderefinery.github.io/2021-05-10-workshop/">CodeRefinery online workshop</a> (6 x 3.5 hours) with 128 participants. We plan to deliver many more such workshops based on our <a rel="external" href="https://coderefinery.org/lessons/">lessons</a>.</p> <p>Here we wish to share with the community our lessons learned: What worked well and what we need and plan to improve. We use bullet point format for brevity.</p> <p>This complements our lessons learned from <a rel="external" href="https://coderefinery.org/blog/2020/04/14/first-online-workshop/">our first online workshop</a>.</p> <h3 id="lesson-coordination">Lesson coordination</h3> <ul> <li>The person teaching should not be doing the intro as well, as they may still need to set stuff up and it is better to focus on the lesson only.</li> <li>The teaching coordinator should check in for basic practicalities with each instructor: <ul> <li>team-teaching if desired</li> <li>material to cover</li> <li>schedule breaks</li> <li>test screenshare prior to the lesson</li> <li>how to control breakouts yourself</li> </ul> </li> <li>Be clear about video on or off for instructors. If multiple people on then gallery OBS capture doesn't work.</li> <li>Include role mentoring as part of the coordination initial meeting.</li> <li>More talk about "voice of audience".</li> <li>Prepare schedule summary for next day to be sent to everyone, together with instructors of following day, after workshop day: lessons to be covered and break/exercise room timing.</li> <li>Inform individual exercise leads about how the set group of individual learners is like (e.g. expecting how many in the room, OS, background).</li> <li>Inform exercise leads and all the team members who are replacing when a regular exercise leader is absent.</li> <li>Clearer role distribution, spreading the work among many is a great idea but it things should be clearly (or as clearly as possible split) also for roles during workshop, one or few people should have 'power' to decide things and clearly communicate: instead of "could somebody do X?" we have a person in charge of X.</li> </ul> <h3 id="zoom-and-obs">Zoom and OBS</h3> <ul> <li>Ask participants to join with video OFF when they join after the workshop started (otherwise they may appear in the stream).</li> <li>Huge amount of work that many people did making the instructions, and testing them on all the different OSs, surely helped.</li> <li>For some people the screenshare froze after break/ when screenshare switched between instructors, for browser reloading solved it, for client people had to rejoin chat.</li> <li>Gallery insert view is risky.</li> <li>You can't spotlight someone when only two peoples' videos are on.</li> <li>We can basically record the cutpoints and TOC while I am watching it, then there is very little effort to process afterwards. This probably requires one almost-dedicated person, but is worth it.</li> <li>It takes manual work to switch from one to two people (changing cropping), and also two to three (alignment).</li> <li>Gallery view for a lesson worked OK, but you must always expect people to join and appear. Stress level is high and we need to be vigilant to not let a problem go unnoticed.</li> <li>We can switch from single-person to gallery live without too much trouble. If spotlighting requires at least two videos but no "real" video is available or wouldn't make sense, one workaround might be to have someone show a "video" (zoom background + webcam cover on) so that it only shows the background) of CR logo or schedule or whatever feels relevant.</li> <li>If spotlighting requires at least two videos but no "real" video is available or wouldn't make sense, one workaround might be to have someone show a "video" (zoom background + webcam cover on) so that it only shows the background) of CR logo or schedule or whatever feels relevant.</li> <li>When capturing windows with OBS, set to "don't capture mouse cursor" and then you can hover over and pin/unpin video and the cursor and pop-up menu don't appear in the capture.</li> <li>It is good when the presenters clearly say when things start and end, as in "And now we are done with the intro, and will go to our first lesson, Jupyter". It makes cutting a bit easier and also helps learners to re-orient.</li> <li>The zoom default "focus on the current speaker" view was quite good for co-teaching, it was slightly less fragile than full gallery view but still swapped between the two people (but someone speaking with video off would have their name or profile picture displayed).</li> <li>By using the OBS websocket remote control, one can see the current recording time, and use that to generate the video editlist live without being the one running OBS.</li> <li>OBS helper: would be nice to have a way to unmute both of us.</li> </ul> <h3 id="collaborative-notes">Collaborative notes</h3> <ul> <li>Don't try to insert html into HackMD :sweat_smile:</li> <li>HackMD at this size seems to have worked, not all the time for everybody, but sufficiently.</li> <li>Using one HackMD for twitch and zoom was a good idea.</li> <li>Provide plan for the day (including breaks and exercise plan) on top of HackMD and mention it at the beginning of the day.</li> <li>When talking about HackMD, please share it, it gives people something to look at.</li> <li>Add HackMD link to the workshop page and use the workshop page as main entry point so that participants don't have to hunt for links in email inboxes.</li> </ul> <h3 id="installation-and-tools">Installation and tools</h3> <ul> <li> <p>Having one conda environment with everything seems to have been a success. We have seen a lot less installation friction and trouble compared to earlier workshops.</p> </li> <li> <p>Very useful feedback we got via email (paraphrasing with own words, also support this): Let us reconsider the choice of editors. We use "plain" nano but many of us use something else, use syntax highlighting, possibly Git integration. By leveling everybody to plain nano we risk giving the impression that this is how development is always done or should be done (no offense to those developing using plain nano in their work)</p> <blockquote> <p>[Quote:] One of my personal tips which we discussed a little in the breakout rooms was the use of a modern editor with syntax highlighting, ssh-to-remote, and git integration. We are actually doing a little post-workshop about this subject in my team this week. I totally understand that you do not wish to enforce a choice of editor for the participants during the workshop, but I think that some of the learners that are beginners to for instance version control, will think that plain Nano without any extras is how a lot of people work. Which I think is wrong, but again this is only my impression. I'm thinking about a modern editor as a tool you use to force yourself to make the right choices as a default, for instance, awareness of snake vs. camel naming convention. I also realize that this is a subject that might not fit under the "beginner" label for software. Maybe it would make sense to host a "Research Software Hour" with this as a topic?</p> </blockquote> </li> </ul> <h3 id="presenting-and-coordinating">Presenting and coordinating</h3> <ul> <li>Coordination plan should be continuously reviewed.</li> <li>Strong director role is needed.</li> <li>Give clear message at the end of the day: Now the workshop day is concluded, stream and recording stopped. So that people that came for workshop content can leave, then have some official start of 'afterparty'. It was not fully clear when the outro was finished.</li> <li>Make it clear what someone needs to have open: Screenshare, HackMD, your terminal. You get links to the episodes from HackMD.</li> <li>Avoid breaks between exercise explanation and doing exercise.</li> <li>Clearly mark interruptions/speaking up during presentations as interruption (as in: not part of the presentation).</li> <li>Spotlight video changes every time screenshare changes: It is defininitely still important to warn before stopping screen sharing (more than before)</li> <li>Announcing "I'm about to take the screenshare" and waiting two seconds works well.</li> <li>Share screen for what you are talking about. Makes editing a bit easier.</li> <li>When presenting, highlight or otherwise indicate on screen (not just temporarily) what you are talking about. It makes it much faster to scan through to make a good table of contents. Related: always show what is currently going on, like break times or pauses between exercises.</li> </ul> <h3 id="lesson-content">Lesson content</h3> <ul> <li>Staging area: as usual, a difficult episode <ul> <li>What parts of the episode is a dependency for other parts of CodeRefinery?</li> <li>Remove it?</li> <li>Make it clear it is advanced/optional/you won't get it yet, when it is taught?</li> <li>Move it to the end?</li> </ul> </li> </ul> <h3 id="communication-with-participants">Communication with participants</h3> <ul> <li>Indico: select "none" after selecting some registrants to for example sending emails (otherwise selection remain).</li> <li>Confirmation of acceptance to the workshop should be done sooner. It may be too late if they get confirmed one week before the event and suddenly need to free up 6 half days.</li> <li>As for the "team registrations", as long they include an EL, we should send an acceptance ASAP.</li> <li>Regarding individual learners and ELs: 1) opening sign-up as individual ELs and to set its soft-deadline much earlier than for individual learners, 2) for individual learners, opening registration first as stream viewers only with an option of 'want to join in interactive exercise sessions' yes/no, 3) after the soft-deadline of individual ELs, to those who said 'yes', sending invitations to sign-up for zoom participation in another reg. form, and 4) accept the capacity of #individual ELs x 5 and otherwise put them in waitlist. However, I actually want to suggest a quite wild idea rather than struggling with the dilemma of no-shows and withdrawal with very very short notice while not being able to accept all sign ups. Instead of coordinating for acceptance and grouping on backside, how about encouraging open&amp;public self-organization of groups? somewhere everyone can access, 'sign up' by writing their name, as a learner or EL, potentially also country, affiliation, background so that it might happen that they will self-organize a team. Once they can make a group of 6-7 people with at least one who can be acting as an EL, then their participation is sort of 'confirmed'. This is different from team registration as this is primarily for those who want to join but cannot make a group will find others to make a group to join in the workshop. Another thing is that the threshold of ELs could be even lower than some people may think. And I would say being an EL is probably better way to learn about the CodeRefinery lesson materials than joining as an learner. Especially if some people have already made their own team, one of them should be able to act as an EL, or they can even circulate the role among eath other. And what I learned from the R+Tidyverse workshop until yesterday is that if a learner cannot turn on camera or mic (for any reason), it is almost no worth to join in a breakout room session, as HackMD Q&amp;A will more or less perfectly solve the problem in that case.</li> </ul> Towards citable lessons 2021-11-21T00:00:00+00:00 2021-11-21T00:00:00+00:00 Unknown https://coderefinery.org/blog/2021/11/21/towards-citable-lessons/ <p>In Autumn 2021 we have started to work on making our lessons and other material we have created over the years, citable. At the same time we wish to assign a digital object identifier (DOI) to each lesson so that the material becomes persistent and remains findable. However, the main motivation for this work is to get some metrics about the use of our material and also to give contributors better credit and to make it possible for them to get and display metrics about their contributions.</p> <p>This effort is work in progress and in this document we will summarize our discussions, decisions, findings, and observations so that we can then use these later when we conclude this effort lesson by lesson.</p> <h3 id="technical-choices">Technical choices</h3> <ul> <li>We will use Zenodo because it is a well-established service which we know and which integrates nicely with the repositories hosting the lessons and because we will need to be able to update metadata (author information) without changing the DOI record.</li> <li>We will convert the 3 remaining Jekyll lessons to Sphinx to simplify pdf export.</li> <li>We will not start with <a rel="external" href="https://allcontributors.org/">https://allcontributors.org/</a> because it requires each contributor to have a GitHub account which we have found a too strict limitation.</li> <li>We start with tracking authorship in CITATION.cff since GitHub presents a "cite as" button when this file is present.</li> <li>If we find that CITATION.cff is not enough or does not provide the right categories, we will try to track this in the .zenodo.json which Zenodo understands and we could generate CITATION.cff from this file. It seems that if a .zenodo.json is present in a repo, it has on Zenodo precedence over a CITATION.cff.</li> </ul> <h3 id="distinguishing-authors-and-contributors">Distinguishing authors and contributors</h3> <ul> <li>Removed "code" (lesson material) does not mean removing authorship unless the author prefers to be removed.</li> <li>Example for how Carpentries do it (unix shell lesson): <ul> <li><a rel="external" href="https://github.com/swcarpentry/shell-novice/blob/gh-pages/CITATION">https://github.com/swcarpentry/shell-novice/blob/gh-pages/CITATION</a></li> <li><a rel="external" href="http://doi.org/10.5281/zenodo.3266823">http://doi.org/10.5281/zenodo.3266823</a></li> </ul> </li> <li>Definitions of the roles: <ul> <li>"creator": significant contributions</li> <li>"contributor"/Editor: reviewing/approving contributions</li> <li>"contributor"/Other: smaller contributions</li> </ul> </li> <li>On Zenodo we start with "creator" (author) and "contributor" (other). <ul> <li>See also categories that Zenodo understands: <a rel="external" href="https://developers.zenodo.org/#representation">https://developers.zenodo.org/#representation</a> (search for "creators" and "contributors")</li> <li>We are a bit unsure whether one person can assume more than one role on Zenodo. probably yes. If so, maybe one occurence for the highest contribution is best.</li> </ul> </li> <li>We still need to verify whether CITATION.cff and/or .zenodo.json can map to the definitions of roles (above).</li> </ul> <h3 id="how-we-will-reach-out-to-creators-and-contributors">How we will reach out to creators and contributors</h3> <ul> <li>We will do this on a per-lesson basis and we will start with the lessons which we teach the most often.</li> <li>Contributors are not only people who have contributed with Git commits, but could also be people that contributed with input and ideas in other form.</li> <li>We reach out to everybody and ask whether they want to be contributor or author.</li> <li>If a person cannot be reached, we do not add the person without consent and rather add the person later once we reach them.</li> <li>Reaching out to creators and contributors will happen via GitHub issues close to the lesson repository but those who do not respond or may not be on GitHub will be reached via email.</li> <li>On the GitHub issue we will ask authors for their ORCID.</li> </ul> <h3 id="archiving-lessons-as-pdf">Archiving lessons as pdf</h3> <ul> <li>When archiving lessons on Zenodo we have the choice of archiving the repository as is (the sources) or to generate a pdf version of the lesson and archiving the pdf.</li> <li>We have concluded that we wish to attempt depositing pdf versions unless this turns out too difficult.</li> <li>The pdf versions will be generated automatically as part of a "release" workflow.</li> <li>The automatic pdf generation is relatively straightforward with Sphinx lessons but less trivial with Jekyll-based lessons.</li> <li>We will focus on Sphinx lessons and prefer converting Jekyll-based lessons to Sphinx lessons rather than investing time in generating pdfs from Jekyll lessons.</li> <li>But we have also concluded that cite-ability is more important than preserving a pdf version of the lessons since we expect the lessons to evolve and be continuously improved and the credit aspect is found more important than the preservation aspect.</li> </ul> <h3 id="orcid-vs-zenodo-community">ORCID vs. Zenodo community</h3> <ul> <li>We have decided against introducing a project ORCID for CodeRefinery and rather collect related records in a CodeRefinery Zenodo community.</li> </ul> <h3 id="how-we-wish-to-test-the-workflow">How we wish to test the workflow</h3> <ul> <li>For one or two example lessons we will create a fork and test the release deployment and DOI generation on <a rel="external" href="https://sandbox.zenodo.org">Zenodo sandbox</a>.</li> </ul> <h3 id="suggested-workflow-to-make-lessons-citable-via-zenodo">Suggested workflow to make lessons citable via Zenodo</h3> <ul> <li>Add a .zenodo.json to the lesson repo, for example:</li> </ul> <pre class="giallo" style="color: #383A42; background-color: #FAFAFA;"><code data-lang="json"><span class="giallo-l"><span style="color: #50A14F;"> &quot;creators&quot;</span><span>: [</span></span> <span class="giallo-l"><span> { </span></span> <span class="giallo-l"><span style="color: #E45649;"> &quot;orcid&quot;</span><span>:</span><span style="color: #50A14F;"> &quot;0000-0002-1825-0097&quot;</span><span>,</span></span> <span class="giallo-l"><span style="color: #E45649;"> &quot;affiliation&quot;</span><span>:</span><span style="color: #50A14F;"> &quot;Feline research institute&quot;</span><span>,</span></span> <span class="giallo-l"><span style="color: #E45649;"> &quot;name&quot;</span><span>:</span><span style="color: #50A14F;"> &quot;Field, Gar&quot;</span></span> <span class="giallo-l"><span> },</span></span> <span class="giallo-l"><span> { </span></span> <span class="giallo-l"><span style="color: #E45649;"> &quot;orcid&quot;</span><span>:</span><span style="color: #50A14F;"> &quot;0000-0002-1825-0097&quot;</span><span>,</span></span> <span class="giallo-l"><span style="color: #E45649;"> &quot;affiliation&quot;</span><span>:</span><span style="color: #50A14F;"> &quot;Feline research institute&quot;</span><span>,</span></span> <span class="giallo-l"><span style="color: #E45649;"> &quot;name&quot;</span><span>:</span><span style="color: #50A14F;"> &quot;Cat, Felix&quot;</span></span> <span class="giallo-l"><span> }</span></span> <span class="giallo-l"><span> ],</span></span></code></pre> <ul> <li>Generate pdfs from Sphinx sources via LaTeX: <ul> <li>In <code>conf.py</code>, set <code>latex_engine = 'xelatex'</code> (makes emojis work), then <code>make clean ; make latexpdf</code>.</li> <li>This will become part of GitHub Actions, it will not be a manual step.</li> </ul> </li> <li>Create a release of the lesson on GitHub.</li> <li>On Zenodo, check syncing with GitHub.</li> </ul> <h3 id="resources">Resources</h3> <ul> <li>About Zenodo <a rel="external" href="https://about.zenodo.org/">https://about.zenodo.org/</a></li> <li>Zenodo terms of use <a rel="external" href="https://about.zenodo.org/terms/">https://about.zenodo.org/terms/</a></li> <li>Zenodo policies <a rel="external" href="https://about.zenodo.org/policies/">https://about.zenodo.org/policies/</a></li> <li>Zenodo FAQ <a rel="external" href="https://help.zenodo.org/">https://help.zenodo.org/</a></li> <li>Zenodo REST API <a rel="external" href="https://developers.zenodo.org/">https://developers.zenodo.org/</a></li> <li>Zenodo .zenodo.json and GitHub <a rel="external" href="https://developers.zenodo.org/#github">https://developers.zenodo.org/#github</a></li> <li>GitHub-Zenodo tutorial <a rel="external" href="https://guides.github.com/activities/citable-code/">https://guides.github.com/activities/citable-code/</a></li> <li>The <a rel="external" href="https://allcontributors.org/">https://allcontributors.org/</a> specification and GitHub bot</li> <li>The CITATION.cff format <a rel="external" href="https://citation-file-format.github.io/">https://citation-file-format.github.io/</a></li> <li>The CITATION.cff format keywords <a rel="external" href="https://github.com/citation-file-format/citation-file-format/blob/main/schema-guide.md">https://github.com/citation-file-format/citation-file-format/blob/main/schema-guide.md</a></li> <li>SPDX ID short-form identifiers for FOSS license information <a rel="external" href="https://spdx.dev/ids/">https://spdx.dev/ids/</a></li> </ul> Lessons learned from phase 2 of the project 2021-11-20T00:00:00+00:00 2021-11-20T00:00:00+00:00 Unknown https://coderefinery.org/blog/2021/11/20/phase-2-lessons-learned/ <p>The motivation for this document was to collect lessons learned from phase 2 of our project, both for our own future work but also for other future projects who may find our experiences useful. We have chosen to collect the lessons learned in bullet-point format and not in prose.</p> <p>Below we list experiences and also unsolved challenges from workshop organization, lesson development, meeting minutes and decision tracking, Carpentries membership, communication, data management, stakeholder- and community engagement, and infrastructure hosting.</p> <h3 id="workshop-event-organization">Workshop/event organization</h3> <h4 id="metrics">Metrics</h4> <ul> <li>When we started teaching in 2016, we only worried about the teaching and not about measuring how many participants from which country and from which discipline and career stage. However, we were asked to report about metrics again and again, on short notice. At some point we started reporting this in detail (<a rel="external" href="https://coderefinery.org/about/statistics/">https://coderefinery.org/about/statistics/</a>) which really simplified reporting.</li> </ul> <h4 id="survey">Survey</h4> <ul> <li>Survey should be designed considering analysis and presentation of results, as well as and what to focus on (what we want to show off).</li> <li>When survey platform needs to be migrated to another, consider the structure of the questions and answers to avoid tedious post-processing. Over the past few years we have moved between platforms and also kept adapting questions which made the analysis non-trivial.</li> <li>How to get a better and precise overview of "actual" participants: <ul> <li>Both pre-/post-workshop surveys are opt-in, and they should be. In principle, sign-up form should collect only very necessary information for those to be able to participate in the workshop, and thus it may not be optimal to collect learner-profile type of information via sign-up form (at least not as mandatory fields), except for cases where we need to apply priority criteria or treating participants differently (e.g. team participation, grouping according to background so that they can work on different exercises etc.)</li> <li>Pre-workshop survey: so far submitted by anyone voluntarily upon sign-up. Not necessarily all the submitters are participating in the workshop, neither all the actual participants submitted the pre-workshop survey. It might be an idea to ask them to submit upon acceptance to increase accuracy to some extent.</li> <li>Post-workshop survey: <ul> <li>It needs a scheduled reminder to the organizer side have consistency in the time between the workshop and the survey timing, as the survey aims to see the long-term effect of the workshop.</li> <li>There is inevitable risks that the survey invitation cannot reach the email address registered after a half year or such, and of course we cannot expect very high response rate, either.</li> <li>Another limitation that we need to think of could be that the chances could be higher for those who had positive impression would submit the post-workshop survey than those who had negative impression, which will naturally yield biased results.</li> </ul> </li> </ul> </li> </ul> <h4 id="capacity-and-workshop-format">Capacity and workshop format</h4> <ul> <li>How to afford as many as possible learners while keeping good learner experiences or even improving them.</li> <li>How we carried out online workshops in 2020-2021: <ul> <li>Standard 3-full day CR workshop was transformed into 6-half day format, typically Tuesday-Thursday over 2 consecutive weeks.</li> <li>Helper/Exercise lead onboarding sessions as well as installation help drop-in sessions were held typically a week before the 1st week.</li> <li>All the exercises were done in breakout room with a group of regular members.</li> <li>We recruited exercise leads and accepted 5-6 individual learners per exercise lead plus team registration including their own exercise lead.</li> <li>We used priority criteria based on countries and/or institution's characteristics.</li> <li>Problems/challenges we experienced: <ul> <li>Withdrawals on short notices and no-shows</li> <li>Much hassles by the coordinators</li> <li>Feedback showing both positive and negative experiences with regular members/exercise leads</li> </ul> </li> </ul> </li> <li>What is the optimal format of help provision and exercises: <ul> <li>Should the group members be fixed or more ad-hoc or even hop-in-and-out?</li> <li>Is one regular exercise lead always needed per group? One disadvantage of not-having regular exercise lead is that it takes time to call help, explaining situation etc., which eats up exercise time.</li> <li>"Webinar (stream)-by default" with an option for joining in zoom-meeting room for extra help may work better (ref. <a rel="external" href="https://scicomp.aalto.fi/training/scip/python-for-scicomp/">Python for SciComp 2021</a>)?</li> <li>Post-workshop Q&amp;A session time/day would be useful?</li> <li>We have considered for the future to offer optional exercise walk-through sessions. These could be interesting not only for learners but recording of these sessions could also help future exercise leads.</li> </ul> </li> </ul> <h4 id="communication-with-participants">Communication with participants</h4> <ul> <li>Indico's email function worked well to send information about the workshop to participants/signers.</li> <li>We experienced few cases of typo in email address, thus we could not reach registrants.</li> <li>Online collaborative notebook (HackMD and similar) worked well for Q&amp;A during the lectures.</li> </ul> <h4 id="certificates">Certificates</h4> <ul> <li>Should CR issue any certificate at all? Certificates became participation certificates and possibly we should delegate certification to participating organizations.</li> <li><a rel="external" href="https://www.tudelft.nl/en/library/research-data-management/r/training-events/training-for-researchers/code-refinery-workshop">"TU Delft PhD candidates can obtain 2 GS credits (Research skills) when attending and actively participating in the workshop (complete assistance)"</a> - It may be better that each institute would have one responsible for approval of students' (or similar) active participation in any of the CR workshops as part of the study etc rather than CR takes responsibility on their participation by checking their records in Zoom etc.</li> <li>(Relevant to <a href="https://coderefinery.org/blog/2021/11/20/phase-2-lessons-learned/#Legal-questions">Legal questions</a>) Issuing certificates may have some problems with data management including personal information.</li> </ul> <h4 id="planning">Planning</h4> <ul> <li>Long term scheduling with fixed twice-per-year schedule is probably better than juggling many calendars and trying to find a time slot 1 month in advance.</li> <li>Planning relevant workshops/events before and after the CR big workshops will be also helpful. They include for example Software Carpentry, Python for SciComp, Hackathon, etc.</li> </ul> <h3 id="lesson-development">Lesson development</h3> <ul> <li>Only happened before workshops. This was very efficient but introduced stress.</li> <li>It probably requires a calendar event to dedicate time for this.</li> <li>"software installation and setup" <ul> <li>This is not lesson itself, but this also needs to be updated along the lesson development and improvement as well as along the changes implemented in different software programs, packages and platforms to use (e.g. GitHub).</li> <li>The procedures need validations given diverse scenarios.</li> <li>Introduction of step-wise procedures with prepared Conda environment worked well, we had considerably fewer visits to installation-help sessions (no statistics, though, it is staff's impression).</li> </ul> </li> <li>Compared to the cases where one sends PR with all the team members assigned as reviewers, lesson improvement works better when done in a pair; one takes revision work, while the other does a thorough review. Often assigning all the team members as reviewers make the responsibility unclear and ends up with the PM (or in a better case, a few regularly active members) reviews and merges.</li> <li>It is important to make the contribution criteria clear for making lesson citable: <ul> <li>“creator”(author): significant contributions</li> <li>“contributor”/Editor: reviewing/approving contributions</li> <li>“contributor”/Other: smaller contributions</li> </ul> </li> <li>Ref: https://hackmd.io/@coderefinery/citable-lessons</li> <li>In view of marketing as well as convincing funders, it would be worth collecting information about where the lesson materials are used. It will be an idea to have a form to submit where it can ask the following questions: <ul> <li>Institution/Organization etc.</li> <li>Type of event and link to the event page: <ul> <li>Workshop</li> <li>Credited course</li> <li>Non-credited course</li> <li>Other type (specify)</li> </ul> </li> <li>Which lessons were used <ul> <li>Only CR lessons (which ones)</li> <li>CR lessons (which ones) as well as other lesson materials (what materials?)</li> <li>part of CR lessons (where of it)</li> </ul> </li> </ul> </li> </ul> <h3 id="the-carpentries">The Carpentries</h3> <h4 id="membership-and-use-of-its-benefits">Membership and use of its benefits</h4> <ul> <li>Membership tier: Platinum, 3 years (2018 Nov. 1 - 2021 Nov. 1)</li> <li>After discount for providing the regional coordinator (RC) position (2019 Nov. 1 - 2021 Nov. 1), we paid 5,000 USD annually for the last two years.</li> <li>Use of instructor seats and Centrally-Organized Workshops (COW):</li> </ul> <table><thead><tr><th>year</th><th>used seats</th><th>badged instructors</th><th>COW</th></tr></thead><tbody> <tr><td>2018-2019</td><td>13</td><td>8</td><td>-</td></tr> <tr><td>2019-2020</td><td>12</td><td>8</td><td>3</td></tr> <tr><td>2020-2021*</td><td>10</td><td>6</td><td>1</td></tr> </tbody></table> <ul> <li>For each membership year, NeIC had 15 priority seats for the instructor training and 6 COWs without fee.</li> <li>Regarding the membership year 2020-2021; 3 trainees who took the instructor training are planning to finish the rest of the checkout procedures within this year. 1 of them remains as pending in the Carpentries database at the time of 26th Oct.</li> <li>RC did follow-up check-ins for the trainees who attended a training event. Regarding 2019-2020, 4 trainees from the same institute failed check-out (1 of them could not complete the participation in the training event due to absence more than an hour) despite repetitive check-ins. 1 trainees in 2020-2021 became unreachable after the training event.</li> </ul> <h4 id="relationship-with-the-carpentries-and-recognition-of-cr-in-the-carpentries-community">Relationship with the Carpentries and recognition of CR in the Carpentries community</h4> <ul> <li>CodeRefinery had sessions at CarpentryCon 2018 in Dublin (short-talk), CarpentryConnect 2019 in Manchester (lightning-talk) and CarpentryCon2020@Home (lightning-talk, panel-session), links found at https://coderefinery.org/about/reports/#presentations</li> <li>CodeRefinery submitted 2 blog posts in the Carpentries blog: <ul> <li><a rel="external" href="https://carpentries.org/blog/2020/04/coderefinery-first-online-workshop/">Lessons Learned from Running Code Refinery's First Online Workshop</a></li> <li><a rel="external" href="https://carpentries.org/blog/2020/08/Report-from-the-Mega-Coderefinery-workshop/">Report from the Mega-Coderefinery workshop</a></li> </ul> </li> <li><a rel="external" href="https://carpentries.org/community/">CodeRefinery's Zulip chat is introduced as a Carpentries local community space for Nordics and Baltics.</a></li> <li>Attended at membership executive council meetings (2020 by RA, 2021 by NT).</li> <li>In 2021, CodeRefinery hosted a workshop on <a rel="external" href="https://coderefinery.github.io/2021-01-08-coderefinery-online/">Introduction to Conda for (Data) Scientists</a> as a part of <a rel="external" href="https://carpentries.org/blog/2020/10/call-for-pilot-workshops-carpentries-incubator/">the Carpentries pilot program to improve the lesson material in the incubator program to further level</a>.</li> <li>Carpentries Executive Director provided a support letter upon the application for the sustainability phase.</li> <li>CodeRefinery has re-licensed their lesson material from CC-BY-SA to CC-BY based on a suggestion by the Carpentries.</li> </ul> <h4 id="regional-coordinator-rc">Regional Coordinator (RC)</h4> <ul> <li>During the period where the RC role was given as a part of tasks by a CodeRefinery project staff, the RC had an administrative role within the Carpentries on both COWs and SOWs in the relevant region. In total, appointed RC carried out administrative works on <strong>35 workshops</strong>. In addition, she recorded 28 past SOWs hosted by University of Oslo, which were eligible to be recorded in the Carpentries database but had not been registered.</li> <li>RC initiated the following: <ul> <li><a rel="external" href="https://carpentries.topicbox.com/groups/local-nordic">Nordic region mailing list at topic-box (managed by the Carpentries)</a>,</li> <li><a rel="external" href="https://2020.carpentrycon.org/schedule/#session-48">"Nordic and Baltic Get Together" session at CarpentryCon 2020 @home</a>, and</li> <li><a rel="external" href="https://codimd.carpentries.org/nordic-community-call">monthly community calls</a>.</li> </ul> </li> <li>RC explained and guided about the NeIC's membership benefit and the Carpentries workshops, as well as bridging new individuals to the region to the local community upon requests.</li> <li>Upon the expiration of the NeIC's membership, RC in Nordic region is also discontinued.</li> </ul> <h4 id="dissemination-of-opportunities-to-use-the-neic-s-membership-benefit">Dissemination of opportunities to use the NeIC's membership benefit</h4> <ul> <li>Dissemination of opportunities were done via CR and NeIC website, CR Zulip chat, CR newsletter, at relevant workshops, CR twitter, etc.</li> <li>In addition, presentations at conferences etc. (for example at "Seminar for bibliotekenes nettverk for ph.d.-støtte" (In Norway)) were also used to disseminate opportunities.</li> </ul> <h4 id="uptake-of-the-membership-benefits">Uptake of the membership benefits</h4> <ul> <li>Benefits were generally underused, especially COW opportunities. This was partially due to the pandemic and that requests for online COW were not accepted for the first several months after the pandemic hit. Also, the difficulty in planning in-person workshops may have also influenced here as well.</li> <li>Instructor training's three check-out procedures seem a bit high barrier for some people. Follow-up by RC seemed to have helped to some extent, for example, reminding them to apply for extension of the due date to complete the check-out, offering opportunity to join in Nordic community call as a part of check-out processes, and some advices on contribution works (e.g., translation of terms in Glosario).</li> <li>Provision of teaching/learning opportunities in Carpentries SOWs/COWs initiated by CR might have been helping; <ul> <li>to disseminate the usefulness of the Carpentries workshops, as well as</li> <li>to provide a "safe" place for newly-badged instructors to try teaching.</li> <li>NB: There was a plan to attempt this idea by a SOW for 2021, and several newly badged instructors showed interest in teaching there. But then there was a request for a new COW, and those new instructors had a chance to teach there.</li> </ul> </li> <li>The Carpentries is also changing along time: <ul> <li>Membership price model and the price itself had been stable for a couple of years, but will be changed within 2021.</li> <li>RC role is to be changed in the process of <a rel="external" href="https://carpentries.org/blog/2021/10/announcing-community-development-program/">re-designing community development program</a>. RC will no longer have responsibility for administrative works on workshops in the responsible region. This is also explained as due to a concern around GDPR raised by the major sponsor of the Carpentries (<a rel="external" href="https://communityin.org/">Community Initiatives</a>). The discount offer of having an RC is to be discontinued.</li> <li>The Carpentries will have online workshops as their standard option to offer in near future; it is so far only as pilot.</li> </ul> </li> </ul> <h3 id="meeting-minutes-and-decision-tracking">Meeting minutes and decision tracking</h3> <ul> <li>One rolling meeting minutes document is probably better than one document per meeting to track tasks and decisions. Creating new documents for each meeting risks that action points get lost or forgotten.</li> </ul> <h3 id="time-reporting-and-vacation-planning">Time reporting and vacation planning</h3> <ul> <li>In the project we have early on chosen to not report hours to the project management to build trust (only report hours to the local management).</li> <li>But in hind sight the project manager should have had a closer overview over reported hours earlier, not with a delay of months between work done, work reported to local management, work invoiced to NeIC, and NeIC management informing the project manager about hours invoiced.</li> <li>There has been work imbalance among the team: the contribution and buy-in was not the uniform among all participating countries/organizations (taking into account different FTE shares).</li> <li>In hindsight, it would have been better to offer more 1-1 discussions between project manager and staff.</li> <li>Over time there has been significant staff fluctuation which is normal but every time it takes time to know the routines and grow mutual trust and to get up to speed with the tools and processes.</li> <li>It reduces confusion to share a vacation plan: not only for the project manager but for the entire staff.</li> </ul> <h3 id="issue-task-tracking">Issue/task tracking</h3> <ul> <li>The process of having a centralized task tracking was found to be difficult to implement in a decentralized team where everyone has other 'primary' projects.</li> <li>Over the first two project terms we have tried different tools: Trello, GitHub project board, GitHub issues, HackMD, but it seems no tool replaces 1-1 discussions and more personalized task planning and one or few persons keeping the overview and re-prioritizing from time to time.</li> <li>However, having one HackMD document that collects all tasks that we chose to work on and keeping this document across bi-weekly calls has been found useful.</li> </ul> <h3 id="support-line-request-tracker">Support line/ request tracker</h3> <ul> <li>We got roughly 200-300 tickets/year.</li> <li>We have started with email to project manager but that got too much, then we moved to ZenDesk but we had to pay for each agent and it felt expensive for the very few emails we got per week.</li> <li>SNIC has kindly provided us with the RequestTracker service which we appreciate but the barrier to authenticate using SSL certificates was too high for a cross-border project and for few staff members it took weeks or months to get access.</li> <li>Most tickets arrive around workshops.</li> <li>Most non-workshop tickets were to unblock GitLab accounts.</li> </ul> <h3 id="communication-within-the-community-and-the-project">Communication within the community and the project</h3> <ul> <li>We have started within NeIC Slack.</li> <li>We have a major problem, because we don't want to (or are unsure how to) keep lists of contacts/interested people (personal data), so we don't have a way to reach out to a broad audience.</li> <li>Although we have accumulated a large dataset of contact information, we had to delete this information and could not use it to announce other events since we never asked registrants whether they would prefer being informed about related events.</li> <li>We are unsure however, whether the problem with outreach is lack of tools or lack of processes.</li> <li>One way out is to move communication to the public space which we have done when moving from Slack to Zulip.</li> <li>Internally Zulip chat has been good for the project.</li> <li>In addition, we have managed to engage many helpers and volunteers for each workshop.</li> <li>When contracted staff are working on different percentages and remotely, it is important to have clear overview of who is working on what and when, otherwise it may give the feeling of unfairness. Frequent short meetings in "Standup"-format (or even writing asynchronously on Zulip or GitHub project etc.) may help all having a better overview and enable us to regularly follow up each other.</li> <li>Minimizing the toolset has been found beneficial since everybody already has a set of tools to interact with in other projects and these tools often do not overlap or inter-operate.</li> </ul> <h3 id="data-management">Data management</h3> <ul> <li>Google Drive has served us well in the first years.</li> <li>However, this storage was connected to a personal account.</li> <li>Over time we used GitHub more and more.</li> <li>HackMD was used a lot in the last 2 years of the project, both for workshops and notes and meetings.</li> <li>We have never defined who owns the data and this created a bit of work for the project management towards the end of the project phase.</li> <li>We should have created a data management plan.</li> <li>Relevant to some points written in <a href="https://coderefinery.org/blog/2021/11/20/phase-2-lessons-learned/#Legal-questions">Legal questions</a>.</li> </ul> <h3 id="community-engagement">Community engagement</h3> <ul> <li>There was a constant stream of people interested in becoming more involved.</li> <li>We have activated some, but as 'communication' says above, some potential was left unrealized.</li> <li>Growing a community requires also promoting newcomers and mentoring.</li> <li>Mentoring also requires volunteer mentors.</li> <li>With more mentoring and more follow-up we could have had engaged more people and more organizations.</li> <li>How to give proper credits to the volunteer effort given to the community; do we need different "levels" as well as types (e.g. lesson contributions or exercise leads) of contributions? Ref. <a rel="external" href="https://www.cscce.org/2021/10/21/octobers-community-call-recap-supporting-community-champions-and-running-champions-programs/">Supporting community champions and running champions programs</a></li> <li>How to keep the community engagement up and running without "burn-out" is a constant challenge.</li> </ul> <h3 id="stakeholder-engagement">Stakeholder engagement</h3> <ul> <li>Steering group seems to have become less engaged over time.</li> <li>At the beginning of the project the SG actively influenced and gave ideas and input and suggestions.</li> <li>Over time the steering group meetings and communication grew more and more passive and turned into a reporting channel.</li> <li>The project had only 3 short meetings with the reference group formed by national training coordinators. This was somehow beneficial to connect to national newsletters.</li> </ul> <h3 id="infrastructure-hosting-gitlab-service">Infrastructure hosting (GitLab service)</h3> <ul> <li>Both the steering group and also the project staff became less interested in this over time.</li> <li>Although the GitLab service turned out successful, it became more and more disconnected and disengaged and ended up a two-person effort (one person maintaining service, another person answering tickets).</li> </ul> <h3 id="legal-questions">Legal questions</h3> <ul> <li>The project was lacking support in GDPR-related questions <ul> <li>We felt a bit left alone with questions about data privacy and storage and collaboration. For example: how long can we keep participants' data to issue certificates? Should we keep information of the certificates issued? If so, how long, who and where eventually will keep them in case the project ends?</li> <li>The employer organizations, preferably their lawyers should be consulted, especially in terms of making a project's privacy policy and choice of common cloud-based platforms that are inevitable to use. As an example, UiO lawyers have raised concern about using work email address for making user account of any cost-free cloud service (including GitHub) so that users don't set the same password as the one used at the work. In addition, it was not encouraged to use any cloud-service based in the US to store any personal data (even not sensitive ones) for work-related purpose given the risk that <a rel="external" href="https://www.uio.no/for-ansatte/arbeidsstotte/personvern/gdpr/aktuelt/endelige-retningslinjer-for-overforing-ut-av-eos.html">GDPR is not followed due to its server existence outside of the EU (especially in US)</a> (Ref. <a rel="external" href="https://edpb.europa.eu/system/files/2021-06/edpb_recommendations_202001vo.2.0_supplementarymeasurestransferstools_en.pdf">Recommendations by European Data Protection Board</a>)</li> <li>Given its characteristics, NeIC should provide both necessary legal support on the issues relevant to GDPR and common cloud-based platforms that staff across boarder securely use. Common support email and a platform where more than one project staff can answer inquiries regardless of their affiliation is essential (see also section about "Support line/ request tracker").</li> <li>CodeRefinery is (and has become) a very much community-driven project rather than one where only fixed staff work with written contract through the employer. Such project may have been rare, but there might be more of this type in future. Clear legal guideline for involvement of voluntary staff is needed. In this sense, working contract or collaboration agreements including data processor agreement may not be sufficient and it will need a very clear guideline about who should be able to have access to any personal information of the third parties including sign-up information to workshops, for example.</li> </ul> </li> <li>"Rights to work results" vs. Open Science <ul> <li>Ref: a page about <a rel="external" href="https://www.uio.no/english/for-employees/employment/work-results/rights-to-work-results.html">"Rights to work results" at University of Oslo</a></li> <li>General clarification is needed here so that everyone won't be in trouble later.</li> <li>It should be also better explained and clarified in terms of the choice of platform for collaborative works in this regard so that staff/volunteers etc. can feel safe in using the chosen (cloud-based) platforms, including GitHub, YouTube, Twitch, HackMD, Tinyletter etc.</li> </ul> </li> <li>We also lacked support in questions about how to start an own organization/ spin-off.</li> </ul> Bi-weekly Community Calls started 2021-09-01T00:00:00+00:00 2021-09-01T00:00:00+00:00 Unknown https://coderefinery.org/blog/2021/09/01/bi-weekly-community-calls/ <p>CodeRefinery is now shifting towards a new phase with community-based collaboration. We are aiming to continue offering the workshops, community space, and develop lesson materials together with those who are interested in.</p> <p>For this to be successful, CodeRefinery started bi-weekly community calls from the 9th August. Calls are open to anyone interested in joining in the community from any point of view; teaching, learning, hosting, contributing to lessons, you name it. Join in the calls, get informed and influence the community's way forward!</p> <p>So far, we informed and discussed among others;</p> <ul> <li>CodeRefinery project: current status and future,</li> <li>How to improve outreach and publicity,</li> <li>Importance of possibility to provide ECTS,</li> <li>How CodeRefinery should give credits to contributions by volunteers,</li> <li>Mentorship program for exercise leads after the workshop,</li> <li>How to "order" workshops</li> </ul> <p>For more details of each call, please visit <a rel="external" href="https://github.com/coderefinery/coderefinery.org/commits/main/content/about/community-call.md">the archive of the minutes</a></p> <p>The next call is on the 6th September 12:00-13:00 CEST with a theme of "CodeRefinery way forward", where we will be discussing the community organization model. For the connection details and agenda, please follow <a rel="external" href="https://hackmd.io/@coderefinery/community-call">the Community Call HackMD</a>.</p> <p>We all look forward to seeing you at community calls and <a rel="external" href="https://coderefinery.zulipchat.com/#">Zulip</a> :)</p> Community discussion in Nordic and Baltic countries 2020-11-13T00:00:00+00:00 2020-11-13T00:00:00+00:00 Unknown https://coderefinery.org/blog/2020/11/13/carpentry-community-discussion-nordic/ <p>This blogpost is based on the notes made on <a rel="external" href="https://pad.carpentries.org/community-discussions">Carpentries Community Discussion Etherpad</a> on the 30th Oct. 2020.</p> <h2 id="summary">Summary</h2> <p><em>The Carpentries say "never touch learners keyboard". Should instructors rigidly follow this advice in online workshops or should we be more flexible in order to overcome the challenges of teaching online?</em></p> <p>On October 30th 2020, a Carpentries community discussion was held with discussion focused on Nordic and Baltic countries. The host was Annika Rockenberger (Carpentries instructor trainer). Including the host and the co-host, totally 15 participants joined: 6 from Norway, 3 from Sweden, 3 from Finland, 2 from Denmark, and 1 from Bangladesh (Thanks for joining, all!). A complete list of the participants can be found <a href="https://coderefinery.org/blog/2020/11/13/carpentry-community-discussion-nordic/#Participant-list">below</a>.</p> <p>First, experiences from 2 online workshops were shared. The theme above was raised as a part of the discussion. The active discussion left little time for other topics, but we had a positive and creative suggestion for further collaboration and community building for Nordic and Baltic region: There was a suggestion for running a joint workshop on AR technology and the idea to create a mapping of expertise in the region to facilitate cross-border collaboration.</p> <p>There are ongoing initiatives to develop Nordic community further. Among other things, information about the <a rel="external" href="https://nordic-rse.org/">Nordic Research Software Engineer initiative</a> and its <a rel="external" href="https://nordic-rse.org/events/2020-online-get-together/">first online get-together event on 30th Nov. - 2nd Dec.</a> was announced.</p> <h2 id="workshop-debriefing">Workshop debriefing</h2> <p>Experiences from two recently held online Carpentries workshops were shared and discussed:</p> <h3 id="sweden-stockholm-mix-and-match-sql-openrefine-python-programming-and-plotting">Sweden, Stockholm -- Mix and Match (SQL, OpenRefine, Python programming and plotting)</h3> <p><a rel="external" href="https://linajandren.github.io/2020-09-22-stockholmtrio-online/">A self-organized workshop by KTH, Stockholm University, and Karolinska Institute</a></p> <ul> <li>(Lina, instructor of this workshop) Felt it was hard to teach online, as she was unsure if it reached to the audience. But it went fine.</li> <li>(Radovan) (In his experiences from teaching online workshops in <a rel="external" href="https://coderefinery.org">CodeRefinery</a>) Jumping into breakout rooms to see how the participants did in exercise sessions helped a lot. Also being able to ask/answer questions asynchronously via HackMD hopefully lowers barrier to ask (does not delay others).</li> <li>(Annika) Even being able to see helpers' faces would help despite having all the learners camera off. Also, when breakout room size is small, it is easier to get impression of the learners.</li> </ul> <h3 id="norway-bodo-dc-social-science">Norway, Bodø -- DC social science</h3> <p><a rel="external" href="https://mchiapello.github.io/2020-09-16-nord-online/">A centrally-organized workshop at Bodø University</a></p> <ul> <li>(Lars, instructor of this workshop) Breakout rooms helped as it enhanced dialog. One of the key issues in the Carpentries. Remote control function worked well. The other instructor used this function to help a learner in the main room. It took some time to build trust.</li> <li>(Anne) "Taking over learner's keyboard on an in-person workshop should never happen", the Carpentries says! But this concept could be too rigid. This should be given back as feedback to the Carpentries.</li> <li>(Lina) Depending on the context?</li> <li>(Annika) Communicating the principles and the important parts for not leaving participants behind in critical situation would be the essential thing to consider when taking over keyboard or not.</li> <li>(Joakim) Important thing is not give pressure on instructors.</li> <li>(Lina) Letting learners take over instructor's screen would be interesting.</li> <li>(Lars) Polls for ice-breakers as well. Easy to rush through, but important not to, especially when you cannot see faces as feedback.</li> <li>(Radovan) Hopefully useful tips for online teaching learned from CodeRefinery workshops: https://coderefinery.github.io/manuals/</li> </ul> <h2 id="community-building-collaboration-and-ongoing-initiatives-in-the-nordic-and-baltic-region">Community building, collaboration, and ongoing initiatives in the Nordic and Baltic region</h2> <ul> <li>(Tobias) Is planning to run a workshop on AR "Let's build an augmented reality web app!" based on a full-day workshop given at the <a rel="external" href="https://www.ub.uio.no/english/courses-events/events/all-libraries/2020/research-bazaar-2020.html">research bazaar at the University of Oslo</a> earlier this year: <ul> <li>goal: making 3D holiday greeting card using HTML and JavaScript: https://arworkshop.teebusch.repl.co/card1.html</li> <li>The lesson material is all there: https://repl.it/@Teebusch/arworkshop</li> </ul> </li> <li>(Joakim) Suggestion of a repository of Carpentries Nordic/Baltic community members with specialities and skills</li> <li>(Annika) Google Sheets for this?</li> <li>(Anne) EOSC Nordic claims to be a knowledge-hub</li> <li>(Radovan) Is also working on mapping.</li> </ul> <h3 id="announcements">Announcements</h3> <ul> <li>Nordic RSE (research software engineers) online get-together (Nov 30 - Dec 2): https://nordic-rse.org/events/2020-online-get-together/ (everybody welcome to attend and submit proposals or ideas)</li> <li>Local-nordic Carpentries mailing list: https://carpentries.topicbox.com/groups/local-nordic</li> <li>CodeRefinery workshop in November 17-19, 24-26 (registration closed): https://coderefinery.github.io/2020-11-17-online/ (looking for helpers: great way to learn)</li> </ul> <h2 id="participant-list">Participant list</h2> <ol> <li>Annika Rockenberger (host, Norway, Oslo)</li> <li>Naoe Tatara (co-host, Norway, Oslo)</li> <li>Kerstin Lenk (Finland, Tampere)</li> <li>Lars Kjær (Denmark, Copenhagen)</li> <li>Tobias Busch (Norway, Oslo)</li> <li>Lina Andrén (Sweden, Stockholm)</li> <li>Mohamed Abdelhalim (Norway, Oslo)</li> <li>Annajiat Alim Rasel (Bangladesh, Dhaka)</li> <li>Joakim Philipson (Sweden, Stockholm)</li> <li>Thomas Arildsen (Denmark, Aarborg)</li> <li>Radovan Bast(Norway, Tromsø)</li> <li>Samantha Wittke (Finland, Helsinki)</li> <li>Olav Vahtras (Sweden, Stockholm)</li> <li>Anne Fouilloux(Norway, Oslo)</li> <li>Richard Darst (Finland, Helsinki)</li> </ol> <p>Thank you for all the contributions!</p> Making lessons citable and giving credits for contributors 2020-10-02T00:00:00+00:00 2020-10-02T00:00:00+00:00 Unknown https://coderefinery.org/open-house/credit/ <p>CodeRefinery is organizing a half day online "open house" dedicated to collaboratively working on making CodeRefinery lessons citable as well as giving credits for contributors! Here, contributors are not only those who developed lesson materials, but also lesson mainteners.</p> <p>Anyone interested is welcome to contribute to discussion on how to realize these in practice!</p> <p>We will collect notes in a <a rel="external" href="https://hackmd.io/@coderefinery/2020-10-02-openhouse">shared document</a>. Please note that this document will be archived in our <a rel="external" href="https://github.com/coderefinery/open-house">Open House event repository</a>.</p> <p>We first meet online at 9:00 am (CEST) / 10:00 am (EEST) via video (connection link will be shared in our <a rel="external" href="https://hackmd.io/@coderefinery/2020-10-02-openhouse">shared document</a>. If we decide on working individually during the day, we will coordinate the work through our <a rel="external" href="https://coderefinery.zulipchat.com">Zulip chat</a> with possibilities to further discuss via video if necessary.</p> <p>We conclude the day around 12:00 pm (UTC+1).</p> git-pr: painless small pull requests 2020-09-29T00:00:00+00:00 2020-09-29T00:00:00+00:00 Unknown https://coderefinery.org/blog/2020/09/29/git-pr/ <h1 id="git-pr-painless-small-pull-requests">git-pr: painless small pull requests</h1> <p>In CodeRefinery, we teach the benefit of small changes via pull requests in order to have better collaboration and review. But, when the changes get small enough, the time it takes to run the commands and open the pull requests begins to get annoying. I looked around for other tools that could make this faster, but wasn't quite satisfied with anything. So, I slowly started making something that evolved into git-pr, <a rel="external" href="https://github.com/NordicHPC/git-pr">https://github.com/NordicHPC/git-pr</a>.</p> <p>Let's talk about how it works.</p> <h2 id="making-a-change">Making a change</h2> <p>First, git-pr will help you to make the new feature branch. <code>git pr branch $branch_name</code> willcreate a new feature branch off of the upstreamdefault branch and check it out for you. You might want to <code>git fetch</code> first. Make your commits off of this branch.</p> <p>One trick I use is to write the first commit's message like I would write the pull request description. I decided it's usually not worth writing a separate description for the pull request itself. Perhaps there is some advantage to including the PR message in the git history itself, too.</p> <p>Then, to push the pull request, I use <code>git pr open</code>. This will push the current branch, and open a pull request on both Github and Gitlab. It will pop up an editor pre-seeded with the commit's message for you to further edit. Once you save and close, the pull request is made.</p> <p>One thing that git-pr will do is figure out the upstream and your local copy by yourself. Default upstream goes in priority order <code>upstream</code>→<code>origin</code>, Default personal fork goes in the order <code>local</code>→<code>origin</code>→<code>upstream</code>, so no matter if you first clone the upstream, or your own fork, you can always add the other with only one command and have it auto-detected with no renaming.</p> <p><code>git pr prune</code> will remove all merged branches both locally and on the remote (possibly dangerous!).</p> <p>Various <code>git pr fetch*</code> commands will fetch pull requests into a local <code>pr/NNN</code> branch.</p> <p>There are various other small useful things, with it, but this is the main part.</p> <p>These are <em>only</em> shorthands for things you can easily do with other git commands, but they save you time. It gets me closer to the ideal of making many small pull requests.</p> <h2 id="about-git-pr">About git-pr</h2> <p>You can find it at <a rel="external" href="https://github.com/NordicHPC/git-pr">https://github.com/NordicHPC/git-pr</a> - it is a single shell script to copy to your path.</p> <p>It's beta-quality software: it is used by me and a few others all the time, but there will almost certainly be issues as others start using it. Send issues and PRs!</p> <p>It supports both Github and Gitlab, though Gitlab support is less well tested.</p> <p>There is a lot of prior art on different pieces here, there isn't much in git-pr that is completely new - In particular, the GitHub command line interface has come out since then and has some overlap. You can see other options in the git-pr README.</p> Writing newsletter articles and blog posts 2020-08-24T00:00:00+00:00 2020-08-24T00:00:00+00:00 Unknown https://coderefinery.org/open-house/newsletter/ <p>CodeRefinery is organizing a one day online "open house" dedicated to collaboratively writing up blog posts which have been in the pipeline for some time and which will be published in the next CodeRefinery newsletter.</p> <p>Tentative list of articles:</p> <ul> <li>Future mega-CR</li> <li>Update on citable lessons and credit/visibility for instructor and helpers</li> <li>Update on sustainability efforts?</li> <li>Manuals : how they can be used for your lessons</li> <li>git-pr</li> </ul> <p>Anyone who would like to contribute to these articles or suggests new topics is welcome to join!</p> <p>We will collect notes in a <a rel="external" href="https://hackmd.io/@coderefinery/2020-08-24-openhouse">shared document</a>. Please note that this document will be archived in our <a rel="external" href="https://github.com/coderefinery/open-house">Open House event repository</a>.</p> <p>We first meet online at 9:00 am (CEST) / 10:00 am (EEST) via video (connection link will be shared in our <a rel="external" href="https://hackmd.io/@coderefinery/2020-08-24-openhouse">shared document</a> and then work on the instructor training material. During the day, we will coordinate the work through our <a rel="external" href="https://coderefinery.zulipchat.com">Zulip chat</a> with possibilities to further discuss via video if necessary.</p> <p>We conclude the day around 4:00 pm (UTC+1) by writing a short /summary in our <a rel="external" href="https://hackmd.io/@coderefinery/2020-08-24-openhouse">shared document</a>.</p> Report from the Mega-Coderefinery workshop 2020-07-31T00:00:00+00:00 2020-07-31T00:00:00+00:00 Unknown https://coderefinery.org/blog/2020/07/31/mega-coderefinery/ <p>In May/June 2020, CodeRefinery ran a large online workshop with about 100 learners in attendance. We overcame the challenges with some clever strategies, and we feel the learning outcomes were similar to that of in-person workshops of around 30-40 participants.</p> <p>After that workshop, some of the same staff held an even larger "High-performance computing (HPC) Kickstart" workshop (180 learners, more than four universities). This provided another perspective and reinforced some of the lessons learned during the large online CodeRefinery workshop.</p> <p>Running a 100-person workshop seems like an intimidating goal, but with the right vision and techniques it turned out to be quite smooth. Instead of expecting direct instructor interaction with every learner, we had to accept that everyone could be both a helper and learner and create a hierarchical support structure.</p> <p>Online is not simply a temporary substitute for in-person. Mega-online is not simply a way to reach more people because we don't have instructors. This concept fundamentally takes us closer to the promise of technology for teaching: being able to reach everyone regardless of location and physical limitations.</p> <h2 id="executive-summary">Executive summary</h2> <ul> <li>Yes, we scale to 100 people pretty well, but you do need a good vision about how to do it.</li> <li>We maintained good learning outcomes with our adjusted strategies.</li> <li>Helpers are essential and need to be trained. Helpers serve as a first-level of support, and instructors/expert helpers serve as a second. Helpers need training in breakout room management and a walk-through/training in the group exercises.</li> <li>Encourage the social aspect by asking for people to register as part of teams and keep the teams together. Teams can even bring their own helper - or even helpers (learners in previous CodeRefinery) can bring their own learners to spread their knowledge to their colleagues.</li> <li>You need to put in extra effort to ensure things run smoothly and make sure that everyone is prepared - anticipate all problems.</li> <li>Roles of staff should be carefully explained and ideally not overlapping, to reduce the cognitive load.</li> </ul> <h2 id="mega-coderefinery">Mega-CodeRefinery</h2> <p><a rel="external" href="https://coderefinery.github.io/2020-05-25-online/">Webpage</a></p> <h2 id="finnish-hpc-kickstart">Finnish HPC Kickstart</h2> <p><a rel="external" href="https://scicomp.aalto.fi/training/scip/summer-kickstart/">Webpage</a></p> <h2 id="organization">Organization</h2> <ul> <li>Pre-workshop install help times: <ul> <li>Emphasis on getting ready and making sure things are installed and configured.</li> <li>We "required" everyone to attend one pre-workshop installation time, even if they thought they had already done it (in this case, we quickly verified the instllation). In practice, we didn't check this requirement and only 25-50% of people came, but it still make the workshop more smooth.</li> <li>The installation verification time occurred right after the "helper introduction meeting", so helpers would stay and help people verify their installation.</li> </ul> </li> <li>Installation instructions consist not just of installation, but also verification instructions. <ul> <li>In particular, verifying of the git configuration, since if there are any issues, it very quickly derails things.</li> </ul> </li> <li>We created installation and verification videos for the most critical part, git <a rel="external" href="https://www.youtube.com/playlist?list=PLpLblYHCzJACyKCfHnPwRruOxllNoHsEg">youtube playlist</a>: <ul> <li>One on verifying an installation (make repo, run it)</li> <li>One for most common problems you might see and how to fix</li> <li>One for advanced topics (ssh keys)</li> </ul> </li> <li>Start the meeting 20-30 minutes before, request joining 10 minutes early (on time is late). Have some sort of icebreakers/discussion/program to fill that 10 minutes to keep people interested.</li> <li>We kept the Zoom meeting room open for 30 min to 1 hour after the scheduled lessons are over on that day. <ul> <li>This enabled continuation of exercises in re-opening breakout rooms.</li> <li>Some participants could receive individual help by a helper or an expert helper.</li> <li>In the main room, we did debriefing among instructors and helpers so that we could reflect on the day after.</li> </ul> </li> <li>The larger the audience gets, the more diverse it is. <ul> <li>This causes more load on helpers and more effort for organizers to prepare.</li> <li>It also makes it harder to please everyone.</li> <li>But on average, we felt that the outcome was about as expected.</li> </ul> </li> <li>To scale to this cognitive load, carefully assign roles (roles explained below): <ul> <li>Zoom host, focuses on chat, breakout rooms, registration, etc.</li> <li>HackMD master</li> <li>Expert helpers (special ops)</li> <li>Instructors</li> <li>Helpers</li> <li>It is best if these roles don't overlap, because they require different types of focus. Zoom host and HackMD master are easiest to combine. Then, instructor and expert helpers.</li> </ul> </li> </ul> <h3 id="recommendations">Recommendations</h3> <ul> <li>Place a large emphasis on getting ready for the workshop.</li> <li>Have multiple ways for learners to verify their installation.</li> <li>"Require" attendance in pre-workshop installation verification times. Invite helpers there to get involved and practice basic helping.</li> </ul> <h2 id="teams">Teams</h2> <p>Our recruitment/sign-up strategy was twofold.</p> <ol> <li>Open call for helpers and sign-up for individual learners.</li> <li>“Bring your own breakout room”: We allowed learners to register as <strong>teams</strong>, where each team brought its own helper.</li> </ol> <h3 id="open-call-for-helpers-and-sign-up-for-individual-learners">Open call for helpers and sign-up for individual learners.</h3> <ul> <li>First we had a general call for helpers to assign a breakout room with individual learners.</li> <li>Our plan was to allocate one helper for 5 learnes accepted approx. (the number of helpers) * 5 of individual leraner sign-ups.</li> <li>We tried to sort these learners by university/country/field, but didn't put too much effort into this.</li> <li>Helpers and learners were told which team they will be in before the workshop (personalized email with breakout room number).</li> <li>In general, we tried to keep consistency in member composition in a breakout room throughout the whole workshop; with the same learnes and the same helper, as much as possible. <ul> <li>For a long workshop like this one (6 half-days), getting to know each other seemed to result in more interaction by the end.</li> <li>Random assignments might work better in a smaller workshop, where you are likely to see the same people you know. That isn't the case in a large workshop, so consistent breakout rooms are more worth it.</li> <li>It took a session or two for people to get comfortable with their room, but once they did it went well.</li> </ul> </li> </ul> <h3 id="bring-your-own-breakout-room">"Bring your own breakout room"</h3> <ul> <li>To further improve things, imagine if a whole group wants to get trained? They can register and bring their own helper, who could be an advanced group member.</li> <li>Research shows that multiple adopters in an organization greatly increases uptake of new tools (<a rel="external" href="https://doi.org/10.1007/s11301-017-0133-3">Graf-Vlachy, L., Buhtz, K. &amp; König, 2018</a>). Encourage people to come with friends or groupmates.</li> <li>How it worked: <ul> <li>This is implemented as a "Team name" option when registering.</li> <li>They are put in their own breakout room together.</li> </ul> </li> <li>Advantages: <ul> <li><strong>Scalability</strong>: Because they bring their own helper, we can scale to essentially as many learners as we want.This mechanism allowed us to reach far more people than we could normally, and allowed anyone who could find their own helper to attend. So, our workshop size became SUM(number of people in a team; number of teams) + (number of helpers)*6: every teamless helper directly allowed five other learners to attend.</li> <li><strong>Team building</strong>: Because these learners have a pre-existing social connection, they are able to keep a sense of community and help each other much better than you might expect from a course of this size.</li> <li><strong>Possibility to use familiar examples</strong>: We have observed that some team breakout rooms were discussing examples close to their research domain which would otherwise have been difficult to do in a "random" group room or the main room.</li> </ul> </li> <li>The concept of teams could be extended to in-person workshops, too. <ul> <li>Not necessarily pre-assigned, but cleverly organize tables, expect the group to stay together all days.</li> <li>One could give the teams names and so on, to increase team spirit.</li> </ul> </li> </ul> <h3 id="recommendations-1">Recommendations</h3> <ul> <li>Accept a "team name" as part of registration. These people will be put into the same breakout rooms. Worst case, it isn't used.</li> <li>Keep people in the same breakout room for the entire workshop - if there is risk that people will not get used to interacting with their group.</li> </ul> <h2 id="breakout-rooms-management">Breakout rooms management</h2> <ul> <li>Assign names depending on breakout room and role. Here, <code>n</code> is the breakout room number: <ul> <li><code>(n) First Last</code> - learner</li> <li><code>(n,H) First Last</code> - helper</li> <li>the above help you to easily assign to the correct breakout rooms, and becomes fairly easy with the Zoom interface. When there are more than 10 teams, it is recommended to use '01', '02', .. as it makes it even easier to organize them into breakout rooms manually.(Otherwise participant list sorts (10), not (2), right after (1))</li> <li><code>(CR) First Last</code> for instructors and expert helpers (here "CR" stood for CodeRefinery staff).</li> </ul> </li> <li>Initial breakout room assignments serves as a guideline, rooms are constantly adjusted as needed but we try to keep teams together.</li> <li>Preferably, one breakout room should have minimum 4 learners.</li> <li>When people register as a team together, keep them together unless explicitly asked. For others, do what you need, but realize that the social aspect becomes important.</li> <li>Some people don't join with the right Zoom name. <ul> <li>Other co-hosts can browse the registration list and manually rename participants who didn't name themselves correctly.</li> <li>Then, the Zoom host only has to worry about assigning them into the right rooms, and not looking up everyone on the lists.</li> </ul> </li> <li>Our registration system, Indico, made this management much easier than it could have been. <ul> <li>After registration closed, we added a "Room" field to the registration data.</li> <li>Then, we went through and manually assigned each person to an appropriate room number. We have to make sure that each room has one helper and an appropriate number of learners.</li> <li>We could send personalized messages to each person with the Indico mail merge function</li> <li>The majority of people did manage to name themselves correctly.</li> </ul> </li> </ul> <h3 id="recommendations-2">Recommendations</h3> <ul> <li>Consistent naming of participants (and an order that sorts properly) makes managing breakout rooms reasonable.</li> <li>Consider how your registration system can send personalized emails to each person.</li> </ul> <h2 id="helper-training">Helper training</h2> <p>Regular helpers:</p> <ul> <li>Have a helper call the previous week. Actually, have two so that everyone can make it to at least one.</li> <li>Helper training: <ul> <li><a rel="external" href="https://coderefinery.github.io/manuals/helping-and-teaching/">General</a></li> <li><a rel="external" href="https://coderefinery.github.io/manuals/breakout-rooms-helping/">Breakout rooms</a></li> </ul> </li> <li>Focus on training for managing time and keeping a flow going. This is described in our document.</li> <li>Helpers do not need to be experts in everything. <ul> <li>They should be able to know what "correct" looks like, see obvious problems, and then call for help from an expert when something will take more than a minute to resolve.</li> </ul> </li> <li>Helper training is focused on: <ul> <li>Motivation of learners and teaching psychology.</li> <li>How to help: don't do it for them, etc.</li> <li>Keeping the flow going, encourage everyone to speak up and share.</li> <li>Knowing when and how to call for an expert helper to come to the room.</li> </ul> </li> </ul> <p>Special expert helpers:</p> <ul> <li>There are also "special expert helpers" (we need a new name), who are experts in the material and problems that may come up. <ul> <li>Most are instructors or could soon become instructors (though really they need to be expert debuggers). Basically many of our free instructors would hang around to serve as special experts.</li> <li>Special experts aren't assigned to any particular breakout room. Instead, they are able to go to any room that needs more help.</li> <li>While no room is calling them, they swap between rooms: they join a room, wait a bit (30-60s) and watch if it's going ok, before moving to another room. This way, the instructors can always be aware of the pulse of the breakout rooms, pro-actively help, and also provide more mentorship to the helpers.</li> <li>One idea was to have expert helpers begin joining breakout rooms only after 1/3rd of the breakout session is over. This ensures that helpers get a chance to do their thing. This needs some thought.</li> </ul> </li> <li>Special experts provide valuable feedback to the instructor on the progress of all learners. They should bring up some of the most important issues they have seen in the main room.</li> <li>Special experts also serve as backup helpers and can take over or permanently join a room if a helper is unprepared.</li> <li>The instructor is also encouraged to pop into some breakout rooms to see how things are going. This may be enough in small workshops.</li> <li>Special experts should be Zoom co-hosts. They are then able to go into any breakout room they want (the mechanics of this is <em>not</em> obvious, see our helper training info for more).</li> <li>Special experts are different than the Zoom host and hackmd master. These jobs require different types of concentration. Helpers and expert helpers need to carefully follow what the instructor is saying, Zoom host/hackmd master follow learner questions, and up-next instructors think about what they are about to do.</li> </ul> <h3 id="recommendations-3">Recommendations</h3> <ul> <li>Hierarchical helpers allows you to extend to a greater size.</li> <li>You need to put thought into how helpers work and prepare them well. We should develop a special, quick training for them.</li> <li>Special expert helpers connect the instructor (occupied with teaching) to the pulse of the breakout rooms and serve as helper mentors.</li> </ul> <h2 id="lesson-adjustment">Lesson adjustment</h2> <ul> <li>Make the exercise sessions as long as possible, group things together. <ul> <li>There is a significant overhead to each breakout session, becoming adjusted, figure out just what it is you are supposed to do.</li> </ul> </li> <li>Type-along is hard, given limited screen space to both watch and do.</li> <li>In the end, the main room was more for lectures and watch an example, then we flipped to breakout rooms to do most of the hands-on work. We still need to think about this more.</li> <li>With hierarchical helpers and more people in general, make sure that each exercise and hands-on session is as self-contained as possible. <ul> <li>A person familiar with the tools should be able to read the exercise and figure out what the objective is and what the steps are - not having to pay attention to something said 5 minutes ago, and not having a surprise twist that somehow had to be accommodated at the beginning of the exercise.</li> </ul> </li> </ul> <h3 id="recommendations-4">Recommendations</h3> <ul> <li>Consider limits of online formats and how difficult it is to do interactive work.</li> </ul> <h2 id="exercises-and-breakout-sessions">Exercises and breakout sessions</h2> <ul> <li>Very clearly say what the goal is, what the duration is (duration <em>and</em> time it ends), etc. for each lesson</li> <li>Write the basic info in hackmd for each exercise: link to it, what you are expected to do, how long it is and clock time when it ends <ul> <li>e.g. "we expect you to finish 1-3, 4-5 are optional. 20 minutes, ending at xx:45".</li> <li>When participants are in two time zones, it is extra important to use this format of not specifying hour.</li> </ul> </li> <li>This is exactly the case of "if it's even a little bit slow to you, then it takes ages for a learner to understand".</li> </ul> <h3 id="recommendations-5">Recommendations</h3> <ul> <li>Have lots of "meta-talk" about what you are doing, what expectations are, etc.</li> </ul> <h2 id="hackmd">HackMD</h2> <ul> <li>HackMD serves as a side channel to answer questions, so that the main flow is not disrupted. <ul> <li>Learners keep it open and always watch and ask questions at the bottom.</li> </ul> </li> <li>One person serves as the "HackMD master" who follows it, answers, and most importantly keeps it organized and adds in meta-information about what the course does. <ul> <li>We've found that it's best if there is one person dedicated to this without any other distractions (but of course many others help, too).</li> </ul> </li> <li>Be careful about answering questions in too much depth, more than is needed. If you do, text becomes overwhelming and people can't follow. Be strategic: if an answer isn't needed for following the course, say so (and if you want, come back and answer later). Answer the minimum to let someone follow the course, and inspire people to research themselves later. Several short bullet points progressively going into more depth makes for fast reading but also more inspiration. For example this point, it's a bit long and intimidating to read, which makes you lose the flow of whatever else you are watching, isn't it? Imagine if every bullet point was like this.</li> <li>HackMD starts failing with a lot of people <ul> <li>We saw the limits at 50-100 people. If most people leave it in view mode, it gets a little bit better.</li> <li>If there isn't much text in it, it's better (~10k characters is low).</li> <li>When the document grew too long: we moved some of the text from previous episodes to a side-HackMD and linked to it.</li> <li>The failure mode was usually not being able to edit.</li> <li>In theory, there are no strict limits. With short documents, even 100 or more people could use it. Perhaps this is determined by length of edit history.</li> <li>We even saw Google Docs fail with 50 simultaneous editors during an icebreaker (and our icebreakers with hackmd seemed to work with ~50).</li> </ul> </li> <li>Always have people ask questions and comment at the bottom. <ul> <li>There is not a "questions section" and "lesson section", always write at the bottom.</li> <li>Add headings when you get to a new lesson/page/exercise/topic. Questions go at the bottom, sorted by what you were talking about at the time.</li> </ul> </li> <li>Suggested heading arrangements (but hackmd master does whatever makes sense): <ul> <li><code>#</code> for page title</li> <li><code>##</code> for each lesson</li> <li><code>###</code> for each episode</li> <li><code>####</code> for each exercise, group discussion, etc. (if it needs to be smaller than <code>###</code>.)</li> </ul> </li> <li>Make participants aware that we plan to publish questions and answers later as workshop outcomes. <ul> <li>After the workshop we add questions and answers from the HackMD document to the workshop page.</li> <li>We go through these to make sure that we don't publish names or any sensitive information or any information that would violate our Code of Conduct.</li> <li>But even though we take the effort of checking the questions and answers we recommend to point out to learners and helpers to only use the form <code>[name=Myname]</code> if they prefer to indicate their name in the notes to simplify discussions during the workshop. Before publishing the notes, we remove all of the <code>[name=Myname]</code>. In other words write in a style and recommend everybody to write in a style which allows us to publish these notes without hurting anybody's privacy.</li> <li>For a large workshop, even sharing the notes among other learners might be too much, and will naturally limit who else you can share the live notes link with. Consider if you really want to ask anyone to put real names in there.</li> </ul> </li> </ul> <h2 id="zoom">Zoom</h2> <ul> <li>Have a dedicated host, who focuses on breakout rooms and registration related matters.</li> <li>Use a client, not the web browser - though web browser is minimally OK.</li> <li>Assigning leareners to breakout rooms takes a long time, but luckily Zoom can make it easy enough: <ul> <li>The "pre-assign breakout rooms" seems to only work within one organization, thus was useless to us</li> <li>When people name themselves according to the <code>(n) Firstname Lastname</code> system, people sort properly and it becomes very fast to assign hundreds of people to their rooms.</li> </ul> </li> <li>Ask participants to edit profile beforehand and log into zoom when they join in the meeting room. This shows the name properly upon entry and thus the zoom host can confirm that the name is found in the registration list. <ul> <li>This is important when you approve entry to the meeting room from the waiting room.</li> <li>Enabling or disabling waiting room is another discussion: For the host, it can be a lot of work verifying people against a registration list. Plus, we experienced some problems that waiting room interfered breakout room entry (see the point at the bottom of this section). With a private link, waiting room didn't seem to be that important.</li> </ul> </li> <li>Prepare another communication channel dedicated to staff (like expert helpers and those who could help with HackMD editing), in our case we used a dedicated topic in <a rel="external" href="https://coderefinery.zulipchat.com/">CodeRefinery Zulip channel</a>. <ul> <li>Zoom chat is sometimes tricky, as it allows communication with either all to the same room (in the main room or breakout room, wherever you are, and as a host to all in waiting room) or to an individual.</li> <li>HackMD can also be used to discuss among staff, of course always at the very bottom.</li> </ul> </li> <li>If someone uses a different computer for Zoom than for doing the exercises, they can join twice, one of those times for sharing their screen (second one also be web browser client).</li> <li>We saw some interesting Zoom problems: <ul> <li>We experienced in the first couple of days that after assigning a participant into one of the breakout rooms, and then that participant leaves from the meeting room (not only breakout room), and tries to join in the meeting room again with waiting room enabled, then that participant was kicked out from the meeting room.</li> <li>We don't still understand the mechanism behind, but once we disabled the waiting room function (right before opening breakout rooms until they are closed), it went totally fine.</li> <li>Even after opening breakout rooms, people can join in the meeting room, and the host could assign the new people into one of the breakout rooms.</li> </ul> </li> </ul> <h3 id="recommendations-6">Recommendations</h3> <ul> <li>Managing breakout rooms isn't too hard, but do practice.</li> </ul> <h2 id="streaming">Streaming</h2> <p>Once you reach 100 people in a lesson, you start wondering: why can we not reach everyone in the world at once? The technology is there, it's a question of if it matches our vision.</p> <ul> <li> <p>We are worried about trolls in our Zoom meetings, but that is because the Zoom mechanics is many-to-many, while for a public meeting you need a one-to-many mechanic where learners can't interact with each other. Streaming provides this mechanic, at a loss of interactivity. In principle, it can co-exist with breakout rooms.</p> </li> <li> <p>What's the point of streaming?</p> <ul> <li>We did streaming in parallel to the interactive workshop. That way, anyone who couldn't register could also follow along. They wouldn't get the full experience, but could at least do something.</li> <li>We encouraged people to watch streams in groups (ideally with their own helper) so that they can get the social aspect and help each other anyway.</li> <li>We can imagine a fully federated system: There is one small Zoom meeting with instructors doing the teaching. <em>All</em> learners join via other Zoom meetings. Each other Zoom meeting watches the stream together, and manages their own breakout rooms. Each other zoom meeting can communicate to the central one as needed to adjust the pace, for example chat and hackmd. HackMD helps here.</li> </ul> </li> <li> <p>Stream as an overflow</p> <ul> <li>We had far more people register than we could accommodate, even after getting as many helpers as we could, we could feel good at least offering everyone who could not make it a chance to attend via the stream</li> <li>We emphasized that the experience would not be the same, and they should try to come to another workshop later.</li> <li>The stream can also be good for lurkers and passive attendees, who can't go through the effort of attending but would like to follow along.</li> </ul> </li> <li> <p>Interacting with stream viewers</p> <ul> <li>We got questions and comments on the stream chat.</li> <li>We also provided a separate streaming HackMD to ask questions. With our volume, we just as well could have given them the primary hackmd (and did when someone asked, but we were worried about trolls)</li> <li>Stream viewers seemed pretty happy with what they were getting.</li> </ul> </li> <li> <p>Risks of streaming</p> <ul> <li>When the main room is streamed, people are more cautious about saying things. But once we get to 100 participants, the main room is quiet anyway, so we don't lose too much.</li> <li>Risk of the stream going off-track from what learners need. You need a good support system of expert helpers and feedback tools to keep this working, if it was a stream-only workshop.</li> <li>Risk of learner audio or video being broadcast. Zoom provides tools ("spotlight video") to prevent this, but it doesn't work all the time.</li> <li>Extra effort needed. The marginal cost isn't that great in the end, once you know how it works.</li> </ul> </li> <li> <p>Zoom can send a video feed to a streaming service, which re-broadcasts to the whole world</p> <ul> <li>This has to be enabled under your account, then can be configured for a particular meeting.</li> <li>"Custom streaming server" seems to be able to broadcast to anything. In particular, we used <a rel="external" href="https://www.twitch.tv/coderefinery">Twitch</a> to do our streaming.</li> </ul> </li> <li> <p>Keeping learner's videos out of the stream</p> <ul> <li>Privacy of learners is the first prerequisite to streaming.</li> <li>We said: if you speak in the main room, it may be streamed and recorded. Your video should never be. We thought this was fair, since most main room questions go through hackmd anyway.</li> <li>Breakout rooms never recorded or streamed (though some groups asked if they could be recorded).</li> <li>Zoom "Spotlight video" means that <em>only</em> that person should go out into the stream. <ul> <li>The zoom host <em>must not</em> be in the gallery view.</li> <li>This <em>bugs</em> sometimes and everyone ends up in the stream is gallery view. This is extremely frustrating and we didn't find a cause or solution. Workaround: someone should always share their screen.</li> <li>In practice this wasn't a big issue, since in the main room video was off most of the time. We reminded participants to turn off videos when they are back from breakout room sessions.</li> <li>We really need to investigate this more.</li> </ul> </li> </ul> </li> <li> <p>What to do with the stream while the breakout rooms are going on?</p> <ul> <li>At first, during the breakout sessions in the main room, we spent a lot of time trying to fix problem with people who couldn't be assigned to breakout rooms. This seems to have been a waste of time</li> <li>Then, we decided to not spend time on Zoom problems, and instead use the main room to do the exercises as a demo. This was mainly for the stream viewers, but also could be useful to the people who couldn't join breakout rooms. In the future, it could also serve a different type of learning style.</li> </ul> </li> </ul> <h3 id="recommendations-7">Recommendations</h3> <ul> <li>Consider the place of the workshop in the larger world. Once you go big, streaming is not too hard and lets you reach even more people.</li> <li>If you do streaming, clearly announce it from the very start, with the privacy deal (e.g. "video not broadcast, voice may be"). It is much harder to add this later.</li> </ul> <h2 id="recording">Recording</h2> <ul> <li>Once you do streaming, it is a smaller step to recording and posting the videos. <ul> <li>Who is benefited by the recordings? Perhaps not brand new learners, but the learners who were in the workshop can review them again later.</li> </ul> </li> <li>If recordings require post-processing, they will almost never get done. <ul> <li>Plan for one-short recording as much as you can: find a way to keep learners out of the recording so you can go and directly publish it with the minimum effort afterwards.</li> </ul> </li> <li>A surprising number of learners have asked for the videos after the workshop. <ul> <li>While the videos may not be as useful to someone learning the material from scratch, they are probably very useful to an existing learner who wants to review something they already saw, teach others, etc.</li> <li>When we can't provide them quickly, their usefulness is much reduced.</li> </ul> </li> </ul> <h3 id="recommendations-8">Recommendations</h3> <ul> <li>Clearly announce the recording privacy statement when first registering.</li> <li>Try to make the recording as one-shot as possible, with minimal post-processing needed. Plan for who will do this and when already before the workshop.</li> </ul> CodeRefinery tools in action: NordicHPC 2020-04-27T00:00:00+00:00 2020-04-27T00:00:00+00:00 Unknown https://coderefinery.org/blog/2020/04/27/nordichpc-tools/ <p>You've been to a CodeRefinery workshop, and wonder how these tools are actually used? The NordicHPC github organization, which we've mentioned before, provides a lot of demonstrations on using github and working collaboratively. It's an example of people who have a common interest and form a community by using common tools.</p> <p>Yet at the same time, not everything is perfect. Rather than try to make everything perfect, they make things good enough, licensed, and shareable, and improve it as a need comes - possibly, when someone else has a need and time to improve it.</p> <p>Within the organization, you can find many examples of using <a rel="external" href="https://coderefinery.github.io/git-intro/">git</a> (everything), <a rel="external" href="https://coderefinery.github.io/git-collaborative/">pull-request based workflows</a> (e.g. sonar, git-pr, slurm2sql), <a rel="external" href="https://coderefinery.github.io/testing/">automated testing</a> (e.g. .travis.yml in sonar, envkernel, nbscript, slurm2sql), <a rel="external" href="http://cicero.xyz/v3/remark/0.14.0/github.com/coderefinery/modular-code-development/master/talk.md">modular code development</a> (e.g. ), <a rel="external" href="https://coderefinery.github.io/social-coding/">open licensing</a> (e.g. everything).</p> <p>Below you see some examples of NordicHPC tools. Some tools are useful to anyone, but some may be more interesting to cluster administrators.</p> <ul> <li><a rel="external" href="https://github.com/NordicHPC/nbscript">nbscrpt</a> is an attempt to provide the familiar script interface to Jupyter notebooks.</li> <li><a rel="external" href="https://github.com/NordicHPC/sonar">sonar</a> and <a rel="external" href="https://github.com/NordicHPC/sonar-web">sonar-web</a> provide a way to watch what is actually running on clusters.</li> <li><a rel="external" href="https://github.com/NordicHPC/git-pr">git-pr</a> saves you keystrokes when making pull requests, though perhaps <a rel="external" href="https://cli.github.com/">cli.github.com</a> takes its place.</li> <li><a rel="external" href="https://github.com/NordicHPC/envkernel">slurm2sql</a> imports the HPC Slurm job history to a sqlite3 database. It can be useful, even individually, to get and analyze data about your jobs.</li> <li><a rel="external" href="https://github.com/NordicHPC/envkernel">envkernel</a> is a Jupyter extension which lets you run your kernels in different environments, such as Docker, Singularity, and virtual/conda environments more easily.</li> </ul> <p>Do you have a nice tool that needs a home? You know what to do...</p> Announcing the first Nordic-RSE conference 2020-04-24T00:00:00+00:00 2020-04-24T00:00:00+00:00 Unknown https://coderefinery.org/blog/2020/04/24/nordic-rse-conference/ <p>A couple of years ago, <a rel="external" href="https://neic.no/news/2018/05/04/building-a-community/">several CodeRefinery members and their friends</a> started discussing how a Nordic network of Research Software Engineers (RSEs) could be established, and soon thereafter the <a rel="external" href="https://nordic-rse.org/">Nordic-RSE initiative</a> was launched. The idea was to follow in the footsteps of very successful such initiatives in other countries, most notably in <a rel="external" href="https://society-rse.org/">the UK</a>, <a rel="external" href="http://nl-rse.org/">the Netherlands</a> and <a rel="external" href="http://www.de-rse.org/de/index.html">Germany</a>. For the past two years we have been taking the first steps in this direction. A <a rel="external" href="https://github.com/nordic-rse/RSE_intro_survey/blob/master/analysis/results_nordics_2018_narrative.ipynb">survey was conducted</a> to learn about the environment for people in RSE-related roles. Information on <a rel="external" href="https://nordic-rse.org/communities/map/">groups and people</a> working in Nordic universities who identify as RSEs is being collected, and local campaigns have been launched within several universities for the creation of new RSE groups. To further grow the emerging Nordic community of RSEs, we are now happy to announce that <strong>the <a rel="external" href="https://nordic-rse.org/events/conference/">first Nordic-RSE conference</a>, Nordic-RSE2020, will take place in Stockholm between 1st and 2nd December 2020</strong>!</p> <h3 id="about-the-conference">About the conference</h3> <p>At Nordic-RSE2020, we will bring together those that develop software for research purposes and contribute to building the RSE community. The program is not set in stone but we will have invited talks, lightning talks, poster sessions and workshops on best practices for creating research software and other popular RSE related topics. We expect a large contribution from Nordic RSEs, but will also invite international RSEs that can help our Nordic community take shape.</p> <p>The emphasis of the conference will be on learning from each other in a supportive and relaxed atmosphere. The choice of conference venue for Nordic-RSE2020, the THS student union building at KTH campus in Stockholm, reflects our hopes: it has lots of spaces for casual conversations and is equipped with fast internet and all the facilities required for a successful conference.</p> <h3 id="who-should-attend">Who should attend?</h3> <p>Our aim is to reflect the diverse and emerging community of RSEs by seeking input from all levels of experience and across a variety of domains, genders, and ethnicities.</p> <p>We welcome participation from:</p> <ul> <li>Researchers at any career stage who develop software for research purposes;</li> <li>Software developers working in a research context, whatever their job title or field;</li> <li>Those interested in advancing the understanding of how best to use existing research software (e.g. with respect to scalability, performance and/or reproducibility);</li> <li>People from any organization providing tools, platforms or services that benefit research software;</li> <li>Anyone with a stake in research software (funders, publishers, decision makers, etc).</li> </ul> <p>We especially encourage first-time presenters and can offer mentoring and other support with preparing your contribution.</p> <h3 id="getting-involved">Getting involved</h3> <p>In order to make this a successful conference, we will need help from volunteers to ensure that all the logistics and practicalities work smoothly. What's in it for you? All conference helpers get a free conference ticket! Please get in touch with the organizing committee ([email protected]) if you would like to help or if you have any questions on how to get involved with Nordic-RSE2020.</p> <p>We will also need sponsors to cover costs, keep the conference fee as low as possible and to be able to offer travel grants to younger participants. We have already received generous offers for sponsorship from the <a rel="external" href="https://e-science.se/">Swedish e-Science Research Centre (SeRC)</a>, the <a rel="external" href="https://snic.se/">Swedish National Infrastructure for Computing (SNIC)</a> and the <a rel="external" href="https://essenceofescience.se/">Swedish e-science collaboration (eSSENCE)</a>. By supporting us, our sponsors are helping to raise awareness of the importance of developing RSE career path in the Nordics.</p> <h3 id="inviting-new-sponsors">Inviting new sponsors</h3> <p>Nordic-RSE2020 is the first networking and community-building event of Nordic-RSE. We will meet to network, to learn about best software practices, reproducible research and open science, and to further develop communication and project management skills required by RSEs.</p> <p>RSEs are the connection between technology and research. If you want to get a message directly to those who facilitate research with technology, you want to sponsor this conference. Our attendees often shape decisions about tools, contracts and approaches to research software and computing – either directly or through their role in advising, training and collaborating with researchers. In addition to the chance to raise awareness of how your products or services are relevant to modern research, sponsors will get mentions, visibility, and depending on the sponsor package chosen, conference tickets and contributed workshops, posters or short talks. For information on sponsorship see our webpage [removed] or <a href="mailto:[email protected]">get in touch</a>.</p> CodeRefinery workshops moving online 2020-04-24T00:00:00+00:00 2020-04-24T00:00:00+00:00 Unknown https://coderefinery.org/blog/2020/04/24/online-workshops-update/ <p>After cancelling all our planned in-person workshops this spring due to the ongoing pandemic, we decided to make the best of the situation and start focusing our efforts on developing an online workshop training programme. We wanted to start small while learning the mechanics of online teaching, so we began by offering an online workshop covering only the <a rel="external" href="https://coderefinery.github.io/git-intro/">Git-intro</a> lesson to a group of around 25 participants on April 7-8. Neither teaching nor attending online workshops offers quite the same experience as attending in-person events, but we were pleasantly surprised about how well the workshop went and it definitely gave a boost to our ambitions to move more of our traditional workshops online. Online workshops will also provide a means for us to <em>scale up</em> and reach a larger audience than possible with in-person workshops.</p> <p>We learned many important lessons in this first experiment and we tried to summarize them all in a <a rel="external" href="https://coderefinery.org/blog/2020/04/14/first-online-workshop/">previous article</a>. We hope that these notes can be of help to others who are going online with some of their teaching.</p> <h3 id="new-notify-me-form">New notify-me form</h3> <p>We expect to be delivering many more online workshops also after covid-19 restrictions are lifted and life starts returning to normal. We realized that this means that our old notify-me form has become obsolete - it is no longer enough to only indicate the city in which you want to attend a workshop. So we created a <a rel="external" href="https://coderefinery.org/workshops/upcoming/#notify-me">new more fine-grained notify-me form</a> where people can sign up for updates about upcoming online and/or in-person workshops and also indicate which lessons they are most interested in. If you want to be informed of upcoming workshops, please sign up.</p> <h3 id="join-an-online-workshops-as-a-helper">Join an online workshops as a helper</h3> <p>The new notify-me form now also has an option to indicate that you are interested in participating as a helper or instructor. Instructors always need help and this is even more relevant for our online workshops. Helpers assist learners in overcoming technical problems and work through challenges or questions they may have. Ideally, we need at least one helper per breakout room (4-5 learners). Helpers don't have to be familiar with all the lesson material - experience with even just one lesson/tool/approach is sufficient.</p> <p>Have you already particated in one or more workshops, and now want to help us in spreading better software development practices to the world? Register as <strong>helper</strong> for upcoming online or in-person workshops in our new <a rel="external" href="https://coderefinery.org/workshops/upcoming/#notify-me">notify-me form</a>. Remember also that there is no better way to consolidate new knowledge than teaching it to others!</p> <h3 id="bring-your-own-breakout-room-helper">Bring your own breakout room/helper</h3> <p>With online courses over video we could in principle aim at reaching a larger scale than in-person workshops which are limited by room-size and being visible and audible, but also by the number of helpers. In online workshops the presence of helpers is no less important to make sure that each breakout room has a helper to answer questions during exercise sessions. We are considering to offer participants the possibility to "bring their own breakout room" to the workshop. This way they can collaborate on exercises with colleagues they already know, if they prefer so. More importantly, they can assign one person who is more experienced in the toolset presented to take the role as helper. Participating as helper not only means "giving" but is also a great learning experience: both in the tools and in solving problems and supporting and teaching other learners.</p> <h3 id="upcoming-online-workshops">Upcoming online workshops</h3> <p>We plan to arrange two full online CodeRefinery workshops covering all our material before the summer. The format will be to split the workshop content over six half-days spread over two weeks.</p> <p>In May we will do our first full CodeRefinery workshop, starting on a Tuesday, and ending on a Thursday the week after. Drawing on the experience from this first full workshop, the plan is to deliver a second online workshop in June.</p> <p>Sign up for the <a rel="external" href="https://coderefinery.org/workshops/upcoming/#notify-me">notify-me form</a> if you want to receive an email as soon as registration opens for these workshoops!</p> Rebase vs merge 2020-04-24T00:00:00+00:00 2020-04-24T00:00:00+00:00 Unknown https://coderefinery.org/blog/2020/04/24/rebase-vs-merge/ <p>During a CodeRefinery workshop you might have heard an instructor say that you can merge or alternatively rebase, like merge and rebase are two equivalent operations. Clearly, they are not, but should we treat the operations equally?</p> <p>Let us take a closer look at rebase and merge, how they differ and in which situations they are an advantage to use.</p> <h3 id="rebase">Rebase</h3> <p>Rebase gives you the opportunity to move the base of a branch to a new base. Here we have two branches, <code>master</code> and <code>feature_A</code>.</p> <p><img src="/blog/image_01.png" alt="Initial tree" title="Initial git commit tree" /></p> <p>We can rebase the <code>feature_A</code> branch to the last commit in <code>master</code>:</p> <pre class="giallo" style="color: #383A42; background-color: #FAFAFA;"><code data-lang="shellscript"><span class="giallo-l"><span style="color: #4078F2;">git</span><span style="color: #50A14F;"> checkout feature_A</span></span> <span class="giallo-l"><span style="color: #4078F2;">git</span><span style="color: #50A14F;"> rebase master</span></span></code></pre> <p>The result will look like this.</p> <p><img src="/blog/image_02.png" alt="First rebase tree" title="git commit tree after rebase" /></p> <p>Checking out <code>master</code> again, we can merge <code>feature_A</code> with <code>master</code>. The merge will by default be a fast-forward. We end up with a linear history, which many find attractive as it is easy to follow. The disadvantage is that we rewrite the history as the commit hashes changes.</p> <p><img src="/blog/image_03.png" alt="FF-merge tree" title="git commit tree after fast-forward merge" /></p> <h3 id="merge">Merge</h3> <p>If we don’t use rebase, but just merge <code>feature_A</code> with <code>master</code>, we get an merge commit, a new commit pointing to the previous last commit in <code>master</code> and the previous last commit in <code>feature_A</code>.</p> <p><img src="/blog/image_04.png" alt="Plain merge tree" title="git commit tree after regular merge" /></p> <p>If we only do merges, we show the true story of the repository, how the code came to be. As the repository grows with new branches, maybe more contributors, following the history can become very challenging. The git graph can look like the tracks of a large railway station, where it can be hard to find the ancestors of a feature.</p> <h3 id="mixing-rebase-and-merge">Mixing rebase and merge</h3> <p>Instead of sticking to either rebase or merge, we could use both operations, but establish principles for when we will use merge and under which conditions we use rebase:</p> <ul> <li>When we merge a semantic unit to <code>master</code>, we use merge.</li> <li>When patch features, or do general corrections, we use rebase.</li> </ul> <p>How will this look?</p> <h4 id="merge-revisited">Merge revisited</h4> <p>Let us say we have created a new function or class, something that belongs together - a semantic unit we call <code>feature_B</code>. The base of <code>feature_B</code> is the last commit in <code>master</code>.</p> <p><img src="/blog/image_05.png" alt="Master feature-b tree" title="git commit tree with master and a new feature" /></p> <p>If we do a merge, git will by default do a fast-forward merge. Following our newly stated policy, we want this merge to be a merge commit. Consequently, we add the option --no-ff to the merge command:</p> <pre class="giallo" style="color: #383A42; background-color: #FAFAFA;"><code data-lang="shellscript"><span class="giallo-l"><span style="color: #4078F2;">git</span><span style="color: #50A14F;"> checkout master</span></span> <span class="giallo-l"><span style="color: #4078F2;">git</span><span style="color: #50A14F;"> merge feature_B</span><span style="color: #986801;"> --no-ff</span></span></code></pre> <p>Alternatively, we can configure git to default do merge commits, by setting the configuration to not do fast-forward by default. Here as a global setting, spanning all our projects:</p> <pre class="giallo" style="color: #383A42; background-color: #FAFAFA;"><code data-lang="shellscript"><span class="giallo-l"><span style="color: #4078F2;">git</span><span style="color: #50A14F;"> config</span><span style="color: #986801;"> --global</span><span style="color: #50A14F;"> branch.master.mergeoptions</span><span style="color: #986801;"> --no-ff</span></span></code></pre> <p>The result will be like this, where the feature is clearly visible in a feature path, presumably with well written commit messages explaining what has been added in this path of work.</p> <p><img src="/blog/image_06.png" alt="No-ff merge tree" title="git commit tree after --no-ff merge" /></p> <h4 id="rebase-revisited">Rebase revisited</h4> <p>Now we take the case where we checkout a branch from C1 to do some corrections. While we were doing the corrections, at least before we were able to complete the corrections, <code>master</code> moved to M1 as in the picture above. A merge commit will add unnecessary complexity to the story of our project. We are not adding a new semantic unit, just fixing things that got wrong in the first phase. That we started to fix things from C1 is not necessarily a important information to keep for the project.</p> <p><img src="/blog/image_07.png" alt="No-ff merge tree plus patch" title="git commit tree with a merged feature branch and a patch branch in master" /></p> <p>Following our second principle, we rebase the fix_typos branch to M1. Then we do a merge, but this time as fast-forward. If we have configured merge for not doing fast forward when possible, as the configuration statement above, we need to add the --ff-only argument:</p> <pre class="giallo" style="color: #383A42; background-color: #FAFAFA;"><code data-lang="shellscript"><span class="giallo-l"><span style="color: #4078F2;">git</span><span style="color: #50A14F;"> checkout fix_types</span></span> <span class="giallo-l"><span style="color: #4078F2;">git</span><span style="color: #50A14F;"> rebase master</span></span> <span class="giallo-l"><span style="color: #4078F2;">git</span><span style="color: #50A14F;"> checkout master</span></span> <span class="giallo-l"><span style="color: #4078F2;">git</span><span style="color: #50A14F;"> merge fix_typos</span><span style="color: #986801;"> --ff-only</span></span></code></pre> <p>The git graph will now look like this:</p> <p><img src="/blog/image_08.png" alt="No-ff merge plus rebase" title="git commit tree with a merged feature branch and a rebased patch branch" /></p> <h3 id="rebase-vs-merge-revisited">Rebase vs merge revisited</h3> <p>Rebase and merge serve two different purposes. We can use this to our advantage to create a clear story, a more readable git log (It is important to create a story, remember?). By using the above principles as guidance, we will become more conscious of where these operations will serve us or add more clutter. For instance, we might conclude that rebasing semantic branches, but insisting on a merge commit, is perfectly fine, because it is where the feature (the semantic entity) enters the <code>master</code> branch which is important, not where the development first started. Features will clearly stand out as a visible pattern in a git repository following such a practice.</p> <p><a rel="external" href="https://medium.com/@porteneuve/getting-solid-at-git-rebase-vs-merge-4fa1a48c53aa">[1] Getting Solid at Merge vs Rebase</a></p> Research Software Hour 2020-04-24T00:00:00+00:00 2020-04-24T00:00:00+00:00 Unknown https://coderefinery.org/blog/2020/04/24/rsh/ <p>CodeRefinery is a project that holds workshops, but computing is an experience. As much as we teach in workshops, it's not enough: these workshops are hands-on, but still can't show our whole daily thought process. They also aren't the right format for everyone and can't reach enough people at once. In order to extend our reach, we are trying a streaming web show <a rel="external" href="https://researchsoftwarehour.github.io">Research Software Hour</a> that combines the spirit of CodeRefinery with real-life examples from our daily work - and hopefully, some entertainment, too. We hope watchers experience the <em>spirit of research software and computing</em>.</p> <p>We knew that there had to be a way to reach more people, so considered streaming and decided to do it together: it's more fun and more engaging for the audience, we can discuss, ask each other questions, show each other new tools we discovered, learn from each other, hopefully teach the audience some. We will certainly be learning a lot from the audience, too.</p> <p>We wish to show why we enjoy research software and computing and how you can, too. <strong>This is an interactive show, and a big part is answering your questions. We encourage you to submit your own codes and scripts and repositories which we can constructively review on stream. You'll get positive ideas and everyone will benefit.</strong> We are not experts in everything and will also show you the errors we make and how we get through them and also critically review our own codes.</p> <p>We are starting this as a two-person project (Richard Darst from Aalto University, Finland, and Radovan Bast from UiT the Arctic University of Norway, both working as part of the CodeRefinery project). This is an open source production - anyone can help us develop Research Software Hour, too. There are many different ways to contribute, from streaming to developing material to community building. Join us with questions, answers, ideas, code!</p> <p>Read more at <a rel="external" href="https://researchsoftwarehour.github.io/">the website</a> and join us each Tuesday at 20:30 CEST on Twitch.</p> Work on blog posts 2020-04-24T00:00:00+00:00 2020-04-24T00:00:00+00:00 Unknown https://coderefinery.org/open-house/blog-posts/ <p>CodeRefinery is organizing a one day online "open house" dedicated to collaboratively writing up blog posts which have been in the pipeline for some time and which will be published in the next CodeRefinery newsletter.</p> <p>Tentative list of articles:</p> <ul> <li>Online lessons, what we're working on, how we'll be delivering online workshops</li> <li>Merge vs rebase</li> <li>Nordic-RSE conference</li> <li>NordicHPC tools</li> </ul> <p>Anyone who would like to contribute to these articles or suggests new topics is welcome to join!</p> <p>We will collect notes in a <a rel="external" href="https://hackmd.io/46XkhCr5T4yahKprL6N01A">shared document</a>. Please note that this document will be archived in our <a rel="external" href="https://github.com/coderefinery/open-house">Open House event repository</a>.</p> <p>We first meet online at 9:00 am (UTC+1) via video (connection link will be shared in our <a rel="external" href="https://hackmd.io/46XkhCr5T4yahKprL6N01A">shared document</a> and then work on the instructor training material. During the day, we will coordinate the work through our <a rel="external" href="https://coderefinery.zulipchat.com">Zulip chat</a> with possibilities to further discuss via video if necessary.</p> <p>We conclude the day around 4:00 pm (UTC+1) by writing a short /summary in our <a rel="external" href="https://hackmd.io/46XkhCr5T4yahKprL6N01A">shared document</a>.</p> Lessons learned from running our first online workshop 2020-04-14T00:00:00+00:00 2020-04-14T00:00:00+00:00 Unknown https://coderefinery.org/blog/2020/04/14/first-online-workshop/ <p>April 7-8, 2020, we gave our first online workshop on <a rel="external" href="https://coderefinery.github.io/2020-04-07-online/">introduction to Git</a> (2 x 3 hours) with 22 participants and we plan to deliver many more such workshops on a number of topics based on our <a rel="external" href="https://coderefinery.org/lessons/">lessons</a>.</p> <p>The workshop went well. Online feels slower, but has a different set of advantages (we discussed later whether we actually covered significantly less than during an in-person workshop and we were not sure the pace was actually slower).</p> <p>Here we wish to share with the community our lessons learned: What worked well and what we need and plan to improve. We use bullet point format for brevity.</p> <p>It's maybe obvious but aiming for less material at a calm pace is better than trying to cover all material too fast. During the online workshop we will manage to traverse less material than in-person and it's good to prepare for that. For 1 hour session, plan for 30 minutes. The rest will be questions, issues, and breaks.</p> <h3 id="breaks-and-ice-breaker">Breaks and ice-breaker</h3> <ul> <li>5 minute breaks were too short, better 10 minutes or longer, at least once an hour.</li> <li>We have started with a demonstration of the tools (Zoom and HackMD) and this was probably time well spent (thanks to Greg Wilson's excellent <a rel="external" href="https://www.rstudio.com/resources/webinars/teaching-online-at-short-notice/">presentation</a> and references therein).</li> <li>The HackMD ice-breaker was for each participant to write their name, operating system, experience with Git, and optionally what they are working on. We found it useful to pre-fill the HackMD section with the participants' initials to avoid that all cursors start from the same place and everybody hesitates to write something.</li> <li>We should have included a "ice-breaker" break-out room session where persons can talk about something informally considering that the first time participants possibly ever experience a breakout room is in the first exercise (they may not know how breakout rooms work, they need to find the exercise in the material, they don't know anybody). We want people to feel comfortable and to ask questions.</li> </ul> <h3 id="solving-technical-issues">Solving technical issues</h3> <p>Online, the initial problems can end up derailing the whole day's schedule, and take longer to get resolved. Compensate by ensuring they are set up in advance, which is also easier to do online.</p> <ul> <li>On day 1 we spent some time debugging tech issues and for the next event we plan to create a 5-10 minute video "setting up and configuring Git" and ask all participants to show up at a session one day before the workshop to demonstrate that all is set up to not lose any time during the actual workshop.</li> <li>For solving technical problems we found it useful to move the participant into a breakout room with a helper where the participant can share screen and this way we could solve problems without disrupting the main flow too much. <ul> <li>However, if one has previously created groups for group work, the only way to send helper-instructor pair to room is to delete all the existing rooms or un-assign all participants. It's not possible to launch just a single room out of several existing rooms.</li> <li>We think that when pre-making the rooms, you have to create some empty spares for this.</li> </ul> </li> </ul> <h3 id="helpers">Helpers</h3> <p>Without limitations on distance, we can involve more helpers. With more use of breakout rooms, they have a more clear job and it could be a great opportunity to pay forward but also learn more for someone who finished CodeRefinery a little while ago.</p> <ul> <li>To keep a high quality of the workshop each group should have one helper/instructor. But this places limits on scalability - we can't have too many participants and must maintain a 1:5 helper:participant ratio.</li> <li>Helpers were important for our breakout room systems to work. They don't have to be the absolute experts: primary instructors can rotate between breakout rooms and help with hard questions, also having typically more experience with the material and exercise goals.</li> <li>Helpers can be recruited from previous online workshops, and perhaps that could even be a requirement: "price of workshop is to attend a later workshop as helper" (not a direct lesson learned from this workshop).</li> </ul> <h3 id="breakout-sessions">Breakout sessions</h3> <p>Breakout rooms are pretty good, but as a host, the Zoom mechanics take some getting used to. We found an interesting semi-flipped classroom mechanic.</p> <ul> <li>Fewer longer (15 min) breakout sessions were better than many short ones (5-10 min).</li> <li>This also means that we should group some exercises and not have them spread out every 10 minutes.</li> <li>On day 1 we tried to group participants according to operating systems but we got better feedback and it felt better after grouping participants either randomly or even better according to experience.</li> <li>Groups with 4-5 persons seem to work well, with one helper.</li> <li>In breakout rooms encourage participants to share their screen and other participants to comment but also make sure that it's not only one participant sharing all the time at every group session.</li> <li>Some exercises can be done in driver-navigator mode, where one participant who shares screen types in the commands and other participants in the room discuss and recommend what to type.</li> <li>Some people just wanted to work alone, that's OK too.</li> <li><strong>Method 1: group work</strong> <ul> <li>Most teaching done in main room (this is important for the most important and delicate topics).</li> <li>Participants are in breakout rooms, working independently, sharing screen/asking for help when they need to.</li> </ul> </li> <li><strong>Method 2: flipped classroom</strong> ("flipped classroom" isn't quite the right term though) <ul> <li>Initial motivation in the main room.</li> <li>Switch to breakout rooms early to go through the type-along exercises.</li> <li>This only works when things are clear enough that people can't get too lost.</li> <li>(*) One learner shares screen, others follow along discussing, asking question, and typing along themselves. Emphasize "it's easiest to share the screen since you don't have to do the thinking".</li> <li>(*) Instructor flips between the rooms every 1-2 minutes answering hard questions and following progress.</li> <li>Join the end for a wrap-up where best questions are discussed.</li> <li>Helpers and instructors should write down the most important questions to discuss afterwards.</li> </ul> </li> <li>In reality, use the best of both depending on your specific lesson, especially the asterisk (*) points! <ul> <li>Encourage the instructor to cycle through breakout rooms to watch discussions and help out.</li> <li>Many interesting questions were asked in breakout rooms but we did not write them down, they could have been interesting for everybody. They should be written down and discussed as a follow-up in method (2).</li> </ul> </li> <li>Host can lose host rights sometimes. <ul> <li>Host should not enter breakout rooms, at least if they are not the original host because then hostship is transferred to original host.</li> <li>In our case the person who created the meeting room transferred hostship to another instructor who then organized the breakout room but we experienced a technical glitch and hostship fell back to the first person and we lost the room assignments and for a minute or two the room creator did not even notice this (was busy helping out a participant). This means that ideally the person who is the main host should also create the meeting room, if possible.</li> <li>Richard: at least when I was main host in another meeting, I could join a breakout room and not lose host. I think. Needs more testing.</li> </ul> </li> <li>Co-hosts seem to be able to jump between rooms freely <em>after</em> first joining the room they were originally assigned to (i.e. can't select any group from the main room).</li> <li>At one point, Zoom dropped the whole meeting and everyone re-joined (automatically). Pre-assembled breakout rooms got lost, which was annoying.</li> </ul> <h3 id="hackmd">HackMD</h3> <p><strong>HackMD was a vital resource</strong>, but you should have someone dedicated to watching it and keeping it organized.</p> <ul> <li>We were impressed how well it worked, holding up with 25 persons editing without noticeable lag.</li> <li>If a question was too advanced or we had no time to answer it, we encouraged to write the question in HackMD (or wrote it ourselves there) so that it could be answered later.</li> <li>Asking and replying question in HackMD worked well. It worked so well that even in physical workshops we should use HackMD for questions that helpers can answer!</li> <li>It gives the possibility to answer at different levels of complexity in successive bullets, so that each participant can read until satisfied with the answer.</li> <li>Students can come back after the course and find better researched answers, if the in-course answer is unsatisfactory.</li> <li>Make sure that the HackMD contents, without any identifying information, can be made public after the course.</li> <li>Instead of asking questions in a particular section of the HackMD and searching and scrolling it was better to ask questions <em>always at the current bottom</em> of the document. Add new section headings as you start new sections.</li> <li>Some questions on HackMD were a bit off topic (but still very good questions) and some answers probably looked confusing so some questions can be postponed for after the video call and answered later.</li> <li>Participants should be asked to give feedback after each day at the end of the HackMD. One positive experience, one thing to improve, as usual.</li> </ul> <h3 id="chat">Chat</h3> <p>The chat window in the Zoom client is useful because it can provide multiple ways to get information for different learning styles. However, it is not threaded and you have to keep it from getting out of hand. Better for detailed questions to go into HackMD.</p> <ul> <li>It helped to direct most questions and answers to HackMD and only short administrative questions via chat. Participants should not be asked to watch both the chat and the document.</li> <li>The chat can be used for formative assessment questions where participants are asked to vote for correct answers in a multiple-choice question.</li> <li>Practical announcements/instructions should be provided both written and spoken, to reduce chance they are missed.</li> <li>The recommended signals (raise hand, \hand, red/yellow "sticky" notes) should not only be communicated at the beginning but also written somewhere and easily findable.</li> </ul> <h3 id="organization">Organization</h3> <p>Online, there are more things to think about, but also more ways to communicate (they go together). To compensate, have enough people and clear roles about who does what.</p> <ul> <li>We used a private chat as back-channel to coordinate among instructors and helpers. We kept the chat private to not reveal any personal information we may need to share but we noticed later that most/all of what we talked about could have been and <em>should have been</em> public (though not necessarily to students, but just for reasons of cognitive load). We never needed names and the only sensitive information were room connection details.</li> <li>On day 1 we failed/forgot to assign clear roles to ourselves; we were all a bit overwhelmed with the chat, plus the HackMD, plus answering questions on the microphone, plus some of us preparing and giving the lectures. Next time we will try:</li> <li>Roles during main lectures: <ul> <li>Host person in charge of overall schedule, timekeeping, breakout rooms and Zoom chat/participant reactions, clearing feedback, balancing answering questions, moderating, etc.</li> <li>Instructor and upcoming instructors (they can't at the same time prepare their material, follow questions, and do one of the other jobs). One of our instructors managed to do both: teach and manage breakout rooms, so it is possible, but easier if somebody else takes the charge.</li> <li>One person watching and formatting the HackMD (but more persons might be needed if there are many questions).</li> <li>Backup expert helpers for problems that require intensive debugging (at least needed at the beginning).</li> </ul> </li> <li>Roles during breakouts (this is more flexible): <ul> <li>Host in main room watching stuff.</li> <li>One helper per room leading.</li> <li>Lesson instructor hopping from room to room answering advanced questions and also probing the general mood.</li> </ul> </li> <li>Host makes all instructors and helpers co-hosts so that they can move between rooms.</li> </ul> <h3 id="screencasting">Screencasting</h3> <p>The requirements and recommendations are roughly like in-person.</p> <ul> <li>Showing history of commands via tmux or similar, coupled with <a rel="external" href="https://coderefinery.github.io/manuals/instructor-tech-setup/">displaying the last commands typed</a> really helps.</li> <li>Gray/dark background terminal looked better than light background terminal.</li> </ul> <h3 id="how-to-make-this-more-scalable">How to make this more scalable?</h3> <ul> <li>This time we did not plan to record or stream but we nevertheless asked the participants in a pre-workshop survey: 2/20 preferred not to have the workshop streamed, 1/20 didn't want it recorded.</li> <li>The workshop was great, but we should think more about how to reach more people. A small workshop where we can individually interact with everyone is amazing, but the promise of digital technology is that we can reach everyone in the world. How can we get the best of both? Can we also do something for everyone else who can't attend but might want to watch later? This is something to think about.</li> <li>How can we make this more scalable? This workshop was quite labor-intensive. You could probably do it with two instructors (instructor + HackMD watcher) + 1 zoom expert (host + general helper) + a lot of semi-experienced helpers (1:5 ratio) + a few debuggers to help with tech support the first hour (not overlapping with instructor or HackMD watcher).</li> <li>Imagine if we had main room recorded (or even streamed), but breakout rooms not. People can still ask and interact with privacy in the small rooms - and we take these comments/issues back to the main room. Other people following along later can do the exercises at their own pace, and hear the intros/conclusions in the main rooms, and it might feel a bit like a small class.</li> </ul> Work on instructor training material 2020-03-24T00:00:00+00:00 2020-03-24T00:00:00+00:00 Unknown https://coderefinery.org/open-house/instructor-training-material/ <p>CodeRefinery is organizing a one day online "open house" dedicated to work together on revising and improving <a rel="external" href="https://coderefinery.github.io/instructor-training/">our instructor training material</a>. <a rel="external" href="https://github.com/coderefinery/instructor-training/issues">Issues are filed here</a>, notes from the first workshop can be in the <a rel="external" href="https://hackmd.io/@doFoQYKqR623RI-YyXvmew/HJGgb_9VL">shared document</a>, and we are taking what each of us wants to work on. Input for the further improvement are also very welcome.</p> <p>Anyone who would like to contribute to the instructor training material, or learn how to contribute to any CodeRefinery lesson in general, is welcome!</p> <p>We will collect nodes in a <a rel="external" href="https://hackmd.io/@doFoQYKqR623RI-YyXvmew/HJGgb_9VL">shared document</a>. Please note that this document will be archived in our <a rel="external" href="https://github.com/coderefinery/open-house">Open House event repository</a>.</p> <p>We first meet online at 9:00 am (UTC+1) via video (connection link will be shared in our <a rel="external" href="https://hackmd.io/@doFoQYKqR623RI-YyXvmew/HJGgb_9VL">shared document</a> and then work on the instructor training material. During the day, we will coordinate the work through our <a rel="external" href="https://coderefinery.zulipchat.com">Zulip chat</a> with possibilities to further discuss via video if necessary.</p> <p>We conclude the day around 4:00 pm (UTC+1) by writing a short blog/summary in our <a rel="external" href="https://hackmd.io/@doFoQYKqR623RI-YyXvmew/HJGgb_9VL">shared document</a>.</p> Preparing for online teaching 2020-03-20T00:00:00+00:00 2020-03-20T00:00:00+00:00 Unknown https://coderefinery.org/open-house/online-teaching/ <p>We will meet on <a rel="external" href="https://kth-se.zoom.us/j/152239500">video</a> (9:00 am, UTC+1) and <a rel="external" href="https://coderefinery.zulipchat.com">chat</a> and discuss techniques, solutions, and tricks for online teaching and collect our notes in a <a rel="external" href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>.</p> <p>Anyone who would like to contribute or learn is most welcome!</p> <p>We will conclude the day around 4:00 pm (UTC+1) by writing a short blog/summary in our <a rel="external" href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>.</p> Collaborative work on the website 2020-02-11T00:00:00+00:00 2020-02-11T00:00:00+00:00 Unknown https://coderefinery.org/open-house/website/ <h3 id="welcome-to-the-second-coderefinery-open-house">Welcome to the second CodeRefinery Open House!</h3> <p>Following up on our successful first CodeRefinery Open House, we will have our second online Open house!</p> <p>The idea behind this event is to work together on revising and improving <a rel="external" href="https://coderefinery.org">coderefinery.org</a>. <a rel="external" href="https://github.com/coderefinery/coderefinery.org/issues">Issues are filed</a> and we are taking what each of us wants to work on. Input for the further improvement are very welcome!</p> <p>Anyone who would like to contribute, or learn how to contribute to <a rel="external" href="https://coderefinery.org">coderefinery.org</a> is very welcome to join.</p> <p>We will collect nodes in a <a rel="external" href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>. Please note that this document will be archived in our <a rel="external" href="https://github.com/coderefinery/open-house">Open House event repository</a>.</p> <p>We first meet online at 9:00 am (UTC+1) via video (connection link will be shared in our <a rel="external" href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>) and then work on CodeRefinery training material. During the day, we will coordinate the work through our <a rel="external" href="https://coderefinery.zulipchat.com">Zulip chat</a> with possibilities to further discuss via video if necessary.</p> <p>We conclude the day around 4:00pm (UTC+1) by writing a short blog/summary in our <a rel="external" href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>.</p> Collaborative work on the training material 2019-12-13T00:00:00+00:00 2019-12-13T00:00:00+00:00 Unknown https://coderefinery.org/open-house/training-material/ <h3 id="welcome-to-the-first-coderefinery-open-house">Welcome to the first CodeRefinery Open House!</h3> <p>The idea behind this event is to bring together people who are interesting in contributing to the <a rel="external" href="https://coderefinery.org/lessons/">CodeRefinery training material</a>.</p> <p>Anyone who would like to contribute, learn how to contribute to the CodeRefinery training material is very welcome to join.</p> <p>We will collect nodes in a <a rel="external" href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>. Please note that this document will be archived in our <a rel="external" href="https://github.com/coderefinery/open-house">Open House event repository</a>.</p> <p>We first meet online at 9:00 am (UTC+1) via video (connection link will be shared in our <a rel="external" href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>) and then work on CodeRefinery training material. During the day, we will coordinate the work through our <a rel="external" href="https://coderefinery.zulipchat.com">Zulip chat</a> with possibilities to further discuss via video if necessary.</p> <p>We conclude the day around 4:00pm (UTC+1) by writing a short blog/summary in our <a rel="external" href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>.</p>