CodeRefineryTeaching essential tools so that researchers can make full use of software, computing, and data.Zola2026-01-22T00:00:00+00:00https://coderefinery.org/atom.xmlUpcoming and recent workshops and events2026-01-22T00:00:00+00:002026-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 & 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 & 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 & 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 & 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 collection2025-10-08T00:00:00+00:002025-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' & '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 & 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 masterclass2025-01-31T00:00:00+00:002025-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'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 & 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 years2024-09-19T00:00:00+00:002024-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 & 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 & 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=&l=list&p=1&s=10&sort=newest">https://zenodo.org/communities/coderefinery/records?q=&l=list&p=1&s=10&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 & 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, & 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., & 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 workshop2024-09-09T00:00:00+00:002024-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 & 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 & 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 workshop2024-08-19T00:00:00+00:002024-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 & 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 survey2024-08-10T00:00:00+00:002024-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 ==> create branch ==> deploy fix ==> push ==> 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 & 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 Lessons2024-07-30T00:00:00+00:002024-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ø 20242024-06-17T00:00:00+00:002024-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:002024-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: Community2024-04-20T00:00:00+00:002024-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&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: Onboarding2024-04-20T00:00:00+00:002024-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 -> We have more community calls and better advertising of them planned in the future</li>
<li>One manual page which gives overview -> 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 -> 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 beyond2024-04-19T00:00:00+00:002024-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:002024-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 Lesson2024-04-19T00:00:00+00:002024-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 Strategy2024-04-19T00:00:00+00:002024-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 & 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 Cons2024-04-18T00:00:00+00:002024-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&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&A Sessions</h2>
<p>Utilize pre-recorded lectures for content delivery, supplemented by regular, shorter live Q&A sessions for interactive engagement and query resolution.</p>
<h2 id="preparation-for-live-sessions">Preparation for Live Sessions</h2>
<p>Efficiency in Q&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 update2024-04-04T00:00:00+00:002024-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 production2024-04-04T00:00:00+00:002024-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:002024-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:002024-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 workshop2024-03-15T00:00:00+00:002024-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&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 instructions2024-02-29T00:00:00+00:002024-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 format2024-02-27T00:00:00+00:002024-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 -> 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 -> 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 future2024-01-24T00:00:00+00:002024-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 & 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 & 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 -> 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 & 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 & 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 & 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 & 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 & 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 workshop2023-12-05T00:00:00+00:002023-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&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 workshop2023-06-25T00:00:00+00:002023-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&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 workshop2023-04-12T00:00:00+00:002023-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 20232023-02-14T00:00:00+00:002023-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 courses2022-11-28T00:00:00+00:002022-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 courses2022-11-14T00:00:00+00:002022-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 workshop2022-11-08T00:00:00+00:002022-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 -> 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 account2022-11-08T00:00:00+00:002022-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 styles2022-11-08T00:00:00+00:002022-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 teaching2022-11-07T00:00:00+00:002022-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 up2022-10-31T00:00:00+00:002022-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 teaching2022-10-24T00:00:00+00:002022-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&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 collaborators2022-10-21T00:00:00+00:002022-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 teaching2022-10-17T00:00:00+00:002022-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 workshops2022-05-18T00:00:00+00:002022-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 process2022-05-04T00:00:00+00:002022-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&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" -> another form</li>
<li>"in Aalto" -> another form</li>
<li>none of the above -> 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 -> 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 workshop2021-11-25T00:00:00+00:002021-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&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&A will more or less perfectly solve the problem in that case.</li>
</ul>
Towards citable lessons2021-11-21T00:00:00+00:002021-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;"> "creators"</span><span>: [</span></span>
<span class="giallo-l"><span> { </span></span>
<span class="giallo-l"><span style="color: #E45649;"> "orcid"</span><span>:</span><span style="color: #50A14F;"> "0000-0002-1825-0097"</span><span>,</span></span>
<span class="giallo-l"><span style="color: #E45649;"> "affiliation"</span><span>:</span><span style="color: #50A14F;"> "Feline research institute"</span><span>,</span></span>
<span class="giallo-l"><span style="color: #E45649;"> "name"</span><span>:</span><span style="color: #50A14F;"> "Field, Gar"</span></span>
<span class="giallo-l"><span> },</span></span>
<span class="giallo-l"><span> { </span></span>
<span class="giallo-l"><span style="color: #E45649;"> "orcid"</span><span>:</span><span style="color: #50A14F;"> "0000-0002-1825-0097"</span><span>,</span></span>
<span class="giallo-l"><span style="color: #E45649;"> "affiliation"</span><span>:</span><span style="color: #50A14F;"> "Feline research institute"</span><span>,</span></span>
<span class="giallo-l"><span style="color: #E45649;"> "name"</span><span>:</span><span style="color: #50A14F;"> "Cat, Felix"</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 project2021-11-20T00:00:00+00:002021-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&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&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 started2021-09-01T00:00:00+00:002021-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 countries2020-11-13T00:00:00+00:002020-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 contributors2020-10-02T00:00:00+00:002020-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 requests2020-09-29T00:00:00+00:002020-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 posts2020-08-24T00:00:00+00:002020-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 workshop2020-07-31T00:00:00+00:002020-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. & 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: NordicHPC2020-04-27T00:00:00+00:002020-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 conference2020-04-24T00:00:00+00:002020-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 online2020-04-24T00:00:00+00:002020-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 merge2020-04-24T00:00:00+00:002020-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 Hour2020-04-24T00:00:00+00:002020-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 posts2020-04-24T00:00:00+00:002020-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 workshop2020-04-14T00:00:00+00:002020-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 material2020-03-24T00:00:00+00:002020-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 teaching2020-03-20T00:00:00+00:002020-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 website2020-02-11T00:00:00+00:002020-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 material2019-12-13T00:00:00+00:002019-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>