diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/404.html b/404.html new file mode 100644 index 000000000..38a7e5cae --- /dev/null +++ b/404.html @@ -0,0 +1,915 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+

404, page not found (or moved to coderefinery.github.io)

+
+ +

+ Try going to NEWURL + instead. If this does not work, clear your browser cache. +

+ + + + +

+ We had to change URLs for the lessons. If you are looking for + one of the CodeRefinery lessons, try changing coderefinery.org to + coderefinery.github.io in the URL to find the page you want. +

+ + + +

+ This is not the page you are looking for ... return back to the + index page? +

+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/CNAME b/CNAME new file mode 100644 index 000000000..241b540e5 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +coderefinery.org \ No newline at end of file diff --git a/about/code-of-conduct/index.html b/about/code-of-conduct/index.html new file mode 100644 index 000000000..c876a442f --- /dev/null +++ b/about/code-of-conduct/index.html @@ -0,0 +1,952 @@ + + + + Code of conduct - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Code of conduct + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Code of conduct

+ + + +

Introduction and source of inspiration

+

In any events or community space organized by CodeRefinery, we are committed to +creating a friendly and respectful place for learning, teaching and +contributing. All participants in our events and communications are expected to +show respect and courtesy to others.

+

We follow the Code of Conduct by the +Carpentries +as primary principles. Here is a summary of CodeRefinery's Code of Conduct +adapted from the Carpentries Code of Conduct:

+

Expected behaviors

+

We are dedicated to providing a welcoming and supportive environment for all +people, regardless of background or identity. By participating in any events or +community space organized by CodeRefinery, participants accept to abide by +CodeRefinery’s Code of Conduct and accept the procedures by which any Code of +Conduct incidents are resolved. Any form of behaviour to exclude, intimidate, +or cause discomfort is a violation of the Code of Conduct.

+

In order to foster a positive and professional learning environment we encourage the following kinds of behaviours in all platforms and events:

+ +

Unexpected behaviors

+

On the other hand, unexpected behaviors include but not limited to:

+ +

Consequence of violation of Code of Conduct

+

Participants who are asked to stop any inappropriate behaviour are expected to +comply immediately. This applies to any events and community space organized by +CodeRefinery, either online or in-person. If a participant engages in behaviour +that violates this code of conduct, the organiser of the event or CodeRefinery +core team member(s) may warn the offender, ask them to leave the event or +platform (without refund, if applicable), or set up an incident-specific +CodeRefinery Code of Conduct Committee to investigate the Code of Conduct +violation and impose appropriate sanctions.

+

Incidence report

+

If you feel that the Code of Conduct was violated in an event organized by +CodeRefinery, no matter if it is online or in physical space, please notify the +coordinator/host of the event (or Code of Conduct facilitator if there is a +dedicated person). If you feel uncomfortable directly notifying someone in the +workshop, use the form in the next paragraph.

+

If the incident happened in a community space organized by CodeRefinery, please +complete this form to report the +incident.

+

Designed CodeRefinery team members have access to reported incidents. We do not +yet have a separate Code of Conduct committee, but we may set up an +incident-specific committee, if reported incidence is deemed to require it.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/about/contact/index.html b/about/contact/index.html new file mode 100644 index 000000000..d58009c4e --- /dev/null +++ b/about/contact/index.html @@ -0,0 +1,911 @@ + + + + Contact CodeRefinery - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Contact CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Contact CodeRefinery

+ + + +

CodeRefinery is a small organization so far, and no matter who you +talk to, you are close to the core.

+

Chat: Zulip

+

We use Zulip to discuss within our team and community. +We discuss in the open and you can join us on +https://coderefinery.zulipchat.com: you can listen in, follow +certain threads, participate, and influence. Learn how CodeRefinery +uses it.

+

Email: Support line

+

To ask questions about workshops or services or to report issues: +support@coderefinery.org

+

Announcements: Newsletter

+

You can subscribe to the CodeRefinery newsletter +here.

+

Announcements and social media: Mastodon and Twitter

+

If you like what we do, please reach out: +Mastodon at +@coderefinery@fosstodon.org and +Twitter at @coderefine

+

Calendars

+

See calendars.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/about/contributors/index.html b/about/contributors/index.html new file mode 100644 index 000000000..723d1b462 --- /dev/null +++ b/about/contributors/index.html @@ -0,0 +1,1867 @@ + + + + CodeRefinery contributors - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery contributors + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + +

CodeRefinery contributors

+ + + +

Below we list (hopefully) all speakers, instructors, hosts, helpers, and +team leaders of past CodeRefinery workshops, as well as CodeRefinery events +and shared events. Without these contributions, these events would not have been possible. +Thank you so much for your contributions!

+

You can join us too.

+

People who are or were part of the project

+

Here listing all persons who were part of the project as official staff or have +contributed a significant amount of volunteer work.

+ +

On this page +our instructors share their teaching philosophies in short recorded videos.

+

Instructors, helpers, and team leads

+ + + + +
+
+

Instructors/speakers

+
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • Anne Fouilloux
  • + +
  • Annika Rockenberger
  • + +
  • Björn Claremar
  • + +
  • Bjørn Lindi
  • + +
  • Dhanya Pushpadas
  • + +
  • Diana Iusan
  • + +
  • Enrico Glerean
  • + +
  • Hande Celikkanat
  • + +
  • Jarno Rantaharju
  • + +
  • Jens Wehner
  • + +
  • Johan Hellsvik
  • + +
  • Johan Hidding
  • + +
  • João M. da Silva
  • + +
  • Juho Lehtonen
  • + +
  • Jyry Suvilehto
  • + +
  • Luca Ferranti
  • + +
  • Marijn van Vliet
  • + +
  • Mark Abraham
  • + +
  • Matias Jääskeläinen
  • + +
  • Matteo Tomasini
  • + +
  • Matus Kalas
  • + +
  • Max Roald Eckardt
  • + +
  • Max Schön
  • + +
  • N. D.
  • + +
  • Nico Reissmann
  • + +
  • Nils Charles Prieur
  • + +
  • Pavlin Mitev
  • + +
  • Pinja Koskinen
  • + +
  • Radovan Bast
  • + +
  • Raphaela Heil
  • + +
  • Richard Darst
  • + +
  • Sabry Razick
  • + +
  • Samantha Wittke
  • + +
  • Seija Sirkiä
  • + +
  • Simo Tuomisto
  • + +
  • Sri Harsha Vathsavayi
  • + +
  • Stefan Negru
  • + +
  • Teemu Ruokolainen
  • + +
  • Thomas Pfau
  • + +
  • Thor Wikfeldt
  • + +
  • Will Usher
  • + +
+
+ +
+

Hosts, helpers, and team leaders

+
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • Abel Carreras
  • + +
  • Agneta Ghose
  • + +
  • Aili Sarre
  • + +
  • Alberto Lazzarotto
  • + +
  • Aleksandra Wilczynska
  • + +
  • Amir Ebrahimi Fard
  • + +
  • Ankita Priya
  • + +
  • Annajiat Alim Rasel
  • + +
  • Anne Fouilloux
  • + +
  • Anni Järvenpää
  • + +
  • Annika Rockenberger
  • + +
  • Anthony Scemama
  • + +
  • Ashwin Vishnu
  • + +
  • Athanasios Protopapas
  • + +
  • Björn Claremar
  • + +
  • Bjørn Lindi
  • + +
  • Carolina Robustini
  • + +
  • Cristian Cira
  • + +
  • Dan Mønster
  • + +
  • Daniel Holmberg
  • + +
  • Devaraju Narayanappa
  • + +
  • Dhanya Pushpadas
  • + +
  • Diana Iusan
  • + +
  • Dmytro Fishman
  • + +
  • Dmytro Kryvokhyzha
  • + +
  • Ebrahim Afyounian
  • + +
  • Emilia Lipponen
  • + +
  • Emiliano Gelati
  • + +
  • Emiliano Molinaro
  • + +
  • Enrico Glerean
  • + +
  • Erika Yashiro
  • + +
  • Evelien Van Dijk
  • + +
  • Evgeny Posenitskiy
  • + +
  • Fabricio Oliveira
  • + +
  • Flavio Calvo
  • + +
  • Francesco Tabaro
  • + +
  • Giordano Lipari
  • + +
  • Hadrien Gourlé
  • + +
  • Harshit Agrawal
  • + +
  • Hasti Narimanzadeh
  • + +
  • Heather Andrews
  • + +
  • Heikki Lehväslaiho
  • + +
  • Hui Tang
  • + +
  • Ingrid Strandberg
  • + +
  • Inigo Aldazabal
  • + +
  • Ivan Kuzmin
  • + +
  • Jakob Sauer Jørgensen
  • + +
  • Janne Blomqvist
  • + +
  • Jannetta Steyn
  • + +
  • Jarno Rantaharju
  • + +
  • Jean Iaquinta
  • + +
  • Jens Wehner
  • + +
  • Joakim Löfgren
  • + +
  • Johan Hellsvik
  • + +
  • Johan Hidding
  • + +
  • Jose Carlos Llanusa
  • + +
  • João M. da Silva
  • + +
  • Juan Sebastian Diaz Boada
  • + +
  • Juho Lehtonen
  • + +
  • Kaveh Karimi
  • + +
  • Kerstin Lenk
  • + +
  • Lauri Neuvonen
  • + +
  • Leif Wigge
  • + +
  • Lesetja Lekoloane
  • + +
  • Lex Nederbragt
  • + +
  • Lora Armstrong
  • + +
  • Luc Girod
  • + +
  • Luca Ferranti
  • + +
  • Lucy Whalley
  • + +
  • Luis Amezcua
  • + +
  • Manana Koberidze
  • + +
  • Manuel Garcia Alvarez
  • + +
  • Marco Foscato
  • + +
  • Marijn Van Vliet
  • + +
  • Massimo Pizzol
  • + +
  • Matthew Morris
  • + +
  • Matúš Kalaš
  • + +
  • Maurits Kok
  • + +
  • Max Roald Eckardt
  • + +
  • Meron Vermaas
  • + +
  • Mika Jalava
  • + +
  • Mikael Djurfeldt
  • + +
  • Mikael Öhman
  • + +
  • Mikhail Papkov
  • + +
  • Mikko Heikkilä
  • + +
  • Naoe Tatara
  • + +
  • Narayan Puthanmadam Subramaniyam
  • + +
  • Nico Reissmann
  • + +
  • Niharika Gauraha
  • + +
  • Niket Agrawal
  • + +
  • Octavian Andrei
  • + +
  • Patric Holmvall
  • + +
  • Paula Martinez Lavanchy
  • + +
  • Pavlin Mitev
  • + +
  • Pedro Ojeda
  • + +
  • Pedro Ojeda May
  • + +
  • Pengfei Xu
  • + +
  • Peter Kjellström
  • + +
  • Philip Gjedde
  • + +
  • Pradeep Eranti
  • + +
  • Preethy Nair
  • + +
  • Qiang Li
  • + +
  • Radek Lonka
  • + +
  • Radovan Bast
  • + +
  • Raphaela Heil
  • + +
  • Raul Ortiz Merino
  • + +
  • Richard Darst
  • + +
  • Roberto Di Remigio
  • + +
  • Rohit Goswami
  • + +
  • Romain Caneill
  • + +
  • Ruslan Zhuravchak
  • + +
  • Sabry Razick
  • + +
  • Samantha Wittke
  • + +
  • Sebastian Schmidt
  • + +
  • Shashank Shekhar Harivyasi
  • + +
  • Shreyas Deshpande
  • + +
  • Simoneta Caño de Las Heras
  • + +
  • Sri Harsha Vathsavayi
  • + +
  • Stephan Smuts
  • + +
  • Stephanie van de Sandt
  • + +
  • Stig Rune Jensen
  • + +
  • Sunniva Indrehus
  • + +
  • Susan Branchett
  • + +
  • Ted Hsuan Yun Chen
  • + +
  • Thomas Arildsen
  • + +
  • Thor Wikfeldt
  • + +
  • Tobias Lindstrøm Jensen
  • + +
  • Toby Hodges
  • + +
  • Tomasz Kopec
  • + +
  • Tomi Häkkinen
  • + +
  • Tor Kjellsson Lindblom
  • + +
  • Tuomas Rossi
  • + +
  • Vang Que Le
  • + +
  • Vesa Vahermaa
  • + +
  • Will Usher
  • + +
  • Ygor Morais Jaques
  • + +
  • Zubair Maalick
  • + +
+
+
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/about/funding/asc.png b/about/funding/asc.png new file mode 100644 index 000000000..45e833fcf Binary files /dev/null and b/about/funding/asc.png differ diff --git a/about/funding/chc.png b/about/funding/chc.png new file mode 100644 index 000000000..9f263eeb7 Binary files /dev/null and b/about/funding/chc.png differ diff --git a/about/funding/csc.png b/about/funding/csc.png new file mode 100644 index 000000000..3268bd814 Binary files /dev/null and b/about/funding/csc.png differ diff --git a/about/funding/deic.png b/about/funding/deic.png new file mode 100644 index 000000000..a591abf66 Binary files /dev/null and b/about/funding/deic.png differ diff --git a/about/funding/enccs.png b/about/funding/enccs.png new file mode 100644 index 000000000..88f0984b3 Binary files /dev/null and b/about/funding/enccs.png differ diff --git a/about/funding/index.html b/about/funding/index.html new file mode 100644 index 000000000..ddddd4921 --- /dev/null +++ b/about/funding/index.html @@ -0,0 +1,891 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + +
+
    + +
+
+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/about/funding/naiss.jpg b/about/funding/naiss.jpg new file mode 100644 index 000000000..1f7805f24 Binary files /dev/null and b/about/funding/naiss.jpg differ diff --git a/about/funding/neic.png b/about/funding/neic.png new file mode 100644 index 000000000..a68367fcc Binary files /dev/null and b/about/funding/neic.png differ diff --git a/about/funding/nris.svg b/about/funding/nris.svg new file mode 100644 index 000000000..9a3125277 --- /dev/null +++ b/about/funding/nris.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + diff --git a/about/funding/sigma2.png b/about/funding/sigma2.png new file mode 100644 index 000000000..02eee75c9 Binary files /dev/null and b/about/funding/sigma2.png differ diff --git a/about/history/index.html b/about/history/index.html new file mode 100644 index 000000000..ce35954d8 --- /dev/null +++ b/about/history/index.html @@ -0,0 +1,924 @@ + + + + History of the project - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - History of the project + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

History of the project

+ + + +

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 the Nordic +e-Infrastructure Collaboration (NeIC), a +state-funded Nordic public funding organization, to bring this +project to a Nordic level, both to have more impact, but also to +connect instructors across Nordic borders. The first grant was +2016--2018, with NeIC, CSC (Finland), SNIC (Sweden), DeIC +(Denmark), and UNINETT Sigma2 (Norway) as partners.

+

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.

+

In 2018 the project has received follow-up funding from NeIC for 3 more years, +2018--2021. The partners were the same as the first phase, but now +including the University of Tartu (Estonia). Aalto University +(Finland) formally joined the last year after being a long-term +voluntary participant.

+

In 2020, COVID-19 hit, and everyone went online. We didn't take an +opportunity to do the same thing, but online, while waiting for things +to become normal. Instead, we took advantage of being equally close +to each other (online) as to our previous in-person teams (now online) +to work together much more closely than we used to. We developed an +extensive and unique CodeRefinery teaching +style which stayed with us even +post-Covid.

+

In 2021 the project successfully applied to the NeIC open call +for another 3 years, 2022--2025. The focus of this phase is to +produce a sustainable organization that can exist without NeIC's +funding. The partners at the beginning of the phase were NeIC, Aalto +University, Aarhus University CHCAA (Denmark), Aalborg University +CLAAUDIA (Denmark), CSC (Finland), DeiC (Denmark), ENCCS (Sweden), NAISS (formerly SNIC; Sweden), +Sigma2 (Norway), and the University of Oslo USIT (Norway).

+

CodeRefinery now welcomes other partners to join.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/about/impact/index.html b/about/impact/index.html new file mode 100644 index 000000000..8c42e27d1 --- /dev/null +++ b/about/impact/index.html @@ -0,0 +1,914 @@ + + + + Impact of online CodeRefinery workshops - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Impact of online CodeRefinery workshops + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Impact of online CodeRefinery workshops

+ + + +

Over 1700 people have attended a CodeRefinery workshop since the project started! Since the pandemic started, we shifted the gear towards online workshops. In total about 900 participated in online CodeRefinery workshops.

+

Along the change in tools and practices, we changed questions in pre-/post-workshop surveys. To provide the most consistent and recent picture of our participants and impact, the below is based on data provided by pre-/post-workshop surveys answered in relevance to only online workshops. (Note: pre-/post-workshops are opt-in.)

+

Participants' background

+

Results of pre-workshop surveys (answers given by 301 persons) show that our workshop participants range from undergraduate students to full +professors, and come from a variety of academic disciplines.

+

The chart below shows the result of a question asking about their job title, position or occupation.

+ +

alt text

+

The chart below shows the result of a question asking about their academic discipline.
+alt text

+

What is our impact?

+

The long-term impact of CodeRefinery workshops is measured through a +post-workshop survey which is sent out to all former participants 3 months to 1 year after attending a workshop. To date (12th Sep 2021) we received 80 voluntary responses to +a post-workshop survey by participants of an online workshop.

+

The heatmap below shows how former participants +use various software development tools after attending a workshop, and +how their code and collaboration with colleagues has changed.

+

Please note that a part of responses answered the specific tool to different types of impact, for example, there are cases where both "started using" and "using better" was chosen for "Version control".

+

alt text

+

The chart below shows fraction of former participants who feel their code and collaboration with colleagues has been improved. +alt text

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/about/index.html b/about/index.html new file mode 100644 index 000000000..12351f157 --- /dev/null +++ b/about/index.html @@ -0,0 +1,980 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

About the project

+ + +
+ +
+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/about/newsletter/index.html b/about/newsletter/index.html new file mode 100644 index 000000000..0c6db0b04 --- /dev/null +++ b/about/newsletter/index.html @@ -0,0 +1,898 @@ + + + + Newsletter - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Newsletter + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Newsletter

+ + + +

The CodeRefinery newsletter is sent out every few months. +Subscribers will be informed about upcoming workshops, hackathons and +other events, as well as other interesting developments like new training +material, community building activities and general project +updates.

+

Here you can browse the archive of all previous +newsletters. To sign up, please +visit tinyletter.com/coderefinery.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/about/partners/index.html b/about/partners/index.html new file mode 100644 index 000000000..82e370502 --- /dev/null +++ b/about/partners/index.html @@ -0,0 +1,1050 @@ + + + + Partners and sponsors - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Partners and sponsors + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Partners and sponsors

+ + + +

Funding

+NeIC logo +

This project is funded by the Nordic e-Infrastructure Collaboration (NeIC). The +project is now in its third phase (2022--2025). NeIC directly funds a 50% +position for project management and a 40% position for workshop and training +coordination. NeIC also provides funding for travel, meetings, and conferences.

+

Organizations providing in-kind support

+

A number of organizations encourage their staff to teach and co-organize +CodeRefinery workshops as part of their work time.

+ +
+
+ +
+
+
+ +
+ + + +
+
+
+ +
+ +

NRIS/Sigma2

+
+

Norway

+
+
+
+
+

If you would like to contribute to shaping the future of the project, please +encourage your organization to join as well. While it costs them your work time +it has also proven to increase cross-organisation and international +collaborations, not only for CodeRefinery workshops.

+

Partners providing local support

+

Our workshops are free to all, because why not. However, teaching doesn't end +after the class. Partners both help organize courses and provide support for +learners during and after the courses. See information for +organizations on how your organization can join.

+

Aalto University (Aalto Scientific Computing, ASC)

+logo: Aalto Scientific Computing +

ASC has been involved in CodeRefinery since 2017.

+ +

TU Delft

+

(we need to write more here)

+

VU Amsterdam

+

(we need to write more here)

+

We are supported by Zulip

+Zulip logo +

Zulip is an open-source modern team chat app designed to keep both live and +asynchronous conversations organized. We very much appreciate their support by +hosting our chat for free.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/about/presentations/index.html b/about/presentations/index.html new file mode 100644 index 000000000..132f502bc --- /dev/null +++ b/about/presentations/index.html @@ -0,0 +1,918 @@ + + + + Presentations - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Presentations + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Presentations

+ + + + + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/about/project/index.html b/about/project/index.html new file mode 100644 index 000000000..de50ddd5f --- /dev/null +++ b/about/project/index.html @@ -0,0 +1,1065 @@ + + + + The CodeRefinery project - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - The CodeRefinery project + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

The CodeRefinery project

+ + + + + +

Objectives

+

CodeRefinery improves science by providing training and infrastructure +for researchers, who often need to use computational tools but have +little training in tools beyond basic programming. Our support allows +research to be more reproducible, open, and efficient and thus +promotes the goals of open science and FAIR data management - in +addition to making the lives of countless researchers better, since +they learn the tools needed to do their work with less trouble.

+

We are most known for our practical-level workshop +about base-level practices of software development tools for +researchers. We are also known for our +unique and engaging online teaching +style, and are building a community +around this type of shared teaching.

+

Through our spin-off project Nordic-RSE, we +serve as a hub for research software engineers in the Nordic +countries, namely in Iceland, Denmark, Norway, Sweden, Finland, and +Estonia. Research Software Engineers are basically the professional +level of what we teach, and the two-way collaboration is very +productive.

+

We are a community project seeking volunteers to sustain what we have +accomplished in the first five years.

+

Key facts

+ +

CodeRefinery and The Carpentries

+

We are basically intermediate-level +Carpentries lessons and would like to work +more closely with The Carpentries. Our in-person workshops are +basically "Carpentries-style", though our online workshops have +adopted our own unique style. Our +overall philosophy is similar. Our target audience is learners who +already have some experience with programming and would like to +develop software in a more efficient and sustainable way. We believe +that for many learners we can offer a good second step after their +Carpentries workshop.

+

We would like to work more closely with The Carpentries and offer our +lessons as intermediate-level carpentries. If you are reading this, +please get in touch.

+

Core Activities

+ +

Infrastructure services

+

Our code repository hosting service is open and free for all +researchers based in Nordic universities and research institutes. Please +contact us if you would like to use these services.

+

Training opportunities

+

We offer training opportunities to researchers from Nordic research groups and projects +to learn basic-to-advanced research computing skills and become confident in using +state-of-the-art tools and practices from modern collaborative software +engineering.

+

CodeRefinery Workshops

+

The key objective of CodeRefinery workshop is to grow researchers' software +best practices skills to facilitate open and reproducible research.

+ +

Instructor training workshops

+

One purpose of our Instructor training workshops is to train +CodeRefinery instructors, but being (or becoming) a CodeRefinery +instructor is not required. With the workshops we also aim at building +partnerships with research software engineers +and researchers who are willing to lead skills' transfer within their +local communities in the Nordics.

+

Instructor training workshops take 2 days and cover this lesson +material.

+ +

Other types of events

+

We have organized hackathons, get-together events and shorter workshops +customized for individual research groups. Regularly we also host +online Open House events where CodeRefinery instructors together with +a wider community of interested people work in sprints on topics +ranging from lesson development to website updates.

+

We're always interested in new collaborations, so if you would like to +co-organize an event with us or suggest a new type of event, don't +hesitate to get in touch!

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/about/reports/index.html b/about/reports/index.html new file mode 100644 index 000000000..a010a59ac --- /dev/null +++ b/about/reports/index.html @@ -0,0 +1,938 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Articles and reports

+ + +
+
    + +
+
+ + +

Articles and blog posts about CodeRefinery

+ +

Project proposals, reports, and documents

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/about/reports/open-call-2021-evaluation.pdf b/about/reports/open-call-2021-evaluation.pdf new file mode 100644 index 000000000..5c1a76091 Binary files /dev/null and b/about/reports/open-call-2021-evaluation.pdf differ diff --git a/about/reports/open-call-2021-proposal.pdf b/about/reports/open-call-2021-proposal.pdf new file mode 100644 index 000000000..edb74ccd9 Binary files /dev/null and b/about/reports/open-call-2021-proposal.pdf differ diff --git a/about/reports/phase-1-collaboration-agreement.pdf b/about/reports/phase-1-collaboration-agreement.pdf new file mode 100644 index 000000000..ff9d7a8df Binary files /dev/null and b/about/reports/phase-1-collaboration-agreement.pdf differ diff --git a/about/reports/phase-1-project-directive.pdf b/about/reports/phase-1-project-directive.pdf new file mode 100644 index 000000000..b851c0aa9 Binary files /dev/null and b/about/reports/phase-1-project-directive.pdf differ diff --git a/about/reports/phase-1-project-plan-v1.0.pdf b/about/reports/phase-1-project-plan-v1.0.pdf new file mode 100644 index 000000000..f0f88d356 Binary files /dev/null and b/about/reports/phase-1-project-plan-v1.0.pdf differ diff --git a/about/reports/phase-1-report.pdf b/about/reports/phase-1-report.pdf new file mode 100644 index 000000000..f4bbf29cb Binary files /dev/null and b/about/reports/phase-1-report.pdf differ diff --git a/about/reports/phase-2-collaboration-agreement.pdf b/about/reports/phase-2-collaboration-agreement.pdf new file mode 100644 index 000000000..f5c2de6d2 Binary files /dev/null and b/about/reports/phase-2-collaboration-agreement.pdf differ diff --git a/about/reports/phase-2-mid-term-report.pdf b/about/reports/phase-2-mid-term-report.pdf new file mode 100644 index 000000000..04c95bed4 Binary files /dev/null and b/about/reports/phase-2-mid-term-report.pdf differ diff --git a/about/reports/phase-2-project-directive.pdf b/about/reports/phase-2-project-directive.pdf new file mode 100644 index 000000000..1ab63feb8 Binary files /dev/null and b/about/reports/phase-2-project-directive.pdf differ diff --git a/about/reports/phase-2-project-plan.pdf b/about/reports/phase-2-project-plan.pdf new file mode 100644 index 000000000..343083988 Binary files /dev/null and b/about/reports/phase-2-project-plan.pdf differ diff --git a/about/reports/phase-2-report.pdf b/about/reports/phase-2-report.pdf new file mode 100644 index 000000000..6f4a362a0 Binary files /dev/null and b/about/reports/phase-2-report.pdf differ diff --git a/about/reports/phase-3-collaboration-agreement.pdf b/about/reports/phase-3-collaboration-agreement.pdf new file mode 100644 index 000000000..60860df7c Binary files /dev/null and b/about/reports/phase-3-collaboration-agreement.pdf differ diff --git a/about/reports/phase-3-project-plan.pdf b/about/reports/phase-3-project-plan.pdf new file mode 100644 index 000000000..2eb20da9d Binary files /dev/null and b/about/reports/phase-3-project-plan.pdf differ diff --git a/about/statistics/OnlineParticipants.png b/about/statistics/OnlineParticipants.png new file mode 100644 index 000000000..3fe912fdb Binary files /dev/null and b/about/statistics/OnlineParticipants.png differ diff --git a/about/statistics/OnlineParticipants_Mar23.png b/about/statistics/OnlineParticipants_Mar23.png new file mode 100644 index 000000000..5a738f8b2 Binary files /dev/null and b/about/statistics/OnlineParticipants_Mar23.png differ diff --git a/about/statistics/Registration_FindOut_Countries.png b/about/statistics/Registration_FindOut_Countries.png new file mode 100644 index 000000000..5a3e376d0 Binary files /dev/null and b/about/statistics/Registration_FindOut_Countries.png differ diff --git a/about/statistics/Registration_FindOut_Countries_Mar23.png b/about/statistics/Registration_FindOut_Countries_Mar23.png new file mode 100644 index 000000000..843a3cf80 Binary files /dev/null and b/about/statistics/Registration_FindOut_Countries_Mar23.png differ diff --git a/about/statistics/index.html b/about/statistics/index.html new file mode 100644 index 000000000..cba1e9f1f --- /dev/null +++ b/about/statistics/index.html @@ -0,0 +1,5539 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + +

Registration statistics

+ + +
+
    + +
+
+ + +

This is mainly to simplify reporting to funding organizations. But maybe it is +also interesting otherwise.

+
+
+ Twitch and Zoom participants per day +
+
+ Heatmap of how/where participants learned about the workshop by country of affiliation +
+
+ + + + +

Standard CodeRefinery workshops

+ + +

+ Number of participants/registrants by country of affiliation. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EventTimeSwedenNorwayFinlandDenmarkEstoniaIcelandNetherlandsOtherTotalTwitch viewersZoom
+ + Full online workshop (6 half-days) + + + + + Sep 19 + - + Sep 28, 2023 + + + + 31 + + + + + + 103 + + + + + + 100 + + + + + + + + + + + + 19 + + + + + + + + 107 + + + + + + 360 + + + + + 145—54 + + + +
+ + Full online workshop (6 half-days) + + + + + Mar 21 + - + Mar 30, 2023 + + + + 87 + + + + + + 43 + + + + + + 178 + + + + + + 19 + + + + + + + + + + 58 + + + + + + + + 108 + + + + + + 493 + + + + + 216—112 + + + +
+ + Uppsala + + + + + May 9 + - + May 11, 2023 + + + + 15 + + + + + + + + + + + + + + + + + + + + + + + + 15 + + + + + + +
+ + Full online workshop (6 half-days) + + + + + Sep 20 + - + Sep 29, 2022 + + + + 52 + + + + + + 50 + + + + + + 76 + + + + + + 7 + + + + + + + + + + 34 + + + + + + + + 43 + + + + + + 262 + + + + + 97—157 + + + + 25—59 + +
+ + Full online workshop (6 half-days) + + + + + Mar 22 + - + Mar 31, 2022 + + + + 46 + + + + + + 87 + + + + + + 54 + + + + + + 14 + + + + + + + + + + 55 + + + + + + + + 41 + + + + + + 297 + + + + + 144—215 + + + +
+ + Full online workshop (6 half-days) + + + + + May 10 + - + May 20, 2021 + + + + 21 + + + + + + 43 + + + + + + 24 + + + + + + 12 + + + + + + + + + + 16 + + + + + + + + 12 + + + + + + 128 + + + + + + +
+ + Online + + + + + Nov 17 + - + Nov 26, 2020 + + + + 27 + + + + + + 26 + + + + + + 3 + + + + + + + + + + + + + + + + 21 + + + + + + 77 + + + + + + +
+ + Online + + + + + Oct 20 + - + Oct 29, 2020 + + + + 19 + + + + + + 4 + + + + + + 22 + + + + + + 11 + + + + + + + + + + 43 + + + + + + + + 1 + + + + + + 100 + + + + + + +
+ + Online (Mega-CodeRefinery) + + + + + May 25 + - + Jun 4, 2020 + + + + 5 + + + + + + 16 + + + + + + 75 + + + + + + 2 + + + + + + + + 1 + + + + + + + + + + 3 + + + + + + 102 + + + + + + +
+ + Trondheim + + + + + Feb 25 + - + Feb 27, 2020 + + + + 1 + + + + + + 26 + + + + + + + + + + + + + + + + + + 1 + + + + + + 28 + + + + + + +
+ + Espoo + + + + + Dec 10 + - + Dec 12, 2019 + + + + + + + + 30 + + + + + + + + + + + + + + + + + + + + 30 + + + + + + +
+ + Lille + + + + + Nov 25 + - + Dec 5, 2019 + + + + + + + + + + + + + + + + + + + + 28 + + + + + + 28 + + + + + + +
+ + Stockholm + + + + + Nov 19 + - + Nov 21, 2019 + + + + 28 + + + + + + + + + + + + + + + + + + + + + + + + 28 + + + + + + +
+ + Trondheim + + + + + Oct 22 + - + Oct 24, 2019 + + + + + + 20 + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + +
+ + Aalborg + + + + + Jun 11 + - + Jun 13, 2019 + + + + + + + + + + 18 + + + + + + + + + + + + + + 2 + + + + + + 20 + + + + + + +
+ + Oslo + + + + + Jun 3 + - + Jun 5, 2019 + + + + 1 + + + + + + 18 + + + + + + + + 1 + + + + + + + + + + + + + + + + + + 20 + + + + + + +
+ + Helsinki + + + + + May 27 + - + May 29, 2019 + + + + 1 + + + + + + + + 26 + + + + + + + + + + + + + + + + + + + + 27 + + + + + + +
+ + Gothenburg + + + + + May 21 + - + May 23, 2019 + + + + 25 + + + + + + + + + + + + + + + + + + + + + + + + 25 + + + + + + +
+ + Tartu + + + + + Apr 2 + - + Apr 4, 2019 + + + + + + + + + + + + 25 + + + + + + + + + + + + 1 + + + + + + 26 + + + + + + +
+ + Stockholm + + + + + Mar 25 + - + Mar 27, 2019 + + + + 28 + + + + + + + + + + + + + + + + + + + + 2 + + + + + + 30 + + + + + + +
+ + Espoo + + + + + Dec 11 + - + Dec 13, 2018 + + + + + + + + 31 + + + + + + 1 + + + + + + + + + + + + + + 1 + + + + + + 33 + + + + + + +
+ + Uppsala + + + + + Dec 3 + - + Dec 5, 2018 + + + + 30 + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + 31 + + + + + + +
+ + Kiruna + + + + + Nov 21 + - + Nov 23, 2018 + + + + 36 + + + + + + 1 + + + + + + + + + + + + + + + + + + 1 + + + + + + 38 + + + + + + +
+ + Reykjavik + + + + + Aug 21 + - + Aug 23, 2018 + + + + 3 + + + + + + + + + + + + + + 22 + + + + + + + + + + 1 + + + + + + 26 + + + + + + +
+ + Oslo + + + + + Jun 12 + - + Jun 14, 2018 + + + + 3 + + + + + + 38 + + + + + + + + + + + + + + + + + + 1 + + + + + + 42 + + + + + + +
+ + Espoo + + + + + May 29 + - + May 31, 2018 + + + + + + + + 48 + + + + + + + + + + + + + + + + + + + + 48 + + + + + + +
+ + Lund + + + + + May 15 + - + May 17, 2018 + + + + 30 + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + 31 + + + + + + +
+ + Turku + + + + + Mar 20 + - + Mar 22, 2018 + + + + 1 + + + + + + + + 22 + + + + + + + + + + + + + + + + + + + + 23 + + + + + + +
+ + Trondheim + + + + + Feb 27 + - + Mar 1, 2018 + + + + 1 + + + + + + 20 + + + + + + + + 1 + + + + + + + + + + + + + + + + + + 22 + + + + + + +
+ + Espoo + + + + + Dec 14 + - + Dec 16, 2017 + + + + + + + + 40 + + + + + + + + + + + + + + + + + + + + 40 + + + + + + +
+ + Linköping + + + + + Nov 7 + - + Nov 9, 2017 + + + + 21 + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + 22 + + + + + + +
+ + Aarhus + + + + + Oct 24 + - + Oct 26, 2017 + + + + 3 + + + + + + + + + + 24 + + + + + + + + + + + + + + + + + + 27 + + + + + + +
+ + Tromsø + + + + + Jun 19 + - + Jun 21, 2017 + + + + 1 + + + + + + 21 + + + + + + + + + + + + + + + + + + 1 + + + + + + 23 + + + + + + +
+ + Copenhagen + + + + + May 9 + - + May 11, 2017 + + + + 3 + + + + + + + + + + 19 + + + + + + + + + + 1 + + + + + + + + + + + + 23 + + + + + + +
+ + Stockholm + + + + + Feb 20 + - + Feb 22, 2017 + + + + 34 + + + + + + + + + + + + + + + + + + + + + + + + 34 + + + + + + +
+ + Espoo + + + + + Dec 14 + - + Dec 16, 2016 + + + + + + + + 25 + + + + + + + + + + + + + + + + + + + + 25 + + + + + + +
+ Total + + 36 + + 553 + + 518 + + 754 + + 130 + + 25 + + 23 + + 226 + + 375 + + 2604 +
+ + +

Instructor training events

+ + +

+ Number of participants/registrants by country of affiliation. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EventTimeSwedenNorwayFinlandDenmarkEstoniaIcelandNetherlandsOtherTotalTwitch viewersZoom
+ + Online (with FocusCoE) + + + + + Nov 2 + - + Nov 9, 2020 + + + + + + + + + + + + + + + + + + + + 14 + + + + + + 14 + + + + + + +
+ + Online (with TU Delft) + + + + + Jun 24 + - + Jun 25, 2020 + + + + + + 1 + + + + + + 1 + + + + + + + + + + + + 21 + + + + + + + + + + + + 23 + + + + + + +
+ + Stockholm + + + + + Nov 4 + - + Nov 5, 2019 + + + + 15 + + + + + + 8 + + + + + + 2 + + + + + + 2 + + + + + + 2 + + + + + + + + + + + + 1 + + + + + + 30 + + + + + + +
+ Total + + 3 + + 15 + + 9 + + 3 + + 2 + + 2 + + 0 + + 21 + + 15 + + 67 +
+ + +

Shorter workshops and other events

+ + +

+ Number of participants/registrants by country of affiliation. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EventTimeSwedenNorwayFinlandDenmarkEstoniaIcelandNetherlandsOtherTotalTwitch viewersZoom
+ + CarpentryCon 2022: Online teaching strategies from CodeRefinery + + + + + Aug 3, 2022 + + + + + + + + + + + + + + + + + + + + 15 + + + + + + 15 + + + + + + +
+ + Community teaching mini-workshop + + + + + Jun 21, 2022 + + + + 5 + + + + + + 7 + + + + + + 5 + + + + + + 2 + + + + + + + + + + + + + + 3 + + + + + + 22 + + + + + + +
+ + Git workshop with Compex Systems Modelling group at UiT + + + + + Feb 16 + - + Feb 23, 2022 + + + + + + 19 + + + + + + + + + + + + + + + + + + + + + + 19 + + + + + + +
+ + Python for Scientific Computing + + + + + Oct 25 + - + Oct 28, 2021 + + + + + + + + + + + + + + + + + + + + + + + +
+ + CodeRefinery workshop with focus on Git and GitLab for Metacenter + + + + + Mar 25 + - + Apr 8, 2021 + + + + + + 15 + + + + + + + + + + + + + + + + + + + + + + 15 + + + + + + +
+ + Online CodeRefinery Hackathon on Software Testing + + + + + Mar 17 + - + Mar 24, 2021 + + + + 16 + + + + + + 6 + + + + + + 4 + + + + + + 3 + + + + + + + + + + + + + + 4 + + + + + + 33 + + + + + + +
+ + Online CodeRefinery Workshop on Software Testing + + + + + Mar 17, 2021 + + + + 31 + + + + + + 14 + + + + + + 7 + + + + + + 5 + + + + + + + + + + 2 + + + + + + + + 10 + + + + + + 69 + + + + + + +
+ + Introduction to Shell, Computing resources for researchers, and HPC Kickstart (Aalto University and University of Oslo) (online) + + + + + Jan 29, 2021 + + + + + + 59 + + + + + + 71 + + + + + + + + + + + + + + + + + + + + 130 + + + + + + +
+ + Introduction to Conda for (Data) Scientists (online) + + + + + Jan 8, 2021 + + + + 1 + + + + + + 39 + + + + + + 5 + + + + + + + + + + + + 2 + + + + + + + + 1 + + + + + + 48 + + + + + + +
+ + Collaborative version control with Git (online) + + + + + Dec 10 + - + Dec 11, 2020 + + + + + + 15 + + + + + + + + + + + + + + + + + + + + + + 15 + + + + + + +
+ + Version control (Karlstad/online) + + + + + Sep 22 + - + Sep 23, 2020 + + + + 11 + + + + + + + + + + + + + + + + + + + + 1 + + + + + + 12 + + + + + + +
+ + Python for Scientific Computing (online) + + + + + Sep 14 + - + Sep 23, 2020 + + + + 3 + + + + + + 24 + + + + + + 41 + + + + + + + + + + + + + + + + + + + + 68 + + + + + + +
+ + GitHub without command line (Tampere/online) + + + + + Aug 13, 2020 + + + + + + + + 16 + + + + + + + + + + + + + + + + + + + + 16 + + + + + + +
+ + Workshop for those familiar with Git (online) + + + + + May 18 + - + May 20, 2020 + + + + 20 + + + + + + 2 + + + + + + 1 + + + + + + + + + + + + + + + + 4 + + + + + + 27 + + + + + + +
+ + Collaborative Git (online) + + + + + May 6, 2020 + + + + 25 + + + + + + 5 + + + + + + 3 + + + + + + 4 + + + + + + + + + + + + + + + + + + 37 + + + + + + +
+ + GitHub without command line (online) + + + + + Apr 15 + - + Apr 22, 2020 + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + + 10 + + + + + + +
+ + Introduction to Git (online) + + + + + Apr 7 + - + Apr 8, 2020 + + + + 19 + + + + + + + + 1 + + + + + + + + + + + + + + + + 2 + + + + + + 22 + + + + + + +
+ + Best Software Practices for the Norwegian Earth System Model (Oslo/Bergen/Online) + + + + + Feb 5, 2020 + + + + + + 30 + + + + + + + + + + + + + + + + + + + + + + 30 + + + + + + +
+ + Social coding and open software (Oslo) + + + + + Jan 9, 2020 + + + + + + 21 + + + + + + + + + + + + + + + + + + + + + + 21 + + + + + + +
+ + Hackathon (Stockholm) + + + + + Nov 6 + - + Nov 7, 2019 + + + + 4 + + + + + + 8 + + + + + + 3 + + + + + + 1 + + + + + + 1 + + + + + + + + + + + + 1 + + + + + + 18 + + + + + + +
+ + Reproducibility workshop (Stockholm) + + + + + Sep 9 + - + Sep 12, 2019 + + + + 12 + + + + + + + + + + + + + + + + + + + + + + + + 12 + + + + + + +
+ + Python for Dynamics and Evolution of Earth and Planets (Oslo) + + + + + Apr 1 + - + Apr 5, 2019 + + + + + + 12 + + + + + + + + + + + + + + + + + + + + + + 12 + + + + + + +
+ + Mixed Arts with CodeRefinery & Software Carpentry (Copenhagen) + + + + + Mar 5, 2019 + + + + + + + + + + 40 + + + + + + + + + + + + + + + + + + 40 + + + + + + +
+ + Git in practice (Oslo) + + + + + Feb 27, 2019 + + + + + + 18 + + + + + + + + + + + + + + + + + + + + + + 18 + + + + + + +
+ + Git workshop (Umeå) + + + + + Oct 16, 2017 + + + + 21 + + + + + + + + + + + + + + + + + + + + + + + + 21 + + + + + + +
+ + Workshop: Interfacing Fortran, C, C++, and Python (Manchester) + + + + + Sep 8, 2017 + + + + + + + + + + + + + + + + + + + + 15 + + + + + + 15 + + + + + + +
+ + Workshop: Mixed Martial Arts with CodeRefinery (Umeå) + + + + + May 29, 2017 + + + + + + + + + + + + + + + + + + + + 15 + + + + + + 15 + + + + + + +
+ + CodeRefinery get-together (Stockholm) + + + + + May 19, 2017 + + + + 15 + + + + + + + + + + + + + + + + + + + + + + + + 15 + + + + + + +
+ + CodeRefinery seminar (Oslo) + + + + + Apr 6, 2017 + + + + + + 15 + + + + + + + + + + + + + + + + + + + + + + 15 + + + + + + +
+ Total + + 29 + + 183 + + 319 + + 157 + + 55 + + 1 + + 0 + + 4 + + 71 + + 790 +
+ + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/atom.xml b/atom.xml new file mode 100644 index 000000000..e9395f8d3 --- /dev/null +++ b/atom.xml @@ -0,0 +1,4348 @@ + + + CodeRefinery + Teaching essential tools so that researchers can make full use of software, computing, and data. + + + Zola + 2023-06-25T00:00:00+00:00 + https://coderefinery.org/atom.xml + + What we plan to improve for the September 2023 workshop + 2023-06-25T00:00:00+00:00 + 2023-06-25T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2023/06/25/planning-sep-workshop/ + + <p>In this post we wish to share our ideas for what we want to change and improve +for the for the <a 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 href="https://coderefinery.org/join/chat/">via +chat</a> or via email to +<a href="mailto:support@coderefinery.org">support@coderefinery.org</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">&quot;Keep two weeks or split in two or more parts?&quot;</a>.</p> +</div> +<!-- toc --> +<h2 id="keep-two-weeks-or-split-in-two-or-more-parts">Keep two weeks or split in two or more parts?</h2> +<ul> +<li>Problems with current set-up (6 half-days): +<ul> +<li>Second week has different software requirements and is rather different from first week (git)</li> +<li>It could use more exercises but there is currently not much time</li> +<li>It is dense</li> +<li>Not each lesson feels relevant/interesting for all</li> +</ul> +</li> +<li>We are considering keeping first week focused on Git over 3 days as we have +now, but to <strong>spread the second week over a longer time frame (one or two +sessions per week)</strong>.</li> +<li>Advantages of splitting it off: +<ul> +<li>More time per lesson</li> +<li>More focused preparation</li> +<li>More time between lessons (more time to prepare for us, more time to digest and apply for learners)</li> +<li>Possibility to add hackathons/ more personalized Q&amp;A</li> +<li>Attracting different and more interested audiences</li> +<li>The second half could become more research-software-hour-y</li> +<li>Enables to do more around the second weeks topics, like adding a hackathon +or some panel discussion or a seminar where we could invite previous CR +participants/teachers or other people to talk about cool stuff they have +been doing around the topic.</li> +<li>Collaborative document might be enough and Zoom rooms might not be needed.</li> +</ul> +</li> +<li>Downsides: +<ul> +<li>Less cohesive workshop</li> +<li>Maybe more difficult to schedule although it might be easier to commit time both for organizers and for learners (two instructors would be able to deliver the entire workshop, if needed)</li> +<li>Credits? But can be solved by giving recommendations to local organizers (learning diary, quiz, git log)</li> +</ul> +</li> +<li>It could make it more difficult for: +<ul> +<li>Scheduling other workshops that build on top of this workshop.</li> +<li>For those who organize the streaming and video production.</li> +<li>For local organizers (<strong>we are particularly interested in their feedback about this idea</strong>).</li> +</ul> +</li> +<li>The first week part could also be extended with a hackathon (3 half-days +teaching, followed by a session e.g. one week later).</li> +<li>Advertise sessions with a more descriptive title (not &quot;Jupyter&quot;, but &quot;How to +prototype in Python&quot; 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 &quot;research software hour&quot; 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 &quot;optimized away&quot; 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 &quot;binding&quot; 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 &quot;wrong&quot; 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 (&quot;expert helpers&quot;).</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 &quot;might&quot; 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 &quot;in-person&quot;, +&quot;breakout rooms&quot;, &quot;exercise rooms&quot;, &quot;satellite events&quot;, ... +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> + + + + + Upcoming workshops and events + 2023-04-24T00:00:00+00:00 + 2023-04-24T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/workshops/upcoming/ + + <h2 id="core-coderefinery-workshops">Core CodeRefinery Workshops</h2> +<!-- If you edit this section, also update the date on top of this page. This +is important for RSS feed. --> +<p>We don't want you to miss a workshop or event. The best +way to stay informed is to join <a href="https://tinyletter.com/coderefinery">our newsletter</a> +(we are working on reviving it and will post updates there soon). +You can also subscribe to our <a href="/atom.xml">RSS feed</a>.</p> +<h2 id="past-workshops-and-events">Past workshops and events</h2> +<ul> +<li><a href="https://coderefinery.github.io/2023-09-19-workshop/">Tue-Thu, September 19-21 and 26-28 (6 half-days, online)</a></li> +<li><a href="https://scicomp.aalto.fi/training/scip/python-for-scicomp-2022/">Python for Scientific Computing, November 22-25, +2022</a>.</li> +<li><a href="https://coderefinery.org/workshops/past/">All our past workshops and events</a>.</li> +</ul> +<h2 id="upcoming-workshops-from-partner-organizations">Upcoming workshops from partner organizations</h2> +<p>Partners are invited to <a 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> +<ul> +<li><a href="https://scicomp.aalto.fi/training/scip/python-for-scicomp-2023/">Python for Scientific Computing, November 07th-10th, +2023</a>.</li> +</ul> +<h2 id="privacy-policy">Privacy policy</h2> +<p>Our <a href="/privacy-policy/">privacy policy</a> +documents what registration data we store, where, and why.</p> + + + + + Lessons learned from the March 2023 online workshop + 2023-04-12T00:00:00+00:00 + 2023-04-12T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2023/04/12/lessons-learned-mar-2023/ + + <p>March 21-23 and 28-30, 2023, we held again our <a 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 href="https://coderefinery.org/organization/contact/">reach out to +us</a>. This complements our +lessons learned from <a href="https://coderefinery.org/blog/2020/04/14/first-online-workshop/">our first online workshop +2020</a>, the +<a href="https://coderefinery.org/blog/2021/11/25/lessons-learned-may-2021/">May 2021 +workshop</a>, +and the <a 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: &quot;If you feel comfortable with this you’re gonna be fine during the +workshop&quot;.</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 href="https://coderefinery.org/calendars/">CodeRefinery calendar</a>.</li> +<li>Link all relevant repositories in one place (i.e. this calendar and anything +that needs attention near a workshop). Make sure those repositories have good +instructions in READMEs.</li> +</ul> + + + + + CodeRefinery workshop, 21-23 and 28-30 March 2023 + 2023-02-14T00:00:00+00:00 + 2023-02-14T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2023/02/14/march-workshop/ + + <p>Our March workshop is soon. By now, many of you know what a +CodeRefinery workshop is - git (intro and collaborative), social +coding, reproducible research, Jupyter, documentation, testing, and +modular code development (<a href="https://coderefinery.org/lessons/core/">check all +material</a>). But what's less +known is all the new ways to take part.</p> +<p><strong><a href="https://coderefinery.github.io/2023-03-21-workshop/">Workshop page</a> +and <a href="https://indico.neic.no/e/coderefinery-march-2023">Register</a></strong></p> +<p>In case you didn't know, we teach via livestream - which means anyone +can attend and we have unlimited capicity. Our <a href="https://coderefinery.org/workshops/teaching-style/">teaching +style</a> (as far as we can tell, quite +unique to us!) makes the courses still engaging while allowing us to +reach a much larger audience than we could otherwise. We also offer +some in-person or Zoom attendance options.</p> +<p>As an <strong>individual</strong>, you can attend - by yourself watching the +livestream, apply to work together in a Zoom team we organize, or some +local partners will even have in-person rooms to attend. Registration +is <strong>not</strong> binding, sign up for information and come when you can (you +won't take a seat from others). <strong>To simplify registration, you can +just sign up and you'll get contacted about Zoom/in-person +possibilities later.</strong></p> +<p><strong>If you have some friends, work together!</strong> Book your own meeting +room and watch the livestream together. We provide hands-on exercises +that on which you can work together - or even try to apply the +techniques to your own projects during this exercise time. Working +with a friend seriously improves learning and uptake after the +workshop.</p> +<p><strong>If you've been to CodeRefinery before, why not volunteer?</strong> (For any +of these, sign up in the normal registration form and tick the +interested in being staff/observer box):</p> +<ul> +<li>Be a team leader to allow us to support more teams (register in the +normal form and indicate this interest there).</li> +<li>Be a co-instructor: thanks to our +<a href="https://coderefinery.org/blog/2022/10/31/co-teaching/">co-teaching</a>, we've reduced the +barrier to get started. In fact, someone that has taken +CodeRefinery once would make a perfect co-instructor for a lesson, +since you'll remember what it was like to be a learner and act.</li> +<li>We can always use volunteers to follow up on HackMD questions, help +manage Zoom, communications, and generally all the other little +things that need doing.</li> +</ul> +<p>Why volunteer? You'll learn more of the workshop contents and get +involved in our teaching network - really good for both your career +and your organization.</p> +<p>More than anytime before, CodeRefinery is about being accessible to as +many learning styles as possible. Anyone can register and you'll get +information, you can decide if you want to watch the livestream, +review videos later, or just be aware of what happened and check again +later.</p> +<p>We hope to see you there!</p> + + + + + Learner teams in courses + 2022-11-28T00:00:00+00:00 + 2022-11-28T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2022/11/28/teams/ + + <p><em>Part of a series on the <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of +Teaching</a></em></p> +<p>In April/May 2020, when we started doing &quot;large&quot; (~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 (&quot;expert helpers&quot;) 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 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 &quot;do you want to take part in a team?&quot; 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 &quot;work tables in a classroom&quot;. 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: &quot;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&quot;. 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 +&quot;livestream for the masses, higher-quality teams for those who want +them.&quot;</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 href="https://coderefinery.github.io/manuals/team-leaders/">CodeRefinery manuals: Exercise +leaders</a></li> +<li><a href="https://coderefinery.github.io/manuals/expert-helpers/">Expert helpers and their role in helping exercise +leaders</a></li> +<li>Series index: <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of Teaching</a></li> +</ul> + + + + + Livestreaming courses + 2022-11-14T00:00:00+00:00 + 2022-11-14T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2022/11/14/livestreaming-courses/ + + <p><em>Part of a series on the <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of +Teaching</a></em></p> +<p>The idea of livestreamed courses came in early 2022, during the early +phase of remote work and teaching. Everyone started online courses +and events, but immediately stared hiding their connection information +behind registrations because &quot;someone might do something bad if they +could join&quot;[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 &quot;meeting&quot; +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 (&quot;HackMD&quot;) 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 &quot;anyone who wasn't able to +register can watch the stream&quot;. We also got a lot of experience with +streaming in our project <a href="https://researchsoftwarehour.github.io">Research Software +Hour</a>.</p> +<p>The fully &quot;proper&quot; livestreamed course was 2021 February, our <a 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 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 &quot;top&quot; 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 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 href="https://coderefinery.github.io/manuals/livestream-teaching/">Teaching via +livestreaming</a> +in the community-teaching guide.</li> +<li><a href="https://coderefinery.github.io/manuals/coderefinery-mooc/">CodeRefinery +MOOC</a>, +which is mainly about livestreaming.</li> +</ul> +<hr /> +<p>[1] Incidentally, since 2020 we have had a daily online meeting, our +Scientific Computing Garage help session, with the Zoom link online, +and have never had any problems. My hypothesis is that if you don't +have an exact data listed along with the Zoom information, it's not +found by those that want to troll.</p> + + + + + Lessons learned from the Sep 2022 online workshop + 2022-11-08T00:00:00+00:00 + 2022-11-08T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2022/11/08/lessons-learned-Sep-2022/ + + <p>September 20-22 and 27-29, 2022, we held again our <a 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 href="https://coderefinery.org/blog/2020/04/14/first-online-workshop/">our first online workshop +2020</a> and the +<a 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 &quot;wrong&quot; 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 &quot;are not needed&quot;</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 href="https://github.com/coderefinery/coderefinery.org/issues/697">here</a>.</li> +</ul> +<h3 id="collaborative-notes">Collaborative notes</h3> +<ul> +<li>HackMD goes to Twitch chat anyway so maybe no point in keeping it as a secret. +<ul> +<li>Add HackMD link to the workshop page and use the workshop page as main entry point so that participants don't have to hunt for links in email inboxes.</li> +</ul> +</li> +<li>HackMD started to be slow even if it should not with ~100 participants. +<ul> +<li>Numbering questions adds confusion -&gt; keep bullets and change to numbers in archive if needed. But this problem was only there because the document was sluggish at times.</li> +<li>Note for future: when pre-seeding the question numbers, leave a line between them. Then, when someone pushes enter after a number to add a new line, it doesn't increment the future numbers. Just saw this, this solves a big problem with numbering.</li> +</ul> +</li> +<li>Later in the workshop we deployed our own HedgeDoc instance, which worked quite well.</li> +</ul> +<h3 id="installation-and-tools">Installation and tools</h3> +<ul> +<li>Many did not install software beforehand. Either we haven't communicated clearly enough that this is needed or the install sessions were not recognized and not taken up. Very few people showed up at the install help sessions.</li> +</ul> +<h3 id="lesson-content">Lesson content</h3> +<ul> +<li>More big picture cohesion between exercises: It has been suggested to have a better connection between lessons and work on one repository that is continuously improved.</li> +<li>Provide snapshots and starting points for those who have not done the previous exercises.</li> +<li>Topics in Day 4 (at least) would deserve a longer lesson.</li> +<li>We can try to communicate better that after the Git lessons it can be OK and also useful to join only for the lessons of interest (to motivate people to pop in also for 1 or 2 lessons).</li> +<li>Especially in in-person: the Twitch sessions felt long (since there was so little interaction in the in-person rooms).</li> +</ul> +<h3 id="communication-with-participants">Communication with participants</h3> +<ul> +<li>Add all sessions to the <a href="https://coderefinery.org/calendars/">CodeRefinery calendar</a>.</li> +<li>Link all relevant repositories in one place (i.e. this calendar and anything that needs attention near a workshop). Make sure those repositories have good instructions in READMEs.</li> +</ul> + + + + + CodeRefinery Mastodon account + 2022-11-08T00:00:00+00:00 + 2022-11-08T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2022/11/08/mastodon/ + + <p>For the obvious reasons, CodeRefinery is looking into a Mastodon +account. You can now find us at +<a href="https://fosstodon.org/@coderefinery">@coderefinery@fosstodon.org</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 href="https://mastodon.help">https://mastodon.help</a> gives a basic introduction of the how and +why. <a 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>@username@server.name</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>@coderefinery@fosstodon.org</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 href="https://fosstodon.org">https://fosstodon.org</a> (FOSS = &quot;free and open source +software&quot;) to focus on the software and technology side of things.</li> +<li>For others in academia or research, +<a 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 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 (&quot;reblog&quot;) 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>&quot;Fediverse&quot; (&quot;federated universe&quot;) is the term used to refer to the +entire network of Mastodon servers (and more) that can communicate. +It's not just Mastodon - +<a 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 href="https://fediscience.org/server-list.html">Academia/research server list</a></li> +<li><a href="https://mastodon.help">https://mastodon.help</a></li> +<li><a href="https://fedi.tips/">https://fedi.tips/</a></li> +<li><a href="https://www.pwnallthethings.com/p/twitter-was-special-but-its-time">About engagement farming</a></li> +</ul> + + + + + Video publishing supports more learning styles + 2022-11-08T00:00:00+00:00 + 2022-11-08T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2022/11/21/video-publishing/ + + <p><em>Part of a series on the <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of +Teaching</a></em></p> +<p>What if all the talking in a course didn't disappear right after the +course was over?</p> +<p>When we went online, many people thought: avoid recording courses, +that's a privacy risk for participants. I firmly think this is the +right choice: I don't think any privacy risk to participants is worth it, and &quot;don't +say anything if you don't want to be recorded&quot; isn't good enough, +either - I don't want to push &quot;publish&quot; 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 &quot;good enough&quot; 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 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 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 href="https://youtu.be/thvMNTBJg2Y">video demonstration of ffmpeg-editlist</a></li> +<li><a href="https://coderefinery.github.io/manuals/video-editor/">Video editor</a> +role description in the CodeRefinery manuals</li> +<li><a href="https://github.com/coderefinery/ffmpeg-editlist">ffmpeg-editlist</a></li> +<li><a 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 &quot;it won't be interesting for others to watch later&quot;. +This post also shows how that's the wrong perspective: the videos +aren't only for random people later, but people in the course already.</p> + + + + + Reverse hybrid teaching + 2022-11-07T00:00:00+00:00 + 2022-11-07T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2022/11/07/reverse-hybrid/ + + <p><em>Part of a series on the <a href="/blog/2022/10/17/future-of-teaching/">Future of +Teaching</a></em></p> +<p>In 2020, we went to remote teaching. In 2022, we are talking about +hybrid so that we can keep accessibility benefits of being online, +while returning to some of the benefits of interaction. But does this +work? There are plenty of issues with hybrid, mainly the inequality +of the people in-person and those who are remote. What can we do +about this?</p> +<p>We've found a surprising solution which we call <strong>reverse hybrid</strong>. +Surely others have thought of this, and maybe there is even a proper +name.</p> +<p>Let's do a thought experiment in a large course. There is one teacher +and hundreds of students. What's the benefit to students doing this +in-person? It's probably not being in the same room as the teacher, +since most students don't have time to ask a question, or even +approach the teacher after the course. The benefit is how students +can interact with each other beside the lecture. The downside is that +making good, accessible online material in a lecture room is hard.</p> +<p>I wouldn't quite say it's accidental, but we have started this reverse +hybrid strategy: the teachers are online, and students can be +in-person in small groups. We started this by encouraging students to +meet up with their friends or colleagues to work on exercises, while +we teach online. As things became more relaxed, we had some staff +organize official in-person exercise sessions - while the current +instructors kept teaching online. This has worked surprising well - +students who want interaction can get it (and actually interact, +without disrupting the whole course), and those that don't can still +attend no matter where they are.</p> +<p>But what do we lose? Do we lose interaction with instructors? As +our posts on <a href="https://coderefinery.org/blog/2022/10/31/co-teaching/">co-teaching</a> and <a href="https://coderefinery.org/blog/2022/10/24/parallel-chat/">parallel chat</a> show, no! When you get to these large +courses, students can't interact with instructors without technology +anyway. In-person interactions aren't as anonymous, so that solution doesn't +motivate all learners to be active.</p> +<p>And what do we gain? The course isn't bound to one location, +literally anyone in the world can attend. There are high-quality +materials that everyone can review afterwards, so that the audience +has the time to relax and interact. By being able to scale up, we can +have more staff, which allows us to interact more via <a href="https://coderefinery.org/blog/2022/10/24/parallel-chat/">parallel chat</a> or +co-instructors. It's even possible to go as far as we go and make +each course an international collaboration with local breakout rooms, +and plenty of staff to manage everything.</p> +<p>Is &quot;reverse hybrid&quot; 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 href="https://coderefinery.github.io/manuals/co-instructors/">CodeRefinery manuals on +co-instructors</a></li> +<li><a href="https://coderefinery.github.io/manuals/hackmd-mechanics/">CodeRefinery manuals on how we do parallel chat, &quot;HackMD&quot;</a></li> +<li>Series index: <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of Teaching</a></li> +</ul> + + + + + Co-teaching and scaling up + 2022-10-31T00:00:00+00:00 + 2022-10-31T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2022/10/31/co-teaching/ + + <h1 id="co-teaching">Co-teaching</h1> +<p>So you are trying to teach a large online course. Everyone knows this +will be boring and monotonous, right? What if we told you that our +large, online, livestreamed courses feel more interactive than our old +small in-person courses? Part of that is due to the +<a href="https://coderefinery.org/blog/2022/10/24/parallel-chat/">parallel chat</a>, +but a significant part also comes from co-teaching, the topic +of this article.</p> +<p>The basic idea is that we accept that the audience is probably going +to be quiet, and plant someone to interact with the instructor. This +person doesn't pretend to be a student, but directly acts as a +co-instructor and the course becomes a discussion between them. This +is different than having two instructors who alternate teaching, or an +instructor or helper. It's more like a pilot-co-pilot situation, +where both pilots have a certain focus, but the flying is a continual +team process with each having a focus (flying and monitoring) but both +constantly providing information to each other.</p> +<p>Doing co-teaching in practice requires some care, but isn't that hard. +There are different models, usually we try to designate a primary who +is going over the course material, and the other co-instructor acts as +a learner, asking questions and engaging by being the &quot;voice of the +audience&quot;. 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 &quot;asking questions a +learner might have&quot; 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 +&quot;500-person lecture&quot; problems that I had when I was in university. We +now use co-teaching for anything that needs to seem &quot;professional&quot;, +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 href="https://coderefinery.github.io/manuals/team-teaching/">Co-teaching in CodeRefinery +manuals</a></li> +<li><a href="https://coderefinery.github.io/community-teaching/team-teaching/">Co-teaching in Community +Teaching</a></li> +<li>Series index: <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of Teaching</a></li> +</ul> + + + + + Parallel chat ("HackMD") and scaling teaching + 2022-10-24T00:00:00+00:00 + 2022-10-24T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2022/10/24/parallel-chat/ + + <p><em>Part of a series on the <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of +Teaching</a></em></p> +<p>One of the most common complaints when moving online was the amount of +interaction and feedback possible. How often have you heard &quot;please +turn on your cameras so I can see how it's going&quot; - 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 &quot;parallel chat&quot;, or as we typically call it &quot;HackMD&quot; +after the service we started using, <a 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 &quot;one right answer&quot; 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 &quot;+&quot; or &quot;-&quot; or &quot;o&quot; added after the options.</li> +</ul> +<p>Just look at the number of questions in our old courses, <a href="https://coderefinery.github.io/2022-03-22-workshop/questions/day1/">one 3.5-hour +day of our May 2022 +workshop</a> - +and this is day 1, when people didn't yet know how it worked.</p> +<p>But there are some disadvantages:</p> +<ul> +<li>An absolute flood of information, which <em>will</em> be distracting to +anyone trying to follow it. We warn people at the start to be +careful about this, and it's mostly OK. It's anyway archived for +follow-up later at one's convenience.</li> +<li>Another window for people follow. Like above, we warn people to +focus on the learning and parallel chat only when there is time.</li> +<li>It's different, so needs some explanation (but we've seen people +catch on very quickly once they see it).</li> +</ul> +<p>So, just how does this work? Well, we create the text document with +some standard notes at the top and bottom. It's made freely editable +without any login, shared to everyone in the workshop. All learners +are told to ask every new question in +list item at the bottom of the document - <em>always</em> the bottom, since +that's the only thing we follow. The course team has this open and +answers questions, focusing their attention at the bottom. Some other +notes:</p> +<ul> +<li>Instructors should discuss it via voice often, mentioning when the +look at it and when questions come from it. Let the audience know +it's actually useful.</li> +<li>Screenshare it during the Q&amp;A parts and breaks (you need a tool that +won't show the names of anyone who might have happened to be logged +in - HackMD does this properly). It provides something to look at +and reminds people that it exists and has lots of answers.</li> +<li>We often use it as an icebreaker as a demo. Maybe not everyone +understands it.</li> +<li>It can also be used for lightweight polls: learners can <code>+1</code> or add +a character to a line to make simple bar graphs.</li> +<li>Like we said above, it's not a perfect tool, but easy to use and fun.</li> +<li>A &quot;HackMD manager&quot; 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 href="https://coderefinery.github.io/manuals/hackmd-mechanics/">HackMD mechanics in CodeRefinery +manuals</a></li> +<li><a href="https://coderefinery.github.io/manuals/hackmd-helper/">HackMD manager role +description</a></li> +<li>Series index: <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of Teaching</a></li> +</ul> + + + + + Python for Scientific Computing open for registration and collaborators + 2022-10-21T00:00:00+00:00 + 2022-10-21T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2022/10/21/python-for-scicomp/ + + <p>Our next workshop, <a 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 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 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 href="https://coderefinery.github.io/manuals/chat/">CodeRefinery</a> chat and +introduce yourself.</p> + + + + + CodeRefinery teaching strategies and the future of teaching + 2022-10-17T00:00:00+00:00 + 2022-10-17T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2022/10/17/future-of-teaching/ + + <p><em>This is the index page of the <a href="/blog/2022/10/17/future-of-teaching/">Future of +Teaching</a> series.</em></p> +<p>In early 2020, global teaching got disrupted by the Covid-19 +pandemic. Countless courses struggled to maintain interaction and +teaching, but CodeRefinery found that by embracing the times, our +teaching could become even better. <strong>This series of blog posts will +discuss what we did and how you can learn from it.</strong></p> +<p>So, what is the future of teaching? For type of practical, hands-on +learning, we could try to classify learning situations into three +types:</p> +<ul> +<li>Very large courses and massive open online courses (MOOC),where +individual interaction isn't possible.</li> +<li>Small-medium courses, 10-30 people, with traditional classroom-type +interactions.</li> +<li>One-on-one or small-group mentoring.</li> +</ul> +<p>Before Covid, CodeRefinery was in the middle category with exclusively +in-person classroom sessions over a few days. During Covid, we +focused on very large online courses, which incidentally corresponded +with the rise of Research Software Engineering services in some of our +communities. This produced an interesting effect: <strong>The middle layer +got squeezed out</strong>: very large courses (with the proper tools) were +better at conveying information, and mentoring and co-working was best +for supporting people outside of these courses. These two things +combined seemed to greatly reduce the need for traditional +medium-sized courses. At the same time, the total effort became less +as we scaled up, which we'll talk about later.</p> +<p>Of course, you can't move medium in-person courses to large online +courses without adjusting how you teach. However, once we did adjust, +we were quite happy. We want to take some time in these posts to +informally discuss what we did, sort of as a guide to the other +information which can be found in <a 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 &quot;return to +normal&quot;, 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 &quot;reverse hybrid&quot; 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 &quot;start page&quot; of the series):</p> +<ul> +<li><a href="https://coderefinery.org/blog/2022/10/24/parallel-chat/">Random access chat (&quot;HackMD&quot;) 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 href="https://coderefinery.github.io/manuals/">CodeRefinery manuals</a></li> +<li><a href="https://coderefinery.github.io/community-teaching/">CodeRefinery community teaching +training</a></li> +</ul> + + + + + Outcomes from online hackathon about measuring the impact of CodeRefinery workshops + 2022-05-18T00:00:00+00:00 + 2022-05-18T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2022/05/18/measuring-impact/ + + <h2 id="introduction">Introduction</h2> +<p>The main focus of our project is to train and collaborate on training and to +connect training activities across different countries. But we also need to +report about our training activities and we need to apply for funding from +time to time. We also want to know whether we meet the needs of the community +and for this we need a mechanism to measure and evaluate the impact of our +workshops on software programming practices.</p> +<p>We have implemented a number of ideas to measure feedback and impact. In this +discussion session we re-examine these solutions and discuss how we can make +these more reusable for other projects. In short:</p> +<ul> +<li>When we operate online and hybrid, we are accessible to many more styles of +attendance (and different measurements, such as live-stream viewers).</li> +<li>We have an excellent <a 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 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 href="https://github.com/coderefinery/pre-workshop-survey">pre-workshop +survey</a> data which was +part of the registration process and <a 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 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 &quot;pays us back&quot;.</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 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 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 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 href="https://github.com/coderefinery/post-workshop-survey">Post-workshop survey</a></h3> +<ul> +<li>What to ask straight after the workshop and what to ask later? Separate +survey?</li> +<li>Could be integrated to the pre-workshop survey because it can be updated</li> +<li>Update questions: +<ul> +<li>we could add the question: what would you like to learn more?</li> +<li>Maybe condense a bit (less text and repetition)</li> +<li>Remove suggestive questions if any</li> +<li>add academic field</li> +</ul> +</li> +<li>What data to request from groups / partners? +<ul> +<li>Number of participants</li> +<li>How did they like the event</li> +</ul> +</li> +</ul> + + + + + Our plans to improve our workshop registration process + 2022-05-04T00:00:00+00:00 + 2022-05-04T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2022/05/04/improving-workshop-registration/ + + <p>As we entered the sustainability phase of the CodeRefinery project, the number +of participants attending our workshops continues to increase. The March 2022 +online workshop on best practices for scientific software development has +reached <a 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 &quot;can I have the +Q&amp;A&quot; and then I can say &quot;not right not but if you register you will get it in +an email tonight so you have it tomorrow&quot;</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 &quot;survived&quot; 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>&quot;affiliation or university&quot;: have a list of institutions + &quot;other&quot; * 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>&quot;do you want to participate in Stockholm? click here&quot; -&gt; another form</li> +<li>&quot;in Aalto&quot; -&gt; another form</li> +<li>none of the above -&gt; central form +<ul> +<li>group registration (exercise lead? or anybody as proxy?)</li> +<li>register as exercise lead and want to help out a &quot;random&quot; group</li> +<li>want to be part of a group -&gt; click here but we can't guarantee a helper, especially if you register late</li> +<li>want to only watch alone</li> +</ul> +</li> +<li>also offer options to get informed for those unsure/undecided +<ul> +<li>yes</li> +<li>&quot;interested&quot; </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 &quot;general&quot; 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>&quot;helpers, rename yourself and join a room that does not have helpers yet&quot;</li> +<li>&quot;learners, if you are in a room that is too empty or too full, join another one&quot; </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 href="https://forms.gle/xNSmW7DJ43jV7NhD9">example +form</a> and collected comments:</p> +<ul> +<li>Problems: &quot;team organized by us&quot; is not separated from &quot;self-organized team&quot;</li> +<li>The &quot;probably not but send info&quot; 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>&quot;observer&quot;: let them decide whether they want emails or not</li> +<li>&quot;how do you plan on attending&quot; +<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 href="https://github.com/coderefinery/template-workshop-webpage">workshop template</a></li> +</ul> + + + + + Lessons learned from the May 2021 online workshop + 2021-11-25T00:00:00+00:00 + 2021-11-25T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2021/11/25/lessons-learned-may-2021/ + + <p>May 10-12 and 18-20, 2021, we gave our at that time largest <a 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 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 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 &quot;voice of audience&quot;.</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 &quot;could somebody do X?&quot; 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 &quot;real&quot; video is available or wouldn't make sense, one workaround might be to have someone show a &quot;video&quot; (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 &quot;real&quot; video is available or wouldn't make sense, one workaround might be to have someone show a &quot;video&quot; (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 &quot;don't capture mouse cursor&quot; 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 &quot;And now we are done with the intro, and will go to our first lesson, Jupyter&quot;. It makes cutting a bit easier and also helps learners to re-orient.</li> +<li>The zoom default &quot;focus on the current speaker&quot; 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 &quot;plain&quot; 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 &quot;beginner&quot; label for software. Maybe it would make sense to host a &quot;Research Software Hour&quot; 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 &quot;I'm about to take the screenshare&quot; 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 &quot;none&quot; 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 &quot;team registrations&quot;, as long they include an EL, we should send an acceptance ASAP.</li> +<li>Regarding individual learners and ELs: +1) opening sign-up as individual ELs and to set its soft-deadline much earlier than for individual learners, +2) for individual learners, opening registration first as stream viewers only with an option of 'want to join in interactive exercise sessions' yes/no, +3) after the soft-deadline of individual ELs, to those who said 'yes', sending invitations to sign-up for zoom participation in another reg. form, and +4) accept the capacity of #individual ELs x 5 and otherwise put them in waitlist. +However, I actually want to suggest a quite wild idea rather than struggling with the dilemma of no-shows and withdrawal with very very short notice while not being able to accept all sign ups. Instead of coordinating for acceptance and grouping on backside, how about encouraging open&amp;public self-organization of groups? somewhere everyone can access, 'sign up' by writing their name, as a learner or EL, potentially also country, affiliation, background so that it might happen that they will self-organize a team. Once they can make a group of 6-7 people with at least one who can be acting as an EL, then their participation is sort of 'confirmed'. This is different from team registration as this is primarily for those who want to join but cannot make a group will find others to make a group to join in the workshop. +Another thing is that the threshold of ELs could be even lower than some people may think. And I would say being an EL is probably better way to learn about the CodeRefinery lesson materials than joining as an learner. Especially if some people have already made their own team, one of them should be able to act as an EL, or they can even circulate the role among eath other. +And what I learned from the R+Tidyverse workshop until yesterday is that if a learner cannot turn on camera or mic (for any reason), it is almost no worth to join in a breakout room session, as HackMD Q&amp;A will more or less perfectly solve the problem in that case.</li> +</ul> + + + + + Towards citable lessons + 2021-11-21T00:00:00+00:00 + 2021-11-21T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2021/11/21/towards-citable-lessons/ + + <p>In Autumn 2021 we have started to work on making our lessons and other material +we have created over the years, citable. At the same time we wish to assign a +digital object identifier (DOI) to each lesson so that the material becomes +persistent and remains findable. However, the main motivation for this work is +to get some metrics about the use of our material and also to give contributors +better credit and to make it possible for them to get and display metrics about +their contributions.</p> +<p>This effort is work in progress and in this document we will summarize our +discussions, decisions, findings, and observations so that we can then use +these later when we conclude this effort lesson by lesson.</p> +<h3 id="technical-choices">Technical choices</h3> +<ul> +<li>We will use Zenodo because it is a well-established service which we know and +which integrates nicely with the repositories hosting the lessons and because +we will need to be able to update metadata (author information) without +changing the DOI record.</li> +<li>We will convert the 3 remaining Jekyll lessons to Sphinx to simplify pdf export.</li> +<li>We will not start with <a 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 +&quot;cite as&quot; 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 &quot;code&quot; (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 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 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>&quot;creator&quot;: significant contributions</li> +<li>&quot;contributor&quot;/Editor: reviewing/approving contributions</li> +<li>&quot;contributor&quot;/Other: smaller contributions</li> +</ul> +</li> +<li>On Zenodo we start with &quot;creator&quot; (author) and &quot;contributor&quot; (other). +<ul> +<li>See also categories that Zenodo understands: <a href="https://developers.zenodo.org/#representation">https://developers.zenodo.org/#representation</a> (search for &quot;creators&quot; and &quot;contributors&quot;)</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 &quot;release&quot; 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 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 data-lang="json" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-json "><code class="language-json" data-lang="json"><span> </span><span style="color:#d07711;">&quot;creators&quot;</span><span>: [ +</span><span> { +</span><span> </span><span style="color:#d07711;">&quot;orcid&quot;</span><span>: </span><span style="color:#d07711;">&quot;0000-0002-1825-0097&quot;</span><span>, +</span><span> </span><span style="color:#d07711;">&quot;affiliation&quot;</span><span>: </span><span style="color:#d07711;">&quot;Feline research institute&quot;</span><span>, +</span><span> </span><span style="color:#d07711;">&quot;name&quot;</span><span>: </span><span style="color:#d07711;">&quot;Field, Gar&quot; +</span><span> }, +</span><span> { +</span><span> </span><span style="color:#d07711;">&quot;orcid&quot;</span><span>: </span><span style="color:#d07711;">&quot;0000-0002-1825-0097&quot;</span><span>, +</span><span> </span><span style="color:#d07711;">&quot;affiliation&quot;</span><span>: </span><span style="color:#d07711;">&quot;Feline research institute&quot;</span><span>, +</span><span> </span><span style="color:#d07711;">&quot;name&quot;</span><span>: </span><span style="color:#d07711;">&quot;Cat, Felix&quot; +</span><span> } +</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 href="https://about.zenodo.org/">https://about.zenodo.org/</a></li> +<li>Zenodo terms of use <a href="https://about.zenodo.org/terms/">https://about.zenodo.org/terms/</a></li> +<li>Zenodo policies <a href="https://about.zenodo.org/policies/">https://about.zenodo.org/policies/</a></li> +<li>Zenodo FAQ <a href="https://help.zenodo.org/">https://help.zenodo.org/</a></li> +<li>Zenodo REST API <a href="https://developers.zenodo.org/">https://developers.zenodo.org/</a></li> +<li>Zenodo .zenodo.json and GitHub <a href="https://developers.zenodo.org/#github">https://developers.zenodo.org/#github</a></li> +<li>GitHub-Zenodo tutorial <a href="https://guides.github.com/activities/citable-code/">https://guides.github.com/activities/citable-code/</a></li> +<li>The <a href="https://allcontributors.org/">https://allcontributors.org/</a> specification and GitHub bot</li> +<li>The CITATION.cff format <a href="https://citation-file-format.github.io/">https://citation-file-format.github.io/</a></li> +<li>The CITATION.cff format keywords <a 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 href="https://spdx.dev/ids/">https://spdx.dev/ids/</a></li> +</ul> + + + + + Lessons learned from phase 2 of the project + 2021-11-20T00:00:00+00:00 + 2021-11-20T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2021/11/20/phase-2-lessons-learned/ + + <p>The motivation for this document was to collect lessons learned from phase 2 of +our project, both for our own future work but also for other future projects +who may find our experiences useful. We have chosen to collect the lessons +learned in bullet-point format and not in prose.</p> +<p>Below we list experiences and also unsolved challenges from workshop +organization, lesson development, meeting minutes and decision tracking, +Carpentries membership, communication, data management, stakeholder- and +community engagement, and infrastructure hosting.</p> +<h3 id="workshop-event-organization">Workshop/event organization</h3> +<h4 id="metrics">Metrics</h4> +<ul> +<li>When we started teaching in 2016, we only worried about the teaching and not +about measuring how many participants from which country and from which +discipline and career stage. However, we were asked to report about metrics +again and again, on short notice. At some point we started reporting this in +detail (<a 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 &quot;actual&quot; 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>&quot;Webinar (stream)-by default&quot; with an option for joining in zoom-meeting room for extra help may work better (ref. <a href="https://scicomp.aalto.fi/training/scip/python-for-scicomp/">Python for SciComp 2021</a>)?</li> +<li>Post-workshop Q&amp;A session time/day would be useful? </li> +<li>We have considered for the future to offer optional exercise walk-through sessions. These could be +interesting not only for learners but recording of these sessions could also help future +exercise leads.</li> +</ul> +</li> +</ul> +<h4 id="communication-with-participants">Communication with participants</h4> +<ul> +<li>Indico's email function worked well to send information about the workshop to participants/signers.</li> +<li>We experienced few cases of typo in email address, thus we could not reach registrants.</li> +<li>Online collaborative notebook (HackMD and similar) worked well for Q&amp;A during the lectures. </li> +</ul> +<h4 id="certificates">Certificates</h4> +<ul> +<li>Should CR issue any certificate at all? Certificates became participation certificates and possibly we should delegate certification to participating organizations.</li> +<li><a href="https://www.tudelft.nl/en/library/research-data-management/r/training-events/training-for-researchers/code-refinery-workshop">&quot;TU Delft PhD candidates can obtain 2 GS credits (Research skills) when attending and actively participating in the workshop (complete assistance)&quot;</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>&quot;software installation and setup&quot; +<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 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 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 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 href="https://coderefinery.github.io/2021-01-08-coderefinery-online/">Introduction to Conda for (Data) Scientists</a> as a part of <a 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 href="https://carpentries.topicbox.com/groups/local-nordic">Nordic region mailing list at topic-box (managed by the Carpentries)</a>, </li> +<li><a href="https://2020.carpentrycon.org/schedule/#session-48">&quot;Nordic and Baltic Get Together&quot; session at CarpentryCon 2020 @home</a>, and</li> +<li><a 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 &quot;Seminar for bibliotekenes nettverk for ph.d.-støtte&quot; (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 &quot;safe&quot; 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 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 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 &quot;Standup&quot;-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 +&quot;levels&quot; as well as types (e.g. lesson contributions or exercise leads) of contributions? +Ref. <a 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 &quot;burn-out&quot; 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 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 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 &quot;Support line/ request tracker&quot;).</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>&quot;Rights to work results&quot; vs. Open Science +<ul> +<li>Ref: a page about <a href="https://www.uio.no/english/for-employees/employment/work-results/rights-to-work-results.html">&quot;Rights to work results&quot; at University of Oslo</a></li> +<li>General clarification is needed here so that everyone won't be in trouble later.</li> +<li>It should be also better explained and clarified in terms of the choice of platform for collaborative works in this regard so that staff/volunteers etc. can feel safe in using the chosen (cloud-based) platforms, including GitHub, YouTube, Twitch, HackMD, Tinyletter etc.</li> +</ul> +</li> +<li>We also lacked support in questions about how to start an own organization/ spin-off.</li> +</ul> + + + + + Bi-weekly Community Calls started + 2021-09-01T00:00:00+00:00 + 2021-09-01T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2021/09/01/bi-weekly-community-calls/ + + <p>CodeRefinery is now shifting towards a new phase with community-based collaboration. We are aiming to continue offering the workshops, community space, and develop lesson materials together with those who are interested in. </p> +<p>For this to be successful, CodeRefinery started bi-weekly community calls from the 9th August. Calls are open to anyone interested in joining in the community from any point of view; teaching, learning, hosting, contributing to lessons, you name it. Join in the calls, get informed and influence the community's way forward! </p> +<p>So far, we informed and discussed among others;</p> +<ul> +<li>CodeRefinery project: current status and future,</li> +<li>How to improve outreach and publicity,</li> +<li>Importance of possibility to provide ECTS,</li> +<li>How CodeRefinery should give credits to contributions by volunteers,</li> +<li>Mentorship program for exercise leads after the workshop,</li> +<li>How to &quot;order&quot; workshops</li> +</ul> +<p>For more details of each call, please visit <a 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 &quot;CodeRefinery way forward&quot;, where we will be discussing the community organization model. For the connection details and agenda, please follow <a 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 href="https://coderefinery.zulipchat.com/#">Zulip</a> :)</p> + + + + + Community discussion in Nordic and Baltic countries + 2020-11-13T00:00:00+00:00 + 2020-11-13T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2020/11/13/carpentry-community-discussion-nordic/ + + <p>This blogpost is based on the notes made on <a 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 &quot;never touch learners keyboard&quot;. 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 href="https://nordic-rse.org/">Nordic Research Software Engineer initiative</a> and its <a 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 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 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 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) &quot;Taking over learner's keyboard on an in-person workshop should never happen&quot;, 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 &quot;Let's build an augmented reality web app!&quot; based on a full-day workshop given at the <a href="https://www.ub.uio.no/english/courses-events/events/all-libraries/2020/research-bazaar-2020.html">research bazaar at the University of Oslo</a> earlier this year: +<ul> +<li>goal: making 3D holiday greeting card using HTML and JavaScript: https://arworkshop.teebusch.repl.co/card1.html</li> +<li>The lesson material is all there: https://repl.it/@Teebusch/arworkshop</li> +</ul> +</li> +<li>(Joakim) Suggestion of a repository of Carpentries Nordic/Baltic community members with specialities and skills</li> +<li>(Annika) Google Sheets for this?</li> +<li>(Anne) EOSC Nordic claims to be a knowledge-hub</li> +<li>(Radovan) Is also working on mapping.</li> +</ul> +<h3 id="announcements">Announcements</h3> +<ul> +<li>Nordic RSE (research software engineers) online get-together (Nov 30 - Dec 2): https://nordic-rse.org/events/2020-online-get-together/ (everybody welcome to attend and submit proposals or ideas)</li> +<li>Local-nordic Carpentries mailing list: https://carpentries.topicbox.com/groups/local-nordic</li> +<li>CodeRefinery workshop in November 17-19, 24-26 (registration closed): https://coderefinery.github.io/2020-11-17-online/ (looking for helpers: great way to learn)</li> +</ul> +<h2 id="participant-list">Participant list</h2> +<ol> +<li>Annika Rockenberger (host, Norway, Oslo)</li> +<li>Naoe Tatara (co-host, Norway, Oslo)</li> +<li>Kerstin Lenk (Finland, Tampere)</li> +<li>Lars Kjær (Denmark, Copenhagen)</li> +<li>Tobias Busch (Norway, Oslo)</li> +<li>Lina Andrén (Sweden, Stockholm)</li> +<li>Mohamed Abdelhalim (Norway, Oslo)</li> +<li>Annajiat Alim Rasel (Bangladesh, Dhaka)</li> +<li>Joakim Philipson (Sweden, Stockholm)</li> +<li>Thomas Arildsen (Denmark, Aarborg)</li> +<li>Radovan Bast(Norway, Tromsø)</li> +<li>Samantha Wittke (Finland, Helsinki)</li> +<li>Olav Vahtras (Sweden, Stockholm)</li> +<li>Anne Fouilloux(Norway, Oslo)</li> +<li>Richard Darst (Finland, Helsinki)</li> +</ol> +<p>Thank you for all the contributions!</p> + + + + + Making lessons citable and giving credits for contributors + 2020-10-02T00:00:00+00:00 + 2020-10-02T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/open-house/credit/ + + <p>CodeRefinery is organizing a half day online &quot;open house&quot; 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 href="https://hackmd.io/@coderefinery/2020-10-02-openhouse">shared +document</a>. +Please note that this document will be archived in our <a 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 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 href="https://coderefinery.zulipchat.com">Zulip chat</a> +with possibilities to further discuss via video if necessary.</p> +<p>We conclude the day around 12:00 pm (UTC+1).</p> + + + + + git-pr: painless small pull requests + 2020-09-29T00:00:00+00:00 + 2020-09-29T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2020/09/29/git-pr/ + + <h1 id="git-pr-painless-small-pull-requests">git-pr: painless small pull requests</h1> +<p>In CodeRefinery, we teach the benefit of small changes via pull +requests in order to have better collaboration and review. But, when +the changes get small enough, the time it takes to run the commands +and open the pull requests begins to get annoying. I looked around +for other tools that could make this faster, but wasn't quite +satisfied with anything. So, I slowly started making something that +evolved into git-pr, <a 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 href="https://github.com/NordicHPC/git-pr">https://github.com/NordicHPC/git-pr</a> - it is a +single shell script to copy to your path.</p> +<p>It's beta-quality software: it is used by me and a few others all the +time, but there will almost certainly be issues as others start using +it. Send issues and PRs!</p> +<p>It supports both Github and Gitlab, though Gitlab support is less well +tested.</p> +<p>There is a lot of prior art on different pieces here, there isn't much +in git-pr that is completely new - In particular, the GitHub command +line interface has come out since then and has some overlap. You can +see other options in the git-pr README.</p> + + + + + Writing newsletter articles and blog posts + 2020-08-24T00:00:00+00:00 + 2020-08-24T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/open-house/newsletter/ + + <p>CodeRefinery is organizing a one day online &quot;open house&quot; 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 href="https://hackmd.io/@coderefinery/2020-08-24-openhouse">shared +document</a>. +Please note that this document will be archived in our <a 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 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 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 href="https://hackmd.io/@coderefinery/2020-08-24-openhouse">shared +document</a>.</p> + + + + + Report from the Mega-Coderefinery workshop + 2020-07-31T00:00:00+00:00 + 2020-07-31T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2020/07/31/mega-coderefinery/ + + <p>In May/June 2020, CodeRefinery ran a large online workshop with about +100 learners in attendance. We overcame the challenges with some +clever strategies, and we feel the learning outcomes were similar to that of in-person workshops of around 30-40 participants.</p> +<p>After that workshop, some of the same staff held an even larger +&quot;High-performance computing (HPC) Kickstart&quot; 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 href="https://coderefinery.github.io/2020-05-25-online/">Webpage</a></p> +<h2 id="finnish-hpc-kickstart">Finnish HPC Kickstart</h2> +<p><a 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 &quot;required&quot; 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 +&quot;helper introduction meeting&quot;, 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 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>&quot;Require&quot; 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">&quot;Bring your own breakout room&quot;</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 href="https://doi.org/10.1007/s11301-017-0133-3">Graf-Vlachy, L., Buhtz, K. &amp; König, 2018</a>). Encourage people to come with friends or groupmates.</li> +<li>How it worked: +<ul> +<li>This is implemented as a &quot;Team name&quot; 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 &quot;random&quot; 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 &quot;team name&quot; 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 &quot;CR&quot; +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 &quot;Room&quot; 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 href="https://coderefinery.github.io/manuals/helping-and-teaching/">General</a></li> +<li><a 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 &quot;correct&quot; 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 &quot;special expert helpers&quot; (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. &quot;we expect you to finish 1-3, 4-5 are optional. 20 +minutes, ending at xx:45&quot;.</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 &quot;if it's even a little bit slow to you, +then it takes ages for a learner to understand&quot;.</li> +</ul> +<h3 id="recommendations-5">Recommendations</h3> +<ul> +<li>Have lots of &quot;meta-talk&quot; 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 &quot;HackMD master&quot; 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 &quot;questions section&quot; and &quot;lesson section&quot;, 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 &quot;pre-assign breakout rooms&quot; 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 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 (&quot;spotlight video&quot;) 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>&quot;Custom streaming server&quot; seems to be able to broadcast to +anything. In particular, we used <a 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 &quot;Spotlight video&quot; 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. &quot;video not broadcast, voice may be&quot;). It is +much harder to add this later.</li> +</ul> +<h2 id="recording">Recording</h2> +<ul> +<li>Once you do streaming, it is a smaller step to recording and posting +the videos. +<ul> +<li>Who is benefited by the recordings? Perhaps not brand new +learners, but the learners who were in the workshop can review +them again later.</li> +</ul> +</li> +<li>If recordings require post-processing, they will almost never get +done. +<ul> +<li>Plan for one-short recording as much as you can: find a way to +keep learners out of the recording so you can go and directly +publish it with the minimum effort afterwards.</li> +</ul> +</li> +<li>A surprising number of learners have asked for the videos after the +workshop. +<ul> +<li>While the videos may not be as useful to someone learning the +material from scratch, they are probably very useful to an +existing learner who wants to review something they already saw, +teach others, etc.</li> +<li>When we can't provide them quickly, their usefulness is much +reduced.</li> +</ul> +</li> +</ul> +<h3 id="recommendations-8">Recommendations</h3> +<ul> +<li>Clearly announce the recording privacy statement when first +registering.</li> +<li>Try to make the recording as one-shot as possible, with minimal +post-processing needed. Plan for who will do this and when already +before the workshop.</li> +</ul> + + + + + CodeRefinery tools in action: NordicHPC + 2020-04-27T00:00:00+00:00 + 2020-04-27T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2020/04/27/nordichpc-tools/ + + <p>You've been to a CodeRefinery workshop, and wonder how these tools are +actually used? The NordicHPC github organization, which we've +mentioned before, provides a lot of demonstrations on using github and +working collaboratively. It's an example of people who have a common +interest and form a community by using common tools.</p> +<p>Yet at the same time, not everything is perfect. Rather than try to +make everything perfect, they make things good enough, licensed, and +shareable, and improve it as a need comes - possibly, when someone +else has a need and time to improve it.</p> +<p>Within the organization, you can find many examples of using +<a href="https://coderefinery.github.io/git-intro/">git</a> (everything), +<a href="https://coderefinery.github.io/git-collaborative/">pull-request based +workflows</a> +(e.g. sonar, git-pr, slurm2sql), <a href="https://coderefinery.github.io/testing/">automated +testing</a> (e.g. .travis.yml in +sonar, envkernel, nbscript, slurm2sql), <a 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 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 href="https://github.com/NordicHPC/nbscript">nbscrpt</a> is an attempt to +provide the familiar script interface to Jupyter notebooks.</li> +<li><a href="https://github.com/NordicHPC/sonar">sonar</a> and +<a href="https://github.com/NordicHPC/sonar-web">sonar-web</a> provide a way to +watch what is actually running on clusters.</li> +<li><a href="https://github.com/NordicHPC/git-pr">git-pr</a> saves you keystrokes +when making pull requests, though perhaps +<a href="https://cli.github.com/">cli.github.com</a> takes its place.</li> +<li><a 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 href="https://github.com/NordicHPC/envkernel">envkernel</a> is a Jupyter +extension which lets you run your kernels in different environments, +such as Docker, Singularity, and virtual/conda environments more +easily.</li> +</ul> +<p>Do you have a nice tool that needs a home? You know what to do...</p> + + + + + Announcing the first Nordic-RSE conference + 2020-04-24T00:00:00+00:00 + 2020-04-24T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2020/04/24/nordic-rse-conference/ + + <p>A couple of years ago, <a 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 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 href="https://society-rse.org/">the UK</a>, <a href="http://nl-rse.org/">the +Netherlands</a> and +<a 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 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 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 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 +(nordic-rse-organizers@neic.no) 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 href="https://e-science.se/">Swedish e-Science Research Centre +(SeRC)</a>, the <a href="https://snic.se/">Swedish National Infrastructure +for Computing (SNIC)</a> and the <a 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:nordic-rse-organizers@neic.no">get in +touch</a>.</p> + + + + + CodeRefinery workshops moving online + 2020-04-24T00:00:00+00:00 + 2020-04-24T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2020/04/24/online-workshops-update/ + + <p>After cancelling all our planned in-person workshops this spring due +to the ongoing pandemic, we decided to make the best of the situation +and start focusing our efforts on developing an online workshop +training programme. We wanted to start small while learning the +mechanics of online teaching, so we began by offering an online +workshop covering only the +<a 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 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 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 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 &quot;bring their own breakout room&quot; 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 &quot;giving&quot; 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 href="https://coderefinery.org/workshops/upcoming/#notify-me">notify-me +form</a> if you +want to receive an email as soon as registration opens for these +workshoops!</p> + + + + + Rebase vs merge + 2020-04-24T00:00:00+00:00 + 2020-04-24T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2020/04/24/rebase-vs-merge/ + + <p>During a CodeRefinery workshop you might have heard an instructor say +that you can merge or alternatively rebase, like merge and rebase are +two equivalent operations. Clearly, they are not, but should we treat +the operations equally?</p> +<p>Let us take a closer look at rebase and merge, how they differ and in +which situations they are an advantage to use.</p> +<h3 id="rebase">Rebase</h3> +<p>Rebase gives you the opportunity to move the base of a branch to a new +base. Here we have two branches, <code>master</code> and <code>feature_A</code>.</p> +<p><img src="/blog/image_01.png" alt="Initial tree" title="Initial git commit tree" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</p> +<p>We can rebase the <code>feature_A</code> branch to the last commit in <code>master</code>:</p> +<pre data-lang="bash" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#5597d6;">git</span><span> checkout feature_A +</span><span style="color:#5597d6;">git</span><span> rebase master +</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:70%&quot;}</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 data-lang="sh" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#5597d6;">git</span><span> checkout master +</span><span style="color:#5597d6;">git</span><span> merge feature_B</span><span style="color:#5597d6;"> --no-ff +</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 data-lang="sh" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#5597d6;">git</span><span> config</span><span style="color:#5597d6;"> --global</span><span> branch.master.mergeoptions</span><span style="color:#5597d6;"> --no-ff +</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</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 data-lang="sh" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#5597d6;">git</span><span> checkout fix_types +</span><span style="color:#5597d6;">git</span><span> rebase master +</span><span style="color:#5597d6;">git</span><span> checkout master +</span><span style="color:#5597d6;">git</span><span> merge fix_typos</span><span style="color:#5597d6;"> --ff-only +</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</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 href="https://medium.com/@porteneuve/getting-solid-at-git-rebase-vs-merge-4fa1a48c53aa">[1] Getting Solid at Merge vs Rebase</a></p> + + + + + Research Software Hour + 2020-04-24T00:00:00+00:00 + 2020-04-24T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2020/04/24/rsh/ + + <p>CodeRefinery is a project that holds workshops, but computing is an +experience. As much as we teach in workshops, it's not enough: these +workshops are hands-on, but still can't show our whole daily thought +process. They also aren't the right format for everyone and can't +reach enough people at once. In order to extend our reach, we are +trying a streaming web show <a 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 href="https://researchsoftwarehour.github.io/">the website</a> +and join us each Tuesday at 20:30 CEST on Twitch.</p> + + + + + Work on blog posts + 2020-04-24T00:00:00+00:00 + 2020-04-24T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/open-house/blog-posts/ + + <p>CodeRefinery is organizing a one day online &quot;open house&quot; 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 href="https://hackmd.io/46XkhCr5T4yahKprL6N01A">shared +document</a>. +Please note that this document will be archived in our <a 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 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 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 href="https://hackmd.io/46XkhCr5T4yahKprL6N01A">shared +document</a>.</p> + + + + + Lessons learned from running our first online workshop + 2020-04-14T00:00:00+00:00 + 2020-04-14T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2020/04/14/first-online-workshop/ + + <p>April 7-8, 2020, we gave our first online workshop on <a 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 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 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 &quot;ice-breaker&quot; 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 &quot;setting up and configuring Git&quot; 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: &quot;price of workshop is to attend a later workshop +as helper&quot; (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> (&quot;flipped classroom&quot; 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 &quot;it's easiest to share +the screen since you don't have to do the thinking&quot;.</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 &quot;sticky&quot; 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 href="https://coderefinery.github.io/manuals/instructor-tech-setup/">displaying the +last commands +typed</a> +really helps.</li> +<li>Gray/dark background terminal looked better than light background terminal.</li> +</ul> +<h3 id="how-to-make-this-more-scalable">How to make this more scalable?</h3> +<ul> +<li>This time we did not plan to record or stream but we nevertheless asked the +participants in a pre-workshop survey: 2/20 preferred not to have the +workshop streamed, 1/20 didn't want it recorded.</li> +<li>The workshop was great, but we should think more about how to reach more +people. A small workshop where we can individually interact with everyone is +amazing, but the promise of digital technology is that we can reach everyone in +the world. How can we get the best of both? Can we also do something for +everyone else who can't attend but might want to watch later? This is +something to think about.</li> +<li>How can we make this more scalable? This workshop was quite labor-intensive. +You could probably do it with two instructors (instructor + HackMD watcher) + 1 +zoom expert (host + general helper) + a lot of semi-experienced helpers (1:5 +ratio) + a few debuggers to help with tech support the first hour (not +overlapping with instructor or HackMD watcher).</li> +<li>Imagine if we had main room recorded (or even streamed), but breakout rooms +not. People can still ask and interact with privacy in the small rooms - and +we take these comments/issues back to the main room. Other people following +along later can do the exercises at their own pace, and hear the +intros/conclusions in the main rooms, and it might feel a bit like a small +class.</li> +</ul> + + + + + Work on instructor training material + 2020-03-24T00:00:00+00:00 + 2020-03-24T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/open-house/instructor-training-material/ + + <p>CodeRefinery is organizing a one day online &quot;open house&quot; dedicated to +work together on revising and +improving <a href="https://coderefinery.github.io/instructor-training/">our instructor training +material</a>. +<a href="https://github.com/coderefinery/instructor-training/issues">Issues are filed +here</a>, +notes from the first workshop can be in the <a 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 href="https://hackmd.io/@doFoQYKqR623RI-YyXvmew/HJGgb_9VL">shared +document</a>. +Please note that this document will be archived in our <a 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 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 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 href="https://hackmd.io/@doFoQYKqR623RI-YyXvmew/HJGgb_9VL">shared +document</a>.</p> + + + + + Preparing for online teaching + 2020-03-20T00:00:00+00:00 + 2020-03-20T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/open-house/online-teaching/ + + <p>We will meet on <a href="https://kth-se.zoom.us/j/152239500">video</a> (9:00 am, UTC+1) +and <a href="https://coderefinery.zulipchat.com">chat</a> and discuss techniques, +solutions, and tricks for online teaching and collect our notes in a <a 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 href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>.</p> + + + + + Collaborative work on the website + 2020-02-11T00:00:00+00:00 + 2020-02-11T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/open-house/website/ + + <h3 id="welcome-to-the-second-coderefinery-open-house">Welcome to the second CodeRefinery Open House!</h3> +<p>Following up on our successful first CodeRefinery Open House, we will have our +second online Open house!</p> +<p>The idea behind this event is to work together on revising and improving +<a href="https://coderefinery.org">coderefinery.org</a>. <a 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 href="https://coderefinery.org">coderefinery.org</a> is very welcome to join.</p> +<p>We will collect nodes in a <a href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>. +Please note that this document will be archived in our +<a 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 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 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 href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>.</p> + + + + + Collaborative work on the training material + 2019-12-13T00:00:00+00:00 + 2019-12-13T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/open-house/training-material/ + + <h3 id="welcome-to-the-first-coderefinery-open-house">Welcome to the first CodeRefinery Open House!</h3> +<p>The idea behind this event is to bring together people who are interesting in +contributing to the <a 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 href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>. +Please note that this document will be archived in our +<a 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 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 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 href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>.</p> + + + + diff --git a/blog/2020/04/14/first-online-workshop/index.html b/blog/2020/04/14/first-online-workshop/index.html new file mode 100644 index 000000000..4fb0e3146 --- /dev/null +++ b/blog/2020/04/14/first-online-workshop/index.html @@ -0,0 +1,1164 @@ + + + + Lessons learned from running our first online workshop - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Lessons learned from running our first online workshop + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Lessons learned from running our first online workshop

+ + + +
+ +

April 7-8, 2020, we gave our first online workshop on introduction to +Git (2 x 3 hours) with 22 +participants and we plan to deliver many more such workshops on a number of +topics based on our lessons.

+

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).

+

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.

+

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.

+

Breaks and ice-breaker

+
    +
  • 5 minute breaks were too short, better 10 minutes or longer, at least once an +hour.
  • +
  • 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 +presentation +and references therein).
  • +
  • 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.
  • +
  • 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.
  • +
+

Solving technical issues

+

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.

+
    +
  • 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.
  • +
  • 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. +
      +
    • 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.
    • +
    • We think that when pre-making the rooms, you have to create some empty +spares for this.
    • +
    +
  • +
+

Helpers

+

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.

+
    +
  • 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.
  • +
  • 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.
  • +
  • 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).
  • +
+

Breakout sessions

+

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.

+
    +
  • Fewer longer (15 min) breakout sessions were better than many short ones +(5-10 min).
  • +
  • This also means that we should group some exercises and not have them spread +out every 10 minutes.
  • +
  • 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.
  • +
  • Groups with 4-5 persons seem to work well, with one helper.
  • +
  • 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.
  • +
  • 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.
  • +
  • Some people just wanted to work alone, that's OK too.
  • +
  • Method 1: group work +
      +
    • Most teaching done in main room (this is important for the most important +and delicate topics).
    • +
    • Participants are in breakout rooms, working independently, sharing +screen/asking for help when they need to.
    • +
    +
  • +
  • Method 2: flipped classroom ("flipped classroom" isn't quite the right +term though) +
      +
    • Initial motivation in the main room.
    • +
    • Switch to breakout rooms early to go through the type-along exercises.
    • +
    • This only works when things are clear enough that people can't get too lost.
    • +
    • (*) 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".
    • +
    • (*) Instructor flips between the rooms every 1-2 minutes answering hard +questions and following progress.
    • +
    • Join the end for a wrap-up where best questions are discussed.
    • +
    • Helpers and instructors should write down the most important questions to +discuss afterwards.
    • +
    +
  • +
  • In reality, use the best of both depending on your specific lesson, +especially the asterisk (*) points! +
      +
    • Encourage the instructor to cycle through breakout rooms to watch +discussions and help out.
    • +
    • 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).
    • +
    +
  • +
  • Host can lose host rights sometimes. +
      +
    • Host should not enter breakout rooms, at least if they are not the original +host because then hostship is transferred to original host.
    • +
    • 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.
    • +
    • 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.
    • +
    +
  • +
  • Co-hosts seem to be able to jump between rooms freely after first joining +the room they were originally assigned to (i.e. can't select any group from +the main room).
  • +
  • At one point, Zoom dropped the whole meeting and everyone re-joined +(automatically). Pre-assembled breakout rooms got lost, which was annoying.
  • +
+

HackMD

+

HackMD was a vital resource, but you should have someone dedicated to watching it and keeping it organized.

+
    +
  • We were impressed how well it worked, holding up with 25 persons editing +without noticeable lag.
  • +
  • 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.
  • +
  • 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!
  • +
  • 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.
  • +
  • Students can come back after the course and find better researched answers, +if the in-course answer is unsatisfactory.
  • +
  • Make sure that the HackMD contents, without any identifying information, can +be made public after the course.
  • +
  • Instead of asking questions in a particular section of the HackMD and +searching and scrolling it was better to ask questions always at the current +bottom of the document. Add new section headings as you start new sections.
  • +
  • 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.
  • +
  • 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.
  • +
+

Chat

+

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.

+
    +
  • 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.
  • +
  • The chat can be used for formative assessment questions where participants +are asked to vote for correct answers in a multiple-choice question.
  • +
  • Practical announcements/instructions should be provided both written and +spoken, to reduce chance they are missed.
  • +
  • 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.
  • +
+

Organization

+

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.

+
    +
  • 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 should have been 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.
  • +
  • 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:
  • +
  • Roles during main lectures: +
      +
    • Host person in charge of overall schedule, timekeeping, breakout rooms and +Zoom chat/participant reactions, clearing feedback, balancing answering +questions, moderating, etc.
    • +
    • 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.
    • +
    • One person watching and formatting the HackMD (but more persons might be +needed if there are many questions).
    • +
    • Backup expert helpers for problems that require intensive debugging (at +least needed at the beginning).
    • +
    +
  • +
  • Roles during breakouts (this is more flexible): +
      +
    • Host in main room watching stuff.
    • +
    • One helper per room leading.
    • +
    • Lesson instructor hopping from room to room answering advanced questions +and also probing the general mood.
    • +
    +
  • +
  • Host makes all instructors and helpers co-hosts so that they can move between +rooms.
  • +
+

Screencasting

+

The requirements and recommendations are roughly like in-person.

+
    +
  • Showing history of commands via tmux or similar, coupled with displaying the +last commands +typed +really helps.
  • +
  • Gray/dark background terminal looked better than light background terminal.
  • +
+

How to make this more scalable?

+
    +
  • 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.
  • +
  • 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.
  • +
  • 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).
  • +
  • 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.
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2020/04/24/nordic-rse-conference/index.html b/blog/2020/04/24/nordic-rse-conference/index.html new file mode 100644 index 000000000..38e20e1d4 --- /dev/null +++ b/blog/2020/04/24/nordic-rse-conference/index.html @@ -0,0 +1,990 @@ + + + + Announcing the first Nordic-RSE conference - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Announcing the first Nordic-RSE conference + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Announcing the first Nordic-RSE conference

+ + + +
+ +

A couple of years ago, several CodeRefinery members and their +friends +started discussing how a Nordic network of Research Software Engineers +(RSEs) could be established, and soon thereafter the Nordic-RSE +initiative was launched. The idea was to +follow in the footsteps of very successful such initiatives in other +countries, most notably in the UK, the +Netherlands and +Germany. For the past two years +we have been taking the first steps in this direction. A survey was +conducted +to learn about the environment for people in RSE-related +roles. Information on groups and people +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 +the first Nordic-RSE conference, +Nordic-RSE2020, will take place in Stockholm between 1st and 2nd +December 2020!

+

About the conference

+

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.

+

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.

+

Who should attend?

+

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.

+

We welcome participation from:

+
    +
  • Researchers at any career stage who develop software for research +purposes;
  • +
  • Software developers working in a research context, whatever their +job title or field;
  • +
  • Those interested in advancing the understanding of how best to use +existing research software (e.g. with respect to scalability, +performance and/or reproducibility);
  • +
  • People from any organization providing tools, platforms or services +that benefit research software;
  • +
  • Anyone with a stake in research software (funders, publishers, +decision makers, etc).
  • +
+

We especially encourage first-time presenters and can offer mentoring +and other support with preparing your contribution.

+

Getting involved

+

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 +(nordic-rse-organizers@neic.no) if you would like to help or if you +have any questions on how to get involved with Nordic-RSE2020.

+

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 Swedish e-Science Research Centre +(SeRC), the Swedish National Infrastructure +for Computing (SNIC) and the Swedish e-science +collaboration (eSSENCE). By supporting +us, our sponsors are helping to raise awareness of the importance of +developing RSE career path in the Nordics.

+

Inviting new sponsors

+

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.

+

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 get in +touch.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2020/04/24/online-workshops-update/index.html b/blog/2020/04/24/online-workshops-update/index.html new file mode 100644 index 000000000..6b4815f83 --- /dev/null +++ b/blog/2020/04/24/online-workshops-update/index.html @@ -0,0 +1,973 @@ + + + + CodeRefinery workshops moving online - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery workshops moving online + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

CodeRefinery workshops moving online

+ + + +
+ +

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 +Git-intro 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 scale up and reach a larger audience +than possible with in-person workshops.

+

We learned many important lessons in this first experiment and we +tried to summarize them all in a previous +article. We +hope that these notes can be of help to others who are going online +with some of their teaching.

+

New notify-me form

+

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 new more +fine-grained notify-me +form 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.

+

Join an online workshops as a helper

+

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.

+

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 helper for upcoming online or in-person workshops in our +new notify-me +form. Remember +also that there is no better way to consolidate new knowledge than +teaching it to others!

+

Bring your own breakout room/helper

+

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.

+

Upcoming online workshops

+

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.

+

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.

+

Sign up for the notify-me +form if you +want to receive an email as soon as registration opens for these +workshoops!

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2020/04/24/rebase-vs-merge/index.html b/blog/2020/04/24/rebase-vs-merge/index.html new file mode 100644 index 000000000..f02ff20d8 --- /dev/null +++ b/blog/2020/04/24/rebase-vs-merge/index.html @@ -0,0 +1,956 @@ + + + + Rebase vs merge - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Rebase vs merge + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Rebase vs merge

+ + + +
+ +

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?

+

Let us take a closer look at rebase and merge, how they differ and in +which situations they are an advantage to use.

+

Rebase

+

Rebase gives you the opportunity to move the base of a branch to a new +base. Here we have two branches, master and feature_A.

+

Initial tree{:class="img-responsive" style="max-width:100%"}

+

We can rebase the feature_A branch to the last commit in master:

+
git checkout feature_A
+git rebase master
+
+

The result will look like this.

+

First rebase tree{:class="img-responsive" style="max-width:100%"}

+

Checking out master again, we can merge feature_A with master. 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.

+

FF-merge tree{:class="img-responsive" style="max-width:100%"}

+

Merge

+

If we don’t use rebase, but just merge feature_A with master, we get an merge commit, a new commit pointing to the previous last commit in master and the previous last commit in feature_A.

+

Plain merge tree{:class="img-responsive" style="max-width:100%"}

+

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.

+

Mixing rebase and merge

+

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:

+
    +
  • When we merge a semantic unit to master, we use merge.
  • +
  • When patch features, or do general corrections, we use rebase.
  • +
+

How will this look?

+

Merge revisited

+

Let us say we have created a new function or class, something that belongs together - a semantic unit we call feature_B. The base of feature_B is the last commit in master.

+

Master feature-b tree{:class="img-responsive" style="max-width:70%"}

+

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:

+
git checkout master
+git merge feature_B --no-ff
+
+

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:

+
git config --global branch.master.mergeoptions --no-ff
+
+

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.

+

No-ff merge tree{:class="img-responsive" style="max-width:100%"}

+

Rebase revisited

+

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, master 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.

+

No-ff merge tree plus patch{:class="img-responsive" style="max-width:100%"}

+

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:

+
git checkout fix_types
+git rebase master
+git checkout master
+git merge fix_typos --ff-only
+
+

The git graph will now look like this:

+

No-ff merge plus rebase{:class="img-responsive" style="max-width:100%"}

+

Rebase vs merge revisited

+

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 master 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.

+

[1] Getting Solid at Merge vs Rebase

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2020/04/24/rsh/index.html b/blog/2020/04/24/rsh/index.html new file mode 100644 index 000000000..e0f6828e2 --- /dev/null +++ b/blog/2020/04/24/rsh/index.html @@ -0,0 +1,931 @@ + + + + Research Software Hour - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Research Software Hour + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Research Software Hour

+ + + +
+ +

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 Research Software Hour that combines +the spirit of CodeRefinery with real-life examples from our daily +work - and hopefully, some entertainment, too. We hope watchers +experience the spirit of research software and computing.

+

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.

+

We wish to show why we enjoy research software and computing and how +you can, too. 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. 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.

+

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!

+

Read more at the website +and join us each Tuesday at 20:30 CEST on Twitch.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2020/04/27/nordichpc-tools/index.html b/blog/2020/04/27/nordichpc-tools/index.html new file mode 100644 index 000000000..b5343d3d2 --- /dev/null +++ b/blog/2020/04/27/nordichpc-tools/index.html @@ -0,0 +1,940 @@ + + + + CodeRefinery tools in action: NordicHPC - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery tools in action: NordicHPC + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

CodeRefinery tools in action: NordicHPC

+ + + +
+ +

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.

+

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.

+

Within the organization, you can find many examples of using +git (everything), +pull-request based +workflows +(e.g. sonar, git-pr, slurm2sql), automated +testing (e.g. .travis.yml in +sonar, envkernel, nbscript, slurm2sql), modular code +development +(e.g. ), open +licensing +(e.g. everything).

+

Below you see some examples of NordicHPC tools. Some tools are useful +to anyone, but some may be more interesting to cluster administrators.

+
    +
  • nbscrpt is an attempt to +provide the familiar script interface to Jupyter notebooks.
  • +
  • sonar and +sonar-web provide a way to +watch what is actually running on clusters.
  • +
  • git-pr saves you keystrokes +when making pull requests, though perhaps +cli.github.com takes its place.
  • +
  • slurm2sql imports the HPC +Slurm job history to a sqlite3 database. It can be useful, even +individually, to get and analyze data about your jobs.
  • +
  • envkernel is a Jupyter +extension which lets you run your kernels in different environments, +such as Docker, Singularity, and virtual/conda environments more +easily.
  • +
+

Do you have a nice tool that needs a home? You know what to do...

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2020/07/31/mega-coderefinery/index.html b/blog/2020/07/31/mega-coderefinery/index.html new file mode 100644 index 000000000..e29386917 --- /dev/null +++ b/blog/2020/07/31/mega-coderefinery/index.html @@ -0,0 +1,1565 @@ + + + + Report from the Mega-Coderefinery workshop - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Report from the Mega-Coderefinery workshop + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Report from the Mega-Coderefinery workshop

+ + + +
+ +

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.

+

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.

+

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.

+

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.

+

Executive summary

+
    +
  • Yes, we scale to 100 people pretty well, but you do need a good +vision about how to do it.
  • +
  • We maintained good learning outcomes with our adjusted strategies.
  • +
  • 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.
  • +
  • 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.
  • +
  • You need to put in extra effort to ensure things run smoothly and +make sure that everyone is prepared - anticipate all problems.
  • +
  • Roles of staff should be carefully explained and ideally not +overlapping, to reduce the cognitive load.
  • +
+

Mega-CodeRefinery

+

Webpage

+

Finnish HPC Kickstart

+

Webpage

+

Organization

+
    +
  • Pre-workshop install help times: +
      +
    • Emphasis on getting ready and making sure things are installed +and configured.
    • +
    • 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.
    • +
    • The installation verification time occurred right after the +"helper introduction meeting", so helpers would stay and help +people verify their installation.
    • +
    +
  • +
  • Installation instructions consist not just of installation, but also +verification instructions. +
      +
    • In particular, verifying of the git configuration, since if +there are any issues, it very quickly derails things.
    • +
    +
  • +
  • We created installation and verification videos for the most +critical part, git youtube +playlist: +
      +
    • One on verifying an installation (make repo, run it)
    • +
    • One for most common problems you might see and how to fix
    • +
    • One for advanced topics (ssh keys)
    • +
    +
  • +
  • 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.
  • +
  • We kept the Zoom meeting room open for 30 min to 1 hour after the scheduled lessons are over on that day. +
      +
    • This enabled continuation of exercises in re-opening breakout rooms.
    • +
    • Some participants could receive individual help by a helper or an expert helper.
    • +
    • In the main room, we did debriefing among instructors and helpers so that we could reflect on the day after.
    • +
    +
  • +
  • The larger the audience gets, the more diverse it is. +
      +
    • This causes more load on helpers and more effort for organizers +to prepare.
    • +
    • It also makes it harder to please everyone.
    • +
    • But on average, we felt that the outcome was about as expected.
    • +
    +
  • +
  • To scale to this cognitive load, carefully assign roles (roles +explained below): +
      +
    • Zoom host, focuses on chat, breakout rooms, registration, etc.
    • +
    • HackMD master
    • +
    • Expert helpers (special ops)
    • +
    • Instructors
    • +
    • Helpers
    • +
    • 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.
    • +
    +
  • +
+

Recommendations

+
    +
  • Place a large emphasis on getting ready for the workshop.
  • +
  • Have multiple ways for learners to verify their installation.
  • +
  • "Require" attendance in pre-workshop installation verification +times. Invite helpers there to get involved and practice basic +helping.
  • +
+

Teams

+

Our recruitment/sign-up strategy was twofold.

+
    +
  1. Open call for helpers and sign-up for individual learners.
  2. +
  3. “Bring your own breakout room”: We allowed learners to register as teams, where each team brought its own helper.
  4. +
+

Open call for helpers and sign-up for individual learners.

+
    +
  • First we had a general call for helpers to assign a breakout room with individual learners.
  • +
  • Our plan was to allocate one helper for 5 learnes accepted approx. (the number of helpers) * 5 of individual leraner sign-ups.
  • +
  • We tried to sort these learners by university/country/field, but didn't put too much effort into this.
  • +
  • Helpers and learners were told which team they will be in before the workshop (personalized email with breakout room number).
  • +
  • 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. +
      +
    • For a long workshop like this one (6 half-days), getting to know each other seemed to result in more interaction by the end.
    • +
    • 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.
    • +
    • It took a session or two for people to get comfortable with their room, but once they did it went well.
    • +
    +
  • +
+

"Bring your own breakout room"

+
    +
  • 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.
  • +
  • Research shows that multiple adopters in an organization greatly increases uptake of new tools (Graf-Vlachy, L., Buhtz, K. & König, 2018). Encourage people to come with friends or groupmates.
  • +
  • How it worked: +
      +
    • This is implemented as a "Team name" option when registering.
    • +
    • They are put in their own breakout room together.
    • +
    +
  • +
  • Advantages: +
      +
    • Scalability: 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.
    • +
    • Team building: 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.
    • +
    • Possibility to use familiar examples: 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.
    • +
    +
  • +
  • The concept of teams could be extended to in-person workshops, too. +
      +
    • Not necessarily pre-assigned, but cleverly organize tables, expect the group to stay together all days.
    • +
    • One could give the teams names and so on, to increase team spirit.
    • +
    +
  • +
+

Recommendations

+
    +
  • Accept a "team name" as part of registration. These people will be +put into the same breakout rooms. Worst case, it isn't used.
  • +
  • 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.
  • +
+

Breakout rooms management

+
    +
  • Assign names depending on breakout room and role. Here, n is the +breakout room number: +
      +
    • (n) First Last - learner
    • +
    • (n,H) First Last - helper
    • +
    • 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))
    • +
    • (CR) First Last for instructors and expert helpers (here "CR" +stood for CodeRefinery staff).
    • +
    +
  • +
  • Initial breakout room assignments serves as a guideline, rooms are +constantly adjusted as needed but we try to keep teams together.
  • +
  • Preferably, one breakout room should have minimum 4 learners.
  • +
  • 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.
  • +
  • Some people don't join with the right Zoom name. +
      +
    • Other co-hosts can browse the registration list and manually +rename participants who didn't name themselves correctly.
    • +
    • Then, the Zoom host only has to worry about assigning them into +the right rooms, and not looking up everyone on the lists.
    • +
    +
  • +
  • Our registration system, Indico, made this management much easier +than it could have been. +
      +
    • After registration closed, we added a "Room" field to the +registration data.
    • +
    • 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.
    • +
    • We could send personalized messages to each person with the +Indico mail merge function
    • +
    • The majority of people did manage to name themselves correctly.
    • +
    +
  • +
+

Recommendations

+
    +
  • Consistent naming of participants (and an order that sorts properly) +makes managing breakout rooms reasonable.
  • +
  • Consider how your registration system can send personalized emails +to each person.
  • +
+

Helper training

+

Regular helpers:

+
    +
  • Have a helper call the previous week. Actually, have two so that +everyone can make it to at least one.
  • +
  • Helper training: + +
  • +
  • Focus on training for managing time and keeping a flow going. This +is described in our document.
  • +
  • Helpers do not need to be experts in everything. +
      +
    • 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.
    • +
    +
  • +
  • Helper training is focused on: +
      +
    • Motivation of learners and teaching psychology.
    • +
    • How to help: don't do it for them, etc.
    • +
    • Keeping the flow going, encourage everyone to speak up and +share.
    • +
    • Knowing when and how to call for an expert helper to come to the +room.
    • +
    +
  • +
+

Special expert helpers:

+
    +
  • There are also "special expert helpers" (we need a new name), who +are experts in the material and problems that may come up. +
      +
    • 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.
    • +
    • Special experts aren't assigned to any particular breakout room. +Instead, they are able to go to any room that needs more help.
    • +
    • 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.
    • +
    • 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.
    • +
    +
  • +
  • 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.
  • +
  • Special experts also serve as backup helpers and can take over or +permanently join a room if a helper is unprepared.
  • +
  • The instructor is also encouraged to pop into some breakout rooms to +see how things are going. This may be enough in small workshops.
  • +
  • Special experts should be Zoom co-hosts. They are then able to go +into any breakout room they want (the mechanics of this is not +obvious, see our helper training info for more).
  • +
  • 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.
  • +
+

Recommendations

+
    +
  • Hierarchical helpers allows you to extend to a greater size.
  • +
  • You need to put thought into how helpers work and prepare them well. +We should develop a special, quick training for them.
  • +
  • Special expert helpers connect the instructor (occupied with +teaching) to the pulse of the breakout rooms and serve as helper +mentors.
  • +
+

Lesson adjustment

+
    +
  • Make the exercise sessions as long as possible, group things +together. +
      +
    • There is a significant overhead to each breakout session, +becoming adjusted, figure out just what it is you are supposed +to do.
    • +
    +
  • +
  • Type-along is hard, given limited screen space to both watch and do.
  • +
  • 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.
  • +
  • With hierarchical helpers and more people in general, make sure that +each exercise and hands-on session is as self-contained as possible. +
      +
    • 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.
    • +
    +
  • +
+

Recommendations

+
    +
  • Consider limits of online formats and how difficult it is to do +interactive work.
  • +
+

Exercises and breakout sessions

+
    +
  • Very clearly say what the goal is, what the duration is (duration +and time it ends), etc. for each lesson
  • +
  • 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 +
      +
    • e.g. "we expect you to finish 1-3, 4-5 are optional. 20 +minutes, ending at xx:45".
    • +
    • When participants are in two time zones, it is extra important +to use this format of not specifying hour.
    • +
    +
  • +
  • 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".
  • +
+

Recommendations

+
    +
  • Have lots of "meta-talk" about what you are doing, what expectations +are, etc.
  • +
+

HackMD

+
    +
  • HackMD serves as a side channel to answer questions, so that the +main flow is not disrupted. +
      +
    • Learners keep it open and always watch and ask questions at the +bottom.
    • +
    +
  • +
  • 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. +
      +
    • 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).
    • +
    +
  • +
  • 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.
  • +
  • HackMD starts failing with a lot of people +
      +
    • We saw the limits at 50-100 people. If most people leave it in +view mode, it gets a little bit better.
    • +
    • If there isn't much text in it, it's better (~10k characters is +low).
    • +
    • When the document grew too long: we moved some of the text from +previous episodes to a side-HackMD and linked to it.
    • +
    • The failure mode was usually not being able to edit.
    • +
    • 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.
    • +
    • We even saw Google Docs fail with 50 simultaneous editors during +an icebreaker (and our icebreakers with hackmd seemed to work +with ~50).
    • +
    +
  • +
  • Always have people ask questions and comment at the bottom. +
      +
    • There is not a "questions section" and "lesson section", always +write at the bottom.
    • +
    • 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.
    • +
    +
  • +
  • Suggested heading arrangements (but hackmd master does whatever +makes sense): +
      +
    • # for page title
    • +
    • ## for each lesson
    • +
    • ### for each episode
    • +
    • #### for each exercise, group discussion, etc. (if it needs to +be smaller than ###.)
    • +
    +
  • +
  • Make participants aware that we plan to publish questions and +answers later as workshop outcomes. +
      +
    • After the workshop we add questions and answers from the HackMD +document to the workshop page.
    • +
    • 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.
    • +
    • 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 [name=Myname] 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 +[name=Myname]. 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.
    • +
    • 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.
    • +
    +
  • +
+

Zoom

+
    +
  • Have a dedicated host, who focuses on breakout rooms and +registration related matters.
  • +
  • Use a client, not the web browser - though web browser is minimally +OK.
  • +
  • Assigning leareners to breakout rooms takes a long time, but luckily +Zoom can make it easy enough: +
      +
    • The "pre-assign breakout rooms" seems to only work within one +organization, thus was useless to us
    • +
    • When people name themselves according to the (n) Firstname Lastname system, people sort properly and it becomes very fast +to assign hundreds of people to their rooms.
    • +
    +
  • +
  • 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. +
      +
    • This is important when you approve entry to the meeting room from the waiting room.
    • +
    • 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.
    • +
    +
  • +
  • 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 CodeRefinery Zulip channel. +
      +
    • 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.
    • +
    • HackMD can also be used to discuss among staff, of course always +at the very bottom.
    • +
    +
  • +
  • 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).
  • +
  • We saw some interesting Zoom problems: +
      +
    • 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.
    • +
    • 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.
    • +
    • 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.
    • +
    +
  • +
+

Recommendations

+
    +
  • Managing breakout rooms isn't too hard, but do practice.
  • +
+

Streaming

+

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.

+
    +
  • +

    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.

    +
  • +
  • +

    What's the point of streaming?

    +
      +
    • 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.
    • +
    • 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.
    • +
    • We can imagine a fully federated system: There is one small Zoom +meeting with instructors doing the teaching. All 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.
    • +
    +
  • +
  • +

    Stream as an overflow

    +
      +
    • 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
    • +
    • We emphasized that the experience would not be the same, and +they should try to come to another workshop later.
    • +
    • 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.
    • +
    +
  • +
  • +

    Interacting with stream viewers

    +
      +
    • We got questions and comments on the stream chat.
    • +
    • 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)
    • +
    • Stream viewers seemed pretty happy with what they were getting.
    • +
    +
  • +
  • +

    Risks of streaming

    +
      +
    • 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.
    • +
    • 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.
    • +
    • Risk of learner audio or video being broadcast. Zoom provides +tools ("spotlight video") to prevent this, but it doesn't work +all the time.
    • +
    • Extra effort needed. The marginal cost isn't that great in the +end, once you know how it works.
    • +
    +
  • +
  • +

    Zoom can send a video feed to a streaming service, which +re-broadcasts to the whole world

    +
      +
    • This has to be enabled under your account, then can be +configured for a particular meeting.
    • +
    • "Custom streaming server" seems to be able to broadcast to +anything. In particular, we used Twitch to do our streaming.
    • +
    +
  • +
  • +

    Keeping learner's videos out of the stream

    +
      +
    • Privacy of learners is the first prerequisite to streaming.
    • +
    • 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.
    • +
    • Breakout rooms never recorded or streamed (though some groups +asked if they could be recorded).
    • +
    • Zoom "Spotlight video" means that only that person should go +out into the stream. +
        +
      • The zoom host must not be in the gallery view.
      • +
      • This bugs 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.
      • +
      • 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.
      • +
      • We really need to investigate this more.
      • +
      +
    • +
    +
  • +
  • +

    What to do with the stream while the breakout rooms are going on?

    +
      +
    • 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
    • +
    • 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.
    • +
    +
  • +
+

Recommendations

+
    +
  • 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.
  • +
  • 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.
  • +
+

Recording

+
    +
  • Once you do streaming, it is a smaller step to recording and posting +the videos. +
      +
    • Who is benefited by the recordings? Perhaps not brand new +learners, but the learners who were in the workshop can review +them again later.
    • +
    +
  • +
  • If recordings require post-processing, they will almost never get +done. +
      +
    • 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.
    • +
    +
  • +
  • A surprising number of learners have asked for the videos after the +workshop. +
      +
    • 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.
    • +
    • When we can't provide them quickly, their usefulness is much +reduced.
    • +
    +
  • +
+

Recommendations

+
    +
  • Clearly announce the recording privacy statement when first +registering.
  • +
  • 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.
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2020/09/29/git-pr/index.html b/blog/2020/09/29/git-pr/index.html new file mode 100644 index 000000000..e5d07a1fd --- /dev/null +++ b/blog/2020/09/29/git-pr/index.html @@ -0,0 +1,949 @@ + + + + git-pr: painless small pull requests - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - git-pr: painless small pull requests + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

git-pr: painless small pull requests

+ + + +
+ +

git-pr: painless small pull requests

+

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, https://github.com/NordicHPC/git-pr.

+

Let's talk about how it works.

+

Making a change

+

First, git-pr will help you to make the new feature branch. git pr branch $branch_name willcreate a new feature branch off of the +upstreamdefault branch and check it out for you. You might want to +git fetch first. Make your commits off of this branch.

+

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.

+

Then, to push the pull request, I use git pr open. 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.

+

One thing that git-pr will do is figure out the upstream and your +local copy by yourself. Default upstream goes in priority order +upstreamorigin, Default personal fork goes in the order +localoriginupstream, 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.

+

git pr prune will remove all merged branches both locally and on the +remote (possibly dangerous!).

+

Various git pr fetch* commands will fetch pull requests into a local +pr/NNN branch.

+

There are various other small useful things, with it, but this is the +main part.

+

These are only 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.

+

About git-pr

+

You can find it at https://github.com/NordicHPC/git-pr - it is a +single shell script to copy to your path.

+

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!

+

It supports both Github and Gitlab, though Gitlab support is less well +tested.

+

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.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2020/11/13/carpentry-community-discussion-nordic/index.html b/blog/2020/11/13/carpentry-community-discussion-nordic/index.html new file mode 100644 index 000000000..5f6c46d79 --- /dev/null +++ b/blog/2020/11/13/carpentry-community-discussion-nordic/index.html @@ -0,0 +1,965 @@ + + + + Community discussion in Nordic and Baltic countries - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Community discussion in Nordic and Baltic countries + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Community discussion in Nordic and Baltic countries

+ + + +
+ +

This blogpost is based on the notes made on Carpentries Community Discussion Etherpad on the 30th Oct. 2020.

+

Summary

+

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?

+

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 below.

+

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.

+

There are ongoing initiatives to develop Nordic community further. Among other things, information about the Nordic Research Software Engineer initiative and its first online get-together event on 30th Nov. - 2nd Dec. was announced.

+

Workshop debriefing

+

Experiences from two recently held online Carpentries workshops were shared and discussed:

+

Sweden, Stockholm -- Mix and Match (SQL, OpenRefine, Python programming and plotting)

+

A self-organized workshop by KTH, Stockholm University, and Karolinska Institute

+
    +
  • (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.
  • +
  • (Radovan) (In his experiences from teaching online workshops in CodeRefinery) 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).
  • +
  • (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.
  • +
+

Norway, Bodø -- DC social science

+

A centrally-organized workshop at Bodø University

+
    +
  • (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.
  • +
  • (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.
  • +
  • (Lina) Depending on the context?
  • +
  • (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.
  • +
  • (Joakim) Important thing is not give pressure on instructors.
  • +
  • (Lina) Letting learners take over instructor's screen would be interesting.
  • +
  • (Lars) Polls for ice-breakers as well. Easy to rush through, but important not to, especially when you cannot see faces as feedback.
  • +
  • (Radovan) Hopefully useful tips for online teaching learned from CodeRefinery workshops: https://coderefinery.github.io/manuals/
  • +
+

Community building, collaboration, and ongoing initiatives in the Nordic and Baltic region

+
    +
  • (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 research bazaar at the University of Oslo earlier this year: +
      +
    • goal: making 3D holiday greeting card using HTML and JavaScript: https://arworkshop.teebusch.repl.co/card1.html
    • +
    • The lesson material is all there: https://repl.it/@Teebusch/arworkshop
    • +
    +
  • +
  • (Joakim) Suggestion of a repository of Carpentries Nordic/Baltic community members with specialities and skills
  • +
  • (Annika) Google Sheets for this?
  • +
  • (Anne) EOSC Nordic claims to be a knowledge-hub
  • +
  • (Radovan) Is also working on mapping.
  • +
+

Announcements

+
    +
  • 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)
  • +
  • Local-nordic Carpentries mailing list: https://carpentries.topicbox.com/groups/local-nordic
  • +
  • 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)
  • +
+

Participant list

+
    +
  1. Annika Rockenberger (host, Norway, Oslo)
  2. +
  3. Naoe Tatara (co-host, Norway, Oslo)
  4. +
  5. Kerstin Lenk (Finland, Tampere)
  6. +
  7. Lars Kjær (Denmark, Copenhagen)
  8. +
  9. Tobias Busch (Norway, Oslo)
  10. +
  11. Lina Andrén (Sweden, Stockholm)
  12. +
  13. Mohamed Abdelhalim (Norway, Oslo)
  14. +
  15. Annajiat Alim Rasel (Bangladesh, Dhaka)
  16. +
  17. Joakim Philipson (Sweden, Stockholm)
  18. +
  19. Thomas Arildsen (Denmark, Aarborg)
  20. +
  21. Radovan Bast(Norway, Tromsø)
  22. +
  23. Samantha Wittke (Finland, Helsinki)
  24. +
  25. Olav Vahtras (Sweden, Stockholm)
  26. +
  27. Anne Fouilloux(Norway, Oslo)
  28. +
  29. Richard Darst (Finland, Helsinki)
  30. +
+

Thank you for all the contributions!

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2021/09/01/bi-weekly-community-calls/index.html b/blog/2021/09/01/bi-weekly-community-calls/index.html new file mode 100644 index 000000000..b3938e5f8 --- /dev/null +++ b/blog/2021/09/01/bi-weekly-community-calls/index.html @@ -0,0 +1,914 @@ + + + + Bi-weekly Community Calls started - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Bi-weekly Community Calls started + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Bi-weekly Community Calls started

+ + + +
+ +

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.

+

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!

+

So far, we informed and discussed among others;

+
    +
  • CodeRefinery project: current status and future,
  • +
  • How to improve outreach and publicity,
  • +
  • Importance of possibility to provide ECTS,
  • +
  • How CodeRefinery should give credits to contributions by volunteers,
  • +
  • Mentorship program for exercise leads after the workshop,
  • +
  • How to "order" workshops
  • +
+

For more details of each call, please visit the archive of the minutes

+

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 the Community Call HackMD.

+

We all look forward to seeing you at community calls and Zulip :)

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2021/11/20/phase-2-lessons-learned/index.html b/blog/2021/11/20/phase-2-lessons-learned/index.html new file mode 100644 index 000000000..72efb5af2 --- /dev/null +++ b/blog/2021/11/20/phase-2-lessons-learned/index.html @@ -0,0 +1,1250 @@ + + + + Lessons learned from phase 2 of the project - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Lessons learned from phase 2 of the project + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Lessons learned from phase 2 of the project

+ + + +
+ +

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.

+

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.

+

Workshop/event organization

+

Metrics

+
    +
  • 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 (https://coderefinery.org/about/statistics/) which really simplified +reporting.
  • +
+

Survey

+
    +
  • Survey should be designed considering analysis and presentation of results, +as well as and what to focus on (what we want to show off).
  • +
  • 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.
  • +
  • How to get a better and precise overview of "actual" participants: +
      +
    • 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.)
    • +
    • 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.
    • +
    • Post-workshop survey: +
        +
      • 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.
      • +
      • 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.
      • +
      • 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.
      • +
      +
    • +
    +
  • +
+

Capacity and workshop format

+
    +
  • How to afford as many as possible learners while keeping good learner experiences +or even improving them.
  • +
  • How we carried out online workshops in 2020-2021: +
      +
    • Standard 3-full day CR workshop was transformed into 6-half day format, typically Tuesday-Thursday over 2 consecutive weeks.
    • +
    • Helper/Exercise lead onboarding sessions as well as installation help drop-in sessions were held typically a week before the 1st week.
    • +
    • All the exercises were done in breakout room with a group of regular members.
    • +
    • We recruited exercise leads and accepted 5-6 individual learners per exercise lead plus team registration including their own exercise lead.
    • +
    • We used priority criteria based on countries and/or institution's characteristics.
    • +
    • Problems/challenges we experienced: +
        +
      • Withdrawals on short notices and no-shows
      • +
      • Much hassles by the coordinators
      • +
      • Feedback showing both positive and negative experiences with regular members/exercise leads
      • +
      +
    • +
    +
  • +
  • What is the optimal format of help provision and exercises: +
      +
    • Should the group members be fixed or more ad-hoc or even hop-in-and-out?
    • +
    • 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.
    • +
    • "Webinar (stream)-by default" with an option for joining in zoom-meeting room for extra help may work better (ref. Python for SciComp 2021)?
    • +
    • Post-workshop Q&A session time/day would be useful?
    • +
    • 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.
    • +
    +
  • +
+

Communication with participants

+
    +
  • Indico's email function worked well to send information about the workshop to participants/signers.
  • +
  • We experienced few cases of typo in email address, thus we could not reach registrants.
  • +
  • Online collaborative notebook (HackMD and similar) worked well for Q&A during the lectures.
  • +
+

Certificates

+ +

Planning

+
    +
  • 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.
  • +
  • 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.
  • +
+

Lesson development

+
    +
  • Only happened before workshops. This was very efficient but introduced stress.
  • +
  • It probably requires a calendar event to dedicate time for this.
  • +
  • "software installation and setup" +
      +
    • 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).
    • +
    • The procedures need validations given diverse scenarios.
    • +
    • 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).
    • +
    +
  • +
  • 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.
  • +
  • It is important to make the contribution criteria clear for making lesson citable: +
      +
    • “creator”(author): significant contributions
    • +
    • “contributor”/Editor: reviewing/approving contributions
    • +
    • “contributor”/Other: smaller contributions
    • +
    +
  • +
  • Ref: https://hackmd.io/@coderefinery/citable-lessons
  • +
  • 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: +
      +
    • Institution/Organization etc.
    • +
    • Type of event and link to the event page: +
        +
      • Workshop
      • +
      • Credited course
      • +
      • Non-credited course
      • +
      • Other type (specify)
      • +
      +
    • +
    • Which lessons were used +
        +
      • Only CR lessons (which ones)
      • +
      • CR lessons (which ones) as well as other lesson materials (what materials?)
      • +
      • part of CR lessons (where of it)
      • +
      +
    • +
    +
  • +
+

The Carpentries

+

Membership and use of its benefits

+
    +
  • Membership tier: Platinum, 3 years (2018 Nov. 1 - 2021 Nov. 1)
  • +
  • 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.
  • +
  • Use of instructor seats and Centrally-Organized Workshops (COW):
  • +
+ + + + +
yearused seatsbadged instructorsCOW
2018-2019138-
2019-20201283
2020-2021*1061
+
    +
  • For each membership year, NeIC had 15 priority seats for the instructor training and 6 COWs without fee.
  • +
  • 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.
  • +
  • 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.
  • +
+

Relationship with the Carpentries and recognition of CR in the Carpentries community

+ +

Regional Coordinator (RC)

+
    +
  • 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 35 workshops. 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.
  • +
  • RC initiated the following: + +
  • +
  • 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.
  • +
  • Upon the expiration of the NeIC's membership, RC in Nordic region is also discontinued.
  • +
+

Dissemination of opportunities to use the NeIC's membership benefit

+
    +
  • Dissemination of opportunities were done via CR and NeIC website, CR Zulip chat, CR newsletter, at relevant workshops, CR twitter, etc.
  • +
  • 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.
  • +
+

Uptake of the membership benefits

+
    +
  • 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.
  • +
  • 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).
  • +
  • Provision of teaching/learning opportunities in Carpentries SOWs/COWs initiated by CR might have been helping; +
      +
    • to disseminate the usefulness of the Carpentries workshops, as well as
    • +
    • to provide a "safe" place for newly-badged instructors to try teaching.
    • +
    • 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.
    • +
    +
  • +
  • The Carpentries is also changing along time: +
      +
    • Membership price model and the price itself had been stable for a couple of years, but will be changed within 2021.
    • +
    • RC role is to be changed in the process of re-designing community development program. 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 (Community Initiatives). The discount offer of having an RC is to be discontinued.
    • +
    • The Carpentries will have online workshops as their standard option to offer in near future; it is so far only as pilot.
    • +
    +
  • +
+

Meeting minutes and decision tracking

+
    +
  • 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.
  • +
+

Time reporting and vacation planning

+
    +
  • 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).
  • +
  • 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.
  • +
  • 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).
  • +
  • In hindsight, it would have been better to offer more 1-1 discussions between +project manager and staff.
  • +
  • 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.
  • +
  • It reduces confusion to share a vacation plan: not only for the project +manager but for the entire staff.
  • +
+

Issue/task tracking

+
    +
  • 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.
  • +
  • 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.
  • +
  • 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.
  • +
+

Support line/ request tracker

+
    +
  • We got roughly 200-300 tickets/year.
  • +
  • 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.
  • +
  • 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.
  • +
  • Most tickets arrive around workshops.
  • +
  • Most non-workshop tickets were to unblock GitLab accounts.
  • +
+

Communication within the community and the project

+
    +
  • We have started within NeIC Slack.
  • +
  • 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.
  • +
  • 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.
  • +
  • We are unsure however, whether the problem with outreach is lack of tools or lack of processes.
  • +
  • One way out is to move communication to the public space which we have +done when moving from Slack to Zulip.
  • +
  • Internally Zulip chat has been good for the project.
  • +
  • In addition, we have managed to engage many helpers and volunteers for each workshop.
  • +
  • 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.
  • +
  • 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.
  • +
+

Data management

+
    +
  • Google Drive has served us well in the first years.
  • +
  • However, this storage was connected to a personal account.
  • +
  • Over time we used GitHub more and more.
  • +
  • HackMD was used a lot in the last 2 years of the project, both for workshops and notes and meetings.
  • +
  • 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.
  • +
  • We should have created a data management plan.
  • +
  • Relevant to some points written in Legal questions.
  • +
+

Community engagement

+
    +
  • There was a constant stream of people interested in becoming more involved.
  • +
  • We have activated some, but as 'communication' says above, some potential was left unrealized.
  • +
  • Growing a community requires also promoting newcomers and mentoring.
  • +
  • Mentoring also requires volunteer mentors.
  • +
  • With more mentoring and more follow-up we could have had engaged more people and more organizations.
  • +
  • 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. Supporting community champions and running champions programs
  • +
  • How to keep the community engagement up and running without "burn-out" is a constant challenge.
  • +
+

Stakeholder engagement

+
    +
  • Steering group seems to have become less engaged over time.
  • +
  • At the beginning of the project the SG actively influenced and gave ideas and input and suggestions.
  • +
  • Over time the steering group meetings and communication grew more and more +passive and turned into a reporting channel.
  • +
  • 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.
  • +
+

Infrastructure hosting (GitLab service)

+
    +
  • Both the steering group and also the project staff became less interested in this over time.
  • +
  • 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).
  • +
+ +
    +
  • The project was lacking support in GDPR-related questions +
      +
    • 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?
    • +
    • 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 GDPR is not followed due to its server existence outside of the EU +(especially in +US) +(Ref. Recommendations by European Data Protection +Board)
    • +
    • 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").
    • +
    • 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.
    • +
    +
  • +
  • "Rights to work results" vs. Open Science +
      +
    • Ref: a page about "Rights to work results" at University of Oslo
    • +
    • General clarification is needed here so that everyone won't be in trouble later.
    • +
    • 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.
    • +
    +
  • +
  • We also lacked support in questions about how to start an own organization/ spin-off.
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2021/11/21/towards-citable-lessons/index.html b/blog/2021/11/21/towards-citable-lessons/index.html new file mode 100644 index 000000000..de8169b85 --- /dev/null +++ b/blog/2021/11/21/towards-citable-lessons/index.html @@ -0,0 +1,1036 @@ + + + + Towards citable lessons - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Towards citable lessons + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Towards citable lessons

+ + + +
+ +

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.

+

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.

+

Technical choices

+
    +
  • 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.
  • +
  • We will convert the 3 remaining Jekyll lessons to Sphinx to simplify pdf export.
  • +
  • We will not start with https://allcontributors.org/ because it requires each contributor +to have a GitHub account which we have found a too strict limitation.
  • +
  • We start with tracking authorship in CITATION.cff since GitHub presents a +"cite as" button when this file is present.
  • +
  • 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.
  • +
+

Distinguishing authors and contributors

+
    +
  • Removed "code" (lesson material) does not mean removing authorship unless the author prefers to be removed.
  • +
  • Example for how Carpentries do it (unix shell lesson): + +
  • +
  • Definitions of the roles: +
      +
    • "creator": significant contributions
    • +
    • "contributor"/Editor: reviewing/approving contributions
    • +
    • "contributor"/Other: smaller contributions
    • +
    +
  • +
  • On Zenodo we start with "creator" (author) and "contributor" (other). +
      +
    • See also categories that Zenodo understands: https://developers.zenodo.org/#representation (search for "creators" and "contributors")
    • +
    • 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.
    • +
    +
  • +
  • We still need to verify whether CITATION.cff and/or .zenodo.json can map to +the definitions of roles (above).
  • +
+

How we will reach out to creators and contributors

+
    +
  • We will do this on a per-lesson basis and we will start with the lessons +which we teach the most often.
  • +
  • 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.
  • +
  • We reach out to everybody and ask whether they want to be contributor or author.
  • +
  • If a person cannot be reached, we do not add the person without consent and +rather add the person later once we reach them.
  • +
  • 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.
  • +
  • On the GitHub issue we will ask authors for their ORCID.
  • +
+

Archiving lessons as pdf

+
    +
  • 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.
  • +
  • We have concluded that we wish to attempt depositing pdf versions unless this +turns out too difficult.
  • +
  • The pdf versions will be generated automatically as part of a "release" workflow.
  • +
  • The automatic pdf generation is relatively straightforward with Sphinx +lessons but less trivial with Jekyll-based lessons.
  • +
  • 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.
  • +
  • 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.
  • +
+

ORCID vs. Zenodo community

+
    +
  • We have decided against introducing a project ORCID for CodeRefinery and +rather collect related records in a CodeRefinery Zenodo community.
  • +
+

How we wish to test the workflow

+
    +
  • For one or two example lessons we will create a fork and test the release +deployment and DOI generation on Zenodo sandbox.
  • +
+

Suggested workflow to make lessons citable via Zenodo

+
    +
  • Add a .zenodo.json to the lesson repo, for example:
  • +
+
    "creators": [
+        {   
+            "orcid": "0000-0002-1825-0097",
+            "affiliation": "Feline research institute",
+            "name": "Field, Gar"
+        },
+        {   
+            "orcid": "0000-0002-1825-0097",
+            "affiliation": "Feline research institute",
+            "name": "Cat, Felix"
+        }
+    ],
+
+
    +
  • Generate pdfs from Sphinx sources via LaTeX: +
      +
    • In conf.py, set latex_engine = 'xelatex' (makes emojis work), then make clean ; make latexpdf.
    • +
    • This will become part of GitHub Actions, it will not be a manual step.
    • +
    +
  • +
  • Create a release of the lesson on GitHub.
  • +
  • On Zenodo, check syncing with GitHub.
  • +
+

Resources

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2021/11/25/lessons-learned-may-2021/index.html b/blog/2021/11/25/lessons-learned-may-2021/index.html new file mode 100644 index 000000000..65e82560b --- /dev/null +++ b/blog/2021/11/25/lessons-learned-may-2021/index.html @@ -0,0 +1,1006 @@ + + + + Lessons learned from the May 2021 online workshop - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Lessons learned from the May 2021 online workshop + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Lessons learned from the May 2021 online workshop

+ + + +
+ +

May 10-12 and 18-20, 2021, we gave our at that time largest CodeRefinery +online workshop (6 x 3.5 hours) with 128 participants. +We plan to deliver many more such workshops based on our lessons.

+

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.

+

This complements our lessons learned from our first online workshop.

+

Lesson coordination

+
    +
  • 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.
  • +
  • The teaching coordinator should check in for basic practicalities with each instructor: +
      +
    • team-teaching if desired
    • +
    • material to cover
    • +
    • schedule breaks
    • +
    • test screenshare prior to the lesson
    • +
    • how to control breakouts yourself
    • +
    +
  • +
  • Be clear about video on or off for instructors. If multiple people on then gallery OBS capture doesn't work.
  • +
  • Include role mentoring as part of the coordination initial meeting.
  • +
  • More talk about "voice of audience".
  • +
  • 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.
  • +
  • Inform individual exercise leads about how the set group of individual learners is like (e.g. expecting how many in the room, OS, background).
  • +
  • Inform exercise leads and all the team members who are replacing when a regular exercise leader is absent.
  • +
  • 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.
  • +
+

Zoom and OBS

+
    +
  • Ask participants to join with video OFF when they join after the workshop started (otherwise they may appear in the stream).
  • +
  • Huge amount of work that many people did making the instructions, and testing them on all the different OSs, surely helped.
  • +
  • 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.
  • +
  • Gallery insert view is risky.
  • +
  • You can't spotlight someone when only two peoples' videos are on.
  • +
  • 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.
  • +
  • It takes manual work to switch from one to two people (changing cropping), and also two to three (alignment).
  • +
  • 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.
  • +
  • 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.
  • +
  • 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.
  • +
  • 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.
  • +
  • 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.
  • +
  • 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).
  • +
  • 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.
  • +
  • OBS helper: would be nice to have a way to unmute both of us.
  • +
+

Collaborative notes

+
    +
  • Don't try to insert html into HackMD :sweat_smile:
  • +
  • HackMD at this size seems to have worked, not all the time for everybody, but sufficiently.
  • +
  • Using one HackMD for twitch and zoom was a good idea.
  • +
  • Provide plan for the day (including breaks and exercise plan) on top of HackMD and mention it at the beginning of the day.
  • +
  • When talking about HackMD, please share it, it gives people something to +look at.
  • +
  • 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.
  • +
+

Installation and tools

+
    +
  • +

    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.

    +
  • +
  • +

    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)

    +
    +

    [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?

    +
    +
  • +
+

Presenting and coordinating

+
    +
  • Coordination plan should be continuously reviewed.
  • +
  • Strong director role is needed.
  • +
  • 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.
  • +
  • Make it clear what someone needs to have open: Screenshare, HackMD, your terminal. You get links to the episodes from HackMD.
  • +
  • Avoid breaks between exercise explanation and doing exercise.
  • +
  • Clearly mark interruptions/speaking up during presentations as interruption (as in: not part of the presentation).
  • +
  • Spotlight video changes every time screenshare changes: It is defininitely still important to warn before stopping screen sharing (more than before)
  • +
  • Announcing "I'm about to take the screenshare" and waiting two seconds works +well.
  • +
  • Share screen for what you are talking about. Makes editing a bit easier.
  • +
  • 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.
  • +
+

Lesson content

+
    +
  • Staging area: as usual, a difficult episode +
      +
    • What parts of the episode is a dependency for other parts of CodeRefinery?
    • +
    • Remove it?
    • +
    • Make it clear it is advanced/optional/you won't get it yet, when it is taught?
    • +
    • Move it to the end?
    • +
    +
  • +
+

Communication with participants

+
    +
  • Indico: select "none" after selecting some registrants to for example sending emails (otherwise selection remain).
  • +
  • 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.
  • +
  • As for the "team registrations", as long they include an EL, we should send an acceptance ASAP.
  • +
  • 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.
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2022/05/04/improving-workshop-registration/index.html b/blog/2022/05/04/improving-workshop-registration/index.html new file mode 100644 index 000000000..c7c6105e9 --- /dev/null +++ b/blog/2022/05/04/improving-workshop-registration/index.html @@ -0,0 +1,1173 @@ + + + + Our plans to improve our workshop registration process - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Our plans to improve our workshop registration process + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Our plans to improve our workshop registration process

+ + + +
+ +

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 297 registrants which is a +record for us.

+

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.

+

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.

+

Below we summarize our observations and strategies for the upcoming events.

+

Goals of a good registration

+
    +
  • +

    Avoid chaos during the workshop

    +
      +
    • Avoid misunderstandings about registration types
    • +
    • Teams are clear and require minimum effort from organizers
    • +
    +
  • +
  • +

    Be able to predict attendance, avoid major disappointments

    +
  • +
  • +

    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)

    +
      +
    • E.g. not being bound only to Indico or something else that needs to be installed
    • +
    +
  • +
  • +

    Collect good information on participants for reporting later

    +
  • +
  • +

    Registration does not have to ever close

    +
      +
    • Continued registrations allow people to join halfway through
    • +
    • What needs does this have?
    • +
    +
  • +
  • +

    Editable by organizers (without making a copy by exporting)

    +
      +
    • e.g. exporting Indico to spreadsheet makes a copy, if people modify their registration our copy is invalid
    • +
    • Google Docs allows a form to be directly connected to a spreadsheet, we can modify old registrations while new ones come in
    • +
    +
  • +
+

Lessons learned from a recent event

+
    +
  • Unclear what registration options mean, people sign up for Zoom and don't show up
  • +
  • We have to manage teams ourselves, which requires too much communication and +manual work. Teams should be able to do this themselves.
  • +
  • Scheduling teams is hard, must optimize for this and avoid all ambiguity
  • +
  • Registration coordinator shouldn't teach (much, certainly not early on)
  • +
  • Communication and registration is the same person or same two persons
  • +
  • Communication/registration and teaching coordination should not be the same person
  • +
  • Indico is a good tool but we need to remove old copy-pasted questions/options and streamline
  • +
  • Allow teams to register with one contact point only
  • +
  • Merging teams is hard in indico
  • +
  • Adjusting teams is hard in indico
  • +
  • Communication/registration/coordination is a full time job for two weeks prior to the workshop
  • +
  • Question about availability is too often misunderstood: ask differently
  • +
  • Optimize for fewer emails since these are difficult to delegate
  • +
  • For exercise leads it is confusing whether to choose staff registration or regular registration
  • +
  • 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"
  • +
  • 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
  • +
  • Team registrations seem to have worked though and they seem to have the only +groups that "survived" to the end.
  • +
  • Local organizers could choose to use a centrally organized zoom if they +wanted - as long as they managed the teams themselves
  • +
+

Suggestions for improving our previous registration form

+
    +
  • "affiliation or university": have a list of institutions + "other" * free +text for other institutions or companies not listed
  • +
  • can we decentralize registration to groups and partners? +
      +
    • groups/partners scale as far as they like to as many helpers as they have
    • +
    +
  • +
  • questions on form +
      +
    • "do you want to participate in Stockholm? click here" -> another form
    • +
    • "in Aalto" -> another form
    • +
    • none of the above -> central form +
        +
      • group registration (exercise lead? or anybody as proxy?)
      • +
      • register as exercise lead and want to help out a "random" group
      • +
      • want to be part of a group -> click here but we can't guarantee a helper, especially if you register late
      • +
      • want to only watch alone
      • +
      +
    • +
    • also offer options to get informed for those unsure/undecided +
        +
      • yes
      • +
      • "interested"
      • +
      +
    • +
    +
  • +
  • standardized reporting form for partners
  • +
+

How to manage teams?

+
    +
  • Teams could handle some issues/setup themselves
  • +
  • They need some templates to send information
  • +
  • Which information should be sent by CR and which by the local organizers?
  • +
  • Need to get statistics and feedback from the local groups
  • +
  • Need to clarify if there will be "general" helpers in addition to team helpers
  • +
  • Larger project partners will probably prefer offering in-person exercise groups
  • +
  • How to deal with registration in the wrong form if we have several forms?
  • +
  • Each partner needs to clearly commit to a certain level of support and size
  • +
  • How to self-organize teams: +
      +
    • "helpers, rename yourself and join a room that does not have helpers yet"
    • +
    • "learners, if you are in a room that is too empty or too full, join another one"
    • +
    • this is to avoid rooms that are too full or too empty, or without helpers, or avoiding communicating which days an EL is unavailable
    • +
    • what if one exercise lead or room is more popular than another room?
    • +
    • how about continuity between days?
    • +
    +
  • +
  • What to do with solo registrations who are not part of a group and want to be +in an exercise group? +
      +
    • Is pairing up happening locally or centrally?
    • +
    +
  • +
+

Comments on a mock-up registration form

+

We have together reviewed an example +form and collected comments:

+
    +
  • Problems: "team organized by us" is not separated from "self-organized team"
  • +
  • The "probably not but send info" does not need to be asked for each day separately
  • +
  • But it's nice to offer the possibility to stay informed and decide later
  • +
  • Nice to have one form both for staff and everyone else to avoid the confusion that we saw at the previous event
  • +
  • "observer": let them decide whether they want emails or not
  • +
  • "how do you plan on attending" +
      +
    • Option 1: +
        +
      • Maybe confusing if somebody selects both zoom and in person
      • +
      • In-person breakout delegated to the local organization
      • +
      +
    • +
    • Option 2:
    • +
    +
  • +
  • Local rooms +
      +
    • Ask this earlier
    • +
    +
  • +
  • Teams +
      +
    • Ask this question earlier
    • +
    +
  • +
  • It is important that registrants can change their choices
  • +
  • In general, Radio buttons are nicer than dropdowns because you get to see the answers right away +
      +
    • But dropdown takes less screen space
    • +
    +
  • +
+

What if we get asked for help with creating a registration page for a local partner?

+
    +
  • We need to communicate who we share data with and ask for consent
  • +
  • We document what we ask and what we recommend partners to ask
  • +
  • We document which privacy policy we follow and which privacy standards +we require
  • +
  • We could offer a form/event if some local organizers need a separate +form but do not want to set it up themselves
  • +
+

Starting point for the new registration form

+
    +
  • OS +
      +
    • Dropdown
    • +
    +
  • +
  • Discipline +
      +
    • Dropdown
    • +
    +
  • +
  • Name +
      +
    • Open
    • +
    +
  • +
  • Email +
      +
    • Open
    • +
    +
  • +
  • Affiliation +
      +
    • Open
    • +
    • Has not been used for reporting yet but the information is good to +have
    • +
    +
  • +
  • Country +
      +
    • Dropdown
    • +
    +
  • +
  • Team name +
      +
    • Open
    • +
    +
  • +
  • Permission to give contact details to breakout room organizer +
      +
    • Yes/no dropdown
    • +
    +
  • +
  • Other notes to organizers +
      +
    • Open
    • +
    +
  • +
  • Room +
      +
    • Open
    • +
    +
  • +
  • Which days attending +
      +
    • Radio buttons
    • +
    +
  • +
  • Type of attendee +
      +
    • Radio buttons
    • +
    +
  • +
  • Do you want to attend in Zoom or follow live-stream only? +
      +
    • Dropdown/Radio buttons
    • +
    +
  • +
+

Conclusions

+
    +
  • Central registration is in Indico
  • +
  • We can offer a copy of our Indico template for a separate event for local partners who cannot use a local +registration system
  • +
  • Local partners are welcome to use their own registration systems
  • +
  • Teams can register as a team with a single contact point and the contact point does not have to be an exercise lead
  • +
  • We offer the possibility for individual learners and individual exercise leads to self-join exercise rooms
  • +
  • Workshop limits: +
      +
    • in terms of Twitch: it seems one bottleneck could be the collaborative HackMD document
    • +
    • in terms of exercise groups: the number of volunteers but also groups without exercise leads can be useful
    • +
    +
  • +
+

Follow-up steps

+
    +
  • Share a mock-up form soon with stakeholders for feedback via email and during a team meeting
  • +
  • Explain the setup clearly and concisely, directly in the workshop template
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2022/05/18/measuring-impact/index.html b/blog/2022/05/18/measuring-impact/index.html new file mode 100644 index 000000000..59c3d1753 --- /dev/null +++ b/blog/2022/05/18/measuring-impact/index.html @@ -0,0 +1,1120 @@ + + + + Outcomes from online hackathon about measuring the impact of CodeRefinery workshops - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Outcomes from online hackathon about measuring the impact of CodeRefinery workshops + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Outcomes from online hackathon about measuring the impact of CodeRefinery workshops

+ + + +
+ +

Introduction

+

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.

+

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:

+
    +
  • When we operate online and hybrid, we are accessible to many more styles of +attendance (and different measurements, such as live-stream viewers).
  • +
  • We have an excellent report as part of +coderefinery.org, this will be +split to a separate repository that is usable separately.
  • +
  • Tune our daily feedback questions and provide more time and motivation for +this (see below).
  • +
  • Our quantitative measures include number of registrations, number of known +attendees (in person/online), and number of unknown attendees (live-stream +viewers).
  • +
  • Our qualitative measures include text-based feedback per day and also a +post-workshop survey.
  • +
+

How did we measure attendance and impact up to now?

+

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 here today +represent the number of registrants and the real number of participants is +probably lower.

+

In addition, we have collected pre-workshop +survey data which was +part of the registration process and post-workshop +survey data which we +collect 3-6 months after a workshop (we have not been very consistent with the +exact intervals).

+

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 interesting +data but it wasn't +really driving lesson changes.

+

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.

+

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.

+

Discussion

+

The main points of our discussion were:

+
    +
  • The number of participants per country is still an important thing to +measure, even if it may not be 100% accurate. +
      +
    • We can get that from registrations and Twitch data.
    • +
    • 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.
    • +
    +
  • +
  • How can we measure less but have more meaningful results while not adding too much +work? +
      +
    • We should not try to achieve perfection. Some data / details cannot be +collected.
    • +
    • We get some feedback via email also.
    • +
    • We could interview individual participants or groups for feedback / +impressions on the workshop +
        +
      • That would give more profound insights on how did the students feel.
      • +
      • We could ask for volunteers at the beginning of the workshop.
      • +
      • Conduct the interview at the end, and turn it into a blog.
      • +
      +
    • +
    +
  • +
  • We should not forget people take workshops for different reasons +
      +
    • Do some participants re-take a workshop for more in-depth knowledge? If so, are they attending partially?
    • +
    • 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.
    • +
    +
  • +
  • Do we track how did people learn about the workshop? +
      +
    • Currently in the pre-workshop survey, but we should do it in the +registration.
    • +
    +
  • +
  • How to get feedback that helps us improve? +
      +
    • We could ask: why did you decide to stop following the stream?
    • +
    • We do ask: what did you find useful or not so useful?
    • +
    +
  • +
  • The HackMD feedback is one of the most important ways for us to improve the +lessons, as opposed to the pre-workshop survey. +
      +
    • The results need to be interpreted and compiled manually.
    • +
    +
  • +
  • Yet, we ask for the HackMD feedback in the last 5 min of the days, right as +people are leaving. +
      +
    • Consider improvements, such as asking before, or during, the last lesson.
    • +
    • Provide sufficient time for this, discuss the feedback as it comes in to +motivate it.
    • +
    +
  • +
  • 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".
  • +
  • Our current (early 2022 and earlier) post-workshop survey questions are +found at: +https://github.com/coderefinery/post-workshop-survey#survey-questions
  • +
  • NeIC perspective: +
      +
    • Ask project partners / stakeholders how do they benefit from CodeRefinery +training and how we can improve this
    • +
    +
  • +
  • How can we improve response rate? +
      +
    • Even shorter and clearer questionnaire
    • +
    • Good timing for when the survey is sent to participants, it seems that +Monday is the best day to send them out
    • +
    +
  • +
  • How can we learn why somebody stopped? +
      +
    • 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
    • +
    • 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)
    • +
    • 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)
    • +
    • 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
    • +
    • 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
    • +
    +
  • +
+

What will we change?

+

Registration (in addition to a previous discussion)

+
    +
  • We do ask: country and academic discipline +
      +
    • Also should allow multiple selections to mark interdisciplinary work
    • +
    +
  • +
  • Here we could also ask: career stage and how did you you learn about +workshop?
  • +
  • For group registrations it might get a bit tricky: +
      +
    • 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)
    • +
    • Make it possible and encourage the contact person to update the +registration form, e.g. at the end of the workshop
    • +
    +
  • +
+

Pre-workshop survey

+
    +
  • Integrate selected questions from the pre-workshop survey into the registration
  • +
  • In hindsight the pre-workshop data has not been used to change workshop lessons +
      +
    • Live-feedback (turned into issues turned into lesson/program changes) has +been the main feedback loop
    • +
    • Some of the questions can be turned into icebreaker question
    • +
    +
  • +
+

Statistics page

+
    +
  • Registration numbers +
      +
    • Convert from JSON to YAML (less error prone)
    • +
    • Make a separate repository
    • +
    +
  • +
  • Number of stream viewers +
      +
    • Combine registration numbers with streaming numbers on https://coderefinery.org/about/statistics/
    • +
    • Present views per country (it seems this is non-downloadable)
    • +
    • Present views over time (Twitch provides this data per 10-minute interval)
    • +
    +
  • +
+

Live-feedback (HackMD)

+
    +
  • Integrate feedback into the lesson itself, e.g. the last 10 min of the +workshop are dedicate to filling it in
  • +
+

Post-workshop survey

+
    +
  • What to ask straight after the workshop and what to ask later? Separate +survey?
  • +
  • Could be integrated to the pre-workshop survey because it can be updated
  • +
  • Update questions: +
      +
    • we could add the question: what would you like to learn more?
    • +
    • Maybe condense a bit (less text and repetition)
    • +
    • Remove suggestive questions if any
    • +
    • add academic field
    • +
    +
  • +
  • What data to request from groups / partners? +
      +
    • Number of participants
    • +
    • How did they like the event
    • +
    +
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2022/10/17/future-of-teaching/index.html b/blog/2022/10/17/future-of-teaching/index.html new file mode 100644 index 000000000..a636ee40e --- /dev/null +++ b/blog/2022/10/17/future-of-teaching/index.html @@ -0,0 +1,975 @@ + + + + CodeRefinery teaching strategies and the future of teaching - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery teaching strategies and the future of teaching + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

CodeRefinery teaching strategies and the future of teaching

+ + + +
+ +

This is the index page of the Future of +Teaching series.

+

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. This series of blog posts will +discuss what we did and how you can learn from it.

+

So, what is the future of teaching? For type of practical, hands-on +learning, we could try to classify learning situations into three +types:

+
    +
  • Very large courses and massive open online courses (MOOC),where +individual interaction isn't possible.
  • +
  • Small-medium courses, 10-30 people, with traditional classroom-type +interactions.
  • +
  • One-on-one or small-group mentoring.
  • +
+

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: The middle layer +got squeezed out: 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.

+

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 our +manuals.

+

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.

+

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.

+

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):

+ +

See also

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2022/10/21/python-for-scicomp/index.html b/blog/2022/10/21/python-for-scicomp/index.html new file mode 100644 index 000000000..e92528ec9 --- /dev/null +++ b/blog/2022/10/21/python-for-scicomp/index.html @@ -0,0 +1,933 @@ + + + + Python for Scientific Computing open for registration and collaborators - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Python for Scientific Computing open for registration and collaborators + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Python for Scientific Computing open for registration and collaborators

+ + + +
+ +

Our next workshop, Python for Scientific +computing, +is ready for you! Take part in different ways:

+
    +
  • +

    If you want to learn, you can register. Like all of our livestream +courses, +there are diverse ways to attend based on your needs.

    +
  • +
  • +

    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.

    +
  • +
  • +

    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.

    +
  • +
+

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 +material and +teaching is open-source before, during, and after the course.

+

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.

+

If you want to contribute more (or see how we do it), join the +CodeRefinery chat and +introduce yourself.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2022/10/24/parallel-chat/index.html b/blog/2022/10/24/parallel-chat/index.html new file mode 100644 index 000000000..56f3f7aee --- /dev/null +++ b/blog/2022/10/24/parallel-chat/index.html @@ -0,0 +1,1019 @@ + + + + Parallel chat ("HackMD") and scaling teaching - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Parallel chat ("HackMD") and scaling teaching + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Parallel chat ("HackMD") and scaling teaching

+ +

+ Parallel chat via a text document enables interactively at scale when online teaching. +

+ + October 24, 2022 + + - Richard Darst + +

+ +
+ +

Part of a series on the Future of +Teaching

+

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.

+

Our solution is "parallel chat", or as we typically call it "HackMD" +after the service we started using, hackmd.io - 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.

+

Demonstration of HackMD

+

There are a variety of reasons this is so good:

+
    +
  • You can have multiple people asking and answering at the same time +(not possible with voice, and linear chat gets confusing with)
  • +
  • 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.
  • +
  • People can ask anonymously - which encourages questions from those +who would usually be silent in courses.
  • +
  • Equally, questions don't distract everyone, so there is no pressure +to be quiet to let the course go on.
  • +
  • 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.
  • +
  • By having more questions asked, you can get much more feedback while +teaching - so much you have to be careful to not be overloaded!
  • +
  • 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.
  • +
+

Just look at the number of questions in our old courses, one 3.5-hour +day of our May 2022 +workshop - +and this is day 1, when people didn't yet know how it worked.

+

But there are some disadvantages:

+
    +
  • An absolute flood of information, which will 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.
  • +
  • Another window for people follow. Like above, we warn people to +focus on the learning and parallel chat only when there is time.
  • +
  • It's different, so needs some explanation (but we've seen people +catch on very quickly once they see it).
  • +
+

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 - always 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:

+
    +
  • 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.
  • +
  • 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.
  • +
  • We often use it as an icebreaker as a demo. Maybe not everyone +understands it.
  • +
  • It can also be used for lightweight polls: learners can +1 or add +a character to a line to make simple bar graphs.
  • +
  • Like we said above, it's not a perfect tool, but easy to use and fun.
  • +
  • A "HackMD manager" watches it and tries to keep things organized, +adds section headings, and so on. This makes it easy.
  • +
  • Remember, new content only to the bottom! People can't go following +multiple sections.
  • +
+

We don't have unlimited scaling and there are some other problems, +though. Some possible issues that may come up:

+
    +
  • To make this really good, you need at least one person focusing on +the parallel chat - or at least two co-instructors. In workshops of +our size, this hasn't been a big issue, though - it provides a good +task for helpers.
  • +
  • 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.
  • +
  • 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.
  • +
+

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...

+
    +
  • Lack of helpers to answer in parallel - fewer answers ⇒ fewer +questions. Fewer questions ⇒ less time looking at it ⇒ less +motivation to ask questions.
  • +
  • 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.
  • +
+

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.

+

See also:

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2022/10/31/co-teaching/index.html b/blog/2022/10/31/co-teaching/index.html new file mode 100644 index 000000000..b3843139b --- /dev/null +++ b/blog/2022/10/31/co-teaching/index.html @@ -0,0 +1,964 @@ + + + + Co-teaching and scaling up - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Co-teaching and scaling up + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Co-teaching and scaling up

+ +

+ Co-teaching replaces (forced?) learner interaction with natural interaction between co-instructors. +

+ + October 31, 2022 + + - Richard Darst + +

+ +
+ +

Co-teaching

+

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 +parallel chat, +but a significant part also comes from co-teaching, the topic +of this article.

+

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.

+

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 parallel chat 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.

+

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.

+

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.

+

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.

+

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.

+

See also:

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2022/11/07/reverse-hybrid/index.html b/blog/2022/11/07/reverse-hybrid/index.html new file mode 100644 index 000000000..561ede934 --- /dev/null +++ b/blog/2022/11/07/reverse-hybrid/index.html @@ -0,0 +1,966 @@ + + + + Reverse hybrid teaching - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Reverse hybrid teaching + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Reverse hybrid teaching

+ +

+ 'Reverse hybrid' is instructors remote, students local - possibly spread among different locations in small groups. +

+ + November 07, 2022 + + - Richard Darst + +

+ +
+ +

Part of a series on the Future of +Teaching

+

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?

+

We've found a surprising solution which we call reverse hybrid. +Surely others have thought of this, and maybe there is even a proper +name.

+

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.

+

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.

+

But what do we lose? Do we lose interaction with instructors? As +our posts on co-teaching and parallel chat 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.

+

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 parallel chat 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.

+

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 no longer have to teach +alone, which is a mindset change more than anything.

+

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?

+

See also

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2022/11/08/lessons-learned-Sep-2022/index.html b/blog/2022/11/08/lessons-learned-Sep-2022/index.html new file mode 100644 index 000000000..6642ee0ac --- /dev/null +++ b/blog/2022/11/08/lessons-learned-Sep-2022/index.html @@ -0,0 +1,1058 @@ + + + + Lessons learned from the Sep 2022 online workshop - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Lessons learned from the Sep 2022 online workshop + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Lessons learned from the Sep 2022 online workshop

+ + + +
+ +

September 20-22 and 27-29, 2022, we held again our CodeRefinery online +workshop (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 our first online workshop +2020 and the +May 2021 +workshop.

+

We have identified the following main issues that we want to address for future events:

+
    +
  • Registration process is still too complicated.
  • +
  • We are asking ourselves how to further scale without being completely overwhelmed by coordination/communication/synchronization.
  • +
  • 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.
  • +
  • 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.
  • +
+

Registration

+
    +
  • We still need a more lightweight system registration. +
      +
    • This is a balancing act between guiding people and trusting them to self-organise.
    • +
    +
  • +
  • Could we actually get away with no registration at all? How to get stats then? +
      +
    • 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. +
        +
      • Part of it can be via the icebreaker questions.
      • +
      +
    • +
    +
  • +
  • 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.
  • +
  • We could have registration but let people self-organise more: +
      +
    • Offer HackMD, exercise lead zoom, exercise Zoom, stream and inform people about those resources.
    • +
    • Give hints about different ways to participate but no rigid instructions.
    • +
    +
  • +
  • We could leave team registration completely to the partners or participants to handle: +
      +
    • Tell that they could summon teams in their organisation communication channels.
    • +
    • They could indicate somewhere that they are open for managing additional teams.
    • +
    • Tell organisations that they can organise their own registration.
    • +
    +
  • +
  • Exercise leader registration was confusing (too many forms to fill out).
  • +
  • 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.
  • +
  • How to deal with late registrants? +
      +
    • Should they get the Zoom link or only HackMD? +
        +
      • If not we should take those options away from the registration form. Maybe have a last minute registration form as a separate one.
      • +
      +
    • +
    +
  • +
  • Consider adding others who are helping to Indico (our registration system) as managers :grin:.
  • +
  • We could communicate clearer that also participating part of the workshop is possible and encouraged.
  • +
+

Workshop format

+
    +
  • 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.
  • +
  • Communicate better that even if the Git part gets too difficult, the second week may still be worth watching and again easier to comprehend.
  • +
  • Generally we observed a significant no-show rate (over 50%).
  • +
  • Maybe this format is too big for the resources/time that we have as organisers. +
      +
    • Maybe the task distribution was not clear/visible.
    • +
    • It at least difficult to get enough instructors to commit
    • +
    +
  • +
  • Learners were not that motivated in joining the Otaniemi in-person (daily decreasing numbers).
  • +
  • Is September too crowded with other events?
  • +
  • Have we saturated the local market?
  • +
  • Workshop going over lunch time (until 13:30 local time) was an issue at least in JYU and CSC, +
      +
    • People managed when topic to come after break was announced before break so that they knew if they could skip without losing the thread.
    • +
    +
  • +
  • We could try flipped learning: have people watch videos / read the docs and then come on-site/online to discuss and solve problems
  • +
  • Should we do more asynchronous teaching/learning?
  • +
+

Coordination

+
    +
  • Establish the process according to the experience gained from this and previous workshops: +
      +
    • Make step-by-step instructions in manuals on how to arrange such events.
    • +
    • Put everything that participants will need for the workshop already into the Indico confirmation message. +
        +
      • Info from emails sent could be also in manuals except for the links.
      • +
      +
    • +
    +
  • +
  • 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.
  • +
+

Zoom and Twitch

+
    +
  • Ask exercise leads (ELs) not to speak in learners Zoom while lecturers speak in Twitch.
  • +
  • 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.
  • +
  • Utilise Zoom annotate in co-teaching.
  • +
  • Exercise Zoom rooms: +
      +
    • Tech questions room: difficult to follow if someone actually goes there. +
        +
      • It would be better to join the tech room during breaks, or before/after the lectures.
      • +
      +
    • +
    • Quiet room had 1-3 participants always.
    • +
    +
  • +
  • Exercise room instructions screen-share: We did it from separate device so we had the host computer free to operate stuff.
  • +
  • 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).
  • +
  • More interaction in video room: +
      +
    • Since there was so little interaction and not enough exercise time: some ELs felt that they "are not needed"
    • +
    • Too few exercises or too short exercise time and hence not enough possibility for interaction.
    • +
    +
  • +
  • Exercises felt too short (because many participants were software-unprepared).
  • +
  • Navigation problems among different webpages continues to be an issue. Few suggestions on how we could solve it have been and are being discussed here.
  • +
+

Collaborative notes

+
    +
  • HackMD goes to Twitch chat anyway so maybe no point in keeping it as a secret. +
      +
    • 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.
    • +
    +
  • +
  • HackMD started to be slow even if it should not with ~100 participants. +
      +
    • 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.
    • +
    • 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.
    • +
    +
  • +
  • Later in the workshop we deployed our own HedgeDoc instance, which worked quite well.
  • +
+

Installation and tools

+
    +
  • 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.
  • +
+

Lesson content

+
    +
  • 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.
  • +
  • Provide snapshots and starting points for those who have not done the previous exercises.
  • +
  • Topics in Day 4 (at least) would deserve a longer lesson.
  • +
  • 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).
  • +
  • Especially in in-person: the Twitch sessions felt long (since there was so little interaction in the in-person rooms).
  • +
+

Communication with participants

+
    +
  • Add all sessions to the CodeRefinery calendar.
  • +
  • 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.
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2022/11/08/mastodon/index.html b/blog/2022/11/08/mastodon/index.html new file mode 100644 index 000000000..0dff14fa8 --- /dev/null +++ b/blog/2022/11/08/mastodon/index.html @@ -0,0 +1,979 @@ + + + + CodeRefinery Mastodon account - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery Mastodon account + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

CodeRefinery Mastodon account

+ +

+ CodeRefinery has started a Mastodon social media account. +

+ + November 08, 2022 + +

+ +
+ +

For the obvious reasons, CodeRefinery is looking into a Mastodon +account. You can now find us at +@coderefinery@fosstodon.org.

+

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.

+

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?

+
    +
  • https://mastodon.help gives a basic introduction of the how and +why. https://fedi.tips/ gives a longer FAQ (and a separate +introduction).
  • +
  • Usernames are like emails with a username and a server name, +@username@server.name.
  • +
  • To join, you choose a server that you feel comfortable in, and they +all communicate. Some recommendations are below.
  • +
  • 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.
  • +
  • When in doubt, just join somewhere that looks reasonable - don't let +the Paradox of Choice hold back progress!
  • +
+

If you are just joining, you can start out by following CodeRefinery - +copy @coderefinery@fosstodon.org to your search and follow it. You +may be interested in following some of the people that we follow to +seed your list.

+

Deciding a server:

+
    +
  • We chose https://fosstodon.org (FOSS = "free and open source +software") to focus on the software and technology side of things.
  • +
  • For others in academia or research, +https://fediscience.org/server-list.html is a very nice list of +other interesting servers.
  • +
  • https://mastodon.social/ is run by the non-profit that coordinates +the Mastodon open-source project, but that does not mean you +should necessarily prefer it.
  • +
  • Do a web search for server lists. There are both news articles with +broad recommendations, and searchable lists with many servers for +specialized topics.
  • +
+

What you should know about Mastodon (especially vs. Twitter):

+
    +
  • 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.
  • +
  • It's not designed for low-effort replies (quote-replies) since it +makes engagement farming and negative attention. You can reply to +posts with the reply button on each post. (don't forget you can +click on post to see the thread).
  • +
  • Use hashtags to make things searchable, there is no full-text search +(to make it harder for random attacks based on opinions)
  • +
  • "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 - +ActivityPub can +communicate across different types of servers, such as image +hosting, video, blogging, etc. - in theory avoiding lock-in.
  • +
  • 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.
  • +
+

We hope to see you there!

+

See also

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2022/11/14/livestreaming-courses/index.html b/blog/2022/11/14/livestreaming-courses/index.html new file mode 100644 index 000000000..483a0c38d --- /dev/null +++ b/blog/2022/11/14/livestreaming-courses/index.html @@ -0,0 +1,1004 @@ + + + + Livestreaming courses - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Livestreaming courses + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Livestreaming courses

+ +

+ Livestream courses have changed how we teach by allowing unprecedented scaling possibilities. +

+ + November 14, 2022 + + - Richard Darst + +

+ +
+ +

Part of a series on the Future of +Teaching

+

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.

+

Start of the livestream idea

+

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.

+

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 parallel chat ("HackMD") for +questions and +co-teaching, 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 could move on to +the next step without losing essential points like interactivity or +engagement.

+

How livestreaming works for our courses

+

Then came livestreaming. 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 Research Software +Hour.

+

The fully "proper" livestreamed course was 2021 February, our Intro +to scientific computing/HPC +Kickstart, +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.

+

How do we actually do it? Instructors teach by Zoom, but there are +no learners or helpers there. The Zoom windows are captured by OBS +(Open Broadcaster Software), 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.

+
+

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.

+
+

Evaluation

+
+

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!

+
    +
  • Feedback from Summer 2021 HPC Kickstart
  • +
+
+

In general, feedback was positive.

+

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 parallel chat +anyway. And when the audience is not in the stream, you can publish +videos immediately with no privacy risk - which is great for +accessibility.

+

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.

+

See also

+ +
+

[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.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2022/11/21/video-publishing/index.html b/blog/2022/11/21/video-publishing/index.html new file mode 100644 index 000000000..d9596296c --- /dev/null +++ b/blog/2022/11/21/video-publishing/index.html @@ -0,0 +1,977 @@ + + + + Video publishing supports more learning styles - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Video publishing supports more learning styles + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Video publishing supports more learning styles

+ +

+ Publishing course videos supports more learning styles and doesn't have to affect privacy. +

+ + November 08, 2022 + + - Richard Darst + +

+ +
+ +

Part of a series on the Future of +Teaching

+

What if all the talking in a course didn't disappear right after the +course was over?

+

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 hope 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.

+

This is part of why we developed livestream teaching: we want to +separate the instructor interaction from learner interaction, so that +there is no privacy risk whatsoever when recording. This only works if the +livestream is engaging enough, but our previous posts show how we +handled that problem.

+

In order for a video to be useful, it has to be published quickly. +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 extremely useful. We can't have a long publishing +process with this.

+

So, with livestreaming, what do we get?

+
    +
  • 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.
  • +
  • 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.
  • +
  • Learners can catch up immediately or refresh themselves on what they +saw going off into the future.
  • +
  • If learners know videos will be available, they +are suddenly much more free to go with the flow of the course.
  • +
+

We actually made our own tool, +ffmpeg-editlist, +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.

+

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 (stats from Python for +Scientific Computing 2022). 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.

+

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.

+

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.

+

Read more:

+ +

[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.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2022/11/28/teams/index.html b/blog/2022/11/28/teams/index.html new file mode 100644 index 000000000..1b25d3c7a --- /dev/null +++ b/blog/2022/11/28/teams/index.html @@ -0,0 +1,1030 @@ + + + + Learner teams in courses - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Learner teams in courses + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Learner teams in courses

+ +

+ Teams can provide high-quality interaction even in large courses. +

+ + November 28, 2022 + + - Richard Darst + +

+ +
+ +

Part of a series on the Future of +Teaching

+

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 co-teaching and +barely at the start of parallel +chat, so we were focused +on the personal experience. Our solution was learner teams.

+

How it worked

+

The basic mechanics was this:

+
    +
  • 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).
  • +
  • Some learners registered as teams (in this case, we kept them +together).
  • +
  • We would also accommodate individual learners by finding suitable +teams for them - and this did work well.
  • +
  • Each team has an exercise leader assigned to it. It might be +someone who separately volunteered, or it might be someone who is +already part of the group.
  • +
  • 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 not work as well.
  • +
  • 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.
  • +
  • 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.
  • +
+

We have a short ~1-hour training course for the exercise +leaders, +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.

+

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.

+

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.

+

Teams seemed to work best when it was actively managed. 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.

+

Evaluation

+

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.

+

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.

+

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.

+

Benefits

+

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.

+

Decrease of teams with the rise of livestreaming

+

By 2022, the roles of teams has been decreasing (though this isn't +exactly a good thing). Our developments in +co-teaching, parallel +chat, and +livestreaming 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."

+

Downside: amount of organizational work

+

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.

+

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.

+

Summary

+

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.

+

See also

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2023/02/14/march-workshop/index.html b/blog/2023/02/14/march-workshop/index.html new file mode 100644 index 000000000..b8b169c00 --- /dev/null +++ b/blog/2023/02/14/march-workshop/index.html @@ -0,0 +1,953 @@ + + + + CodeRefinery workshop, 21-23 and 28-30 March 2023 - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery workshop, 21-23 and 28-30 March 2023 + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

CodeRefinery workshop, 21-23 and 28-30 March 2023

+ +

+ Our March workshop is soon, and you can join alone, as a team, or as a volunteer. +

+ + February 14, 2023 + +

+ +
+ +

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 (check all +material). But what's less +known is all the new ways to take part.

+

Workshop page +and Register

+

In case you didn't know, we teach via livestream - which means anyone +can attend and we have unlimited capicity. Our teaching +style (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.

+

As an individual, 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 not binding, sign up for information and come when you can (you +won't take a seat from others). To simplify registration, you can +just sign up and you'll get contacted about Zoom/in-person +possibilities later.

+

If you have some friends, work together! 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.

+

If you've been to CodeRefinery before, why not volunteer? (For any +of these, sign up in the normal registration form and tick the +interested in being staff/observer box):

+
    +
  • Be a team leader to allow us to support more teams (register in the +normal form and indicate this interest there).
  • +
  • Be a co-instructor: thanks to our +co-teaching, 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.
  • +
  • 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.
  • +
+

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.

+

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.

+

We hope to see you there!

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2023/04/12/lessons-learned-mar-2023/index.html b/blog/2023/04/12/lessons-learned-mar-2023/index.html new file mode 100644 index 000000000..eefca1b6a --- /dev/null +++ b/blog/2023/04/12/lessons-learned-mar-2023/index.html @@ -0,0 +1,1054 @@ + + + + Lessons learned from the March 2023 online workshop - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Lessons learned from the March 2023 online workshop + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Lessons learned from the March 2023 online workshop

+ + + +
+ +

March 21-23 and 28-30, 2023, we held again our CodeRefinery online +workshop (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.

+

If you think you might have solutions for us or want +to discuss about the topic, please reach out to +us. This complements our +lessons learned from our first online workshop +2020, the +May 2021 +workshop, +and the Sep 2022 workshop.

+

We have identified the following main issues that we want to address for future events:

+
    +
  • Speaking more clearly, improving mic quality, and recommending participants to get familiar with Vim, Nano, etc. before the workshop starts.
  • +
  • Some attendees expressed confusion with some exercises and recommended more +repetition of basic commands and more concrete examples of solutions in +exercises.
  • +
  • Some attendees suggested improving the teaching style by doing exercises +while explaining each step, while others preferred doing the exercises +themselves for better learning.
  • +
  • Provide more support for online participants and having more, smaller repositories for exercises.
  • +
  • Some participants found certain aspects of the training confusing, such as the merging process.
  • +
  • Provide clearer instructions.
  • +
  • Some participants wanted more hands-on exercises and more information on specific topics like environments, MATLAB, and good documentation and attribution practices.
  • +
  • The participants suggested expanding the course duration or offering a series of mini workshops.
  • +
  • They also suggested covering ethics and copyright law and providing solutions to exercises directly under each question.
  • +
  • There are suggestions for improvement, including making the content more linear, explaining concepts in more detail, and providing more examples.
  • +
  • The use of Sphinx, a documentation tool, was discussed, and some participants were unsure of its value.
  • +
  • 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.
  • +
  • Some participants felt that the daily schedule could be shorter or more compact.
  • +
  • Cheat sheets or code checkpoints could be provided to help with finding information quickly.
  • +
+

Daily summaries

+

Day 1

+
    +
  • The workshop was just right in terms of pace and highly recommendable to others.
  • +
  • Participants appreciated the hands-on experience, type-along exercises, +availability of workshop material, and the responsiveness of the +collaborative document.
  • +
  • Some participants suggested speaking more clearly, improving mic quality, and +recommending participants to get familiar with Vim, Nano, etc. before the +workshop starts.
  • +
  • Overall, participants enjoyed the workshop and would like to join more like this.
  • +
+

Day 2

+
    +
  • The speed and level of the workshop were appropriate and engaging.
  • +
  • Several positive comments on the commands and examples covered, the breaks provided, and the helpfulness of the instructors.
  • +
  • Some attendees expressed confusion with some exercises and recommended more +repetition of basic commands and more concrete examples of solutions in +exercises.
  • +
  • Some attendees suggested improving the teaching style by doing exercises +while explaining each step, while others preferred doing the exercises +themselves for better learning.
  • +
  • Technical questions were asked about the official Git documentation, the use +of Overleaf, and the concept of stash, which were addressed by the +instructors.
  • +
  • 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.
  • +
+

Day 3

+
    +
  • General consensus that the pace of the training was appropriate.
  • +
  • Many participants found the hands-on work helpful.
  • +
  • Some participants encountered technical difficulties.
  • +
  • Suggestions for improvements, such as providing more support for online participants and having more, smaller repositories for exercises.
  • +
  • Some participants found certain aspects of the training confusing, such as the merging process.
  • +
  • Suggestion for instructors to provide clearer instructions.
  • +
  • Overall, a positive response to the training.
  • +
  • Many participants indicated that they learned useful skills that they can apply in their work.
  • +
+

Day 4

+
    +
  • The participants found the speed of the course to be appropriate.
  • +
  • They appreciated learning about containers, as well as Snakemake, licensing, and R examples.
  • +
  • Some participants wanted more hands-on exercises and more information on +specific topics like environments, MATLAB, and good documentation and +attribution practices.
  • +
  • The participants suggested expanding the course duration or offering a series of mini workshops.
  • +
  • They also suggested covering ethics and copyright law and providing solutions to exercises directly under each question.
  • +
  • Overall, the participants enjoyed the course and found it to be informative and useful.
  • +
+

Day 5

+
    +
  • Participants have varying opinions on the pace, level, and usefulness of the workshop.
  • +
  • Some participants found the tools introduced to be too advanced, while others found them to be a good challenge.
  • +
  • There are suggestions for improvement, including making the content more linear, explaining concepts in more detail, and providing more examples.
  • +
  • The use of Sphinx, a documentation tool, was discussed, and some participants were unsure of its value.
  • +
  • Overall, participants found the workshop to be informative and inspiring, with some planning to spend additional time reviewing the content.
  • +
+

Day 6

+
    +
  • The course was generally well-received and appreciated.
  • +
  • Many participants felt that they learned useful skills and would recommend the course to others.
  • +
  • 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.
  • +
  • Some participants felt that the daily schedule could be shorter or more compact.
  • +
  • Cheat sheets or code checkpoints could be provided to help with finding information quickly.
  • +
  • Technical concerns included difficulty with using the automatic debugging tool in GitHub.
  • +
  • There were also some questions about how to receive course credits or certificates.
  • +
+

Registration

+
    +
  • The registration process has definitely been improved, but we have identified that it could be further streamlined.
  • +
  • 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.
  • +
+

Zoom and Twitch

+
    +
  • 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.
  • +
+

Collaborative notes

+
    +
  • 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.
  • +
+

Installation and tools

+
    +
  • 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".
  • +
+

Lesson content

+
    +
  • We could shorten the lecture-part by moving exercises to the end.
  • +
  • Longer exercises would benefit in on-site rooms.
  • +
  • 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.
  • +
+

Communication with participants

+
    +
  • Add all sessions to the CodeRefinery calendar.
  • +
  • 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.
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/2023/06/25/planning-sep-workshop/index.html b/blog/2023/06/25/planning-sep-workshop/index.html new file mode 100644 index 000000000..870318d1f --- /dev/null +++ b/blog/2023/06/25/planning-sep-workshop/index.html @@ -0,0 +1,1147 @@ + + + + What we plan to improve for the September 2023 workshop - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - What we plan to improve for the September 2023 workshop + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

What we plan to improve for the September 2023 workshop

+ +

+ We encourage the community to give us feedback on these ideas. +

+ + June 25, 2023 + + - Radovan Bast + +

+ +
+ +

In this post we wish to share our ideas for what we want to change and improve +for the for the upcoming September 2023 +workshop. This is based on +lessons learned from the March 2023 +workshop and on two meetings we +had two weeks ago with the CodeRefinery team.

+
+

We encourage the community to give us feedback on these ideas either via +chat or via email to +support@coderefinery.org. +We are particularly curious to hear what you think about the section +"Keep two weeks or split in two or more parts?".

+
+ + + + + +

Keep two weeks or split in two or more parts?

+
    +
  • Problems with current set-up (6 half-days): +
      +
    • Second week has different software requirements and is rather different from first week (git)
    • +
    • It could use more exercises but there is currently not much time
    • +
    • It is dense
    • +
    • Not each lesson feels relevant/interesting for all
    • +
    +
  • +
  • We are considering keeping first week focused on Git over 3 days as we have +now, but to spread the second week over a longer time frame (one or two +sessions per week).
  • +
  • Advantages of splitting it off: +
      +
    • More time per lesson
    • +
    • More focused preparation
    • +
    • More time between lessons (more time to prepare for us, more time to digest and apply for learners)
    • +
    • Possibility to add hackathons/ more personalized Q&A
    • +
    • Attracting different and more interested audiences
    • +
    • The second half could become more research-software-hour-y
    • +
    • 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.
    • +
    • Collaborative document might be enough and Zoom rooms might not be needed.
    • +
    +
  • +
  • Downsides: +
      +
    • Less cohesive workshop
    • +
    • 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)
    • +
    • Credits? But can be solved by giving recommendations to local organizers (learning diary, quiz, git log)
    • +
    +
  • +
  • It could make it more difficult for: +
      +
    • Scheduling other workshops that build on top of this workshop.
    • +
    • For those who organize the streaming and video production.
    • +
    • For local organizers (we are particularly interested in their feedback about this idea).
    • +
    +
  • +
  • The first week part could also be extended with a hackathon (3 half-days +teaching, followed by a session e.g. one week later).
  • +
  • Advertise sessions with a more descriptive title (not "Jupyter", but "How to +prototype in Python" or something like that).
  • +
  • Concrete suggestion: 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)
  • +
  • UPDATE: 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.
  • +
+

Creating a more motivating environment for volunteers

+
    +
  • Improve focus so that we can improve the quality and avoid that most time +dissolves in coordinating efforts that could be more focused.
  • +
  • Having few days of focused time for preparation. Otherwise with 25% or less +in-kind involvement, other day-to-day tasks take over.
  • +
  • Organize an online writing/preparation retreat (with buddy-system, +meeting times booked early).
  • +
  • Keep half-day format.
  • +
  • Clear session structure and clear commitment (put names behind lessons as +early as possible).
  • +
  • Knowing who from organizers to contact with questions.
  • +
+

Improve the experience for helpers/ exercise leads

+
    +
  • 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.
  • +
  • This time we will try with a central exercise room (see next section) and try +to engage them again.
  • +
+

Workshop format: keep the stream format but also provide a central but self-organized exercise room

+
    +
  • Continue offering the hybrid format: people joining from class rooms.
  • +
  • Again offer centrally managed exercise rooms for learners without own teams. +Even if this means "binding" one person to manage that space.
  • +
  • However, we need an easily organizable way.
  • +
  • Previously it was tricky to manage central exercise rooms: +
      +
    • Rooms became imbalanced (no-shows, empty / overfull rooms) and some exercise leads had then nothing to do.
    • +
    • Pre-allocating persons to rooms has previously failed: Some learners selected the "wrong" option or did not show up.
    • +
    • People were confused about the model.
    • +
    +
  • +
  • What we will try this time: +
      +
    • Self-organized central zoom with free-floating helpers ("expert helpers").
    • +
    • We communicate clearly expectations: that we don't really know who shows up.
    • +
    • Also communicate meaning of rooms (topical rooms) .
    • +
    • Split on-boarding into 2: in-person helpers and Zoom helpers need different info.
    • +
    • No exercise below 15 mins, otherwise no time to have discussions with helpers.
    • +
    • 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.
    • +
    +
  • +
+

Lesson development without last-minute stress

+
    +
  • Organize a 2-day online writing retreat and also a one-week in-person writing +retreat later this year.
  • +
+

Instructor on-boarding

+
    +
  • In past editions the instructor coordinator has met with all instructor pairs +and went with them through the checklist. We will keep this.
  • +
  • Tech-setup could be done all together.
  • +
  • Invite past instructors who have taught the lesson in question earlier to +those meetings to provide background and their experiences.
  • +
  • Check questions and feedback from last time.
  • +
  • Switch instructors less often? Maybe always have one person who has done the lesson before.
  • +
  • Plan for an instructor training workshop after the autumn workshop and offer +it also at conferences.
  • +
+

What organizational changes are most important?

+

What would simplify coordination and planning for all involved?

+
    +
  • Current playbook: https://coderefinery.github.io/manuals/workshop-playbook/
  • +
  • Early role decisions (commitment).
  • +
  • All roles using the checklist (it is good to know what is going on in all roles).
  • +
+

Most important lesson/course changes

+
    +
  • We need to re-think exercises for the second week to make them more +interesting. Learners sometimes don't get the point of them.
  • +
+

Simpler registration form

+
    +
  • 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.
  • +
  • Remove the "might" questions. Rather clarify participation options and give +participants the flexibility to decide.
  • +
  • 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.
  • +
  • Link to partner local rooms in registration form, as a possibility for learners.
  • +
  • Add an option about central zoom room.
  • +
  • Record and add short video explaining the options.
  • +
  • Instead of separate observer registration encourage observers to register the same way learners do.
  • +
  • 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.
  • +
  • For on-boarding we need to know if somebody is interested in being a team-lead/helper: +
      +
    • Ask whether local or central exercise room.
    • +
    • Make it clearer that they can change registration.
    • +
    • Communicate why we ask for this info.
    • +
    +
  • +
  • Learners do not need to be asked whether alone/zoom/local.
  • +
  • Do not try a two-step registration process.
  • +
+

The form options will be simplified to:

+
    +
  • +learner or observer
  • +
  • +helper at central exercise room
  • +
  • +helper at local group
  • +
  • +organizer of local group
  • +
  • +instructor (I would like to teach a lesson)
  • +
  • free text to share additional information with organizers
  • +
  • consider asking which sessions the participant is interested in attending
  • +
  • contact email for questions
  • +
+

We plan to open registration before end of June 2023.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/blog/TEMPLATE.md.template b/blog/TEMPLATE.md.template new file mode 100644 index 000000000..10c687902 --- /dev/null +++ b/blog/TEMPLATE.md.template @@ -0,0 +1,18 @@ ++++ +title = 'TITLE' +slug = "20ZZ/XX/YY/name" +description = "1-2 sentence description for social media previews" + +[extra] +authors = "NAME, NAME, NAME" ++++ + +Concise introduction. + +Body here. + +More body. + + +See also +* Optional but nice diff --git a/blog/image_01.png b/blog/image_01.png new file mode 100644 index 000000000..4108dccbb Binary files /dev/null and b/blog/image_01.png differ diff --git a/blog/image_02.png b/blog/image_02.png new file mode 100644 index 000000000..fc9242958 Binary files /dev/null and b/blog/image_02.png differ diff --git a/blog/image_03.png b/blog/image_03.png new file mode 100644 index 000000000..0b8621a10 Binary files /dev/null and b/blog/image_03.png differ diff --git a/blog/image_04.png b/blog/image_04.png new file mode 100644 index 000000000..fe25162fd Binary files /dev/null and b/blog/image_04.png differ diff --git a/blog/image_05.png b/blog/image_05.png new file mode 100644 index 000000000..8ec04ce65 Binary files /dev/null and b/blog/image_05.png differ diff --git a/blog/image_06.png b/blog/image_06.png new file mode 100644 index 000000000..892d0bc92 Binary files /dev/null and b/blog/image_06.png differ diff --git a/blog/image_07.png b/blog/image_07.png new file mode 100644 index 000000000..628c27906 Binary files /dev/null and b/blog/image_07.png differ diff --git a/blog/image_08.png b/blog/image_08.png new file mode 100644 index 000000000..68607afaf Binary files /dev/null and b/blog/image_08.png differ diff --git a/blog/index.html b/blog/index.html new file mode 100644 index 000000000..d0a52c11c --- /dev/null +++ b/blog/index.html @@ -0,0 +1,1204 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +

Blog posts

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/404.html b/branch/main/404.html new file mode 100644 index 000000000..38a7e5cae --- /dev/null +++ b/branch/main/404.html @@ -0,0 +1,915 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+

404, page not found (or moved to coderefinery.github.io)

+
+ +

+ Try going to NEWURL + instead. If this does not work, clear your browser cache. +

+ + + + +

+ We had to change URLs for the lessons. If you are looking for + one of the CodeRefinery lessons, try changing coderefinery.org to + coderefinery.github.io in the URL to find the page you want. +

+ + + +

+ This is not the page you are looking for ... return back to the + index page? +

+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/CNAME b/branch/main/CNAME new file mode 100644 index 000000000..241b540e5 --- /dev/null +++ b/branch/main/CNAME @@ -0,0 +1 @@ +coderefinery.org \ No newline at end of file diff --git a/branch/main/about/code-of-conduct/index.html b/branch/main/about/code-of-conduct/index.html new file mode 100644 index 000000000..c876a442f --- /dev/null +++ b/branch/main/about/code-of-conduct/index.html @@ -0,0 +1,952 @@ + + + + Code of conduct - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Code of conduct + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Code of conduct

+ + + +

Introduction and source of inspiration

+

In any events or community space organized by CodeRefinery, we are committed to +creating a friendly and respectful place for learning, teaching and +contributing. All participants in our events and communications are expected to +show respect and courtesy to others.

+

We follow the Code of Conduct by the +Carpentries +as primary principles. Here is a summary of CodeRefinery's Code of Conduct +adapted from the Carpentries Code of Conduct:

+

Expected behaviors

+

We are dedicated to providing a welcoming and supportive environment for all +people, regardless of background or identity. By participating in any events or +community space organized by CodeRefinery, participants accept to abide by +CodeRefinery’s Code of Conduct and accept the procedures by which any Code of +Conduct incidents are resolved. Any form of behaviour to exclude, intimidate, +or cause discomfort is a violation of the Code of Conduct.

+

In order to foster a positive and professional learning environment we encourage the following kinds of behaviours in all platforms and events:

+ +

Unexpected behaviors

+

On the other hand, unexpected behaviors include but not limited to:

+ +

Consequence of violation of Code of Conduct

+

Participants who are asked to stop any inappropriate behaviour are expected to +comply immediately. This applies to any events and community space organized by +CodeRefinery, either online or in-person. If a participant engages in behaviour +that violates this code of conduct, the organiser of the event or CodeRefinery +core team member(s) may warn the offender, ask them to leave the event or +platform (without refund, if applicable), or set up an incident-specific +CodeRefinery Code of Conduct Committee to investigate the Code of Conduct +violation and impose appropriate sanctions.

+

Incidence report

+

If you feel that the Code of Conduct was violated in an event organized by +CodeRefinery, no matter if it is online or in physical space, please notify the +coordinator/host of the event (or Code of Conduct facilitator if there is a +dedicated person). If you feel uncomfortable directly notifying someone in the +workshop, use the form in the next paragraph.

+

If the incident happened in a community space organized by CodeRefinery, please +complete this form to report the +incident.

+

Designed CodeRefinery team members have access to reported incidents. We do not +yet have a separate Code of Conduct committee, but we may set up an +incident-specific committee, if reported incidence is deemed to require it.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/about/contact/index.html b/branch/main/about/contact/index.html new file mode 100644 index 000000000..d58009c4e --- /dev/null +++ b/branch/main/about/contact/index.html @@ -0,0 +1,911 @@ + + + + Contact CodeRefinery - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Contact CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Contact CodeRefinery

+ + + +

CodeRefinery is a small organization so far, and no matter who you +talk to, you are close to the core.

+

Chat: Zulip

+

We use Zulip to discuss within our team and community. +We discuss in the open and you can join us on +https://coderefinery.zulipchat.com: you can listen in, follow +certain threads, participate, and influence. Learn how CodeRefinery +uses it.

+

Email: Support line

+

To ask questions about workshops or services or to report issues: +support@coderefinery.org

+

Announcements: Newsletter

+

You can subscribe to the CodeRefinery newsletter +here.

+

Announcements and social media: Mastodon and Twitter

+

If you like what we do, please reach out: +Mastodon at +@coderefinery@fosstodon.org and +Twitter at @coderefine

+

Calendars

+

See calendars.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/about/contributors/index.html b/branch/main/about/contributors/index.html new file mode 100644 index 000000000..723d1b462 --- /dev/null +++ b/branch/main/about/contributors/index.html @@ -0,0 +1,1867 @@ + + + + CodeRefinery contributors - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery contributors + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + +

CodeRefinery contributors

+ + + +

Below we list (hopefully) all speakers, instructors, hosts, helpers, and +team leaders of past CodeRefinery workshops, as well as CodeRefinery events +and shared events. Without these contributions, these events would not have been possible. +Thank you so much for your contributions!

+

You can join us too.

+

People who are or were part of the project

+

Here listing all persons who were part of the project as official staff or have +contributed a significant amount of volunteer work.

+ +

On this page +our instructors share their teaching philosophies in short recorded videos.

+

Instructors, helpers, and team leads

+ + + + +
+
+

Instructors/speakers

+
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • Anne Fouilloux
  • + +
  • Annika Rockenberger
  • + +
  • Björn Claremar
  • + +
  • Bjørn Lindi
  • + +
  • Dhanya Pushpadas
  • + +
  • Diana Iusan
  • + +
  • Enrico Glerean
  • + +
  • Hande Celikkanat
  • + +
  • Jarno Rantaharju
  • + +
  • Jens Wehner
  • + +
  • Johan Hellsvik
  • + +
  • Johan Hidding
  • + +
  • João M. da Silva
  • + +
  • Juho Lehtonen
  • + +
  • Jyry Suvilehto
  • + +
  • Luca Ferranti
  • + +
  • Marijn van Vliet
  • + +
  • Mark Abraham
  • + +
  • Matias Jääskeläinen
  • + +
  • Matteo Tomasini
  • + +
  • Matus Kalas
  • + +
  • Max Roald Eckardt
  • + +
  • Max Schön
  • + +
  • N. D.
  • + +
  • Nico Reissmann
  • + +
  • Nils Charles Prieur
  • + +
  • Pavlin Mitev
  • + +
  • Pinja Koskinen
  • + +
  • Radovan Bast
  • + +
  • Raphaela Heil
  • + +
  • Richard Darst
  • + +
  • Sabry Razick
  • + +
  • Samantha Wittke
  • + +
  • Seija Sirkiä
  • + +
  • Simo Tuomisto
  • + +
  • Sri Harsha Vathsavayi
  • + +
  • Stefan Negru
  • + +
  • Teemu Ruokolainen
  • + +
  • Thomas Pfau
  • + +
  • Thor Wikfeldt
  • + +
  • Will Usher
  • + +
+
+ +
+

Hosts, helpers, and team leaders

+
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • Abel Carreras
  • + +
  • Agneta Ghose
  • + +
  • Aili Sarre
  • + +
  • Alberto Lazzarotto
  • + +
  • Aleksandra Wilczynska
  • + +
  • Amir Ebrahimi Fard
  • + +
  • Ankita Priya
  • + +
  • Annajiat Alim Rasel
  • + +
  • Anne Fouilloux
  • + +
  • Anni Järvenpää
  • + +
  • Annika Rockenberger
  • + +
  • Anthony Scemama
  • + +
  • Ashwin Vishnu
  • + +
  • Athanasios Protopapas
  • + +
  • Björn Claremar
  • + +
  • Bjørn Lindi
  • + +
  • Carolina Robustini
  • + +
  • Cristian Cira
  • + +
  • Dan Mønster
  • + +
  • Daniel Holmberg
  • + +
  • Devaraju Narayanappa
  • + +
  • Dhanya Pushpadas
  • + +
  • Diana Iusan
  • + +
  • Dmytro Fishman
  • + +
  • Dmytro Kryvokhyzha
  • + +
  • Ebrahim Afyounian
  • + +
  • Emilia Lipponen
  • + +
  • Emiliano Gelati
  • + +
  • Emiliano Molinaro
  • + +
  • Enrico Glerean
  • + +
  • Erika Yashiro
  • + +
  • Evelien Van Dijk
  • + +
  • Evgeny Posenitskiy
  • + +
  • Fabricio Oliveira
  • + +
  • Flavio Calvo
  • + +
  • Francesco Tabaro
  • + +
  • Giordano Lipari
  • + +
  • Hadrien Gourlé
  • + +
  • Harshit Agrawal
  • + +
  • Hasti Narimanzadeh
  • + +
  • Heather Andrews
  • + +
  • Heikki Lehväslaiho
  • + +
  • Hui Tang
  • + +
  • Ingrid Strandberg
  • + +
  • Inigo Aldazabal
  • + +
  • Ivan Kuzmin
  • + +
  • Jakob Sauer Jørgensen
  • + +
  • Janne Blomqvist
  • + +
  • Jannetta Steyn
  • + +
  • Jarno Rantaharju
  • + +
  • Jean Iaquinta
  • + +
  • Jens Wehner
  • + +
  • Joakim Löfgren
  • + +
  • Johan Hellsvik
  • + +
  • Johan Hidding
  • + +
  • Jose Carlos Llanusa
  • + +
  • João M. da Silva
  • + +
  • Juan Sebastian Diaz Boada
  • + +
  • Juho Lehtonen
  • + +
  • Kaveh Karimi
  • + +
  • Kerstin Lenk
  • + +
  • Lauri Neuvonen
  • + +
  • Leif Wigge
  • + +
  • Lesetja Lekoloane
  • + +
  • Lex Nederbragt
  • + +
  • Lora Armstrong
  • + +
  • Luc Girod
  • + +
  • Luca Ferranti
  • + +
  • Lucy Whalley
  • + +
  • Luis Amezcua
  • + +
  • Manana Koberidze
  • + +
  • Manuel Garcia Alvarez
  • + +
  • Marco Foscato
  • + +
  • Marijn Van Vliet
  • + +
  • Massimo Pizzol
  • + +
  • Matthew Morris
  • + +
  • Matúš Kalaš
  • + +
  • Maurits Kok
  • + +
  • Max Roald Eckardt
  • + +
  • Meron Vermaas
  • + +
  • Mika Jalava
  • + +
  • Mikael Djurfeldt
  • + +
  • Mikael Öhman
  • + +
  • Mikhail Papkov
  • + +
  • Mikko Heikkilä
  • + +
  • Naoe Tatara
  • + +
  • Narayan Puthanmadam Subramaniyam
  • + +
  • Nico Reissmann
  • + +
  • Niharika Gauraha
  • + +
  • Niket Agrawal
  • + +
  • Octavian Andrei
  • + +
  • Patric Holmvall
  • + +
  • Paula Martinez Lavanchy
  • + +
  • Pavlin Mitev
  • + +
  • Pedro Ojeda
  • + +
  • Pedro Ojeda May
  • + +
  • Pengfei Xu
  • + +
  • Peter Kjellström
  • + +
  • Philip Gjedde
  • + +
  • Pradeep Eranti
  • + +
  • Preethy Nair
  • + +
  • Qiang Li
  • + +
  • Radek Lonka
  • + +
  • Radovan Bast
  • + +
  • Raphaela Heil
  • + +
  • Raul Ortiz Merino
  • + +
  • Richard Darst
  • + +
  • Roberto Di Remigio
  • + +
  • Rohit Goswami
  • + +
  • Romain Caneill
  • + +
  • Ruslan Zhuravchak
  • + +
  • Sabry Razick
  • + +
  • Samantha Wittke
  • + +
  • Sebastian Schmidt
  • + +
  • Shashank Shekhar Harivyasi
  • + +
  • Shreyas Deshpande
  • + +
  • Simoneta Caño de Las Heras
  • + +
  • Sri Harsha Vathsavayi
  • + +
  • Stephan Smuts
  • + +
  • Stephanie van de Sandt
  • + +
  • Stig Rune Jensen
  • + +
  • Sunniva Indrehus
  • + +
  • Susan Branchett
  • + +
  • Ted Hsuan Yun Chen
  • + +
  • Thomas Arildsen
  • + +
  • Thor Wikfeldt
  • + +
  • Tobias Lindstrøm Jensen
  • + +
  • Toby Hodges
  • + +
  • Tomasz Kopec
  • + +
  • Tomi Häkkinen
  • + +
  • Tor Kjellsson Lindblom
  • + +
  • Tuomas Rossi
  • + +
  • Vang Que Le
  • + +
  • Vesa Vahermaa
  • + +
  • Will Usher
  • + +
  • Ygor Morais Jaques
  • + +
  • Zubair Maalick
  • + +
+
+
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/about/funding/asc.png b/branch/main/about/funding/asc.png new file mode 100644 index 000000000..45e833fcf Binary files /dev/null and b/branch/main/about/funding/asc.png differ diff --git a/branch/main/about/funding/chc.png b/branch/main/about/funding/chc.png new file mode 100644 index 000000000..9f263eeb7 Binary files /dev/null and b/branch/main/about/funding/chc.png differ diff --git a/branch/main/about/funding/csc.png b/branch/main/about/funding/csc.png new file mode 100644 index 000000000..3268bd814 Binary files /dev/null and b/branch/main/about/funding/csc.png differ diff --git a/branch/main/about/funding/deic.png b/branch/main/about/funding/deic.png new file mode 100644 index 000000000..a591abf66 Binary files /dev/null and b/branch/main/about/funding/deic.png differ diff --git a/branch/main/about/funding/enccs.png b/branch/main/about/funding/enccs.png new file mode 100644 index 000000000..88f0984b3 Binary files /dev/null and b/branch/main/about/funding/enccs.png differ diff --git a/branch/main/about/funding/index.html b/branch/main/about/funding/index.html new file mode 100644 index 000000000..ddddd4921 --- /dev/null +++ b/branch/main/about/funding/index.html @@ -0,0 +1,891 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + +
+
    + +
+
+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/about/funding/naiss.jpg b/branch/main/about/funding/naiss.jpg new file mode 100644 index 000000000..1f7805f24 Binary files /dev/null and b/branch/main/about/funding/naiss.jpg differ diff --git a/branch/main/about/funding/neic.png b/branch/main/about/funding/neic.png new file mode 100644 index 000000000..a68367fcc Binary files /dev/null and b/branch/main/about/funding/neic.png differ diff --git a/branch/main/about/funding/nris.svg b/branch/main/about/funding/nris.svg new file mode 100644 index 000000000..9a3125277 --- /dev/null +++ b/branch/main/about/funding/nris.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + diff --git a/branch/main/about/funding/sigma2.png b/branch/main/about/funding/sigma2.png new file mode 100644 index 000000000..02eee75c9 Binary files /dev/null and b/branch/main/about/funding/sigma2.png differ diff --git a/branch/main/about/history/index.html b/branch/main/about/history/index.html new file mode 100644 index 000000000..ce35954d8 --- /dev/null +++ b/branch/main/about/history/index.html @@ -0,0 +1,924 @@ + + + + History of the project - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - History of the project + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

History of the project

+ + + +

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 the Nordic +e-Infrastructure Collaboration (NeIC), a +state-funded Nordic public funding organization, to bring this +project to a Nordic level, both to have more impact, but also to +connect instructors across Nordic borders. The first grant was +2016--2018, with NeIC, CSC (Finland), SNIC (Sweden), DeIC +(Denmark), and UNINETT Sigma2 (Norway) as partners.

+

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.

+

In 2018 the project has received follow-up funding from NeIC for 3 more years, +2018--2021. The partners were the same as the first phase, but now +including the University of Tartu (Estonia). Aalto University +(Finland) formally joined the last year after being a long-term +voluntary participant.

+

In 2020, COVID-19 hit, and everyone went online. We didn't take an +opportunity to do the same thing, but online, while waiting for things +to become normal. Instead, we took advantage of being equally close +to each other (online) as to our previous in-person teams (now online) +to work together much more closely than we used to. We developed an +extensive and unique CodeRefinery teaching +style which stayed with us even +post-Covid.

+

In 2021 the project successfully applied to the NeIC open call +for another 3 years, 2022--2025. The focus of this phase is to +produce a sustainable organization that can exist without NeIC's +funding. The partners at the beginning of the phase were NeIC, Aalto +University, Aarhus University CHCAA (Denmark), Aalborg University +CLAAUDIA (Denmark), CSC (Finland), DeiC (Denmark), ENCCS (Sweden), NAISS (formerly SNIC; Sweden), +Sigma2 (Norway), and the University of Oslo USIT (Norway).

+

CodeRefinery now welcomes other partners to join.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/about/impact/index.html b/branch/main/about/impact/index.html new file mode 100644 index 000000000..8c42e27d1 --- /dev/null +++ b/branch/main/about/impact/index.html @@ -0,0 +1,914 @@ + + + + Impact of online CodeRefinery workshops - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Impact of online CodeRefinery workshops + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Impact of online CodeRefinery workshops

+ + + +

Over 1700 people have attended a CodeRefinery workshop since the project started! Since the pandemic started, we shifted the gear towards online workshops. In total about 900 participated in online CodeRefinery workshops.

+

Along the change in tools and practices, we changed questions in pre-/post-workshop surveys. To provide the most consistent and recent picture of our participants and impact, the below is based on data provided by pre-/post-workshop surveys answered in relevance to only online workshops. (Note: pre-/post-workshops are opt-in.)

+

Participants' background

+

Results of pre-workshop surveys (answers given by 301 persons) show that our workshop participants range from undergraduate students to full +professors, and come from a variety of academic disciplines.

+

The chart below shows the result of a question asking about their job title, position or occupation.

+ +

alt text

+

The chart below shows the result of a question asking about their academic discipline.
+alt text

+

What is our impact?

+

The long-term impact of CodeRefinery workshops is measured through a +post-workshop survey which is sent out to all former participants 3 months to 1 year after attending a workshop. To date (12th Sep 2021) we received 80 voluntary responses to +a post-workshop survey by participants of an online workshop.

+

The heatmap below shows how former participants +use various software development tools after attending a workshop, and +how their code and collaboration with colleagues has changed.

+

Please note that a part of responses answered the specific tool to different types of impact, for example, there are cases where both "started using" and "using better" was chosen for "Version control".

+

alt text

+

The chart below shows fraction of former participants who feel their code and collaboration with colleagues has been improved. +alt text

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/about/index.html b/branch/main/about/index.html new file mode 100644 index 000000000..12351f157 --- /dev/null +++ b/branch/main/about/index.html @@ -0,0 +1,980 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

About the project

+ + +
+ +
+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/about/newsletter/index.html b/branch/main/about/newsletter/index.html new file mode 100644 index 000000000..0c6db0b04 --- /dev/null +++ b/branch/main/about/newsletter/index.html @@ -0,0 +1,898 @@ + + + + Newsletter - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Newsletter + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Newsletter

+ + + +

The CodeRefinery newsletter is sent out every few months. +Subscribers will be informed about upcoming workshops, hackathons and +other events, as well as other interesting developments like new training +material, community building activities and general project +updates.

+

Here you can browse the archive of all previous +newsletters. To sign up, please +visit tinyletter.com/coderefinery.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/about/partners/index.html b/branch/main/about/partners/index.html new file mode 100644 index 000000000..82e370502 --- /dev/null +++ b/branch/main/about/partners/index.html @@ -0,0 +1,1050 @@ + + + + Partners and sponsors - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Partners and sponsors + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Partners and sponsors

+ + + +

Funding

+NeIC logo +

This project is funded by the Nordic e-Infrastructure Collaboration (NeIC). The +project is now in its third phase (2022--2025). NeIC directly funds a 50% +position for project management and a 40% position for workshop and training +coordination. NeIC also provides funding for travel, meetings, and conferences.

+

Organizations providing in-kind support

+

A number of organizations encourage their staff to teach and co-organize +CodeRefinery workshops as part of their work time.

+ +
+
+ +
+
+
+ +
+ + + +
+
+
+ +
+ +

NRIS/Sigma2

+
+

Norway

+
+
+
+
+

If you would like to contribute to shaping the future of the project, please +encourage your organization to join as well. While it costs them your work time +it has also proven to increase cross-organisation and international +collaborations, not only for CodeRefinery workshops.

+

Partners providing local support

+

Our workshops are free to all, because why not. However, teaching doesn't end +after the class. Partners both help organize courses and provide support for +learners during and after the courses. See information for +organizations on how your organization can join.

+

Aalto University (Aalto Scientific Computing, ASC)

+logo: Aalto Scientific Computing +

ASC has been involved in CodeRefinery since 2017.

+ +

TU Delft

+

(we need to write more here)

+

VU Amsterdam

+

(we need to write more here)

+

We are supported by Zulip

+Zulip logo +

Zulip is an open-source modern team chat app designed to keep both live and +asynchronous conversations organized. We very much appreciate their support by +hosting our chat for free.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/about/presentations/index.html b/branch/main/about/presentations/index.html new file mode 100644 index 000000000..132f502bc --- /dev/null +++ b/branch/main/about/presentations/index.html @@ -0,0 +1,918 @@ + + + + Presentations - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Presentations + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Presentations

+ + + + + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/about/project/index.html b/branch/main/about/project/index.html new file mode 100644 index 000000000..de50ddd5f --- /dev/null +++ b/branch/main/about/project/index.html @@ -0,0 +1,1065 @@ + + + + The CodeRefinery project - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - The CodeRefinery project + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

The CodeRefinery project

+ + + + + +

Objectives

+

CodeRefinery improves science by providing training and infrastructure +for researchers, who often need to use computational tools but have +little training in tools beyond basic programming. Our support allows +research to be more reproducible, open, and efficient and thus +promotes the goals of open science and FAIR data management - in +addition to making the lives of countless researchers better, since +they learn the tools needed to do their work with less trouble.

+

We are most known for our practical-level workshop +about base-level practices of software development tools for +researchers. We are also known for our +unique and engaging online teaching +style, and are building a community +around this type of shared teaching.

+

Through our spin-off project Nordic-RSE, we +serve as a hub for research software engineers in the Nordic +countries, namely in Iceland, Denmark, Norway, Sweden, Finland, and +Estonia. Research Software Engineers are basically the professional +level of what we teach, and the two-way collaboration is very +productive.

+

We are a community project seeking volunteers to sustain what we have +accomplished in the first five years.

+

Key facts

+ +

CodeRefinery and The Carpentries

+

We are basically intermediate-level +Carpentries lessons and would like to work +more closely with The Carpentries. Our in-person workshops are +basically "Carpentries-style", though our online workshops have +adopted our own unique style. Our +overall philosophy is similar. Our target audience is learners who +already have some experience with programming and would like to +develop software in a more efficient and sustainable way. We believe +that for many learners we can offer a good second step after their +Carpentries workshop.

+

We would like to work more closely with The Carpentries and offer our +lessons as intermediate-level carpentries. If you are reading this, +please get in touch.

+

Core Activities

+ +

Infrastructure services

+

Our code repository hosting service is open and free for all +researchers based in Nordic universities and research institutes. Please +contact us if you would like to use these services.

+

Training opportunities

+

We offer training opportunities to researchers from Nordic research groups and projects +to learn basic-to-advanced research computing skills and become confident in using +state-of-the-art tools and practices from modern collaborative software +engineering.

+

CodeRefinery Workshops

+

The key objective of CodeRefinery workshop is to grow researchers' software +best practices skills to facilitate open and reproducible research.

+ +

Instructor training workshops

+

One purpose of our Instructor training workshops is to train +CodeRefinery instructors, but being (or becoming) a CodeRefinery +instructor is not required. With the workshops we also aim at building +partnerships with research software engineers +and researchers who are willing to lead skills' transfer within their +local communities in the Nordics.

+

Instructor training workshops take 2 days and cover this lesson +material.

+ +

Other types of events

+

We have organized hackathons, get-together events and shorter workshops +customized for individual research groups. Regularly we also host +online Open House events where CodeRefinery instructors together with +a wider community of interested people work in sprints on topics +ranging from lesson development to website updates.

+

We're always interested in new collaborations, so if you would like to +co-organize an event with us or suggest a new type of event, don't +hesitate to get in touch!

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/about/reports/index.html b/branch/main/about/reports/index.html new file mode 100644 index 000000000..a010a59ac --- /dev/null +++ b/branch/main/about/reports/index.html @@ -0,0 +1,938 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Articles and reports

+ + +
+
    + +
+
+ + +

Articles and blog posts about CodeRefinery

+ +

Project proposals, reports, and documents

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/about/reports/open-call-2021-evaluation.pdf b/branch/main/about/reports/open-call-2021-evaluation.pdf new file mode 100644 index 000000000..5c1a76091 Binary files /dev/null and b/branch/main/about/reports/open-call-2021-evaluation.pdf differ diff --git a/branch/main/about/reports/open-call-2021-proposal.pdf b/branch/main/about/reports/open-call-2021-proposal.pdf new file mode 100644 index 000000000..edb74ccd9 Binary files /dev/null and b/branch/main/about/reports/open-call-2021-proposal.pdf differ diff --git a/branch/main/about/reports/phase-1-collaboration-agreement.pdf b/branch/main/about/reports/phase-1-collaboration-agreement.pdf new file mode 100644 index 000000000..ff9d7a8df Binary files /dev/null and b/branch/main/about/reports/phase-1-collaboration-agreement.pdf differ diff --git a/branch/main/about/reports/phase-1-project-directive.pdf b/branch/main/about/reports/phase-1-project-directive.pdf new file mode 100644 index 000000000..b851c0aa9 Binary files /dev/null and b/branch/main/about/reports/phase-1-project-directive.pdf differ diff --git a/branch/main/about/reports/phase-1-project-plan-v1.0.pdf b/branch/main/about/reports/phase-1-project-plan-v1.0.pdf new file mode 100644 index 000000000..f0f88d356 Binary files /dev/null and b/branch/main/about/reports/phase-1-project-plan-v1.0.pdf differ diff --git a/branch/main/about/reports/phase-1-report.pdf b/branch/main/about/reports/phase-1-report.pdf new file mode 100644 index 000000000..f4bbf29cb Binary files /dev/null and b/branch/main/about/reports/phase-1-report.pdf differ diff --git a/branch/main/about/reports/phase-2-collaboration-agreement.pdf b/branch/main/about/reports/phase-2-collaboration-agreement.pdf new file mode 100644 index 000000000..f5c2de6d2 Binary files /dev/null and b/branch/main/about/reports/phase-2-collaboration-agreement.pdf differ diff --git a/branch/main/about/reports/phase-2-mid-term-report.pdf b/branch/main/about/reports/phase-2-mid-term-report.pdf new file mode 100644 index 000000000..04c95bed4 Binary files /dev/null and b/branch/main/about/reports/phase-2-mid-term-report.pdf differ diff --git a/branch/main/about/reports/phase-2-project-directive.pdf b/branch/main/about/reports/phase-2-project-directive.pdf new file mode 100644 index 000000000..1ab63feb8 Binary files /dev/null and b/branch/main/about/reports/phase-2-project-directive.pdf differ diff --git a/branch/main/about/reports/phase-2-project-plan.pdf b/branch/main/about/reports/phase-2-project-plan.pdf new file mode 100644 index 000000000..343083988 Binary files /dev/null and b/branch/main/about/reports/phase-2-project-plan.pdf differ diff --git a/branch/main/about/reports/phase-2-report.pdf b/branch/main/about/reports/phase-2-report.pdf new file mode 100644 index 000000000..6f4a362a0 Binary files /dev/null and b/branch/main/about/reports/phase-2-report.pdf differ diff --git a/branch/main/about/reports/phase-3-collaboration-agreement.pdf b/branch/main/about/reports/phase-3-collaboration-agreement.pdf new file mode 100644 index 000000000..60860df7c Binary files /dev/null and b/branch/main/about/reports/phase-3-collaboration-agreement.pdf differ diff --git a/branch/main/about/reports/phase-3-project-plan.pdf b/branch/main/about/reports/phase-3-project-plan.pdf new file mode 100644 index 000000000..2eb20da9d Binary files /dev/null and b/branch/main/about/reports/phase-3-project-plan.pdf differ diff --git a/branch/main/about/statistics/OnlineParticipants.png b/branch/main/about/statistics/OnlineParticipants.png new file mode 100644 index 000000000..3fe912fdb Binary files /dev/null and b/branch/main/about/statistics/OnlineParticipants.png differ diff --git a/branch/main/about/statistics/OnlineParticipants_Mar23.png b/branch/main/about/statistics/OnlineParticipants_Mar23.png new file mode 100644 index 000000000..5a738f8b2 Binary files /dev/null and b/branch/main/about/statistics/OnlineParticipants_Mar23.png differ diff --git a/branch/main/about/statistics/Registration_FindOut_Countries.png b/branch/main/about/statistics/Registration_FindOut_Countries.png new file mode 100644 index 000000000..5a3e376d0 Binary files /dev/null and b/branch/main/about/statistics/Registration_FindOut_Countries.png differ diff --git a/branch/main/about/statistics/Registration_FindOut_Countries_Mar23.png b/branch/main/about/statistics/Registration_FindOut_Countries_Mar23.png new file mode 100644 index 000000000..843a3cf80 Binary files /dev/null and b/branch/main/about/statistics/Registration_FindOut_Countries_Mar23.png differ diff --git a/branch/main/about/statistics/index.html b/branch/main/about/statistics/index.html new file mode 100644 index 000000000..cba1e9f1f --- /dev/null +++ b/branch/main/about/statistics/index.html @@ -0,0 +1,5539 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + +

Registration statistics

+ + +
+
    + +
+
+ + +

This is mainly to simplify reporting to funding organizations. But maybe it is +also interesting otherwise.

+
+
+ Twitch and Zoom participants per day +
+
+ Heatmap of how/where participants learned about the workshop by country of affiliation +
+
+ + + + +

Standard CodeRefinery workshops

+ + +

+ Number of participants/registrants by country of affiliation. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EventTimeSwedenNorwayFinlandDenmarkEstoniaIcelandNetherlandsOtherTotalTwitch viewersZoom
+ + Full online workshop (6 half-days) + + + + + Sep 19 + - + Sep 28, 2023 + + + + 31 + + + + + + 103 + + + + + + 100 + + + + + + + + + + + + 19 + + + + + + + + 107 + + + + + + 360 + + + + + 145—54 + + + +
+ + Full online workshop (6 half-days) + + + + + Mar 21 + - + Mar 30, 2023 + + + + 87 + + + + + + 43 + + + + + + 178 + + + + + + 19 + + + + + + + + + + 58 + + + + + + + + 108 + + + + + + 493 + + + + + 216—112 + + + +
+ + Uppsala + + + + + May 9 + - + May 11, 2023 + + + + 15 + + + + + + + + + + + + + + + + + + + + + + + + 15 + + + + + + +
+ + Full online workshop (6 half-days) + + + + + Sep 20 + - + Sep 29, 2022 + + + + 52 + + + + + + 50 + + + + + + 76 + + + + + + 7 + + + + + + + + + + 34 + + + + + + + + 43 + + + + + + 262 + + + + + 97—157 + + + + 25—59 + +
+ + Full online workshop (6 half-days) + + + + + Mar 22 + - + Mar 31, 2022 + + + + 46 + + + + + + 87 + + + + + + 54 + + + + + + 14 + + + + + + + + + + 55 + + + + + + + + 41 + + + + + + 297 + + + + + 144—215 + + + +
+ + Full online workshop (6 half-days) + + + + + May 10 + - + May 20, 2021 + + + + 21 + + + + + + 43 + + + + + + 24 + + + + + + 12 + + + + + + + + + + 16 + + + + + + + + 12 + + + + + + 128 + + + + + + +
+ + Online + + + + + Nov 17 + - + Nov 26, 2020 + + + + 27 + + + + + + 26 + + + + + + 3 + + + + + + + + + + + + + + + + 21 + + + + + + 77 + + + + + + +
+ + Online + + + + + Oct 20 + - + Oct 29, 2020 + + + + 19 + + + + + + 4 + + + + + + 22 + + + + + + 11 + + + + + + + + + + 43 + + + + + + + + 1 + + + + + + 100 + + + + + + +
+ + Online (Mega-CodeRefinery) + + + + + May 25 + - + Jun 4, 2020 + + + + 5 + + + + + + 16 + + + + + + 75 + + + + + + 2 + + + + + + + + 1 + + + + + + + + + + 3 + + + + + + 102 + + + + + + +
+ + Trondheim + + + + + Feb 25 + - + Feb 27, 2020 + + + + 1 + + + + + + 26 + + + + + + + + + + + + + + + + + + 1 + + + + + + 28 + + + + + + +
+ + Espoo + + + + + Dec 10 + - + Dec 12, 2019 + + + + + + + + 30 + + + + + + + + + + + + + + + + + + + + 30 + + + + + + +
+ + Lille + + + + + Nov 25 + - + Dec 5, 2019 + + + + + + + + + + + + + + + + + + + + 28 + + + + + + 28 + + + + + + +
+ + Stockholm + + + + + Nov 19 + - + Nov 21, 2019 + + + + 28 + + + + + + + + + + + + + + + + + + + + + + + + 28 + + + + + + +
+ + Trondheim + + + + + Oct 22 + - + Oct 24, 2019 + + + + + + 20 + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + +
+ + Aalborg + + + + + Jun 11 + - + Jun 13, 2019 + + + + + + + + + + 18 + + + + + + + + + + + + + + 2 + + + + + + 20 + + + + + + +
+ + Oslo + + + + + Jun 3 + - + Jun 5, 2019 + + + + 1 + + + + + + 18 + + + + + + + + 1 + + + + + + + + + + + + + + + + + + 20 + + + + + + +
+ + Helsinki + + + + + May 27 + - + May 29, 2019 + + + + 1 + + + + + + + + 26 + + + + + + + + + + + + + + + + + + + + 27 + + + + + + +
+ + Gothenburg + + + + + May 21 + - + May 23, 2019 + + + + 25 + + + + + + + + + + + + + + + + + + + + + + + + 25 + + + + + + +
+ + Tartu + + + + + Apr 2 + - + Apr 4, 2019 + + + + + + + + + + + + 25 + + + + + + + + + + + + 1 + + + + + + 26 + + + + + + +
+ + Stockholm + + + + + Mar 25 + - + Mar 27, 2019 + + + + 28 + + + + + + + + + + + + + + + + + + + + 2 + + + + + + 30 + + + + + + +
+ + Espoo + + + + + Dec 11 + - + Dec 13, 2018 + + + + + + + + 31 + + + + + + 1 + + + + + + + + + + + + + + 1 + + + + + + 33 + + + + + + +
+ + Uppsala + + + + + Dec 3 + - + Dec 5, 2018 + + + + 30 + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + 31 + + + + + + +
+ + Kiruna + + + + + Nov 21 + - + Nov 23, 2018 + + + + 36 + + + + + + 1 + + + + + + + + + + + + + + + + + + 1 + + + + + + 38 + + + + + + +
+ + Reykjavik + + + + + Aug 21 + - + Aug 23, 2018 + + + + 3 + + + + + + + + + + + + + + 22 + + + + + + + + + + 1 + + + + + + 26 + + + + + + +
+ + Oslo + + + + + Jun 12 + - + Jun 14, 2018 + + + + 3 + + + + + + 38 + + + + + + + + + + + + + + + + + + 1 + + + + + + 42 + + + + + + +
+ + Espoo + + + + + May 29 + - + May 31, 2018 + + + + + + + + 48 + + + + + + + + + + + + + + + + + + + + 48 + + + + + + +
+ + Lund + + + + + May 15 + - + May 17, 2018 + + + + 30 + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + 31 + + + + + + +
+ + Turku + + + + + Mar 20 + - + Mar 22, 2018 + + + + 1 + + + + + + + + 22 + + + + + + + + + + + + + + + + + + + + 23 + + + + + + +
+ + Trondheim + + + + + Feb 27 + - + Mar 1, 2018 + + + + 1 + + + + + + 20 + + + + + + + + 1 + + + + + + + + + + + + + + + + + + 22 + + + + + + +
+ + Espoo + + + + + Dec 14 + - + Dec 16, 2017 + + + + + + + + 40 + + + + + + + + + + + + + + + + + + + + 40 + + + + + + +
+ + Linköping + + + + + Nov 7 + - + Nov 9, 2017 + + + + 21 + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + 22 + + + + + + +
+ + Aarhus + + + + + Oct 24 + - + Oct 26, 2017 + + + + 3 + + + + + + + + + + 24 + + + + + + + + + + + + + + + + + + 27 + + + + + + +
+ + Tromsø + + + + + Jun 19 + - + Jun 21, 2017 + + + + 1 + + + + + + 21 + + + + + + + + + + + + + + + + + + 1 + + + + + + 23 + + + + + + +
+ + Copenhagen + + + + + May 9 + - + May 11, 2017 + + + + 3 + + + + + + + + + + 19 + + + + + + + + + + 1 + + + + + + + + + + + + 23 + + + + + + +
+ + Stockholm + + + + + Feb 20 + - + Feb 22, 2017 + + + + 34 + + + + + + + + + + + + + + + + + + + + + + + + 34 + + + + + + +
+ + Espoo + + + + + Dec 14 + - + Dec 16, 2016 + + + + + + + + 25 + + + + + + + + + + + + + + + + + + + + 25 + + + + + + +
+ Total + + 36 + + 553 + + 518 + + 754 + + 130 + + 25 + + 23 + + 226 + + 375 + + 2604 +
+ + +

Instructor training events

+ + +

+ Number of participants/registrants by country of affiliation. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EventTimeSwedenNorwayFinlandDenmarkEstoniaIcelandNetherlandsOtherTotalTwitch viewersZoom
+ + Online (with FocusCoE) + + + + + Nov 2 + - + Nov 9, 2020 + + + + + + + + + + + + + + + + + + + + 14 + + + + + + 14 + + + + + + +
+ + Online (with TU Delft) + + + + + Jun 24 + - + Jun 25, 2020 + + + + + + 1 + + + + + + 1 + + + + + + + + + + + + 21 + + + + + + + + + + + + 23 + + + + + + +
+ + Stockholm + + + + + Nov 4 + - + Nov 5, 2019 + + + + 15 + + + + + + 8 + + + + + + 2 + + + + + + 2 + + + + + + 2 + + + + + + + + + + + + 1 + + + + + + 30 + + + + + + +
+ Total + + 3 + + 15 + + 9 + + 3 + + 2 + + 2 + + 0 + + 21 + + 15 + + 67 +
+ + +

Shorter workshops and other events

+ + +

+ Number of participants/registrants by country of affiliation. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EventTimeSwedenNorwayFinlandDenmarkEstoniaIcelandNetherlandsOtherTotalTwitch viewersZoom
+ + CarpentryCon 2022: Online teaching strategies from CodeRefinery + + + + + Aug 3, 2022 + + + + + + + + + + + + + + + + + + + + 15 + + + + + + 15 + + + + + + +
+ + Community teaching mini-workshop + + + + + Jun 21, 2022 + + + + 5 + + + + + + 7 + + + + + + 5 + + + + + + 2 + + + + + + + + + + + + + + 3 + + + + + + 22 + + + + + + +
+ + Git workshop with Compex Systems Modelling group at UiT + + + + + Feb 16 + - + Feb 23, 2022 + + + + + + 19 + + + + + + + + + + + + + + + + + + + + + + 19 + + + + + + +
+ + Python for Scientific Computing + + + + + Oct 25 + - + Oct 28, 2021 + + + + + + + + + + + + + + + + + + + + + + + +
+ + CodeRefinery workshop with focus on Git and GitLab for Metacenter + + + + + Mar 25 + - + Apr 8, 2021 + + + + + + 15 + + + + + + + + + + + + + + + + + + + + + + 15 + + + + + + +
+ + Online CodeRefinery Hackathon on Software Testing + + + + + Mar 17 + - + Mar 24, 2021 + + + + 16 + + + + + + 6 + + + + + + 4 + + + + + + 3 + + + + + + + + + + + + + + 4 + + + + + + 33 + + + + + + +
+ + Online CodeRefinery Workshop on Software Testing + + + + + Mar 17, 2021 + + + + 31 + + + + + + 14 + + + + + + 7 + + + + + + 5 + + + + + + + + + + 2 + + + + + + + + 10 + + + + + + 69 + + + + + + +
+ + Introduction to Shell, Computing resources for researchers, and HPC Kickstart (Aalto University and University of Oslo) (online) + + + + + Jan 29, 2021 + + + + + + 59 + + + + + + 71 + + + + + + + + + + + + + + + + + + + + 130 + + + + + + +
+ + Introduction to Conda for (Data) Scientists (online) + + + + + Jan 8, 2021 + + + + 1 + + + + + + 39 + + + + + + 5 + + + + + + + + + + + + 2 + + + + + + + + 1 + + + + + + 48 + + + + + + +
+ + Collaborative version control with Git (online) + + + + + Dec 10 + - + Dec 11, 2020 + + + + + + 15 + + + + + + + + + + + + + + + + + + + + + + 15 + + + + + + +
+ + Version control (Karlstad/online) + + + + + Sep 22 + - + Sep 23, 2020 + + + + 11 + + + + + + + + + + + + + + + + + + + + 1 + + + + + + 12 + + + + + + +
+ + Python for Scientific Computing (online) + + + + + Sep 14 + - + Sep 23, 2020 + + + + 3 + + + + + + 24 + + + + + + 41 + + + + + + + + + + + + + + + + + + + + 68 + + + + + + +
+ + GitHub without command line (Tampere/online) + + + + + Aug 13, 2020 + + + + + + + + 16 + + + + + + + + + + + + + + + + + + + + 16 + + + + + + +
+ + Workshop for those familiar with Git (online) + + + + + May 18 + - + May 20, 2020 + + + + 20 + + + + + + 2 + + + + + + 1 + + + + + + + + + + + + + + + + 4 + + + + + + 27 + + + + + + +
+ + Collaborative Git (online) + + + + + May 6, 2020 + + + + 25 + + + + + + 5 + + + + + + 3 + + + + + + 4 + + + + + + + + + + + + + + + + + + 37 + + + + + + +
+ + GitHub without command line (online) + + + + + Apr 15 + - + Apr 22, 2020 + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + + 10 + + + + + + +
+ + Introduction to Git (online) + + + + + Apr 7 + - + Apr 8, 2020 + + + + 19 + + + + + + + + 1 + + + + + + + + + + + + + + + + 2 + + + + + + 22 + + + + + + +
+ + Best Software Practices for the Norwegian Earth System Model (Oslo/Bergen/Online) + + + + + Feb 5, 2020 + + + + + + 30 + + + + + + + + + + + + + + + + + + + + + + 30 + + + + + + +
+ + Social coding and open software (Oslo) + + + + + Jan 9, 2020 + + + + + + 21 + + + + + + + + + + + + + + + + + + + + + + 21 + + + + + + +
+ + Hackathon (Stockholm) + + + + + Nov 6 + - + Nov 7, 2019 + + + + 4 + + + + + + 8 + + + + + + 3 + + + + + + 1 + + + + + + 1 + + + + + + + + + + + + 1 + + + + + + 18 + + + + + + +
+ + Reproducibility workshop (Stockholm) + + + + + Sep 9 + - + Sep 12, 2019 + + + + 12 + + + + + + + + + + + + + + + + + + + + + + + + 12 + + + + + + +
+ + Python for Dynamics and Evolution of Earth and Planets (Oslo) + + + + + Apr 1 + - + Apr 5, 2019 + + + + + + 12 + + + + + + + + + + + + + + + + + + + + + + 12 + + + + + + +
+ + Mixed Arts with CodeRefinery & Software Carpentry (Copenhagen) + + + + + Mar 5, 2019 + + + + + + + + + + 40 + + + + + + + + + + + + + + + + + + 40 + + + + + + +
+ + Git in practice (Oslo) + + + + + Feb 27, 2019 + + + + + + 18 + + + + + + + + + + + + + + + + + + + + + + 18 + + + + + + +
+ + Git workshop (Umeå) + + + + + Oct 16, 2017 + + + + 21 + + + + + + + + + + + + + + + + + + + + + + + + 21 + + + + + + +
+ + Workshop: Interfacing Fortran, C, C++, and Python (Manchester) + + + + + Sep 8, 2017 + + + + + + + + + + + + + + + + + + + + 15 + + + + + + 15 + + + + + + +
+ + Workshop: Mixed Martial Arts with CodeRefinery (Umeå) + + + + + May 29, 2017 + + + + + + + + + + + + + + + + + + + + 15 + + + + + + 15 + + + + + + +
+ + CodeRefinery get-together (Stockholm) + + + + + May 19, 2017 + + + + 15 + + + + + + + + + + + + + + + + + + + + + + + + 15 + + + + + + +
+ + CodeRefinery seminar (Oslo) + + + + + Apr 6, 2017 + + + + + + 15 + + + + + + + + + + + + + + + + + + + + + + 15 + + + + + + +
+ Total + + 29 + + 183 + + 319 + + 157 + + 55 + + 1 + + 0 + + 4 + + 71 + + 790 +
+ + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/atom.xml b/branch/main/atom.xml new file mode 100644 index 000000000..e9395f8d3 --- /dev/null +++ b/branch/main/atom.xml @@ -0,0 +1,4348 @@ + + + CodeRefinery + Teaching essential tools so that researchers can make full use of software, computing, and data. + + + Zola + 2023-06-25T00:00:00+00:00 + https://coderefinery.org/atom.xml + + What we plan to improve for the September 2023 workshop + 2023-06-25T00:00:00+00:00 + 2023-06-25T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2023/06/25/planning-sep-workshop/ + + <p>In this post we wish to share our ideas for what we want to change and improve +for the for the <a 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 href="https://coderefinery.org/join/chat/">via +chat</a> or via email to +<a href="mailto:support@coderefinery.org">support@coderefinery.org</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">&quot;Keep two weeks or split in two or more parts?&quot;</a>.</p> +</div> +<!-- toc --> +<h2 id="keep-two-weeks-or-split-in-two-or-more-parts">Keep two weeks or split in two or more parts?</h2> +<ul> +<li>Problems with current set-up (6 half-days): +<ul> +<li>Second week has different software requirements and is rather different from first week (git)</li> +<li>It could use more exercises but there is currently not much time</li> +<li>It is dense</li> +<li>Not each lesson feels relevant/interesting for all</li> +</ul> +</li> +<li>We are considering keeping first week focused on Git over 3 days as we have +now, but to <strong>spread the second week over a longer time frame (one or two +sessions per week)</strong>.</li> +<li>Advantages of splitting it off: +<ul> +<li>More time per lesson</li> +<li>More focused preparation</li> +<li>More time between lessons (more time to prepare for us, more time to digest and apply for learners)</li> +<li>Possibility to add hackathons/ more personalized Q&amp;A</li> +<li>Attracting different and more interested audiences</li> +<li>The second half could become more research-software-hour-y</li> +<li>Enables to do more around the second weeks topics, like adding a hackathon +or some panel discussion or a seminar where we could invite previous CR +participants/teachers or other people to talk about cool stuff they have +been doing around the topic.</li> +<li>Collaborative document might be enough and Zoom rooms might not be needed.</li> +</ul> +</li> +<li>Downsides: +<ul> +<li>Less cohesive workshop</li> +<li>Maybe more difficult to schedule although it might be easier to commit time both for organizers and for learners (two instructors would be able to deliver the entire workshop, if needed)</li> +<li>Credits? But can be solved by giving recommendations to local organizers (learning diary, quiz, git log)</li> +</ul> +</li> +<li>It could make it more difficult for: +<ul> +<li>Scheduling other workshops that build on top of this workshop.</li> +<li>For those who organize the streaming and video production.</li> +<li>For local organizers (<strong>we are particularly interested in their feedback about this idea</strong>).</li> +</ul> +</li> +<li>The first week part could also be extended with a hackathon (3 half-days +teaching, followed by a session e.g. one week later).</li> +<li>Advertise sessions with a more descriptive title (not &quot;Jupyter&quot;, but &quot;How to +prototype in Python&quot; 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 &quot;research software hour&quot; 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 &quot;optimized away&quot; 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 &quot;binding&quot; 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 &quot;wrong&quot; 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 (&quot;expert helpers&quot;).</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 &quot;might&quot; 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 &quot;in-person&quot;, +&quot;breakout rooms&quot;, &quot;exercise rooms&quot;, &quot;satellite events&quot;, ... +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> + + + + + Upcoming workshops and events + 2023-04-24T00:00:00+00:00 + 2023-04-24T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/workshops/upcoming/ + + <h2 id="core-coderefinery-workshops">Core CodeRefinery Workshops</h2> +<!-- If you edit this section, also update the date on top of this page. This +is important for RSS feed. --> +<p>We don't want you to miss a workshop or event. The best +way to stay informed is to join <a href="https://tinyletter.com/coderefinery">our newsletter</a> +(we are working on reviving it and will post updates there soon). +You can also subscribe to our <a href="/atom.xml">RSS feed</a>.</p> +<h2 id="past-workshops-and-events">Past workshops and events</h2> +<ul> +<li><a href="https://coderefinery.github.io/2023-09-19-workshop/">Tue-Thu, September 19-21 and 26-28 (6 half-days, online)</a></li> +<li><a href="https://scicomp.aalto.fi/training/scip/python-for-scicomp-2022/">Python for Scientific Computing, November 22-25, +2022</a>.</li> +<li><a href="https://coderefinery.org/workshops/past/">All our past workshops and events</a>.</li> +</ul> +<h2 id="upcoming-workshops-from-partner-organizations">Upcoming workshops from partner organizations</h2> +<p>Partners are invited to <a 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> +<ul> +<li><a href="https://scicomp.aalto.fi/training/scip/python-for-scicomp-2023/">Python for Scientific Computing, November 07th-10th, +2023</a>.</li> +</ul> +<h2 id="privacy-policy">Privacy policy</h2> +<p>Our <a href="/privacy-policy/">privacy policy</a> +documents what registration data we store, where, and why.</p> + + + + + Lessons learned from the March 2023 online workshop + 2023-04-12T00:00:00+00:00 + 2023-04-12T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2023/04/12/lessons-learned-mar-2023/ + + <p>March 21-23 and 28-30, 2023, we held again our <a 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 href="https://coderefinery.org/organization/contact/">reach out to +us</a>. This complements our +lessons learned from <a href="https://coderefinery.org/blog/2020/04/14/first-online-workshop/">our first online workshop +2020</a>, the +<a href="https://coderefinery.org/blog/2021/11/25/lessons-learned-may-2021/">May 2021 +workshop</a>, +and the <a 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: &quot;If you feel comfortable with this you’re gonna be fine during the +workshop&quot;.</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 href="https://coderefinery.org/calendars/">CodeRefinery calendar</a>.</li> +<li>Link all relevant repositories in one place (i.e. this calendar and anything +that needs attention near a workshop). Make sure those repositories have good +instructions in READMEs.</li> +</ul> + + + + + CodeRefinery workshop, 21-23 and 28-30 March 2023 + 2023-02-14T00:00:00+00:00 + 2023-02-14T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2023/02/14/march-workshop/ + + <p>Our March workshop is soon. By now, many of you know what a +CodeRefinery workshop is - git (intro and collaborative), social +coding, reproducible research, Jupyter, documentation, testing, and +modular code development (<a href="https://coderefinery.org/lessons/core/">check all +material</a>). But what's less +known is all the new ways to take part.</p> +<p><strong><a href="https://coderefinery.github.io/2023-03-21-workshop/">Workshop page</a> +and <a href="https://indico.neic.no/e/coderefinery-march-2023">Register</a></strong></p> +<p>In case you didn't know, we teach via livestream - which means anyone +can attend and we have unlimited capicity. Our <a href="https://coderefinery.org/workshops/teaching-style/">teaching +style</a> (as far as we can tell, quite +unique to us!) makes the courses still engaging while allowing us to +reach a much larger audience than we could otherwise. We also offer +some in-person or Zoom attendance options.</p> +<p>As an <strong>individual</strong>, you can attend - by yourself watching the +livestream, apply to work together in a Zoom team we organize, or some +local partners will even have in-person rooms to attend. Registration +is <strong>not</strong> binding, sign up for information and come when you can (you +won't take a seat from others). <strong>To simplify registration, you can +just sign up and you'll get contacted about Zoom/in-person +possibilities later.</strong></p> +<p><strong>If you have some friends, work together!</strong> Book your own meeting +room and watch the livestream together. We provide hands-on exercises +that on which you can work together - or even try to apply the +techniques to your own projects during this exercise time. Working +with a friend seriously improves learning and uptake after the +workshop.</p> +<p><strong>If you've been to CodeRefinery before, why not volunteer?</strong> (For any +of these, sign up in the normal registration form and tick the +interested in being staff/observer box):</p> +<ul> +<li>Be a team leader to allow us to support more teams (register in the +normal form and indicate this interest there).</li> +<li>Be a co-instructor: thanks to our +<a href="https://coderefinery.org/blog/2022/10/31/co-teaching/">co-teaching</a>, we've reduced the +barrier to get started. In fact, someone that has taken +CodeRefinery once would make a perfect co-instructor for a lesson, +since you'll remember what it was like to be a learner and act.</li> +<li>We can always use volunteers to follow up on HackMD questions, help +manage Zoom, communications, and generally all the other little +things that need doing.</li> +</ul> +<p>Why volunteer? You'll learn more of the workshop contents and get +involved in our teaching network - really good for both your career +and your organization.</p> +<p>More than anytime before, CodeRefinery is about being accessible to as +many learning styles as possible. Anyone can register and you'll get +information, you can decide if you want to watch the livestream, +review videos later, or just be aware of what happened and check again +later.</p> +<p>We hope to see you there!</p> + + + + + Learner teams in courses + 2022-11-28T00:00:00+00:00 + 2022-11-28T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2022/11/28/teams/ + + <p><em>Part of a series on the <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of +Teaching</a></em></p> +<p>In April/May 2020, when we started doing &quot;large&quot; (~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 (&quot;expert helpers&quot;) 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 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 &quot;do you want to take part in a team?&quot; 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 &quot;work tables in a classroom&quot;. 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: &quot;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&quot;. 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 +&quot;livestream for the masses, higher-quality teams for those who want +them.&quot;</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 href="https://coderefinery.github.io/manuals/team-leaders/">CodeRefinery manuals: Exercise +leaders</a></li> +<li><a href="https://coderefinery.github.io/manuals/expert-helpers/">Expert helpers and their role in helping exercise +leaders</a></li> +<li>Series index: <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of Teaching</a></li> +</ul> + + + + + Livestreaming courses + 2022-11-14T00:00:00+00:00 + 2022-11-14T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2022/11/14/livestreaming-courses/ + + <p><em>Part of a series on the <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of +Teaching</a></em></p> +<p>The idea of livestreamed courses came in early 2022, during the early +phase of remote work and teaching. Everyone started online courses +and events, but immediately stared hiding their connection information +behind registrations because &quot;someone might do something bad if they +could join&quot;[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 &quot;meeting&quot; +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 (&quot;HackMD&quot;) 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 &quot;anyone who wasn't able to +register can watch the stream&quot;. We also got a lot of experience with +streaming in our project <a href="https://researchsoftwarehour.github.io">Research Software +Hour</a>.</p> +<p>The fully &quot;proper&quot; livestreamed course was 2021 February, our <a 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 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 &quot;top&quot; 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 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 href="https://coderefinery.github.io/manuals/livestream-teaching/">Teaching via +livestreaming</a> +in the community-teaching guide.</li> +<li><a href="https://coderefinery.github.io/manuals/coderefinery-mooc/">CodeRefinery +MOOC</a>, +which is mainly about livestreaming.</li> +</ul> +<hr /> +<p>[1] Incidentally, since 2020 we have had a daily online meeting, our +Scientific Computing Garage help session, with the Zoom link online, +and have never had any problems. My hypothesis is that if you don't +have an exact data listed along with the Zoom information, it's not +found by those that want to troll.</p> + + + + + Lessons learned from the Sep 2022 online workshop + 2022-11-08T00:00:00+00:00 + 2022-11-08T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2022/11/08/lessons-learned-Sep-2022/ + + <p>September 20-22 and 27-29, 2022, we held again our <a 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 href="https://coderefinery.org/blog/2020/04/14/first-online-workshop/">our first online workshop +2020</a> and the +<a 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 &quot;wrong&quot; 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 &quot;are not needed&quot;</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 href="https://github.com/coderefinery/coderefinery.org/issues/697">here</a>.</li> +</ul> +<h3 id="collaborative-notes">Collaborative notes</h3> +<ul> +<li>HackMD goes to Twitch chat anyway so maybe no point in keeping it as a secret. +<ul> +<li>Add HackMD link to the workshop page and use the workshop page as main entry point so that participants don't have to hunt for links in email inboxes.</li> +</ul> +</li> +<li>HackMD started to be slow even if it should not with ~100 participants. +<ul> +<li>Numbering questions adds confusion -&gt; keep bullets and change to numbers in archive if needed. But this problem was only there because the document was sluggish at times.</li> +<li>Note for future: when pre-seeding the question numbers, leave a line between them. Then, when someone pushes enter after a number to add a new line, it doesn't increment the future numbers. Just saw this, this solves a big problem with numbering.</li> +</ul> +</li> +<li>Later in the workshop we deployed our own HedgeDoc instance, which worked quite well.</li> +</ul> +<h3 id="installation-and-tools">Installation and tools</h3> +<ul> +<li>Many did not install software beforehand. Either we haven't communicated clearly enough that this is needed or the install sessions were not recognized and not taken up. Very few people showed up at the install help sessions.</li> +</ul> +<h3 id="lesson-content">Lesson content</h3> +<ul> +<li>More big picture cohesion between exercises: It has been suggested to have a better connection between lessons and work on one repository that is continuously improved.</li> +<li>Provide snapshots and starting points for those who have not done the previous exercises.</li> +<li>Topics in Day 4 (at least) would deserve a longer lesson.</li> +<li>We can try to communicate better that after the Git lessons it can be OK and also useful to join only for the lessons of interest (to motivate people to pop in also for 1 or 2 lessons).</li> +<li>Especially in in-person: the Twitch sessions felt long (since there was so little interaction in the in-person rooms).</li> +</ul> +<h3 id="communication-with-participants">Communication with participants</h3> +<ul> +<li>Add all sessions to the <a href="https://coderefinery.org/calendars/">CodeRefinery calendar</a>.</li> +<li>Link all relevant repositories in one place (i.e. this calendar and anything that needs attention near a workshop). Make sure those repositories have good instructions in READMEs.</li> +</ul> + + + + + CodeRefinery Mastodon account + 2022-11-08T00:00:00+00:00 + 2022-11-08T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2022/11/08/mastodon/ + + <p>For the obvious reasons, CodeRefinery is looking into a Mastodon +account. You can now find us at +<a href="https://fosstodon.org/@coderefinery">@coderefinery@fosstodon.org</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 href="https://mastodon.help">https://mastodon.help</a> gives a basic introduction of the how and +why. <a 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>@username@server.name</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>@coderefinery@fosstodon.org</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 href="https://fosstodon.org">https://fosstodon.org</a> (FOSS = &quot;free and open source +software&quot;) to focus on the software and technology side of things.</li> +<li>For others in academia or research, +<a 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 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 (&quot;reblog&quot;) 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>&quot;Fediverse&quot; (&quot;federated universe&quot;) is the term used to refer to the +entire network of Mastodon servers (and more) that can communicate. +It's not just Mastodon - +<a 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 href="https://fediscience.org/server-list.html">Academia/research server list</a></li> +<li><a href="https://mastodon.help">https://mastodon.help</a></li> +<li><a href="https://fedi.tips/">https://fedi.tips/</a></li> +<li><a href="https://www.pwnallthethings.com/p/twitter-was-special-but-its-time">About engagement farming</a></li> +</ul> + + + + + Video publishing supports more learning styles + 2022-11-08T00:00:00+00:00 + 2022-11-08T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2022/11/21/video-publishing/ + + <p><em>Part of a series on the <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of +Teaching</a></em></p> +<p>What if all the talking in a course didn't disappear right after the +course was over?</p> +<p>When we went online, many people thought: avoid recording courses, +that's a privacy risk for participants. I firmly think this is the +right choice: I don't think any privacy risk to participants is worth it, and &quot;don't +say anything if you don't want to be recorded&quot; isn't good enough, +either - I don't want to push &quot;publish&quot; 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 &quot;good enough&quot; 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 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 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 href="https://youtu.be/thvMNTBJg2Y">video demonstration of ffmpeg-editlist</a></li> +<li><a href="https://coderefinery.github.io/manuals/video-editor/">Video editor</a> +role description in the CodeRefinery manuals</li> +<li><a href="https://github.com/coderefinery/ffmpeg-editlist">ffmpeg-editlist</a></li> +<li><a 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 &quot;it won't be interesting for others to watch later&quot;. +This post also shows how that's the wrong perspective: the videos +aren't only for random people later, but people in the course already.</p> + + + + + Reverse hybrid teaching + 2022-11-07T00:00:00+00:00 + 2022-11-07T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2022/11/07/reverse-hybrid/ + + <p><em>Part of a series on the <a href="/blog/2022/10/17/future-of-teaching/">Future of +Teaching</a></em></p> +<p>In 2020, we went to remote teaching. In 2022, we are talking about +hybrid so that we can keep accessibility benefits of being online, +while returning to some of the benefits of interaction. But does this +work? There are plenty of issues with hybrid, mainly the inequality +of the people in-person and those who are remote. What can we do +about this?</p> +<p>We've found a surprising solution which we call <strong>reverse hybrid</strong>. +Surely others have thought of this, and maybe there is even a proper +name.</p> +<p>Let's do a thought experiment in a large course. There is one teacher +and hundreds of students. What's the benefit to students doing this +in-person? It's probably not being in the same room as the teacher, +since most students don't have time to ask a question, or even +approach the teacher after the course. The benefit is how students +can interact with each other beside the lecture. The downside is that +making good, accessible online material in a lecture room is hard.</p> +<p>I wouldn't quite say it's accidental, but we have started this reverse +hybrid strategy: the teachers are online, and students can be +in-person in small groups. We started this by encouraging students to +meet up with their friends or colleagues to work on exercises, while +we teach online. As things became more relaxed, we had some staff +organize official in-person exercise sessions - while the current +instructors kept teaching online. This has worked surprising well - +students who want interaction can get it (and actually interact, +without disrupting the whole course), and those that don't can still +attend no matter where they are.</p> +<p>But what do we lose? Do we lose interaction with instructors? As +our posts on <a href="https://coderefinery.org/blog/2022/10/31/co-teaching/">co-teaching</a> and <a href="https://coderefinery.org/blog/2022/10/24/parallel-chat/">parallel chat</a> show, no! When you get to these large +courses, students can't interact with instructors without technology +anyway. In-person interactions aren't as anonymous, so that solution doesn't +motivate all learners to be active.</p> +<p>And what do we gain? The course isn't bound to one location, +literally anyone in the world can attend. There are high-quality +materials that everyone can review afterwards, so that the audience +has the time to relax and interact. By being able to scale up, we can +have more staff, which allows us to interact more via <a href="https://coderefinery.org/blog/2022/10/24/parallel-chat/">parallel chat</a> or +co-instructors. It's even possible to go as far as we go and make +each course an international collaboration with local breakout rooms, +and plenty of staff to manage everything.</p> +<p>Is &quot;reverse hybrid&quot; 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 href="https://coderefinery.github.io/manuals/co-instructors/">CodeRefinery manuals on +co-instructors</a></li> +<li><a href="https://coderefinery.github.io/manuals/hackmd-mechanics/">CodeRefinery manuals on how we do parallel chat, &quot;HackMD&quot;</a></li> +<li>Series index: <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of Teaching</a></li> +</ul> + + + + + Co-teaching and scaling up + 2022-10-31T00:00:00+00:00 + 2022-10-31T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2022/10/31/co-teaching/ + + <h1 id="co-teaching">Co-teaching</h1> +<p>So you are trying to teach a large online course. Everyone knows this +will be boring and monotonous, right? What if we told you that our +large, online, livestreamed courses feel more interactive than our old +small in-person courses? Part of that is due to the +<a href="https://coderefinery.org/blog/2022/10/24/parallel-chat/">parallel chat</a>, +but a significant part also comes from co-teaching, the topic +of this article.</p> +<p>The basic idea is that we accept that the audience is probably going +to be quiet, and plant someone to interact with the instructor. This +person doesn't pretend to be a student, but directly acts as a +co-instructor and the course becomes a discussion between them. This +is different than having two instructors who alternate teaching, or an +instructor or helper. It's more like a pilot-co-pilot situation, +where both pilots have a certain focus, but the flying is a continual +team process with each having a focus (flying and monitoring) but both +constantly providing information to each other.</p> +<p>Doing co-teaching in practice requires some care, but isn't that hard. +There are different models, usually we try to designate a primary who +is going over the course material, and the other co-instructor acts as +a learner, asking questions and engaging by being the &quot;voice of the +audience&quot;. 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 &quot;asking questions a +learner might have&quot; 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 +&quot;500-person lecture&quot; problems that I had when I was in university. We +now use co-teaching for anything that needs to seem &quot;professional&quot;, +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 href="https://coderefinery.github.io/manuals/team-teaching/">Co-teaching in CodeRefinery +manuals</a></li> +<li><a href="https://coderefinery.github.io/community-teaching/team-teaching/">Co-teaching in Community +Teaching</a></li> +<li>Series index: <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of Teaching</a></li> +</ul> + + + + + Parallel chat ("HackMD") and scaling teaching + 2022-10-24T00:00:00+00:00 + 2022-10-24T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2022/10/24/parallel-chat/ + + <p><em>Part of a series on the <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of +Teaching</a></em></p> +<p>One of the most common complaints when moving online was the amount of +interaction and feedback possible. How often have you heard &quot;please +turn on your cameras so I can see how it's going&quot; - 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 &quot;parallel chat&quot;, or as we typically call it &quot;HackMD&quot; +after the service we started using, <a 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 &quot;one right answer&quot; 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 &quot;+&quot; or &quot;-&quot; or &quot;o&quot; added after the options.</li> +</ul> +<p>Just look at the number of questions in our old courses, <a href="https://coderefinery.github.io/2022-03-22-workshop/questions/day1/">one 3.5-hour +day of our May 2022 +workshop</a> - +and this is day 1, when people didn't yet know how it worked.</p> +<p>But there are some disadvantages:</p> +<ul> +<li>An absolute flood of information, which <em>will</em> be distracting to +anyone trying to follow it. We warn people at the start to be +careful about this, and it's mostly OK. It's anyway archived for +follow-up later at one's convenience.</li> +<li>Another window for people follow. Like above, we warn people to +focus on the learning and parallel chat only when there is time.</li> +<li>It's different, so needs some explanation (but we've seen people +catch on very quickly once they see it).</li> +</ul> +<p>So, just how does this work? Well, we create the text document with +some standard notes at the top and bottom. It's made freely editable +without any login, shared to everyone in the workshop. All learners +are told to ask every new question in +list item at the bottom of the document - <em>always</em> the bottom, since +that's the only thing we follow. The course team has this open and +answers questions, focusing their attention at the bottom. Some other +notes:</p> +<ul> +<li>Instructors should discuss it via voice often, mentioning when the +look at it and when questions come from it. Let the audience know +it's actually useful.</li> +<li>Screenshare it during the Q&amp;A parts and breaks (you need a tool that +won't show the names of anyone who might have happened to be logged +in - HackMD does this properly). It provides something to look at +and reminds people that it exists and has lots of answers.</li> +<li>We often use it as an icebreaker as a demo. Maybe not everyone +understands it.</li> +<li>It can also be used for lightweight polls: learners can <code>+1</code> or add +a character to a line to make simple bar graphs.</li> +<li>Like we said above, it's not a perfect tool, but easy to use and fun.</li> +<li>A &quot;HackMD manager&quot; 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 href="https://coderefinery.github.io/manuals/hackmd-mechanics/">HackMD mechanics in CodeRefinery +manuals</a></li> +<li><a href="https://coderefinery.github.io/manuals/hackmd-helper/">HackMD manager role +description</a></li> +<li>Series index: <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of Teaching</a></li> +</ul> + + + + + Python for Scientific Computing open for registration and collaborators + 2022-10-21T00:00:00+00:00 + 2022-10-21T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2022/10/21/python-for-scicomp/ + + <p>Our next workshop, <a 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 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 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 href="https://coderefinery.github.io/manuals/chat/">CodeRefinery</a> chat and +introduce yourself.</p> + + + + + CodeRefinery teaching strategies and the future of teaching + 2022-10-17T00:00:00+00:00 + 2022-10-17T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2022/10/17/future-of-teaching/ + + <p><em>This is the index page of the <a href="/blog/2022/10/17/future-of-teaching/">Future of +Teaching</a> series.</em></p> +<p>In early 2020, global teaching got disrupted by the Covid-19 +pandemic. Countless courses struggled to maintain interaction and +teaching, but CodeRefinery found that by embracing the times, our +teaching could become even better. <strong>This series of blog posts will +discuss what we did and how you can learn from it.</strong></p> +<p>So, what is the future of teaching? For type of practical, hands-on +learning, we could try to classify learning situations into three +types:</p> +<ul> +<li>Very large courses and massive open online courses (MOOC),where +individual interaction isn't possible.</li> +<li>Small-medium courses, 10-30 people, with traditional classroom-type +interactions.</li> +<li>One-on-one or small-group mentoring.</li> +</ul> +<p>Before Covid, CodeRefinery was in the middle category with exclusively +in-person classroom sessions over a few days. During Covid, we +focused on very large online courses, which incidentally corresponded +with the rise of Research Software Engineering services in some of our +communities. This produced an interesting effect: <strong>The middle layer +got squeezed out</strong>: very large courses (with the proper tools) were +better at conveying information, and mentoring and co-working was best +for supporting people outside of these courses. These two things +combined seemed to greatly reduce the need for traditional +medium-sized courses. At the same time, the total effort became less +as we scaled up, which we'll talk about later.</p> +<p>Of course, you can't move medium in-person courses to large online +courses without adjusting how you teach. However, once we did adjust, +we were quite happy. We want to take some time in these posts to +informally discuss what we did, sort of as a guide to the other +information which can be found in <a 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 &quot;return to +normal&quot;, 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 &quot;reverse hybrid&quot; 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 &quot;start page&quot; of the series):</p> +<ul> +<li><a href="https://coderefinery.org/blog/2022/10/24/parallel-chat/">Random access chat (&quot;HackMD&quot;) 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 href="https://coderefinery.github.io/manuals/">CodeRefinery manuals</a></li> +<li><a href="https://coderefinery.github.io/community-teaching/">CodeRefinery community teaching +training</a></li> +</ul> + + + + + Outcomes from online hackathon about measuring the impact of CodeRefinery workshops + 2022-05-18T00:00:00+00:00 + 2022-05-18T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2022/05/18/measuring-impact/ + + <h2 id="introduction">Introduction</h2> +<p>The main focus of our project is to train and collaborate on training and to +connect training activities across different countries. But we also need to +report about our training activities and we need to apply for funding from +time to time. We also want to know whether we meet the needs of the community +and for this we need a mechanism to measure and evaluate the impact of our +workshops on software programming practices.</p> +<p>We have implemented a number of ideas to measure feedback and impact. In this +discussion session we re-examine these solutions and discuss how we can make +these more reusable for other projects. In short:</p> +<ul> +<li>When we operate online and hybrid, we are accessible to many more styles of +attendance (and different measurements, such as live-stream viewers).</li> +<li>We have an excellent <a 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 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 href="https://github.com/coderefinery/pre-workshop-survey">pre-workshop +survey</a> data which was +part of the registration process and <a 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 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 &quot;pays us back&quot;.</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 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 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 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 href="https://github.com/coderefinery/post-workshop-survey">Post-workshop survey</a></h3> +<ul> +<li>What to ask straight after the workshop and what to ask later? Separate +survey?</li> +<li>Could be integrated to the pre-workshop survey because it can be updated</li> +<li>Update questions: +<ul> +<li>we could add the question: what would you like to learn more?</li> +<li>Maybe condense a bit (less text and repetition)</li> +<li>Remove suggestive questions if any</li> +<li>add academic field</li> +</ul> +</li> +<li>What data to request from groups / partners? +<ul> +<li>Number of participants</li> +<li>How did they like the event</li> +</ul> +</li> +</ul> + + + + + Our plans to improve our workshop registration process + 2022-05-04T00:00:00+00:00 + 2022-05-04T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2022/05/04/improving-workshop-registration/ + + <p>As we entered the sustainability phase of the CodeRefinery project, the number +of participants attending our workshops continues to increase. The March 2022 +online workshop on best practices for scientific software development has +reached <a 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 &quot;can I have the +Q&amp;A&quot; and then I can say &quot;not right not but if you register you will get it in +an email tonight so you have it tomorrow&quot;</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 &quot;survived&quot; 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>&quot;affiliation or university&quot;: have a list of institutions + &quot;other&quot; * 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>&quot;do you want to participate in Stockholm? click here&quot; -&gt; another form</li> +<li>&quot;in Aalto&quot; -&gt; another form</li> +<li>none of the above -&gt; central form +<ul> +<li>group registration (exercise lead? or anybody as proxy?)</li> +<li>register as exercise lead and want to help out a &quot;random&quot; group</li> +<li>want to be part of a group -&gt; click here but we can't guarantee a helper, especially if you register late</li> +<li>want to only watch alone</li> +</ul> +</li> +<li>also offer options to get informed for those unsure/undecided +<ul> +<li>yes</li> +<li>&quot;interested&quot; </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 &quot;general&quot; 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>&quot;helpers, rename yourself and join a room that does not have helpers yet&quot;</li> +<li>&quot;learners, if you are in a room that is too empty or too full, join another one&quot; </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 href="https://forms.gle/xNSmW7DJ43jV7NhD9">example +form</a> and collected comments:</p> +<ul> +<li>Problems: &quot;team organized by us&quot; is not separated from &quot;self-organized team&quot;</li> +<li>The &quot;probably not but send info&quot; 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>&quot;observer&quot;: let them decide whether they want emails or not</li> +<li>&quot;how do you plan on attending&quot; +<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 href="https://github.com/coderefinery/template-workshop-webpage">workshop template</a></li> +</ul> + + + + + Lessons learned from the May 2021 online workshop + 2021-11-25T00:00:00+00:00 + 2021-11-25T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2021/11/25/lessons-learned-may-2021/ + + <p>May 10-12 and 18-20, 2021, we gave our at that time largest <a 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 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 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 &quot;voice of audience&quot;.</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 &quot;could somebody do X?&quot; 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 &quot;real&quot; video is available or wouldn't make sense, one workaround might be to have someone show a &quot;video&quot; (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 &quot;real&quot; video is available or wouldn't make sense, one workaround might be to have someone show a &quot;video&quot; (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 &quot;don't capture mouse cursor&quot; 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 &quot;And now we are done with the intro, and will go to our first lesson, Jupyter&quot;. It makes cutting a bit easier and also helps learners to re-orient.</li> +<li>The zoom default &quot;focus on the current speaker&quot; 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 &quot;plain&quot; 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 &quot;beginner&quot; label for software. Maybe it would make sense to host a &quot;Research Software Hour&quot; 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 &quot;I'm about to take the screenshare&quot; 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 &quot;none&quot; 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 &quot;team registrations&quot;, as long they include an EL, we should send an acceptance ASAP.</li> +<li>Regarding individual learners and ELs: +1) opening sign-up as individual ELs and to set its soft-deadline much earlier than for individual learners, +2) for individual learners, opening registration first as stream viewers only with an option of 'want to join in interactive exercise sessions' yes/no, +3) after the soft-deadline of individual ELs, to those who said 'yes', sending invitations to sign-up for zoom participation in another reg. form, and +4) accept the capacity of #individual ELs x 5 and otherwise put them in waitlist. +However, I actually want to suggest a quite wild idea rather than struggling with the dilemma of no-shows and withdrawal with very very short notice while not being able to accept all sign ups. Instead of coordinating for acceptance and grouping on backside, how about encouraging open&amp;public self-organization of groups? somewhere everyone can access, 'sign up' by writing their name, as a learner or EL, potentially also country, affiliation, background so that it might happen that they will self-organize a team. Once they can make a group of 6-7 people with at least one who can be acting as an EL, then their participation is sort of 'confirmed'. This is different from team registration as this is primarily for those who want to join but cannot make a group will find others to make a group to join in the workshop. +Another thing is that the threshold of ELs could be even lower than some people may think. And I would say being an EL is probably better way to learn about the CodeRefinery lesson materials than joining as an learner. Especially if some people have already made their own team, one of them should be able to act as an EL, or they can even circulate the role among eath other. +And what I learned from the R+Tidyverse workshop until yesterday is that if a learner cannot turn on camera or mic (for any reason), it is almost no worth to join in a breakout room session, as HackMD Q&amp;A will more or less perfectly solve the problem in that case.</li> +</ul> + + + + + Towards citable lessons + 2021-11-21T00:00:00+00:00 + 2021-11-21T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2021/11/21/towards-citable-lessons/ + + <p>In Autumn 2021 we have started to work on making our lessons and other material +we have created over the years, citable. At the same time we wish to assign a +digital object identifier (DOI) to each lesson so that the material becomes +persistent and remains findable. However, the main motivation for this work is +to get some metrics about the use of our material and also to give contributors +better credit and to make it possible for them to get and display metrics about +their contributions.</p> +<p>This effort is work in progress and in this document we will summarize our +discussions, decisions, findings, and observations so that we can then use +these later when we conclude this effort lesson by lesson.</p> +<h3 id="technical-choices">Technical choices</h3> +<ul> +<li>We will use Zenodo because it is a well-established service which we know and +which integrates nicely with the repositories hosting the lessons and because +we will need to be able to update metadata (author information) without +changing the DOI record.</li> +<li>We will convert the 3 remaining Jekyll lessons to Sphinx to simplify pdf export.</li> +<li>We will not start with <a 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 +&quot;cite as&quot; 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 &quot;code&quot; (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 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 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>&quot;creator&quot;: significant contributions</li> +<li>&quot;contributor&quot;/Editor: reviewing/approving contributions</li> +<li>&quot;contributor&quot;/Other: smaller contributions</li> +</ul> +</li> +<li>On Zenodo we start with &quot;creator&quot; (author) and &quot;contributor&quot; (other). +<ul> +<li>See also categories that Zenodo understands: <a href="https://developers.zenodo.org/#representation">https://developers.zenodo.org/#representation</a> (search for &quot;creators&quot; and &quot;contributors&quot;)</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 &quot;release&quot; 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 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 data-lang="json" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-json "><code class="language-json" data-lang="json"><span> </span><span style="color:#d07711;">&quot;creators&quot;</span><span>: [ +</span><span> { +</span><span> </span><span style="color:#d07711;">&quot;orcid&quot;</span><span>: </span><span style="color:#d07711;">&quot;0000-0002-1825-0097&quot;</span><span>, +</span><span> </span><span style="color:#d07711;">&quot;affiliation&quot;</span><span>: </span><span style="color:#d07711;">&quot;Feline research institute&quot;</span><span>, +</span><span> </span><span style="color:#d07711;">&quot;name&quot;</span><span>: </span><span style="color:#d07711;">&quot;Field, Gar&quot; +</span><span> }, +</span><span> { +</span><span> </span><span style="color:#d07711;">&quot;orcid&quot;</span><span>: </span><span style="color:#d07711;">&quot;0000-0002-1825-0097&quot;</span><span>, +</span><span> </span><span style="color:#d07711;">&quot;affiliation&quot;</span><span>: </span><span style="color:#d07711;">&quot;Feline research institute&quot;</span><span>, +</span><span> </span><span style="color:#d07711;">&quot;name&quot;</span><span>: </span><span style="color:#d07711;">&quot;Cat, Felix&quot; +</span><span> } +</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 href="https://about.zenodo.org/">https://about.zenodo.org/</a></li> +<li>Zenodo terms of use <a href="https://about.zenodo.org/terms/">https://about.zenodo.org/terms/</a></li> +<li>Zenodo policies <a href="https://about.zenodo.org/policies/">https://about.zenodo.org/policies/</a></li> +<li>Zenodo FAQ <a href="https://help.zenodo.org/">https://help.zenodo.org/</a></li> +<li>Zenodo REST API <a href="https://developers.zenodo.org/">https://developers.zenodo.org/</a></li> +<li>Zenodo .zenodo.json and GitHub <a href="https://developers.zenodo.org/#github">https://developers.zenodo.org/#github</a></li> +<li>GitHub-Zenodo tutorial <a href="https://guides.github.com/activities/citable-code/">https://guides.github.com/activities/citable-code/</a></li> +<li>The <a href="https://allcontributors.org/">https://allcontributors.org/</a> specification and GitHub bot</li> +<li>The CITATION.cff format <a href="https://citation-file-format.github.io/">https://citation-file-format.github.io/</a></li> +<li>The CITATION.cff format keywords <a 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 href="https://spdx.dev/ids/">https://spdx.dev/ids/</a></li> +</ul> + + + + + Lessons learned from phase 2 of the project + 2021-11-20T00:00:00+00:00 + 2021-11-20T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2021/11/20/phase-2-lessons-learned/ + + <p>The motivation for this document was to collect lessons learned from phase 2 of +our project, both for our own future work but also for other future projects +who may find our experiences useful. We have chosen to collect the lessons +learned in bullet-point format and not in prose.</p> +<p>Below we list experiences and also unsolved challenges from workshop +organization, lesson development, meeting minutes and decision tracking, +Carpentries membership, communication, data management, stakeholder- and +community engagement, and infrastructure hosting.</p> +<h3 id="workshop-event-organization">Workshop/event organization</h3> +<h4 id="metrics">Metrics</h4> +<ul> +<li>When we started teaching in 2016, we only worried about the teaching and not +about measuring how many participants from which country and from which +discipline and career stage. However, we were asked to report about metrics +again and again, on short notice. At some point we started reporting this in +detail (<a 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 &quot;actual&quot; 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>&quot;Webinar (stream)-by default&quot; with an option for joining in zoom-meeting room for extra help may work better (ref. <a href="https://scicomp.aalto.fi/training/scip/python-for-scicomp/">Python for SciComp 2021</a>)?</li> +<li>Post-workshop Q&amp;A session time/day would be useful? </li> +<li>We have considered for the future to offer optional exercise walk-through sessions. These could be +interesting not only for learners but recording of these sessions could also help future +exercise leads.</li> +</ul> +</li> +</ul> +<h4 id="communication-with-participants">Communication with participants</h4> +<ul> +<li>Indico's email function worked well to send information about the workshop to participants/signers.</li> +<li>We experienced few cases of typo in email address, thus we could not reach registrants.</li> +<li>Online collaborative notebook (HackMD and similar) worked well for Q&amp;A during the lectures. </li> +</ul> +<h4 id="certificates">Certificates</h4> +<ul> +<li>Should CR issue any certificate at all? Certificates became participation certificates and possibly we should delegate certification to participating organizations.</li> +<li><a href="https://www.tudelft.nl/en/library/research-data-management/r/training-events/training-for-researchers/code-refinery-workshop">&quot;TU Delft PhD candidates can obtain 2 GS credits (Research skills) when attending and actively participating in the workshop (complete assistance)&quot;</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>&quot;software installation and setup&quot; +<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 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 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 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 href="https://coderefinery.github.io/2021-01-08-coderefinery-online/">Introduction to Conda for (Data) Scientists</a> as a part of <a 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 href="https://carpentries.topicbox.com/groups/local-nordic">Nordic region mailing list at topic-box (managed by the Carpentries)</a>, </li> +<li><a href="https://2020.carpentrycon.org/schedule/#session-48">&quot;Nordic and Baltic Get Together&quot; session at CarpentryCon 2020 @home</a>, and</li> +<li><a 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 &quot;Seminar for bibliotekenes nettverk for ph.d.-støtte&quot; (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 &quot;safe&quot; 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 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 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 &quot;Standup&quot;-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 +&quot;levels&quot; as well as types (e.g. lesson contributions or exercise leads) of contributions? +Ref. <a 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 &quot;burn-out&quot; 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 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 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 &quot;Support line/ request tracker&quot;).</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>&quot;Rights to work results&quot; vs. Open Science +<ul> +<li>Ref: a page about <a href="https://www.uio.no/english/for-employees/employment/work-results/rights-to-work-results.html">&quot;Rights to work results&quot; at University of Oslo</a></li> +<li>General clarification is needed here so that everyone won't be in trouble later.</li> +<li>It should be also better explained and clarified in terms of the choice of platform for collaborative works in this regard so that staff/volunteers etc. can feel safe in using the chosen (cloud-based) platforms, including GitHub, YouTube, Twitch, HackMD, Tinyletter etc.</li> +</ul> +</li> +<li>We also lacked support in questions about how to start an own organization/ spin-off.</li> +</ul> + + + + + Bi-weekly Community Calls started + 2021-09-01T00:00:00+00:00 + 2021-09-01T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2021/09/01/bi-weekly-community-calls/ + + <p>CodeRefinery is now shifting towards a new phase with community-based collaboration. We are aiming to continue offering the workshops, community space, and develop lesson materials together with those who are interested in. </p> +<p>For this to be successful, CodeRefinery started bi-weekly community calls from the 9th August. Calls are open to anyone interested in joining in the community from any point of view; teaching, learning, hosting, contributing to lessons, you name it. Join in the calls, get informed and influence the community's way forward! </p> +<p>So far, we informed and discussed among others;</p> +<ul> +<li>CodeRefinery project: current status and future,</li> +<li>How to improve outreach and publicity,</li> +<li>Importance of possibility to provide ECTS,</li> +<li>How CodeRefinery should give credits to contributions by volunteers,</li> +<li>Mentorship program for exercise leads after the workshop,</li> +<li>How to &quot;order&quot; workshops</li> +</ul> +<p>For more details of each call, please visit <a 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 &quot;CodeRefinery way forward&quot;, where we will be discussing the community organization model. For the connection details and agenda, please follow <a 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 href="https://coderefinery.zulipchat.com/#">Zulip</a> :)</p> + + + + + Community discussion in Nordic and Baltic countries + 2020-11-13T00:00:00+00:00 + 2020-11-13T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2020/11/13/carpentry-community-discussion-nordic/ + + <p>This blogpost is based on the notes made on <a 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 &quot;never touch learners keyboard&quot;. 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 href="https://nordic-rse.org/">Nordic Research Software Engineer initiative</a> and its <a 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 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 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 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) &quot;Taking over learner's keyboard on an in-person workshop should never happen&quot;, 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 &quot;Let's build an augmented reality web app!&quot; based on a full-day workshop given at the <a href="https://www.ub.uio.no/english/courses-events/events/all-libraries/2020/research-bazaar-2020.html">research bazaar at the University of Oslo</a> earlier this year: +<ul> +<li>goal: making 3D holiday greeting card using HTML and JavaScript: https://arworkshop.teebusch.repl.co/card1.html</li> +<li>The lesson material is all there: https://repl.it/@Teebusch/arworkshop</li> +</ul> +</li> +<li>(Joakim) Suggestion of a repository of Carpentries Nordic/Baltic community members with specialities and skills</li> +<li>(Annika) Google Sheets for this?</li> +<li>(Anne) EOSC Nordic claims to be a knowledge-hub</li> +<li>(Radovan) Is also working on mapping.</li> +</ul> +<h3 id="announcements">Announcements</h3> +<ul> +<li>Nordic RSE (research software engineers) online get-together (Nov 30 - Dec 2): https://nordic-rse.org/events/2020-online-get-together/ (everybody welcome to attend and submit proposals or ideas)</li> +<li>Local-nordic Carpentries mailing list: https://carpentries.topicbox.com/groups/local-nordic</li> +<li>CodeRefinery workshop in November 17-19, 24-26 (registration closed): https://coderefinery.github.io/2020-11-17-online/ (looking for helpers: great way to learn)</li> +</ul> +<h2 id="participant-list">Participant list</h2> +<ol> +<li>Annika Rockenberger (host, Norway, Oslo)</li> +<li>Naoe Tatara (co-host, Norway, Oslo)</li> +<li>Kerstin Lenk (Finland, Tampere)</li> +<li>Lars Kjær (Denmark, Copenhagen)</li> +<li>Tobias Busch (Norway, Oslo)</li> +<li>Lina Andrén (Sweden, Stockholm)</li> +<li>Mohamed Abdelhalim (Norway, Oslo)</li> +<li>Annajiat Alim Rasel (Bangladesh, Dhaka)</li> +<li>Joakim Philipson (Sweden, Stockholm)</li> +<li>Thomas Arildsen (Denmark, Aarborg)</li> +<li>Radovan Bast(Norway, Tromsø)</li> +<li>Samantha Wittke (Finland, Helsinki)</li> +<li>Olav Vahtras (Sweden, Stockholm)</li> +<li>Anne Fouilloux(Norway, Oslo)</li> +<li>Richard Darst (Finland, Helsinki)</li> +</ol> +<p>Thank you for all the contributions!</p> + + + + + Making lessons citable and giving credits for contributors + 2020-10-02T00:00:00+00:00 + 2020-10-02T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/open-house/credit/ + + <p>CodeRefinery is organizing a half day online &quot;open house&quot; 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 href="https://hackmd.io/@coderefinery/2020-10-02-openhouse">shared +document</a>. +Please note that this document will be archived in our <a 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 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 href="https://coderefinery.zulipchat.com">Zulip chat</a> +with possibilities to further discuss via video if necessary.</p> +<p>We conclude the day around 12:00 pm (UTC+1).</p> + + + + + git-pr: painless small pull requests + 2020-09-29T00:00:00+00:00 + 2020-09-29T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2020/09/29/git-pr/ + + <h1 id="git-pr-painless-small-pull-requests">git-pr: painless small pull requests</h1> +<p>In CodeRefinery, we teach the benefit of small changes via pull +requests in order to have better collaboration and review. But, when +the changes get small enough, the time it takes to run the commands +and open the pull requests begins to get annoying. I looked around +for other tools that could make this faster, but wasn't quite +satisfied with anything. So, I slowly started making something that +evolved into git-pr, <a 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 href="https://github.com/NordicHPC/git-pr">https://github.com/NordicHPC/git-pr</a> - it is a +single shell script to copy to your path.</p> +<p>It's beta-quality software: it is used by me and a few others all the +time, but there will almost certainly be issues as others start using +it. Send issues and PRs!</p> +<p>It supports both Github and Gitlab, though Gitlab support is less well +tested.</p> +<p>There is a lot of prior art on different pieces here, there isn't much +in git-pr that is completely new - In particular, the GitHub command +line interface has come out since then and has some overlap. You can +see other options in the git-pr README.</p> + + + + + Writing newsletter articles and blog posts + 2020-08-24T00:00:00+00:00 + 2020-08-24T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/open-house/newsletter/ + + <p>CodeRefinery is organizing a one day online &quot;open house&quot; 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 href="https://hackmd.io/@coderefinery/2020-08-24-openhouse">shared +document</a>. +Please note that this document will be archived in our <a 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 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 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 href="https://hackmd.io/@coderefinery/2020-08-24-openhouse">shared +document</a>.</p> + + + + + Report from the Mega-Coderefinery workshop + 2020-07-31T00:00:00+00:00 + 2020-07-31T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2020/07/31/mega-coderefinery/ + + <p>In May/June 2020, CodeRefinery ran a large online workshop with about +100 learners in attendance. We overcame the challenges with some +clever strategies, and we feel the learning outcomes were similar to that of in-person workshops of around 30-40 participants.</p> +<p>After that workshop, some of the same staff held an even larger +&quot;High-performance computing (HPC) Kickstart&quot; 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 href="https://coderefinery.github.io/2020-05-25-online/">Webpage</a></p> +<h2 id="finnish-hpc-kickstart">Finnish HPC Kickstart</h2> +<p><a 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 &quot;required&quot; 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 +&quot;helper introduction meeting&quot;, 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 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>&quot;Require&quot; 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">&quot;Bring your own breakout room&quot;</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 href="https://doi.org/10.1007/s11301-017-0133-3">Graf-Vlachy, L., Buhtz, K. &amp; König, 2018</a>). Encourage people to come with friends or groupmates.</li> +<li>How it worked: +<ul> +<li>This is implemented as a &quot;Team name&quot; 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 &quot;random&quot; 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 &quot;team name&quot; 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 &quot;CR&quot; +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 &quot;Room&quot; 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 href="https://coderefinery.github.io/manuals/helping-and-teaching/">General</a></li> +<li><a 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 &quot;correct&quot; 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 &quot;special expert helpers&quot; (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. &quot;we expect you to finish 1-3, 4-5 are optional. 20 +minutes, ending at xx:45&quot;.</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 &quot;if it's even a little bit slow to you, +then it takes ages for a learner to understand&quot;.</li> +</ul> +<h3 id="recommendations-5">Recommendations</h3> +<ul> +<li>Have lots of &quot;meta-talk&quot; 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 &quot;HackMD master&quot; 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 &quot;questions section&quot; and &quot;lesson section&quot;, 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 &quot;pre-assign breakout rooms&quot; 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 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 (&quot;spotlight video&quot;) 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>&quot;Custom streaming server&quot; seems to be able to broadcast to +anything. In particular, we used <a 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 &quot;Spotlight video&quot; 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. &quot;video not broadcast, voice may be&quot;). It is +much harder to add this later.</li> +</ul> +<h2 id="recording">Recording</h2> +<ul> +<li>Once you do streaming, it is a smaller step to recording and posting +the videos. +<ul> +<li>Who is benefited by the recordings? Perhaps not brand new +learners, but the learners who were in the workshop can review +them again later.</li> +</ul> +</li> +<li>If recordings require post-processing, they will almost never get +done. +<ul> +<li>Plan for one-short recording as much as you can: find a way to +keep learners out of the recording so you can go and directly +publish it with the minimum effort afterwards.</li> +</ul> +</li> +<li>A surprising number of learners have asked for the videos after the +workshop. +<ul> +<li>While the videos may not be as useful to someone learning the +material from scratch, they are probably very useful to an +existing learner who wants to review something they already saw, +teach others, etc.</li> +<li>When we can't provide them quickly, their usefulness is much +reduced.</li> +</ul> +</li> +</ul> +<h3 id="recommendations-8">Recommendations</h3> +<ul> +<li>Clearly announce the recording privacy statement when first +registering.</li> +<li>Try to make the recording as one-shot as possible, with minimal +post-processing needed. Plan for who will do this and when already +before the workshop.</li> +</ul> + + + + + CodeRefinery tools in action: NordicHPC + 2020-04-27T00:00:00+00:00 + 2020-04-27T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2020/04/27/nordichpc-tools/ + + <p>You've been to a CodeRefinery workshop, and wonder how these tools are +actually used? The NordicHPC github organization, which we've +mentioned before, provides a lot of demonstrations on using github and +working collaboratively. It's an example of people who have a common +interest and form a community by using common tools.</p> +<p>Yet at the same time, not everything is perfect. Rather than try to +make everything perfect, they make things good enough, licensed, and +shareable, and improve it as a need comes - possibly, when someone +else has a need and time to improve it.</p> +<p>Within the organization, you can find many examples of using +<a href="https://coderefinery.github.io/git-intro/">git</a> (everything), +<a href="https://coderefinery.github.io/git-collaborative/">pull-request based +workflows</a> +(e.g. sonar, git-pr, slurm2sql), <a href="https://coderefinery.github.io/testing/">automated +testing</a> (e.g. .travis.yml in +sonar, envkernel, nbscript, slurm2sql), <a 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 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 href="https://github.com/NordicHPC/nbscript">nbscrpt</a> is an attempt to +provide the familiar script interface to Jupyter notebooks.</li> +<li><a href="https://github.com/NordicHPC/sonar">sonar</a> and +<a href="https://github.com/NordicHPC/sonar-web">sonar-web</a> provide a way to +watch what is actually running on clusters.</li> +<li><a href="https://github.com/NordicHPC/git-pr">git-pr</a> saves you keystrokes +when making pull requests, though perhaps +<a href="https://cli.github.com/">cli.github.com</a> takes its place.</li> +<li><a 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 href="https://github.com/NordicHPC/envkernel">envkernel</a> is a Jupyter +extension which lets you run your kernels in different environments, +such as Docker, Singularity, and virtual/conda environments more +easily.</li> +</ul> +<p>Do you have a nice tool that needs a home? You know what to do...</p> + + + + + Announcing the first Nordic-RSE conference + 2020-04-24T00:00:00+00:00 + 2020-04-24T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2020/04/24/nordic-rse-conference/ + + <p>A couple of years ago, <a 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 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 href="https://society-rse.org/">the UK</a>, <a href="http://nl-rse.org/">the +Netherlands</a> and +<a 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 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 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 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 +(nordic-rse-organizers@neic.no) 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 href="https://e-science.se/">Swedish e-Science Research Centre +(SeRC)</a>, the <a href="https://snic.se/">Swedish National Infrastructure +for Computing (SNIC)</a> and the <a 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:nordic-rse-organizers@neic.no">get in +touch</a>.</p> + + + + + CodeRefinery workshops moving online + 2020-04-24T00:00:00+00:00 + 2020-04-24T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2020/04/24/online-workshops-update/ + + <p>After cancelling all our planned in-person workshops this spring due +to the ongoing pandemic, we decided to make the best of the situation +and start focusing our efforts on developing an online workshop +training programme. We wanted to start small while learning the +mechanics of online teaching, so we began by offering an online +workshop covering only the +<a 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 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 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 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 &quot;bring their own breakout room&quot; 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 &quot;giving&quot; 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 href="https://coderefinery.org/workshops/upcoming/#notify-me">notify-me +form</a> if you +want to receive an email as soon as registration opens for these +workshoops!</p> + + + + + Rebase vs merge + 2020-04-24T00:00:00+00:00 + 2020-04-24T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2020/04/24/rebase-vs-merge/ + + <p>During a CodeRefinery workshop you might have heard an instructor say +that you can merge or alternatively rebase, like merge and rebase are +two equivalent operations. Clearly, they are not, but should we treat +the operations equally?</p> +<p>Let us take a closer look at rebase and merge, how they differ and in +which situations they are an advantage to use.</p> +<h3 id="rebase">Rebase</h3> +<p>Rebase gives you the opportunity to move the base of a branch to a new +base. Here we have two branches, <code>master</code> and <code>feature_A</code>.</p> +<p><img src="/blog/image_01.png" alt="Initial tree" title="Initial git commit tree" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</p> +<p>We can rebase the <code>feature_A</code> branch to the last commit in <code>master</code>:</p> +<pre data-lang="bash" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#5597d6;">git</span><span> checkout feature_A +</span><span style="color:#5597d6;">git</span><span> rebase master +</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:70%&quot;}</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 data-lang="sh" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#5597d6;">git</span><span> checkout master +</span><span style="color:#5597d6;">git</span><span> merge feature_B</span><span style="color:#5597d6;"> --no-ff +</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 data-lang="sh" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#5597d6;">git</span><span> config</span><span style="color:#5597d6;"> --global</span><span> branch.master.mergeoptions</span><span style="color:#5597d6;"> --no-ff +</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</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 data-lang="sh" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#5597d6;">git</span><span> checkout fix_types +</span><span style="color:#5597d6;">git</span><span> rebase master +</span><span style="color:#5597d6;">git</span><span> checkout master +</span><span style="color:#5597d6;">git</span><span> merge fix_typos</span><span style="color:#5597d6;"> --ff-only +</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</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 href="https://medium.com/@porteneuve/getting-solid-at-git-rebase-vs-merge-4fa1a48c53aa">[1] Getting Solid at Merge vs Rebase</a></p> + + + + + Research Software Hour + 2020-04-24T00:00:00+00:00 + 2020-04-24T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2020/04/24/rsh/ + + <p>CodeRefinery is a project that holds workshops, but computing is an +experience. As much as we teach in workshops, it's not enough: these +workshops are hands-on, but still can't show our whole daily thought +process. They also aren't the right format for everyone and can't +reach enough people at once. In order to extend our reach, we are +trying a streaming web show <a 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 href="https://researchsoftwarehour.github.io/">the website</a> +and join us each Tuesday at 20:30 CEST on Twitch.</p> + + + + + Work on blog posts + 2020-04-24T00:00:00+00:00 + 2020-04-24T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/open-house/blog-posts/ + + <p>CodeRefinery is organizing a one day online &quot;open house&quot; 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 href="https://hackmd.io/46XkhCr5T4yahKprL6N01A">shared +document</a>. +Please note that this document will be archived in our <a 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 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 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 href="https://hackmd.io/46XkhCr5T4yahKprL6N01A">shared +document</a>.</p> + + + + + Lessons learned from running our first online workshop + 2020-04-14T00:00:00+00:00 + 2020-04-14T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/blog/2020/04/14/first-online-workshop/ + + <p>April 7-8, 2020, we gave our first online workshop on <a 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 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 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 &quot;ice-breaker&quot; 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 &quot;setting up and configuring Git&quot; 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: &quot;price of workshop is to attend a later workshop +as helper&quot; (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> (&quot;flipped classroom&quot; 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 &quot;it's easiest to share +the screen since you don't have to do the thinking&quot;.</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 &quot;sticky&quot; 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 href="https://coderefinery.github.io/manuals/instructor-tech-setup/">displaying the +last commands +typed</a> +really helps.</li> +<li>Gray/dark background terminal looked better than light background terminal.</li> +</ul> +<h3 id="how-to-make-this-more-scalable">How to make this more scalable?</h3> +<ul> +<li>This time we did not plan to record or stream but we nevertheless asked the +participants in a pre-workshop survey: 2/20 preferred not to have the +workshop streamed, 1/20 didn't want it recorded.</li> +<li>The workshop was great, but we should think more about how to reach more +people. A small workshop where we can individually interact with everyone is +amazing, but the promise of digital technology is that we can reach everyone in +the world. How can we get the best of both? Can we also do something for +everyone else who can't attend but might want to watch later? This is +something to think about.</li> +<li>How can we make this more scalable? This workshop was quite labor-intensive. +You could probably do it with two instructors (instructor + HackMD watcher) + 1 +zoom expert (host + general helper) + a lot of semi-experienced helpers (1:5 +ratio) + a few debuggers to help with tech support the first hour (not +overlapping with instructor or HackMD watcher).</li> +<li>Imagine if we had main room recorded (or even streamed), but breakout rooms +not. People can still ask and interact with privacy in the small rooms - and +we take these comments/issues back to the main room. Other people following +along later can do the exercises at their own pace, and hear the +intros/conclusions in the main rooms, and it might feel a bit like a small +class.</li> +</ul> + + + + + Work on instructor training material + 2020-03-24T00:00:00+00:00 + 2020-03-24T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/open-house/instructor-training-material/ + + <p>CodeRefinery is organizing a one day online &quot;open house&quot; dedicated to +work together on revising and +improving <a href="https://coderefinery.github.io/instructor-training/">our instructor training +material</a>. +<a href="https://github.com/coderefinery/instructor-training/issues">Issues are filed +here</a>, +notes from the first workshop can be in the <a 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 href="https://hackmd.io/@doFoQYKqR623RI-YyXvmew/HJGgb_9VL">shared +document</a>. +Please note that this document will be archived in our <a 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 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 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 href="https://hackmd.io/@doFoQYKqR623RI-YyXvmew/HJGgb_9VL">shared +document</a>.</p> + + + + + Preparing for online teaching + 2020-03-20T00:00:00+00:00 + 2020-03-20T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/open-house/online-teaching/ + + <p>We will meet on <a href="https://kth-se.zoom.us/j/152239500">video</a> (9:00 am, UTC+1) +and <a href="https://coderefinery.zulipchat.com">chat</a> and discuss techniques, +solutions, and tricks for online teaching and collect our notes in a <a 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 href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>.</p> + + + + + Collaborative work on the website + 2020-02-11T00:00:00+00:00 + 2020-02-11T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/open-house/website/ + + <h3 id="welcome-to-the-second-coderefinery-open-house">Welcome to the second CodeRefinery Open House!</h3> +<p>Following up on our successful first CodeRefinery Open House, we will have our +second online Open house!</p> +<p>The idea behind this event is to work together on revising and improving +<a href="https://coderefinery.org">coderefinery.org</a>. <a 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 href="https://coderefinery.org">coderefinery.org</a> is very welcome to join.</p> +<p>We will collect nodes in a <a href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>. +Please note that this document will be archived in our +<a 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 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 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 href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>.</p> + + + + + Collaborative work on the training material + 2019-12-13T00:00:00+00:00 + 2019-12-13T00:00:00+00:00 + + Unknown + + + https://coderefinery.org/open-house/training-material/ + + <h3 id="welcome-to-the-first-coderefinery-open-house">Welcome to the first CodeRefinery Open House!</h3> +<p>The idea behind this event is to bring together people who are interesting in +contributing to the <a 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 href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>. +Please note that this document will be archived in our +<a 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 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 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 href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>.</p> + + + + diff --git a/branch/main/blog/2020/04/14/first-online-workshop/index.html b/branch/main/blog/2020/04/14/first-online-workshop/index.html new file mode 100644 index 000000000..4fb0e3146 --- /dev/null +++ b/branch/main/blog/2020/04/14/first-online-workshop/index.html @@ -0,0 +1,1164 @@ + + + + Lessons learned from running our first online workshop - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Lessons learned from running our first online workshop + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Lessons learned from running our first online workshop

+ + + +
+ +

April 7-8, 2020, we gave our first online workshop on introduction to +Git (2 x 3 hours) with 22 +participants and we plan to deliver many more such workshops on a number of +topics based on our lessons.

+

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).

+

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.

+

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.

+

Breaks and ice-breaker

+
    +
  • 5 minute breaks were too short, better 10 minutes or longer, at least once an +hour.
  • +
  • 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 +presentation +and references therein).
  • +
  • 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.
  • +
  • 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.
  • +
+

Solving technical issues

+

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.

+
    +
  • 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.
  • +
  • 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. +
      +
    • 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.
    • +
    • We think that when pre-making the rooms, you have to create some empty +spares for this.
    • +
    +
  • +
+

Helpers

+

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.

+
    +
  • 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.
  • +
  • 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.
  • +
  • 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).
  • +
+

Breakout sessions

+

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.

+
    +
  • Fewer longer (15 min) breakout sessions were better than many short ones +(5-10 min).
  • +
  • This also means that we should group some exercises and not have them spread +out every 10 minutes.
  • +
  • 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.
  • +
  • Groups with 4-5 persons seem to work well, with one helper.
  • +
  • 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.
  • +
  • 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.
  • +
  • Some people just wanted to work alone, that's OK too.
  • +
  • Method 1: group work +
      +
    • Most teaching done in main room (this is important for the most important +and delicate topics).
    • +
    • Participants are in breakout rooms, working independently, sharing +screen/asking for help when they need to.
    • +
    +
  • +
  • Method 2: flipped classroom ("flipped classroom" isn't quite the right +term though) +
      +
    • Initial motivation in the main room.
    • +
    • Switch to breakout rooms early to go through the type-along exercises.
    • +
    • This only works when things are clear enough that people can't get too lost.
    • +
    • (*) 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".
    • +
    • (*) Instructor flips between the rooms every 1-2 minutes answering hard +questions and following progress.
    • +
    • Join the end for a wrap-up where best questions are discussed.
    • +
    • Helpers and instructors should write down the most important questions to +discuss afterwards.
    • +
    +
  • +
  • In reality, use the best of both depending on your specific lesson, +especially the asterisk (*) points! +
      +
    • Encourage the instructor to cycle through breakout rooms to watch +discussions and help out.
    • +
    • 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).
    • +
    +
  • +
  • Host can lose host rights sometimes. +
      +
    • Host should not enter breakout rooms, at least if they are not the original +host because then hostship is transferred to original host.
    • +
    • 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.
    • +
    • 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.
    • +
    +
  • +
  • Co-hosts seem to be able to jump between rooms freely after first joining +the room they were originally assigned to (i.e. can't select any group from +the main room).
  • +
  • At one point, Zoom dropped the whole meeting and everyone re-joined +(automatically). Pre-assembled breakout rooms got lost, which was annoying.
  • +
+

HackMD

+

HackMD was a vital resource, but you should have someone dedicated to watching it and keeping it organized.

+
    +
  • We were impressed how well it worked, holding up with 25 persons editing +without noticeable lag.
  • +
  • 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.
  • +
  • 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!
  • +
  • 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.
  • +
  • Students can come back after the course and find better researched answers, +if the in-course answer is unsatisfactory.
  • +
  • Make sure that the HackMD contents, without any identifying information, can +be made public after the course.
  • +
  • Instead of asking questions in a particular section of the HackMD and +searching and scrolling it was better to ask questions always at the current +bottom of the document. Add new section headings as you start new sections.
  • +
  • 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.
  • +
  • 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.
  • +
+

Chat

+

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.

+
    +
  • 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.
  • +
  • The chat can be used for formative assessment questions where participants +are asked to vote for correct answers in a multiple-choice question.
  • +
  • Practical announcements/instructions should be provided both written and +spoken, to reduce chance they are missed.
  • +
  • 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.
  • +
+

Organization

+

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.

+
    +
  • 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 should have been 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.
  • +
  • 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:
  • +
  • Roles during main lectures: +
      +
    • Host person in charge of overall schedule, timekeeping, breakout rooms and +Zoom chat/participant reactions, clearing feedback, balancing answering +questions, moderating, etc.
    • +
    • 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.
    • +
    • One person watching and formatting the HackMD (but more persons might be +needed if there are many questions).
    • +
    • Backup expert helpers for problems that require intensive debugging (at +least needed at the beginning).
    • +
    +
  • +
  • Roles during breakouts (this is more flexible): +
      +
    • Host in main room watching stuff.
    • +
    • One helper per room leading.
    • +
    • Lesson instructor hopping from room to room answering advanced questions +and also probing the general mood.
    • +
    +
  • +
  • Host makes all instructors and helpers co-hosts so that they can move between +rooms.
  • +
+

Screencasting

+

The requirements and recommendations are roughly like in-person.

+
    +
  • Showing history of commands via tmux or similar, coupled with displaying the +last commands +typed +really helps.
  • +
  • Gray/dark background terminal looked better than light background terminal.
  • +
+

How to make this more scalable?

+
    +
  • 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.
  • +
  • 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.
  • +
  • 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).
  • +
  • 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.
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2020/04/24/nordic-rse-conference/index.html b/branch/main/blog/2020/04/24/nordic-rse-conference/index.html new file mode 100644 index 000000000..38e20e1d4 --- /dev/null +++ b/branch/main/blog/2020/04/24/nordic-rse-conference/index.html @@ -0,0 +1,990 @@ + + + + Announcing the first Nordic-RSE conference - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Announcing the first Nordic-RSE conference + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Announcing the first Nordic-RSE conference

+ + + +
+ +

A couple of years ago, several CodeRefinery members and their +friends +started discussing how a Nordic network of Research Software Engineers +(RSEs) could be established, and soon thereafter the Nordic-RSE +initiative was launched. The idea was to +follow in the footsteps of very successful such initiatives in other +countries, most notably in the UK, the +Netherlands and +Germany. For the past two years +we have been taking the first steps in this direction. A survey was +conducted +to learn about the environment for people in RSE-related +roles. Information on groups and people +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 +the first Nordic-RSE conference, +Nordic-RSE2020, will take place in Stockholm between 1st and 2nd +December 2020!

+

About the conference

+

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.

+

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.

+

Who should attend?

+

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.

+

We welcome participation from:

+
    +
  • Researchers at any career stage who develop software for research +purposes;
  • +
  • Software developers working in a research context, whatever their +job title or field;
  • +
  • Those interested in advancing the understanding of how best to use +existing research software (e.g. with respect to scalability, +performance and/or reproducibility);
  • +
  • People from any organization providing tools, platforms or services +that benefit research software;
  • +
  • Anyone with a stake in research software (funders, publishers, +decision makers, etc).
  • +
+

We especially encourage first-time presenters and can offer mentoring +and other support with preparing your contribution.

+

Getting involved

+

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 +(nordic-rse-organizers@neic.no) if you would like to help or if you +have any questions on how to get involved with Nordic-RSE2020.

+

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 Swedish e-Science Research Centre +(SeRC), the Swedish National Infrastructure +for Computing (SNIC) and the Swedish e-science +collaboration (eSSENCE). By supporting +us, our sponsors are helping to raise awareness of the importance of +developing RSE career path in the Nordics.

+

Inviting new sponsors

+

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.

+

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 get in +touch.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2020/04/24/online-workshops-update/index.html b/branch/main/blog/2020/04/24/online-workshops-update/index.html new file mode 100644 index 000000000..6b4815f83 --- /dev/null +++ b/branch/main/blog/2020/04/24/online-workshops-update/index.html @@ -0,0 +1,973 @@ + + + + CodeRefinery workshops moving online - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery workshops moving online + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

CodeRefinery workshops moving online

+ + + +
+ +

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 +Git-intro 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 scale up and reach a larger audience +than possible with in-person workshops.

+

We learned many important lessons in this first experiment and we +tried to summarize them all in a previous +article. We +hope that these notes can be of help to others who are going online +with some of their teaching.

+

New notify-me form

+

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 new more +fine-grained notify-me +form 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.

+

Join an online workshops as a helper

+

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.

+

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 helper for upcoming online or in-person workshops in our +new notify-me +form. Remember +also that there is no better way to consolidate new knowledge than +teaching it to others!

+

Bring your own breakout room/helper

+

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.

+

Upcoming online workshops

+

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.

+

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.

+

Sign up for the notify-me +form if you +want to receive an email as soon as registration opens for these +workshoops!

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2020/04/24/rebase-vs-merge/index.html b/branch/main/blog/2020/04/24/rebase-vs-merge/index.html new file mode 100644 index 000000000..f02ff20d8 --- /dev/null +++ b/branch/main/blog/2020/04/24/rebase-vs-merge/index.html @@ -0,0 +1,956 @@ + + + + Rebase vs merge - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Rebase vs merge + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Rebase vs merge

+ + + +
+ +

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?

+

Let us take a closer look at rebase and merge, how they differ and in +which situations they are an advantage to use.

+

Rebase

+

Rebase gives you the opportunity to move the base of a branch to a new +base. Here we have two branches, master and feature_A.

+

Initial tree{:class="img-responsive" style="max-width:100%"}

+

We can rebase the feature_A branch to the last commit in master:

+
git checkout feature_A
+git rebase master
+
+

The result will look like this.

+

First rebase tree{:class="img-responsive" style="max-width:100%"}

+

Checking out master again, we can merge feature_A with master. 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.

+

FF-merge tree{:class="img-responsive" style="max-width:100%"}

+

Merge

+

If we don’t use rebase, but just merge feature_A with master, we get an merge commit, a new commit pointing to the previous last commit in master and the previous last commit in feature_A.

+

Plain merge tree{:class="img-responsive" style="max-width:100%"}

+

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.

+

Mixing rebase and merge

+

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:

+
    +
  • When we merge a semantic unit to master, we use merge.
  • +
  • When patch features, or do general corrections, we use rebase.
  • +
+

How will this look?

+

Merge revisited

+

Let us say we have created a new function or class, something that belongs together - a semantic unit we call feature_B. The base of feature_B is the last commit in master.

+

Master feature-b tree{:class="img-responsive" style="max-width:70%"}

+

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:

+
git checkout master
+git merge feature_B --no-ff
+
+

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:

+
git config --global branch.master.mergeoptions --no-ff
+
+

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.

+

No-ff merge tree{:class="img-responsive" style="max-width:100%"}

+

Rebase revisited

+

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, master 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.

+

No-ff merge tree plus patch{:class="img-responsive" style="max-width:100%"}

+

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:

+
git checkout fix_types
+git rebase master
+git checkout master
+git merge fix_typos --ff-only
+
+

The git graph will now look like this:

+

No-ff merge plus rebase{:class="img-responsive" style="max-width:100%"}

+

Rebase vs merge revisited

+

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 master 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.

+

[1] Getting Solid at Merge vs Rebase

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2020/04/24/rsh/index.html b/branch/main/blog/2020/04/24/rsh/index.html new file mode 100644 index 000000000..e0f6828e2 --- /dev/null +++ b/branch/main/blog/2020/04/24/rsh/index.html @@ -0,0 +1,931 @@ + + + + Research Software Hour - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Research Software Hour + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Research Software Hour

+ + + +
+ +

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 Research Software Hour that combines +the spirit of CodeRefinery with real-life examples from our daily +work - and hopefully, some entertainment, too. We hope watchers +experience the spirit of research software and computing.

+

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.

+

We wish to show why we enjoy research software and computing and how +you can, too. 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. 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.

+

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!

+

Read more at the website +and join us each Tuesday at 20:30 CEST on Twitch.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2020/04/27/nordichpc-tools/index.html b/branch/main/blog/2020/04/27/nordichpc-tools/index.html new file mode 100644 index 000000000..b5343d3d2 --- /dev/null +++ b/branch/main/blog/2020/04/27/nordichpc-tools/index.html @@ -0,0 +1,940 @@ + + + + CodeRefinery tools in action: NordicHPC - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery tools in action: NordicHPC + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

CodeRefinery tools in action: NordicHPC

+ + + +
+ +

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.

+

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.

+

Within the organization, you can find many examples of using +git (everything), +pull-request based +workflows +(e.g. sonar, git-pr, slurm2sql), automated +testing (e.g. .travis.yml in +sonar, envkernel, nbscript, slurm2sql), modular code +development +(e.g. ), open +licensing +(e.g. everything).

+

Below you see some examples of NordicHPC tools. Some tools are useful +to anyone, but some may be more interesting to cluster administrators.

+
    +
  • nbscrpt is an attempt to +provide the familiar script interface to Jupyter notebooks.
  • +
  • sonar and +sonar-web provide a way to +watch what is actually running on clusters.
  • +
  • git-pr saves you keystrokes +when making pull requests, though perhaps +cli.github.com takes its place.
  • +
  • slurm2sql imports the HPC +Slurm job history to a sqlite3 database. It can be useful, even +individually, to get and analyze data about your jobs.
  • +
  • envkernel is a Jupyter +extension which lets you run your kernels in different environments, +such as Docker, Singularity, and virtual/conda environments more +easily.
  • +
+

Do you have a nice tool that needs a home? You know what to do...

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2020/07/31/mega-coderefinery/index.html b/branch/main/blog/2020/07/31/mega-coderefinery/index.html new file mode 100644 index 000000000..e29386917 --- /dev/null +++ b/branch/main/blog/2020/07/31/mega-coderefinery/index.html @@ -0,0 +1,1565 @@ + + + + Report from the Mega-Coderefinery workshop - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Report from the Mega-Coderefinery workshop + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Report from the Mega-Coderefinery workshop

+ + + +
+ +

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.

+

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.

+

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.

+

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.

+

Executive summary

+
    +
  • Yes, we scale to 100 people pretty well, but you do need a good +vision about how to do it.
  • +
  • We maintained good learning outcomes with our adjusted strategies.
  • +
  • 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.
  • +
  • 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.
  • +
  • You need to put in extra effort to ensure things run smoothly and +make sure that everyone is prepared - anticipate all problems.
  • +
  • Roles of staff should be carefully explained and ideally not +overlapping, to reduce the cognitive load.
  • +
+

Mega-CodeRefinery

+

Webpage

+

Finnish HPC Kickstart

+

Webpage

+

Organization

+
    +
  • Pre-workshop install help times: +
      +
    • Emphasis on getting ready and making sure things are installed +and configured.
    • +
    • 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.
    • +
    • The installation verification time occurred right after the +"helper introduction meeting", so helpers would stay and help +people verify their installation.
    • +
    +
  • +
  • Installation instructions consist not just of installation, but also +verification instructions. +
      +
    • In particular, verifying of the git configuration, since if +there are any issues, it very quickly derails things.
    • +
    +
  • +
  • We created installation and verification videos for the most +critical part, git youtube +playlist: +
      +
    • One on verifying an installation (make repo, run it)
    • +
    • One for most common problems you might see and how to fix
    • +
    • One for advanced topics (ssh keys)
    • +
    +
  • +
  • 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.
  • +
  • We kept the Zoom meeting room open for 30 min to 1 hour after the scheduled lessons are over on that day. +
      +
    • This enabled continuation of exercises in re-opening breakout rooms.
    • +
    • Some participants could receive individual help by a helper or an expert helper.
    • +
    • In the main room, we did debriefing among instructors and helpers so that we could reflect on the day after.
    • +
    +
  • +
  • The larger the audience gets, the more diverse it is. +
      +
    • This causes more load on helpers and more effort for organizers +to prepare.
    • +
    • It also makes it harder to please everyone.
    • +
    • But on average, we felt that the outcome was about as expected.
    • +
    +
  • +
  • To scale to this cognitive load, carefully assign roles (roles +explained below): +
      +
    • Zoom host, focuses on chat, breakout rooms, registration, etc.
    • +
    • HackMD master
    • +
    • Expert helpers (special ops)
    • +
    • Instructors
    • +
    • Helpers
    • +
    • 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.
    • +
    +
  • +
+

Recommendations

+
    +
  • Place a large emphasis on getting ready for the workshop.
  • +
  • Have multiple ways for learners to verify their installation.
  • +
  • "Require" attendance in pre-workshop installation verification +times. Invite helpers there to get involved and practice basic +helping.
  • +
+

Teams

+

Our recruitment/sign-up strategy was twofold.

+
    +
  1. Open call for helpers and sign-up for individual learners.
  2. +
  3. “Bring your own breakout room”: We allowed learners to register as teams, where each team brought its own helper.
  4. +
+

Open call for helpers and sign-up for individual learners.

+
    +
  • First we had a general call for helpers to assign a breakout room with individual learners.
  • +
  • Our plan was to allocate one helper for 5 learnes accepted approx. (the number of helpers) * 5 of individual leraner sign-ups.
  • +
  • We tried to sort these learners by university/country/field, but didn't put too much effort into this.
  • +
  • Helpers and learners were told which team they will be in before the workshop (personalized email with breakout room number).
  • +
  • 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. +
      +
    • For a long workshop like this one (6 half-days), getting to know each other seemed to result in more interaction by the end.
    • +
    • 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.
    • +
    • It took a session or two for people to get comfortable with their room, but once they did it went well.
    • +
    +
  • +
+

"Bring your own breakout room"

+
    +
  • 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.
  • +
  • Research shows that multiple adopters in an organization greatly increases uptake of new tools (Graf-Vlachy, L., Buhtz, K. & König, 2018). Encourage people to come with friends or groupmates.
  • +
  • How it worked: +
      +
    • This is implemented as a "Team name" option when registering.
    • +
    • They are put in their own breakout room together.
    • +
    +
  • +
  • Advantages: +
      +
    • Scalability: 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.
    • +
    • Team building: 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.
    • +
    • Possibility to use familiar examples: 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.
    • +
    +
  • +
  • The concept of teams could be extended to in-person workshops, too. +
      +
    • Not necessarily pre-assigned, but cleverly organize tables, expect the group to stay together all days.
    • +
    • One could give the teams names and so on, to increase team spirit.
    • +
    +
  • +
+

Recommendations

+
    +
  • Accept a "team name" as part of registration. These people will be +put into the same breakout rooms. Worst case, it isn't used.
  • +
  • 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.
  • +
+

Breakout rooms management

+
    +
  • Assign names depending on breakout room and role. Here, n is the +breakout room number: +
      +
    • (n) First Last - learner
    • +
    • (n,H) First Last - helper
    • +
    • 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))
    • +
    • (CR) First Last for instructors and expert helpers (here "CR" +stood for CodeRefinery staff).
    • +
    +
  • +
  • Initial breakout room assignments serves as a guideline, rooms are +constantly adjusted as needed but we try to keep teams together.
  • +
  • Preferably, one breakout room should have minimum 4 learners.
  • +
  • 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.
  • +
  • Some people don't join with the right Zoom name. +
      +
    • Other co-hosts can browse the registration list and manually +rename participants who didn't name themselves correctly.
    • +
    • Then, the Zoom host only has to worry about assigning them into +the right rooms, and not looking up everyone on the lists.
    • +
    +
  • +
  • Our registration system, Indico, made this management much easier +than it could have been. +
      +
    • After registration closed, we added a "Room" field to the +registration data.
    • +
    • 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.
    • +
    • We could send personalized messages to each person with the +Indico mail merge function
    • +
    • The majority of people did manage to name themselves correctly.
    • +
    +
  • +
+

Recommendations

+
    +
  • Consistent naming of participants (and an order that sorts properly) +makes managing breakout rooms reasonable.
  • +
  • Consider how your registration system can send personalized emails +to each person.
  • +
+

Helper training

+

Regular helpers:

+
    +
  • Have a helper call the previous week. Actually, have two so that +everyone can make it to at least one.
  • +
  • Helper training: + +
  • +
  • Focus on training for managing time and keeping a flow going. This +is described in our document.
  • +
  • Helpers do not need to be experts in everything. +
      +
    • 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.
    • +
    +
  • +
  • Helper training is focused on: +
      +
    • Motivation of learners and teaching psychology.
    • +
    • How to help: don't do it for them, etc.
    • +
    • Keeping the flow going, encourage everyone to speak up and +share.
    • +
    • Knowing when and how to call for an expert helper to come to the +room.
    • +
    +
  • +
+

Special expert helpers:

+
    +
  • There are also "special expert helpers" (we need a new name), who +are experts in the material and problems that may come up. +
      +
    • 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.
    • +
    • Special experts aren't assigned to any particular breakout room. +Instead, they are able to go to any room that needs more help.
    • +
    • 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.
    • +
    • 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.
    • +
    +
  • +
  • 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.
  • +
  • Special experts also serve as backup helpers and can take over or +permanently join a room if a helper is unprepared.
  • +
  • The instructor is also encouraged to pop into some breakout rooms to +see how things are going. This may be enough in small workshops.
  • +
  • Special experts should be Zoom co-hosts. They are then able to go +into any breakout room they want (the mechanics of this is not +obvious, see our helper training info for more).
  • +
  • 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.
  • +
+

Recommendations

+
    +
  • Hierarchical helpers allows you to extend to a greater size.
  • +
  • You need to put thought into how helpers work and prepare them well. +We should develop a special, quick training for them.
  • +
  • Special expert helpers connect the instructor (occupied with +teaching) to the pulse of the breakout rooms and serve as helper +mentors.
  • +
+

Lesson adjustment

+
    +
  • Make the exercise sessions as long as possible, group things +together. +
      +
    • There is a significant overhead to each breakout session, +becoming adjusted, figure out just what it is you are supposed +to do.
    • +
    +
  • +
  • Type-along is hard, given limited screen space to both watch and do.
  • +
  • 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.
  • +
  • With hierarchical helpers and more people in general, make sure that +each exercise and hands-on session is as self-contained as possible. +
      +
    • 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.
    • +
    +
  • +
+

Recommendations

+
    +
  • Consider limits of online formats and how difficult it is to do +interactive work.
  • +
+

Exercises and breakout sessions

+
    +
  • Very clearly say what the goal is, what the duration is (duration +and time it ends), etc. for each lesson
  • +
  • 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 +
      +
    • e.g. "we expect you to finish 1-3, 4-5 are optional. 20 +minutes, ending at xx:45".
    • +
    • When participants are in two time zones, it is extra important +to use this format of not specifying hour.
    • +
    +
  • +
  • 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".
  • +
+

Recommendations

+
    +
  • Have lots of "meta-talk" about what you are doing, what expectations +are, etc.
  • +
+

HackMD

+
    +
  • HackMD serves as a side channel to answer questions, so that the +main flow is not disrupted. +
      +
    • Learners keep it open and always watch and ask questions at the +bottom.
    • +
    +
  • +
  • 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. +
      +
    • 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).
    • +
    +
  • +
  • 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.
  • +
  • HackMD starts failing with a lot of people +
      +
    • We saw the limits at 50-100 people. If most people leave it in +view mode, it gets a little bit better.
    • +
    • If there isn't much text in it, it's better (~10k characters is +low).
    • +
    • When the document grew too long: we moved some of the text from +previous episodes to a side-HackMD and linked to it.
    • +
    • The failure mode was usually not being able to edit.
    • +
    • 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.
    • +
    • We even saw Google Docs fail with 50 simultaneous editors during +an icebreaker (and our icebreakers with hackmd seemed to work +with ~50).
    • +
    +
  • +
  • Always have people ask questions and comment at the bottom. +
      +
    • There is not a "questions section" and "lesson section", always +write at the bottom.
    • +
    • 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.
    • +
    +
  • +
  • Suggested heading arrangements (but hackmd master does whatever +makes sense): +
      +
    • # for page title
    • +
    • ## for each lesson
    • +
    • ### for each episode
    • +
    • #### for each exercise, group discussion, etc. (if it needs to +be smaller than ###.)
    • +
    +
  • +
  • Make participants aware that we plan to publish questions and +answers later as workshop outcomes. +
      +
    • After the workshop we add questions and answers from the HackMD +document to the workshop page.
    • +
    • 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.
    • +
    • 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 [name=Myname] 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 +[name=Myname]. 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.
    • +
    • 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.
    • +
    +
  • +
+

Zoom

+
    +
  • Have a dedicated host, who focuses on breakout rooms and +registration related matters.
  • +
  • Use a client, not the web browser - though web browser is minimally +OK.
  • +
  • Assigning leareners to breakout rooms takes a long time, but luckily +Zoom can make it easy enough: +
      +
    • The "pre-assign breakout rooms" seems to only work within one +organization, thus was useless to us
    • +
    • When people name themselves according to the (n) Firstname Lastname system, people sort properly and it becomes very fast +to assign hundreds of people to their rooms.
    • +
    +
  • +
  • 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. +
      +
    • This is important when you approve entry to the meeting room from the waiting room.
    • +
    • 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.
    • +
    +
  • +
  • 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 CodeRefinery Zulip channel. +
      +
    • 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.
    • +
    • HackMD can also be used to discuss among staff, of course always +at the very bottom.
    • +
    +
  • +
  • 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).
  • +
  • We saw some interesting Zoom problems: +
      +
    • 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.
    • +
    • 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.
    • +
    • 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.
    • +
    +
  • +
+

Recommendations

+
    +
  • Managing breakout rooms isn't too hard, but do practice.
  • +
+

Streaming

+

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.

+
    +
  • +

    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.

    +
  • +
  • +

    What's the point of streaming?

    +
      +
    • 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.
    • +
    • 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.
    • +
    • We can imagine a fully federated system: There is one small Zoom +meeting with instructors doing the teaching. All 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.
    • +
    +
  • +
  • +

    Stream as an overflow

    +
      +
    • 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
    • +
    • We emphasized that the experience would not be the same, and +they should try to come to another workshop later.
    • +
    • 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.
    • +
    +
  • +
  • +

    Interacting with stream viewers

    +
      +
    • We got questions and comments on the stream chat.
    • +
    • 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)
    • +
    • Stream viewers seemed pretty happy with what they were getting.
    • +
    +
  • +
  • +

    Risks of streaming

    +
      +
    • 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.
    • +
    • 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.
    • +
    • Risk of learner audio or video being broadcast. Zoom provides +tools ("spotlight video") to prevent this, but it doesn't work +all the time.
    • +
    • Extra effort needed. The marginal cost isn't that great in the +end, once you know how it works.
    • +
    +
  • +
  • +

    Zoom can send a video feed to a streaming service, which +re-broadcasts to the whole world

    +
      +
    • This has to be enabled under your account, then can be +configured for a particular meeting.
    • +
    • "Custom streaming server" seems to be able to broadcast to +anything. In particular, we used Twitch to do our streaming.
    • +
    +
  • +
  • +

    Keeping learner's videos out of the stream

    +
      +
    • Privacy of learners is the first prerequisite to streaming.
    • +
    • 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.
    • +
    • Breakout rooms never recorded or streamed (though some groups +asked if they could be recorded).
    • +
    • Zoom "Spotlight video" means that only that person should go +out into the stream. +
        +
      • The zoom host must not be in the gallery view.
      • +
      • This bugs 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.
      • +
      • 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.
      • +
      • We really need to investigate this more.
      • +
      +
    • +
    +
  • +
  • +

    What to do with the stream while the breakout rooms are going on?

    +
      +
    • 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
    • +
    • 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.
    • +
    +
  • +
+

Recommendations

+
    +
  • 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.
  • +
  • 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.
  • +
+

Recording

+
    +
  • Once you do streaming, it is a smaller step to recording and posting +the videos. +
      +
    • Who is benefited by the recordings? Perhaps not brand new +learners, but the learners who were in the workshop can review +them again later.
    • +
    +
  • +
  • If recordings require post-processing, they will almost never get +done. +
      +
    • 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.
    • +
    +
  • +
  • A surprising number of learners have asked for the videos after the +workshop. +
      +
    • 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.
    • +
    • When we can't provide them quickly, their usefulness is much +reduced.
    • +
    +
  • +
+

Recommendations

+
    +
  • Clearly announce the recording privacy statement when first +registering.
  • +
  • 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.
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2020/09/29/git-pr/index.html b/branch/main/blog/2020/09/29/git-pr/index.html new file mode 100644 index 000000000..e5d07a1fd --- /dev/null +++ b/branch/main/blog/2020/09/29/git-pr/index.html @@ -0,0 +1,949 @@ + + + + git-pr: painless small pull requests - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - git-pr: painless small pull requests + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

git-pr: painless small pull requests

+ + + +
+ +

git-pr: painless small pull requests

+

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, https://github.com/NordicHPC/git-pr.

+

Let's talk about how it works.

+

Making a change

+

First, git-pr will help you to make the new feature branch. git pr branch $branch_name willcreate a new feature branch off of the +upstreamdefault branch and check it out for you. You might want to +git fetch first. Make your commits off of this branch.

+

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.

+

Then, to push the pull request, I use git pr open. 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.

+

One thing that git-pr will do is figure out the upstream and your +local copy by yourself. Default upstream goes in priority order +upstreamorigin, Default personal fork goes in the order +localoriginupstream, 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.

+

git pr prune will remove all merged branches both locally and on the +remote (possibly dangerous!).

+

Various git pr fetch* commands will fetch pull requests into a local +pr/NNN branch.

+

There are various other small useful things, with it, but this is the +main part.

+

These are only 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.

+

About git-pr

+

You can find it at https://github.com/NordicHPC/git-pr - it is a +single shell script to copy to your path.

+

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!

+

It supports both Github and Gitlab, though Gitlab support is less well +tested.

+

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.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2020/11/13/carpentry-community-discussion-nordic/index.html b/branch/main/blog/2020/11/13/carpentry-community-discussion-nordic/index.html new file mode 100644 index 000000000..5f6c46d79 --- /dev/null +++ b/branch/main/blog/2020/11/13/carpentry-community-discussion-nordic/index.html @@ -0,0 +1,965 @@ + + + + Community discussion in Nordic and Baltic countries - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Community discussion in Nordic and Baltic countries + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Community discussion in Nordic and Baltic countries

+ + + +
+ +

This blogpost is based on the notes made on Carpentries Community Discussion Etherpad on the 30th Oct. 2020.

+

Summary

+

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?

+

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 below.

+

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.

+

There are ongoing initiatives to develop Nordic community further. Among other things, information about the Nordic Research Software Engineer initiative and its first online get-together event on 30th Nov. - 2nd Dec. was announced.

+

Workshop debriefing

+

Experiences from two recently held online Carpentries workshops were shared and discussed:

+

Sweden, Stockholm -- Mix and Match (SQL, OpenRefine, Python programming and plotting)

+

A self-organized workshop by KTH, Stockholm University, and Karolinska Institute

+
    +
  • (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.
  • +
  • (Radovan) (In his experiences from teaching online workshops in CodeRefinery) 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).
  • +
  • (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.
  • +
+

Norway, Bodø -- DC social science

+

A centrally-organized workshop at Bodø University

+
    +
  • (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.
  • +
  • (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.
  • +
  • (Lina) Depending on the context?
  • +
  • (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.
  • +
  • (Joakim) Important thing is not give pressure on instructors.
  • +
  • (Lina) Letting learners take over instructor's screen would be interesting.
  • +
  • (Lars) Polls for ice-breakers as well. Easy to rush through, but important not to, especially when you cannot see faces as feedback.
  • +
  • (Radovan) Hopefully useful tips for online teaching learned from CodeRefinery workshops: https://coderefinery.github.io/manuals/
  • +
+

Community building, collaboration, and ongoing initiatives in the Nordic and Baltic region

+
    +
  • (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 research bazaar at the University of Oslo earlier this year: +
      +
    • goal: making 3D holiday greeting card using HTML and JavaScript: https://arworkshop.teebusch.repl.co/card1.html
    • +
    • The lesson material is all there: https://repl.it/@Teebusch/arworkshop
    • +
    +
  • +
  • (Joakim) Suggestion of a repository of Carpentries Nordic/Baltic community members with specialities and skills
  • +
  • (Annika) Google Sheets for this?
  • +
  • (Anne) EOSC Nordic claims to be a knowledge-hub
  • +
  • (Radovan) Is also working on mapping.
  • +
+

Announcements

+
    +
  • 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)
  • +
  • Local-nordic Carpentries mailing list: https://carpentries.topicbox.com/groups/local-nordic
  • +
  • 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)
  • +
+

Participant list

+
    +
  1. Annika Rockenberger (host, Norway, Oslo)
  2. +
  3. Naoe Tatara (co-host, Norway, Oslo)
  4. +
  5. Kerstin Lenk (Finland, Tampere)
  6. +
  7. Lars Kjær (Denmark, Copenhagen)
  8. +
  9. Tobias Busch (Norway, Oslo)
  10. +
  11. Lina Andrén (Sweden, Stockholm)
  12. +
  13. Mohamed Abdelhalim (Norway, Oslo)
  14. +
  15. Annajiat Alim Rasel (Bangladesh, Dhaka)
  16. +
  17. Joakim Philipson (Sweden, Stockholm)
  18. +
  19. Thomas Arildsen (Denmark, Aarborg)
  20. +
  21. Radovan Bast(Norway, Tromsø)
  22. +
  23. Samantha Wittke (Finland, Helsinki)
  24. +
  25. Olav Vahtras (Sweden, Stockholm)
  26. +
  27. Anne Fouilloux(Norway, Oslo)
  28. +
  29. Richard Darst (Finland, Helsinki)
  30. +
+

Thank you for all the contributions!

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2021/09/01/bi-weekly-community-calls/index.html b/branch/main/blog/2021/09/01/bi-weekly-community-calls/index.html new file mode 100644 index 000000000..b3938e5f8 --- /dev/null +++ b/branch/main/blog/2021/09/01/bi-weekly-community-calls/index.html @@ -0,0 +1,914 @@ + + + + Bi-weekly Community Calls started - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Bi-weekly Community Calls started + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Bi-weekly Community Calls started

+ + + +
+ +

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.

+

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!

+

So far, we informed and discussed among others;

+
    +
  • CodeRefinery project: current status and future,
  • +
  • How to improve outreach and publicity,
  • +
  • Importance of possibility to provide ECTS,
  • +
  • How CodeRefinery should give credits to contributions by volunteers,
  • +
  • Mentorship program for exercise leads after the workshop,
  • +
  • How to "order" workshops
  • +
+

For more details of each call, please visit the archive of the minutes

+

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 the Community Call HackMD.

+

We all look forward to seeing you at community calls and Zulip :)

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2021/11/20/phase-2-lessons-learned/index.html b/branch/main/blog/2021/11/20/phase-2-lessons-learned/index.html new file mode 100644 index 000000000..72efb5af2 --- /dev/null +++ b/branch/main/blog/2021/11/20/phase-2-lessons-learned/index.html @@ -0,0 +1,1250 @@ + + + + Lessons learned from phase 2 of the project - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Lessons learned from phase 2 of the project + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Lessons learned from phase 2 of the project

+ + + +
+ +

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.

+

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.

+

Workshop/event organization

+

Metrics

+
    +
  • 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 (https://coderefinery.org/about/statistics/) which really simplified +reporting.
  • +
+

Survey

+
    +
  • Survey should be designed considering analysis and presentation of results, +as well as and what to focus on (what we want to show off).
  • +
  • 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.
  • +
  • How to get a better and precise overview of "actual" participants: +
      +
    • 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.)
    • +
    • 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.
    • +
    • Post-workshop survey: +
        +
      • 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.
      • +
      • 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.
      • +
      • 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.
      • +
      +
    • +
    +
  • +
+

Capacity and workshop format

+
    +
  • How to afford as many as possible learners while keeping good learner experiences +or even improving them.
  • +
  • How we carried out online workshops in 2020-2021: +
      +
    • Standard 3-full day CR workshop was transformed into 6-half day format, typically Tuesday-Thursday over 2 consecutive weeks.
    • +
    • Helper/Exercise lead onboarding sessions as well as installation help drop-in sessions were held typically a week before the 1st week.
    • +
    • All the exercises were done in breakout room with a group of regular members.
    • +
    • We recruited exercise leads and accepted 5-6 individual learners per exercise lead plus team registration including their own exercise lead.
    • +
    • We used priority criteria based on countries and/or institution's characteristics.
    • +
    • Problems/challenges we experienced: +
        +
      • Withdrawals on short notices and no-shows
      • +
      • Much hassles by the coordinators
      • +
      • Feedback showing both positive and negative experiences with regular members/exercise leads
      • +
      +
    • +
    +
  • +
  • What is the optimal format of help provision and exercises: +
      +
    • Should the group members be fixed or more ad-hoc or even hop-in-and-out?
    • +
    • 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.
    • +
    • "Webinar (stream)-by default" with an option for joining in zoom-meeting room for extra help may work better (ref. Python for SciComp 2021)?
    • +
    • Post-workshop Q&A session time/day would be useful?
    • +
    • 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.
    • +
    +
  • +
+

Communication with participants

+
    +
  • Indico's email function worked well to send information about the workshop to participants/signers.
  • +
  • We experienced few cases of typo in email address, thus we could not reach registrants.
  • +
  • Online collaborative notebook (HackMD and similar) worked well for Q&A during the lectures.
  • +
+

Certificates

+ +

Planning

+
    +
  • 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.
  • +
  • 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.
  • +
+

Lesson development

+
    +
  • Only happened before workshops. This was very efficient but introduced stress.
  • +
  • It probably requires a calendar event to dedicate time for this.
  • +
  • "software installation and setup" +
      +
    • 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).
    • +
    • The procedures need validations given diverse scenarios.
    • +
    • 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).
    • +
    +
  • +
  • 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.
  • +
  • It is important to make the contribution criteria clear for making lesson citable: +
      +
    • “creator”(author): significant contributions
    • +
    • “contributor”/Editor: reviewing/approving contributions
    • +
    • “contributor”/Other: smaller contributions
    • +
    +
  • +
  • Ref: https://hackmd.io/@coderefinery/citable-lessons
  • +
  • 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: +
      +
    • Institution/Organization etc.
    • +
    • Type of event and link to the event page: +
        +
      • Workshop
      • +
      • Credited course
      • +
      • Non-credited course
      • +
      • Other type (specify)
      • +
      +
    • +
    • Which lessons were used +
        +
      • Only CR lessons (which ones)
      • +
      • CR lessons (which ones) as well as other lesson materials (what materials?)
      • +
      • part of CR lessons (where of it)
      • +
      +
    • +
    +
  • +
+

The Carpentries

+

Membership and use of its benefits

+
    +
  • Membership tier: Platinum, 3 years (2018 Nov. 1 - 2021 Nov. 1)
  • +
  • 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.
  • +
  • Use of instructor seats and Centrally-Organized Workshops (COW):
  • +
+ + + + +
yearused seatsbadged instructorsCOW
2018-2019138-
2019-20201283
2020-2021*1061
+
    +
  • For each membership year, NeIC had 15 priority seats for the instructor training and 6 COWs without fee.
  • +
  • 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.
  • +
  • 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.
  • +
+

Relationship with the Carpentries and recognition of CR in the Carpentries community

+ +

Regional Coordinator (RC)

+
    +
  • 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 35 workshops. 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.
  • +
  • RC initiated the following: + +
  • +
  • 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.
  • +
  • Upon the expiration of the NeIC's membership, RC in Nordic region is also discontinued.
  • +
+

Dissemination of opportunities to use the NeIC's membership benefit

+
    +
  • Dissemination of opportunities were done via CR and NeIC website, CR Zulip chat, CR newsletter, at relevant workshops, CR twitter, etc.
  • +
  • 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.
  • +
+

Uptake of the membership benefits

+
    +
  • 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.
  • +
  • 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).
  • +
  • Provision of teaching/learning opportunities in Carpentries SOWs/COWs initiated by CR might have been helping; +
      +
    • to disseminate the usefulness of the Carpentries workshops, as well as
    • +
    • to provide a "safe" place for newly-badged instructors to try teaching.
    • +
    • 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.
    • +
    +
  • +
  • The Carpentries is also changing along time: +
      +
    • Membership price model and the price itself had been stable for a couple of years, but will be changed within 2021.
    • +
    • RC role is to be changed in the process of re-designing community development program. 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 (Community Initiatives). The discount offer of having an RC is to be discontinued.
    • +
    • The Carpentries will have online workshops as their standard option to offer in near future; it is so far only as pilot.
    • +
    +
  • +
+

Meeting minutes and decision tracking

+
    +
  • 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.
  • +
+

Time reporting and vacation planning

+
    +
  • 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).
  • +
  • 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.
  • +
  • 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).
  • +
  • In hindsight, it would have been better to offer more 1-1 discussions between +project manager and staff.
  • +
  • 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.
  • +
  • It reduces confusion to share a vacation plan: not only for the project +manager but for the entire staff.
  • +
+

Issue/task tracking

+
    +
  • 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.
  • +
  • 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.
  • +
  • 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.
  • +
+

Support line/ request tracker

+
    +
  • We got roughly 200-300 tickets/year.
  • +
  • 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.
  • +
  • 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.
  • +
  • Most tickets arrive around workshops.
  • +
  • Most non-workshop tickets were to unblock GitLab accounts.
  • +
+

Communication within the community and the project

+
    +
  • We have started within NeIC Slack.
  • +
  • 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.
  • +
  • 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.
  • +
  • We are unsure however, whether the problem with outreach is lack of tools or lack of processes.
  • +
  • One way out is to move communication to the public space which we have +done when moving from Slack to Zulip.
  • +
  • Internally Zulip chat has been good for the project.
  • +
  • In addition, we have managed to engage many helpers and volunteers for each workshop.
  • +
  • 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.
  • +
  • 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.
  • +
+

Data management

+
    +
  • Google Drive has served us well in the first years.
  • +
  • However, this storage was connected to a personal account.
  • +
  • Over time we used GitHub more and more.
  • +
  • HackMD was used a lot in the last 2 years of the project, both for workshops and notes and meetings.
  • +
  • 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.
  • +
  • We should have created a data management plan.
  • +
  • Relevant to some points written in Legal questions.
  • +
+

Community engagement

+
    +
  • There was a constant stream of people interested in becoming more involved.
  • +
  • We have activated some, but as 'communication' says above, some potential was left unrealized.
  • +
  • Growing a community requires also promoting newcomers and mentoring.
  • +
  • Mentoring also requires volunteer mentors.
  • +
  • With more mentoring and more follow-up we could have had engaged more people and more organizations.
  • +
  • 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. Supporting community champions and running champions programs
  • +
  • How to keep the community engagement up and running without "burn-out" is a constant challenge.
  • +
+

Stakeholder engagement

+
    +
  • Steering group seems to have become less engaged over time.
  • +
  • At the beginning of the project the SG actively influenced and gave ideas and input and suggestions.
  • +
  • Over time the steering group meetings and communication grew more and more +passive and turned into a reporting channel.
  • +
  • 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.
  • +
+

Infrastructure hosting (GitLab service)

+
    +
  • Both the steering group and also the project staff became less interested in this over time.
  • +
  • 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).
  • +
+ +
    +
  • The project was lacking support in GDPR-related questions +
      +
    • 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?
    • +
    • 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 GDPR is not followed due to its server existence outside of the EU +(especially in +US) +(Ref. Recommendations by European Data Protection +Board)
    • +
    • 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").
    • +
    • 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.
    • +
    +
  • +
  • "Rights to work results" vs. Open Science +
      +
    • Ref: a page about "Rights to work results" at University of Oslo
    • +
    • General clarification is needed here so that everyone won't be in trouble later.
    • +
    • 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.
    • +
    +
  • +
  • We also lacked support in questions about how to start an own organization/ spin-off.
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2021/11/21/towards-citable-lessons/index.html b/branch/main/blog/2021/11/21/towards-citable-lessons/index.html new file mode 100644 index 000000000..de8169b85 --- /dev/null +++ b/branch/main/blog/2021/11/21/towards-citable-lessons/index.html @@ -0,0 +1,1036 @@ + + + + Towards citable lessons - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Towards citable lessons + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Towards citable lessons

+ + + +
+ +

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.

+

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.

+

Technical choices

+
    +
  • 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.
  • +
  • We will convert the 3 remaining Jekyll lessons to Sphinx to simplify pdf export.
  • +
  • We will not start with https://allcontributors.org/ because it requires each contributor +to have a GitHub account which we have found a too strict limitation.
  • +
  • We start with tracking authorship in CITATION.cff since GitHub presents a +"cite as" button when this file is present.
  • +
  • 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.
  • +
+

Distinguishing authors and contributors

+
    +
  • Removed "code" (lesson material) does not mean removing authorship unless the author prefers to be removed.
  • +
  • Example for how Carpentries do it (unix shell lesson): + +
  • +
  • Definitions of the roles: +
      +
    • "creator": significant contributions
    • +
    • "contributor"/Editor: reviewing/approving contributions
    • +
    • "contributor"/Other: smaller contributions
    • +
    +
  • +
  • On Zenodo we start with "creator" (author) and "contributor" (other). +
      +
    • See also categories that Zenodo understands: https://developers.zenodo.org/#representation (search for "creators" and "contributors")
    • +
    • 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.
    • +
    +
  • +
  • We still need to verify whether CITATION.cff and/or .zenodo.json can map to +the definitions of roles (above).
  • +
+

How we will reach out to creators and contributors

+
    +
  • We will do this on a per-lesson basis and we will start with the lessons +which we teach the most often.
  • +
  • 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.
  • +
  • We reach out to everybody and ask whether they want to be contributor or author.
  • +
  • If a person cannot be reached, we do not add the person without consent and +rather add the person later once we reach them.
  • +
  • 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.
  • +
  • On the GitHub issue we will ask authors for their ORCID.
  • +
+

Archiving lessons as pdf

+
    +
  • 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.
  • +
  • We have concluded that we wish to attempt depositing pdf versions unless this +turns out too difficult.
  • +
  • The pdf versions will be generated automatically as part of a "release" workflow.
  • +
  • The automatic pdf generation is relatively straightforward with Sphinx +lessons but less trivial with Jekyll-based lessons.
  • +
  • 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.
  • +
  • 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.
  • +
+

ORCID vs. Zenodo community

+
    +
  • We have decided against introducing a project ORCID for CodeRefinery and +rather collect related records in a CodeRefinery Zenodo community.
  • +
+

How we wish to test the workflow

+
    +
  • For one or two example lessons we will create a fork and test the release +deployment and DOI generation on Zenodo sandbox.
  • +
+

Suggested workflow to make lessons citable via Zenodo

+
    +
  • Add a .zenodo.json to the lesson repo, for example:
  • +
+
    "creators": [
+        {   
+            "orcid": "0000-0002-1825-0097",
+            "affiliation": "Feline research institute",
+            "name": "Field, Gar"
+        },
+        {   
+            "orcid": "0000-0002-1825-0097",
+            "affiliation": "Feline research institute",
+            "name": "Cat, Felix"
+        }
+    ],
+
+
    +
  • Generate pdfs from Sphinx sources via LaTeX: +
      +
    • In conf.py, set latex_engine = 'xelatex' (makes emojis work), then make clean ; make latexpdf.
    • +
    • This will become part of GitHub Actions, it will not be a manual step.
    • +
    +
  • +
  • Create a release of the lesson on GitHub.
  • +
  • On Zenodo, check syncing with GitHub.
  • +
+

Resources

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2021/11/25/lessons-learned-may-2021/index.html b/branch/main/blog/2021/11/25/lessons-learned-may-2021/index.html new file mode 100644 index 000000000..65e82560b --- /dev/null +++ b/branch/main/blog/2021/11/25/lessons-learned-may-2021/index.html @@ -0,0 +1,1006 @@ + + + + Lessons learned from the May 2021 online workshop - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Lessons learned from the May 2021 online workshop + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Lessons learned from the May 2021 online workshop

+ + + +
+ +

May 10-12 and 18-20, 2021, we gave our at that time largest CodeRefinery +online workshop (6 x 3.5 hours) with 128 participants. +We plan to deliver many more such workshops based on our lessons.

+

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.

+

This complements our lessons learned from our first online workshop.

+

Lesson coordination

+
    +
  • 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.
  • +
  • The teaching coordinator should check in for basic practicalities with each instructor: +
      +
    • team-teaching if desired
    • +
    • material to cover
    • +
    • schedule breaks
    • +
    • test screenshare prior to the lesson
    • +
    • how to control breakouts yourself
    • +
    +
  • +
  • Be clear about video on or off for instructors. If multiple people on then gallery OBS capture doesn't work.
  • +
  • Include role mentoring as part of the coordination initial meeting.
  • +
  • More talk about "voice of audience".
  • +
  • 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.
  • +
  • Inform individual exercise leads about how the set group of individual learners is like (e.g. expecting how many in the room, OS, background).
  • +
  • Inform exercise leads and all the team members who are replacing when a regular exercise leader is absent.
  • +
  • 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.
  • +
+

Zoom and OBS

+
    +
  • Ask participants to join with video OFF when they join after the workshop started (otherwise they may appear in the stream).
  • +
  • Huge amount of work that many people did making the instructions, and testing them on all the different OSs, surely helped.
  • +
  • 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.
  • +
  • Gallery insert view is risky.
  • +
  • You can't spotlight someone when only two peoples' videos are on.
  • +
  • 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.
  • +
  • It takes manual work to switch from one to two people (changing cropping), and also two to three (alignment).
  • +
  • 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.
  • +
  • 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.
  • +
  • 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.
  • +
  • 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.
  • +
  • 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.
  • +
  • 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).
  • +
  • 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.
  • +
  • OBS helper: would be nice to have a way to unmute both of us.
  • +
+

Collaborative notes

+
    +
  • Don't try to insert html into HackMD :sweat_smile:
  • +
  • HackMD at this size seems to have worked, not all the time for everybody, but sufficiently.
  • +
  • Using one HackMD for twitch and zoom was a good idea.
  • +
  • Provide plan for the day (including breaks and exercise plan) on top of HackMD and mention it at the beginning of the day.
  • +
  • When talking about HackMD, please share it, it gives people something to +look at.
  • +
  • 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.
  • +
+

Installation and tools

+
    +
  • +

    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.

    +
  • +
  • +

    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)

    +
    +

    [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?

    +
    +
  • +
+

Presenting and coordinating

+
    +
  • Coordination plan should be continuously reviewed.
  • +
  • Strong director role is needed.
  • +
  • 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.
  • +
  • Make it clear what someone needs to have open: Screenshare, HackMD, your terminal. You get links to the episodes from HackMD.
  • +
  • Avoid breaks between exercise explanation and doing exercise.
  • +
  • Clearly mark interruptions/speaking up during presentations as interruption (as in: not part of the presentation).
  • +
  • Spotlight video changes every time screenshare changes: It is defininitely still important to warn before stopping screen sharing (more than before)
  • +
  • Announcing "I'm about to take the screenshare" and waiting two seconds works +well.
  • +
  • Share screen for what you are talking about. Makes editing a bit easier.
  • +
  • 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.
  • +
+

Lesson content

+
    +
  • Staging area: as usual, a difficult episode +
      +
    • What parts of the episode is a dependency for other parts of CodeRefinery?
    • +
    • Remove it?
    • +
    • Make it clear it is advanced/optional/you won't get it yet, when it is taught?
    • +
    • Move it to the end?
    • +
    +
  • +
+

Communication with participants

+
    +
  • Indico: select "none" after selecting some registrants to for example sending emails (otherwise selection remain).
  • +
  • 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.
  • +
  • As for the "team registrations", as long they include an EL, we should send an acceptance ASAP.
  • +
  • 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.
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2022/05/04/improving-workshop-registration/index.html b/branch/main/blog/2022/05/04/improving-workshop-registration/index.html new file mode 100644 index 000000000..c7c6105e9 --- /dev/null +++ b/branch/main/blog/2022/05/04/improving-workshop-registration/index.html @@ -0,0 +1,1173 @@ + + + + Our plans to improve our workshop registration process - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Our plans to improve our workshop registration process + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Our plans to improve our workshop registration process

+ + + +
+ +

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 297 registrants which is a +record for us.

+

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.

+

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.

+

Below we summarize our observations and strategies for the upcoming events.

+

Goals of a good registration

+
    +
  • +

    Avoid chaos during the workshop

    +
      +
    • Avoid misunderstandings about registration types
    • +
    • Teams are clear and require minimum effort from organizers
    • +
    +
  • +
  • +

    Be able to predict attendance, avoid major disappointments

    +
  • +
  • +

    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)

    +
      +
    • E.g. not being bound only to Indico or something else that needs to be installed
    • +
    +
  • +
  • +

    Collect good information on participants for reporting later

    +
  • +
  • +

    Registration does not have to ever close

    +
      +
    • Continued registrations allow people to join halfway through
    • +
    • What needs does this have?
    • +
    +
  • +
  • +

    Editable by organizers (without making a copy by exporting)

    +
      +
    • e.g. exporting Indico to spreadsheet makes a copy, if people modify their registration our copy is invalid
    • +
    • Google Docs allows a form to be directly connected to a spreadsheet, we can modify old registrations while new ones come in
    • +
    +
  • +
+

Lessons learned from a recent event

+
    +
  • Unclear what registration options mean, people sign up for Zoom and don't show up
  • +
  • We have to manage teams ourselves, which requires too much communication and +manual work. Teams should be able to do this themselves.
  • +
  • Scheduling teams is hard, must optimize for this and avoid all ambiguity
  • +
  • Registration coordinator shouldn't teach (much, certainly not early on)
  • +
  • Communication and registration is the same person or same two persons
  • +
  • Communication/registration and teaching coordination should not be the same person
  • +
  • Indico is a good tool but we need to remove old copy-pasted questions/options and streamline
  • +
  • Allow teams to register with one contact point only
  • +
  • Merging teams is hard in indico
  • +
  • Adjusting teams is hard in indico
  • +
  • Communication/registration/coordination is a full time job for two weeks prior to the workshop
  • +
  • Question about availability is too often misunderstood: ask differently
  • +
  • Optimize for fewer emails since these are difficult to delegate
  • +
  • For exercise leads it is confusing whether to choose staff registration or regular registration
  • +
  • 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"
  • +
  • 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
  • +
  • Team registrations seem to have worked though and they seem to have the only +groups that "survived" to the end.
  • +
  • Local organizers could choose to use a centrally organized zoom if they +wanted - as long as they managed the teams themselves
  • +
+

Suggestions for improving our previous registration form

+
    +
  • "affiliation or university": have a list of institutions + "other" * free +text for other institutions or companies not listed
  • +
  • can we decentralize registration to groups and partners? +
      +
    • groups/partners scale as far as they like to as many helpers as they have
    • +
    +
  • +
  • questions on form +
      +
    • "do you want to participate in Stockholm? click here" -> another form
    • +
    • "in Aalto" -> another form
    • +
    • none of the above -> central form +
        +
      • group registration (exercise lead? or anybody as proxy?)
      • +
      • register as exercise lead and want to help out a "random" group
      • +
      • want to be part of a group -> click here but we can't guarantee a helper, especially if you register late
      • +
      • want to only watch alone
      • +
      +
    • +
    • also offer options to get informed for those unsure/undecided +
        +
      • yes
      • +
      • "interested"
      • +
      +
    • +
    +
  • +
  • standardized reporting form for partners
  • +
+

How to manage teams?

+
    +
  • Teams could handle some issues/setup themselves
  • +
  • They need some templates to send information
  • +
  • Which information should be sent by CR and which by the local organizers?
  • +
  • Need to get statistics and feedback from the local groups
  • +
  • Need to clarify if there will be "general" helpers in addition to team helpers
  • +
  • Larger project partners will probably prefer offering in-person exercise groups
  • +
  • How to deal with registration in the wrong form if we have several forms?
  • +
  • Each partner needs to clearly commit to a certain level of support and size
  • +
  • How to self-organize teams: +
      +
    • "helpers, rename yourself and join a room that does not have helpers yet"
    • +
    • "learners, if you are in a room that is too empty or too full, join another one"
    • +
    • this is to avoid rooms that are too full or too empty, or without helpers, or avoiding communicating which days an EL is unavailable
    • +
    • what if one exercise lead or room is more popular than another room?
    • +
    • how about continuity between days?
    • +
    +
  • +
  • What to do with solo registrations who are not part of a group and want to be +in an exercise group? +
      +
    • Is pairing up happening locally or centrally?
    • +
    +
  • +
+

Comments on a mock-up registration form

+

We have together reviewed an example +form and collected comments:

+
    +
  • Problems: "team organized by us" is not separated from "self-organized team"
  • +
  • The "probably not but send info" does not need to be asked for each day separately
  • +
  • But it's nice to offer the possibility to stay informed and decide later
  • +
  • Nice to have one form both for staff and everyone else to avoid the confusion that we saw at the previous event
  • +
  • "observer": let them decide whether they want emails or not
  • +
  • "how do you plan on attending" +
      +
    • Option 1: +
        +
      • Maybe confusing if somebody selects both zoom and in person
      • +
      • In-person breakout delegated to the local organization
      • +
      +
    • +
    • Option 2:
    • +
    +
  • +
  • Local rooms +
      +
    • Ask this earlier
    • +
    +
  • +
  • Teams +
      +
    • Ask this question earlier
    • +
    +
  • +
  • It is important that registrants can change their choices
  • +
  • In general, Radio buttons are nicer than dropdowns because you get to see the answers right away +
      +
    • But dropdown takes less screen space
    • +
    +
  • +
+

What if we get asked for help with creating a registration page for a local partner?

+
    +
  • We need to communicate who we share data with and ask for consent
  • +
  • We document what we ask and what we recommend partners to ask
  • +
  • We document which privacy policy we follow and which privacy standards +we require
  • +
  • We could offer a form/event if some local organizers need a separate +form but do not want to set it up themselves
  • +
+

Starting point for the new registration form

+
    +
  • OS +
      +
    • Dropdown
    • +
    +
  • +
  • Discipline +
      +
    • Dropdown
    • +
    +
  • +
  • Name +
      +
    • Open
    • +
    +
  • +
  • Email +
      +
    • Open
    • +
    +
  • +
  • Affiliation +
      +
    • Open
    • +
    • Has not been used for reporting yet but the information is good to +have
    • +
    +
  • +
  • Country +
      +
    • Dropdown
    • +
    +
  • +
  • Team name +
      +
    • Open
    • +
    +
  • +
  • Permission to give contact details to breakout room organizer +
      +
    • Yes/no dropdown
    • +
    +
  • +
  • Other notes to organizers +
      +
    • Open
    • +
    +
  • +
  • Room +
      +
    • Open
    • +
    +
  • +
  • Which days attending +
      +
    • Radio buttons
    • +
    +
  • +
  • Type of attendee +
      +
    • Radio buttons
    • +
    +
  • +
  • Do you want to attend in Zoom or follow live-stream only? +
      +
    • Dropdown/Radio buttons
    • +
    +
  • +
+

Conclusions

+
    +
  • Central registration is in Indico
  • +
  • We can offer a copy of our Indico template for a separate event for local partners who cannot use a local +registration system
  • +
  • Local partners are welcome to use their own registration systems
  • +
  • Teams can register as a team with a single contact point and the contact point does not have to be an exercise lead
  • +
  • We offer the possibility for individual learners and individual exercise leads to self-join exercise rooms
  • +
  • Workshop limits: +
      +
    • in terms of Twitch: it seems one bottleneck could be the collaborative HackMD document
    • +
    • in terms of exercise groups: the number of volunteers but also groups without exercise leads can be useful
    • +
    +
  • +
+

Follow-up steps

+
    +
  • Share a mock-up form soon with stakeholders for feedback via email and during a team meeting
  • +
  • Explain the setup clearly and concisely, directly in the workshop template
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2022/05/18/measuring-impact/index.html b/branch/main/blog/2022/05/18/measuring-impact/index.html new file mode 100644 index 000000000..59c3d1753 --- /dev/null +++ b/branch/main/blog/2022/05/18/measuring-impact/index.html @@ -0,0 +1,1120 @@ + + + + Outcomes from online hackathon about measuring the impact of CodeRefinery workshops - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Outcomes from online hackathon about measuring the impact of CodeRefinery workshops + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Outcomes from online hackathon about measuring the impact of CodeRefinery workshops

+ + + +
+ +

Introduction

+

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.

+

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:

+
    +
  • When we operate online and hybrid, we are accessible to many more styles of +attendance (and different measurements, such as live-stream viewers).
  • +
  • We have an excellent report as part of +coderefinery.org, this will be +split to a separate repository that is usable separately.
  • +
  • Tune our daily feedback questions and provide more time and motivation for +this (see below).
  • +
  • Our quantitative measures include number of registrations, number of known +attendees (in person/online), and number of unknown attendees (live-stream +viewers).
  • +
  • Our qualitative measures include text-based feedback per day and also a +post-workshop survey.
  • +
+

How did we measure attendance and impact up to now?

+

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 here today +represent the number of registrants and the real number of participants is +probably lower.

+

In addition, we have collected pre-workshop +survey data which was +part of the registration process and post-workshop +survey data which we +collect 3-6 months after a workshop (we have not been very consistent with the +exact intervals).

+

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 interesting +data but it wasn't +really driving lesson changes.

+

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.

+

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.

+

Discussion

+

The main points of our discussion were:

+
    +
  • The number of participants per country is still an important thing to +measure, even if it may not be 100% accurate. +
      +
    • We can get that from registrations and Twitch data.
    • +
    • 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.
    • +
    +
  • +
  • How can we measure less but have more meaningful results while not adding too much +work? +
      +
    • We should not try to achieve perfection. Some data / details cannot be +collected.
    • +
    • We get some feedback via email also.
    • +
    • We could interview individual participants or groups for feedback / +impressions on the workshop +
        +
      • That would give more profound insights on how did the students feel.
      • +
      • We could ask for volunteers at the beginning of the workshop.
      • +
      • Conduct the interview at the end, and turn it into a blog.
      • +
      +
    • +
    +
  • +
  • We should not forget people take workshops for different reasons +
      +
    • Do some participants re-take a workshop for more in-depth knowledge? If so, are they attending partially?
    • +
    • 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.
    • +
    +
  • +
  • Do we track how did people learn about the workshop? +
      +
    • Currently in the pre-workshop survey, but we should do it in the +registration.
    • +
    +
  • +
  • How to get feedback that helps us improve? +
      +
    • We could ask: why did you decide to stop following the stream?
    • +
    • We do ask: what did you find useful or not so useful?
    • +
    +
  • +
  • The HackMD feedback is one of the most important ways for us to improve the +lessons, as opposed to the pre-workshop survey. +
      +
    • The results need to be interpreted and compiled manually.
    • +
    +
  • +
  • Yet, we ask for the HackMD feedback in the last 5 min of the days, right as +people are leaving. +
      +
    • Consider improvements, such as asking before, or during, the last lesson.
    • +
    • Provide sufficient time for this, discuss the feedback as it comes in to +motivate it.
    • +
    +
  • +
  • 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".
  • +
  • Our current (early 2022 and earlier) post-workshop survey questions are +found at: +https://github.com/coderefinery/post-workshop-survey#survey-questions
  • +
  • NeIC perspective: +
      +
    • Ask project partners / stakeholders how do they benefit from CodeRefinery +training and how we can improve this
    • +
    +
  • +
  • How can we improve response rate? +
      +
    • Even shorter and clearer questionnaire
    • +
    • Good timing for when the survey is sent to participants, it seems that +Monday is the best day to send them out
    • +
    +
  • +
  • How can we learn why somebody stopped? +
      +
    • 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
    • +
    • 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)
    • +
    • 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)
    • +
    • 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
    • +
    • 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
    • +
    +
  • +
+

What will we change?

+

Registration (in addition to a previous discussion)

+
    +
  • We do ask: country and academic discipline +
      +
    • Also should allow multiple selections to mark interdisciplinary work
    • +
    +
  • +
  • Here we could also ask: career stage and how did you you learn about +workshop?
  • +
  • For group registrations it might get a bit tricky: +
      +
    • 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)
    • +
    • Make it possible and encourage the contact person to update the +registration form, e.g. at the end of the workshop
    • +
    +
  • +
+

Pre-workshop survey

+
    +
  • Integrate selected questions from the pre-workshop survey into the registration
  • +
  • In hindsight the pre-workshop data has not been used to change workshop lessons +
      +
    • Live-feedback (turned into issues turned into lesson/program changes) has +been the main feedback loop
    • +
    • Some of the questions can be turned into icebreaker question
    • +
    +
  • +
+

Statistics page

+
    +
  • Registration numbers +
      +
    • Convert from JSON to YAML (less error prone)
    • +
    • Make a separate repository
    • +
    +
  • +
  • Number of stream viewers +
      +
    • Combine registration numbers with streaming numbers on https://coderefinery.org/about/statistics/
    • +
    • Present views per country (it seems this is non-downloadable)
    • +
    • Present views over time (Twitch provides this data per 10-minute interval)
    • +
    +
  • +
+

Live-feedback (HackMD)

+
    +
  • Integrate feedback into the lesson itself, e.g. the last 10 min of the +workshop are dedicate to filling it in
  • +
+

Post-workshop survey

+
    +
  • What to ask straight after the workshop and what to ask later? Separate +survey?
  • +
  • Could be integrated to the pre-workshop survey because it can be updated
  • +
  • Update questions: +
      +
    • we could add the question: what would you like to learn more?
    • +
    • Maybe condense a bit (less text and repetition)
    • +
    • Remove suggestive questions if any
    • +
    • add academic field
    • +
    +
  • +
  • What data to request from groups / partners? +
      +
    • Number of participants
    • +
    • How did they like the event
    • +
    +
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2022/10/17/future-of-teaching/index.html b/branch/main/blog/2022/10/17/future-of-teaching/index.html new file mode 100644 index 000000000..a636ee40e --- /dev/null +++ b/branch/main/blog/2022/10/17/future-of-teaching/index.html @@ -0,0 +1,975 @@ + + + + CodeRefinery teaching strategies and the future of teaching - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery teaching strategies and the future of teaching + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

CodeRefinery teaching strategies and the future of teaching

+ + + +
+ +

This is the index page of the Future of +Teaching series.

+

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. This series of blog posts will +discuss what we did and how you can learn from it.

+

So, what is the future of teaching? For type of practical, hands-on +learning, we could try to classify learning situations into three +types:

+
    +
  • Very large courses and massive open online courses (MOOC),where +individual interaction isn't possible.
  • +
  • Small-medium courses, 10-30 people, with traditional classroom-type +interactions.
  • +
  • One-on-one or small-group mentoring.
  • +
+

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: The middle layer +got squeezed out: 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.

+

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 our +manuals.

+

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.

+

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.

+

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):

+ +

See also

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2022/10/21/python-for-scicomp/index.html b/branch/main/blog/2022/10/21/python-for-scicomp/index.html new file mode 100644 index 000000000..e92528ec9 --- /dev/null +++ b/branch/main/blog/2022/10/21/python-for-scicomp/index.html @@ -0,0 +1,933 @@ + + + + Python for Scientific Computing open for registration and collaborators - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Python for Scientific Computing open for registration and collaborators + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Python for Scientific Computing open for registration and collaborators

+ + + +
+ +

Our next workshop, Python for Scientific +computing, +is ready for you! Take part in different ways:

+
    +
  • +

    If you want to learn, you can register. Like all of our livestream +courses, +there are diverse ways to attend based on your needs.

    +
  • +
  • +

    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.

    +
  • +
  • +

    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.

    +
  • +
+

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 +material and +teaching is open-source before, during, and after the course.

+

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.

+

If you want to contribute more (or see how we do it), join the +CodeRefinery chat and +introduce yourself.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2022/10/24/parallel-chat/index.html b/branch/main/blog/2022/10/24/parallel-chat/index.html new file mode 100644 index 000000000..56f3f7aee --- /dev/null +++ b/branch/main/blog/2022/10/24/parallel-chat/index.html @@ -0,0 +1,1019 @@ + + + + Parallel chat ("HackMD") and scaling teaching - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Parallel chat ("HackMD") and scaling teaching + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Parallel chat ("HackMD") and scaling teaching

+ +

+ Parallel chat via a text document enables interactively at scale when online teaching. +

+ + October 24, 2022 + + - Richard Darst + +

+ +
+ +

Part of a series on the Future of +Teaching

+

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.

+

Our solution is "parallel chat", or as we typically call it "HackMD" +after the service we started using, hackmd.io - 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.

+

Demonstration of HackMD

+

There are a variety of reasons this is so good:

+
    +
  • You can have multiple people asking and answering at the same time +(not possible with voice, and linear chat gets confusing with)
  • +
  • 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.
  • +
  • People can ask anonymously - which encourages questions from those +who would usually be silent in courses.
  • +
  • Equally, questions don't distract everyone, so there is no pressure +to be quiet to let the course go on.
  • +
  • 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.
  • +
  • By having more questions asked, you can get much more feedback while +teaching - so much you have to be careful to not be overloaded!
  • +
  • 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.
  • +
+

Just look at the number of questions in our old courses, one 3.5-hour +day of our May 2022 +workshop - +and this is day 1, when people didn't yet know how it worked.

+

But there are some disadvantages:

+
    +
  • An absolute flood of information, which will 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.
  • +
  • Another window for people follow. Like above, we warn people to +focus on the learning and parallel chat only when there is time.
  • +
  • It's different, so needs some explanation (but we've seen people +catch on very quickly once they see it).
  • +
+

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 - always 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:

+
    +
  • 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.
  • +
  • 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.
  • +
  • We often use it as an icebreaker as a demo. Maybe not everyone +understands it.
  • +
  • It can also be used for lightweight polls: learners can +1 or add +a character to a line to make simple bar graphs.
  • +
  • Like we said above, it's not a perfect tool, but easy to use and fun.
  • +
  • A "HackMD manager" watches it and tries to keep things organized, +adds section headings, and so on. This makes it easy.
  • +
  • Remember, new content only to the bottom! People can't go following +multiple sections.
  • +
+

We don't have unlimited scaling and there are some other problems, +though. Some possible issues that may come up:

+
    +
  • To make this really good, you need at least one person focusing on +the parallel chat - or at least two co-instructors. In workshops of +our size, this hasn't been a big issue, though - it provides a good +task for helpers.
  • +
  • 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.
  • +
  • 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.
  • +
+

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...

+
    +
  • Lack of helpers to answer in parallel - fewer answers ⇒ fewer +questions. Fewer questions ⇒ less time looking at it ⇒ less +motivation to ask questions.
  • +
  • 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.
  • +
+

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.

+

See also:

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2022/10/31/co-teaching/index.html b/branch/main/blog/2022/10/31/co-teaching/index.html new file mode 100644 index 000000000..b3843139b --- /dev/null +++ b/branch/main/blog/2022/10/31/co-teaching/index.html @@ -0,0 +1,964 @@ + + + + Co-teaching and scaling up - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Co-teaching and scaling up + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Co-teaching and scaling up

+ +

+ Co-teaching replaces (forced?) learner interaction with natural interaction between co-instructors. +

+ + October 31, 2022 + + - Richard Darst + +

+ +
+ +

Co-teaching

+

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 +parallel chat, +but a significant part also comes from co-teaching, the topic +of this article.

+

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.

+

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 parallel chat 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.

+

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.

+

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.

+

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.

+

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.

+

See also:

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2022/11/07/reverse-hybrid/index.html b/branch/main/blog/2022/11/07/reverse-hybrid/index.html new file mode 100644 index 000000000..561ede934 --- /dev/null +++ b/branch/main/blog/2022/11/07/reverse-hybrid/index.html @@ -0,0 +1,966 @@ + + + + Reverse hybrid teaching - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Reverse hybrid teaching + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Reverse hybrid teaching

+ +

+ 'Reverse hybrid' is instructors remote, students local - possibly spread among different locations in small groups. +

+ + November 07, 2022 + + - Richard Darst + +

+ +
+ +

Part of a series on the Future of +Teaching

+

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?

+

We've found a surprising solution which we call reverse hybrid. +Surely others have thought of this, and maybe there is even a proper +name.

+

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.

+

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.

+

But what do we lose? Do we lose interaction with instructors? As +our posts on co-teaching and parallel chat 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.

+

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 parallel chat 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.

+

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 no longer have to teach +alone, which is a mindset change more than anything.

+

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?

+

See also

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2022/11/08/lessons-learned-Sep-2022/index.html b/branch/main/blog/2022/11/08/lessons-learned-Sep-2022/index.html new file mode 100644 index 000000000..6642ee0ac --- /dev/null +++ b/branch/main/blog/2022/11/08/lessons-learned-Sep-2022/index.html @@ -0,0 +1,1058 @@ + + + + Lessons learned from the Sep 2022 online workshop - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Lessons learned from the Sep 2022 online workshop + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Lessons learned from the Sep 2022 online workshop

+ + + +
+ +

September 20-22 and 27-29, 2022, we held again our CodeRefinery online +workshop (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 our first online workshop +2020 and the +May 2021 +workshop.

+

We have identified the following main issues that we want to address for future events:

+
    +
  • Registration process is still too complicated.
  • +
  • We are asking ourselves how to further scale without being completely overwhelmed by coordination/communication/synchronization.
  • +
  • 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.
  • +
  • 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.
  • +
+

Registration

+
    +
  • We still need a more lightweight system registration. +
      +
    • This is a balancing act between guiding people and trusting them to self-organise.
    • +
    +
  • +
  • Could we actually get away with no registration at all? How to get stats then? +
      +
    • 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. +
        +
      • Part of it can be via the icebreaker questions.
      • +
      +
    • +
    +
  • +
  • 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.
  • +
  • We could have registration but let people self-organise more: +
      +
    • Offer HackMD, exercise lead zoom, exercise Zoom, stream and inform people about those resources.
    • +
    • Give hints about different ways to participate but no rigid instructions.
    • +
    +
  • +
  • We could leave team registration completely to the partners or participants to handle: +
      +
    • Tell that they could summon teams in their organisation communication channels.
    • +
    • They could indicate somewhere that they are open for managing additional teams.
    • +
    • Tell organisations that they can organise their own registration.
    • +
    +
  • +
  • Exercise leader registration was confusing (too many forms to fill out).
  • +
  • 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.
  • +
  • How to deal with late registrants? +
      +
    • Should they get the Zoom link or only HackMD? +
        +
      • If not we should take those options away from the registration form. Maybe have a last minute registration form as a separate one.
      • +
      +
    • +
    +
  • +
  • Consider adding others who are helping to Indico (our registration system) as managers :grin:.
  • +
  • We could communicate clearer that also participating part of the workshop is possible and encouraged.
  • +
+

Workshop format

+
    +
  • 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.
  • +
  • Communicate better that even if the Git part gets too difficult, the second week may still be worth watching and again easier to comprehend.
  • +
  • Generally we observed a significant no-show rate (over 50%).
  • +
  • Maybe this format is too big for the resources/time that we have as organisers. +
      +
    • Maybe the task distribution was not clear/visible.
    • +
    • It at least difficult to get enough instructors to commit
    • +
    +
  • +
  • Learners were not that motivated in joining the Otaniemi in-person (daily decreasing numbers).
  • +
  • Is September too crowded with other events?
  • +
  • Have we saturated the local market?
  • +
  • Workshop going over lunch time (until 13:30 local time) was an issue at least in JYU and CSC, +
      +
    • People managed when topic to come after break was announced before break so that they knew if they could skip without losing the thread.
    • +
    +
  • +
  • We could try flipped learning: have people watch videos / read the docs and then come on-site/online to discuss and solve problems
  • +
  • Should we do more asynchronous teaching/learning?
  • +
+

Coordination

+
    +
  • Establish the process according to the experience gained from this and previous workshops: +
      +
    • Make step-by-step instructions in manuals on how to arrange such events.
    • +
    • Put everything that participants will need for the workshop already into the Indico confirmation message. +
        +
      • Info from emails sent could be also in manuals except for the links.
      • +
      +
    • +
    +
  • +
  • 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.
  • +
+

Zoom and Twitch

+
    +
  • Ask exercise leads (ELs) not to speak in learners Zoom while lecturers speak in Twitch.
  • +
  • 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.
  • +
  • Utilise Zoom annotate in co-teaching.
  • +
  • Exercise Zoom rooms: +
      +
    • Tech questions room: difficult to follow if someone actually goes there. +
        +
      • It would be better to join the tech room during breaks, or before/after the lectures.
      • +
      +
    • +
    • Quiet room had 1-3 participants always.
    • +
    +
  • +
  • Exercise room instructions screen-share: We did it from separate device so we had the host computer free to operate stuff.
  • +
  • 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).
  • +
  • More interaction in video room: +
      +
    • Since there was so little interaction and not enough exercise time: some ELs felt that they "are not needed"
    • +
    • Too few exercises or too short exercise time and hence not enough possibility for interaction.
    • +
    +
  • +
  • Exercises felt too short (because many participants were software-unprepared).
  • +
  • Navigation problems among different webpages continues to be an issue. Few suggestions on how we could solve it have been and are being discussed here.
  • +
+

Collaborative notes

+
    +
  • HackMD goes to Twitch chat anyway so maybe no point in keeping it as a secret. +
      +
    • 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.
    • +
    +
  • +
  • HackMD started to be slow even if it should not with ~100 participants. +
      +
    • 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.
    • +
    • 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.
    • +
    +
  • +
  • Later in the workshop we deployed our own HedgeDoc instance, which worked quite well.
  • +
+

Installation and tools

+
    +
  • 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.
  • +
+

Lesson content

+
    +
  • 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.
  • +
  • Provide snapshots and starting points for those who have not done the previous exercises.
  • +
  • Topics in Day 4 (at least) would deserve a longer lesson.
  • +
  • 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).
  • +
  • Especially in in-person: the Twitch sessions felt long (since there was so little interaction in the in-person rooms).
  • +
+

Communication with participants

+
    +
  • Add all sessions to the CodeRefinery calendar.
  • +
  • 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.
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2022/11/08/mastodon/index.html b/branch/main/blog/2022/11/08/mastodon/index.html new file mode 100644 index 000000000..0dff14fa8 --- /dev/null +++ b/branch/main/blog/2022/11/08/mastodon/index.html @@ -0,0 +1,979 @@ + + + + CodeRefinery Mastodon account - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery Mastodon account + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

CodeRefinery Mastodon account

+ +

+ CodeRefinery has started a Mastodon social media account. +

+ + November 08, 2022 + +

+ +
+ +

For the obvious reasons, CodeRefinery is looking into a Mastodon +account. You can now find us at +@coderefinery@fosstodon.org.

+

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.

+

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?

+
    +
  • https://mastodon.help gives a basic introduction of the how and +why. https://fedi.tips/ gives a longer FAQ (and a separate +introduction).
  • +
  • Usernames are like emails with a username and a server name, +@username@server.name.
  • +
  • To join, you choose a server that you feel comfortable in, and they +all communicate. Some recommendations are below.
  • +
  • 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.
  • +
  • When in doubt, just join somewhere that looks reasonable - don't let +the Paradox of Choice hold back progress!
  • +
+

If you are just joining, you can start out by following CodeRefinery - +copy @coderefinery@fosstodon.org to your search and follow it. You +may be interested in following some of the people that we follow to +seed your list.

+

Deciding a server:

+
    +
  • We chose https://fosstodon.org (FOSS = "free and open source +software") to focus on the software and technology side of things.
  • +
  • For others in academia or research, +https://fediscience.org/server-list.html is a very nice list of +other interesting servers.
  • +
  • https://mastodon.social/ is run by the non-profit that coordinates +the Mastodon open-source project, but that does not mean you +should necessarily prefer it.
  • +
  • Do a web search for server lists. There are both news articles with +broad recommendations, and searchable lists with many servers for +specialized topics.
  • +
+

What you should know about Mastodon (especially vs. Twitter):

+
    +
  • 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.
  • +
  • It's not designed for low-effort replies (quote-replies) since it +makes engagement farming and negative attention. You can reply to +posts with the reply button on each post. (don't forget you can +click on post to see the thread).
  • +
  • Use hashtags to make things searchable, there is no full-text search +(to make it harder for random attacks based on opinions)
  • +
  • "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 - +ActivityPub can +communicate across different types of servers, such as image +hosting, video, blogging, etc. - in theory avoiding lock-in.
  • +
  • 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.
  • +
+

We hope to see you there!

+

See also

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2022/11/14/livestreaming-courses/index.html b/branch/main/blog/2022/11/14/livestreaming-courses/index.html new file mode 100644 index 000000000..483a0c38d --- /dev/null +++ b/branch/main/blog/2022/11/14/livestreaming-courses/index.html @@ -0,0 +1,1004 @@ + + + + Livestreaming courses - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Livestreaming courses + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Livestreaming courses

+ +

+ Livestream courses have changed how we teach by allowing unprecedented scaling possibilities. +

+ + November 14, 2022 + + - Richard Darst + +

+ +
+ +

Part of a series on the Future of +Teaching

+

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.

+

Start of the livestream idea

+

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.

+

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 parallel chat ("HackMD") for +questions and +co-teaching, 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 could move on to +the next step without losing essential points like interactivity or +engagement.

+

How livestreaming works for our courses

+

Then came livestreaming. 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 Research Software +Hour.

+

The fully "proper" livestreamed course was 2021 February, our Intro +to scientific computing/HPC +Kickstart, +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.

+

How do we actually do it? Instructors teach by Zoom, but there are +no learners or helpers there. The Zoom windows are captured by OBS +(Open Broadcaster Software), 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.

+
+

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.

+
+

Evaluation

+
+

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!

+
    +
  • Feedback from Summer 2021 HPC Kickstart
  • +
+
+

In general, feedback was positive.

+

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 parallel chat +anyway. And when the audience is not in the stream, you can publish +videos immediately with no privacy risk - which is great for +accessibility.

+

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.

+

See also

+ +
+

[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.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2022/11/21/video-publishing/index.html b/branch/main/blog/2022/11/21/video-publishing/index.html new file mode 100644 index 000000000..d9596296c --- /dev/null +++ b/branch/main/blog/2022/11/21/video-publishing/index.html @@ -0,0 +1,977 @@ + + + + Video publishing supports more learning styles - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Video publishing supports more learning styles + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Video publishing supports more learning styles

+ +

+ Publishing course videos supports more learning styles and doesn't have to affect privacy. +

+ + November 08, 2022 + + - Richard Darst + +

+ +
+ +

Part of a series on the Future of +Teaching

+

What if all the talking in a course didn't disappear right after the +course was over?

+

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 hope 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.

+

This is part of why we developed livestream teaching: we want to +separate the instructor interaction from learner interaction, so that +there is no privacy risk whatsoever when recording. This only works if the +livestream is engaging enough, but our previous posts show how we +handled that problem.

+

In order for a video to be useful, it has to be published quickly. +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 extremely useful. We can't have a long publishing +process with this.

+

So, with livestreaming, what do we get?

+
    +
  • 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.
  • +
  • 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.
  • +
  • Learners can catch up immediately or refresh themselves on what they +saw going off into the future.
  • +
  • If learners know videos will be available, they +are suddenly much more free to go with the flow of the course.
  • +
+

We actually made our own tool, +ffmpeg-editlist, +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.

+

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 (stats from Python for +Scientific Computing 2022). 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.

+

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.

+

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.

+

Read more:

+ +

[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.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2022/11/28/teams/index.html b/branch/main/blog/2022/11/28/teams/index.html new file mode 100644 index 000000000..1b25d3c7a --- /dev/null +++ b/branch/main/blog/2022/11/28/teams/index.html @@ -0,0 +1,1030 @@ + + + + Learner teams in courses - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Learner teams in courses + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Learner teams in courses

+ +

+ Teams can provide high-quality interaction even in large courses. +

+ + November 28, 2022 + + - Richard Darst + +

+ +
+ +

Part of a series on the Future of +Teaching

+

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 co-teaching and +barely at the start of parallel +chat, so we were focused +on the personal experience. Our solution was learner teams.

+

How it worked

+

The basic mechanics was this:

+
    +
  • 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).
  • +
  • Some learners registered as teams (in this case, we kept them +together).
  • +
  • We would also accommodate individual learners by finding suitable +teams for them - and this did work well.
  • +
  • Each team has an exercise leader assigned to it. It might be +someone who separately volunteered, or it might be someone who is +already part of the group.
  • +
  • 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 not work as well.
  • +
  • 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.
  • +
  • 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.
  • +
+

We have a short ~1-hour training course for the exercise +leaders, +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.

+

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.

+

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.

+

Teams seemed to work best when it was actively managed. 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.

+

Evaluation

+

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.

+

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.

+

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.

+

Benefits

+

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.

+

Decrease of teams with the rise of livestreaming

+

By 2022, the roles of teams has been decreasing (though this isn't +exactly a good thing). Our developments in +co-teaching, parallel +chat, and +livestreaming 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."

+

Downside: amount of organizational work

+

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.

+

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.

+

Summary

+

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.

+

See also

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2023/02/14/march-workshop/index.html b/branch/main/blog/2023/02/14/march-workshop/index.html new file mode 100644 index 000000000..b8b169c00 --- /dev/null +++ b/branch/main/blog/2023/02/14/march-workshop/index.html @@ -0,0 +1,953 @@ + + + + CodeRefinery workshop, 21-23 and 28-30 March 2023 - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery workshop, 21-23 and 28-30 March 2023 + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

CodeRefinery workshop, 21-23 and 28-30 March 2023

+ +

+ Our March workshop is soon, and you can join alone, as a team, or as a volunteer. +

+ + February 14, 2023 + +

+ +
+ +

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 (check all +material). But what's less +known is all the new ways to take part.

+

Workshop page +and Register

+

In case you didn't know, we teach via livestream - which means anyone +can attend and we have unlimited capicity. Our teaching +style (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.

+

As an individual, 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 not binding, sign up for information and come when you can (you +won't take a seat from others). To simplify registration, you can +just sign up and you'll get contacted about Zoom/in-person +possibilities later.

+

If you have some friends, work together! 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.

+

If you've been to CodeRefinery before, why not volunteer? (For any +of these, sign up in the normal registration form and tick the +interested in being staff/observer box):

+
    +
  • Be a team leader to allow us to support more teams (register in the +normal form and indicate this interest there).
  • +
  • Be a co-instructor: thanks to our +co-teaching, 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.
  • +
  • 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.
  • +
+

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.

+

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.

+

We hope to see you there!

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2023/04/12/lessons-learned-mar-2023/index.html b/branch/main/blog/2023/04/12/lessons-learned-mar-2023/index.html new file mode 100644 index 000000000..eefca1b6a --- /dev/null +++ b/branch/main/blog/2023/04/12/lessons-learned-mar-2023/index.html @@ -0,0 +1,1054 @@ + + + + Lessons learned from the March 2023 online workshop - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Lessons learned from the March 2023 online workshop + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Lessons learned from the March 2023 online workshop

+ + + +
+ +

March 21-23 and 28-30, 2023, we held again our CodeRefinery online +workshop (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.

+

If you think you might have solutions for us or want +to discuss about the topic, please reach out to +us. This complements our +lessons learned from our first online workshop +2020, the +May 2021 +workshop, +and the Sep 2022 workshop.

+

We have identified the following main issues that we want to address for future events:

+
    +
  • Speaking more clearly, improving mic quality, and recommending participants to get familiar with Vim, Nano, etc. before the workshop starts.
  • +
  • Some attendees expressed confusion with some exercises and recommended more +repetition of basic commands and more concrete examples of solutions in +exercises.
  • +
  • Some attendees suggested improving the teaching style by doing exercises +while explaining each step, while others preferred doing the exercises +themselves for better learning.
  • +
  • Provide more support for online participants and having more, smaller repositories for exercises.
  • +
  • Some participants found certain aspects of the training confusing, such as the merging process.
  • +
  • Provide clearer instructions.
  • +
  • Some participants wanted more hands-on exercises and more information on specific topics like environments, MATLAB, and good documentation and attribution practices.
  • +
  • The participants suggested expanding the course duration or offering a series of mini workshops.
  • +
  • They also suggested covering ethics and copyright law and providing solutions to exercises directly under each question.
  • +
  • There are suggestions for improvement, including making the content more linear, explaining concepts in more detail, and providing more examples.
  • +
  • The use of Sphinx, a documentation tool, was discussed, and some participants were unsure of its value.
  • +
  • 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.
  • +
  • Some participants felt that the daily schedule could be shorter or more compact.
  • +
  • Cheat sheets or code checkpoints could be provided to help with finding information quickly.
  • +
+

Daily summaries

+

Day 1

+
    +
  • The workshop was just right in terms of pace and highly recommendable to others.
  • +
  • Participants appreciated the hands-on experience, type-along exercises, +availability of workshop material, and the responsiveness of the +collaborative document.
  • +
  • Some participants suggested speaking more clearly, improving mic quality, and +recommending participants to get familiar with Vim, Nano, etc. before the +workshop starts.
  • +
  • Overall, participants enjoyed the workshop and would like to join more like this.
  • +
+

Day 2

+
    +
  • The speed and level of the workshop were appropriate and engaging.
  • +
  • Several positive comments on the commands and examples covered, the breaks provided, and the helpfulness of the instructors.
  • +
  • Some attendees expressed confusion with some exercises and recommended more +repetition of basic commands and more concrete examples of solutions in +exercises.
  • +
  • Some attendees suggested improving the teaching style by doing exercises +while explaining each step, while others preferred doing the exercises +themselves for better learning.
  • +
  • Technical questions were asked about the official Git documentation, the use +of Overleaf, and the concept of stash, which were addressed by the +instructors.
  • +
  • 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.
  • +
+

Day 3

+
    +
  • General consensus that the pace of the training was appropriate.
  • +
  • Many participants found the hands-on work helpful.
  • +
  • Some participants encountered technical difficulties.
  • +
  • Suggestions for improvements, such as providing more support for online participants and having more, smaller repositories for exercises.
  • +
  • Some participants found certain aspects of the training confusing, such as the merging process.
  • +
  • Suggestion for instructors to provide clearer instructions.
  • +
  • Overall, a positive response to the training.
  • +
  • Many participants indicated that they learned useful skills that they can apply in their work.
  • +
+

Day 4

+
    +
  • The participants found the speed of the course to be appropriate.
  • +
  • They appreciated learning about containers, as well as Snakemake, licensing, and R examples.
  • +
  • Some participants wanted more hands-on exercises and more information on +specific topics like environments, MATLAB, and good documentation and +attribution practices.
  • +
  • The participants suggested expanding the course duration or offering a series of mini workshops.
  • +
  • They also suggested covering ethics and copyright law and providing solutions to exercises directly under each question.
  • +
  • Overall, the participants enjoyed the course and found it to be informative and useful.
  • +
+

Day 5

+
    +
  • Participants have varying opinions on the pace, level, and usefulness of the workshop.
  • +
  • Some participants found the tools introduced to be too advanced, while others found them to be a good challenge.
  • +
  • There are suggestions for improvement, including making the content more linear, explaining concepts in more detail, and providing more examples.
  • +
  • The use of Sphinx, a documentation tool, was discussed, and some participants were unsure of its value.
  • +
  • Overall, participants found the workshop to be informative and inspiring, with some planning to spend additional time reviewing the content.
  • +
+

Day 6

+
    +
  • The course was generally well-received and appreciated.
  • +
  • Many participants felt that they learned useful skills and would recommend the course to others.
  • +
  • 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.
  • +
  • Some participants felt that the daily schedule could be shorter or more compact.
  • +
  • Cheat sheets or code checkpoints could be provided to help with finding information quickly.
  • +
  • Technical concerns included difficulty with using the automatic debugging tool in GitHub.
  • +
  • There were also some questions about how to receive course credits or certificates.
  • +
+

Registration

+
    +
  • The registration process has definitely been improved, but we have identified that it could be further streamlined.
  • +
  • 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.
  • +
+

Zoom and Twitch

+
    +
  • 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.
  • +
+

Collaborative notes

+
    +
  • 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.
  • +
+

Installation and tools

+
    +
  • 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".
  • +
+

Lesson content

+
    +
  • We could shorten the lecture-part by moving exercises to the end.
  • +
  • Longer exercises would benefit in on-site rooms.
  • +
  • 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.
  • +
+

Communication with participants

+
    +
  • Add all sessions to the CodeRefinery calendar.
  • +
  • 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.
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/2023/06/25/planning-sep-workshop/index.html b/branch/main/blog/2023/06/25/planning-sep-workshop/index.html new file mode 100644 index 000000000..870318d1f --- /dev/null +++ b/branch/main/blog/2023/06/25/planning-sep-workshop/index.html @@ -0,0 +1,1147 @@ + + + + What we plan to improve for the September 2023 workshop - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - What we plan to improve for the September 2023 workshop + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

What we plan to improve for the September 2023 workshop

+ +

+ We encourage the community to give us feedback on these ideas. +

+ + June 25, 2023 + + - Radovan Bast + +

+ +
+ +

In this post we wish to share our ideas for what we want to change and improve +for the for the upcoming September 2023 +workshop. This is based on +lessons learned from the March 2023 +workshop and on two meetings we +had two weeks ago with the CodeRefinery team.

+
+

We encourage the community to give us feedback on these ideas either via +chat or via email to +support@coderefinery.org. +We are particularly curious to hear what you think about the section +"Keep two weeks or split in two or more parts?".

+
+ + + + + +

Keep two weeks or split in two or more parts?

+
    +
  • Problems with current set-up (6 half-days): +
      +
    • Second week has different software requirements and is rather different from first week (git)
    • +
    • It could use more exercises but there is currently not much time
    • +
    • It is dense
    • +
    • Not each lesson feels relevant/interesting for all
    • +
    +
  • +
  • We are considering keeping first week focused on Git over 3 days as we have +now, but to spread the second week over a longer time frame (one or two +sessions per week).
  • +
  • Advantages of splitting it off: +
      +
    • More time per lesson
    • +
    • More focused preparation
    • +
    • More time between lessons (more time to prepare for us, more time to digest and apply for learners)
    • +
    • Possibility to add hackathons/ more personalized Q&A
    • +
    • Attracting different and more interested audiences
    • +
    • The second half could become more research-software-hour-y
    • +
    • 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.
    • +
    • Collaborative document might be enough and Zoom rooms might not be needed.
    • +
    +
  • +
  • Downsides: +
      +
    • Less cohesive workshop
    • +
    • 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)
    • +
    • Credits? But can be solved by giving recommendations to local organizers (learning diary, quiz, git log)
    • +
    +
  • +
  • It could make it more difficult for: +
      +
    • Scheduling other workshops that build on top of this workshop.
    • +
    • For those who organize the streaming and video production.
    • +
    • For local organizers (we are particularly interested in their feedback about this idea).
    • +
    +
  • +
  • The first week part could also be extended with a hackathon (3 half-days +teaching, followed by a session e.g. one week later).
  • +
  • Advertise sessions with a more descriptive title (not "Jupyter", but "How to +prototype in Python" or something like that).
  • +
  • Concrete suggestion: 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)
  • +
  • UPDATE: 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.
  • +
+

Creating a more motivating environment for volunteers

+
    +
  • Improve focus so that we can improve the quality and avoid that most time +dissolves in coordinating efforts that could be more focused.
  • +
  • Having few days of focused time for preparation. Otherwise with 25% or less +in-kind involvement, other day-to-day tasks take over.
  • +
  • Organize an online writing/preparation retreat (with buddy-system, +meeting times booked early).
  • +
  • Keep half-day format.
  • +
  • Clear session structure and clear commitment (put names behind lessons as +early as possible).
  • +
  • Knowing who from organizers to contact with questions.
  • +
+

Improve the experience for helpers/ exercise leads

+
    +
  • 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.
  • +
  • This time we will try with a central exercise room (see next section) and try +to engage them again.
  • +
+

Workshop format: keep the stream format but also provide a central but self-organized exercise room

+
    +
  • Continue offering the hybrid format: people joining from class rooms.
  • +
  • Again offer centrally managed exercise rooms for learners without own teams. +Even if this means "binding" one person to manage that space.
  • +
  • However, we need an easily organizable way.
  • +
  • Previously it was tricky to manage central exercise rooms: +
      +
    • Rooms became imbalanced (no-shows, empty / overfull rooms) and some exercise leads had then nothing to do.
    • +
    • Pre-allocating persons to rooms has previously failed: Some learners selected the "wrong" option or did not show up.
    • +
    • People were confused about the model.
    • +
    +
  • +
  • What we will try this time: +
      +
    • Self-organized central zoom with free-floating helpers ("expert helpers").
    • +
    • We communicate clearly expectations: that we don't really know who shows up.
    • +
    • Also communicate meaning of rooms (topical rooms) .
    • +
    • Split on-boarding into 2: in-person helpers and Zoom helpers need different info.
    • +
    • No exercise below 15 mins, otherwise no time to have discussions with helpers.
    • +
    • 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.
    • +
    +
  • +
+

Lesson development without last-minute stress

+
    +
  • Organize a 2-day online writing retreat and also a one-week in-person writing +retreat later this year.
  • +
+

Instructor on-boarding

+
    +
  • In past editions the instructor coordinator has met with all instructor pairs +and went with them through the checklist. We will keep this.
  • +
  • Tech-setup could be done all together.
  • +
  • Invite past instructors who have taught the lesson in question earlier to +those meetings to provide background and their experiences.
  • +
  • Check questions and feedback from last time.
  • +
  • Switch instructors less often? Maybe always have one person who has done the lesson before.
  • +
  • Plan for an instructor training workshop after the autumn workshop and offer +it also at conferences.
  • +
+

What organizational changes are most important?

+

What would simplify coordination and planning for all involved?

+
    +
  • Current playbook: https://coderefinery.github.io/manuals/workshop-playbook/
  • +
  • Early role decisions (commitment).
  • +
  • All roles using the checklist (it is good to know what is going on in all roles).
  • +
+

Most important lesson/course changes

+
    +
  • We need to re-think exercises for the second week to make them more +interesting. Learners sometimes don't get the point of them.
  • +
+

Simpler registration form

+
    +
  • 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.
  • +
  • Remove the "might" questions. Rather clarify participation options and give +participants the flexibility to decide.
  • +
  • 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.
  • +
  • Link to partner local rooms in registration form, as a possibility for learners.
  • +
  • Add an option about central zoom room.
  • +
  • Record and add short video explaining the options.
  • +
  • Instead of separate observer registration encourage observers to register the same way learners do.
  • +
  • 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.
  • +
  • For on-boarding we need to know if somebody is interested in being a team-lead/helper: +
      +
    • Ask whether local or central exercise room.
    • +
    • Make it clearer that they can change registration.
    • +
    • Communicate why we ask for this info.
    • +
    +
  • +
  • Learners do not need to be asked whether alone/zoom/local.
  • +
  • Do not try a two-step registration process.
  • +
+

The form options will be simplified to:

+
    +
  • +learner or observer
  • +
  • +helper at central exercise room
  • +
  • +helper at local group
  • +
  • +organizer of local group
  • +
  • +instructor (I would like to teach a lesson)
  • +
  • free text to share additional information with organizers
  • +
  • consider asking which sessions the participant is interested in attending
  • +
  • contact email for questions
  • +
+

We plan to open registration before end of June 2023.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/blog/TEMPLATE.md.template b/branch/main/blog/TEMPLATE.md.template new file mode 100644 index 000000000..10c687902 --- /dev/null +++ b/branch/main/blog/TEMPLATE.md.template @@ -0,0 +1,18 @@ ++++ +title = 'TITLE' +slug = "20ZZ/XX/YY/name" +description = "1-2 sentence description for social media previews" + +[extra] +authors = "NAME, NAME, NAME" ++++ + +Concise introduction. + +Body here. + +More body. + + +See also +* Optional but nice diff --git a/branch/main/blog/image_01.png b/branch/main/blog/image_01.png new file mode 100644 index 000000000..4108dccbb Binary files /dev/null and b/branch/main/blog/image_01.png differ diff --git a/branch/main/blog/image_02.png b/branch/main/blog/image_02.png new file mode 100644 index 000000000..fc9242958 Binary files /dev/null and b/branch/main/blog/image_02.png differ diff --git a/branch/main/blog/image_03.png b/branch/main/blog/image_03.png new file mode 100644 index 000000000..0b8621a10 Binary files /dev/null and b/branch/main/blog/image_03.png differ diff --git a/branch/main/blog/image_04.png b/branch/main/blog/image_04.png new file mode 100644 index 000000000..fe25162fd Binary files /dev/null and b/branch/main/blog/image_04.png differ diff --git a/branch/main/blog/image_05.png b/branch/main/blog/image_05.png new file mode 100644 index 000000000..8ec04ce65 Binary files /dev/null and b/branch/main/blog/image_05.png differ diff --git a/branch/main/blog/image_06.png b/branch/main/blog/image_06.png new file mode 100644 index 000000000..892d0bc92 Binary files /dev/null and b/branch/main/blog/image_06.png differ diff --git a/branch/main/blog/image_07.png b/branch/main/blog/image_07.png new file mode 100644 index 000000000..628c27906 Binary files /dev/null and b/branch/main/blog/image_07.png differ diff --git a/branch/main/blog/image_08.png b/branch/main/blog/image_08.png new file mode 100644 index 000000000..68607afaf Binary files /dev/null and b/branch/main/blog/image_08.png differ diff --git a/branch/main/blog/index.html b/branch/main/blog/index.html new file mode 100644 index 000000000..d0a52c11c --- /dev/null +++ b/branch/main/blog/index.html @@ -0,0 +1,1204 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +

Blog posts

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/calendars/index.html b/branch/main/calendars/index.html new file mode 100644 index 000000000..c10fb42a2 --- /dev/null +++ b/branch/main/calendars/index.html @@ -0,0 +1,899 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + + +
+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/img/favicon.ico b/branch/main/img/favicon.ico new file mode 100644 index 000000000..a2df0fb66 Binary files /dev/null and b/branch/main/img/favicon.ico differ diff --git a/branch/main/index.html b/branch/main/index.html new file mode 100644 index 000000000..6bcf22adb --- /dev/null +++ b/branch/main/index.html @@ -0,0 +1,1316 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+
+ + CodeRefinery logo + +
+
+ +

Training and e-Infrastructure for Research Software Development

+

We teach all the essential tools which are usually skipped in academic +education so everyone can make full use of software, computing, and +data. We don't just give courses, but we are a training network that you +can join to share the effort and bring better courses to your +community.

+

Our standard workshop is well known in Nordic +academic circles and our engaging online teaching +style is considered best-in-class even +compared to in-person teaching. CodeRefinery aims to operate as a +community project with support from academic organizations.

+

View our vision of the future of +teaching (or read +it).

+ +
+
+ + +
+

News

+
    +
  • Our September workshop just finished. We will soon share our lessons learned and the plan forward.
  • +
  • We are thinking 12-14 and 19-21 March, 2024, for our next workshop. +But the format may be changed and dates adjusted to fit the new +format.
  • +
  • Our last workshop was Tue-Thu, September 19-21 and 26-28 (6 +half-days, +online) - you +can continue to browsed and self-studied.
  • +
+ +
+ + +
+

CodeRefinery provides

+
    +
  • For organizations: an opportunity to pool competence +and offer more training and development opportunities than +they could individually. A place to share best teaching practices +and other skills.
  • +
  • For volunteers and the team: a community around teaching +and opportunity for skill development, both in pedagogy and +practical skills.
  • +
  • For learners: a welcoming and useful environment for +learning many necessary practical skills that may otherwise +not be explicitly taught. This can be through courses, +hackathons, and the like.
  • +
+ +
+ +
+
+

Newsletter

+ +

+ This is a low traffic newsletter about our events and updates: One email every 1 or 2 months + (archives). +

+ +
+ +
+
+ +
+
+ +
+
+ +
+ +
+ +
+

Become part of the team

+ +

+ Come and join our team. Let us create something amazing together! + + Let us create something amazing together! +

+ +
+ Tasks/roadmap + Join as individual + As staff + As organization +
+ +
+
+ +
+
+

Feedback and testimonials

+ +
+
    + + +

    I'm more conscious about the way I write programs and organize their 'organic' +growth. I try to modularize more and write proper tests. I also use git more +extensive to keep track about my different development branches +

    + +

    The main thing I got out of the workshop is that I'm now extensively using the +issue-tracking systems on GitHub and GitLab. Also on one of my major projects +we have moved towards having shorter lived feature branches and using merge +requests for more frequent merges and less code divergence. I also started +using GitLab's issues system more frequently. It made it easier for people in +my lab to report bugs, and easier for me to keep track of them +

    + +

    My code became much more 'sustainable' in the sense for others to +read/use/modify it. In detail the most significant is improved use of git +(forking workflow) and more strict 'purity' of functions. Use of PyCharm +increased speed of development +

    + +

    I take more time to think about long term solutions than 'quick fixes' even if +it's short of time. Another aspect is that I try to make the code reproducible +in the sense of documentation, code readability, clear log files, etc, both for +helping myself and my collaborators +

    + +

    My code is better documented, and I use version control much more. I have also +started writing more unit tests +

    + +

    I write my codes now in such a way that the person who will be taking over my +job would have less time figuring out what is going on. The emphasis of writing +modular codes in the workshop was very helpful for me and for the people using +my code +

    + +

    For me the most important thing was to learn to use git better. Now I make +frequent commented commits so it is far easier to see what I actually did for +me and others too +

    + +

    This was an extremely useful workshop. Thank you very much! I wish I had known +this stuff already as a grad student 10+ years ago. It is now easier to +collaborate with co-developers and easier to keep things in order and +structured +

    + +

    Constantly making sure my code is as accessible as possible to ensure future me +and others can understand and use it, i.e. writing explanatory comments +everywhere no matter how simple the code may be. +

    + +

    Increased confidence. Sense of community (extremely valuable during the +pandemic times). The value of volunteering. +

    + +

    I'm significantly more confident in navigating and creating versions and +branches in git and on GitHub. +

    + +

    It was a great experience, it just did sum up all the necessary tools and step +to build more sustainable code. That saved me A LOT of time trying to figuring +out everything by myself!! :) +

    + +

    I am an experienced developer and instructor and attended the workshop mainly +to help out. It did not change much for me in terms of the course content. +However, the course was am absolutely great experience for me in terms of +seeing how to conduct a massive online course with live participation. The +HackMD "backchannel" and breakout rooms with helpers are features I now +incorporate in teaching at my own university. +

    + +

    Think much more before starting a coding project and overall better structure: +coding with a structure in mind (making modules, simplifying), using a +structured approach to coding (knowing which tools, which steps, doing reviews, +etc.), etc. +

    + +

    I have a much broader understanding of these tools and why they are important. +I regularly use the tutorials and movies to help teach new incoming students in +between CodeRefinery workshops. +

    + +

    The project team has a common understanding of why and how to track code +versions and collaborate on processing scripts +

    + +

    More focus on that results and papers should be reproducible, ideally even for +referees. +

    + +
+
+ +

+ More feedback and testimonials can be found in + this GitHub repository. +

+ +
+
+ +
+
+

Latest blog posts

+ + + + +

+ All our blog posts are summarized in the + blog post overview page. +

+ +
+ +
+

Mastodon

+ +

+ We are at @coderefinery@fosstodon.org + (joining hints). + On Twitter, we are @coderefine (without the -ry). +

+ + + +
+
+ +
+
+
+ + + picture of a classroom + +

Training opportunities

+

+ We offer training opportunities to researchers from Nordic + research groups (but we aim to expand beyond Nordics) to learn + basic-to-advanced research computing skills and become confident + in using state-of-the-art tools and practices from modern + collaborative software engineering. +

+ More ›

+
+
+ +
+
+ + + wordcloud + +

Lesson materials

+

+ We develop and maintain training material on software best + practices for researchers that already write code. Our material + addresses all academic disciplines and tries to be as programming + language-independent as possible. +

+ More ›

+
+
+ +
+
+ + + terminal screen output + +

Code Repository Hosting

+

+ Our code repository hosting service is open and free for all + researchers based in Nordic universities and research institutes + and their collaborators. +

+ More ›

+
+
+ +
+
+ + ResearchSoftwareHour logo + +

Research Software Hour

+

+ Online stream/show about scientific computing and research + software. It is designed to provide the skills typically picked up + via informal networks: we explore and discuss tools and how we + program and compute. +

+ More ›

+
+
+
+ + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/index/description/index.html b/branch/main/index/description/index.html new file mode 100644 index 000000000..4a90d0e77 --- /dev/null +++ b/branch/main/index/description/index.html @@ -0,0 +1,901 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + +

Training and e-Infrastructure for Research Software Development

+

We teach all the essential tools which are usually skipped in academic +education so everyone can make full use of software, computing, and +data. We don't just give courses, but we are a training network that you +can join to share the effort and bring better courses to your +community.

+

Our standard workshop is well known in Nordic +academic circles and our engaging online teaching +style is considered best-in-class even +compared to in-person teaching. CodeRefinery aims to operate as a +community project with support from academic organizations.

+

View our vision of the future of +teaching (or read +it).

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/index/index.html b/branch/main/index/index.html new file mode 100644 index 000000000..da97e47a7 --- /dev/null +++ b/branch/main/index/index.html @@ -0,0 +1,885 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/index/news/index.html b/branch/main/index/news/index.html new file mode 100644 index 000000000..f0aecd375 --- /dev/null +++ b/branch/main/index/news/index.html @@ -0,0 +1,898 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + +

News

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/index/provides/index.html b/branch/main/index/provides/index.html new file mode 100644 index 000000000..71539af4c --- /dev/null +++ b/branch/main/index/provides/index.html @@ -0,0 +1,901 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + +

CodeRefinery provides

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/join/chat/index.html b/branch/main/join/chat/index.html new file mode 100644 index 000000000..1c33db293 --- /dev/null +++ b/branch/main/join/chat/index.html @@ -0,0 +1,904 @@ + + + + Chat with us - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Chat with us + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Chat with us

+ + + +

We use Zulip to discuss within our team and community.

+

You don't need an invite to join our Zulip +chat - simply sign up and join.

+

This is the place where we discuss lesson development, plan events, share +lessons learned and new tools and tricks, and where we ask and answer questions +about computing and programming. No question is too simple. Drop by and ask and +talk with us! You can listen in, follow certain threads, participate, and +influence. Learn how CodeRefinery uses +it.

+

We are supported by Zulip

+Zulip logo +

Zulip is an open-source modern team chat app designed to keep both live and +asynchronous conversations organized. We very much appreciate their support by +hosting our chat for free.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/join/community-teaching-training/index.html b/branch/main/join/community-teaching-training/index.html new file mode 100644 index 000000000..6cb2b1021 --- /dev/null +++ b/branch/main/join/community-teaching-training/index.html @@ -0,0 +1,928 @@ + + + + Community teaching training - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Community teaching training + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Community teaching training

+ + + +

Want to learn about the CodeRefinery teaching +style? Want to be able to run your own +workshop as a livestream and invite others to attend. Want to join +forces to make teaching more open, accessible, and available? Attend +our community teaching training.

+

Our community teaching training recognizes that in the connected +era, teaching doesn't have to be a solitary or small team affair. +CodeRefinery's workshops are done as a broad team with many diverse +roles, and this allows us to reach a huge number of people.

+ +

Courses are offered as we need to (contact us if you want one), +usually around once a year - but really, right now we onboard most +people to our style by working together.

+

"Community teaching training" is much more broad and doesn't duplicate +the Carpentries instructor +training - attending both +is useful.

+

See also

+

The material can be found at Community teaching +training.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/join/index.html b/branch/main/join/index.html new file mode 100644 index 000000000..7c84d1b35 --- /dev/null +++ b/branch/main/join/index.html @@ -0,0 +1,959 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Why and how to join

+ + +
+ +
+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/join/individuals/index.html b/branch/main/join/individuals/index.html new file mode 100644 index 000000000..74b89dc0a --- /dev/null +++ b/branch/main/join/individuals/index.html @@ -0,0 +1,950 @@ + + + + For individuals - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - For individuals + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

For individuals

+ + + +

As individuals, there are plenty of ways to join CodeRefinery, regardless of +what you do now. Also see what professional staff +supporting a local community and organizations can +do.

+

For any of these, you can get started by joining a +meeting and say hi, or join our +chat and introduce yourself in +the "#new members" stream. Or contact anyone you know for a recommendation on +how to get involved - we aren't that formal yet. If you've been sent this page +as a "help out at this workshop", that will tell you who to contact.

+
+
+

As a learner

+

Anyone may attend our workshops, and this is a great way to get started. If +you want to do more than just attend, join our chat and give feedback during +the workshop.

+

As a team leader

+

Even during your first workshop, you could register as an exercise leader and +help a team of others. This is actually not that hard, and you aren't expected +to know everything, instead you focus on keeping a good flow and welcoming +environment. There are other expert helpers to help you. If you are +comfortable enough with the pre-requisites, aren't too scared by error +messages, and can call for help when you need it, then you can do it! We have +some basic on-boarding +training for you!

+

Maybe you want to bring all the rest of your research group as your team?

+

As a co-instructor or expert helper

+

We don't teach alone, and thus it's remarkably easy to get started as an +instructor! In fact, we almost recommend it as a starting point, since it's +good to have a co-instructor who understands the difficulty of doing and +learning the topics. Joining as co-instructor means that you will be in touch +with other instructors. It is great learning and a necessary step to call +yourself "CodeRefinery instructor".

+

If teaching isn't for you, you can help by supporting learners and team leaders +during a workshop. If you like reading about how we work, see the roles +overview for all the +varying responsibilities in a workshop (surely there is something for you +there).

+
+
+

Lesson contributions

+

We would love to see more contributions to our lessons. We are a normal open +source project on GitHub, and you can contribute via issues, pull requests, or +by discussing in our chat. You are +welcome to reuse our lessons as well.

+

A good starting point is to either open a topic on our +chat or to open an issue on one of the +lesson repositories in our GitHub +organization where you can describe what you +would like to change to collect feedback and possibly also contributors.

+

No contribution is too small and ideas for changes are very often very good +ideas and we would love to work with you on making our lessons better and more +modular and even more relevant.

+

Help out the CodeRefinery project itself

+

As an open project, there are always things to do to keep us running! We're +especially interested in people who know how to grow a community, do better +communications, or manage many events better than we do now. On this +page we list the many tasks where you can join and contribute.

+
+
+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/join/meetings/index.html b/branch/main/join/meetings/index.html new file mode 100644 index 000000000..268974822 --- /dev/null +++ b/branch/main/join/meetings/index.html @@ -0,0 +1,937 @@ + + + + CodeRefinery meetings - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery meetings + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

CodeRefinery meetings

+ + + +

Team & Community meetings

+

Every Monday at 14 CET/CEST.

+

We welcome everyone interested in CodeRefinery to join our weekly meetings. +This is the place to drop by if you have questions or would like to get +involved but don't know where to start.

+ +

Scope

+ +

Archive of past community calls

+ +

Archive of past staff meetings

+

These were meetings about administrative tasks such as generation of reports +and deliverables, involving paid staff. In Autumn 2021, with the end of phase +2 of the project, we dropped the distinction between "staff" and "non-staff" +and dropped the separation between staff meetings and community calls and +started to focus on community calls.

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/join/organizations/index.html b/branch/main/join/organizations/index.html new file mode 100644 index 000000000..e3574e233 --- /dev/null +++ b/branch/main/join/organizations/index.html @@ -0,0 +1,935 @@ + + + + For organizations - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - For organizations + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

For organizations

+ + + +

CodeRefinery is a collaboration between different organizations (most +are universities or research computing infrastructure providers), and +your organization can join!

+
+
+

Provide CodeRefinery workshops to your community

+

Joining as an organization isn't that different than what is +described on the staff page, but you can do so even +more systematically and take part in decision-making about what +workshops we offer and when.

+

Do your own teaching better

+

Do you need to teach and reach a broader audience? Do you put on your own +workshops? Join CodeRefinery, learn our teaching +strategies, and let's +improve our events together. Plenty of technical staff (who aren't primarily +teachers) need to teach as part of their jobs, and this is the kind of +community that CodeRefinery provides.

+

Open up your workshops to the CodeRefinery community

+

You might offer some of your own workshops to be live-streamed to a +wide audience, and we can help you to develop the workshop and do the +streaming - including finding many expert co-instructors to help with +the writing and teaching. This exchange of teaching also leads to +lots of other technical skill exchange, which is excellent for your +staff skills as well.

+
+
+

Joining CodeRefinery as a partner/sponsor

+

In the future, there will be some way to officially join CodeRefinery +as a sponsor, but that will come when it's time. For now, if +you express interest, you can join almost immediately and help figure +out the way we will work later. Currently, you could consider +yourself a partner if (criteria are subject to change):

+
    +
  • You have at least one staff member who has a significant interest in +teaching intermediate-level practical skills in scientific computing.
  • +
  • You have some staff who follows and is interested in contributing to +CodeRefinery meetings + activities.
  • +
  • You help out with CodeRefinery workshops in +proportion to your resources, possibly offering some of yours to a +wider audience.
  • +
  • You open a pull request adding yourself to the partners +page.
  • +
+
+
+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/join/staff/index.html b/branch/main/join/staff/index.html new file mode 100644 index 000000000..716c5d18f --- /dev/null +++ b/branch/main/join/staff/index.html @@ -0,0 +1,921 @@ + + + + For staff - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - For staff + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

For staff

+ + + +

If you work at an organization that supports computational research, +join us! Don't forget you can do everything on the for +individuals page as part of your job, and +your whole organization could join.

+
+
+

Run your own breakout rooms and/or provide local support

+

Go one step beyond simple advertising: organize your local community, organize +people into teams (if desired), set up in-person on online spaces to watch the +course and do the exercises together.

+

We can support you however possible, for example more chat support, training +team leaders, and you can join our planning meetings. Read more about local +advertisement and breakout +rooms.

+

For any of these, you can get started by join a meeting +and say hi, or join our chat +and introduce yourself in the "#new members" stream. Or contact anyone you +know for a recommendation on how to get involved - we aren't that formal yet.

+
+
+ +

Letting your local audience know about our events is a simple way to +provide a high-impact training opportunity to your community with +little work on your side. Many of our workshops are online and +live-streamed, so anyone can attend.

+

Request in-person workshops

+

This is currently somewhat on hiatus, since our online workshops work +so well, but you could request your +own workshop.

+
+
+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/join/zulip-icon-circle.svg b/branch/main/join/zulip-icon-circle.svg new file mode 100644 index 000000000..72466de7f --- /dev/null +++ b/branch/main/join/zulip-icon-circle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/branch/main/lessons/contributing/index.html b/branch/main/lessons/contributing/index.html new file mode 100644 index 000000000..cce05baa9 --- /dev/null +++ b/branch/main/lessons/contributing/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/branch/main/lessons/core/index.html b/branch/main/lessons/core/index.html new file mode 100644 index 000000000..52292d995 --- /dev/null +++ b/branch/main/lessons/core/index.html @@ -0,0 +1,968 @@ + + + + Core CodeRefinery lessons - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Core CodeRefinery lessons + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Core CodeRefinery lessons

+ + + +

These are the lessons which are included in the "standard" CodeRefinery +workshop, and what we believe that every computational scientist (even those +with very small amounts of computation) should know. But there is more: Also +see all of our online lessons.

+ +

Self-study workshop

+

Want to study this material yourself? No problem! The CodeRefinery +teaching style tries to make this accessible to you. All the +lessons above are designed to be self-sufficient for self-study. We +also have video recordings and archived "parallel chat Q&A" (which can +go into other both basic and advanced questions) which may +optionally be useful for other teaching styles.

+

The following are the video recordings + parallel chat of the 2022 +September workshop:

+ +

For self-study purposes, you may need the installation +instructions. Note +that you may want to see what is necessary for each lesson, before +going and installing everything there.

+

Support in self-study is very important. There are several +options:

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/lessons/from-coderefinery/index.html b/branch/main/lessons/from-coderefinery/index.html new file mode 100644 index 000000000..e6bfa6ff5 --- /dev/null +++ b/branch/main/lessons/from-coderefinery/index.html @@ -0,0 +1,1014 @@ + + + + All CodeRefinery lessons - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - All CodeRefinery lessons + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

All CodeRefinery lessons

+ + + +

This is not a strict division, but lessons can be classified as to what is +initially useful to yourself, to your group, and to the whole community. +Lessons marked with (*) are core lessons and part of a +regular 6 half-day workshop.

+

For yourself and larger

+ +

For your group and larger

+ +

For the community

+ +

Instructor training and manuals

+ +

Special topics

+ +

Video recordings

+

A number of video recordings of CodeRefinery lessons and workshops and +Research Software Hour sessions can be +found on our YouTube +channel.

+

Installation guides

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/lessons/index.html b/branch/main/lessons/index.html new file mode 100644 index 000000000..9b987c59a --- /dev/null +++ b/branch/main/lessons/index.html @@ -0,0 +1,933 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

CodeRefinery lessons

+ + +
+ +
+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/lessons/other/index.html b/branch/main/lessons/other/index.html new file mode 100644 index 000000000..f8611474f --- /dev/null +++ b/branch/main/lessons/other/index.html @@ -0,0 +1,1003 @@ + + + + Other lessons - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Other lessons + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Other lessons

+ + + +

Other lessons by our partners

+

You can expect these to be open-source, reusable, in a git repository, and with +a community you can join and give contributions to:

+ +

Lessons we contributed to as instructors or helpers

+ +

Other lessons we recommend

+ +

Interesting organisations and projects to follow

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/lessons/reusing/index.html b/branch/main/lessons/reusing/index.html new file mode 100644 index 000000000..7c382aec8 --- /dev/null +++ b/branch/main/lessons/reusing/index.html @@ -0,0 +1,930 @@ + + + + Reusing/teaching our lessons - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Reusing/teaching our lessons + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Reusing/teaching our lessons

+ + + +

All of our material is open source and reuse is encouraged. In +general, we only recommend similarly open-source, reusable lessons. +Check the license from each repository in case of questions (most +CodeRefinery-developed lessons use CC BY +4.0).

+

Teaching these lessons independently is encouraged, just make sure the +distinction between the "CodeRefinery" project and your workshop is +clear. For example, give your own name to the workshop but say +"(CodeRefinery lessons)".

+

Our lessons are designed to be generic, (mostly) stand-alone, and +re-used in place without forking so that anyone can use them and +they can fit into different types of programs. We welcome +contributions which make the lessons more reusable - send changes +using standard open-source practices (you know, what we teach in +CodeRefinery and all).

+

Please let us know if the material is helpful - it is important for us to +know whether this material has impact outside of our workshops. Some +courses/workshops we know of are listed below but we would like to list more.

+

Derivative work based on our material

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/open-house/blog-posts/index.html b/branch/main/open-house/blog-posts/index.html new file mode 100644 index 000000000..0c24415b1 --- /dev/null +++ b/branch/main/open-house/blog-posts/index.html @@ -0,0 +1,919 @@ + + + + Work on blog posts - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Work on blog posts + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + April 24, 2020 + +
+ + coderefinery open house logo + +
+

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.

+

Tentative list of articles:

+
    +
  • Online lessons, what we're working on, how we'll be delivering online workshops
  • +
  • Merge vs rebase
  • +
  • Nordic-RSE conference
  • +
  • NordicHPC tools
  • +
+

Anyone who would like to contribute to these articles or suggests new +topics is welcome to join!

+

We will collect notes in a shared +document. +Please note that this document will be archived in our Open House +event repository.

+

We first meet online at 9:00 am (UTC+1) via video (connection link +will be shared in our shared +document and then work on +the instructor training material. During the day, we will coordinate +the work through our Zulip chat +with possibilities to further discuss via video if necessary.

+

We conclude the day around 4:00 pm (UTC+1) by writing a short +/summary in our shared +document.

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/open-house/coderefinery_openhouse.jpg b/branch/main/open-house/coderefinery_openhouse.jpg new file mode 100644 index 000000000..ad5d89dee Binary files /dev/null and b/branch/main/open-house/coderefinery_openhouse.jpg differ diff --git a/branch/main/open-house/coderefinery_openhouse.png b/branch/main/open-house/coderefinery_openhouse.png new file mode 100644 index 000000000..9c830b2e8 Binary files /dev/null and b/branch/main/open-house/coderefinery_openhouse.png differ diff --git a/branch/main/open-house/credit/index.html b/branch/main/open-house/credit/index.html new file mode 100644 index 000000000..f931a2569 --- /dev/null +++ b/branch/main/open-house/credit/index.html @@ -0,0 +1,907 @@ + + + + Making lessons citable and giving credits for contributors - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Making lessons citable and giving credits for contributors + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + October 02, 2020 + +
+ + coderefinery open house logo + +
+

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.

+

Anyone interested is welcome to contribute to discussion on how to realize these in practice!

+

We will collect notes in a shared +document. +Please note that this document will be archived in our Open House +event repository.

+

We first meet online at 9:00 am (CEST) / 10:00 am (EEST) via video (connection link +will be shared in our shared document. +If we decide on working individually during the day, we will coordinate +the work through our Zulip chat +with possibilities to further discuss via video if necessary.

+

We conclude the day around 12:00 pm (UTC+1).

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/open-house/index.html b/branch/main/open-house/index.html new file mode 100644 index 000000000..d79870ce0 --- /dev/null +++ b/branch/main/open-house/index.html @@ -0,0 +1,940 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/open-house/instructor-training-material/index.html b/branch/main/open-house/instructor-training-material/index.html new file mode 100644 index 000000000..c6b436823 --- /dev/null +++ b/branch/main/open-house/instructor-training-material/index.html @@ -0,0 +1,920 @@ + + + + Work on instructor training material - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Work on instructor training material + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + March 24, 2020 + +
+ + coderefinery open house logo + +
+

CodeRefinery is organizing a one day online "open house" dedicated to +work together on revising and +improving our instructor training +material. +Issues are filed +here, +notes from the first workshop can be in the shared +document, and we +are taking what each of us wants to work on. Input for the further +improvement are also very welcome.

+

Anyone who would like to contribute to the instructor training +material, or learn how to contribute to any CodeRefinery lesson in +general, is welcome!

+

We will collect nodes in a shared +document. +Please note that this document will be archived in our Open House +event repository.

+

We first meet online at 9:00 am (UTC+1) via video (connection link +will be shared in our shared +document and +then work on the instructor training material. During the day, we will +coordinate the work through our Zulip +chat with possibilities to +further discuss via video if necessary.

+

We conclude the day around 4:00 pm (UTC+1) by writing a short +blog/summary in our shared +document.

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/open-house/newsletter/index.html b/branch/main/open-house/newsletter/index.html new file mode 100644 index 000000000..554f349d5 --- /dev/null +++ b/branch/main/open-house/newsletter/index.html @@ -0,0 +1,920 @@ + + + + Writing newsletter articles and blog posts - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Writing newsletter articles and blog posts + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + August 24, 2020 + +
+ + coderefinery open house logo + +
+

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.

+

Tentative list of articles:

+
    +
  • Future mega-CR
  • +
  • Update on citable lessons and credit/visibility for instructor and helpers
  • +
  • Update on sustainability efforts?
  • +
  • Manuals : how they can be used for your lessons
  • +
  • git-pr
  • +
+

Anyone who would like to contribute to these articles or suggests new +topics is welcome to join!

+

We will collect notes in a shared +document. +Please note that this document will be archived in our Open House +event repository.

+

We first meet online at 9:00 am (CEST) / 10:00 am (EEST) via video (connection link +will be shared in our shared +document and then work on +the instructor training material. During the day, we will coordinate +the work through our Zulip chat +with possibilities to further discuss via video if necessary.

+

We conclude the day around 4:00 pm (UTC+1) by writing a short +/summary in our shared +document.

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/open-house/online-teaching/index.html b/branch/main/open-house/online-teaching/index.html new file mode 100644 index 000000000..53edc1e86 --- /dev/null +++ b/branch/main/open-house/online-teaching/index.html @@ -0,0 +1,900 @@ + + + + Preparing for online teaching - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Preparing for online teaching + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + March 20, 2020 + +
+ + coderefinery open house logo + +
+

We will meet on video (9:00 am, UTC+1) +and chat and discuss techniques, +solutions, and tricks for online teaching and collect our notes in a shared +document.

+

Anyone who would like to contribute or learn is most welcome!

+

We will conclude the day around 4:00 pm (UTC+1) by writing a short blog/summary +in our shared document.

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/open-house/training-material/index.html b/branch/main/open-house/training-material/index.html new file mode 100644 index 000000000..8b7fec8da --- /dev/null +++ b/branch/main/open-house/training-material/index.html @@ -0,0 +1,909 @@ + + + + Collaborative work on the training material - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Collaborative work on the training material + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + December 13, 2019 + +
+ + coderefinery open house logo + +
+

Welcome to the first CodeRefinery Open House!

+

The idea behind this event is to bring together people who are interesting in +contributing to the CodeRefinery training +material.

+

Anyone who would like to contribute, learn how to contribute to the +CodeRefinery training material is very welcome to join.

+

We will collect nodes in a shared document. +Please note that this document will be archived in our +Open House event repository.

+

We first meet online at 9:00 am (UTC+1) via video (connection link will be +shared in our shared document) and +then work on CodeRefinery training material. During the day, we will coordinate +the work through our Zulip chat with +possibilities to further discuss via video if necessary.

+

We conclude the day around 4:00pm (UTC+1) by writing a short blog/summary in +our shared document.

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/open-house/website/index.html b/branch/main/open-house/website/index.html new file mode 100644 index 000000000..01805d6d2 --- /dev/null +++ b/branch/main/open-house/website/index.html @@ -0,0 +1,913 @@ + + + + Collaborative work on the website - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Collaborative work on the website + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + February 11, 2020 + +
+ + coderefinery open house logo + +
+

Welcome to the second CodeRefinery Open House!

+

Following up on our successful first CodeRefinery Open House, we will have our +second online Open house!

+

The idea behind this event is to work together on revising and improving +coderefinery.org. Issues are +filed and we are +taking what each of us wants to work on. Input for the further improvement are +very welcome!

+

Anyone who would like to contribute, or learn how to contribute to +coderefinery.org is very welcome to join.

+

We will collect nodes in a shared document. +Please note that this document will be archived in our +Open House event repository.

+

We first meet online at 9:00 am (UTC+1) via video (connection link will be +shared in our shared document) and +then work on CodeRefinery training material. During the day, we will coordinate +the work through our Zulip chat with +possibilities to further discuss via video if necessary.

+

We conclude the day around 4:00pm (UTC+1) by writing a short blog/summary in +our shared document.

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/organization/contact/index.html b/branch/main/organization/contact/index.html new file mode 100644 index 000000000..1a41594a8 --- /dev/null +++ b/branch/main/organization/contact/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/branch/main/organization/contributors/index.html b/branch/main/organization/contributors/index.html new file mode 100644 index 000000000..78a6e9f86 --- /dev/null +++ b/branch/main/organization/contributors/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/branch/main/organization/get-involved/index.html b/branch/main/organization/get-involved/index.html new file mode 100644 index 000000000..cce05baa9 --- /dev/null +++ b/branch/main/organization/get-involved/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/branch/main/organization/how-to-help/index.html b/branch/main/organization/how-to-help/index.html new file mode 100644 index 000000000..cce05baa9 --- /dev/null +++ b/branch/main/organization/how-to-help/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/branch/main/organization/meetings/index.html b/branch/main/organization/meetings/index.html new file mode 100644 index 000000000..c0a6afe8f --- /dev/null +++ b/branch/main/organization/meetings/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/branch/main/organization/partners/index.html b/branch/main/organization/partners/index.html new file mode 100644 index 000000000..8f13fea77 --- /dev/null +++ b/branch/main/organization/partners/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/branch/main/privacy-policy/index.html b/branch/main/privacy-policy/index.html new file mode 100644 index 000000000..f536e5515 --- /dev/null +++ b/branch/main/privacy-policy/index.html @@ -0,0 +1,1075 @@ + + + + CodeRefinery privacy policy - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery privacy policy + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

CodeRefinery privacy policy

+ + + +

Update, 13th March 2023

+

We may use anonymous web analytics on our webpages and lessons. This +is not identifiable, does not have client-side identifiers, and can't +re-identify people between visits (or even for single visits) any more +than normal web browsing can. Because this is (by design) not +identifiable, this should not need to be mentioned here, but we are +for completeness. (The technical implementation is +plausible.io, self-hosted by a CodeRefinery +partner).

+

Update, 12th October 2021

+

In short:

+ +

On the 1st October 2021, it was announced that CodeRefinery will receive +partial financial support by NeIC for the next 3 years (CodeRefinery +Sustainability Phase, CodeRefinery SP, see +https://neic.no/news/2021/10/01/2021-open-call-results/). The next phase of +the CodeRefinery project is mainly consisting of in-kind contributions by +diverse partner organizations. In this new phase, we need to renew our privacy +policy, but we need some time before the new privacy policy is set.

+

We will continue using our online community spaces and the current +owners/administrators will remain until new roles are set in the CodeRefinery +SP.

+

Previously we have written that "Stored names and email addresses of users +will be removed with the end of this project (2021-10-31)". However, we need +to keep participation data from 2020 and 2021 workshops at least until the end +of 2022 since we often get asked for participation certificates long after the +workshop is concluded. Therefore, we will keep information of the +participants who are qualified to certificates (either as learner, helper, +expert helper, or team lead) in the currently used platform, Indico, +managed by NeIC. The currently participating staff who is also committed to be +a part of the CodeRefinery SP have access to the information.

+

We continue using the newsletter in the new phase but +we may switch to other services but in this case we would notify all +subscribers about deletion of their contact information and invite them to +re-register to the new services that we may migrate to. If a user wants to +unsubscribe before that, they are welcome to do so anytime.

+
+

This Privacy Policy covers person identifiable information that may be +provided to CodeRefinery. Your data only comes from what you decide to provide +to us by understanding privacy policy of the platforms we are using for +different purposes as shown below. Changes to this Privacy Policy will be +posted on this page. Any changes will only apply to information collected +after the posted date of any such change. Additionally, information may be +provided to governmental bodies and other entities as required by law.

+

Definitions

+ +

What information do we obtain and why?

+

We obtain user data including person identifiable information in the following manner for each purpose:

+ +

Information you provide in our Online community spaces are visible and +accessible according to each service's privacy policy. Please note that your +information may be visible to other users in the Online community spaces than +CodeRefinery team members. We use your information within each Online +community space for communication purpose in a reasonable and respectful +manner. We will not use your person identifiable information provided in our +Online community spaces for other purposes than communication with you and +within the community. When we archive a note taken in +HackMD during a workshop, we will delete all the +person identifiable information of users.

+

We obtain the following data anonymously and voluntarily from users.

+ +

We use anonymous web analytics on some of our websites and lesson +pages. These are done without client-side IDs or storing identifiable +information on either the client or server side.

+

Who has access to the personally identifiable information?

+ +

Where we store the data

+ +

How long we store the data

+ +

Anonymity and right to be forgotten

+ +

Questions/concerns?

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/processed_images/classroom.79bbc72a78aecc7b.png b/branch/main/processed_images/classroom.79bbc72a78aecc7b.png new file mode 100644 index 000000000..02564e797 Binary files /dev/null and b/branch/main/processed_images/classroom.79bbc72a78aecc7b.png differ diff --git a/branch/main/processed_images/coderefinery.9da32dbc0a0d3d31.png b/branch/main/processed_images/coderefinery.9da32dbc0a0d3d31.png new file mode 100644 index 000000000..e938d2185 Binary files /dev/null and b/branch/main/processed_images/coderefinery.9da32dbc0a0d3d31.png differ diff --git a/branch/main/processed_images/coderefinery_openhouse.6a2b083d3437b72f.png b/branch/main/processed_images/coderefinery_openhouse.6a2b083d3437b72f.png new file mode 100644 index 000000000..d96185a47 Binary files /dev/null and b/branch/main/processed_images/coderefinery_openhouse.6a2b083d3437b72f.png differ diff --git a/branch/main/processed_images/terminal.77eae35442d20777.png b/branch/main/processed_images/terminal.77eae35442d20777.png new file mode 100644 index 000000000..479880911 Binary files /dev/null and b/branch/main/processed_images/terminal.77eae35442d20777.png differ diff --git a/branch/main/processed_images/wordcloud.d92bee814d2c09a7.png b/branch/main/processed_images/wordcloud.d92bee814d2c09a7.png new file mode 100644 index 000000000..3c49b3f8c Binary files /dev/null and b/branch/main/processed_images/wordcloud.d92bee814d2c09a7.png differ diff --git a/branch/main/registration/index.html b/branch/main/registration/index.html new file mode 100644 index 000000000..7b006f2ed --- /dev/null +++ b/branch/main/registration/index.html @@ -0,0 +1,912 @@ + + + + Registration procedure - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Registration procedure + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Registration procedure

+ + + +

Confirmation email

+

After filling out the registration form you will receive an automatic +confirmation email but please note that your registration is only tentative +until we confirm it with another (human-written) email which should happen +typically within a week.

+

Waiting list

+

We maintain a waiting list for seats but this is currently not automatic so we +need this short time buffer to manually confirm participants and inform those who +are on the waiting list.

+

First come, first serve

+

The seats are assigned on a first come first serve basis but we need to also +make sure that registered participants are affiliated with a Nordic academic +institution since the course is free for participants and financed by the +Nordic e-Infrastructure Collaboration (unless this is an event outside of Nordics +funded by a different organization).

+

Cancellation

+

We ask confirmed participants who are not able to participate at the course +they have signed up for, to inform us as soon as possible so that people on the +waiting list can take the vacant seat.

+

Questions?

+

If you have any questions about your registration status, please write to +support@coderefinery.org.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/repository/index.html b/branch/main/repository/index.html new file mode 100644 index 000000000..e0f34ab95 --- /dev/null +++ b/branch/main/repository/index.html @@ -0,0 +1,989 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + +
+

Code repository hosting for Nordic research software

+
    +
  • Over 330 active users, 225 groups, with over 460 active projects.
  • +
  • The service is hosted at https://source.coderefinery.org.
  • +
  • The is currently run from and the data is stored on servers at the +Danish e-Infrastructure Cooperation (DeiC). DeiC is part of the Nordic +e-Infrastructure collaboration funding this project.
  • +
  • To inform us about issues, please contact support@coderefinery.org.
  • +
  • We announce service breaks through messages displayed once you log into the +platform but we try to announce them well in advance and to keep them very +short.
  • +
  • This service is for collaborating on code and scripts. It is not designed to be +a data sharing or data archive service. There are other services for data +sharing and archival. In doubt please ask support@coderefinery.org.
  • +
  • We are currently funded until 2025. We are actively working on +securing long-term funding for this service. The goal is to create a service +for many years to come. If we do not manage to secure long-term funding, we +will notify users well in advance and assist in migrating repository and data.
  • +
  • The entire file system is backed up every day. The schedule is 1/month full +backup, 3 out of 4 weeks differential backup, 1/day incremental backup. We +reserve the right to reduce the number of days backed up if space becomes an +issue.
  • +
+
+

Why use this service, rather than a service like GitHub or BitBucket?

+

The service we provide is a GitLab instance which targets persons and groups who:

+ +

GitHub, Bitbucket, +GitLab.com, and similar services are popular code +repository hosting services. If you already use them, please continue to do +so! They allow hosting public repositories and to some extent also private +repositories. They may offer higher visibility and discoverability than the +instance offered by our project.

+

Who can use this service?

+

Students, researchers, and staff affiliated with a Nordic academic institution. +If you are not sure whether you can use the system, please contact +support@coderefinery.org. +  +Your collaborators outside the Nordics can join your projects but cannot create new projects. +Ask them to register and then you can add them to your projects or groups as collaborators. +No need to ask us or inform us in order to add external collaborators.

+

You need to be first enabled before you can create projects and groups

+

Newly signed-in users need to first be enabled before they can create projects and groups. +This is to prevent abuse.

+

Please follow these steps:

+ +

How about federated access such as Feide or HAKA or eduGAIN or Kalmar2?

+

We support sign in with eduGAIN. Otherwise you need a specific user account +for this instance. We recommend creating an account with the email address your +identity federation gives you, as this will make it easier to enable other +federated access providers seamlessly. + 

+

Is there a data limit per project?

+

Currently no limit is enforced but we recommend less than 100 MB per project. +This should really be for code and not for persistent storage of data. If you +use more, we may contact you. If you need more, please contact us and motivate +why you need more and we will see what we can do about it. If you have a good +motivation, you will probably get a larger soft limit.

+

Can I serve GitLab pages?

+

Yes! GitLab pages now serve via *.pages.coderefinery.org. +Currently only HTTP. TLS is in the works.

+

Does the service include shared continuous integration runners?

+

No, shared runners are not part of the offering but you can connect +your own CI runners to your projects for automated tests and builds.

+

SSH key fingerprints

+

Public key fingerprints can be used to validate a connection to a remote server.

+

These are the public key fingerprints for source.coderefinery.org (in hexadecimal format):

+
MD5:b8:c9:43:24:33:96:ba:5d:88:84:73:81:38:ac:e6:0f (RSA)
+MD5:21:dc:4e:ef:4f:1c:44:f8:d8:5e:3a:30:15:32:e3:4c (ECDSA)
+MD5:57:3f:dd:7e:52:5a:83:ec:68:7e:c9:58:d3:f2:21:c4 (ED25519)
+
+

These are the SHA256 hashes:

+
SHA256:dQ6iP+E6PZ2Ureynaw1eGKqRLJ5RtL4C7qUJlNSvLW8 (RSA)
+SHA256:dtWo53mvtXVv3NxZf44kpRIfvJ8edcEqv7HFEltPpa4 (ECDSA)
+SHA256:6vV2a0zfcMuls1KkGlzbrJPQP5yC+z5v+2pKtGMNx8Y (ED25519)
+
+

How to check these without logging in:

+
$ ssh-keyscan source.coderefinery.org | ssh-keygen -E md5 -lf -
+$ ssh-keyscan source.coderefinery.org | ssh-keygen -lf -
+
+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/robots.txt b/branch/main/robots.txt new file mode 100644 index 000000000..71c44faeb --- /dev/null +++ b/branch/main/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Disallow: +Allow: / +Sitemap: https://coderefinery.org/sitemap.xml diff --git a/branch/main/sitemap.xml b/branch/main/sitemap.xml new file mode 100644 index 000000000..32e2c477c --- /dev/null +++ b/branch/main/sitemap.xml @@ -0,0 +1,270 @@ + + + + https://coderefinery.org/ + + + https://coderefinery.org/about/ + + + https://coderefinery.org/about/code-of-conduct/ + + + https://coderefinery.org/about/contact/ + + + https://coderefinery.org/about/contributors/ + + + https://coderefinery.org/about/funding/ + + + https://coderefinery.org/about/history/ + + + https://coderefinery.org/about/impact/ + + + https://coderefinery.org/about/newsletter/ + + + https://coderefinery.org/about/partners/ + + + https://coderefinery.org/about/presentations/ + + + https://coderefinery.org/about/project/ + + + https://coderefinery.org/about/reports/ + + + https://coderefinery.org/about/statistics/ + + + https://coderefinery.org/blog/ + + + https://coderefinery.org/blog/2020/04/14/first-online-workshop/ + 2020-04-14 + + + https://coderefinery.org/blog/2020/04/24/nordic-rse-conference/ + 2020-04-24 + + + https://coderefinery.org/blog/2020/04/24/online-workshops-update/ + 2020-04-24 + + + https://coderefinery.org/blog/2020/04/24/rebase-vs-merge/ + 2020-04-24 + + + https://coderefinery.org/blog/2020/04/24/rsh/ + 2020-04-24 + + + https://coderefinery.org/blog/2020/04/27/nordichpc-tools/ + 2020-04-27 + + + https://coderefinery.org/blog/2020/07/31/mega-coderefinery/ + 2020-07-31 + + + https://coderefinery.org/blog/2020/09/29/git-pr/ + 2020-09-29 + + + https://coderefinery.org/blog/2020/11/13/carpentry-community-discussion-nordic/ + 2020-11-13 + + + https://coderefinery.org/blog/2021/09/01/bi-weekly-community-calls/ + 2021-09-01 + + + https://coderefinery.org/blog/2021/11/20/phase-2-lessons-learned/ + 2021-11-20 + + + https://coderefinery.org/blog/2021/11/21/towards-citable-lessons/ + 2021-11-21 + + + https://coderefinery.org/blog/2021/11/25/lessons-learned-may-2021/ + 2021-11-25 + + + https://coderefinery.org/blog/2022/05/04/improving-workshop-registration/ + 2022-05-04 + + + https://coderefinery.org/blog/2022/05/18/measuring-impact/ + 2022-05-18 + + + https://coderefinery.org/blog/2022/10/17/future-of-teaching/ + 2022-10-17 + + + https://coderefinery.org/blog/2022/10/21/python-for-scicomp/ + 2022-10-21 + + + https://coderefinery.org/blog/2022/10/24/parallel-chat/ + 2022-10-24 + + + https://coderefinery.org/blog/2022/10/31/co-teaching/ + 2022-10-31 + + + https://coderefinery.org/blog/2022/11/07/reverse-hybrid/ + 2022-11-07 + + + https://coderefinery.org/blog/2022/11/08/lessons-learned-Sep-2022/ + 2022-11-08 + + + https://coderefinery.org/blog/2022/11/08/mastodon/ + 2022-11-08 + + + https://coderefinery.org/blog/2022/11/14/livestreaming-courses/ + 2022-11-14 + + + https://coderefinery.org/blog/2022/11/21/video-publishing/ + 2022-11-08 + + + https://coderefinery.org/blog/2022/11/28/teams/ + 2022-11-28 + + + https://coderefinery.org/blog/2023/02/14/march-workshop/ + 2023-02-14 + + + https://coderefinery.org/blog/2023/04/12/lessons-learned-mar-2023/ + 2023-04-12 + + + https://coderefinery.org/blog/2023/06/25/planning-sep-workshop/ + 2023-06-25 + + + https://coderefinery.org/calendars/ + + + https://coderefinery.org/index/ + + + https://coderefinery.org/index/description/ + + + https://coderefinery.org/index/news/ + + + https://coderefinery.org/index/provides/ + + + https://coderefinery.org/join/ + + + https://coderefinery.org/join/chat/ + + + https://coderefinery.org/join/community-teaching-training/ + + + https://coderefinery.org/join/individuals/ + + + https://coderefinery.org/join/meetings/ + + + https://coderefinery.org/join/organizations/ + + + https://coderefinery.org/join/staff/ + + + https://coderefinery.org/lessons/ + + + https://coderefinery.org/lessons/core/ + + + https://coderefinery.org/lessons/from-coderefinery/ + + + https://coderefinery.org/lessons/other/ + + + https://coderefinery.org/lessons/reusing/ + + + https://coderefinery.org/open-house/ + + + https://coderefinery.org/open-house/blog-posts/ + 2020-04-24 + + + https://coderefinery.org/open-house/credit/ + 2020-10-02 + + + https://coderefinery.org/open-house/instructor-training-material/ + 2020-03-24 + + + https://coderefinery.org/open-house/newsletter/ + 2020-08-24 + + + https://coderefinery.org/open-house/online-teaching/ + 2020-03-20 + + + https://coderefinery.org/open-house/training-material/ + 2019-12-13 + + + https://coderefinery.org/open-house/website/ + 2020-02-11 + + + https://coderefinery.org/privacy-policy/ + + + https://coderefinery.org/registration/ + + + https://coderefinery.org/repository/ + + + https://coderefinery.org/tasks/ + + + https://coderefinery.org/workshops/ + + + https://coderefinery.org/workshops/past/ + + + https://coderefinery.org/workshops/request/ + + + https://coderefinery.org/workshops/teaching-style/ + + + https://coderefinery.org/workshops/upcoming/ + 2023-04-24 + + diff --git a/branch/main/style.css b/branch/main/style.css new file mode 100644 index 000000000..5d6be117f --- /dev/null +++ b/branch/main/style.css @@ -0,0 +1 @@ +@import url("https://fonts.googleapis.com/css2?family=Roboto&display=swap");html{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:16px;font-weight:normal;line-height:1.5;-webkit-text-size-adjust:100%;background:#fff;color:#666}body{margin:0}a,.uk-link{color:#36d;text-decoration:none;cursor:pointer}a:hover,.uk-link:hover,.uk-link-toggle:hover .uk-link{color:#0f6ecd;text-decoration:underline}abbr[title]{text-decoration:underline dotted;-webkit-text-decoration-style:dotted}b,strong{font-weight:bolder}:not(pre)>code,:not(pre)>kbd,:not(pre)>samp{font-family:Consolas,monaco,monospace;font-size:.875rem;color:#c09;white-space:nowrap;padding:2px 6px;background:#f8f8f8}em{color:#f0506e}ins{background:#ffd;color:#666;text-decoration:none}mark{background:#ffd;color:#666}q{font-style:italic}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}audio,canvas,iframe,img,svg,video{vertical-align:middle}canvas,img,svg,video{max-width:100%;height:auto;box-sizing:border-box}img:not([src]){visibility:hidden;min-width:1px}iframe{border:0}p,ul,ol,dl,pre,address,fieldset,figure{margin:0 0 20px 0}*+p,*+ul,*+ol,*+dl,*+pre,*+address,*+fieldset,*+figure{margin-top:20px}h1,.uk-h1,h2,.uk-h2,.markdown h1,h3,.uk-h3,.markdown h2,h4,.uk-h4,.markdown h3,h5,.uk-h5,h6,.uk-h6,.uk-heading-small,.uk-heading-medium,.uk-heading-large,.uk-heading-xlarge,.uk-heading-2xlarge,.uk-heading-3xlarge{margin:0 0 20px 0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-weight:normal;color:#333;text-transform:none}*+h1,*+.uk-h1,*+h2,*+.uk-h2,.markdown *+h1,*+h3,*+.uk-h3,.markdown *+h2,*+h4,*+.uk-h4,.markdown *+h3,*+h5,*+.uk-h5,*+h6,*+.uk-h6,*+.uk-heading-small,*+.uk-heading-medium,*+.uk-heading-large,*+.uk-heading-xlarge,*+.uk-heading-2xlarge,*+.uk-heading-3xlarge{margin-top:40px}h1,.uk-h1{font-size:2.23125rem;line-height:1.2}h2,.uk-h2,.markdown h1{font-size:1.7rem;line-height:1.3}h3,.uk-h3,.markdown h2{font-size:1.5rem;line-height:1.4}h4,.uk-h4,.markdown h3{font-size:1.25rem;line-height:1.4}h5,.uk-h5{font-size:16px;line-height:1.4}h6,.uk-h6{font-size:.875rem;line-height:1.4}@media (min-width: 960px){h1,.uk-h1{font-size:2.625rem}h2,.uk-h2,.markdown h1{font-size:2rem}}ul,ol{padding-left:30px}ul>li>ul,ul>li>ol,ol>li>ol,ol>li>ul{margin:0}dt{font-weight:bold}dd{margin-left:0}hr,.uk-hr{overflow:visible;text-align:inherit;margin:0 0 20px 0;border:0;border-top:1px solid #e5e5e5}*+hr,*+.uk-hr{margin-top:20px}address{font-style:normal}blockquote{margin:0 0 20px 0;font-size:1.25rem;line-height:1.5;font-style:italic;color:#333}*+blockquote{margin-top:20px}blockquote p:last-of-type{margin-bottom:0}blockquote footer{margin-top:10px;font-size:.875rem;line-height:1.5;color:#666}blockquote footer::before{content:"— "}pre{font:.875rem / 1.5 Consolas,monaco,monospace;color:#666;-moz-tab-size:4;tab-size:4;overflow:auto;padding:10px;border:1px solid #e5e5e5;border-radius:3px;background:#fff}pre code{font-family:Consolas,monaco,monospace}:focus{outline:none}:focus-visible{outline:2px dotted #333}::selection{background:#39f;color:#fff;text-shadow:none}details,main{display:block}summary{display:list-item}template{display:none}:root{--uk-breakpoint-s: 640px;--uk-breakpoint-m: 960px;--uk-breakpoint-l: 1200px;--uk-breakpoint-xl: 1600px}a.uk-link-muted,.uk-link-muted a,.uk-link-toggle .uk-link-muted{color:#999}a.uk-link-muted:hover,.uk-link-muted a:hover,.uk-link-toggle:hover .uk-link-muted{color:#666}a.uk-link-text,.uk-link-text a,.uk-link-toggle .uk-link-text{color:inherit}a.uk-link-text:hover,.uk-link-text a:hover,.uk-link-toggle:hover .uk-link-text{color:#999}a.uk-link-heading,.uk-link-heading a,.uk-link-toggle .uk-link-heading{color:inherit}a.uk-link-heading:hover,.uk-link-heading a:hover,.uk-link-toggle:hover .uk-link-heading{color:#36c;text-decoration:none}a.uk-link-reset,.uk-link-reset a{color:inherit !important;text-decoration:none !important}.uk-link-toggle{color:inherit !important;text-decoration:none !important}.uk-heading-small{font-size:2.6rem;line-height:1.2}.uk-heading-medium{font-size:2.8875rem;line-height:1.1}.uk-heading-large{font-size:3.4rem;line-height:1.1}.uk-heading-xlarge{font-size:4rem;line-height:1}.uk-heading-2xlarge{font-size:6rem;line-height:1}.uk-heading-3xlarge{font-size:8rem;line-height:1}@media (min-width: 960px){.uk-heading-small{font-size:3.25rem}.uk-heading-medium{font-size:3.5rem}.uk-heading-large{font-size:4rem}.uk-heading-xlarge{font-size:6rem}.uk-heading-2xlarge{font-size:8rem}.uk-heading-3xlarge{font-size:11rem}}@media (min-width: 1200px){.uk-heading-medium{font-size:4rem}.uk-heading-large{font-size:6rem}.uk-heading-xlarge{font-size:8rem}.uk-heading-2xlarge{font-size:11rem}.uk-heading-3xlarge{font-size:15rem}}.uk-heading-divider{padding-bottom:calc(5px + 0.1em);border-bottom:calc(0.2px + 0.05em) solid #e5e5e5}.uk-heading-bullet{position:relative}.uk-heading-bullet::before{content:"";display:inline-block;position:relative;top:calc(-0.1 * 1em);vertical-align:middle;height:calc(4px + 0.7em);margin-right:calc(5px + 0.2em);border-left:calc(5px + 0.1em) solid #e5e5e5}.uk-heading-line{overflow:hidden}.uk-heading-line>*{display:inline-block;position:relative}.uk-heading-line>::before,.uk-heading-line>::after{content:"";position:absolute;top:calc(50% - (calc(0.2px + 0.05em) / 2));width:2000px;border-bottom:calc(0.2px + 0.05em) solid #e5e5e5}.uk-heading-line>::before{right:100%;margin-right:calc(5px + 0.3em)}.uk-heading-line>::after{left:100%;margin-left:calc(5px + 0.3em)}[class*=uk-divider]{border:none;margin-bottom:20px}*+[class*=uk-divider]{margin-top:20px}.uk-divider-icon{position:relative;height:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22%23e5e5e5%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");background-repeat:no-repeat;background-position:50% 50%}.uk-divider-icon::before,.uk-divider-icon::after{content:"";position:absolute;top:50%;max-width:calc(50% - (50px / 2));border-bottom:1px solid #e5e5e5}.uk-divider-icon::before{right:calc(50% + (50px / 2));width:100%}.uk-divider-icon::after{left:calc(50% + (50px / 2));width:100%}.uk-divider-small{line-height:0}.uk-divider-small::after{content:"";display:inline-block;width:100px;max-width:100%;border-top:1px solid #e5e5e5;vertical-align:top}.uk-divider-vertical{width:max-content;height:100px;margin-left:auto;margin-right:auto;border-left:1px solid #e5e5e5}.uk-list,.markdown ul{padding:0;list-style:none}.uk-list>*,.markdown ul>*{break-inside:avoid-column}.uk-list>*>:last-child,.markdown ul>*>:last-child{margin-bottom:0}.uk-list>:nth-child(n+2),.markdown ul>:nth-child(n+2),.uk-list>*>ul,.markdown ul>*>ul{margin-top:10px}.uk-list-disc>*,.uk-list-circle>*,.uk-list-square>*,.markdown ul>*,.uk-list-decimal>*,.uk-list-hyphen>*{padding-left:30px}.uk-list-decimal{counter-reset:decimal}.uk-list-decimal>*{counter-increment:decimal}.uk-list-disc>::before,.uk-list-circle>::before,.uk-list-square>::before,.markdown ul>::before,.uk-list-decimal>::before,.uk-list-hyphen>::before{content:"";position:relative;left:-30px;width:30px;height:1.5em;margin-bottom:-1.5em;display:list-item;list-style-position:inside;text-align:right}.uk-list-disc>::before{list-style-type:disc}.uk-list-circle>::before{list-style-type:circle}.uk-list-square>::before,.markdown ul>::before{list-style-type:square}.uk-list-decimal>::before{content:counter(decimal, decimal) " . "}.uk-list-hyphen>::before{content:"–  "}.uk-list-muted>::before{color:#999 !important}.uk-list-emphasis>::before{color:#333 !important}.uk-list-primary>::before{color:#36c !important}.uk-list-secondary>::before{color:#936 !important}.uk-list-bullet>*{padding-left:30px}.uk-list-bullet>::before{content:"";display:list-item;position:relative;left:-30px;width:30px;height:1.5em;margin-bottom:-1.5em;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23666%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%}.uk-list-divider>:nth-child(n+2){margin-top:10px;padding-top:10px;border-top:1px solid #e5e5e5}.uk-list-striped>*{padding:10px 10px}.uk-list-striped>*:nth-of-type(odd){border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5}.uk-list-striped>:nth-of-type(odd){background:#f8f8f8}.uk-list-striped>:nth-child(n+2){margin-top:0}.uk-list-large>:nth-child(n+2),.uk-list-large>*>ul{margin-top:20px}.uk-list-collapse>:nth-child(n+2),.uk-list-collapse>*>ul{margin-top:0}.uk-list-large.uk-list-divider>:nth-child(n+2){margin-top:20px;padding-top:20px}.uk-list-collapse.uk-list-divider>:nth-child(n+2){margin-top:0;padding-top:0}.uk-list-large.uk-list-striped>*{padding:20px 10px}.uk-list-collapse.uk-list-striped>*{padding-top:0;padding-bottom:0}.uk-list-large.uk-list-striped>:nth-child(n+2),.uk-list-collapse.uk-list-striped>:nth-child(n+2){margin-top:0}.uk-description-list>dt{color:#333;font-size:.875rem;font-weight:normal;text-transform:uppercase}.uk-description-list>dt:nth-child(n+2){margin-top:20px}.uk-description-list-divider>dt:nth-child(n+2){margin-top:20px;padding-top:20px;border-top:1px solid #e5e5e5}.uk-table{border-collapse:collapse;border-spacing:0;width:100%;margin-bottom:20px}*+.uk-table{margin-top:20px}.uk-table th{padding:16px 12px;text-align:left;vertical-align:bottom;font-size:.875rem;font-weight:normal;color:#666;text-transform:uppercase}.uk-table td{padding:16px 12px;vertical-align:top}.uk-table td>:last-child{margin-bottom:0}.uk-table tfoot{font-size:.875rem}.uk-table caption{font-size:.875rem;text-align:left;color:#999}.uk-table-middle,.uk-table-middle td{vertical-align:middle !important}.uk-table-divider>tr:not(:first-child),.uk-table-divider>:not(:first-child)>tr,.uk-table-divider>:first-child>tr:not(:first-child){border-top:1px solid #e5e5e5}.uk-table-striped>tr:nth-of-type(odd),.uk-table-striped tbody tr:nth-of-type(odd){background:#f8f8f8;border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5}.uk-table-hover>tr:hover,.uk-table-hover tbody tr:hover{background:#ffd}.uk-table>tr.uk-active,.uk-table tbody tr.uk-active{background:#ffd}.uk-table-small th,.uk-table-small td{padding:10px 12px}.uk-table-large th,.uk-table-large td{padding:22px 12px}.uk-table-justify th:first-child,.uk-table-justify td:first-child{padding-left:0}.uk-table-justify th:last-child,.uk-table-justify td:last-child{padding-right:0}.uk-table-shrink{width:1px}.uk-table-expand{min-width:150px}.uk-table-link{padding:0 !important}.uk-table-link>a{display:block;padding:16px 12px}.uk-table-small .uk-table-link>a{padding:10px 12px}@media (max-width: 959px){.uk-table-responsive,.uk-table-responsive tbody,.uk-table-responsive th,.uk-table-responsive td,.uk-table-responsive tr{display:block}.uk-table-responsive thead{display:none}.uk-table-responsive th,.uk-table-responsive td{width:auto !important;max-width:none !important;min-width:0 !important;overflow:visible !important;white-space:normal !important}.uk-table-responsive th:not(:first-child):not(.uk-table-link),.uk-table-responsive td:not(:first-child):not(.uk-table-link),.uk-table-responsive .uk-table-link:not(:first-child)>a{padding-top:5px !important}.uk-table-responsive th:not(:last-child):not(.uk-table-link),.uk-table-responsive td:not(:last-child):not(.uk-table-link),.uk-table-responsive .uk-table-link:not(:last-child)>a{padding-bottom:5px !important}.uk-table-justify.uk-table-responsive th,.uk-table-justify.uk-table-responsive td{padding-left:0;padding-right:0}}.uk-table tbody tr{transition:background-color .1s linear}.uk-table-striped>tr:nth-of-type(even):last-child,.uk-table-striped tbody tr:nth-of-type(even):last-child{border-bottom:1px solid #e5e5e5}.uk-icon{margin:0;border:none;border-radius:0;overflow:visible;font:inherit;color:inherit;text-transform:none;padding:0;background-color:rgba(0,0,0,0);display:inline-block;fill:currentcolor;line-height:0}button.uk-icon:not(:disabled){cursor:pointer}.uk-icon::-moz-focus-inner{border:0;padding:0}.uk-icon:not(.uk-preserve) [fill*="#"]:not(.uk-preserve){fill:currentcolor}.uk-icon:not(.uk-preserve) [stroke*="#"]:not(.uk-preserve){stroke:currentcolor}.uk-icon>*{transform:translate(0, 0)}.uk-icon-image{width:20px;height:20px;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;vertical-align:middle;object-fit:scale-down;max-width:none}.uk-icon-link{color:#999;text-decoration:none !important}.uk-icon-link:hover{color:#666}.uk-icon-link:active,.uk-active>.uk-icon-link{color:#595959}.uk-icon-button{box-sizing:border-box;width:36px;height:36px;border-radius:500px;background:#f8f8f8;color:#999;vertical-align:middle;display:inline-flex;justify-content:center;align-items:center;transition:.1s ease-in-out;transition-property:color,background-color}.uk-icon-button:hover{background-color:#ebebeb;color:#666}.uk-icon-button:active,.uk-active>.uk-icon-button{background-color:#dfdfdf;color:#666}.uk-range{-webkit-appearance:none;box-sizing:border-box;margin:0;vertical-align:middle;max-width:100%;width:100%;background:rgba(0,0,0,0)}.uk-range:focus{outline:none}.uk-range::-moz-focus-outer{border:none}.uk-range:not(:disabled)::-webkit-slider-thumb{cursor:pointer}.uk-range:not(:disabled)::-moz-range-thumb{cursor:pointer}.uk-range::-webkit-slider-runnable-track{height:3px;background:#ebebeb;border-radius:500px}.uk-range:focus::-webkit-slider-runnable-track,.uk-range:active::-webkit-slider-runnable-track{background:#dfdfdf}.uk-range::-moz-range-track{height:3px;background:#ebebeb;border-radius:500px}.uk-range:focus::-moz-range-track{background:#dfdfdf}.uk-range::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-7px;height:15px;width:15px;border-radius:500px;background:#fff;border:1px solid #ccc}.uk-range::-moz-range-thumb{border:none;height:15px;width:15px;margin-top:-7px;border-radius:500px;background:#fff;border:1px solid #ccc}.uk-input,.uk-select,.uk-textarea,.uk-radio,.uk-checkbox{box-sizing:border-box;margin:0;border-radius:0;font:inherit}.uk-input{overflow:visible}.uk-select{text-transform:none}.uk-select optgroup{font:inherit;font-weight:bold}.uk-textarea{overflow:auto}.uk-input[type=search]::-webkit-search-cancel-button,.uk-input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.uk-input[type=number]::-webkit-inner-spin-button,.uk-input[type=number]::-webkit-outer-spin-button{height:auto}.uk-input::-moz-placeholder,.uk-textarea::-moz-placeholder{opacity:1}.uk-radio:not(:disabled),.uk-checkbox:not(:disabled){cursor:pointer}.uk-fieldset{border:none;margin:0;padding:0;min-width:0}.uk-input,.uk-textarea{-webkit-appearance:none}.uk-input,.uk-select,.uk-textarea{max-width:100%;width:100%;border:0 none;padding:0 10px;background:#fff;color:#666;border:1px solid #e5e5e5;transition:.2s ease-in-out;transition-property:color,background-color,border}.uk-input,.uk-select:not([multiple]):not([size]){height:40px;vertical-align:middle;display:inline-block}.uk-input:not(input),.uk-select:not(select){line-height:38px}.uk-select[multiple],.uk-select[size],.uk-textarea{padding-top:6px;padding-bottom:6px;vertical-align:top}.uk-select[multiple],.uk-select[size]{resize:vertical}.uk-input:focus,.uk-select:focus,.uk-textarea:focus{outline:none;background-color:#fff;color:#666;border-color:#36c}.uk-input:disabled,.uk-select:disabled,.uk-textarea:disabled{background-color:#f8f8f8;color:#999;border-color:#e5e5e5}.uk-input::placeholder{color:#999}.uk-textarea::placeholder{color:#999}.uk-form-small{font-size:.875rem}.uk-form-small:not(textarea):not([multiple]):not([size]){height:30px;padding-left:8px;padding-right:8px}textarea.uk-form-small,[multiple].uk-form-small,[size].uk-form-small{padding:5px 8px}.uk-form-small:not(select):not(input):not(textarea){line-height:28px}.uk-form-large{font-size:1.25rem}.uk-form-large:not(textarea):not([multiple]):not([size]){height:55px;padding-left:12px;padding-right:12px}textarea.uk-form-large,[multiple].uk-form-large,[size].uk-form-large{padding:7px 12px}.uk-form-large:not(select):not(input):not(textarea){line-height:53px}.uk-form-danger,.uk-form-danger:focus{color:#f0506e;border-color:#f0506e}.uk-form-success,.uk-form-success:focus{color:#32d296;border-color:#32d296}.uk-form-blank{background:none;border-color:rgba(0,0,0,0)}.uk-form-blank:focus{border-color:#e5e5e5;border-style:solid}input.uk-form-width-xsmall{width:50px}select.uk-form-width-xsmall{width:75px}.uk-form-width-small{width:130px}.uk-form-width-medium{width:200px}.uk-form-width-large{width:500px}.uk-select:not([multiple]):not([size]){-webkit-appearance:none;-moz-appearance:none;padding-right:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");background-repeat:no-repeat;background-position:100% 50%}.uk-select:not([multiple]):not([size]) option{color:#666}.uk-select:not([multiple]):not([size]):disabled{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-input[list]{padding-right:20px;background-repeat:no-repeat;background-position:100% 50%}.uk-input[list]:hover,.uk-input[list]:focus{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2012%208%206%2016%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-input[list]::-webkit-calendar-picker-indicator{display:none !important}.uk-radio,.uk-checkbox{display:inline-block;height:16px;width:16px;overflow:hidden;margin-top:-4px;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;background-color:rgba(0,0,0,0);background-repeat:no-repeat;background-position:50% 50%;border:1px solid #ccc;transition:.2s ease-in-out;transition-property:background-color,border}.uk-radio{border-radius:50%}.uk-radio:focus,.uk-checkbox:focus{background-color:rgba(0,0,0,0);outline:none;border-color:#36c}.uk-radio:checked,.uk-checkbox:checked,.uk-checkbox:indeterminate{background-color:#36c;border-color:rgba(0,0,0,0)}.uk-radio:checked:focus,.uk-checkbox:checked:focus,.uk-checkbox:indeterminate:focus{background-color:#2952a3}.uk-radio:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23fff%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23fff%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-checkbox:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23fff%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-radio:disabled,.uk-checkbox:disabled{background-color:#f8f8f8;border-color:#e5e5e5}.uk-radio:disabled:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23999%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:disabled:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-checkbox:disabled:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23999%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-legend{width:100%;color:inherit;padding:0;font-size:1.5rem;line-height:1.4}.uk-form-custom{display:inline-block;position:relative;max-width:100%;vertical-align:middle}.uk-form-custom select,.uk-form-custom input[type=file]{position:absolute;top:0;z-index:1;width:100%;height:100%;left:0;-webkit-appearance:none;opacity:0;cursor:pointer}.uk-form-custom input[type=file]{font-size:500px;overflow:hidden}.uk-form-label{color:#333;font-size:.875rem}.uk-form-stacked .uk-form-label{display:block;margin-bottom:5px}@media (max-width: 959px){.uk-form-horizontal .uk-form-label{display:block;margin-bottom:5px}}@media (min-width: 960px){.uk-form-horizontal .uk-form-label{width:200px;margin-top:7px;float:left}.uk-form-horizontal .uk-form-controls{margin-left:215px}.uk-form-horizontal .uk-form-controls-text{padding-top:7px}}.uk-form-icon{position:absolute;top:0;bottom:0;left:0;width:40px;display:inline-flex;justify-content:center;align-items:center;color:#999}.uk-form-icon:hover{color:#666}.uk-form-icon:not(a):not(button):not(input){pointer-events:none}.uk-form-icon:not(.uk-form-icon-flip)~.uk-input{padding-left:40px !important}.uk-form-icon-flip{right:0;left:auto}.uk-form-icon-flip~.uk-input{padding-right:40px !important}.uk-button{margin:0;border:none;overflow:visible;font:inherit;color:inherit;text-transform:none;-webkit-appearance:none;border-radius:0;display:inline-block;box-sizing:border-box;padding:0 30px;vertical-align:middle;font-size:.875rem;line-height:38px;text-align:center;text-decoration:none;text-transform:uppercase;transition:.1s ease-in-out;transition-property:color,background-color,border-color}.uk-button:not(:disabled){cursor:pointer}.uk-button::-moz-focus-inner{border:0;padding:0}.uk-button:hover{text-decoration:none}.uk-button-default{background-color:rgba(0,0,0,0);color:#333;border:1px solid #e5e5e5}.uk-button-default:hover{background-color:rgba(0,0,0,0);color:#333;border-color:#b2b2b2}.uk-button-default:active,.uk-button-default.uk-active{background-color:rgba(0,0,0,0);color:#333;border-color:#999}.uk-button-primary{background-color:#36c;color:#fff;border:1px solid rgba(0,0,0,0)}.uk-button-primary:hover{background-color:#2e5cb8;color:#fff}.uk-button-primary:active,.uk-button-primary.uk-active{background-color:#2952a3;color:#fff}.uk-button-secondary{background-color:#936;color:#fff;border:1px solid rgba(0,0,0,0)}.uk-button-secondary:hover{background-color:#862d59;color:#fff}.uk-button-secondary:active,.uk-button-secondary.uk-active{background-color:#73264d;color:#fff}.uk-button-danger{background-color:#f0506e;color:#fff;border:1px solid rgba(0,0,0,0)}.uk-button-danger:hover{background-color:#ee395b;color:#fff}.uk-button-danger:active,.uk-button-danger.uk-active{background-color:#ec2147;color:#fff}.uk-button-default:disabled,.uk-button-primary:disabled,.uk-button-secondary:disabled,.uk-button-danger:disabled{background-color:rgba(0,0,0,0);color:#999;border-color:#e5e5e5}.uk-button-small{padding:0 15px;line-height:28px;font-size:.875rem}.uk-button-large{padding:0 40px;line-height:53px;font-size:.875rem}.uk-button-text{padding:0;line-height:1.5;background:none;color:#333;position:relative}.uk-button-text::before{content:"";position:absolute;bottom:0;left:0;right:100%;border-bottom:1px solid currentColor;transition:right .3s ease-out}.uk-button-text:hover{color:#333}.uk-button-text:hover::before{right:0}.uk-button-text:disabled{color:#999}.uk-button-text:disabled::before{display:none}.uk-button-link{padding:0;line-height:1.5;background:none;color:#333}.uk-button-link:hover{color:#999;text-decoration:none}.uk-button-link:disabled{color:#999;text-decoration:none}.uk-button-group{display:inline-flex;vertical-align:middle;position:relative}.uk-button-group>.uk-button:nth-child(n+2),.uk-button-group>div:nth-child(n+2) .uk-button{margin-left:-1px}.uk-button-group .uk-button:hover,.uk-button-group .uk-button:focus,.uk-button-group .uk-button:active,.uk-button-group .uk-button.uk-active{position:relative;z-index:1}.uk-progress{vertical-align:baseline;display:block;width:100%;border:0;background-color:#f8f8f8;margin-bottom:20px;height:15px;border-radius:500px;overflow:hidden}*+.uk-progress{margin-top:20px}.uk-progress::-webkit-progress-bar{background-color:rgba(0,0,0,0)}.uk-progress::-webkit-progress-value{background-color:#36c;transition:width .6s ease}.uk-progress::-moz-progress-bar{background-color:#36c;transition:width .6s ease}.uk-section{display:flow-root;box-sizing:border-box;padding-top:40px;padding-bottom:40px}@media (min-width: 960px){.uk-section{padding-top:70px;padding-bottom:70px}}.uk-section>:last-child{margin-bottom:0}.uk-section-xsmall{padding-top:20px;padding-bottom:20px}.uk-section-small{padding-top:40px;padding-bottom:40px}.uk-section-large{padding-top:70px;padding-bottom:70px}@media (min-width: 960px){.uk-section-large{padding-top:140px;padding-bottom:140px}}.uk-section-xlarge{padding-top:140px;padding-bottom:140px}@media (min-width: 960px){.uk-section-xlarge{padding-top:210px;padding-bottom:210px}}.uk-section-default{background:#fff;--uk-navbar-color: dark}.uk-section-muted{background:#f8f8f8;--uk-navbar-color: dark}.uk-section-primary{background:#36c;--uk-navbar-color: light}.uk-section-secondary{background:#936;--uk-navbar-color: light}.uk-container{display:flow-root;box-sizing:content-box;max-width:1200px;margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}@media (min-width: 640px){.uk-container{padding-left:30px;padding-right:30px}}@media (min-width: 960px){.uk-container{padding-left:40px;padding-right:40px}}.uk-container>:last-child{margin-bottom:0}.uk-container .uk-container{padding-left:0;padding-right:0}.uk-container-xsmall{max-width:750px}.uk-container-small{max-width:900px}.uk-container-large{max-width:1400px}.uk-container-xlarge{max-width:1600px}.uk-container-expand{max-width:none}.uk-container-expand-left{margin-left:0}.uk-container-expand-right{margin-right:0}@media (min-width: 640px){.uk-container-expand-left.uk-container-xsmall,.uk-container-expand-right.uk-container-xsmall{max-width:calc(50% + (750px / 2) - 30px)}.uk-container-expand-left.uk-container-small,.uk-container-expand-right.uk-container-small{max-width:calc(50% + (900px / 2) - 30px)}}@media (min-width: 960px){.uk-container-expand-left,.uk-container-expand-right{max-width:calc(50% + (1200px / 2) - 40px)}.uk-container-expand-left.uk-container-xsmall,.uk-container-expand-right.uk-container-xsmall{max-width:calc(50% + (750px / 2) - 40px)}.uk-container-expand-left.uk-container-small,.uk-container-expand-right.uk-container-small{max-width:calc(50% + (900px / 2) - 40px)}.uk-container-expand-left.uk-container-large,.uk-container-expand-right.uk-container-large{max-width:calc(50% + (1400px / 2) - 40px)}.uk-container-expand-left.uk-container-xlarge,.uk-container-expand-right.uk-container-xlarge{max-width:calc(50% + (1600px / 2) - 40px)}}.uk-container-item-padding-remove-left,.uk-container-item-padding-remove-right{width:calc(100% + 15px)}.uk-container-item-padding-remove-left{margin-left:-15px}.uk-container-item-padding-remove-right{margin-right:-15px}@media (min-width: 640px){.uk-container-item-padding-remove-left,.uk-container-item-padding-remove-right{width:calc(100% + 30px)}.uk-container-item-padding-remove-left{margin-left:-30px}.uk-container-item-padding-remove-right{margin-right:-30px}}@media (min-width: 960px){.uk-container-item-padding-remove-left,.uk-container-item-padding-remove-right{width:calc(100% + 40px)}.uk-container-item-padding-remove-left{margin-left:-40px}.uk-container-item-padding-remove-right{margin-right:-40px}}.uk-tile{display:flow-root;position:relative;box-sizing:border-box;padding-left:15px;padding-right:15px;padding-top:40px;padding-bottom:40px}@media (min-width: 640px){.uk-tile{padding-left:30px;padding-right:30px}}@media (min-width: 960px){.uk-tile{padding-left:40px;padding-right:40px;padding-top:70px;padding-bottom:70px}}.uk-tile>:last-child{margin-bottom:0}.uk-tile-xsmall{padding-top:20px;padding-bottom:20px}.uk-tile-small{padding-top:40px;padding-bottom:40px}.uk-tile-large{padding-top:70px;padding-bottom:70px}@media (min-width: 960px){.uk-tile-large{padding-top:140px;padding-bottom:140px}}.uk-tile-xlarge{padding-top:140px;padding-bottom:140px}@media (min-width: 960px){.uk-tile-xlarge{padding-top:210px;padding-bottom:210px}}.uk-tile-default{background-color:#fff}.uk-tile-muted{background-color:#f8f8f8}.uk-tile-primary{background-color:#36c}.uk-tile-secondary{background-color:#936}.uk-card{position:relative;box-sizing:border-box;transition:box-shadow .1s ease-in-out}.uk-card-body{display:flow-root;padding:30px 30px}.uk-card-header{display:flow-root;padding:15px 30px}.uk-card-footer{display:flow-root;padding:15px 30px}@media (min-width: 1200px){.uk-card-body{padding:40px 40px}.uk-card-header{padding:20px 40px}.uk-card-footer{padding:20px 40px}}.uk-card-body>:last-child,.uk-card-header>:last-child,.uk-card-footer>:last-child{margin-bottom:0}.uk-card-title{font-size:1.5rem;line-height:1.4}.uk-card-badge{position:absolute;top:15px;right:15px;z-index:1;height:22px;padding:0 10px;background:#36c;color:#fff;font-size:.875rem;display:flex;justify-content:center;align-items:center;line-height:0;border-radius:2px;text-transform:uppercase}.uk-card-badge:first-child+*{margin-top:0}.uk-card-hover:not(.uk-card-default):not(.uk-card-primary):not(.uk-card-secondary):hover{background-color:#fff;box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-card-default{background-color:#fff;color:#666;box-shadow:0 5px 15px rgba(0,0,0,.08)}.uk-card-default .uk-card-title{color:#333}.uk-card-default.uk-card-hover:hover{background-color:#fff;box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-card-default .uk-card-header{border-bottom:1px solid #e5e5e5}.uk-card-default .uk-card-footer{border-top:1px solid #e5e5e5}.uk-card-primary{background-color:#36c;color:#fff;box-shadow:0 5px 15px rgba(0,0,0,.08)}.uk-card-primary .uk-card-title{color:#fff}.uk-card-primary.uk-card-hover:hover{background-color:#36c;box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-card-secondary{background-color:#936;color:#fff;box-shadow:0 5px 15px rgba(0,0,0,.08)}.uk-card-secondary .uk-card-title{color:#fff}.uk-card-secondary.uk-card-hover:hover{background-color:#936;box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-card-small.uk-card-body,.uk-card-small .uk-card-body{padding:20px 20px}.uk-card-small .uk-card-header{padding:13px 20px}.uk-card-small .uk-card-footer{padding:13px 20px}@media (min-width: 1200px){.uk-card-large.uk-card-body,.uk-card-large .uk-card-body{padding:70px 70px}.uk-card-large .uk-card-header{padding:35px 70px}.uk-card-large .uk-card-footer{padding:35px 70px}}.uk-card-body>.uk-nav-default{margin-left:-30px;margin-right:-30px}.uk-card-body>.uk-nav-default:only-child{margin-top:-15px;margin-bottom:-15px}.uk-card-body>.uk-nav-default>li>a,.uk-card-body>.uk-nav-default .uk-nav-header,.uk-card-body>.uk-nav-default .uk-nav-divider{padding-left:30px;padding-right:30px}.uk-card-body>.uk-nav-default .uk-nav-sub{padding-left:45px}@media (min-width: 1200px){.uk-card-body>.uk-nav-default{margin-left:-40px;margin-right:-40px}.uk-card-body>.uk-nav-default:only-child{margin-top:-25px;margin-bottom:-25px}.uk-card-body>.uk-nav-default>li>a,.uk-card-body>.uk-nav-default .uk-nav-header,.uk-card-body>.uk-nav-default .uk-nav-divider{padding-left:40px;padding-right:40px}.uk-card-body>.uk-nav-default .uk-nav-sub{padding-left:55px}}.uk-card-small>.uk-nav-default{margin-left:-20px;margin-right:-20px}.uk-card-small>.uk-nav-default:only-child{margin-top:-5px;margin-bottom:-5px}.uk-card-small>.uk-nav-default>li>a,.uk-card-small>.uk-nav-default .uk-nav-header,.uk-card-small>.uk-nav-default .uk-nav-divider{padding-left:20px;padding-right:20px}.uk-card-small>.uk-nav-default .uk-nav-sub{padding-left:35px}@media (min-width: 1200px){.uk-card-large>.uk-nav-default{margin:0}.uk-card-large>.uk-nav-default:only-child{margin:0}.uk-card-large>.uk-nav-default>li>a,.uk-card-large>.uk-nav-default .uk-nav-header,.uk-card-large>.uk-nav-default .uk-nav-divider{padding-left:0;padding-right:0}.uk-card-large>.uk-nav-default .uk-nav-sub{padding-left:15px}}.uk-close{color:#999;transition:.1s ease-in-out;transition-property:color,opacity}.uk-close:hover{color:#666}.uk-spinner>*{animation:uk-spinner-rotate 1.4s linear infinite}@keyframes uk-spinner-rotate{0%{transform:rotate(0deg)}100%{transform:rotate(270deg)}}.uk-spinner>*>*{stroke-dasharray:88px;stroke-dashoffset:0;transform-origin:center;animation:uk-spinner-dash 1.4s ease-in-out infinite;stroke-width:1;stroke-linecap:round}@keyframes uk-spinner-dash{0%{stroke-dashoffset:88px}50%{stroke-dashoffset:22px;transform:rotate(135deg)}100%{stroke-dashoffset:88px;transform:rotate(450deg)}}.uk-totop{padding:5px;color:#999;transition:color .1s ease-in-out}.uk-totop:hover{color:#666}.uk-totop:active{color:#333}.uk-marker{padding:5px;background:#936;color:#fff;border-radius:500px}.uk-marker:hover{color:#fff}.uk-alert{position:relative;margin-bottom:20px;padding:15px 29px 15px 15px;background:#f8f8f8;color:#666}*+.uk-alert{margin-top:20px}.uk-alert>:last-child{margin-bottom:0}.uk-alert-close{position:absolute;top:20px;right:15px;color:inherit;opacity:.4}.uk-alert-close:first-child+*{margin-top:0}.uk-alert-close:hover{color:inherit;opacity:.8}.uk-alert-primary{background:#d6e0f5;color:#36c}.uk-alert-success{background:#edfbf6;color:#32d296}.uk-alert-warning{background:#fef5ee;color:#faa05a}.uk-alert-danger{background:#fef4f6;color:#f0506e}.uk-alert h1,.uk-alert h2,.uk-alert h3,.uk-alert h4,.uk-alert h5,.uk-alert h6{color:inherit}.uk-alert a:not([class]){color:inherit;text-decoration:underline}.uk-alert a:not([class]):hover{color:inherit;text-decoration:underline}.uk-placeholder{margin-bottom:20px;padding:30px 30px;background:rgba(0,0,0,0);border:1px dashed #e5e5e5}*+.uk-placeholder{margin-top:20px}.uk-placeholder>:last-child{margin-bottom:0}.uk-badge{box-sizing:border-box;min-width:18px;height:18px;padding:0 5px;border-radius:500px;vertical-align:middle;background:#36c;color:#fff !important;font-size:11px;display:inline-flex;justify-content:center;align-items:center;line-height:0}.uk-badge:hover{text-decoration:none}.uk-label{display:inline-block;padding:0 10px;background:#36c;line-height:1.5;font-size:.875rem;color:#fff;vertical-align:middle;white-space:nowrap;border-radius:2px;text-transform:uppercase}.uk-label-success{background-color:#32d296;color:#fff}.uk-label-warning{background-color:#faa05a;color:#fff}.uk-label-danger{background-color:#f0506e;color:#fff}.uk-overlay{padding:30px 30px}.uk-overlay>:last-child{margin-bottom:0}.uk-overlay-default{background:rgba(255,255,255,.8)}.uk-overlay-primary{background:rgba(153,51,102,.8)}.uk-article{display:flow-root}.uk-article>:last-child{margin-bottom:0}.uk-article+.uk-article{margin-top:70px}.uk-article-title{font-size:2.23125rem;line-height:1.2}@media (min-width: 960px){.uk-article-title{font-size:2.625rem}}.uk-article-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-article-meta a{color:#999}.uk-article-meta a:hover{color:#666;text-decoration:none}.uk-comment-body{display:flow-root;overflow-wrap:break-word;word-wrap:break-word}.uk-comment-header{display:flow-root;margin-bottom:20px}.uk-comment-body>:last-child,.uk-comment-header>:last-child{margin-bottom:0}.uk-comment-title{font-size:1.25rem;line-height:1.4}.uk-comment-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-comment-list{padding:0;list-style:none}.uk-comment-list>:nth-child(n+2){margin-top:70px}.uk-comment-list .uk-comment~ul{margin:70px 0 0 0;padding-left:30px;list-style:none}@media (min-width: 960px){.uk-comment-list .uk-comment~ul{padding-left:100px}}.uk-comment-list .uk-comment~ul>:nth-child(n+2){margin-top:70px}.uk-comment-primary{padding:30px;background-color:#f8f8f8}.uk-search{display:inline-block;position:relative;max-width:100%;margin:0}.uk-search-input::-webkit-search-cancel-button,.uk-search-input::-webkit-search-decoration{-webkit-appearance:none}.uk-search-input::-moz-placeholder{opacity:1}.uk-search-input{box-sizing:border-box;margin:0;border-radius:0;font:inherit;overflow:visible;-webkit-appearance:none;vertical-align:middle;width:100%;border:none;color:#666}.uk-search-input:focus{outline:none}.uk-search-input::placeholder{color:#999}.uk-search .uk-search-icon{position:absolute;top:0;bottom:0;left:0;display:inline-flex;justify-content:center;align-items:center;color:#999}.uk-search .uk-search-icon:hover{color:#999}.uk-search .uk-search-icon:not(a):not(button):not(input){pointer-events:none}.uk-search .uk-search-icon-flip{right:0;left:auto}.uk-search-default{width:240px}.uk-search-default .uk-search-input{height:40px;padding-left:10px;padding-right:10px;background:rgba(0,0,0,0);border:1px solid #e5e5e5}.uk-search-default .uk-search-input:focus{background-color:rgba(0,0,0,0);border-color:#36c}.uk-search-default .uk-search-icon{width:40px}.uk-search-default .uk-search-icon:not(.uk-search-icon-flip)~.uk-search-input{padding-left:40px}.uk-search-default .uk-search-icon-flip~.uk-search-input{padding-right:40px}.uk-search-navbar{width:400px}.uk-search-navbar .uk-search-input{height:40px;background:rgba(0,0,0,0);font-size:1.5rem}.uk-search-navbar .uk-search-icon{width:40px}.uk-search-navbar .uk-search-icon:not(.uk-search-icon-flip)~.uk-search-input{padding-left:40px}.uk-search-navbar .uk-search-icon-flip~.uk-search-input{padding-right:40px}.uk-search-large{width:500px}.uk-search-large .uk-search-input{height:80px;background:rgba(0,0,0,0);font-size:2.625rem}.uk-search-large .uk-search-icon{width:80px}.uk-search-large .uk-search-icon:not(.uk-search-icon-flip)~.uk-search-input{padding-left:80px}.uk-search-large .uk-search-icon-flip~.uk-search-input{padding-right:80px}.uk-search-toggle{color:#999}.uk-search-toggle:hover{color:#666}.uk-accordion{padding:0;list-style:none}.uk-accordion>:nth-child(n+2){margin-top:20px}.uk-accordion-title{display:block;font-size:1.25rem;line-height:1.4;color:#333;overflow:hidden}.uk-accordion-title::before{content:"";width:1.4em;height:1.4em;margin-left:10px;float:right;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%}.uk-open>.uk-accordion-title::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-accordion-title:hover{color:#666;text-decoration:none}.uk-accordion-content{display:flow-root;margin-top:20px}.uk-accordion-content>:last-child{margin-bottom:0}.uk-drop{display:none;position:absolute;z-index:1020;--uk-position-offset: 20px;--uk-position-viewport-offset: 15px;box-sizing:border-box;width:300px}.uk-drop.uk-open{display:block}.uk-drop-stack .uk-drop-grid>*{width:100% !important}.uk-drop-parent-icon{margin-left:.25em;transition:transform .3s ease-out}[aria-expanded=true]>.uk-drop-parent-icon{transform:rotateX(180deg)}.uk-dropbar{--uk-position-offset: 0;--uk-position-shift-offset: 0;--uk-position-viewport-offset: 0;width:auto;padding:25px 15px 25px 15px;background:#fff;color:#666}.uk-dropbar>:last-child{margin-bottom:0}@media (min-width: 640px){.uk-dropbar{padding-left:30px;padding-right:30px}}@media (min-width: 960px){.uk-dropbar{padding-left:40px;padding-right:40px}}.uk-dropbar :focus-visible{outline-color:#333 !important}.uk-dropbar-large{padding-top:40px;padding-bottom:40px}.uk-dropbar-top{box-shadow:0 12px 7px -6px rgba(0,0,0,.05)}.uk-dropbar-bottom{box-shadow:0 -12px 7px -6px rgba(0,0,0,.05)}.uk-dropbar-left{box-shadow:12px 0 7px -6px rgba(0,0,0,.05)}.uk-dropbar-right{box-shadow:-12px 0 7px -6px rgba(0,0,0,.05)}.uk-dropnav-dropbar{position:absolute;z-index:980;padding:0;left:0;right:0}.uk-modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;overflow-y:auto;padding:15px 15px;background:rgba(0,0,0,.6);opacity:0;transition:opacity .15s linear}@media (min-width: 640px){.uk-modal{padding:50px 30px}}@media (min-width: 960px){.uk-modal{padding-left:40px;padding-right:40px}}.uk-modal.uk-open{opacity:1}.uk-modal-page{overflow:hidden}.uk-modal-dialog{position:relative;box-sizing:border-box;margin:0 auto;width:600px;max-width:100% !important;background:#fff;opacity:0;transform:translateY(-100px);transition:.3s linear;transition-property:opacity,transform}.uk-open>.uk-modal-dialog{opacity:1;transform:translateY(0)}.uk-modal-container .uk-modal-dialog{width:1200px}.uk-modal-full{padding:0;background:none}.uk-modal-full .uk-modal-dialog{margin:0;width:100%;max-width:100%;transform:translateY(0)}.uk-modal-body{display:flow-root;padding:20px 20px}.uk-modal-header{display:flow-root;padding:10px 20px;background:#fff;border-bottom:1px solid #e5e5e5}.uk-modal-footer{display:flow-root;padding:10px 20px;background:#fff;border-top:1px solid #e5e5e5}@media (min-width: 640px){.uk-modal-body{padding:30px 30px}.uk-modal-header{padding:15px 30px}.uk-modal-footer{padding:15px 30px}}.uk-modal-body>:last-child,.uk-modal-header>:last-child,.uk-modal-footer>:last-child{margin-bottom:0}.uk-modal-title{font-size:2rem;line-height:1.3}[class*=uk-modal-close-]{position:absolute;z-index:1010;top:10px;right:10px;padding:5px}[class*=uk-modal-close-]:first-child+*{margin-top:0}.uk-modal-close-outside{top:0;right:-5px;transform:translate(0, -100%);color:#fff}.uk-modal-close-outside:hover{color:#fff}@media (min-width: 960px){.uk-modal-close-outside{right:0;transform:translate(100%, -100%)}}.uk-modal-close-full{top:0;right:0;padding:10px;background:#fff}@media (min-width: 960px){.uk-modal-close-full{padding:20px}}.uk-slideshow{-webkit-tap-highlight-color:rgba(0,0,0,0)}.uk-slideshow-items{position:relative;z-index:0;margin:0;padding:0;list-style:none;overflow:hidden;-webkit-touch-callout:none;touch-action:pan-y}.uk-slideshow-items>*{position:absolute;top:0;left:0;right:0;bottom:0;overflow:hidden;will-change:transform,opacity}.uk-slideshow-items>:not(.uk-active){display:none}.uk-slider{-webkit-tap-highlight-color:rgba(0,0,0,0)}.uk-slider-container{overflow:hidden;overflow:clip}.uk-slider-container-offset{margin:-11px -25px -39px -25px;padding:11px 25px 39px 25px}.uk-slider-items{will-change:transform;position:relative;touch-action:pan-y}.uk-slider-items:not(.uk-grid){display:flex;margin:0;padding:0;list-style:none;-webkit-touch-callout:none}.uk-slider-items.uk-grid{flex-wrap:nowrap}.uk-slider-items>*{flex:none;box-sizing:border-box;max-width:100%;position:relative}.uk-sticky{position:relative;z-index:980;box-sizing:border-box}.uk-sticky-fixed{margin:0 !important;-webkit-backface-visibility:hidden;backface-visibility:hidden}.uk-sticky[class*=uk-animation-]{animation-duration:.2s}.uk-sticky.uk-animation-reverse{animation-duration:.2s}.uk-sticky-placeholder{pointer-events:none}.uk-offcanvas{display:none;position:fixed;top:0;bottom:0;left:0;z-index:1000}.uk-offcanvas-flip .uk-offcanvas{right:0;left:auto}.uk-offcanvas-bar{position:absolute;top:0;bottom:0;left:-270px;box-sizing:border-box;width:270px;padding:20px 20px;background:#936;overflow-y:auto}@media (min-width: 640px){.uk-offcanvas-bar{left:-350px;width:350px;padding:30px 30px}}.uk-offcanvas-flip .uk-offcanvas-bar{left:auto;right:-270px}@media (min-width: 640px){.uk-offcanvas-flip .uk-offcanvas-bar{right:-350px}}.uk-open>.uk-offcanvas-bar{left:0}.uk-offcanvas-flip .uk-open>.uk-offcanvas-bar{left:auto;right:0}.uk-offcanvas-bar-animation{transition:left .3s ease-out}.uk-offcanvas-flip .uk-offcanvas-bar-animation{transition-property:right}.uk-offcanvas-reveal{position:absolute;top:0;bottom:0;left:0;width:0;overflow:hidden;transition:width .3s ease-out}.uk-offcanvas-reveal .uk-offcanvas-bar{left:0}.uk-offcanvas-flip .uk-offcanvas-reveal .uk-offcanvas-bar{left:auto;right:0}.uk-open>.uk-offcanvas-reveal{width:270px}@media (min-width: 640px){.uk-open>.uk-offcanvas-reveal{width:350px}}.uk-offcanvas-flip .uk-offcanvas-reveal{right:0;left:auto}.uk-offcanvas-close{position:absolute;z-index:1000;top:5px;right:5px;padding:5px}@media (min-width: 640px){.uk-offcanvas-close{top:10px;right:10px}}.uk-offcanvas-close:first-child+*{margin-top:0}.uk-offcanvas-overlay{width:100vw;touch-action:none}.uk-offcanvas-overlay::before{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(0,0,0,.1);opacity:0;transition:opacity .15s linear}.uk-offcanvas-overlay.uk-open::before{opacity:1}.uk-offcanvas-page,.uk-offcanvas-container{overflow-x:hidden;overflow-x:clip}.uk-offcanvas-container{position:relative;left:0;transition:left .3s ease-out;box-sizing:border-box;width:100%}:not(.uk-offcanvas-flip).uk-offcanvas-container-animation{left:270px}.uk-offcanvas-flip.uk-offcanvas-container-animation{left:-270px}@media (min-width: 640px){:not(.uk-offcanvas-flip).uk-offcanvas-container-animation{left:350px}.uk-offcanvas-flip.uk-offcanvas-container-animation{left:-350px}}.uk-switcher{margin:0;padding:0;list-style:none}.uk-switcher>:not(.uk-active){display:none}.uk-switcher>*>:last-child{margin-bottom:0}.uk-leader{overflow:hidden}.uk-leader-fill::after{display:inline-block;margin-left:15px;width:0;content:attr(data-fill);white-space:nowrap}.uk-leader-fill.uk-leader-hide::after{display:none}:root{--uk-leader-fill-content: .}.uk-notification{position:fixed;top:10px;left:10px;z-index:1040;box-sizing:border-box;width:350px}.uk-notification-top-right,.uk-notification-bottom-right{left:auto;right:10px}.uk-notification-top-center,.uk-notification-bottom-center{left:50%;margin-left:-175px}.uk-notification-bottom-left,.uk-notification-bottom-right,.uk-notification-bottom-center{top:auto;bottom:10px}@media (max-width: 639px){.uk-notification{left:10px;right:10px;width:auto;margin:0}}.uk-notification-message{position:relative;padding:15px;background:#f8f8f8;color:#666;font-size:1.25rem;line-height:1.4;cursor:pointer}*+.uk-notification-message{margin-top:10px}.uk-notification-close{display:none;position:absolute;top:20px;right:15px}.uk-notification-message:hover .uk-notification-close{display:block}.uk-notification-message-primary{color:#36c}.uk-notification-message-success{color:#32d296}.uk-notification-message-warning{color:#faa05a}.uk-notification-message-danger{color:#f0506e}.uk-tooltip{display:none;position:absolute;z-index:1030;--uk-position-offset: 10px;--uk-position-viewport-offset: 10;top:0;box-sizing:border-box;max-width:200px;padding:3px 6px;background:#666;border-radius:2px;color:#fff;font-size:12px}.uk-tooltip.uk-active{display:block}.uk-sortable{position:relative}.uk-sortable>:last-child{margin-bottom:0}.uk-sortable-drag{position:fixed !important;z-index:1050 !important;pointer-events:none}.uk-sortable-placeholder{opacity:0;pointer-events:none}.uk-sortable-empty{min-height:50px}.uk-sortable-handle:hover{cursor:move}.uk-countdown-number{font-variant-numeric:tabular-nums;font-size:2rem;line-height:.8}@media (min-width: 640px){.uk-countdown-number{font-size:4rem}}@media (min-width: 960px){.uk-countdown-number{font-size:6rem}}.uk-countdown-separator{font-size:1rem;line-height:1.6}@media (min-width: 640px){.uk-countdown-separator{font-size:2rem}}@media (min-width: 960px){.uk-countdown-separator{font-size:3rem}}.uk-grid{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none}.uk-grid>*{margin:0}.uk-grid>*>:last-child{margin-bottom:0}.uk-grid{margin-left:-30px}.uk-grid>*{padding-left:30px}.uk-grid+.uk-grid,.uk-grid>.uk-grid-margin,*+.uk-grid-margin{margin-top:30px}@media (min-width: 1200px){.uk-grid{margin-left:-40px}.uk-grid>*{padding-left:40px}.uk-grid+.uk-grid,.uk-grid>.uk-grid-margin,*+.uk-grid-margin{margin-top:40px}}.uk-grid-small,.uk-grid-column-small{margin-left:-15px}.uk-grid-small>*,.uk-grid-column-small>*{padding-left:15px}.uk-grid+.uk-grid-small,.uk-grid+.uk-grid-row-small,.uk-grid-small>.uk-grid-margin,.uk-grid-row-small>.uk-grid-margin,*+.uk-grid-margin-small{margin-top:15px}.uk-grid-medium,.uk-grid-column-medium{margin-left:-30px}.uk-grid-medium>*,.uk-grid-column-medium>*{padding-left:30px}.uk-grid+.uk-grid-medium,.uk-grid+.uk-grid-row-medium,.uk-grid-medium>.uk-grid-margin,.uk-grid-row-medium>.uk-grid-margin,*+.uk-grid-margin-medium{margin-top:30px}.uk-grid-large,.uk-grid-column-large{margin-left:-40px}.uk-grid-large>*,.uk-grid-column-large>*{padding-left:40px}.uk-grid+.uk-grid-large,.uk-grid+.uk-grid-row-large,.uk-grid-large>.uk-grid-margin,.uk-grid-row-large>.uk-grid-margin,*+.uk-grid-margin-large{margin-top:40px}@media (min-width: 1200px){.uk-grid-large,.uk-grid-column-large{margin-left:-70px}.uk-grid-large>*,.uk-grid-column-large>*{padding-left:70px}.uk-grid+.uk-grid-large,.uk-grid+.uk-grid-row-large,.uk-grid-large>.uk-grid-margin,.uk-grid-row-large>.uk-grid-margin,*+.uk-grid-margin-large{margin-top:70px}}.uk-grid-collapse,.uk-grid-column-collapse{margin-left:0}.uk-grid-collapse>*,.uk-grid-column-collapse>*{padding-left:0}.uk-grid+.uk-grid-collapse,.uk-grid+.uk-grid-row-collapse,.uk-grid-collapse>.uk-grid-margin,.uk-grid-row-collapse>.uk-grid-margin{margin-top:0}.uk-grid-divider>*{position:relative}.uk-grid-divider>:not(.uk-first-column)::before{content:"";position:absolute;top:0;bottom:0;border-left:1px solid #e5e5e5}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{content:"";position:absolute;left:0;right:0;border-top:1px solid #e5e5e5}.uk-grid-divider{margin-left:-60px}.uk-grid-divider>*{padding-left:60px}.uk-grid-divider>:not(.uk-first-column)::before{left:30px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin{margin-top:60px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{top:-30px;left:60px}@media (min-width: 1200px){.uk-grid-divider{margin-left:-80px}.uk-grid-divider>*{padding-left:80px}.uk-grid-divider>:not(.uk-first-column)::before{left:40px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin{margin-top:80px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{top:-40px;left:80px}}.uk-grid-divider.uk-grid-small,.uk-grid-divider.uk-grid-column-small{margin-left:-30px}.uk-grid-divider.uk-grid-small>*,.uk-grid-divider.uk-grid-column-small>*{padding-left:30px}.uk-grid-divider.uk-grid-small>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-column-small>:not(.uk-first-column)::before{left:15px}.uk-grid-divider.uk-grid-small.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-small.uk-grid-stack>.uk-grid-margin{margin-top:30px}.uk-grid-divider.uk-grid-small.uk-grid-stack>.uk-grid-margin::before{top:-15px;left:30px}.uk-grid-divider.uk-grid-row-small.uk-grid-stack>.uk-grid-margin::before{top:-15px}.uk-grid-divider.uk-grid-column-small.uk-grid-stack>.uk-grid-margin::before{left:30px}.uk-grid-divider.uk-grid-medium,.uk-grid-divider.uk-grid-column-medium{margin-left:-60px}.uk-grid-divider.uk-grid-medium>*,.uk-grid-divider.uk-grid-column-medium>*{padding-left:60px}.uk-grid-divider.uk-grid-medium>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-column-medium>:not(.uk-first-column)::before{left:30px}.uk-grid-divider.uk-grid-medium.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-medium.uk-grid-stack>.uk-grid-margin{margin-top:60px}.uk-grid-divider.uk-grid-medium.uk-grid-stack>.uk-grid-margin::before{top:-30px;left:60px}.uk-grid-divider.uk-grid-row-medium.uk-grid-stack>.uk-grid-margin::before{top:-30px}.uk-grid-divider.uk-grid-column-medium.uk-grid-stack>.uk-grid-margin::before{left:60px}.uk-grid-divider.uk-grid-large,.uk-grid-divider.uk-grid-column-large{margin-left:-80px}.uk-grid-divider.uk-grid-large>*,.uk-grid-divider.uk-grid-column-large>*{padding-left:80px}.uk-grid-divider.uk-grid-large>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-column-large>:not(.uk-first-column)::before{left:40px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin{margin-top:80px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin::before{top:-40px;left:80px}.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin::before{top:-40px}.uk-grid-divider.uk-grid-column-large.uk-grid-stack>.uk-grid-margin::before{left:80px}@media (min-width: 1200px){.uk-grid-divider.uk-grid-large,.uk-grid-divider.uk-grid-column-large{margin-left:-140px}.uk-grid-divider.uk-grid-large>*,.uk-grid-divider.uk-grid-column-large>*{padding-left:140px}.uk-grid-divider.uk-grid-large>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-column-large>:not(.uk-first-column)::before{left:70px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin{margin-top:140px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin::before{top:-70px;left:140px}.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin::before{top:-70px}.uk-grid-divider.uk-grid-column-large.uk-grid-stack>.uk-grid-margin::before{left:140px}}.uk-grid-match>*,.uk-grid-item-match{display:flex;flex-wrap:wrap}.uk-grid-match>*>:not([class*=uk-width]),.uk-grid-item-match>:not([class*=uk-width]){box-sizing:border-box;width:100%;flex:auto}.uk-nav,.uk-nav ul{margin:0;padding:0;list-style:none}.uk-nav li>a{display:flex;align-items:center;column-gap:.25em;text-decoration:none}.uk-nav>li>a{padding:5px 0}ul.uk-nav-sub{padding:5px 0 5px 15px}.uk-nav-sub ul{padding-left:15px}.uk-nav-sub a{padding:2px 0}.uk-nav-parent-icon{margin-left:auto;transition:transform .3s ease-out}.uk-nav>li.uk-open>a .uk-nav-parent-icon{transform:rotateX(180deg)}.uk-nav-header{padding:5px 0;text-transform:uppercase;font-size:.875rem}.uk-nav-header:not(:first-child){margin-top:20px}.uk-nav .uk-nav-divider{margin:5px 0}.uk-nav-default{font-size:.875rem;line-height:1.5}.uk-nav-default>li>a{color:#999}.uk-nav-default>li>a:hover{color:#666}.uk-nav-default>li.uk-active>a{color:#333}.uk-nav-default .uk-nav-subtitle{font-size:12px}.uk-nav-default .uk-nav-header{color:#333}.uk-nav-default .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-default .uk-nav-sub{font-size:.875rem;line-height:1.5}.uk-nav-default .uk-nav-sub a{color:#999}.uk-nav-default .uk-nav-sub a:hover{color:#666}.uk-nav-default .uk-nav-sub li.uk-active>a{color:#333}.uk-nav-primary{font-size:1.5rem;line-height:1.5}.uk-nav-primary>li>a{color:#999}.uk-nav-primary>li>a:hover{color:#666}.uk-nav-primary>li.uk-active>a{color:#333}.uk-nav-primary .uk-nav-subtitle{font-size:1.25rem}.uk-nav-primary .uk-nav-header{color:#333}.uk-nav-primary .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-primary .uk-nav-sub{font-size:1.25rem;line-height:1.5}.uk-nav-primary .uk-nav-sub a{color:#999}.uk-nav-primary .uk-nav-sub a:hover{color:#666}.uk-nav-primary .uk-nav-sub li.uk-active>a{color:#333}.uk-nav-secondary{font-size:16px;line-height:1.5}.uk-nav-secondary>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider){margin-top:0}.uk-nav-secondary>li>a{color:#333;padding:10px 10px}.uk-nav-secondary>li>a:hover{color:#333;background-color:#f8f8f8}.uk-nav-secondary>li.uk-active>a{color:#333;background-color:#f8f8f8}.uk-nav-secondary .uk-nav-subtitle{font-size:.875rem;color:#999}.uk-nav-secondary>li>a:hover .uk-nav-subtitle{color:#666}.uk-nav-secondary>li.uk-active>a .uk-nav-subtitle{color:#333}.uk-nav-secondary .uk-nav-header{color:#333}.uk-nav-secondary .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-secondary .uk-nav-sub{font-size:.875rem;line-height:1.5}.uk-nav-secondary .uk-nav-sub a{color:#999}.uk-nav-secondary .uk-nav-sub a:hover{color:#666}.uk-nav-secondary .uk-nav-sub li.uk-active>a{color:#333}.uk-nav-center{text-align:center}.uk-nav-center li>a{justify-content:center}.uk-nav-center .uk-nav-sub,.uk-nav-center .uk-nav-sub ul{padding-left:0}.uk-nav-center .uk-nav-parent-icon{margin-left:.25em}.uk-nav.uk-nav-divider>:not(.uk-nav-header,.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider){margin-top:5px;padding-top:5px;border-top:1px solid #e5e5e5}.uk-navbar{display:flex;position:relative;--uk-navbar-dropbar-behind-color: dark}.uk-navbar-container:not(.uk-navbar-transparent){background:#f8f8f8}.uk-navbar-left,.uk-navbar-right,[class*=uk-navbar-center]{display:flex;gap:15px;align-items:center}.uk-navbar-right{margin-left:auto}.uk-navbar-center:only-child{margin-left:auto;margin-right:auto;position:relative}.uk-navbar-center:not(:only-child){position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:max-content;box-sizing:border-box;z-index:990}.uk-navbar-center-left,.uk-navbar-center-right{position:absolute;top:0}.uk-navbar-center-left{right:calc(100% + 15px)}.uk-navbar-center-right{left:calc(100% + 15px)}[class*=uk-navbar-center-]{width:max-content;box-sizing:border-box}.uk-navbar-nav{display:flex;gap:15px;margin:0;padding:0;list-style:none}.uk-navbar-left,.uk-navbar-right,.uk-navbar-center:only-child{flex-wrap:wrap}.uk-navbar-nav>li>a,.uk-navbar-item,.uk-navbar-toggle{display:flex;justify-content:center;align-items:center;column-gap:.25em;box-sizing:border-box;min-height:80px;font-size:.875rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";text-decoration:none}.uk-navbar-nav>li>a{padding:0 0;color:#36d;text-transform:uppercase;transition:.1s ease-in-out;transition-property:color,background-color}.uk-navbar-nav>li:hover>a,.uk-navbar-nav>li>a[aria-expanded=true]{color:#c09}.uk-navbar-nav>li>a:active{color:#333}.uk-navbar-nav>li.uk-active>a{color:#333}.uk-navbar-parent-icon{margin-left:4px;transition:transform .3s ease-out}.uk-navbar-nav>li>a[aria-expanded=true] .uk-navbar-parent-icon{transform:rotateX(180deg)}.uk-navbar-item{padding:0 0;color:#666}.uk-navbar-item>:last-child{margin-bottom:0}.uk-navbar-toggle{padding:0 0;color:#999}.uk-navbar-toggle:hover,.uk-navbar-toggle[aria-expanded=true]{color:#666;text-decoration:none}.uk-navbar-subtitle{font-size:.875rem}.uk-navbar-justify .uk-navbar-left,.uk-navbar-justify .uk-navbar-right,.uk-navbar-justify .uk-navbar-nav,.uk-navbar-justify .uk-navbar-nav>li,.uk-navbar-justify .uk-navbar-item,.uk-navbar-justify .uk-navbar-toggle{flex-grow:1}.uk-navbar-dropdown{--uk-position-offset: 15px;--uk-position-shift-offset: 0;--uk-position-viewport-offset: 15px;width:200px;padding:25px;background:#fff;color:#666;box-shadow:0 5px 12px rgba(0,0,0,.15)}.uk-navbar-dropdown>:last-child{margin-bottom:0}.uk-navbar-dropdown :focus-visible{outline-color:#333 !important}.uk-navbar-dropdown .uk-drop-grid{margin-left:-30px}.uk-navbar-dropdown .uk-drop-grid>*{padding-left:30px}.uk-navbar-dropdown .uk-drop-grid>.uk-grid-margin{margin-top:30px}.uk-navbar-dropdown-width-2:not(.uk-drop-stack){width:400px}.uk-navbar-dropdown-width-3:not(.uk-drop-stack){width:600px}.uk-navbar-dropdown-width-4:not(.uk-drop-stack){width:800px}.uk-navbar-dropdown-width-5:not(.uk-drop-stack){width:1000px}.uk-navbar-dropdown-large{--uk-position-shift-offset: 0;padding:40px}.uk-navbar-dropdown-dropbar{width:auto;background:rgba(0,0,0,0);padding:25px 0 25px 0;--uk-position-offset: 0;--uk-position-shift-offset: 0;--uk-position-viewport-offset: 15px;box-shadow:none}@media (min-width: 640px){.uk-navbar-dropdown-dropbar{--uk-position-viewport-offset: 30px}}@media (min-width: 960px){.uk-navbar-dropdown-dropbar{--uk-position-viewport-offset: 40px}}.uk-navbar-dropdown-dropbar-large{--uk-position-shift-offset: 0;padding-top:40px;padding-bottom:40px}.uk-navbar-dropdown-nav{font-size:.875rem}.uk-navbar-dropdown-nav>li>a{color:#999}.uk-navbar-dropdown-nav>li>a:hover{color:#666}.uk-navbar-dropdown-nav>li.uk-active>a{color:#333}.uk-navbar-dropdown-nav .uk-nav-subtitle{font-size:12px}.uk-navbar-dropdown-nav .uk-nav-header{color:#333}.uk-navbar-dropdown-nav .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-navbar-dropdown-nav .uk-nav-sub a{color:#999}.uk-navbar-dropdown-nav .uk-nav-sub a:hover{color:#666}.uk-navbar-dropdown-nav .uk-nav-sub li.uk-active>a{color:#333}.uk-navbar-container{transition:.1s ease-in-out;transition-property:background-color}@media (min-width: 960px){.uk-navbar-left,.uk-navbar-right,[class*=uk-navbar-center]{gap:30px}.uk-navbar-center-left{right:calc(100% + 30px)}.uk-navbar-center-right{left:calc(100% + 30px)}}@media (min-width: 960px){.uk-navbar-nav{gap:30px}}.uk-subnav{display:flex;flex-wrap:wrap;align-items:center;margin-left:-20px;padding:0;list-style:none}.uk-subnav>*{flex:none;padding-left:20px;position:relative}.uk-subnav>*>:first-child{display:flex;align-items:center;column-gap:.25em;color:#999;font-size:.875rem;text-transform:uppercase;transition:.1s ease-in-out;transition-property:color,background-color}.uk-subnav>*>a:hover{color:#666;text-decoration:none}.uk-subnav>.uk-active>a{color:#333}.uk-subnav-divider{margin-left:-41px}.uk-subnav-divider>*{display:flex;align-items:center}.uk-subnav-divider>::before{content:"";height:1.5em;margin-left:0px;margin-right:20px;border-left:1px solid rgba(0,0,0,0)}.uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before{border-left-color:#e5e5e5}.uk-subnav-pill>*>:first-child{padding:5px 10px;background:rgba(0,0,0,0);color:#999}.uk-subnav-pill>*>a:hover{background-color:#f8f8f8;color:#666}.uk-subnav-pill>*>a:active{background-color:#f8f8f8;color:#666}.uk-subnav-pill>.uk-active>a{background-color:#36c;color:#fff}.uk-subnav>.uk-disabled>a{color:#999}.uk-breadcrumb{padding:0;list-style:none}.uk-breadcrumb>*{display:contents}.uk-breadcrumb>*>*{font-size:.875rem;color:#999}.uk-breadcrumb>*>:hover{color:#666;text-decoration:none}.uk-breadcrumb>:last-child>span,.uk-breadcrumb>:last-child>a:not([href]){color:#666}.uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before{content:"/";display:inline-block;margin:0 20px 0 calc(20px - 4px);font-size:.875rem;color:#999}.uk-pagination{display:flex;flex-wrap:wrap;align-items:center;margin-left:0;padding:0;list-style:none}.uk-pagination>*{flex:none;padding-left:0;position:relative}.uk-pagination>*>*{display:flex;align-items:center;column-gap:.25em;padding:5px 10px;color:#999;transition:color .1s ease-in-out}.uk-pagination>*>:hover{color:#666;text-decoration:none}.uk-pagination>.uk-active>*{color:#666}.uk-pagination>.uk-disabled>*{color:#999}.uk-tab{display:flex;flex-wrap:wrap;margin-left:-20px;padding:0;list-style:none;position:relative}.uk-tab::before{content:"";position:absolute;bottom:0;left:20px;right:0;border-bottom:1px solid #e5e5e5}.uk-tab>*{flex:none;padding-left:20px;position:relative}.uk-tab>*>a{display:flex;align-items:center;column-gap:.25em;justify-content:center;padding:5px 10px;color:#999;border-bottom:1px solid rgba(0,0,0,0);font-size:.875rem;text-transform:uppercase;transition:color .1s ease-in-out}.uk-tab>*>a:hover{color:#666;text-decoration:none}.uk-tab>.uk-active>a{color:#333;border-color:#36c}.uk-tab>.uk-disabled>a{color:#999}.uk-tab-bottom::before{top:0;bottom:auto}.uk-tab-bottom>*>a{border-top:1px solid rgba(0,0,0,0);border-bottom:none}.uk-tab-left,.uk-tab-right{flex-direction:column;margin-left:0}.uk-tab-left>*,.uk-tab-right>*{padding-left:0}.uk-tab-left::before{top:0;bottom:0;left:auto;right:0;border-left:1px solid #e5e5e5;border-bottom:none}.uk-tab-right::before{top:0;bottom:0;left:0;right:auto;border-left:1px solid #e5e5e5;border-bottom:none}.uk-tab-left>*>a{justify-content:left;border-right:1px solid rgba(0,0,0,0);border-bottom:none}.uk-tab-right>*>a{justify-content:left;border-left:1px solid rgba(0,0,0,0);border-bottom:none}.uk-tab .uk-dropdown{margin-left:30px}.uk-slidenav{padding:5px 10px;color:rgba(102,102,102,.5);transition:color .1s ease-in-out}.uk-slidenav:hover{color:rgba(102,102,102,.9)}.uk-slidenav:active{color:rgba(102,102,102,.5)}.uk-slidenav-large{padding:10px 10px}.uk-slidenav-container{display:flex}.uk-dotnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-12px}.uk-dotnav>*{flex:none;padding-left:12px}.uk-dotnav>*>*{display:block;box-sizing:border-box;width:10px;height:10px;border-radius:50%;background:rgba(0,0,0,0);text-indent:100%;overflow:hidden;white-space:nowrap;border:1px solid rgba(102,102,102,.4);transition:.2s ease-in-out;transition-property:background-color,border-color}.uk-dotnav>*>:hover{background-color:rgba(102,102,102,.6);border-color:rgba(0,0,0,0)}.uk-dotnav>*>:active{background-color:rgba(102,102,102,.2);border-color:rgba(0,0,0,0)}.uk-dotnav>.uk-active>*{background-color:rgba(102,102,102,.6);border-color:rgba(0,0,0,0)}.uk-dotnav-vertical{flex-direction:column;margin-left:0;margin-top:-12px}.uk-dotnav-vertical>*{padding-left:0;padding-top:12px}.uk-thumbnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-15px}.uk-thumbnav>*{padding-left:15px}.uk-thumbnav>*>*{display:inline-block;position:relative}.uk-thumbnav>*>*::after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-image:linear-gradient(180deg, rgba(255,255,255,0), rgba(255,255,255,.4));transition:opacity .1s ease-in-out}.uk-thumbnav>*>:hover::after{opacity:0}.uk-thumbnav>.uk-active>*::after{opacity:0}.uk-thumbnav-vertical{flex-direction:column;margin-left:0;margin-top:-15px}.uk-thumbnav-vertical>*{padding-left:0;padding-top:15px}.uk-iconnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-10px}.uk-iconnav>*{padding-left:10px}.uk-iconnav>*>a{display:flex;align-items:center;column-gap:.25em;line-height:0;color:#36d;text-decoration:none;font-size:.875rem;transition:.1s ease-in-out;transition-property:color,background-color}.uk-iconnav>*>a:hover{color:#c09}.uk-iconnav>.uk-active>a{color:#666}.uk-iconnav-vertical{flex-direction:column;margin-left:0;margin-top:-10px}.uk-iconnav-vertical>*{padding-left:0;padding-top:10px}.uk-dropdown{--uk-position-offset: 10px;--uk-position-viewport-offset: 15px;width:auto;min-width:200px;padding:25px;background:#fff;color:#666;box-shadow:0 5px 12px rgba(0,0,0,.15)}.uk-dropdown>:last-child{margin-bottom:0}.uk-dropdown :focus-visible{outline-color:#333 !important}.uk-dropdown-large{padding:40px}.uk-dropdown-dropbar{width:auto;background:rgba(0,0,0,0);padding:5px 0 25px 0;--uk-position-viewport-offset: 15px;box-shadow:none}@media (min-width: 640px){.uk-dropdown-dropbar{--uk-position-viewport-offset: 30px}}@media (min-width: 960px){.uk-dropdown-dropbar{--uk-position-viewport-offset: 40px}}.uk-dropdown-dropbar-large{padding-top:40px;padding-bottom:40px}.uk-dropdown-nav{font-size:.875rem}.uk-dropdown-nav>li>a{color:#999}.uk-dropdown-nav>li>a:hover,.uk-dropdown-nav>li.uk-active>a{color:#666}.uk-dropdown-nav .uk-nav-subtitle{font-size:12px}.uk-dropdown-nav .uk-nav-header{color:#333}.uk-dropdown-nav .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-dropdown-nav .uk-nav-sub a{color:#999}.uk-dropdown-nav .uk-nav-sub a:hover,.uk-dropdown-nav .uk-nav-sub li.uk-active>a{color:#666}.uk-lightbox{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;background:#000;opacity:0;transition:opacity .15s linear;touch-action:pinch-zoom}.uk-lightbox.uk-open{display:block;opacity:1}.uk-lightbox :focus-visible{outline-color:rgba(255,255,255,.7)}.uk-lightbox-page{overflow:hidden}.uk-lightbox-items>*{position:absolute;top:0;right:0;bottom:0;left:0;display:none;justify-content:center;align-items:center;color:rgba(255,255,255,.7);will-change:transform,opacity}.uk-lightbox-items>*>*{max-width:100vw;max-height:100vh}.uk-lightbox-items>*>:not(iframe){width:auto;height:auto}.uk-lightbox-items>.uk-active{display:flex}.uk-lightbox-toolbar{padding:10px 10px;background:rgba(0,0,0,.3);color:rgba(255,255,255,.7)}.uk-lightbox-toolbar>*{color:rgba(255,255,255,.7)}.uk-lightbox-toolbar-icon{padding:5px;color:rgba(255,255,255,.7)}.uk-lightbox-toolbar-icon:hover{color:#fff}.uk-lightbox-button{box-sizing:border-box;width:50px;height:50px;background:rgba(0,0,0,.3);color:rgba(255,255,255,.7);display:inline-flex;justify-content:center;align-items:center}.uk-lightbox-button:hover{color:#fff}.uk-lightbox-caption:empty{display:none}.uk-lightbox-iframe{width:80%;height:80%}[class*=uk-animation-]{animation:.5s ease-out both}.uk-animation-fade{animation-name:uk-fade;animation-duration:.8s;animation-timing-function:linear}.uk-animation-scale-up{animation-name:uk-fade,uk-scale-up}.uk-animation-scale-down{animation-name:uk-fade,uk-scale-down}.uk-animation-slide-top{animation-name:uk-fade,uk-slide-top}.uk-animation-slide-bottom{animation-name:uk-fade,uk-slide-bottom}.uk-animation-slide-left{animation-name:uk-fade,uk-slide-left}.uk-animation-slide-right{animation-name:uk-fade,uk-slide-right}.uk-animation-slide-top-small{animation-name:uk-fade,uk-slide-top-small}.uk-animation-slide-bottom-small{animation-name:uk-fade,uk-slide-bottom-small}.uk-animation-slide-left-small{animation-name:uk-fade,uk-slide-left-small}.uk-animation-slide-right-small{animation-name:uk-fade,uk-slide-right-small}.uk-animation-slide-top-medium{animation-name:uk-fade,uk-slide-top-medium}.uk-animation-slide-bottom-medium{animation-name:uk-fade,uk-slide-bottom-medium}.uk-animation-slide-left-medium{animation-name:uk-fade,uk-slide-left-medium}.uk-animation-slide-right-medium{animation-name:uk-fade,uk-slide-right-medium}.uk-animation-kenburns{animation-name:uk-kenburns;animation-duration:15s}.uk-animation-shake{animation-name:uk-shake}.uk-animation-stroke{animation-name:uk-stroke;animation-duration:2s;stroke-dasharray:var(--uk-animation-stroke)}.uk-animation-reverse{animation-direction:reverse;animation-timing-function:ease-in}.uk-animation-fast{animation-duration:.1s}.uk-animation-toggle:not(:hover):not(:focus) [class*=uk-animation-]{animation-name:none}@keyframes uk-fade{0%{opacity:0}100%{opacity:1}}@keyframes uk-scale-up{0%{transform:scale(.9)}100%{transform:scale(1)}}@keyframes uk-scale-down{0%{transform:scale(1.1)}100%{transform:scale(1)}}@keyframes uk-slide-top{0%{transform:translateY(-100%)}100%{transform:translateY(0)}}@keyframes uk-slide-bottom{0%{transform:translateY(100%)}100%{transform:translateY(0)}}@keyframes uk-slide-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes uk-slide-right{0%{transform:translateX(100%)}100%{transform:translateX(0)}}@keyframes uk-slide-top-small{0%{transform:translateY(-10px)}100%{transform:translateY(0)}}@keyframes uk-slide-bottom-small{0%{transform:translateY(10px)}100%{transform:translateY(0)}}@keyframes uk-slide-left-small{0%{transform:translateX(-10px)}100%{transform:translateX(0)}}@keyframes uk-slide-right-small{0%{transform:translateX(10px)}100%{transform:translateX(0)}}@keyframes uk-slide-top-medium{0%{transform:translateY(-50px)}100%{transform:translateY(0)}}@keyframes uk-slide-bottom-medium{0%{transform:translateY(50px)}100%{transform:translateY(0)}}@keyframes uk-slide-left-medium{0%{transform:translateX(-50px)}100%{transform:translateX(0)}}@keyframes uk-slide-right-medium{0%{transform:translateX(50px)}100%{transform:translateX(0)}}@keyframes uk-kenburns{0%{transform:scale(1)}100%{transform:scale(1.2)}}@keyframes uk-shake{0%, 100%{transform:translateX(0)}10%{transform:translateX(-9px)}20%{transform:translateX(8px)}30%{transform:translateX(-7px)}40%{transform:translateX(6px)}50%{transform:translateX(-5px)}60%{transform:translateX(4px)}70%{transform:translateX(-3px)}80%{transform:translateX(2px)}90%{transform:translateX(-1px)}}@keyframes uk-stroke{0%{stroke-dashoffset:var(--uk-animation-stroke)}100%{stroke-dashoffset:0}}[class*=uk-child-width]>*{box-sizing:border-box;width:100%}.uk-child-width-1-2>*{width:50%}.uk-child-width-1-3>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4>*{width:25%}.uk-child-width-1-5>*{width:20%}.uk-child-width-1-6>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto>*{width:auto}.uk-child-width-expand>:not([class*=uk-width]){flex:1;min-width:1px}@media (min-width: 640px){.uk-child-width-1-1\@s>*{width:100%}.uk-child-width-1-2\@s>*{width:50%}.uk-child-width-1-3\@s>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@s>*{width:25%}.uk-child-width-1-5\@s>*{width:20%}.uk-child-width-1-6\@s>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@s>*{width:auto}.uk-child-width-expand\@s>:not([class*=uk-width]){flex:1;min-width:1px}}@media (min-width: 960px){.uk-child-width-1-1\@m>*{width:100%}.uk-child-width-1-2\@m>*{width:50%}.uk-child-width-1-3\@m>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@m>*{width:25%}.uk-child-width-1-5\@m>*{width:20%}.uk-child-width-1-6\@m>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@m>*{width:auto}.uk-child-width-expand\@m>:not([class*=uk-width]){flex:1;min-width:1px}}@media (min-width: 1200px){.uk-child-width-1-1\@l>*{width:100%}.uk-child-width-1-2\@l>*{width:50%}.uk-child-width-1-3\@l>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@l>*{width:25%}.uk-child-width-1-5\@l>*{width:20%}.uk-child-width-1-6\@l>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@l>*{width:auto}.uk-child-width-expand\@l>:not([class*=uk-width]){flex:1;min-width:1px}}@media (min-width: 1600px){.uk-child-width-1-1\@xl>*{width:100%}.uk-child-width-1-2\@xl>*{width:50%}.uk-child-width-1-3\@xl>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@xl>*{width:25%}.uk-child-width-1-5\@xl>*{width:20%}.uk-child-width-1-6\@xl>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@xl>*{width:auto}.uk-child-width-expand\@xl>:not([class*=uk-width]){flex:1;min-width:1px}}[class*=uk-width]{box-sizing:border-box;width:100%;max-width:100%}.uk-width-1-2{width:50%}.uk-width-1-3{width:calc(100% * 1 / 3.001)}.uk-width-2-3{width:calc(100% * 2 / 3.001)}.uk-width-1-4{width:25%}.uk-width-3-4{width:75%}.uk-width-1-5{width:20%}.uk-width-2-5{width:40%}.uk-width-3-5{width:60%}.uk-width-4-5{width:80%}.uk-width-1-6{width:calc(100% * 1 / 6.001)}.uk-width-5-6{width:calc(100% * 5 / 6.001)}.uk-width-small{width:150px}.uk-width-medium{width:300px}.uk-width-large{width:450px}.uk-width-xlarge{width:600px}.uk-width-2xlarge{width:750px}.uk-width-auto{width:auto}.uk-width-expand{flex:1;min-width:1px}@media (min-width: 640px){.uk-width-1-1\@s{width:100%}.uk-width-1-2\@s{width:50%}.uk-width-1-3\@s{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@s{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@s{width:25%}.uk-width-3-4\@s{width:75%}.uk-width-1-5\@s{width:20%}.uk-width-2-5\@s{width:40%}.uk-width-3-5\@s{width:60%}.uk-width-4-5\@s{width:80%}.uk-width-1-6\@s{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@s{width:calc(100% * 5 / 6.001)}.uk-width-small\@s{width:150px}.uk-width-medium\@s{width:300px}.uk-width-large\@s{width:450px}.uk-width-xlarge\@s{width:600px}.uk-width-2xlarge\@s{width:750px}.uk-width-auto\@s{width:auto}.uk-width-expand\@s{flex:1;min-width:1px}}@media (min-width: 960px){.uk-width-1-1\@m{width:100%}.uk-width-1-2\@m{width:50%}.uk-width-1-3\@m{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@m{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@m{width:25%}.uk-width-3-4\@m{width:75%}.uk-width-1-5\@m{width:20%}.uk-width-2-5\@m{width:40%}.uk-width-3-5\@m{width:60%}.uk-width-4-5\@m{width:80%}.uk-width-1-6\@m{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@m{width:calc(100% * 5 / 6.001)}.uk-width-small\@m{width:150px}.uk-width-medium\@m{width:300px}.uk-width-large\@m{width:450px}.uk-width-xlarge\@m{width:600px}.uk-width-2xlarge\@m{width:750px}.uk-width-auto\@m{width:auto}.uk-width-expand\@m{flex:1;min-width:1px}}@media (min-width: 1200px){.uk-width-1-1\@l{width:100%}.uk-width-1-2\@l{width:50%}.uk-width-1-3\@l{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@l{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@l{width:25%}.uk-width-3-4\@l{width:75%}.uk-width-1-5\@l{width:20%}.uk-width-2-5\@l{width:40%}.uk-width-3-5\@l{width:60%}.uk-width-4-5\@l{width:80%}.uk-width-1-6\@l{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@l{width:calc(100% * 5 / 6.001)}.uk-width-small\@l{width:150px}.uk-width-medium\@l{width:300px}.uk-width-large\@l{width:450px}.uk-width-xlarge\@l{width:600px}.uk-width-2xlarge\@l{width:750px}.uk-width-auto\@l{width:auto}.uk-width-expand\@l{flex:1;min-width:1px}}@media (min-width: 1600px){.uk-width-1-1\@xl{width:100%}.uk-width-1-2\@xl{width:50%}.uk-width-1-3\@xl{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@xl{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@xl{width:25%}.uk-width-3-4\@xl{width:75%}.uk-width-1-5\@xl{width:20%}.uk-width-2-5\@xl{width:40%}.uk-width-3-5\@xl{width:60%}.uk-width-4-5\@xl{width:80%}.uk-width-1-6\@xl{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@xl{width:calc(100% * 5 / 6.001)}.uk-width-small\@xl{width:150px}.uk-width-medium\@xl{width:300px}.uk-width-large\@xl{width:450px}.uk-width-xlarge\@xl{width:600px}.uk-width-2xlarge\@xl{width:750px}.uk-width-auto\@xl{width:auto}.uk-width-expand\@xl{flex:1;min-width:1px}}.uk-width-max-content{width:max-content}.uk-width-min-content{width:min-content}[class*=uk-height]{box-sizing:border-box}.uk-height-1-1{height:100%}.uk-height-viewport{min-height:100vh}.uk-height-viewport-2{min-height:200vh}.uk-height-viewport-3{min-height:300vh}.uk-height-viewport-4{min-height:400vh}.uk-height-small{height:150px}.uk-height-medium{height:300px}.uk-height-large{height:450px}.uk-height-max-small{max-height:150px}.uk-height-max-medium{max-height:300px}.uk-height-max-large{max-height:450px}.uk-text-lead{font-size:1.5rem;line-height:1.5;color:#333}.uk-text-meta{font-size:.875rem;line-height:1.4;color:#666}.uk-text-meta>a{color:#666}.uk-text-meta>a:hover{color:#666;text-decoration:none}.uk-text-small{font-size:.875rem;line-height:1.5}.uk-text-large{font-size:1.5rem;line-height:1.5}.uk-text-default{font-size:16px;line-height:1.5}.uk-text-light{font-weight:300}.uk-text-normal{font-weight:400}.uk-text-bold{font-weight:700}.uk-text-lighter{font-weight:lighter}.uk-text-bolder{font-weight:bolder}.uk-text-italic{font-style:italic}.uk-text-capitalize{text-transform:capitalize !important}.uk-text-uppercase{text-transform:uppercase !important}.uk-text-lowercase{text-transform:lowercase !important}.uk-text-decoration-none{text-decoration:none !important}.uk-text-muted{color:#999 !important}.uk-text-emphasis{color:#333 !important}.uk-text-primary{color:#36c !important}.uk-text-secondary{color:#936 !important}.uk-text-success{color:#32d296 !important}.uk-text-warning{color:#faa05a !important}.uk-text-danger{color:#f0506e !important}.uk-text-background{-webkit-background-clip:text;color:rgba(0,0,0,0) !important;display:inline-block;background-color:#36c;background-image:linear-gradient(90deg, #36c 0%, spin(#36c, 40%) 100%)}.uk-text-left{text-align:left !important}.uk-text-right{text-align:right !important}.uk-text-center{text-align:center !important}.uk-text-justify{text-align:justify !important}@media (min-width: 640px){.uk-text-left\@s{text-align:left !important}.uk-text-right\@s{text-align:right !important}.uk-text-center\@s{text-align:center !important}}@media (min-width: 960px){.uk-text-left\@m{text-align:left !important}.uk-text-right\@m{text-align:right !important}.uk-text-center\@m{text-align:center !important}}@media (min-width: 1200px){.uk-text-left\@l{text-align:left !important}.uk-text-right\@l{text-align:right !important}.uk-text-center\@l{text-align:center !important}}@media (min-width: 1600px){.uk-text-left\@xl{text-align:left !important}.uk-text-right\@xl{text-align:right !important}.uk-text-center\@xl{text-align:center !important}}.uk-text-top{vertical-align:top !important}.uk-text-middle{vertical-align:middle !important}.uk-text-bottom{vertical-align:bottom !important}.uk-text-baseline{vertical-align:baseline !important}.uk-text-nowrap{white-space:nowrap}.uk-text-truncate{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}th.uk-text-truncate,td.uk-text-truncate{max-width:0}.uk-text-break{overflow-wrap:break-word}th.uk-text-break,td.uk-text-break{word-break:break-word}[class*=uk-column-]{column-gap:30px}@media (min-width: 1200px){[class*=uk-column-]{column-gap:40px}}[class*=uk-column-] img{transform:translate3d(0, 0, 0)}.uk-column-divider{column-rule:1px solid #e5e5e5;column-gap:60px}@media (min-width: 1200px){.uk-column-divider{column-gap:80px}}.uk-column-1-2{column-count:2}.uk-column-1-3{column-count:3}.uk-column-1-4{column-count:4}.uk-column-1-5{column-count:5}.uk-column-1-6{column-count:6}@media (min-width: 640px){.uk-column-1-2\@s{column-count:2}.uk-column-1-3\@s{column-count:3}.uk-column-1-4\@s{column-count:4}.uk-column-1-5\@s{column-count:5}.uk-column-1-6\@s{column-count:6}}@media (min-width: 960px){.uk-column-1-2\@m{column-count:2}.uk-column-1-3\@m{column-count:3}.uk-column-1-4\@m{column-count:4}.uk-column-1-5\@m{column-count:5}.uk-column-1-6\@m{column-count:6}}@media (min-width: 1200px){.uk-column-1-2\@l{column-count:2}.uk-column-1-3\@l{column-count:3}.uk-column-1-4\@l{column-count:4}.uk-column-1-5\@l{column-count:5}.uk-column-1-6\@l{column-count:6}}@media (min-width: 1600px){.uk-column-1-2\@xl{column-count:2}.uk-column-1-3\@xl{column-count:3}.uk-column-1-4\@xl{column-count:4}.uk-column-1-5\@xl{column-count:5}.uk-column-1-6\@xl{column-count:6}}.uk-column-span{column-span:all}[uk-cover]:where(canvas,iframe,svg),[data-uk-cover]:where(canvas,iframe,svg){max-width:none;position:absolute;left:50%;top:50%;--uk-position-translate-x: -50%;--uk-position-translate-y: -50%;transform:translate(var(--uk-position-translate-x), var(--uk-position-translate-y))}iframe[uk-cover],iframe[data-uk-cover]{pointer-events:none}[uk-cover]:where(img,video),[data-uk-cover]:where(img,video){position:absolute;top:0;left:0;width:100%;height:100%;box-sizing:border-box;object-fit:cover;object-position:center}.uk-cover-container{overflow:hidden;position:relative}.uk-background-default{background-color:#fff}.uk-background-muted{background-color:#f8f8f8}.uk-background-primary{background-color:#36c}.uk-background-secondary{background-color:#936}.uk-background-cover,.uk-background-contain,.uk-background-width-1-1,.uk-background-height-1-1{background-position:50% 50%;background-repeat:no-repeat}.uk-background-cover{background-size:cover}.uk-background-contain{background-size:contain}.uk-background-width-1-1{background-size:100%}.uk-background-height-1-1{background-size:auto 100%}.uk-background-top-left{background-position:0 0}.uk-background-top-center{background-position:50% 0}.uk-background-top-right{background-position:100% 0}.uk-background-center-left{background-position:0 50%}.uk-background-center-center{background-position:50% 50%}.uk-background-center-right{background-position:100% 50%}.uk-background-bottom-left{background-position:0 100%}.uk-background-bottom-center{background-position:50% 100%}.uk-background-bottom-right{background-position:100% 100%}.uk-background-norepeat{background-repeat:no-repeat}.uk-background-fixed{background-attachment:fixed;backface-visibility:hidden}@media (pointer: coarse){.uk-background-fixed{background-attachment:scroll}}@media (max-width: 639px){.uk-background-image\@s{background-image:none !important}}@media (max-width: 959px){.uk-background-image\@m{background-image:none !important}}@media (max-width: 1199px){.uk-background-image\@l{background-image:none !important}}@media (max-width: 1599px){.uk-background-image\@xl{background-image:none !important}}.uk-background-blend-multiply{background-blend-mode:multiply}.uk-background-blend-screen{background-blend-mode:screen}.uk-background-blend-overlay{background-blend-mode:overlay}.uk-background-blend-darken{background-blend-mode:darken}.uk-background-blend-lighten{background-blend-mode:lighten}.uk-background-blend-color-dodge{background-blend-mode:color-dodge}.uk-background-blend-color-burn{background-blend-mode:color-burn}.uk-background-blend-hard-light{background-blend-mode:hard-light}.uk-background-blend-soft-light{background-blend-mode:soft-light}.uk-background-blend-difference{background-blend-mode:difference}.uk-background-blend-exclusion{background-blend-mode:exclusion}.uk-background-blend-hue{background-blend-mode:hue}.uk-background-blend-saturation{background-blend-mode:saturation}.uk-background-blend-color{background-blend-mode:color}.uk-background-blend-luminosity{background-blend-mode:luminosity}[class*=uk-align]{display:block;margin-bottom:30px}*+[class*=uk-align]{margin-top:30px}.uk-align-center{margin-left:auto;margin-right:auto}.uk-align-left{margin-top:0;margin-right:30px;float:left}.uk-align-right{margin-top:0;margin-left:30px;float:right}@media (min-width: 640px){.uk-align-left\@s{margin-top:0;margin-right:30px;float:left}.uk-align-right\@s{margin-top:0;margin-left:30px;float:right}}@media (min-width: 960px){.uk-align-left\@m{margin-top:0;margin-right:30px;float:left}.uk-align-right\@m{margin-top:0;margin-left:30px;float:right}}@media (min-width: 1200px){.uk-align-left\@l{margin-top:0;float:left}.uk-align-right\@l{margin-top:0;float:right}.uk-align-left,.uk-align-left\@s,.uk-align-left\@m,.uk-align-left\@l{margin-right:40px}.uk-align-right,.uk-align-right\@s,.uk-align-right\@m,.uk-align-right\@l{margin-left:40px}}@media (min-width: 1600px){.uk-align-left\@xl{margin-top:0;margin-right:40px;float:left}.uk-align-right\@xl{margin-top:0;margin-left:40px;float:right}}.uk-svg,.uk-svg:not(.uk-preserve) [fill*="#"]:not(.uk-preserve){fill:currentcolor}.uk-svg:not(.uk-preserve) [stroke*="#"]:not(.uk-preserve){stroke:currentcolor}.uk-svg{transform:translate(0, 0)}.uk-panel{display:flow-root;position:relative;box-sizing:border-box}.uk-panel>:last-child{margin-bottom:0}.uk-panel-scrollable{height:170px;padding:10px;border:1px solid #e5e5e5;overflow:auto;resize:both}.uk-clearfix::before{content:"";display:table-cell}.uk-clearfix::after{content:"";display:table;clear:both}.uk-float-left{float:left}.uk-float-right{float:right}[class*=uk-float-]{max-width:100%}.uk-overflow-hidden{overflow:hidden}.uk-overflow-auto{overflow:auto}.uk-overflow-auto>:last-child{margin-bottom:0}.uk-box-sizing-content{box-sizing:content-box}.uk-box-sizing-border{box-sizing:border-box}.uk-resize{resize:both}.uk-resize-horizontal{resize:horizontal}.uk-resize-vertical{resize:vertical}.uk-display-block{display:block !important}.uk-display-inline{display:inline !important}.uk-display-inline-block{display:inline-block !important}[class*=uk-inline]{display:inline-block;position:relative;max-width:100%;vertical-align:middle;-webkit-backface-visibility:hidden}.uk-inline-clip{overflow:hidden}.uk-preserve-width,.uk-preserve-width canvas,.uk-preserve-width img,.uk-preserve-width svg,.uk-preserve-width video{max-width:none}.uk-responsive-width,.uk-responsive-height{box-sizing:border-box}.uk-responsive-width{max-width:100% !important;height:auto}.uk-responsive-height{max-height:100%;width:auto;max-width:none}[uk-responsive],[data-uk-responsive]{max-width:100%}.uk-object-cover{object-fit:cover}.uk-object-contain{object-fit:contain}.uk-object-fill{object-fit:fill}.uk-object-none{object-fit:none}.uk-object-scale-down{object-fit:scale-down}.uk-object-top-left{object-position:0 0}.uk-object-top-center{object-position:50% 0}.uk-object-top-right{object-position:100% 0}.uk-object-center-left{object-position:0 50%}.uk-object-center-center{object-position:50% 50%}.uk-object-center-right{object-position:100% 50%}.uk-object-bottom-left{object-position:0 100%}.uk-object-bottom-center{object-position:50% 100%}.uk-object-bottom-right{object-position:100% 100%}.uk-border-circle{border-radius:50%}.uk-border-pill{border-radius:500px}.uk-border-rounded{border-radius:5px}.uk-inline-clip[class*=uk-border-]{-webkit-transform:translateZ(0)}.uk-box-shadow-small{box-shadow:0 2px 8px rgba(0,0,0,.08)}.uk-box-shadow-medium{box-shadow:0 5px 15px rgba(0,0,0,.08)}.uk-box-shadow-large{box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-box-shadow-xlarge{box-shadow:0 28px 50px rgba(0,0,0,.16)}[class*=uk-box-shadow-hover]{transition:box-shadow .1s ease-in-out}.uk-box-shadow-hover-small:hover{box-shadow:0 2px 8px rgba(0,0,0,.08)}.uk-box-shadow-hover-medium:hover{box-shadow:0 5px 15px rgba(0,0,0,.08)}.uk-box-shadow-hover-large:hover{box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-box-shadow-hover-xlarge:hover{box-shadow:0 28px 50px rgba(0,0,0,.16)}@supports (filter: blur(0)){.uk-box-shadow-bottom{display:inline-block;position:relative;z-index:0;max-width:100%;vertical-align:middle}.uk-box-shadow-bottom::after{content:"";position:absolute;bottom:-30px;left:0;right:0;z-index:-1;height:30px;border-radius:100%;background:#444;filter:blur(20px);will-change:filter}}.uk-dropcap::first-letter,.uk-dropcap>p:first-of-type::first-letter{display:block;margin-right:10px;float:left;font-size:4.5em;line-height:1;margin-bottom:-2px}@-moz-document url-prefix(){.uk-dropcap::first-letter,.uk-dropcap>p:first-of-type::first-letter{margin-top:1.1%}}.uk-logo{font-size:1.5rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";color:#333;text-decoration:none}:where(.uk-logo){display:inline-block;vertical-align:middle}.uk-logo:hover{color:#333;text-decoration:none}.uk-logo :where(img,svg,video){display:block}.uk-logo-inverse{display:none}.uk-disabled{pointer-events:none}.uk-drag,.uk-drag *{cursor:move}.uk-drag iframe{pointer-events:none}.uk-dragover{box-shadow:0 0 20px rgba(100,100,100,.3)}.uk-blend-multiply{mix-blend-mode:multiply}.uk-blend-screen{mix-blend-mode:screen}.uk-blend-overlay{mix-blend-mode:overlay}.uk-blend-darken{mix-blend-mode:darken}.uk-blend-lighten{mix-blend-mode:lighten}.uk-blend-color-dodge{mix-blend-mode:color-dodge}.uk-blend-color-burn{mix-blend-mode:color-burn}.uk-blend-hard-light{mix-blend-mode:hard-light}.uk-blend-soft-light{mix-blend-mode:soft-light}.uk-blend-difference{mix-blend-mode:difference}.uk-blend-exclusion{mix-blend-mode:exclusion}.uk-blend-hue{mix-blend-mode:hue}.uk-blend-saturation{mix-blend-mode:saturation}.uk-blend-color{mix-blend-mode:color}.uk-blend-luminosity{mix-blend-mode:luminosity}.uk-transform-center{transform:translate(-50%, -50%)}.uk-transform-origin-top-left{transform-origin:0 0}.uk-transform-origin-top-center{transform-origin:50% 0}.uk-transform-origin-top-right{transform-origin:100% 0}.uk-transform-origin-center-left{transform-origin:0 50%}.uk-transform-origin-center-right{transform-origin:100% 50%}.uk-transform-origin-bottom-left{transform-origin:0 100%}.uk-transform-origin-bottom-center{transform-origin:50% 100%}.uk-transform-origin-bottom-right{transform-origin:100% 100%}.uk-flex{display:flex}.uk-flex-inline{display:inline-flex}.uk-flex-left{justify-content:flex-start}.uk-flex-center{justify-content:center}.uk-flex-right{justify-content:flex-end}.uk-flex-between{justify-content:space-between}.uk-flex-around{justify-content:space-around}@media (min-width: 640px){.uk-flex-left\@s{justify-content:flex-start}.uk-flex-center\@s{justify-content:center}.uk-flex-right\@s{justify-content:flex-end}.uk-flex-between\@s{justify-content:space-between}.uk-flex-around\@s{justify-content:space-around}}@media (min-width: 960px){.uk-flex-left\@m{justify-content:flex-start}.uk-flex-center\@m{justify-content:center}.uk-flex-right\@m{justify-content:flex-end}.uk-flex-between\@m{justify-content:space-between}.uk-flex-around\@m{justify-content:space-around}}@media (min-width: 1200px){.uk-flex-left\@l{justify-content:flex-start}.uk-flex-center\@l{justify-content:center}.uk-flex-right\@l{justify-content:flex-end}.uk-flex-between\@l{justify-content:space-between}.uk-flex-around\@l{justify-content:space-around}}@media (min-width: 1600px){.uk-flex-left\@xl{justify-content:flex-start}.uk-flex-center\@xl{justify-content:center}.uk-flex-right\@xl{justify-content:flex-end}.uk-flex-between\@xl{justify-content:space-between}.uk-flex-around\@xl{justify-content:space-around}}.uk-flex-stretch{align-items:stretch}.uk-flex-top{align-items:flex-start}.uk-flex-middle{align-items:center}.uk-flex-bottom{align-items:flex-end}.uk-flex-row{flex-direction:row}.uk-flex-row-reverse{flex-direction:row-reverse}.uk-flex-column{flex-direction:column}.uk-flex-column-reverse{flex-direction:column-reverse}.uk-flex-nowrap{flex-wrap:nowrap}.uk-flex-wrap{flex-wrap:wrap}.uk-flex-wrap-reverse{flex-wrap:wrap-reverse}.uk-flex-wrap-stretch{align-content:stretch}.uk-flex-wrap-top{align-content:flex-start}.uk-flex-wrap-middle{align-content:center}.uk-flex-wrap-bottom{align-content:flex-end}.uk-flex-wrap-between{align-content:space-between}.uk-flex-wrap-around{align-content:space-around}.uk-flex-first{order:-1}.uk-flex-last{order:99}@media (min-width: 640px){.uk-flex-first\@s{order:-1}.uk-flex-last\@s{order:99}}@media (min-width: 960px){.uk-flex-first\@m{order:-1}.uk-flex-last\@m{order:99}}@media (min-width: 1200px){.uk-flex-first\@l{order:-1}.uk-flex-last\@l{order:99}}@media (min-width: 1600px){.uk-flex-first\@xl{order:-1}.uk-flex-last\@xl{order:99}}.uk-flex-none{flex:none}.uk-flex-auto{flex:auto}.uk-flex-1{flex:1}.uk-margin{margin-bottom:20px}*+.uk-margin{margin-top:20px !important}.uk-margin-top{margin-top:20px !important}.uk-margin-bottom{margin-bottom:20px !important}.uk-margin-left{margin-left:20px !important}.uk-margin-right{margin-right:20px !important}.uk-margin-small{margin-bottom:10px}*+.uk-margin-small{margin-top:10px !important}.uk-margin-small-top{margin-top:10px !important}.uk-margin-small-bottom{margin-bottom:10px !important}.uk-margin-small-left{margin-left:10px !important}.uk-margin-small-right{margin-right:10px !important}.uk-margin-medium{margin-bottom:40px}*+.uk-margin-medium{margin-top:40px !important}.uk-margin-medium-top{margin-top:40px !important}.uk-margin-medium-bottom{margin-bottom:40px !important}.uk-margin-medium-left{margin-left:40px !important}.uk-margin-medium-right{margin-right:40px !important}.uk-margin-large{margin-bottom:40px}*+.uk-margin-large{margin-top:40px !important}.uk-margin-large-top{margin-top:40px !important}.uk-margin-large-bottom{margin-bottom:40px !important}.uk-margin-large-left{margin-left:40px !important}.uk-margin-large-right{margin-right:40px !important}@media (min-width: 1200px){.uk-margin-large{margin-bottom:70px}*+.uk-margin-large{margin-top:70px !important}.uk-margin-large-top{margin-top:70px !important}.uk-margin-large-bottom{margin-bottom:70px !important}.uk-margin-large-left{margin-left:70px !important}.uk-margin-large-right{margin-right:70px !important}}.uk-margin-xlarge{margin-bottom:70px}*+.uk-margin-xlarge{margin-top:70px !important}.uk-margin-xlarge-top{margin-top:70px !important}.uk-margin-xlarge-bottom{margin-bottom:70px !important}.uk-margin-xlarge-left{margin-left:70px !important}.uk-margin-xlarge-right{margin-right:70px !important}@media (min-width: 1200px){.uk-margin-xlarge{margin-bottom:140px}*+.uk-margin-xlarge{margin-top:140px !important}.uk-margin-xlarge-top{margin-top:140px !important}.uk-margin-xlarge-bottom{margin-bottom:140px !important}.uk-margin-xlarge-left{margin-left:140px !important}.uk-margin-xlarge-right{margin-right:140px !important}}.uk-margin-auto{margin-left:auto !important;margin-right:auto !important}.uk-margin-auto-top{margin-top:auto !important}.uk-margin-auto-bottom{margin-bottom:auto !important}.uk-margin-auto-left{margin-left:auto !important}.uk-margin-auto-right{margin-right:auto !important}.uk-margin-auto-vertical{margin-top:auto !important;margin-bottom:auto !important}@media (min-width: 640px){.uk-margin-auto\@s{margin-left:auto !important;margin-right:auto !important}.uk-margin-auto-left\@s{margin-left:auto !important}.uk-margin-auto-right\@s{margin-right:auto !important}}@media (min-width: 960px){.uk-margin-auto\@m{margin-left:auto !important;margin-right:auto !important}.uk-margin-auto-left\@m{margin-left:auto !important}.uk-margin-auto-right\@m{margin-right:auto !important}}@media (min-width: 1200px){.uk-margin-auto\@l{margin-left:auto !important;margin-right:auto !important}.uk-margin-auto-left\@l{margin-left:auto !important}.uk-margin-auto-right\@l{margin-right:auto !important}}@media (min-width: 1600px){.uk-margin-auto\@xl{margin-left:auto !important;margin-right:auto !important}.uk-margin-auto-left\@xl{margin-left:auto !important}.uk-margin-auto-right\@xl{margin-right:auto !important}}.uk-margin-remove{margin:0 !important}.uk-margin-remove-top{margin-top:0 !important}.uk-margin-remove-bottom{margin-bottom:0 !important}.uk-margin-remove-left{margin-left:0 !important}.uk-margin-remove-right{margin-right:0 !important}.uk-margin-remove-vertical{margin-top:0 !important;margin-bottom:0 !important}.uk-margin-remove-adjacent+*,.uk-margin-remove-first-child>:first-child{margin-top:0 !important}.uk-margin-remove-last-child>:last-child{margin-bottom:0 !important}@media (min-width: 640px){.uk-margin-remove-left\@s{margin-left:0 !important}.uk-margin-remove-right\@s{margin-right:0 !important}}@media (min-width: 960px){.uk-margin-remove-left\@m{margin-left:0 !important}.uk-margin-remove-right\@m{margin-right:0 !important}}@media (min-width: 1200px){.uk-margin-remove-left\@l{margin-left:0 !important}.uk-margin-remove-right\@l{margin-right:0 !important}}@media (min-width: 1600px){.uk-margin-remove-left\@xl{margin-left:0 !important}.uk-margin-remove-right\@xl{margin-right:0 !important}}.uk-padding{padding:30px}@media (min-width: 1200px){.uk-padding{padding:40px}}.uk-padding-small{padding:15px}.uk-padding-large{padding:40px}@media (min-width: 1200px){.uk-padding-large{padding:70px}}.uk-padding-remove{padding:0 !important}.uk-padding-remove-top{padding-top:0 !important}.uk-padding-remove-bottom{padding-bottom:0 !important}.uk-padding-remove-left{padding-left:0 !important}.uk-padding-remove-right{padding-right:0 !important}.uk-padding-remove-vertical{padding-top:0 !important;padding-bottom:0 !important}.uk-padding-remove-horizontal{padding-left:0 !important;padding-right:0 !important}:root{--uk-position-margin-offset: 0px}[class*=uk-position-top],[class*=uk-position-bottom],[class*=uk-position-left],[class*=uk-position-right],[class*=uk-position-center]{position:absolute !important;max-width:calc(100% - (var(--uk-position-margin-offset) * 2));box-sizing:border-box}.uk-position-top{top:0;left:0;right:0}.uk-position-bottom{bottom:0;left:0;right:0}.uk-position-left{top:0;bottom:0;left:0}.uk-position-right{top:0;bottom:0;right:0}.uk-position-top-left{top:0;left:0}.uk-position-top-right{top:0;right:0}.uk-position-bottom-left{bottom:0;left:0}.uk-position-bottom-right{bottom:0;right:0}.uk-position-center{top:calc(50% - var(--uk-position-margin-offset));left:calc(50% - var(--uk-position-margin-offset));--uk-position-translate-x: -50%;--uk-position-translate-y: -50%;transform:translate(var(--uk-position-translate-x), var(--uk-position-translate-y));width:max-content}[class*=uk-position-center-left],[class*=uk-position-center-right]{top:calc(50% - var(--uk-position-margin-offset));--uk-position-translate-y: -50%;transform:translate(0, var(--uk-position-translate-y))}.uk-position-center-left{left:0}.uk-position-center-right{right:0}.uk-position-center-left-out{right:100%;width:max-content}.uk-position-center-right-out{left:100%;width:max-content}.uk-position-top-center,.uk-position-bottom-center{left:calc(50% - var(--uk-position-margin-offset));--uk-position-translate-x: -50%;transform:translate(var(--uk-position-translate-x), 0);width:max-content}.uk-position-top-center{top:0}.uk-position-bottom-center{bottom:0}.uk-position-cover{position:absolute;top:0;bottom:0;left:0;right:0}.uk-position-small{margin:15px;--uk-position-margin-offset: 15px}.uk-position-medium{margin:30px;--uk-position-margin-offset: 30px}.uk-position-large{margin:30px;--uk-position-margin-offset: 30px}@media (min-width: 1200px){.uk-position-large{margin:50px;--uk-position-margin-offset: 50px}}.uk-position-relative{position:relative !important}.uk-position-absolute{position:absolute !important}.uk-position-fixed{position:fixed !important}.uk-position-sticky{position:sticky !important}.uk-position-z-index{z-index:1}.uk-position-z-index-zero{z-index:0}.uk-position-z-index-negative{z-index:-1}.uk-position-z-index-high{z-index:990}:where(.uk-transition-fade),:where([class*=uk-transition-scale]),:where([class*=uk-transition-slide]){--uk-position-translate-x: 0;--uk-position-translate-y: 0}.uk-transition-fade,[class*=uk-transition-scale],[class*=uk-transition-slide]{--uk-translate-x: 0;--uk-translate-y: 0;--uk-scale-x: 1;--uk-scale-y: 1;transform:translate(var(--uk-position-translate-x), var(--uk-position-translate-y)) translate(var(--uk-translate-x), var(--uk-translate-y)) scale(var(--uk-scale-x), var(--uk-scale-y));transition:.3s ease-out;transition-property:opacity,transform,filter;opacity:0}.uk-transition-toggle:hover .uk-transition-fade,.uk-transition-toggle:focus .uk-transition-fade,.uk-transition-toggle .uk-transition-fade:focus-within,.uk-transition-active.uk-active .uk-transition-fade{opacity:1}[class*=uk-transition-scale]{-webkit-backface-visibility:hidden}.uk-transition-scale-up{--uk-scale-x: 1;--uk-scale-y: 1}.uk-transition-scale-down{--uk-scale-x: 1.03;--uk-scale-y: 1.03}.uk-transition-toggle:hover .uk-transition-scale-up,.uk-transition-toggle:focus .uk-transition-scale-up,.uk-transition-toggle .uk-transition-scale-up:focus-within,.uk-transition-active.uk-active .uk-transition-scale-up{--uk-scale-x: 1.03;--uk-scale-y: 1.03;opacity:1}.uk-transition-toggle:hover .uk-transition-scale-down,.uk-transition-toggle:focus .uk-transition-scale-down,.uk-transition-toggle .uk-transition-scale-down:focus-within,.uk-transition-active.uk-active .uk-transition-scale-down{--uk-scale-x: 1;--uk-scale-y: 1;opacity:1}.uk-transition-slide-top{--uk-translate-y: -100%}.uk-transition-slide-bottom{--uk-translate-y: 100%}.uk-transition-slide-left{--uk-translate-x: -100%}.uk-transition-slide-right{--uk-translate-x: 100%}.uk-transition-slide-top-small{--uk-translate-y: calc(-1 * 10px)}.uk-transition-slide-bottom-small{--uk-translate-y: 10px}.uk-transition-slide-left-small{--uk-translate-x: calc(-1 * 10px)}.uk-transition-slide-right-small{--uk-translate-x: 10px}.uk-transition-slide-top-medium{--uk-translate-y: calc(-1 * 50px)}.uk-transition-slide-bottom-medium{--uk-translate-y: 50px}.uk-transition-slide-left-medium{--uk-translate-x: calc(-1 * 50px)}.uk-transition-slide-right-medium{--uk-translate-x: 50px}.uk-transition-toggle:hover [class*=uk-transition-slide],.uk-transition-toggle:focus [class*=uk-transition-slide],.uk-transition-toggle [class*=uk-transition-slide]:focus-within,.uk-transition-active.uk-active [class*=uk-transition-slide]{--uk-translate-x: 0;--uk-translate-y: 0;opacity:1}.uk-transition-opaque{opacity:1}.uk-transition-slow{transition-duration:.7s}.uk-transition-disable,.uk-transition-disable *{transition:none !important}[hidden],.uk-hidden{display:none !important}@media (min-width: 640px){.uk-hidden\@s{display:none !important}}@media (min-width: 960px){.uk-hidden\@m{display:none !important}}@media (min-width: 1200px){.uk-hidden\@l{display:none !important}}@media (min-width: 1600px){.uk-hidden\@xl{display:none !important}}@media (max-width: 639px){.uk-visible\@s{display:none !important}}@media (max-width: 959px){.uk-visible\@m{display:none !important}}@media (max-width: 1199px){.uk-visible\@l{display:none !important}}@media (max-width: 1599px){.uk-visible\@xl{display:none !important}}.uk-invisible{visibility:hidden !important}.uk-hidden-visually:not(:focus):not(:active):not(:focus-within),.uk-visible-toggle:not(:hover):not(:focus) .uk-hidden-hover:not(:focus-within){position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;border:0 !important;margin:0 !important;overflow:hidden !important;clip-path:inset(50%) !important;white-space:nowrap !important}.uk-visible-toggle:not(:hover):not(:focus) .uk-invisible-hover:not(:focus-within){opacity:0 !important}@media (hover: none){.uk-hidden-touch{display:none !important}}@media (hover){.uk-hidden-notouch{display:none !important}}.uk-light,.uk-section-primary:not(.uk-preserve-color),.uk-section-secondary:not(.uk-preserve-color),.uk-tile-primary:not(.uk-preserve-color),.uk-tile-secondary:not(.uk-preserve-color),.uk-card-primary.uk-card-body,.uk-card-primary>:not([class*=uk-card-media]),.uk-card-secondary.uk-card-body,.uk-card-secondary>:not([class*=uk-card-media]),.uk-overlay-primary,.uk-offcanvas-bar{color:rgba(255,255,255,.7)}.uk-light .uk-accordion-title::before,.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-card-primary.uk-card-body .uk-accordion-title::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-accordion-title::before,.uk-card-secondary.uk-card-body .uk-accordion-title::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-accordion-title::before,.uk-overlay-primary .uk-accordion-title::before,.uk-offcanvas-bar .uk-accordion-title::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,.7)%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,.7)%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-open>.uk-accordion-title::before,.uk-section-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-section-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-tile-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-card-primary.uk-card-body .uk-open>.uk-accordion-title::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-open>.uk-accordion-title::before,.uk-card-secondary.uk-card-body .uk-open>.uk-accordion-title::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-open>.uk-accordion-title::before,.uk-overlay-primary .uk-open>.uk-accordion-title::before,.uk-offcanvas-bar .uk-open>.uk-accordion-title::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,.7)%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-article-meta,.uk-section-primary:not(.uk-preserve-color) .uk-article-meta,.uk-section-secondary:not(.uk-preserve-color) .uk-article-meta,.uk-tile-primary:not(.uk-preserve-color) .uk-article-meta,.uk-tile-secondary:not(.uk-preserve-color) .uk-article-meta,.uk-card-primary.uk-card-body .uk-article-meta,.uk-card-primary>:not([class*=uk-card-media]) .uk-article-meta,.uk-card-secondary.uk-card-body .uk-article-meta,.uk-card-secondary>:not([class*=uk-card-media]) .uk-article-meta,.uk-overlay-primary .uk-article-meta,.uk-offcanvas-bar .uk-article-meta{color:rgba(255,255,255,.5)}.uk-light .uk-badge,.uk-section-primary:not(.uk-preserve-color) .uk-badge,.uk-section-secondary:not(.uk-preserve-color) .uk-badge,.uk-tile-primary:not(.uk-preserve-color) .uk-badge,.uk-tile-secondary:not(.uk-preserve-color) .uk-badge,.uk-card-primary.uk-card-body .uk-badge,.uk-card-primary>:not([class*=uk-card-media]) .uk-badge,.uk-card-secondary.uk-card-body .uk-badge,.uk-card-secondary>:not([class*=uk-card-media]) .uk-badge,.uk-overlay-primary .uk-badge,.uk-offcanvas-bar .uk-badge{background-color:#fff;color:#666 !important}.uk-light a,.uk-light .uk-link,.uk-section-primary:not(.uk-preserve-color) a,.uk-section-primary:not(.uk-preserve-color) .uk-link,.uk-section-secondary:not(.uk-preserve-color) a,.uk-section-secondary:not(.uk-preserve-color) .uk-link,.uk-tile-primary:not(.uk-preserve-color) a,.uk-tile-primary:not(.uk-preserve-color) .uk-link,.uk-tile-secondary:not(.uk-preserve-color) a,.uk-tile-secondary:not(.uk-preserve-color) .uk-link,.uk-card-primary.uk-card-body a,.uk-card-primary.uk-card-body .uk-link,.uk-card-primary>:not([class*=uk-card-media]) a,.uk-card-primary>:not([class*=uk-card-media]) .uk-link,.uk-card-secondary.uk-card-body a,.uk-card-secondary.uk-card-body .uk-link,.uk-card-secondary>:not([class*=uk-card-media]) a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link,.uk-overlay-primary a,.uk-overlay-primary .uk-link,.uk-offcanvas-bar a,.uk-offcanvas-bar .uk-link{color:#fff}.uk-light a:hover,.uk-light .uk-link:hover,.uk-light .uk-link-toggle:hover .uk-link,.uk-section-primary:not(.uk-preserve-color) a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-section-secondary:not(.uk-preserve-color) a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-tile-primary:not(.uk-preserve-color) a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-tile-secondary:not(.uk-preserve-color) a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-card-primary.uk-card-body a:hover,.uk-card-primary.uk-card-body .uk-link:hover,.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link,.uk-card-primary>:not([class*=uk-card-media]) a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link,.uk-card-secondary.uk-card-body a:hover,.uk-card-secondary.uk-card-body .uk-link:hover,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link,.uk-card-secondary>:not([class*=uk-card-media]) a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link,.uk-overlay-primary a:hover,.uk-overlay-primary .uk-link:hover,.uk-overlay-primary .uk-link-toggle:hover .uk-link,.uk-offcanvas-bar a:hover,.uk-offcanvas-bar .uk-link:hover,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link{color:#fff}.uk-light :not(pre)>code,.uk-light :not(pre)>kbd,.uk-light :not(pre)>samp,.uk-section-primary:not(.uk-preserve-color) :not(pre)>code,.uk-section-primary:not(.uk-preserve-color) :not(pre)>kbd,.uk-section-primary:not(.uk-preserve-color) :not(pre)>samp,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>code,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>kbd,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>samp,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>code,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>kbd,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>samp,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>code,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>kbd,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>samp,.uk-card-primary.uk-card-body :not(pre)>code,.uk-card-primary.uk-card-body :not(pre)>kbd,.uk-card-primary.uk-card-body :not(pre)>samp,.uk-card-primary>:not([class*=uk-card-media]) :not(pre)>code,.uk-card-primary>:not([class*=uk-card-media]) :not(pre)>kbd,.uk-card-primary>:not([class*=uk-card-media]) :not(pre)>samp,.uk-card-secondary.uk-card-body :not(pre)>code,.uk-card-secondary.uk-card-body :not(pre)>kbd,.uk-card-secondary.uk-card-body :not(pre)>samp,.uk-card-secondary>:not([class*=uk-card-media]) :not(pre)>code,.uk-card-secondary>:not([class*=uk-card-media]) :not(pre)>kbd,.uk-card-secondary>:not([class*=uk-card-media]) :not(pre)>samp,.uk-overlay-primary :not(pre)>code,.uk-overlay-primary :not(pre)>kbd,.uk-overlay-primary :not(pre)>samp,.uk-offcanvas-bar :not(pre)>code,.uk-offcanvas-bar :not(pre)>kbd,.uk-offcanvas-bar :not(pre)>samp{color:rgba(255,255,255,.7);background-color:rgba(255,255,255,.1)}.uk-light em,.uk-section-primary:not(.uk-preserve-color) em,.uk-section-secondary:not(.uk-preserve-color) em,.uk-tile-primary:not(.uk-preserve-color) em,.uk-tile-secondary:not(.uk-preserve-color) em,.uk-card-primary.uk-card-body em,.uk-card-primary>:not([class*=uk-card-media]) em,.uk-card-secondary.uk-card-body em,.uk-card-secondary>:not([class*=uk-card-media]) em,.uk-overlay-primary em,.uk-offcanvas-bar em{color:#fff}.uk-light h1,.uk-section-primary:not(.uk-preserve-color) h1,.uk-section-secondary:not(.uk-preserve-color) h1,.uk-tile-primary:not(.uk-preserve-color) h1,.uk-tile-secondary:not(.uk-preserve-color) h1,.uk-card-primary.uk-card-body h1,.uk-card-primary>:not([class*=uk-card-media]) h1,.uk-card-secondary.uk-card-body h1,.uk-card-secondary>:not([class*=uk-card-media]) h1,.uk-overlay-primary h1,.uk-offcanvas-bar h1,.uk-light .uk-h1,.uk-section-primary:not(.uk-preserve-color) .uk-h1,.uk-section-secondary:not(.uk-preserve-color) .uk-h1,.uk-tile-primary:not(.uk-preserve-color) .uk-h1,.uk-tile-secondary:not(.uk-preserve-color) .uk-h1,.uk-card-primary.uk-card-body .uk-h1,.uk-card-primary>:not([class*=uk-card-media]) .uk-h1,.uk-card-secondary.uk-card-body .uk-h1,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h1,.uk-overlay-primary .uk-h1,.uk-offcanvas-bar .uk-h1,.uk-light h2,.uk-section-primary:not(.uk-preserve-color) h2,.uk-section-secondary:not(.uk-preserve-color) h2,.uk-tile-primary:not(.uk-preserve-color) h2,.uk-tile-secondary:not(.uk-preserve-color) h2,.uk-card-primary.uk-card-body h2,.uk-card-primary>:not([class*=uk-card-media]) h2,.uk-card-secondary.uk-card-body h2,.uk-card-secondary>:not([class*=uk-card-media]) h2,.uk-overlay-primary h2,.uk-offcanvas-bar h2,.uk-light .uk-h2,.uk-light .markdown h1,.markdown .uk-light h1,.uk-section-primary:not(.uk-preserve-color) .uk-h2,.uk-section-primary:not(.uk-preserve-color) .markdown h1,.markdown .uk-section-primary:not(.uk-preserve-color) h1,.uk-section-secondary:not(.uk-preserve-color) .uk-h2,.uk-section-secondary:not(.uk-preserve-color) .markdown h1,.markdown .uk-section-secondary:not(.uk-preserve-color) h1,.uk-tile-primary:not(.uk-preserve-color) .uk-h2,.uk-tile-primary:not(.uk-preserve-color) .markdown h1,.markdown .uk-tile-primary:not(.uk-preserve-color) h1,.uk-tile-secondary:not(.uk-preserve-color) .uk-h2,.uk-tile-secondary:not(.uk-preserve-color) .markdown h1,.markdown .uk-tile-secondary:not(.uk-preserve-color) h1,.uk-card-primary.uk-card-body .uk-h2,.uk-card-primary.uk-card-body .markdown h1,.markdown .uk-card-primary.uk-card-body h1,.uk-card-primary>:not([class*=uk-card-media]) .uk-h2,.uk-card-primary>:not([class*=uk-card-media]) .markdown h1,.markdown .uk-card-primary>:not([class*=uk-card-media]) h1,.uk-card-secondary.uk-card-body .uk-h2,.uk-card-secondary.uk-card-body .markdown h1,.markdown .uk-card-secondary.uk-card-body h1,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h2,.uk-card-secondary>:not([class*=uk-card-media]) .markdown h1,.markdown .uk-card-secondary>:not([class*=uk-card-media]) h1,.uk-overlay-primary .uk-h2,.uk-overlay-primary .markdown h1,.markdown .uk-overlay-primary h1,.uk-offcanvas-bar .uk-h2,.uk-offcanvas-bar .markdown h1,.markdown .uk-offcanvas-bar h1,.uk-light h3,.uk-section-primary:not(.uk-preserve-color) h3,.uk-section-secondary:not(.uk-preserve-color) h3,.uk-tile-primary:not(.uk-preserve-color) h3,.uk-tile-secondary:not(.uk-preserve-color) h3,.uk-card-primary.uk-card-body h3,.uk-card-primary>:not([class*=uk-card-media]) h3,.uk-card-secondary.uk-card-body h3,.uk-card-secondary>:not([class*=uk-card-media]) h3,.uk-overlay-primary h3,.uk-offcanvas-bar h3,.uk-light .uk-h3,.uk-light .markdown h2,.markdown .uk-light h2,.uk-section-primary:not(.uk-preserve-color) .uk-h3,.uk-section-primary:not(.uk-preserve-color) .markdown h2,.markdown .uk-section-primary:not(.uk-preserve-color) h2,.uk-section-secondary:not(.uk-preserve-color) .uk-h3,.uk-section-secondary:not(.uk-preserve-color) .markdown h2,.markdown .uk-section-secondary:not(.uk-preserve-color) h2,.uk-tile-primary:not(.uk-preserve-color) .uk-h3,.uk-tile-primary:not(.uk-preserve-color) .markdown h2,.markdown .uk-tile-primary:not(.uk-preserve-color) h2,.uk-tile-secondary:not(.uk-preserve-color) .uk-h3,.uk-tile-secondary:not(.uk-preserve-color) .markdown h2,.markdown .uk-tile-secondary:not(.uk-preserve-color) h2,.uk-card-primary.uk-card-body .uk-h3,.uk-card-primary.uk-card-body .markdown h2,.markdown .uk-card-primary.uk-card-body h2,.uk-card-primary>:not([class*=uk-card-media]) .uk-h3,.uk-card-primary>:not([class*=uk-card-media]) .markdown h2,.markdown .uk-card-primary>:not([class*=uk-card-media]) h2,.uk-card-secondary.uk-card-body .uk-h3,.uk-card-secondary.uk-card-body .markdown h2,.markdown .uk-card-secondary.uk-card-body h2,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h3,.uk-card-secondary>:not([class*=uk-card-media]) .markdown h2,.markdown .uk-card-secondary>:not([class*=uk-card-media]) h2,.uk-overlay-primary .uk-h3,.uk-overlay-primary .markdown h2,.markdown .uk-overlay-primary h2,.uk-offcanvas-bar .uk-h3,.uk-offcanvas-bar .markdown h2,.markdown .uk-offcanvas-bar h2,.uk-light h4,.uk-section-primary:not(.uk-preserve-color) h4,.uk-section-secondary:not(.uk-preserve-color) h4,.uk-tile-primary:not(.uk-preserve-color) h4,.uk-tile-secondary:not(.uk-preserve-color) h4,.uk-card-primary.uk-card-body h4,.uk-card-primary>:not([class*=uk-card-media]) h4,.uk-card-secondary.uk-card-body h4,.uk-card-secondary>:not([class*=uk-card-media]) h4,.uk-overlay-primary h4,.uk-offcanvas-bar h4,.uk-light .uk-h4,.uk-light .markdown h3,.markdown .uk-light h3,.uk-section-primary:not(.uk-preserve-color) .uk-h4,.uk-section-primary:not(.uk-preserve-color) .markdown h3,.markdown .uk-section-primary:not(.uk-preserve-color) h3,.uk-section-secondary:not(.uk-preserve-color) .uk-h4,.uk-section-secondary:not(.uk-preserve-color) .markdown h3,.markdown .uk-section-secondary:not(.uk-preserve-color) h3,.uk-tile-primary:not(.uk-preserve-color) .uk-h4,.uk-tile-primary:not(.uk-preserve-color) .markdown h3,.markdown .uk-tile-primary:not(.uk-preserve-color) h3,.uk-tile-secondary:not(.uk-preserve-color) .uk-h4,.uk-tile-secondary:not(.uk-preserve-color) .markdown h3,.markdown .uk-tile-secondary:not(.uk-preserve-color) h3,.uk-card-primary.uk-card-body .uk-h4,.uk-card-primary.uk-card-body .markdown h3,.markdown .uk-card-primary.uk-card-body h3,.uk-card-primary>:not([class*=uk-card-media]) .uk-h4,.uk-card-primary>:not([class*=uk-card-media]) .markdown h3,.markdown .uk-card-primary>:not([class*=uk-card-media]) h3,.uk-card-secondary.uk-card-body .uk-h4,.uk-card-secondary.uk-card-body .markdown h3,.markdown .uk-card-secondary.uk-card-body h3,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h4,.uk-card-secondary>:not([class*=uk-card-media]) .markdown h3,.markdown .uk-card-secondary>:not([class*=uk-card-media]) h3,.uk-overlay-primary .uk-h4,.uk-overlay-primary .markdown h3,.markdown .uk-overlay-primary h3,.uk-offcanvas-bar .uk-h4,.uk-offcanvas-bar .markdown h3,.markdown .uk-offcanvas-bar h3,.uk-light h5,.uk-section-primary:not(.uk-preserve-color) h5,.uk-section-secondary:not(.uk-preserve-color) h5,.uk-tile-primary:not(.uk-preserve-color) h5,.uk-tile-secondary:not(.uk-preserve-color) h5,.uk-card-primary.uk-card-body h5,.uk-card-primary>:not([class*=uk-card-media]) h5,.uk-card-secondary.uk-card-body h5,.uk-card-secondary>:not([class*=uk-card-media]) h5,.uk-overlay-primary h5,.uk-offcanvas-bar h5,.uk-light .uk-h5,.uk-section-primary:not(.uk-preserve-color) .uk-h5,.uk-section-secondary:not(.uk-preserve-color) .uk-h5,.uk-tile-primary:not(.uk-preserve-color) .uk-h5,.uk-tile-secondary:not(.uk-preserve-color) .uk-h5,.uk-card-primary.uk-card-body .uk-h5,.uk-card-primary>:not([class*=uk-card-media]) .uk-h5,.uk-card-secondary.uk-card-body .uk-h5,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h5,.uk-overlay-primary .uk-h5,.uk-offcanvas-bar .uk-h5,.uk-light h6,.uk-section-primary:not(.uk-preserve-color) h6,.uk-section-secondary:not(.uk-preserve-color) h6,.uk-tile-primary:not(.uk-preserve-color) h6,.uk-tile-secondary:not(.uk-preserve-color) h6,.uk-card-primary.uk-card-body h6,.uk-card-primary>:not([class*=uk-card-media]) h6,.uk-card-secondary.uk-card-body h6,.uk-card-secondary>:not([class*=uk-card-media]) h6,.uk-overlay-primary h6,.uk-offcanvas-bar h6,.uk-light .uk-h6,.uk-section-primary:not(.uk-preserve-color) .uk-h6,.uk-section-secondary:not(.uk-preserve-color) .uk-h6,.uk-tile-primary:not(.uk-preserve-color) .uk-h6,.uk-tile-secondary:not(.uk-preserve-color) .uk-h6,.uk-card-primary.uk-card-body .uk-h6,.uk-card-primary>:not([class*=uk-card-media]) .uk-h6,.uk-card-secondary.uk-card-body .uk-h6,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h6,.uk-overlay-primary .uk-h6,.uk-offcanvas-bar .uk-h6,.uk-light .uk-heading-small,.uk-section-primary:not(.uk-preserve-color) .uk-heading-small,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-small,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-small,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-small,.uk-card-primary.uk-card-body .uk-heading-small,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-small,.uk-card-secondary.uk-card-body .uk-heading-small,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-small,.uk-overlay-primary .uk-heading-small,.uk-offcanvas-bar .uk-heading-small,.uk-light .uk-heading-medium,.uk-section-primary:not(.uk-preserve-color) .uk-heading-medium,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-medium,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-medium,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-medium,.uk-card-primary.uk-card-body .uk-heading-medium,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-medium,.uk-card-secondary.uk-card-body .uk-heading-medium,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-medium,.uk-overlay-primary .uk-heading-medium,.uk-offcanvas-bar .uk-heading-medium,.uk-light .uk-heading-large,.uk-section-primary:not(.uk-preserve-color) .uk-heading-large,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-large,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-large,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-large,.uk-card-primary.uk-card-body .uk-heading-large,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-large,.uk-card-secondary.uk-card-body .uk-heading-large,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-large,.uk-overlay-primary .uk-heading-large,.uk-offcanvas-bar .uk-heading-large,.uk-light .uk-heading-xlarge,.uk-section-primary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-card-primary.uk-card-body .uk-heading-xlarge,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-xlarge,.uk-card-secondary.uk-card-body .uk-heading-xlarge,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-xlarge,.uk-overlay-primary .uk-heading-xlarge,.uk-offcanvas-bar .uk-heading-xlarge,.uk-light .uk-heading-2xlarge,.uk-section-primary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-card-primary.uk-card-body .uk-heading-2xlarge,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-2xlarge,.uk-card-secondary.uk-card-body .uk-heading-2xlarge,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-2xlarge,.uk-overlay-primary .uk-heading-2xlarge,.uk-offcanvas-bar .uk-heading-2xlarge,.uk-light .uk-heading-3xlarge,.uk-section-primary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-card-primary.uk-card-body .uk-heading-3xlarge,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-3xlarge,.uk-card-secondary.uk-card-body .uk-heading-3xlarge,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-3xlarge,.uk-overlay-primary .uk-heading-3xlarge,.uk-offcanvas-bar .uk-heading-3xlarge,.uk-section-primary:not(.uk-preserve-color) h1,.uk-section-primary:not(.uk-preserve-color) .uk-h1,.uk-section-primary:not(.uk-preserve-color) h2,.uk-section-primary:not(.uk-preserve-color) .uk-h2,.uk-section-primary:not(.uk-preserve-color) .markdown h1,.markdown .uk-section-primary:not(.uk-preserve-color) h1,.uk-section-primary:not(.uk-preserve-color) h3,.uk-section-primary:not(.uk-preserve-color) .uk-h3,.uk-section-primary:not(.uk-preserve-color) .markdown h2,.markdown .uk-section-primary:not(.uk-preserve-color) h2,.uk-section-primary:not(.uk-preserve-color) h4,.uk-section-primary:not(.uk-preserve-color) .uk-h4,.uk-section-primary:not(.uk-preserve-color) .markdown h3,.markdown .uk-section-primary:not(.uk-preserve-color) h3,.uk-section-primary:not(.uk-preserve-color) h5,.uk-section-primary:not(.uk-preserve-color) .uk-h5,.uk-section-primary:not(.uk-preserve-color) h6,.uk-section-primary:not(.uk-preserve-color) .uk-h6,.uk-section-primary:not(.uk-preserve-color) .uk-heading-small,.uk-section-primary:not(.uk-preserve-color) .uk-heading-medium,.uk-section-primary:not(.uk-preserve-color) .uk-heading-large,.uk-section-primary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-section-primary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-section-primary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-section-secondary:not(.uk-preserve-color) h1,.uk-section-secondary:not(.uk-preserve-color) .uk-h1,.uk-section-secondary:not(.uk-preserve-color) h2,.uk-section-secondary:not(.uk-preserve-color) .uk-h2,.uk-section-secondary:not(.uk-preserve-color) .markdown h1,.markdown .uk-section-secondary:not(.uk-preserve-color) h1,.uk-section-secondary:not(.uk-preserve-color) h3,.uk-section-secondary:not(.uk-preserve-color) .uk-h3,.uk-section-secondary:not(.uk-preserve-color) .markdown h2,.markdown .uk-section-secondary:not(.uk-preserve-color) h2,.uk-section-secondary:not(.uk-preserve-color) h4,.uk-section-secondary:not(.uk-preserve-color) .uk-h4,.uk-section-secondary:not(.uk-preserve-color) .markdown h3,.markdown .uk-section-secondary:not(.uk-preserve-color) h3,.uk-section-secondary:not(.uk-preserve-color) h5,.uk-section-secondary:not(.uk-preserve-color) .uk-h5,.uk-section-secondary:not(.uk-preserve-color) h6,.uk-section-secondary:not(.uk-preserve-color) .uk-h6,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-small,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-medium,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-large,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-tile-primary:not(.uk-preserve-color) h1,.uk-tile-primary:not(.uk-preserve-color) .uk-h1,.uk-tile-primary:not(.uk-preserve-color) h2,.uk-tile-primary:not(.uk-preserve-color) .uk-h2,.uk-tile-primary:not(.uk-preserve-color) .markdown h1,.markdown .uk-tile-primary:not(.uk-preserve-color) h1,.uk-tile-primary:not(.uk-preserve-color) h3,.uk-tile-primary:not(.uk-preserve-color) .uk-h3,.uk-tile-primary:not(.uk-preserve-color) .markdown h2,.markdown .uk-tile-primary:not(.uk-preserve-color) h2,.uk-tile-primary:not(.uk-preserve-color) h4,.uk-tile-primary:not(.uk-preserve-color) .uk-h4,.uk-tile-primary:not(.uk-preserve-color) .markdown h3,.markdown .uk-tile-primary:not(.uk-preserve-color) h3,.uk-tile-primary:not(.uk-preserve-color) h5,.uk-tile-primary:not(.uk-preserve-color) .uk-h5,.uk-tile-primary:not(.uk-preserve-color) h6,.uk-tile-primary:not(.uk-preserve-color) .uk-h6,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-small,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-medium,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-large,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-tile-secondary:not(.uk-preserve-color) h1,.uk-tile-secondary:not(.uk-preserve-color) .uk-h1,.uk-tile-secondary:not(.uk-preserve-color) h2,.uk-tile-secondary:not(.uk-preserve-color) .uk-h2,.uk-tile-secondary:not(.uk-preserve-color) .markdown h1,.markdown .uk-tile-secondary:not(.uk-preserve-color) h1,.uk-tile-secondary:not(.uk-preserve-color) h3,.uk-tile-secondary:not(.uk-preserve-color) .uk-h3,.uk-tile-secondary:not(.uk-preserve-color) .markdown h2,.markdown .uk-tile-secondary:not(.uk-preserve-color) h2,.uk-tile-secondary:not(.uk-preserve-color) h4,.uk-tile-secondary:not(.uk-preserve-color) .uk-h4,.uk-tile-secondary:not(.uk-preserve-color) .markdown h3,.markdown .uk-tile-secondary:not(.uk-preserve-color) h3,.uk-tile-secondary:not(.uk-preserve-color) h5,.uk-tile-secondary:not(.uk-preserve-color) .uk-h5,.uk-tile-secondary:not(.uk-preserve-color) h6,.uk-tile-secondary:not(.uk-preserve-color) .uk-h6,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-small,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-medium,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-large,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-card-primary.uk-card-body h1,.uk-card-primary.uk-card-body .uk-h1,.uk-card-primary.uk-card-body h2,.uk-card-primary.uk-card-body .uk-h2,.uk-card-primary.uk-card-body .markdown h1,.markdown .uk-card-primary.uk-card-body h1,.uk-card-primary.uk-card-body h3,.uk-card-primary.uk-card-body .uk-h3,.uk-card-primary.uk-card-body .markdown h2,.markdown .uk-card-primary.uk-card-body h2,.uk-card-primary.uk-card-body h4,.uk-card-primary.uk-card-body .uk-h4,.uk-card-primary.uk-card-body .markdown h3,.markdown .uk-card-primary.uk-card-body h3,.uk-card-primary.uk-card-body h5,.uk-card-primary.uk-card-body .uk-h5,.uk-card-primary.uk-card-body h6,.uk-card-primary.uk-card-body .uk-h6,.uk-card-primary.uk-card-body .uk-heading-small,.uk-card-primary.uk-card-body .uk-heading-medium,.uk-card-primary.uk-card-body .uk-heading-large,.uk-card-primary.uk-card-body .uk-heading-xlarge,.uk-card-primary.uk-card-body .uk-heading-2xlarge,.uk-card-primary.uk-card-body .uk-heading-3xlarge,.uk-card-primary>:not([class*=uk-card-media]) h1,.uk-card-primary>:not([class*=uk-card-media]) .uk-h1,.uk-card-primary>:not([class*=uk-card-media]) h2,.uk-card-primary>:not([class*=uk-card-media]) .uk-h2,.uk-card-primary>:not([class*=uk-card-media]) .markdown h1,.markdown .uk-card-primary>:not([class*=uk-card-media]) h1,.uk-card-primary>:not([class*=uk-card-media]) h3,.uk-card-primary>:not([class*=uk-card-media]) .uk-h3,.uk-card-primary>:not([class*=uk-card-media]) .markdown h2,.markdown .uk-card-primary>:not([class*=uk-card-media]) h2,.uk-card-primary>:not([class*=uk-card-media]) h4,.uk-card-primary>:not([class*=uk-card-media]) .uk-h4,.uk-card-primary>:not([class*=uk-card-media]) .markdown h3,.markdown .uk-card-primary>:not([class*=uk-card-media]) h3,.uk-card-primary>:not([class*=uk-card-media]) h5,.uk-card-primary>:not([class*=uk-card-media]) .uk-h5,.uk-card-primary>:not([class*=uk-card-media]) h6,.uk-card-primary>:not([class*=uk-card-media]) .uk-h6,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-small,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-medium,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-large,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-xlarge,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-2xlarge,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-3xlarge,.uk-card-secondary.uk-card-body h1,.uk-card-secondary.uk-card-body .uk-h1,.uk-card-secondary.uk-card-body h2,.uk-card-secondary.uk-card-body .uk-h2,.uk-card-secondary.uk-card-body .markdown h1,.markdown .uk-card-secondary.uk-card-body h1,.uk-card-secondary.uk-card-body h3,.uk-card-secondary.uk-card-body .uk-h3,.uk-card-secondary.uk-card-body .markdown h2,.markdown .uk-card-secondary.uk-card-body h2,.uk-card-secondary.uk-card-body h4,.uk-card-secondary.uk-card-body .uk-h4,.uk-card-secondary.uk-card-body .markdown h3,.markdown .uk-card-secondary.uk-card-body h3,.uk-card-secondary.uk-card-body h5,.uk-card-secondary.uk-card-body .uk-h5,.uk-card-secondary.uk-card-body h6,.uk-card-secondary.uk-card-body .uk-h6,.uk-card-secondary.uk-card-body .uk-heading-small,.uk-card-secondary.uk-card-body .uk-heading-medium,.uk-card-secondary.uk-card-body .uk-heading-large,.uk-card-secondary.uk-card-body .uk-heading-xlarge,.uk-card-secondary.uk-card-body .uk-heading-2xlarge,.uk-card-secondary.uk-card-body .uk-heading-3xlarge,.uk-card-secondary>:not([class*=uk-card-media]) h1,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h1,.uk-card-secondary>:not([class*=uk-card-media]) h2,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h2,.uk-card-secondary>:not([class*=uk-card-media]) .markdown h1,.markdown .uk-card-secondary>:not([class*=uk-card-media]) h1,.uk-card-secondary>:not([class*=uk-card-media]) h3,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h3,.uk-card-secondary>:not([class*=uk-card-media]) .markdown h2,.markdown .uk-card-secondary>:not([class*=uk-card-media]) h2,.uk-card-secondary>:not([class*=uk-card-media]) h4,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h4,.uk-card-secondary>:not([class*=uk-card-media]) .markdown h3,.markdown .uk-card-secondary>:not([class*=uk-card-media]) h3,.uk-card-secondary>:not([class*=uk-card-media]) h5,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h5,.uk-card-secondary>:not([class*=uk-card-media]) h6,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h6,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-small,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-medium,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-large,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-xlarge,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-2xlarge,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-3xlarge,.uk-overlay-primary h1,.uk-overlay-primary .uk-h1,.uk-overlay-primary h2,.uk-overlay-primary .uk-h2,.uk-overlay-primary .markdown h1,.markdown .uk-overlay-primary h1,.uk-overlay-primary h3,.uk-overlay-primary .uk-h3,.uk-overlay-primary .markdown h2,.markdown .uk-overlay-primary h2,.uk-overlay-primary h4,.uk-overlay-primary .uk-h4,.uk-overlay-primary .markdown h3,.markdown .uk-overlay-primary h3,.uk-overlay-primary h5,.uk-overlay-primary .uk-h5,.uk-overlay-primary h6,.uk-overlay-primary .uk-h6,.uk-overlay-primary .uk-heading-small,.uk-overlay-primary .uk-heading-medium,.uk-overlay-primary .uk-heading-large,.uk-overlay-primary .uk-heading-xlarge,.uk-overlay-primary .uk-heading-2xlarge,.uk-overlay-primary .uk-heading-3xlarge,.uk-offcanvas-bar h1,.uk-offcanvas-bar .uk-h1,.uk-offcanvas-bar h2,.uk-offcanvas-bar .uk-h2,.uk-offcanvas-bar .markdown h1,.markdown .uk-offcanvas-bar h1,.uk-offcanvas-bar h3,.uk-offcanvas-bar .uk-h3,.uk-offcanvas-bar .markdown h2,.markdown .uk-offcanvas-bar h2,.uk-offcanvas-bar h4,.uk-offcanvas-bar .uk-h4,.uk-offcanvas-bar .markdown h3,.markdown .uk-offcanvas-bar h3,.uk-offcanvas-bar h5,.uk-offcanvas-bar .uk-h5,.uk-offcanvas-bar h6,.uk-offcanvas-bar .uk-h6,.uk-offcanvas-bar .uk-heading-small,.uk-offcanvas-bar .uk-heading-medium,.uk-offcanvas-bar .uk-heading-large,.uk-offcanvas-bar .uk-heading-xlarge,.uk-offcanvas-bar .uk-heading-2xlarge,.uk-offcanvas-bar .uk-heading-3xlarge{color:#fff}.uk-light blockquote,.uk-section-primary:not(.uk-preserve-color) blockquote,.uk-section-secondary:not(.uk-preserve-color) blockquote,.uk-tile-primary:not(.uk-preserve-color) blockquote,.uk-tile-secondary:not(.uk-preserve-color) blockquote,.uk-card-primary.uk-card-body blockquote,.uk-card-primary>:not([class*=uk-card-media]) blockquote,.uk-card-secondary.uk-card-body blockquote,.uk-card-secondary>:not([class*=uk-card-media]) blockquote,.uk-overlay-primary blockquote,.uk-offcanvas-bar blockquote{color:#fff}.uk-light blockquote footer,.uk-section-primary:not(.uk-preserve-color) blockquote footer,.uk-section-secondary:not(.uk-preserve-color) blockquote footer,.uk-tile-primary:not(.uk-preserve-color) blockquote footer,.uk-tile-secondary:not(.uk-preserve-color) blockquote footer,.uk-card-primary.uk-card-body blockquote footer,.uk-card-primary>:not([class*=uk-card-media]) blockquote footer,.uk-card-secondary.uk-card-body blockquote footer,.uk-card-secondary>:not([class*=uk-card-media]) blockquote footer,.uk-overlay-primary blockquote footer,.uk-offcanvas-bar blockquote footer{color:rgba(255,255,255,.7)}.uk-light hr,.uk-light .uk-hr,.uk-section-primary:not(.uk-preserve-color) hr,.uk-section-primary:not(.uk-preserve-color) .uk-hr,.uk-section-secondary:not(.uk-preserve-color) hr,.uk-section-secondary:not(.uk-preserve-color) .uk-hr,.uk-tile-primary:not(.uk-preserve-color) hr,.uk-tile-primary:not(.uk-preserve-color) .uk-hr,.uk-tile-secondary:not(.uk-preserve-color) hr,.uk-tile-secondary:not(.uk-preserve-color) .uk-hr,.uk-card-primary.uk-card-body hr,.uk-card-primary.uk-card-body .uk-hr,.uk-card-primary>:not([class*=uk-card-media]) hr,.uk-card-primary>:not([class*=uk-card-media]) .uk-hr,.uk-card-secondary.uk-card-body hr,.uk-card-secondary.uk-card-body .uk-hr,.uk-card-secondary>:not([class*=uk-card-media]) hr,.uk-card-secondary>:not([class*=uk-card-media]) .uk-hr,.uk-overlay-primary hr,.uk-overlay-primary .uk-hr,.uk-offcanvas-bar hr,.uk-offcanvas-bar .uk-hr{border-top-color:rgba(255,255,255,.2)}.uk-light :focus-visible,.uk-section-primary:not(.uk-preserve-color) :focus-visible,.uk-section-secondary:not(.uk-preserve-color) :focus-visible,.uk-tile-primary:not(.uk-preserve-color) :focus-visible,.uk-tile-secondary:not(.uk-preserve-color) :focus-visible,.uk-card-primary.uk-card-body :focus-visible,.uk-card-primary>:not([class*=uk-card-media]) :focus-visible,.uk-card-secondary.uk-card-body :focus-visible,.uk-card-secondary>:not([class*=uk-card-media]) :focus-visible,.uk-overlay-primary :focus-visible,.uk-offcanvas-bar :focus-visible{outline-color:#fff}.uk-light .uk-breadcrumb>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-card-primary.uk-card-body .uk-breadcrumb>*>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-breadcrumb>*>*,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-breadcrumb>*>*,.uk-overlay-primary .uk-breadcrumb>*>*,.uk-offcanvas-bar .uk-breadcrumb>*>*{color:rgba(255,255,255,.5)}.uk-light .uk-breadcrumb>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-card-primary.uk-card-body .uk-breadcrumb>*>:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-breadcrumb>*>:hover,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-breadcrumb>*>:hover,.uk-overlay-primary .uk-breadcrumb>*>:hover,.uk-offcanvas-bar .uk-breadcrumb>*>:hover{color:rgba(255,255,255,.7)}.uk-light .uk-breadcrumb>:last-child>*,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-card-primary.uk-card-body .uk-breadcrumb>:last-child>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-breadcrumb>:last-child>*,.uk-card-secondary.uk-card-body .uk-breadcrumb>:last-child>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-breadcrumb>:last-child>*,.uk-overlay-primary .uk-breadcrumb>:last-child>*,.uk-offcanvas-bar .uk-breadcrumb>:last-child>*{color:rgba(255,255,255,.7)}.uk-light .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary.uk-card-body .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-overlay-primary .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-offcanvas-bar .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before{color:rgba(255,255,255,.5)}.uk-light .uk-button-default,.uk-section-primary:not(.uk-preserve-color) .uk-button-default,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default,.uk-card-primary.uk-card-body .uk-button-default,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-default,.uk-card-secondary.uk-card-body .uk-button-default,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-default,.uk-overlay-primary .uk-button-default,.uk-offcanvas-bar .uk-button-default{background-color:rgba(0,0,0,0);color:#fff;border-color:rgba(255,255,255,.7)}.uk-light .uk-button-default:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:hover,.uk-card-primary.uk-card-body .uk-button-default:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-default:hover,.uk-card-secondary.uk-card-body .uk-button-default:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-default:hover,.uk-overlay-primary .uk-button-default:hover,.uk-offcanvas-bar .uk-button-default:hover{background-color:rgba(0,0,0,0);color:#fff;border-color:#fff}.uk-light .uk-button-default:active,.uk-light .uk-button-default.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-card-primary.uk-card-body .uk-button-default:active,.uk-card-primary.uk-card-body .uk-button-default.uk-active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-default:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-default.uk-active,.uk-card-secondary.uk-card-body .uk-button-default:active,.uk-card-secondary.uk-card-body .uk-button-default.uk-active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-default:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-default.uk-active,.uk-overlay-primary .uk-button-default:active,.uk-overlay-primary .uk-button-default.uk-active,.uk-offcanvas-bar .uk-button-default:active,.uk-offcanvas-bar .uk-button-default.uk-active{background-color:rgba(0,0,0,0);color:#fff;border-color:#fff}.uk-light .uk-button-primary,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary,.uk-card-primary.uk-card-body .uk-button-primary,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-primary,.uk-card-secondary.uk-card-body .uk-button-primary,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-primary,.uk-overlay-primary .uk-button-primary,.uk-offcanvas-bar .uk-button-primary{background-color:#fff;color:#666}.uk-light .uk-button-primary:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-card-primary.uk-card-body .uk-button-primary:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-primary:hover,.uk-card-secondary.uk-card-body .uk-button-primary:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-primary:hover,.uk-overlay-primary .uk-button-primary:hover,.uk-offcanvas-bar .uk-button-primary:hover{background-color:#f2f2f2;color:#666}.uk-light .uk-button-primary:active,.uk-light .uk-button-primary.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-card-primary.uk-card-body .uk-button-primary:active,.uk-card-primary.uk-card-body .uk-button-primary.uk-active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-primary:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-primary.uk-active,.uk-card-secondary.uk-card-body .uk-button-primary:active,.uk-card-secondary.uk-card-body .uk-button-primary.uk-active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-primary:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-primary.uk-active,.uk-overlay-primary .uk-button-primary:active,.uk-overlay-primary .uk-button-primary.uk-active,.uk-offcanvas-bar .uk-button-primary:active,.uk-offcanvas-bar .uk-button-primary.uk-active{background-color:#e6e6e6;color:#666}.uk-light .uk-button-secondary,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary,.uk-card-primary.uk-card-body .uk-button-secondary,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-secondary,.uk-card-secondary.uk-card-body .uk-button-secondary,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-secondary,.uk-overlay-primary .uk-button-secondary,.uk-offcanvas-bar .uk-button-secondary{background-color:#fff;color:#666}.uk-light .uk-button-secondary:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-card-primary.uk-card-body .uk-button-secondary:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-secondary:hover,.uk-card-secondary.uk-card-body .uk-button-secondary:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-secondary:hover,.uk-overlay-primary .uk-button-secondary:hover,.uk-offcanvas-bar .uk-button-secondary:hover{background-color:#f2f2f2;color:#666}.uk-light .uk-button-secondary:active,.uk-light .uk-button-secondary.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-card-primary.uk-card-body .uk-button-secondary:active,.uk-card-primary.uk-card-body .uk-button-secondary.uk-active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-secondary:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-secondary.uk-active,.uk-card-secondary.uk-card-body .uk-button-secondary:active,.uk-card-secondary.uk-card-body .uk-button-secondary.uk-active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-secondary:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-secondary.uk-active,.uk-overlay-primary .uk-button-secondary:active,.uk-overlay-primary .uk-button-secondary.uk-active,.uk-offcanvas-bar .uk-button-secondary:active,.uk-offcanvas-bar .uk-button-secondary.uk-active{background-color:#e6e6e6;color:#666}.uk-light .uk-button-text,.uk-section-primary:not(.uk-preserve-color) .uk-button-text,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text,.uk-card-primary.uk-card-body .uk-button-text,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-text,.uk-card-secondary.uk-card-body .uk-button-text,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-text,.uk-overlay-primary .uk-button-text,.uk-offcanvas-bar .uk-button-text{color:#fff}.uk-light .uk-button-text::before,.uk-section-primary:not(.uk-preserve-color) .uk-button-text::before,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text::before,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text::before,.uk-card-primary.uk-card-body .uk-button-text::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-text::before,.uk-card-secondary.uk-card-body .uk-button-text::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-text::before,.uk-overlay-primary .uk-button-text::before,.uk-offcanvas-bar .uk-button-text::before{border-bottom-color:#fff}.uk-light .uk-button-text:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:hover,.uk-card-primary.uk-card-body .uk-button-text:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-text:hover,.uk-card-secondary.uk-card-body .uk-button-text:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-text:hover,.uk-overlay-primary .uk-button-text:hover,.uk-offcanvas-bar .uk-button-text:hover{color:#fff}.uk-light .uk-button-text:disabled,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-card-primary.uk-card-body .uk-button-text:disabled,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-text:disabled,.uk-card-secondary.uk-card-body .uk-button-text:disabled,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-text:disabled,.uk-overlay-primary .uk-button-text:disabled,.uk-offcanvas-bar .uk-button-text:disabled{color:rgba(255,255,255,.5)}.uk-light .uk-button-link,.uk-section-primary:not(.uk-preserve-color) .uk-button-link,.uk-section-secondary:not(.uk-preserve-color) .uk-button-link,.uk-tile-primary:not(.uk-preserve-color) .uk-button-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link,.uk-card-primary.uk-card-body .uk-button-link,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-link,.uk-card-secondary.uk-card-body .uk-button-link,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-link,.uk-overlay-primary .uk-button-link,.uk-offcanvas-bar .uk-button-link{color:#fff}.uk-light .uk-button-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link:hover,.uk-card-primary.uk-card-body .uk-button-link:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-link:hover,.uk-card-secondary.uk-card-body .uk-button-link:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-link:hover,.uk-overlay-primary .uk-button-link:hover,.uk-offcanvas-bar .uk-button-link:hover{color:rgba(255,255,255,.5)}.uk-light.uk-card-badge,.uk-section-primary:not(.uk-preserve-color).uk-card-badge,.uk-section-secondary:not(.uk-preserve-color).uk-card-badge,.uk-tile-primary:not(.uk-preserve-color).uk-card-badge,.uk-tile-secondary:not(.uk-preserve-color).uk-card-badge,.uk-card-primary.uk-card-body.uk-card-badge,.uk-card-primary>:not([class*=uk-card-media]).uk-card-badge,.uk-card-secondary.uk-card-body.uk-card-badge,.uk-card-secondary>:not([class*=uk-card-media]).uk-card-badge,.uk-overlay-primary.uk-card-badge,.uk-offcanvas-bar.uk-card-badge{background-color:#fff;color:#666}.uk-light .uk-close,.uk-section-primary:not(.uk-preserve-color) .uk-close,.uk-section-secondary:not(.uk-preserve-color) .uk-close,.uk-tile-primary:not(.uk-preserve-color) .uk-close,.uk-tile-secondary:not(.uk-preserve-color) .uk-close,.uk-card-primary.uk-card-body .uk-close,.uk-card-primary>:not([class*=uk-card-media]) .uk-close,.uk-card-secondary.uk-card-body .uk-close,.uk-card-secondary>:not([class*=uk-card-media]) .uk-close,.uk-overlay-primary .uk-close,.uk-offcanvas-bar .uk-close{color:rgba(255,255,255,.5)}.uk-light .uk-close:hover,.uk-section-primary:not(.uk-preserve-color) .uk-close:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-close:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-close:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-close:hover,.uk-card-primary.uk-card-body .uk-close:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-close:hover,.uk-card-secondary.uk-card-body .uk-close:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-close:hover,.uk-overlay-primary .uk-close:hover,.uk-offcanvas-bar .uk-close:hover{color:rgba(255,255,255,.7)}.uk-light .uk-column-divider,.uk-section-primary:not(.uk-preserve-color) .uk-column-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-column-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-column-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-column-divider,.uk-card-primary.uk-card-body .uk-column-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-column-divider,.uk-card-secondary.uk-card-body .uk-column-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-column-divider,.uk-overlay-primary .uk-column-divider,.uk-offcanvas-bar .uk-column-divider{column-rule-color:rgba(255,255,255,.2)}.uk-light .uk-divider-icon,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon,.uk-card-primary.uk-card-body .uk-divider-icon,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-icon,.uk-card-secondary.uk-card-body .uk-divider-icon,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-icon,.uk-overlay-primary .uk-divider-icon,.uk-offcanvas-bar .uk-divider-icon{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22rgba(255,255,255,.2)%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-light .uk-divider-icon::before,.uk-light .uk-divider-icon::after,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-card-primary.uk-card-body .uk-divider-icon::before,.uk-card-primary.uk-card-body .uk-divider-icon::after,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-icon::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-icon::after,.uk-card-secondary.uk-card-body .uk-divider-icon::before,.uk-card-secondary.uk-card-body .uk-divider-icon::after,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-icon::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-icon::after,.uk-overlay-primary .uk-divider-icon::before,.uk-overlay-primary .uk-divider-icon::after,.uk-offcanvas-bar .uk-divider-icon::before,.uk-offcanvas-bar .uk-divider-icon::after{border-bottom-color:rgba(255,255,255,.2)}.uk-light .uk-divider-small::after,.uk-section-primary:not(.uk-preserve-color) .uk-divider-small::after,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-small::after,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-small::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-small::after,.uk-card-primary.uk-card-body .uk-divider-small::after,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-small::after,.uk-card-secondary.uk-card-body .uk-divider-small::after,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-small::after,.uk-overlay-primary .uk-divider-small::after,.uk-offcanvas-bar .uk-divider-small::after{border-top-color:rgba(255,255,255,.2)}.uk-light .uk-divider-vertical,.uk-section-primary:not(.uk-preserve-color) .uk-divider-vertical,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-vertical,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-vertical,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-vertical,.uk-card-primary.uk-card-body .uk-divider-vertical,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-vertical,.uk-card-secondary.uk-card-body .uk-divider-vertical,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-vertical,.uk-overlay-primary .uk-divider-vertical,.uk-offcanvas-bar .uk-divider-vertical{border-left-color:rgba(255,255,255,.2)}.uk-light .uk-dotnav>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-card-primary.uk-card-body .uk-dotnav>*>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-dotnav>*>*,.uk-card-secondary.uk-card-body .uk-dotnav>*>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-dotnav>*>*,.uk-overlay-primary .uk-dotnav>*>*,.uk-offcanvas-bar .uk-dotnav>*>*{background-color:rgba(0,0,0,0);border-color:rgba(255,255,255,.9)}.uk-light .uk-dotnav>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-card-primary.uk-card-body .uk-dotnav>*>:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-dotnav>*>:hover,.uk-card-secondary.uk-card-body .uk-dotnav>*>:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-dotnav>*>:hover,.uk-overlay-primary .uk-dotnav>*>:hover,.uk-offcanvas-bar .uk-dotnav>*>:hover{background-color:rgba(255,255,255,.9);border-color:rgba(0,0,0,0)}.uk-light .uk-dotnav>*>:active,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-card-primary.uk-card-body .uk-dotnav>*>:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-dotnav>*>:active,.uk-card-secondary.uk-card-body .uk-dotnav>*>:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-dotnav>*>:active,.uk-overlay-primary .uk-dotnav>*>:active,.uk-offcanvas-bar .uk-dotnav>*>:active{background-color:rgba(255,255,255,.5);border-color:rgba(0,0,0,0)}.uk-light .uk-dotnav>.uk-active>*,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-card-primary.uk-card-body .uk-dotnav>.uk-active>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-dotnav>.uk-active>*,.uk-card-secondary.uk-card-body .uk-dotnav>.uk-active>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-dotnav>.uk-active>*,.uk-overlay-primary .uk-dotnav>.uk-active>*,.uk-offcanvas-bar .uk-dotnav>.uk-active>*{background-color:rgba(255,255,255,.9);border-color:rgba(0,0,0,0)}.uk-light .uk-input,.uk-light .uk-select,.uk-light .uk-textarea,.uk-section-primary:not(.uk-preserve-color) .uk-input,.uk-section-primary:not(.uk-preserve-color) .uk-select,.uk-section-primary:not(.uk-preserve-color) .uk-textarea,.uk-section-secondary:not(.uk-preserve-color) .uk-input,.uk-section-secondary:not(.uk-preserve-color) .uk-select,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea,.uk-tile-primary:not(.uk-preserve-color) .uk-input,.uk-tile-primary:not(.uk-preserve-color) .uk-select,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea,.uk-tile-secondary:not(.uk-preserve-color) .uk-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-select,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea,.uk-card-primary.uk-card-body .uk-input,.uk-card-primary.uk-card-body .uk-select,.uk-card-primary.uk-card-body .uk-textarea,.uk-card-primary>:not([class*=uk-card-media]) .uk-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-select,.uk-card-primary>:not([class*=uk-card-media]) .uk-textarea,.uk-card-secondary.uk-card-body .uk-input,.uk-card-secondary.uk-card-body .uk-select,.uk-card-secondary.uk-card-body .uk-textarea,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-select,.uk-card-secondary>:not([class*=uk-card-media]) .uk-textarea,.uk-overlay-primary .uk-input,.uk-overlay-primary .uk-select,.uk-overlay-primary .uk-textarea,.uk-offcanvas-bar .uk-input,.uk-offcanvas-bar .uk-select,.uk-offcanvas-bar .uk-textarea{background-color:rgba(255,255,255,.1);color:rgba(255,255,255,.7);background-clip:padding-box;border-color:rgba(255,255,255,.2)}.uk-light .uk-input:focus,.uk-light .uk-select:focus,.uk-light .uk-textarea:focus,.uk-section-primary:not(.uk-preserve-color) .uk-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-select:focus,.uk-section-primary:not(.uk-preserve-color) .uk-textarea:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-select:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-select:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-select:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea:focus,.uk-card-primary.uk-card-body .uk-input:focus,.uk-card-primary.uk-card-body .uk-select:focus,.uk-card-primary.uk-card-body .uk-textarea:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-input:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-select:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-textarea:focus,.uk-card-secondary.uk-card-body .uk-input:focus,.uk-card-secondary.uk-card-body .uk-select:focus,.uk-card-secondary.uk-card-body .uk-textarea:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-select:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-textarea:focus,.uk-overlay-primary .uk-input:focus,.uk-overlay-primary .uk-select:focus,.uk-overlay-primary .uk-textarea:focus,.uk-offcanvas-bar .uk-input:focus,.uk-offcanvas-bar .uk-select:focus,.uk-offcanvas-bar .uk-textarea:focus{background-color:rgba(255,255,255,.15);color:rgba(255,255,255,.7);border-color:rgba(255,255,255,.7)}.uk-light .uk-input::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-input::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-input::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-input::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-input::placeholder,.uk-card-primary.uk-card-body .uk-input::placeholder,.uk-card-primary>:not([class*=uk-card-media]) .uk-input::placeholder,.uk-card-secondary.uk-card-body .uk-input::placeholder,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input::placeholder,.uk-overlay-primary .uk-input::placeholder,.uk-offcanvas-bar .uk-input::placeholder{color:rgba(255,255,255,.5)}.uk-light .uk-textarea::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-card-primary.uk-card-body .uk-textarea::placeholder,.uk-card-primary>:not([class*=uk-card-media]) .uk-textarea::placeholder,.uk-card-secondary.uk-card-body .uk-textarea::placeholder,.uk-card-secondary>:not([class*=uk-card-media]) .uk-textarea::placeholder,.uk-overlay-primary .uk-textarea::placeholder,.uk-offcanvas-bar .uk-textarea::placeholder{color:rgba(255,255,255,.5)}.uk-light .uk-select:not([multiple]):not([size]),.uk-section-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-section-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-tile-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-tile-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-card-primary.uk-card-body .uk-select:not([multiple]):not([size]),.uk-card-primary>:not([class*=uk-card-media]) .uk-select:not([multiple]):not([size]),.uk-card-secondary.uk-card-body .uk-select:not([multiple]):not([size]),.uk-card-secondary>:not([class*=uk-card-media]) .uk-select:not([multiple]):not([size]),.uk-overlay-primary .uk-select:not([multiple]):not([size]),.uk-offcanvas-bar .uk-select:not([multiple]):not([size]){background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba(255,255,255,.7)%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba(255,255,255,.7)%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-light .uk-input[list]:hover,.uk-light .uk-input[list]:focus,.uk-section-primary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-section-primary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-card-primary.uk-card-body .uk-input[list]:hover,.uk-card-primary.uk-card-body .uk-input[list]:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-input[list]:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-input[list]:focus,.uk-card-secondary.uk-card-body .uk-input[list]:hover,.uk-card-secondary.uk-card-body .uk-input[list]:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input[list]:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input[list]:focus,.uk-overlay-primary .uk-input[list]:hover,.uk-overlay-primary .uk-input[list]:focus,.uk-offcanvas-bar .uk-input[list]:hover,.uk-offcanvas-bar .uk-input[list]:focus{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba(255,255,255,.7)%22%20points%3D%2212%2012%208%206%2016%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-light .uk-radio,.uk-light .uk-checkbox,.uk-section-primary:not(.uk-preserve-color) .uk-radio,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox,.uk-section-secondary:not(.uk-preserve-color) .uk-radio,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox,.uk-tile-primary:not(.uk-preserve-color) .uk-radio,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox,.uk-card-primary.uk-card-body .uk-radio,.uk-card-primary.uk-card-body .uk-checkbox,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox,.uk-card-secondary.uk-card-body .uk-radio,.uk-card-secondary.uk-card-body .uk-checkbox,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox,.uk-overlay-primary .uk-radio,.uk-overlay-primary .uk-checkbox,.uk-offcanvas-bar .uk-radio,.uk-offcanvas-bar .uk-checkbox{background-color:rgba(255,255,255,.1);border-color:rgba(255,255,255,.2)}.uk-light .uk-radio:focus,.uk-light .uk-checkbox:focus,.uk-section-primary:not(.uk-preserve-color) .uk-radio:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-card-primary.uk-card-body .uk-radio:focus,.uk-card-primary.uk-card-body .uk-checkbox:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:focus,.uk-card-secondary.uk-card-body .uk-radio:focus,.uk-card-secondary.uk-card-body .uk-checkbox:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:focus,.uk-overlay-primary .uk-radio:focus,.uk-overlay-primary .uk-checkbox:focus,.uk-offcanvas-bar .uk-radio:focus,.uk-offcanvas-bar .uk-checkbox:focus{background-color:rgba(255,255,255,.15);border-color:rgba(255,255,255,.7)}.uk-light .uk-radio:checked,.uk-light .uk-checkbox:checked,.uk-light .uk-checkbox:indeterminate,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-card-primary.uk-card-body .uk-radio:checked,.uk-card-primary.uk-card-body .uk-checkbox:checked,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio:checked,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:checked,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate,.uk-card-secondary.uk-card-body .uk-radio:checked,.uk-card-secondary.uk-card-body .uk-checkbox:checked,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio:checked,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:checked,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate,.uk-overlay-primary .uk-radio:checked,.uk-overlay-primary .uk-checkbox:checked,.uk-overlay-primary .uk-checkbox:indeterminate,.uk-offcanvas-bar .uk-radio:checked,.uk-offcanvas-bar .uk-checkbox:checked,.uk-offcanvas-bar .uk-checkbox:indeterminate{background-color:#fff;border-color:#fff}.uk-light .uk-radio:checked:focus,.uk-light .uk-checkbox:checked:focus,.uk-light .uk-checkbox:indeterminate:focus,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-card-primary.uk-card-body .uk-radio:checked:focus,.uk-card-primary.uk-card-body .uk-checkbox:checked:focus,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio:checked:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:checked:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate:focus,.uk-card-secondary.uk-card-body .uk-radio:checked:focus,.uk-card-secondary.uk-card-body .uk-checkbox:checked:focus,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio:checked:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:checked:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate:focus,.uk-overlay-primary .uk-radio:checked:focus,.uk-overlay-primary .uk-checkbox:checked:focus,.uk-overlay-primary .uk-checkbox:indeterminate:focus,.uk-offcanvas-bar .uk-radio:checked:focus,.uk-offcanvas-bar .uk-checkbox:checked:focus,.uk-offcanvas-bar .uk-checkbox:indeterminate:focus{background-color:#fff}.uk-light .uk-radio:checked,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-card-primary.uk-card-body .uk-radio:checked,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio:checked,.uk-card-secondary.uk-card-body .uk-radio:checked,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio:checked,.uk-overlay-primary .uk-radio:checked,.uk-offcanvas-bar .uk-radio:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23666%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-checkbox:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-card-primary.uk-card-body .uk-checkbox:checked,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:checked,.uk-card-secondary.uk-card-body .uk-checkbox:checked,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:checked,.uk-overlay-primary .uk-checkbox:checked,.uk-offcanvas-bar .uk-checkbox:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-light .uk-checkbox:indeterminate,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate,.uk-overlay-primary .uk-checkbox:indeterminate,.uk-offcanvas-bar .uk-checkbox:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-form-label,.uk-section-primary:not(.uk-preserve-color) .uk-form-label,.uk-section-secondary:not(.uk-preserve-color) .uk-form-label,.uk-tile-primary:not(.uk-preserve-color) .uk-form-label,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-label,.uk-card-primary.uk-card-body .uk-form-label,.uk-card-primary>:not([class*=uk-card-media]) .uk-form-label,.uk-card-secondary.uk-card-body .uk-form-label,.uk-card-secondary>:not([class*=uk-card-media]) .uk-form-label,.uk-overlay-primary .uk-form-label,.uk-offcanvas-bar .uk-form-label{color:#fff}.uk-light .uk-form-icon,.uk-section-primary:not(.uk-preserve-color) .uk-form-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-form-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-form-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-icon,.uk-card-primary.uk-card-body .uk-form-icon,.uk-card-primary>:not([class*=uk-card-media]) .uk-form-icon,.uk-card-secondary.uk-card-body .uk-form-icon,.uk-card-secondary>:not([class*=uk-card-media]) .uk-form-icon,.uk-overlay-primary .uk-form-icon,.uk-offcanvas-bar .uk-form-icon{color:rgba(255,255,255,.5)}.uk-light .uk-form-icon:hover,.uk-section-primary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-card-primary.uk-card-body .uk-form-icon:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-form-icon:hover,.uk-card-secondary.uk-card-body .uk-form-icon:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-form-icon:hover,.uk-overlay-primary .uk-form-icon:hover,.uk-offcanvas-bar .uk-form-icon:hover{color:rgba(255,255,255,.7)}.uk-light .uk-grid-divider>:not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-primary.uk-card-body .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-grid-divider>:not(.uk-first-column)::before,.uk-overlay-primary .uk-grid-divider>:not(.uk-first-column)::before,.uk-offcanvas-bar .uk-grid-divider>:not(.uk-first-column)::before{border-left-color:rgba(255,255,255,.2)}.uk-light .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-primary.uk-card-body .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-secondary.uk-card-body .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-overlay-primary .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-offcanvas-bar .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{border-top-color:rgba(255,255,255,.2)}.uk-light .uk-heading-divider,.uk-section-primary:not(.uk-preserve-color) .uk-heading-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-divider,.uk-card-primary.uk-card-body .uk-heading-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-divider,.uk-card-secondary.uk-card-body .uk-heading-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-divider,.uk-overlay-primary .uk-heading-divider,.uk-offcanvas-bar .uk-heading-divider{border-bottom-color:rgba(255,255,255,.2)}.uk-light .uk-heading-bullet::before,.uk-section-primary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-card-primary.uk-card-body .uk-heading-bullet::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-bullet::before,.uk-card-secondary.uk-card-body .uk-heading-bullet::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-bullet::before,.uk-overlay-primary .uk-heading-bullet::before,.uk-offcanvas-bar .uk-heading-bullet::before{border-left-color:rgba(255,255,255,.2)}.uk-light .uk-heading-line>::before,.uk-light .uk-heading-line>::after,.uk-section-primary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-section-primary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-card-primary.uk-card-body .uk-heading-line>::before,.uk-card-primary.uk-card-body .uk-heading-line>::after,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-line>::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-line>::after,.uk-card-secondary.uk-card-body .uk-heading-line>::before,.uk-card-secondary.uk-card-body .uk-heading-line>::after,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-line>::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-line>::after,.uk-overlay-primary .uk-heading-line>::before,.uk-overlay-primary .uk-heading-line>::after,.uk-offcanvas-bar .uk-heading-line>::before,.uk-offcanvas-bar .uk-heading-line>::after{border-bottom-color:rgba(255,255,255,.2)}.uk-light .uk-icon-link,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link,.uk-card-primary.uk-card-body .uk-icon-link,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-link,.uk-card-secondary.uk-card-body .uk-icon-link,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-link,.uk-overlay-primary .uk-icon-link,.uk-offcanvas-bar .uk-icon-link{color:rgba(255,255,255,.5)}.uk-light .uk-icon-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-card-primary.uk-card-body .uk-icon-link:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-link:hover,.uk-card-secondary.uk-card-body .uk-icon-link:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-link:hover,.uk-overlay-primary .uk-icon-link:hover,.uk-offcanvas-bar .uk-icon-link:hover{color:rgba(255,255,255,.7)}.uk-light .uk-icon-link:active,.uk-light .uk-active>.uk-icon-link,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:active,.uk-section-primary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:active,.uk-section-secondary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:active,.uk-tile-primary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-card-primary.uk-card-body .uk-icon-link:active,.uk-card-primary.uk-card-body .uk-active>.uk-icon-link,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-link:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-active>.uk-icon-link,.uk-card-secondary.uk-card-body .uk-icon-link:active,.uk-card-secondary.uk-card-body .uk-active>.uk-icon-link,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-link:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-active>.uk-icon-link,.uk-overlay-primary .uk-icon-link:active,.uk-overlay-primary .uk-active>.uk-icon-link,.uk-offcanvas-bar .uk-icon-link:active,.uk-offcanvas-bar .uk-active>.uk-icon-link{color:rgba(255,255,255,.7)}.uk-light .uk-icon-button,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button,.uk-card-primary.uk-card-body .uk-icon-button,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-button,.uk-card-secondary.uk-card-body .uk-icon-button,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-button,.uk-overlay-primary .uk-icon-button,.uk-offcanvas-bar .uk-icon-button{background-color:rgba(255,255,255,.1);color:rgba(255,255,255,.5)}.uk-light .uk-icon-button:hover,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-card-primary.uk-card-body .uk-icon-button:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-button:hover,.uk-card-secondary.uk-card-body .uk-icon-button:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-button:hover,.uk-overlay-primary .uk-icon-button:hover,.uk-offcanvas-bar .uk-icon-button:hover{background-color:rgba(255,255,255,.15);color:rgba(255,255,255,.7)}.uk-light .uk-icon-button:active,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:active,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:active,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:active,.uk-card-primary.uk-card-body .uk-icon-button:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-button:active,.uk-card-secondary.uk-card-body .uk-icon-button:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-button:active,.uk-overlay-primary .uk-icon-button:active,.uk-offcanvas-bar .uk-icon-button:active{background-color:rgba(255,255,255,.2);color:rgba(255,255,255,.7)}.uk-light .uk-iconnav>*>a,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-card-primary.uk-card-body .uk-iconnav>*>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-iconnav>*>a,.uk-card-secondary.uk-card-body .uk-iconnav>*>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-iconnav>*>a,.uk-overlay-primary .uk-iconnav>*>a,.uk-offcanvas-bar .uk-iconnav>*>a{color:rgba(255,255,255,.5)}.uk-light .uk-iconnav>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-card-primary.uk-card-body .uk-iconnav>*>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-iconnav>*>a:hover,.uk-card-secondary.uk-card-body .uk-iconnav>*>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-iconnav>*>a:hover,.uk-overlay-primary .uk-iconnav>*>a:hover,.uk-offcanvas-bar .uk-iconnav>*>a:hover{color:rgba(255,255,255,.7)}.uk-light .uk-iconnav>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-card-primary.uk-card-body .uk-iconnav>.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-iconnav>.uk-active>a,.uk-card-secondary.uk-card-body .uk-iconnav>.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-iconnav>.uk-active>a,.uk-overlay-primary .uk-iconnav>.uk-active>a,.uk-offcanvas-bar .uk-iconnav>.uk-active>a{color:rgba(255,255,255,.7)}.uk-light .uk-label,.uk-section-primary:not(.uk-preserve-color) .uk-label,.uk-section-secondary:not(.uk-preserve-color) .uk-label,.uk-tile-primary:not(.uk-preserve-color) .uk-label,.uk-tile-secondary:not(.uk-preserve-color) .uk-label,.uk-card-primary.uk-card-body .uk-label,.uk-card-primary>:not([class*=uk-card-media]) .uk-label,.uk-card-secondary.uk-card-body .uk-label,.uk-card-secondary>:not([class*=uk-card-media]) .uk-label,.uk-overlay-primary .uk-label,.uk-offcanvas-bar .uk-label{background-color:#fff;color:#666}.uk-light a.uk-link-muted,.uk-light .uk-link-muted a,.uk-section-primary:not(.uk-preserve-color) a.uk-link-muted,.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-muted,.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-muted,.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-muted,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a,.uk-card-primary.uk-card-body a.uk-link-muted,.uk-card-primary.uk-card-body .uk-link-muted a,.uk-card-primary>:not([class*=uk-card-media]) a.uk-link-muted,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-muted a,.uk-card-secondary.uk-card-body a.uk-link-muted,.uk-card-secondary.uk-card-body .uk-link-muted a,.uk-card-secondary>:not([class*=uk-card-media]) a.uk-link-muted,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-muted a,.uk-overlay-primary a.uk-link-muted,.uk-overlay-primary .uk-link-muted a,.uk-offcanvas-bar a.uk-link-muted,.uk-offcanvas-bar .uk-link-muted a{color:rgba(255,255,255,.5)}.uk-light a.uk-link-muted:hover,.uk-light .uk-link-muted a:hover,.uk-light .uk-link-toggle:hover .uk-link-muted,.uk-section-primary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-card-primary.uk-card-body a.uk-link-muted:hover,.uk-card-primary.uk-card-body .uk-link-muted a:hover,.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-muted,.uk-card-primary>:not([class*=uk-card-media]) a.uk-link-muted:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-muted a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-muted,.uk-card-secondary.uk-card-body a.uk-link-muted:hover,.uk-card-secondary.uk-card-body .uk-link-muted a:hover,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-muted,.uk-card-secondary>:not([class*=uk-card-media]) a.uk-link-muted:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-muted a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-muted,.uk-overlay-primary a.uk-link-muted:hover,.uk-overlay-primary .uk-link-muted a:hover,.uk-overlay-primary .uk-link-toggle:hover .uk-link-muted,.uk-offcanvas-bar a.uk-link-muted:hover,.uk-offcanvas-bar .uk-link-muted a:hover,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-muted{color:rgba(255,255,255,.7)}.uk-light a.uk-link-text:hover,.uk-light .uk-link-text a:hover,.uk-light .uk-link-toggle:hover .uk-link-text,.uk-section-primary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-card-primary.uk-card-body a.uk-link-text:hover,.uk-card-primary.uk-card-body .uk-link-text a:hover,.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-text,.uk-card-primary>:not([class*=uk-card-media]) a.uk-link-text:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-text a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-text,.uk-card-secondary.uk-card-body a.uk-link-text:hover,.uk-card-secondary.uk-card-body .uk-link-text a:hover,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-text,.uk-card-secondary>:not([class*=uk-card-media]) a.uk-link-text:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-text a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-text,.uk-overlay-primary a.uk-link-text:hover,.uk-overlay-primary .uk-link-text a:hover,.uk-overlay-primary .uk-link-toggle:hover .uk-link-text,.uk-offcanvas-bar a.uk-link-text:hover,.uk-offcanvas-bar .uk-link-text a:hover,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-text{color:rgba(255,255,255,.5)}.uk-light a.uk-link-heading:hover,.uk-light .uk-link-heading a:hover,.uk-light .uk-link-toggle:hover .uk-link-heading,.uk-section-primary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-card-primary.uk-card-body a.uk-link-heading:hover,.uk-card-primary.uk-card-body .uk-link-heading a:hover,.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-heading,.uk-card-primary>:not([class*=uk-card-media]) a.uk-link-heading:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-heading a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-heading,.uk-card-secondary.uk-card-body a.uk-link-heading:hover,.uk-card-secondary.uk-card-body .uk-link-heading a:hover,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-heading,.uk-card-secondary>:not([class*=uk-card-media]) a.uk-link-heading:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-heading a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-heading,.uk-overlay-primary a.uk-link-heading:hover,.uk-overlay-primary .uk-link-heading a:hover,.uk-overlay-primary .uk-link-toggle:hover .uk-link-heading,.uk-offcanvas-bar a.uk-link-heading:hover,.uk-offcanvas-bar .uk-link-heading a:hover,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-heading{color:#fff}.uk-light .uk-list-muted>::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-muted>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-muted>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-muted>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-muted>::before,.uk-card-primary.uk-card-body .uk-list-muted>::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-muted>::before,.uk-card-secondary.uk-card-body .uk-list-muted>::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-muted>::before,.uk-overlay-primary .uk-list-muted>::before,.uk-offcanvas-bar .uk-list-muted>::before{color:rgba(255,255,255,.5) !important}.uk-light .uk-list-emphasis>::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-emphasis>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-emphasis>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-emphasis>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-emphasis>::before,.uk-card-primary.uk-card-body .uk-list-emphasis>::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-emphasis>::before,.uk-card-secondary.uk-card-body .uk-list-emphasis>::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-emphasis>::before,.uk-overlay-primary .uk-list-emphasis>::before,.uk-offcanvas-bar .uk-list-emphasis>::before{color:#fff !important}.uk-light .uk-list-primary>::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-primary>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-primary>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-primary>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-primary>::before,.uk-card-primary.uk-card-body .uk-list-primary>::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-primary>::before,.uk-card-secondary.uk-card-body .uk-list-primary>::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-primary>::before,.uk-overlay-primary .uk-list-primary>::before,.uk-offcanvas-bar .uk-list-primary>::before{color:#fff !important}.uk-light .uk-list-secondary>::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-secondary>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-secondary>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-secondary>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-secondary>::before,.uk-card-primary.uk-card-body .uk-list-secondary>::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-secondary>::before,.uk-card-secondary.uk-card-body .uk-list-secondary>::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-secondary>::before,.uk-overlay-primary .uk-list-secondary>::before,.uk-offcanvas-bar .uk-list-secondary>::before{color:#fff !important}.uk-light .uk-list-bullet>::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-bullet>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-bullet>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-bullet>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-bullet>::before,.uk-card-primary.uk-card-body .uk-list-bullet>::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-bullet>::before,.uk-card-secondary.uk-card-body .uk-list-bullet>::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-bullet>::before,.uk-overlay-primary .uk-list-bullet>::before,.uk-offcanvas-bar .uk-list-bullet>::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22rgba(255,255,255,.7)%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-list-divider>:nth-child(n+2),.uk-section-primary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2),.uk-section-secondary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2),.uk-tile-primary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2),.uk-card-primary.uk-card-body .uk-list-divider>:nth-child(n+2),.uk-card-primary>:not([class*=uk-card-media]) .uk-list-divider>:nth-child(n+2),.uk-card-secondary.uk-card-body .uk-list-divider>:nth-child(n+2),.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-divider>:nth-child(n+2),.uk-overlay-primary .uk-list-divider>:nth-child(n+2),.uk-offcanvas-bar .uk-list-divider>:nth-child(n+2){border-top-color:rgba(255,255,255,.2)}.uk-light .uk-list-striped>*:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-list-striped>*:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped>*:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped>*:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped>*:nth-of-type(odd),.uk-card-primary.uk-card-body .uk-list-striped>*:nth-of-type(odd),.uk-card-primary>:not([class*=uk-card-media]) .uk-list-striped>*:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-list-striped>*:nth-of-type(odd),.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-striped>*:nth-of-type(odd),.uk-overlay-primary .uk-list-striped>*:nth-of-type(odd),.uk-offcanvas-bar .uk-list-striped>*:nth-of-type(odd){border-top-color:rgba(255,255,255,.2);border-bottom-color:rgba(255,255,255,.2)}.uk-light .uk-list-striped>:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-card-primary.uk-card-body .uk-list-striped>:nth-of-type(odd),.uk-card-primary>:not([class*=uk-card-media]) .uk-list-striped>:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-list-striped>:nth-of-type(odd),.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-striped>:nth-of-type(odd),.uk-overlay-primary .uk-list-striped>:nth-of-type(odd),.uk-offcanvas-bar .uk-list-striped>:nth-of-type(odd){background-color:rgba(255,255,255,.1)}.uk-light .uk-marker,.uk-section-primary:not(.uk-preserve-color) .uk-marker,.uk-section-secondary:not(.uk-preserve-color) .uk-marker,.uk-tile-primary:not(.uk-preserve-color) .uk-marker,.uk-tile-secondary:not(.uk-preserve-color) .uk-marker,.uk-card-primary.uk-card-body .uk-marker,.uk-card-primary>:not([class*=uk-card-media]) .uk-marker,.uk-card-secondary.uk-card-body .uk-marker,.uk-card-secondary>:not([class*=uk-card-media]) .uk-marker,.uk-overlay-primary .uk-marker,.uk-offcanvas-bar .uk-marker{background:#f8f8f8;color:#666}.uk-light .uk-marker:hover,.uk-section-primary:not(.uk-preserve-color) .uk-marker:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-marker:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-marker:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-marker:hover,.uk-card-primary.uk-card-body .uk-marker:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-marker:hover,.uk-card-secondary.uk-card-body .uk-marker:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-marker:hover,.uk-overlay-primary .uk-marker:hover,.uk-offcanvas-bar .uk-marker:hover{color:#666}.uk-light .uk-nav-default>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-card-primary.uk-card-body .uk-nav-default>li>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default>li>a,.uk-card-secondary.uk-card-body .uk-nav-default>li>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default>li>a,.uk-overlay-primary .uk-nav-default>li>a,.uk-offcanvas-bar .uk-nav-default>li>a{color:rgba(255,255,255,.5)}.uk-light .uk-nav-default>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-card-primary.uk-card-body .uk-nav-default>li>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-default>li>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default>li>a:hover,.uk-overlay-primary .uk-nav-default>li>a:hover,.uk-offcanvas-bar .uk-nav-default>li>a:hover{color:rgba(255,255,255,.7)}.uk-light .uk-nav-default>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-default>li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-default>li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default>li.uk-active>a,.uk-overlay-primary .uk-nav-default>li.uk-active>a,.uk-offcanvas-bar .uk-nav-default>li.uk-active>a{color:#fff}.uk-light .uk-nav-default .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-header,.uk-overlay-primary .uk-nav-default .uk-nav-header,.uk-offcanvas-bar .uk-nav-default .uk-nav-header{color:#fff}.uk-light .uk-nav-default .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-divider,.uk-overlay-primary .uk-nav-default .uk-nav-divider,.uk-offcanvas-bar .uk-nav-default .uk-nav-divider{border-top-color:rgba(255,255,255,.2)}.uk-light .uk-nav-default .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub a,.uk-overlay-primary .uk-nav-default .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a{color:rgba(255,255,255,.5)}.uk-light .uk-nav-default .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-default .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a:hover{color:rgba(255,255,255,.7)}.uk-light .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-overlay-primary .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub li.uk-active>a{color:#fff}.uk-light .uk-nav-primary>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-card-primary.uk-card-body .uk-nav-primary>li>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary>li>a,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary>li>a,.uk-overlay-primary .uk-nav-primary>li>a,.uk-offcanvas-bar .uk-nav-primary>li>a{color:rgba(255,255,255,.5)}.uk-light .uk-nav-primary>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-card-primary.uk-card-body .uk-nav-primary>li>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary>li>a:hover,.uk-overlay-primary .uk-nav-primary>li>a:hover,.uk-offcanvas-bar .uk-nav-primary>li>a:hover{color:rgba(255,255,255,.7)}.uk-light .uk-nav-primary>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-primary>li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-primary>li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary>li.uk-active>a,.uk-overlay-primary .uk-nav-primary>li.uk-active>a,.uk-offcanvas-bar .uk-nav-primary>li.uk-active>a{color:#fff}.uk-light .uk-nav-primary .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-header,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-header,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-header,.uk-overlay-primary .uk-nav-primary .uk-nav-header,.uk-offcanvas-bar .uk-nav-primary .uk-nav-header{color:#fff}.uk-light .uk-nav-primary .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-divider,.uk-overlay-primary .uk-nav-primary .uk-nav-divider,.uk-offcanvas-bar .uk-nav-primary .uk-nav-divider{border-top-color:rgba(255,255,255,.2)}.uk-light .uk-nav-primary .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub a,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a{color:rgba(255,255,255,.5)}.uk-light .uk-nav-primary .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a:hover{color:rgba(255,255,255,.7)}.uk-light .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-overlay-primary .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub li.uk-active>a{color:#fff}.uk-light .uk-nav-secondary>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a,.uk-card-primary.uk-card-body .uk-nav-secondary>li>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a,.uk-card-secondary.uk-card-body .uk-nav-secondary>li>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a,.uk-overlay-primary .uk-nav-secondary>li>a,.uk-offcanvas-bar .uk-nav-secondary>li>a{color:#fff}.uk-light .uk-nav-secondary>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover,.uk-card-primary.uk-card-body .uk-nav-secondary>li>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-secondary>li>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a:hover,.uk-overlay-primary .uk-nav-secondary>li>a:hover,.uk-offcanvas-bar .uk-nav-secondary>li>a:hover{color:#fff;background-color:rgba(255,255,255,.1)}.uk-light .uk-nav-secondary>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-secondary>li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-secondary>li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary>li.uk-active>a,.uk-overlay-primary .uk-nav-secondary>li.uk-active>a,.uk-offcanvas-bar .uk-nav-secondary>li.uk-active>a{color:#fff;background-color:rgba(255,255,255,.1)}.uk-light .uk-nav-secondary .uk-nav-subtitle,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle,.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-subtitle,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-subtitle,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-subtitle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-subtitle,.uk-overlay-primary .uk-nav-secondary .uk-nav-subtitle,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-subtitle{color:rgba(255,255,255,.5)}.uk-light .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-card-primary.uk-card-body .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-card-secondary.uk-card-body .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-overlay-primary .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-offcanvas-bar .uk-nav-secondary>li>a:hover .uk-nav-subtitle{color:rgba(255,255,255,.7)}.uk-light .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-card-primary.uk-card-body .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-card-secondary.uk-card-body .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-overlay-primary .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-offcanvas-bar .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle{color:#fff}.uk-light .uk-nav-secondary .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header,.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-header,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-header,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-header,.uk-overlay-primary .uk-nav-secondary .uk-nav-header,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-header{color:#fff}.uk-light .uk-nav-secondary .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider,.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-divider,.uk-overlay-primary .uk-nav-secondary .uk-nav-divider,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-divider{border-top-color:rgba(255,255,255,.2)}.uk-light .uk-nav-secondary .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a,.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub a,.uk-overlay-primary .uk-nav-secondary .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub a{color:rgba(255,255,255,.5)}.uk-light .uk-nav-secondary .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover,.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-secondary .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub a:hover{color:rgba(255,255,255,.7)}.uk-light .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-overlay-primary .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub li.uk-active>a{color:#fff}.uk-light .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-section-primary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-section-secondary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-tile-primary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-tile-secondary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-card-primary.uk-card-body .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-card-primary>:not([class*=uk-card-media]) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-card-secondary.uk-card-body .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-overlay-primary .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-offcanvas-bar .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider){border-top-color:rgba(255,255,255,.2)}.uk-light .uk-navbar-nav>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a,.uk-overlay-primary .uk-navbar-nav>li>a,.uk-offcanvas-bar .uk-navbar-nav>li>a{color:rgba(255,255,255,.5)}.uk-light .uk-navbar-nav>li:hover>a,.uk-light .uk-navbar-nav>li>a[aria-expanded=true],.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded=true],.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded=true],.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded=true],.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded=true],.uk-card-primary.uk-card-body .uk-navbar-nav>li:hover>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a[aria-expanded=true],.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li:hover>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a[aria-expanded=true],.uk-card-secondary.uk-card-body .uk-navbar-nav>li:hover>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a[aria-expanded=true],.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li:hover>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a[aria-expanded=true],.uk-overlay-primary .uk-navbar-nav>li:hover>a,.uk-overlay-primary .uk-navbar-nav>li>a[aria-expanded=true],.uk-offcanvas-bar .uk-navbar-nav>li:hover>a,.uk-offcanvas-bar .uk-navbar-nav>li>a[aria-expanded=true]{color:rgba(255,255,255,.7)}.uk-light .uk-navbar-nav>li>a:active,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a:active,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a:active,.uk-overlay-primary .uk-navbar-nav>li>a:active,.uk-offcanvas-bar .uk-navbar-nav>li>a:active{color:#fff}.uk-light .uk-navbar-nav>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li.uk-active>a,.uk-overlay-primary .uk-navbar-nav>li.uk-active>a,.uk-offcanvas-bar .uk-navbar-nav>li.uk-active>a{color:#fff}.uk-light .uk-navbar-item,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-item,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-item,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-item,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-item,.uk-card-primary.uk-card-body .uk-navbar-item,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-item,.uk-card-secondary.uk-card-body .uk-navbar-item,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-item,.uk-overlay-primary .uk-navbar-item,.uk-offcanvas-bar .uk-navbar-item{color:rgba(255,255,255,.7)}.uk-light .uk-navbar-toggle,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-card-primary.uk-card-body .uk-navbar-toggle,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-toggle,.uk-card-secondary.uk-card-body .uk-navbar-toggle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-toggle,.uk-overlay-primary .uk-navbar-toggle,.uk-offcanvas-bar .uk-navbar-toggle{color:rgba(255,255,255,.5)}.uk-light .uk-navbar-toggle:hover,.uk-light .uk-navbar-toggle[aria-expanded=true],.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded=true],.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded=true],.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded=true],.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded=true],.uk-card-primary.uk-card-body .uk-navbar-toggle:hover,.uk-card-primary.uk-card-body .uk-navbar-toggle[aria-expanded=true],.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-toggle:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-toggle[aria-expanded=true],.uk-card-secondary.uk-card-body .uk-navbar-toggle:hover,.uk-card-secondary.uk-card-body .uk-navbar-toggle[aria-expanded=true],.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-toggle:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-toggle[aria-expanded=true],.uk-overlay-primary .uk-navbar-toggle:hover,.uk-overlay-primary .uk-navbar-toggle[aria-expanded=true],.uk-offcanvas-bar .uk-navbar-toggle:hover,.uk-offcanvas-bar .uk-navbar-toggle[aria-expanded=true]{color:rgba(255,255,255,.7)}.uk-light .uk-pagination>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-card-primary.uk-card-body .uk-pagination>*>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-pagination>*>*,.uk-card-secondary.uk-card-body .uk-pagination>*>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-pagination>*>*,.uk-overlay-primary .uk-pagination>*>*,.uk-offcanvas-bar .uk-pagination>*>*{color:rgba(255,255,255,.5)}.uk-light .uk-pagination>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-card-primary.uk-card-body .uk-pagination>*>:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-pagination>*>:hover,.uk-card-secondary.uk-card-body .uk-pagination>*>:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-pagination>*>:hover,.uk-overlay-primary .uk-pagination>*>:hover,.uk-offcanvas-bar .uk-pagination>*>:hover{color:rgba(255,255,255,.7)}.uk-light .uk-pagination>.uk-active>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-card-primary.uk-card-body .uk-pagination>.uk-active>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-pagination>.uk-active>*,.uk-card-secondary.uk-card-body .uk-pagination>.uk-active>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-pagination>.uk-active>*,.uk-overlay-primary .uk-pagination>.uk-active>*,.uk-offcanvas-bar .uk-pagination>.uk-active>*{color:rgba(255,255,255,.7)}.uk-light .uk-pagination>.uk-disabled>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-card-primary.uk-card-body .uk-pagination>.uk-disabled>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-pagination>.uk-disabled>*,.uk-card-secondary.uk-card-body .uk-pagination>.uk-disabled>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-pagination>.uk-disabled>*,.uk-overlay-primary .uk-pagination>.uk-disabled>*,.uk-offcanvas-bar .uk-pagination>.uk-disabled>*{color:rgba(255,255,255,.5)}.uk-light .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input,.uk-card-primary.uk-card-body .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-input,.uk-overlay-primary .uk-search-input,.uk-offcanvas-bar .uk-search-input{color:rgba(255,255,255,.7)}.uk-light .uk-search-input::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-card-primary.uk-card-body .uk-search-input::placeholder,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-input::placeholder,.uk-card-secondary.uk-card-body .uk-search-input::placeholder,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-input::placeholder,.uk-overlay-primary .uk-search-input::placeholder,.uk-offcanvas-bar .uk-search-input::placeholder{color:rgba(255,255,255,.5)}.uk-light .uk-search .uk-search-icon,.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-card-primary.uk-card-body .uk-search .uk-search-icon,.uk-card-primary>:not([class*=uk-card-media]) .uk-search .uk-search-icon,.uk-card-secondary.uk-card-body .uk-search .uk-search-icon,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search .uk-search-icon,.uk-overlay-primary .uk-search .uk-search-icon,.uk-offcanvas-bar .uk-search .uk-search-icon{color:rgba(255,255,255,.5)}.uk-light .uk-search .uk-search-icon:hover,.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-card-primary.uk-card-body .uk-search .uk-search-icon:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-search .uk-search-icon:hover,.uk-card-secondary.uk-card-body .uk-search .uk-search-icon:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search .uk-search-icon:hover,.uk-overlay-primary .uk-search .uk-search-icon:hover,.uk-offcanvas-bar .uk-search .uk-search-icon:hover{color:rgba(255,255,255,.5)}.uk-light .uk-search-default .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-card-primary.uk-card-body .uk-search-default .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-default .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-default .uk-search-input,.uk-overlay-primary .uk-search-default .uk-search-input,.uk-offcanvas-bar .uk-search-default .uk-search-input{background-color:rgba(0,0,0,0);border-color:rgba(255,255,255,.2)}.uk-light .uk-search-default .uk-search-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-card-primary.uk-card-body .uk-search-default .uk-search-input:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-default .uk-search-input:focus,.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-default .uk-search-input:focus,.uk-overlay-primary .uk-search-default .uk-search-input:focus,.uk-offcanvas-bar .uk-search-default .uk-search-input:focus{background-color:rgba(0,0,0,.05)}.uk-light .uk-search-navbar .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-card-primary.uk-card-body .uk-search-navbar .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-navbar .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-navbar .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-navbar .uk-search-input,.uk-overlay-primary .uk-search-navbar .uk-search-input,.uk-offcanvas-bar .uk-search-navbar .uk-search-input{background-color:rgba(0,0,0,0)}.uk-light .uk-search-large .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-card-primary.uk-card-body .uk-search-large .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-large .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-large .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-large .uk-search-input,.uk-overlay-primary .uk-search-large .uk-search-input,.uk-offcanvas-bar .uk-search-large .uk-search-input{background-color:rgba(0,0,0,0)}.uk-light .uk-search-toggle,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle,.uk-card-primary.uk-card-body .uk-search-toggle,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-toggle,.uk-card-secondary.uk-card-body .uk-search-toggle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-toggle,.uk-overlay-primary .uk-search-toggle,.uk-offcanvas-bar .uk-search-toggle{color:rgba(255,255,255,.5)}.uk-light .uk-search-toggle:hover,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-card-primary.uk-card-body .uk-search-toggle:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-toggle:hover,.uk-card-secondary.uk-card-body .uk-search-toggle:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-toggle:hover,.uk-overlay-primary .uk-search-toggle:hover,.uk-offcanvas-bar .uk-search-toggle:hover{color:rgba(255,255,255,.7)}.uk-light .uk-slidenav,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav,.uk-card-primary.uk-card-body .uk-slidenav,.uk-card-primary>:not([class*=uk-card-media]) .uk-slidenav,.uk-card-secondary.uk-card-body .uk-slidenav,.uk-card-secondary>:not([class*=uk-card-media]) .uk-slidenav,.uk-overlay-primary .uk-slidenav,.uk-offcanvas-bar .uk-slidenav{color:rgba(255,255,255,.7)}.uk-light .uk-slidenav:hover,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-card-primary.uk-card-body .uk-slidenav:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-slidenav:hover,.uk-card-secondary.uk-card-body .uk-slidenav:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-slidenav:hover,.uk-overlay-primary .uk-slidenav:hover,.uk-offcanvas-bar .uk-slidenav:hover{color:rgba(255,255,255,.95)}.uk-light .uk-slidenav:active,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:active,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:active,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:active,.uk-card-primary.uk-card-body .uk-slidenav:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-slidenav:active,.uk-card-secondary.uk-card-body .uk-slidenav:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-slidenav:active,.uk-overlay-primary .uk-slidenav:active,.uk-offcanvas-bar .uk-slidenav:active{color:rgba(255,255,255,.7)}.uk-light .uk-subnav>*>:first-child,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-card-primary.uk-card-body .uk-subnav>*>:first-child,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav>*>:first-child,.uk-card-secondary.uk-card-body .uk-subnav>*>:first-child,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav>*>:first-child,.uk-overlay-primary .uk-subnav>*>:first-child,.uk-offcanvas-bar .uk-subnav>*>:first-child{color:rgba(255,255,255,.5)}.uk-light .uk-subnav>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-card-primary.uk-card-body .uk-subnav>*>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav>*>a:hover,.uk-card-secondary.uk-card-body .uk-subnav>*>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav>*>a:hover,.uk-overlay-primary .uk-subnav>*>a:hover,.uk-offcanvas-bar .uk-subnav>*>a:hover{color:rgba(255,255,255,.7)}.uk-light .uk-subnav>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-card-primary.uk-card-body .uk-subnav>.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav>.uk-active>a,.uk-card-secondary.uk-card-body .uk-subnav>.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav>.uk-active>a,.uk-overlay-primary .uk-subnav>.uk-active>a,.uk-offcanvas-bar .uk-subnav>.uk-active>a{color:#fff}.uk-light .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary.uk-card-body .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-overlay-primary .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-offcanvas-bar .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before{border-left-color:rgba(255,255,255,.2)}.uk-light .uk-subnav-pill>*>:first-child,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-card-primary.uk-card-body .uk-subnav-pill>*>:first-child,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-pill>*>:first-child,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>:first-child,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-pill>*>:first-child,.uk-overlay-primary .uk-subnav-pill>*>:first-child,.uk-offcanvas-bar .uk-subnav-pill>*>:first-child{background-color:rgba(0,0,0,0);color:rgba(255,255,255,.5)}.uk-light .uk-subnav-pill>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-pill>*>a:hover,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-pill>*>a:hover,.uk-overlay-primary .uk-subnav-pill>*>a:hover,.uk-offcanvas-bar .uk-subnav-pill>*>a:hover{background-color:rgba(255,255,255,.1);color:rgba(255,255,255,.7)}.uk-light .uk-subnav-pill>*>a:active,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-pill>*>a:active,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-pill>*>a:active,.uk-overlay-primary .uk-subnav-pill>*>a:active,.uk-offcanvas-bar .uk-subnav-pill>*>a:active{background-color:rgba(255,255,255,.1);color:rgba(255,255,255,.7)}.uk-light .uk-subnav-pill>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-card-primary.uk-card-body .uk-subnav-pill>.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-pill>.uk-active>a,.uk-card-secondary.uk-card-body .uk-subnav-pill>.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-pill>.uk-active>a,.uk-overlay-primary .uk-subnav-pill>.uk-active>a,.uk-offcanvas-bar .uk-subnav-pill>.uk-active>a{background-color:#fff;color:#666}.uk-light .uk-subnav>.uk-disabled>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-card-primary.uk-card-body .uk-subnav>.uk-disabled>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav>.uk-disabled>a,.uk-card-secondary.uk-card-body .uk-subnav>.uk-disabled>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav>.uk-disabled>a,.uk-overlay-primary .uk-subnav>.uk-disabled>a,.uk-offcanvas-bar .uk-subnav>.uk-disabled>a{color:rgba(255,255,255,.5)}.uk-light .uk-tab::before,.uk-section-primary:not(.uk-preserve-color) .uk-tab::before,.uk-section-secondary:not(.uk-preserve-color) .uk-tab::before,.uk-tile-primary:not(.uk-preserve-color) .uk-tab::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab::before,.uk-card-primary.uk-card-body .uk-tab::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab::before,.uk-card-secondary.uk-card-body .uk-tab::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab::before,.uk-overlay-primary .uk-tab::before,.uk-offcanvas-bar .uk-tab::before{border-color:rgba(255,255,255,.2)}.uk-light .uk-tab>*>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a,.uk-card-primary.uk-card-body .uk-tab>*>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab>*>a,.uk-card-secondary.uk-card-body .uk-tab>*>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab>*>a,.uk-overlay-primary .uk-tab>*>a,.uk-offcanvas-bar .uk-tab>*>a{color:rgba(255,255,255,.5)}.uk-light .uk-tab>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-card-primary.uk-card-body .uk-tab>*>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab>*>a:hover,.uk-card-secondary.uk-card-body .uk-tab>*>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab>*>a:hover,.uk-overlay-primary .uk-tab>*>a:hover,.uk-offcanvas-bar .uk-tab>*>a:hover{color:rgba(255,255,255,.7)}.uk-light .uk-tab>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-card-primary.uk-card-body .uk-tab>.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab>.uk-active>a,.uk-card-secondary.uk-card-body .uk-tab>.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab>.uk-active>a,.uk-overlay-primary .uk-tab>.uk-active>a,.uk-offcanvas-bar .uk-tab>.uk-active>a{color:#fff;border-color:#fff}.uk-light .uk-tab>.uk-disabled>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-card-primary.uk-card-body .uk-tab>.uk-disabled>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab>.uk-disabled>a,.uk-card-secondary.uk-card-body .uk-tab>.uk-disabled>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab>.uk-disabled>a,.uk-overlay-primary .uk-tab>.uk-disabled>a,.uk-offcanvas-bar .uk-tab>.uk-disabled>a{color:rgba(255,255,255,.5)}.uk-light .uk-table-striped>tr:nth-of-type(even):last-child,.uk-light .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-section-primary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(even):last-child,.uk-section-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(even):last-child,.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(even):last-child,.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(even):last-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-card-primary.uk-card-body .uk-table-striped>tr:nth-of-type(even):last-child,.uk-card-primary.uk-card-body .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-card-primary>:not([class*=uk-card-media]) .uk-table-striped>tr:nth-of-type(even):last-child,.uk-card-primary>:not([class*=uk-card-media]) .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-card-secondary.uk-card-body .uk-table-striped>tr:nth-of-type(even):last-child,.uk-card-secondary.uk-card-body .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-striped>tr:nth-of-type(even):last-child,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-overlay-primary .uk-table-striped>tr:nth-of-type(even):last-child,.uk-overlay-primary .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-offcanvas-bar .uk-table-striped>tr:nth-of-type(even):last-child,.uk-offcanvas-bar .uk-table-striped tbody tr:nth-of-type(even):last-child{border-bottom-color:rgba(255,255,255,.2)}.uk-light .uk-text-lead,.uk-section-primary:not(.uk-preserve-color) .uk-text-lead,.uk-section-secondary:not(.uk-preserve-color) .uk-text-lead,.uk-tile-primary:not(.uk-preserve-color) .uk-text-lead,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-lead,.uk-card-primary.uk-card-body .uk-text-lead,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-lead,.uk-card-secondary.uk-card-body .uk-text-lead,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-lead,.uk-overlay-primary .uk-text-lead,.uk-offcanvas-bar .uk-text-lead{color:rgba(255,255,255,.7)}.uk-light .uk-text-meta,.uk-section-primary:not(.uk-preserve-color) .uk-text-meta,.uk-section-secondary:not(.uk-preserve-color) .uk-text-meta,.uk-tile-primary:not(.uk-preserve-color) .uk-text-meta,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-meta,.uk-card-primary.uk-card-body .uk-text-meta,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-meta,.uk-card-secondary.uk-card-body .uk-text-meta,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-meta,.uk-overlay-primary .uk-text-meta,.uk-offcanvas-bar .uk-text-meta{color:rgba(255,255,255,.5)}.uk-light .uk-text-muted,.uk-section-primary:not(.uk-preserve-color) .uk-text-muted,.uk-section-secondary:not(.uk-preserve-color) .uk-text-muted,.uk-tile-primary:not(.uk-preserve-color) .uk-text-muted,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-muted,.uk-card-primary.uk-card-body .uk-text-muted,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-muted,.uk-card-secondary.uk-card-body .uk-text-muted,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-muted,.uk-overlay-primary .uk-text-muted,.uk-offcanvas-bar .uk-text-muted{color:rgba(255,255,255,.5) !important}.uk-light .uk-text-emphasis,.uk-section-primary:not(.uk-preserve-color) .uk-text-emphasis,.uk-section-secondary:not(.uk-preserve-color) .uk-text-emphasis,.uk-tile-primary:not(.uk-preserve-color) .uk-text-emphasis,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-emphasis,.uk-card-primary.uk-card-body .uk-text-emphasis,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-emphasis,.uk-card-secondary.uk-card-body .uk-text-emphasis,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-emphasis,.uk-overlay-primary .uk-text-emphasis,.uk-offcanvas-bar .uk-text-emphasis{color:#fff !important}.uk-light .uk-text-primary,.uk-section-primary:not(.uk-preserve-color) .uk-text-primary,.uk-section-secondary:not(.uk-preserve-color) .uk-text-primary,.uk-tile-primary:not(.uk-preserve-color) .uk-text-primary,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-primary,.uk-card-primary.uk-card-body .uk-text-primary,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-primary,.uk-card-secondary.uk-card-body .uk-text-primary,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-primary,.uk-overlay-primary .uk-text-primary,.uk-offcanvas-bar .uk-text-primary{color:#fff !important}.uk-light .uk-text-secondary,.uk-section-primary:not(.uk-preserve-color) .uk-text-secondary,.uk-section-secondary:not(.uk-preserve-color) .uk-text-secondary,.uk-tile-primary:not(.uk-preserve-color) .uk-text-secondary,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-secondary,.uk-card-primary.uk-card-body .uk-text-secondary,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-secondary,.uk-card-secondary.uk-card-body .uk-text-secondary,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-secondary,.uk-overlay-primary .uk-text-secondary,.uk-offcanvas-bar .uk-text-secondary{color:#fff !important}.uk-light .uk-thumbnav>*>*::after,.uk-section-primary:not(.uk-preserve-color) .uk-thumbnav>*>*::after,.uk-section-secondary:not(.uk-preserve-color) .uk-thumbnav>*>*::after,.uk-tile-primary:not(.uk-preserve-color) .uk-thumbnav>*>*::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-thumbnav>*>*::after,.uk-card-primary.uk-card-body .uk-thumbnav>*>*::after,.uk-card-primary>:not([class*=uk-card-media]) .uk-thumbnav>*>*::after,.uk-card-secondary.uk-card-body .uk-thumbnav>*>*::after,.uk-card-secondary>:not([class*=uk-card-media]) .uk-thumbnav>*>*::after,.uk-overlay-primary .uk-thumbnav>*>*::after,.uk-offcanvas-bar .uk-thumbnav>*>*::after{background-image:linear-gradient(180deg, rgba(0,0,0,0), rgba(0,0,0,.4))}.uk-light .uk-totop,.uk-section-primary:not(.uk-preserve-color) .uk-totop,.uk-section-secondary:not(.uk-preserve-color) .uk-totop,.uk-tile-primary:not(.uk-preserve-color) .uk-totop,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop,.uk-card-primary.uk-card-body .uk-totop,.uk-card-primary>:not([class*=uk-card-media]) .uk-totop,.uk-card-secondary.uk-card-body .uk-totop,.uk-card-secondary>:not([class*=uk-card-media]) .uk-totop,.uk-overlay-primary .uk-totop,.uk-offcanvas-bar .uk-totop{color:rgba(255,255,255,.5)}.uk-light .uk-totop:hover,.uk-section-primary:not(.uk-preserve-color) .uk-totop:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:hover,.uk-card-primary.uk-card-body .uk-totop:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-totop:hover,.uk-card-secondary.uk-card-body .uk-totop:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-totop:hover,.uk-overlay-primary .uk-totop:hover,.uk-offcanvas-bar .uk-totop:hover{color:rgba(255,255,255,.7)}.uk-light .uk-totop:active,.uk-section-primary:not(.uk-preserve-color) .uk-totop:active,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:active,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:active,.uk-card-primary.uk-card-body .uk-totop:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-totop:active,.uk-card-secondary.uk-card-body .uk-totop:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-totop:active,.uk-overlay-primary .uk-totop:active,.uk-offcanvas-bar .uk-totop:active{color:#fff}.uk-light .uk-logo,.uk-section-primary:not(.uk-preserve-color) .uk-logo,.uk-section-secondary:not(.uk-preserve-color) .uk-logo,.uk-tile-primary:not(.uk-preserve-color) .uk-logo,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo,.uk-card-primary.uk-card-body .uk-logo,.uk-card-primary>:not([class*=uk-card-media]) .uk-logo,.uk-card-secondary.uk-card-body .uk-logo,.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo,.uk-overlay-primary .uk-logo,.uk-offcanvas-bar .uk-logo{color:#fff}.uk-light .uk-logo:hover,.uk-section-primary:not(.uk-preserve-color) .uk-logo:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-logo:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-logo:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo:hover,.uk-card-primary.uk-card-body .uk-logo:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-logo:hover,.uk-card-secondary.uk-card-body .uk-logo:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo:hover,.uk-overlay-primary .uk-logo:hover,.uk-offcanvas-bar .uk-logo:hover{color:#fff}.uk-light .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-light .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-section-primary:not(.uk-preserve-color) .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-section-primary:not(.uk-preserve-color) .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-section-secondary:not(.uk-preserve-color) .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-section-secondary:not(.uk-preserve-color) .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-tile-primary:not(.uk-preserve-color) .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-tile-primary:not(.uk-preserve-color) .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-tile-secondary:not(.uk-preserve-color) .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-tile-secondary:not(.uk-preserve-color) .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-card-primary.uk-card-body .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-card-primary.uk-card-body .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-card-primary>:not([class*=uk-card-media]) .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-card-primary>:not([class*=uk-card-media]) .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-card-secondary.uk-card-body .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-card-secondary.uk-card-body .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-overlay-primary .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-overlay-primary .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-offcanvas-bar .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-offcanvas-bar .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type){display:none}.uk-light .uk-logo-inverse,.uk-section-primary:not(.uk-preserve-color) .uk-logo-inverse,.uk-section-secondary:not(.uk-preserve-color) .uk-logo-inverse,.uk-tile-primary:not(.uk-preserve-color) .uk-logo-inverse,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo-inverse,.uk-card-primary.uk-card-body .uk-logo-inverse,.uk-card-primary>:not([class*=uk-card-media]) .uk-logo-inverse,.uk-card-secondary.uk-card-body .uk-logo-inverse,.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo-inverse,.uk-overlay-primary .uk-logo-inverse,.uk-offcanvas-bar .uk-logo-inverse{display:block}.uk-light .uk-accordion-title::before,.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-card-primary.uk-card-body .uk-accordion-title::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-accordion-title::before,.uk-card-secondary.uk-card-body .uk-accordion-title::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-accordion-title::before,.uk-overlay-primary .uk-accordion-title::before,.uk-offcanvas-bar .uk-accordion-title::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,.7)%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,.7)%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-open>.uk-accordion-title::before,.uk-section-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-section-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-tile-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-card-primary.uk-card-body .uk-open>.uk-accordion-title::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-open>.uk-accordion-title::before,.uk-card-secondary.uk-card-body .uk-open>.uk-accordion-title::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-open>.uk-accordion-title::before,.uk-overlay-primary .uk-open>.uk-accordion-title::before,.uk-offcanvas-bar .uk-open>.uk-accordion-title::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,.7)%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-table-striped>tr:nth-of-type(even):last-child,.uk-light .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-section-primary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(even):last-child,.uk-section-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(even):last-child,.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(even):last-child,.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(even):last-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-card-primary.uk-card-body .uk-table-striped>tr:nth-of-type(even):last-child,.uk-card-primary.uk-card-body .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-card-primary>:not([class*=uk-card-media]) .uk-table-striped>tr:nth-of-type(even):last-child,.uk-card-primary>:not([class*=uk-card-media]) .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-card-secondary.uk-card-body .uk-table-striped>tr:nth-of-type(even):last-child,.uk-card-secondary.uk-card-body .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-striped>tr:nth-of-type(even):last-child,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-overlay-primary .uk-table-striped>tr:nth-of-type(even):last-child,.uk-overlay-primary .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-offcanvas-bar .uk-table-striped>tr:nth-of-type(even):last-child,.uk-offcanvas-bar .uk-table-striped tbody tr:nth-of-type(even):last-child{border-bottom-color:rgba(255,255,255,.2)}@media print{*,*::before,*::after{background:rgba(0,0,0,0) !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}*{font-family:"Roboto",sans-serif}.markdown h1{color:#404040}.markdown h2{color:#404040}.markdown h3{color:#404040} \ No newline at end of file diff --git a/branch/main/tasks/index.html b/branch/main/tasks/index.html new file mode 100644 index 000000000..706113a92 --- /dev/null +++ b/branch/main/tasks/index.html @@ -0,0 +1,1050 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + +
+

Tasks and roadmap

+

This page exists to make it easier to help and easier to see what project +members are working on and what tasks they prioritize.

+

We wanted to move this from our heads and from our notebooks and make this +visible and accessible for everybody who wants to help and be involved.

+

If somebody has 1 hour +time per week or month and would like to help out, it should be easy to find +a meaningful task and to get the necessary context and contact. Bigger +tasks are too big for volunteers but we still find it useful to communicate +what we work on or would like to work on if we had more time, so that volunteer +individuals and organizations can stay informed.

+
+

In each category we try to sort tasks by priority from most urgent to least +urgent.

+
+
+

Good first issues if you have 1 hour

+ +

Issues which are easy for somebody with a bit of overview

+ +

Tasks where we struggle and can use help

+
    +
  • +

    Create a governance charter for a non-profit organization which could be the +follow-up organization for CodeRefinery.

    +
  • +
  • +

    Outreach, newsletter, social media. You can help us with blogs, drafting +newsletter, engaging in relevant social media posts.

    +
  • +
  • +

    Event management. We have many folks who like to develop lessons or teach or +help but who do not +enjoy the event management part of it. But perhaps you do? You could help +us reaching many more people.

    +
  • +
+
+
+

If you have 1 day

+
    +
  • +

    Short video which explains how to join a workshop.

    +
  • +
  • +

    Teaser video which in 3 minutes explains what the project is about.

    +
  • +
  • +

    Teaser slide deck (5 slides?) which explains what the project is about and +how organizations can get on board.

    +
  • +
  • +

    Make one of our lessons citable starting from +https://coderefinery.org/blog/2021/11/21/towards-citable-lessons/. Use a +CITATION.cff file and from that one generate the .zenodo.json file and +deploy to Zenodo. Document how to do this for all other lessons. Contact JH +or RB if you want to join this task.

    +
  • +
  • +

    Take an issue from +our install instructions.

    +
  • +
  • +

    Take a lesson issue which looks +interesting and easy to you from one of our +lessons. Ask on chat +or mention @bast if you want more context about any of these.

    +
  • +
  • +

    Draft and execute a post-workshop survey for 2021-2023 workshops starting +from https://github.com/coderefinery/post-workshop-survey.

    +
  • +
  • +

    Draft a blog post about the tools we use based on a nice chat thread (GitHub +issue).

    +
  • +
+

Tasks for multiple days

+
    +
  • +

    Create a survey and collect testimonials from +GitLab users. Contact RB.

    +
  • +
  • +

    Prepare a financing plan from the GitLab +service. Contact RB.

    +
  • +
+
+
+
+

Recently finished

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/workshops/discipline-online.png b/branch/main/workshops/discipline-online.png new file mode 100644 index 000000000..dac295cd5 Binary files /dev/null and b/branch/main/workshops/discipline-online.png differ diff --git a/branch/main/workshops/disciplines_positions.png b/branch/main/workshops/disciplines_positions.png new file mode 100644 index 000000000..83df85b0a Binary files /dev/null and b/branch/main/workshops/disciplines_positions.png differ diff --git a/branch/main/workshops/full-workshops.yml b/branch/main/workshops/full-workshops.yml new file mode 100644 index 000000000..219a84209 --- /dev/null +++ b/branch/main/workshops/full-workshops.yml @@ -0,0 +1,894 @@ +events: + - name: Full online workshop (6 half-days) + website: https://coderefinery.github.io/2023-09-19-workshop/ + start_date: "2023-09-19" + end_date: "2023-09-28" + host: + - Radovan Bast + - Richard Darst + - Enrico Glerean + - Matias Jääskeläinen + instructors: + - Radovan Bast + - Richard Darst + - Enrico Glerean + - Johan Hellsvik + - Matias Jääskeläinen + - Thomas Pfau + - Dhanya Pushpadas + - Jarno Rantaharju + - Samantha Wittke + expert_helpers: + - Diana Iusan + - Enrico Glerean + - Teemu Ruokolainen + num_participants: + NO: 103 + FI: 100 + SE: 31 + NL: 19 + IN: 16 + FR: 12 + GE: 11 + IT: 9 + UK: 5 + US: 5 + PO: 5 + SP: 5 + total: 360 + twitch_viewers: + smallest_viewers_max: 145 + largest_viewers_max: 54 + - name: Full online workshop (6 half-days) + website: https://coderefinery.github.io/2023-03-21-workshop/ + start_date: "2023-03-21" + end_date: "2023-03-30" + host: + - Radovan Bast + - Richard Darst + - Enrico Glerean + - Matias Jääskeläinen + - Dhanya Pushpadas + - Samantha Wittke + instructors: + - Radovan Bast + - Johan Hellsvik + - Diana Iusan + - Matias Jääskeläinen + - Bjørn Lindi + - Thomas Pfau + - Dhanya Pushpadas + - Teemu Ruokolainen + expert_helpers: + - Jarno Rantaharju + - Stephan Smuts + num_participants: + FI: 178 + SE: 87 + NO: 43 + ES: 24 + DK: 19 + NL: 58 + DE: 27 + ZA: 15 + IT: 9 + total: 493 + twitch_viewers: + smallest_viewers_max: 216 + largest_viewers_max: 112 + - name: Uppsala + website: https://coderefinery.github.io/2023-05-09-uppsala/ + start_date: "2023-05-09" + end_date: "2023-05-11" + instructors: + - Diana Iusan + - Thor Wikfeldt + - Johan Hellsvik + - Pavlin Mitev + - Björn Claremar + expert_helpers: + - Anastasiia Andriievska + - Qiang Li + num_participants: + SE: 15 + total: 15 + location: + lat: 59.8434075 + lon: 17.641331 + - name: Full online workshop (6 half-days) + website: https://coderefinery.github.io/2022-09-20-workshop/ + start_date: "2022-09-20" + end_date: "2022-09-29" + host: + - Radovan Bast + - Matias Jääskeläinen + - Richard Darst + instructors: + - Sabry Razick + - Samantha Wittke + - Dhanya Pushpadas + - Thomas Pfau + - Radovan Bast + - Hande Celikkanat + - Johan Hellsvik + - Thor Wikfeldt + - Jarno Rantaharju + - Matteo Tomasini + - Richard Darst + expert_helpers: + - Diana Iusan + - Thor Wikfeldt + - Johan Hellsvik + - Stephan Smuts + - Juho Lehtonen + - Dhanya Pushpadas + helpers: + - Björn Claremar + - Philip Gjedde + - Juho Lehtonen + - Bjørn Lindi + - Giordano Lipari + - Dhanya Pushpadas + - Stephanie van de Sandt + - Meron Vermaas + - Aleksandra Wilczynska + - Ruslan Zhuravchak + - Kaveh Karimi + num_participants: + FI: 76 + SE: 52 + NO: 50 + ES: 12 + DK: 7 + NL: 34 + IN: 4 + IE: 3 + CH: 3 + UK: 3 + IT: 3 + FR: 2 + US: 2 + TT: 1 + SG: 1 + CN: 1 + TH: 1 + GR: 1 + IR: 1 + TR: 1 + BR: 1 + ID: 1 + DE: 1 + CA: 1 + total: 262 + twitch_viewers: + smallest_viewers_max: 97 + largest_viewers_max: 157 + zoom_participants: + min: 25 + max: 59 + - name: Full online workshop (6 half-days) + website: https://coderefinery.github.io/2022-03-22-workshop/ + start_date: "2022-03-22" + end_date: "2022-03-31" + host: + - Radovan Bast + - Richard Darst + - Enrico Glerean + instructors: + - Radovan Bast + - Richard Darst + - Luca Ferranti + - Johan Hellsvik + - Diana Iusan + - Jarno Rantaharju + - Sabry Razick + - Thor Wikfeldt + - Samantha Wittke + expert_helpers: + - Enrico Glerean + - Bjørn Lindi + helpers: + - Niket Agrawal + - Inigo Aldazabal + - Heather Andrews + - Thomas Arildsen + - Lora Armstrong + - Susan Branchett + - Romain Caneill + - Abel Carreras + - Björn Claremar + - Juan Sebastian Diaz Boada + - Marco Foscato + - Manuel Garcia Alvarez + - Niharika Gauraha + - Agneta Ghose + - Toby Hodges + - Maurits Kok + - Bjørn Lindi + - Jose Carlos Llanusa + - Pedro Ojeda + - Dhanya Pushpadas + - Stephan Smuts + - Ingrid Strandberg + - Aleksandra Wilczynska + num_participants: + AT: 1 + BD: 1 + BR: 1 + DK: 14 + FI: 54 + FR: 1 + DE: 6 + HU: 1 + IN: 2 + IT: 2 + MM: 1 + NL: 55 + NG: 1 + NO: 87 + PK: 1 + ES: 16 + SE: 46 + CH: 1 + UK: 3 + US: 3 + total: 297 + twitch_viewers: + smallest_viewers_max: 144 + largest_viewers_max: 215 + - name: Full online workshop (6 half-days) + website: https://coderefinery.github.io/2021-05-10-workshop/ + start_date: "2021-05-10" + end_date: "2021-05-20" + host: + - Richard Darst + instructors: + - Radovan Bast + - Anne Fouilloux + - Johan Hellsvik + - Diana Iusan + - Juho Lehtonen + - Sabry Razick + - Thor Wikfeldt + - Samantha Wittke + expert_helpers: + - Richard Darst + - Max R. Eckardt + - Patric Holmvall + - Anni Järvenpää + - Stefan Negru + - Jarno Rantaharju + - Marijn van Vliet + helpers: + - Niket Agrawal + - Octavian Andrei + - Thomas Arildsen + - Flavio Calvo + - Ted Hsuan Yun Chen + - Luca Ferranti + - Marco Foscato + - Manuel Garcia Alvarez + - Luc Girod + - Shashank Shekhar Harivyasi + - Patric Holmvall + - Sunniva Indrehus + - Stig Rune Jensen + - Matúš Kalaš + - Alberto Lazzarotto + - Lesetja Lekoloane + - Pavlin Mitev + - Devaraju Narayanappa + - Fabricio Oliveira + - Massimo Pizzol + - Evgeny Posenitskiy + - Ankita Priya + - Annajiat Alim Rasel + - Aili Sarre + - Jannetta Steyn + - Ingrid Strandberg + - Naoe Tatara + - Will Usher + num_participants: + SE: 21 + NO: 43 + FI: 24 + DK: 12 + NL: 16 + BD: 1 + FR: 1 + IN: 1 + IT: 3 + SL: 1 + ZA: 3 + CH: 0 + UK: 2 + total: 128 + - name: Online + website: https://coderefinery.github.io/2020-11-17-online/ + start_date: "2020-11-17" + end_date: "2020-11-26" + host: + - Naoe Tatara + instructors: + - Radovan Bast + - Anne Fouilloux + - Matus Kalas + - Pavlin Mitev + - Sabry Razick + - Thor Wikfeldt + expert_helpers: + - Richard Darst + - Max R. Eckardt + - Juho Lehtonen + - Emiliano Molinaro + - Stefan Negru + - Samantha Wittke + helpers: + - Octavian Andrei + - Raphaela Heil + - Johan Hellsvik + - Patric Holmvall + - Diana Iusan + - Matthew Morris + - Athanasios Protopapas + - Annajiat Alim Rasel + - Anthony Scemama + - Ingrid Strandberg + num_participants: + NO: 26 + SE: 27 + FI: 3 + FR: 4 + PL: 2 + IN: 1 + DE: 4 + BE: 1 + BD: 1 + ES: 3 + CH: 1 + US: 2 + UK: 2 + total: 77 + - name: Online + website: https://coderefinery.github.io/2020-10-20-online/ + start_date: "2020-10-20" + end_date: "2020-10-29" + host: + - Richard Darst + - Naoe Tatara + - Radovan Bast + instructors: + - Radovan Bast + - Richard Darst + - Johan Hidding + - Jarno Rantaharju + - Sabry Razick + - Marijn van Vliet + - Jens Wehner + - Thor Wikfeldt + expert_helpers: + - Enrico Glerean + - Juho Lehtonen + - Samantha Wittke + helpers: + - Niket Agrawal + - Susan Branchett + - Simoneta Caño de Las Heras + - Amir Ebrahimi Fard + - Johan Hidding + - Jakob Sauer Jørgensen + - Maurits Kok + - Raul Ortiz Merino + - Ingrid Strandberg + - Evelien Van Dijk + - Jens Wehner + num_participants: + DK: 11 + FI: 22 + MA: 1 + NL: 43 + NO: 4 + SE: 19 + total: 100 + - name: Online (Mega-CodeRefinery) + website: https://coderefinery.github.io/2020-05-25-online/ + start_date: "2020-05-25" + end_date: "2020-06-04" + host: + - Naoe Tatara + instructors: + - Radovan Bast + - Anne Fouilloux + - Bjørn Lindi + - Thor Wikfeldt + - Stefan Negru + - Richard Darst + expert_helpers: + - Enrico Glerean + - Jarno Rantaharju + - Juho Lehtonen + - Sabry Razick + helpers: + - Daniel Holmberg + - Ebrahim Afyounian + - Erika Yashiro + - Francesco Tabaro + - Joakim Löfgren + - Kerstin Lenk + - Lauri Neuvonen + - Luis Amezcua + - Mikael Djurfeldt + - Mikko Heikkilä + - Pengfei Xu + - Preethy Nair + - Raphaela Heil + - Rohit Goswami + - Samantha Wittke + - Sebastian Schmidt + - Tomi Häkkinen + - Tuomas Rossi + - Ygor Morais Jaques + num_participants: + DK: 2 + FI: 75 + IS: 1 + NP: 1 + NO: 16 + SE: 5 + UK: 1 + US: 1 + total: 102 + - name: Trondheim + start_date: "2020-02-25" + end_date: "2020-02-27" + instructors: + - Anne Fouilloux + - Bjørn Lindi + - Nico Reissmann + helpers: + - Radek Lonka + num_participants: + NO: 26 + SE: 1 + PL: 1 + total: 28 + location: + lat: 63.41921 + lon: 10.402319 + - name: Espoo + start_date: "2019-12-10" + end_date: "2019-12-12" + instructors: + - Radovan Bast + - Richard Darst + - Enrico Glerean + - Juho Lehtonen + - João M. da Silva + - Jarno Rantaharju + helpers: + - Marijn Van Vliet + - Anni Järvenpää + - Shreyas Deshpande + num_participants: + FI: 30 + total: 30 + location: + lat: 60.18708 + lon: 24.82909 + - name: Lille + start_date: "2019-11-25" + end_date: "2019-12-05" + instructors: + - Radovan Bast + num_participants: + FR: 28 + total: 28 + location: + lat: 50.61141 + lon: 3.14053 + - name: Stockholm + start_date: "2019-11-19" + end_date: "2019-11-21" + instructors: + - Thor Wikfeldt + - Radovan Bast + - Anne Fouilloux + helpers: + - Dmytro Kryvokhyzha + - Carolina Robustini + - Ashwin Vishnu + num_participants: + SE: 28 + total: 28 + location: + lat: 59.35002 + lon: 18.02398 + - name: Trondheim + start_date: "2019-10-22" + end_date: "2019-10-24" + instructors: + - Thor Wikfeldt + - Radovan Bast + - Bjørn Lindi + helpers: + - Nico Reissmann + - Radek Lonka + num_participants: + NO: 20 + total: 20 + location: + lat: 63.41594 + lon: 10.40656 + - name: Aalborg + start_date: "2019-06-11" + end_date: "2019-06-13" + instructors: + - Max Roald Eckardt + - Radovan Bast + - Sabry Razick + helpers: + - Thomas Arildsen + - Vang Que Le + - Tobias Lindstrøm Jensen + - Emiliano Molinaro + - Lucy Whalley + num_participants: + DK: 18 + US: 1 + UK: 1 + total: 20 + location: + lat: 57.01398 + lon: 9.98891 + - name: Oslo + start_date: "2019-06-03" + end_date: "2019-06-05" + instructors: + - Radovan Bast + - Sabry Razick + - Anne Fouilloux + - Stefan Negru + helpers: + - Jean Iaquinta + num_participants: + NO: 18 + DK: 1 + SE: 1 + total: 20 + location: + lat: 59.94347 + lon: 10.718161 + - name: Helsinki + start_date: "2019-05-27" + end_date: "2019-05-29" + instructors: + - Richard Darst + - Juho Lehtonen + - João M. da Silva + - Stefan Negru + helpers: + - Manana Koberidze + - Enrico Glerean + num_participants: + FI: 26 + SE: 1 + total: 27 + location: + lat: 60.20444 + lon: 24.96171 + - name: Gothenburg + start_date: "2019-05-21" + end_date: "2019-05-23" + instructors: + - Max Roald Eckardt + - Anne Fouilloux + - Bjørn Lindi + - Thor Wikfeldt + helpers: + - Leif Wigge + - Tuomas Rossi + - Mikael Öhman + num_participants: + SE: 25 + total: 25 + location: + lat: 57.70887 + lon: 11.97456 + - name: Tartu + start_date: "2019-04-02" + end_date: "2019-04-04" + instructors: + - Bjørn Lindi + - João M. da Silva + - Radovan Bast + - Sabry Razick + helpers: + - Dmytro Fishman + - Ivan Kuzmin + - Mikhail Papkov + num_participants: + EE: 25 + DE: 1 + total: 26 + location: + lat: 58.37085 + lon: 26.71472 + - name: Stockholm + start_date: "2019-03-25" + end_date: "2019-03-27" + instructors: + - Radovan Bast + - Thor Wikfeldt + - Juho Lehtonen + helpers: + - Tor Kjellsson Lindblom + num_participants: + SE: 28 + DE: 2 + total: 30 + location: + lat: 59.34819 + lon: 18.07489 + - name: Espoo + start_date: "2018-12-11" + end_date: "2018-12-13" + instructors: + - Stefan Negru + - Juho Lehtonen + - Radovan Bast + - Richard Darst + helpers: + - João M. da Silva + - Pradeep Eranti + num_participants: + FI: 31 + DK: 1 + UK: 1 + total: 33 + location: + lat: 60.18708 + lon: 24.82909 + - name: Uppsala + start_date: "2018-12-03" + end_date: "2018-12-05" + instructors: + - Thor Wikfeldt + - Radovan Bast + - Max Schön + helpers: + - Hadrien Gourlé + num_participants: + SE: 30 + NO: 1 + total: 31 + location: + lat: 59.8434075 + lon: 17.641331 + - name: Kiruna + start_date: "2018-11-21" + end_date: "2018-11-23" + instructors: + - Thor Wikfeldt + - Max Roald Eckardt + - Sabry Razick + - Radovan Bast + num_participants: + SE: 36 + NO: 1 + CH: 1 + total: 38 + location: + lat: 67.85 + lon: 20.2166667 + - name: Reykjavik + start_date: "2018-08-21" + end_date: "2018-08-23" + instructors: + - Thor Wikfeldt + - Bjørn Lindi + - Radovan Bast + num_participants: + IS: 22 + SE: 3 + CH: 1 + total: 26 + location: + lat: 64.1396 + lon: -21.9519 + - name: Oslo + start_date: "2018-06-12" + end_date: "2018-06-14" + instructors: + - Sabry Razick + - Sri Harsha Vathsavayi + - Richard Darst + helpers: + - Anne Fouilloux + num_participants: + NO: 38 + DE: 1 + SE: 3 + total: 42 + location: + lat: 59.94347 + lon: 10.718161 + - name: Espoo + start_date: "2018-05-29" + end_date: "2018-05-31" + instructors: + - Jyry Suvilehto + - Sri Harsha Vathsavayi + - Richard Darst + num_participants: + FI: 48 + total: 48 + location: + lat: 60.18708 + lon: 24.82909 + - name: Lund + start_date: "2018-05-15" + end_date: "2018-05-17" + instructors: + - Radovan Bast + - Sabry Razick + - Thor Wikfeldt + num_participants: + SE: 30 + DK: 1 + total: 31 + location: + lat: 55.715043 + lon: 13.212401 + - name: Turku + start_date: "2018-03-20" + end_date: "2018-03-22" + instructors: + - Jyry Suvilehto + - Radovan Bast + - Sri Harsha Vathsavayi + helpers: + - Zubair Maalick + num_participants: + FI: 22 + SE: 1 + total: 23 + location: + lat: 60.4493 + lon: 22.2952 + - name: Trondheim + start_date: "2018-02-27" + end_date: "2018-03-01" + instructors: + - Bjørn Lindi + - Radovan Bast + - Thor Wikfeldt + num_participants: + NO: 20 + SE: 1 + DK: 1 + total: 22 + location: + lat: 63.4208 + lon: 10.3928 + - name: Espoo + start_date: "2017-12-14" + end_date: "2017-12-16" + instructors: + - Bjørn Lindi + - Jyry Suvilehto + - N. D. + - Radovan Bast + - Sri Harsha Vathsavayi + - Seija Sirkiä + helpers: + - Janne Blomqvist + - Richard Darst + - Mika Jalava + - Harshit Agrawal + - Vesa Vahermaa + num_participants: + FI: 40 + total: 40 + location: + lat: 60.18708 + lon: 24.82909 + - name: Linköping + start_date: "2017-11-07" + end_date: "2017-11-09" + instructors: + - Radovan Bast + - Thor Wikfeldt + - Sabry Razick + helpers: + - Peter Kjellström + num_participants: + NO: 1 + SE: 21 + total: 22 + location: + lat: 58.3978 + lon: 15.576 + - name: Aarhus + start_date: "2017-10-24" + end_date: "2017-10-26" + instructors: + - Bjørn Lindi + - Radovan Bast + - Thor Wikfeldt + - Sabry Razick + helpers: + - Dan Mønster + num_participants: + DK: 24 + SE: 3 + total: 27 + location: + lat: 56.1681 + lon: 10.203 + - name: Tromsø + start_date: "2017-06-19" + end_date: "2017-06-21" + instructors: + - Bjørn Lindi + - Radovan Bast + - Thor Wikfeldt + - Jyry Suvilehto + num_participants: + BE: 1 + SE: 1 + NO: 21 + total: 23 + location: + lat: 69.68137 + lon: 18.97228 + - name: Copenhagen + start_date: "2017-05-09" + end_date: "2017-05-11" + instructors: + - Sri Harsha Vathsavayi + - N. D. + - Radovan Bast + - Jyry Suvilehto + num_participants: + SE: 3 + NL: 1 + DK: 19 + total: 23 + location: + lat: 55.78626 + lon: 12.523 + - name: Stockholm + start_date: "2017-02-20" + end_date: "2017-02-22" + instructors: + - Sabry Razick + - N. D. + - Radovan Bast + - Thor Wikfeldt + - Bjørn Lindi + helpers: + - Cristian Cira + num_participants: + SE: 34 + total: 34 + location: + lat: 59.34819 + lon: 18.07489 + - name: Espoo + start_date: "2016-12-14" + end_date: "2016-12-16" + instructors: + - Jyry Suvilehto + - N. D. + - Pinja Koskinen + - Radovan Bast + - Thor Wikfeldt + helpers: + - Sri Harsha Vathsavayi + - Heikki Lehväslaiho + num_participants: + FI: 25 + total: 25 + location: + lat: 60.17833 + lon: 24.83303 diff --git a/branch/main/workshops/heatmap-online.png b/branch/main/workshops/heatmap-online.png new file mode 100644 index 000000000..1231fc079 Binary files /dev/null and b/branch/main/workshops/heatmap-online.png differ diff --git a/branch/main/workshops/heatmap_yesno.png b/branch/main/workshops/heatmap_yesno.png new file mode 100644 index 000000000..2a142de2a Binary files /dev/null and b/branch/main/workshops/heatmap_yesno.png differ diff --git a/branch/main/workshops/impact/index.html b/branch/main/workshops/impact/index.html new file mode 100644 index 000000000..cf7347365 --- /dev/null +++ b/branch/main/workshops/impact/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/branch/main/workshops/index.html b/branch/main/workshops/index.html new file mode 100644 index 000000000..230bf7b1a --- /dev/null +++ b/branch/main/workshops/index.html @@ -0,0 +1,937 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Workshops and events

+ + +
+ +
+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/workshops/instructor-training.yml b/branch/main/workshops/instructor-training.yml new file mode 100644 index 000000000..bdbfec9af --- /dev/null +++ b/branch/main/workshops/instructor-training.yml @@ -0,0 +1,60 @@ +events: + - name: Online (with FocusCoE) + website: https://coderefinery.github.io/2020-11-02-instructor-training/ + start_date: "2020-11-02" + end_date: "2020-11-09" + instructors: + - Radovan Bast + - Richard Darst + - Anne Fouilloux + - Sabry Razick + helpers: + - Jarno Rantaharju + num_participants: + total: 14 + - name: Online (with TU Delft) + website: https://coderefinery.github.io/2020-06-24-instructor-training/ + start_date: "2020-06-24" + end_date: "2020-06-25" + instructors: + - Radovan Bast + - Richard Darst + - Anne Fouilloux + helpers: + - Thor Wikfeldt + - Paula Martinez Lavanchy + num_participants: + NO: 1 + FI: 1 + NL: 21 + total: 23 + - name: Stockholm + start_date: "2019-11-04" + end_date: "2019-11-05" + organizers: + - Thor Wikfeldt + - Anne Fouilloux + - Radovan Bast + instructors: + - Thor Wikfeldt + - Anne Fouilloux + - Radovan Bast + - Radovan Bast + - Richard Darst + helpers: + - Juho Lehtonen + - Sabry Razick + - Jarno Rantaharju + - João M. da Silva + - Max Roald Eckardt + - Naoe Tatara + - Emiliano Molinaro + - Bjørn Lindi + num_participants: + NO: 8 + DK: 2 + FI: 2 + UK: 1 + EE: 2 + SE: 15 + total: 30 diff --git a/branch/main/workshops/other.yml b/branch/main/workshops/other.yml new file mode 100644 index 000000000..c88562694 --- /dev/null +++ b/branch/main/workshops/other.yml @@ -0,0 +1,469 @@ +events: + - name: 'CarpentryCon 2022: Online teaching strategies from CodeRefinery' + website: https://hackmd.io/@coderefinery/carpentrycon-2022-attendee + start_date: "2022-08-03" + end_date: "2022-08-03" + Organizer: + - Radovan Bast + - Richard Darst + instructors: + - Radovan Bast + - Richard Darst + - Luca Ferranti + - Samantha Wittke + num_participants: + total: 15 + - name: Community teaching mini-workshop + website: https://hackmd.io/@coderefinery/community-teaching-2022-summer + start_date: "2022-06-21" + end_date: "2022-06-21" + Organizer: + - Radovan Bast + - Richard Darst + instructors: + - Radovan Bast + - Richard Darst + - Diana Iusan + - Johan Hellsvik + helpers: [] + num_participants: + DK: 2 + ES: 1 + SE: 5 + NO: 7 + FI: 5 + LT: 1 + LV: 1 + total: 22 + - name: Git workshop with Compex Systems Modelling group at UiT + start_date: "2022-02-16" + end_date: "2022-02-23" + Organizer: + - Radovan Bast + instructors: + - Radovan Bast + helpers: [] + num_participants: + NO: 19 + total: 19 + - name: Python for Scientific Computing + website: https://scicomp.aalto.fi/training/scip/python-for-scicomp/ + start_date: "2021-10-25" + end_date: "2021-10-28" + Organizer: + - Richard Darst + - Enrico Glerean + instructors: + - Radovan Bast + - Richard Darst + - Enrico Glerean + - Johan Hellsvik + - Diana Iusan + - Pavlin Mitev + - Thomas Pfau + - Dhanya Pushpadas + - Jarno Rantaharju + - Sabry Razick + - Simo Tuomisto + - Marijn van Vliet + - Samantha Wittke + helpers: [] + - name: CodeRefinery workshop with focus on Git and GitLab for Metacenter + website: https://coderefinery.github.io/2021-03-25-online/ + start_date: "2021-03-25" + end_date: "2021-04-08" + host: + - Sabry Razick + - Radovan Bast + instructors: + - Sabry Razick + - Radovan Bast + helpers: [] + num_participants: + NO: 15 + total: 15 + - name: Online CodeRefinery Hackathon on Software Testing + website: https://coderefinery.github.io/2021-03-17-testing-hackathon/ + start_date: "2021-03-17" + end_date: "2021-03-24" + host: + - Naoe Tatara + - Thor Wikfeldt + mentors: + - Anne Fouilloux + - Diana Iusan + - Johan Hellsvik + - Mark Abraham + - Qiang Li + - Radovan Bast + - Richard Darst + - Roberto Di Remigio + - Samantha Wittke + - Thor Wikfeldt + helpers: + - Naoe Tatara + num_participants: + NO: 6 + FI: 4 + SE: 16 + DK: 3 + ZA: 4 + total: 33 + - name: Online CodeRefinery Workshop on Software Testing + website: https://coderefinery.github.io/2021-03-17-testing-hackathon/ + start_date: "2021-03-17" + end_date: "2021-03-17" + host: + - Naoe Tatara + - Thor Wikfeldt + instructors: + - Diana Iusan + - Johan Hellsvik + - Mark Abraham + - Thor Wikfeldt + helpers: + - Qiang Li + - Radovan Bast + - Roberto Di Remigio + - Samantha Wittke + - Naoe Tatara + num_participants: + NO: 14 + FI: 7 + SE: 31 + DK: 5 + IE: 1 + NL: 2 + UK: 1 + FR: 2 + TN: 1 + ZA: 5 + total: 69 + - name: Introduction to Shell, Computing resources for researchers, and HPC Kickstart (Aalto University and University of Oslo) (online) + website: https://coderefinery.github.io/2021-01-29-linux-online/ + start_date: "2021-01-29" + end_date: "2021-01-29" + instructors: + - Richard Darst + - Enrico Glerean + - Anne Fouilloux + - Sabry Razick + helpers: + - Marijn van Vliet + - Jarno Rantaharju + - Naoe Tatara + num_participants: + NO: 59 + FI: 71 + total: 130 + - name: Introduction to Conda for (Data) Scientists (online) + website: https://coderefinery.github.io/2021-01-08-coderefinery-online/ + start_date: "2021-01-08" + end_date: "2021-01-08" + instructors: + - Anne Fouilloux + - Samantha Wittke + helpers: + - Niket Agrawal + - Octavian Andrei + - Radovan Bast + - Emiliano Gelati + - Tomasz Kopec + - Emilia Lipponen + - Lex Nederbragt + - Hui Tang + - Sabry Razick + - Naoe Tatara + num_participants: + NO: 39 + FI: 5 + NL: 2 + SE: 1 + IN: 1 + total: 48 + - name: Collaborative version control with Git (online) + website: https://coderefinery.github.io/2020-12-10-online/ + start_date: "2020-12-10" + end_date: "2020-12-11" + instructors: + - Anne Fouilloux + - Radovan Bast + helpers: + - Sabry Razick + num_participants: + NO: 15 + total: 15 + - name: Version control (Karlstad/online) + website: https://wikfeldt.github.io/2020-09-22-karlstad/ + start_date: "2020-09-22" + end_date: "2020-09-23" + instructors: + - Raphaela Heil + - Thor Wikfeldt + - Pavlin Mitev + helpers: + - Diana Iusan + num_participants: + SE: 11 + CN: 1 + total: 12 + - name: Python for Scientific Computing (online) + website: https://scicomp.aalto.fi/training/scip/python-for-scicomp/ + start_date: "2020-09-14" + end_date: "2020-09-23" + host: + - Naoe Tatara + instructors: + - Anne Fouilloux + - Richard Darst + - Samantha Wittke + - Thor Wikfeldt + - Radovan Bast + num_participants: + FI: 41 + NO: 24 + SE: 3 + total: 68 + - name: GitHub without command line (Tampere/online) + start_date: "2020-08-13" + end_date: "2020-08-13" + instructors: + - Radovan Bast + - Richard Darst + helpers: + - Kerstin Lenk + - Narayan Puthanmadam Subramaniyam + num_participants: + FI: 16 + total: 16 + location: + lat: 61.49512 + lon: 23.77887 + - name: Workshop for those familiar with Git (online) + website: https://coderefinery.github.io/2020-05-18-online/ + start_date: "2020-05-18" + end_date: "2020-05-20" + host: + - Naoe Tatara + instructors: + - Radovan Bast + - Bjørn Lindi + - Sabry Razick + - Thor Wikfeldt + helpers: + - Richard Darst + - Max Roald Eckardt + - Juho Lehtonen + - Pavlin Mitev + num_participants: + SE: 20 + NO: 2 + FI: 1 + DE: 2 + unknown: 2 + total: 27 + - name: Collaborative Git (online) + website: https://coderefinery.github.io/2020-05-06-online/ + start_date: "2020-05-06" + end_date: "2020-05-06" + instructors: + - Anne Fouilloux + - Bjørn Lindi + - Thor Wikfeldt + - Stefan Negru + helpers: + - Radovan Bast + - Richard Darst + - Juho Lehtonen + - Sabry Razick + num_participants: + SE: 25 + NO: 5 + DK: 4 + FI: 3 + total: 37 + - name: GitHub without command line (online) + start_date: "2020-04-15" + end_date: "2020-04-22" + instructors: + - Radovan Bast + num_participants: + NO: 10 + total: 10 + - name: Introduction to Git (online) + website: https://coderefinery.github.io/2020-04-07-online/ + start_date: "2020-04-07" + end_date: "2020-04-08" + instructors: + - Anne Fouilloux + - Radovan Bast + - Thor Wikfeldt + - Richard Darst + helpers: + - Flavio Calvo + - João M. da Silva + - Pedro Ojeda May + - Pavlin Mitev + - Hasti Narimanzadeh + num_participants: + SE: 19 + FI: 1 + DE: 2 + total: 22 + - name: Best Software Practices for the Norwegian Earth System Model (Oslo/Bergen/Online) + start_date: "2020-02-05" + end_date: "2020-02-05" + instructors: + - Anne Fouilloux + num_participants: + NO: 30 + total: 30 + - name: Social coding and open software (Oslo) + website: https://www.ub.uio.no/english/courses-events/events/all-libraries/2020/research-bazaar/social-coding.html + start_date: "2020-01-09" + end_date: "2020-01-09" + instructors: + - Anne Fouilloux + num_participants: + NO: 21 + total: 21 + location: + lat: 59.91712 + lon: 10.73719 + - name: Hackathon (Stockholm) + start_date: "2019-11-06" + end_date: "2019-11-07" + organizers: + - Thor Wikfeldt + - Anne Fouilloux + - Radovan Bast + speakers: + - Rosa Lönneborg + - Richard Darst + - Anne Fouilloux + - Radovan Bast + num_participants: + NO: 8 + FI: 3 + DK: 1 + UK: 1 + EE: 1 + SE: 4 + total: 18 + location: + lat: 59.34781 + lon: 18.07257 + - name: Reproducibility workshop (Stockholm) + start_date: "2019-09-09" + end_date: "2019-09-12" + instructors: + - Thor Wikfeldt + - Will Usher + num_participants: + SE: 12 + total: 12 + location: + lat: 59.34847 + lon: 18.0729 + - name: Python for Dynamics and Evolution of Earth and Planets (Oslo) + website: https://annefou.github.io/2019-04-01-deep/ + start_date: "2019-04-01" + end_date: "2019-04-05" + instructors: + - Nils Charles Prieur + - Anne Fouilloux + num_participants: + NO: 12 + total: 12 + location: + lat: 59.94347 + lon: 10.718161 + - name: Mixed Arts with CodeRefinery & Software Carpentry (Copenhagen) + website: https://kln-courses.github.io/mixed-arts/ + start_date: "2019-03-05" + end_date: "2019-03-05" + instructors: + - Annika Rockenberger + - Max Roald Eckardt + num_participants: + DK: 40 + total: 40 + location: + lat: 55.66293 + lon: 12.59031 + - name: Git in practice (Oslo) + website: https://uio-carpentry.github.io/2019-02-27-git/ + start_date: "2019-02-27" + end_date: "2019-02-27" + instructors: + - Sabry Razick + - Anne Fouilloux + helpers: + - 'Annika Rockenberger ' + num_participants: + NO: 18 + total: 18 + location: + lat: 59.939637 + lon: 10.723291 + - name: Git workshop (Umeå) + start_date: "2017-10-16" + end_date: "2017-10-16" + instructors: + - Radovan Bast + - Jyry Suvilehto + - Thor Wikfeldt + num_participants: + SE: 21 + total: 21 + location: + lat: 63.8191 + lon: 20.31 + - name: 'Workshop: Interfacing Fortran, C, C++, and Python (Manchester)' + website: https://rse.ac.uk/conf2017/workshop-and-tutorial-abstracts/#mixed-martial-arts-with-coderefinery + start_date: "2017-09-08" + end_date: "2017-09-08" + instructors: + - Radovan Bast + num_participants: + total: 15 + location: + lat: 53.47724 + lon: -2.25475 + - name: 'Workshop: Mixed Martial Arts with CodeRefinery (Umeå)' + website: http://neic2017.nordforsk.org/workshops/coderefinery/ + start_date: "2017-05-29" + end_date: "2017-05-29" + instructors: + - Bjørn Lindi + - Radovan Bast + num_participants: + total: 15 + location: + lat: 63.8267 + lon: 20.2665 + - name: CodeRefinery get-together (Stockholm) + start_date: "2017-05-19" + end_date: "2017-05-19" + organizers: + - Radovan Bast + - Thor Wikfeldt + speakers: + - Mark Abraham + - Mikael Leetmaa + num_participants: + SE: 15 + total: 15 + location: + lat: 59.34819 + lon: 18.07489 + - name: CodeRefinery seminar (Oslo) + website: https://www.uio.no/english/services/it/research/events/coderefinery-2017-april.html + start_date: "2017-04-06" + end_date: "2017-04-06" + num_participants: + NO: 15 + total: 15 + location: + lat: 59.94347 + lon: 10.718161 diff --git a/branch/main/workshops/past/index.html b/branch/main/workshops/past/index.html new file mode 100644 index 000000000..d3b2b3e42 --- /dev/null +++ b/branch/main/workshops/past/index.html @@ -0,0 +1,3008 @@ + + + + Past workshops and events - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Past workshops and events + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +

Past workshops and events

+

This page lists the standard core CodeRefinery +workshop as well as other teaching events by the +CodeRefinery team. Before March 2020, we focused on small/medium +in-person workshops at sites around the Nordics. After that, we +focused on online teaching, and by the time in-person restrictions +were over, the CodeRefinery teaching +style was so well developed that we +are continuing online with in-person workshops as requested.

+ + +
+
+

(locations "in the ocean" represent online events)

+
+ + + +
+
+

Standard CodeRefinery workshops

+ + + +
    + + + + +
  • + + Full online workshop (6 half-days) + +
    + +   + + + Sep 19 + - + Sep 28, 2023 + + +   + (360 participants) + +
    +
  • + + + + + +
  • + + Full online workshop (6 half-days) + +
    + +   + + + Mar 21 + - + Mar 30, 2023 + + +   + (493 participants) + +
    +
  • + + + + + +
  • + + Uppsala + +
    + +   + + + May 9 + - + May 11, 2023 + + +   + (15 participants) + +
    +
  • + + + + + +
  • + + Full online workshop (6 half-days) + +
    + +   + + + Sep 20 + - + Sep 29, 2022 + + +   + (262 participants) + +
    +
  • + + + + + +
  • + + Full online workshop (6 half-days) + +
    + +   + + + Mar 22 + - + Mar 31, 2022 + + +   + (297 participants) + +
    +
  • + + + + + +
  • + + Full online workshop (6 half-days) + +
    + +   + + + May 10 + - + May 20, 2021 + + +   + (128 participants) + +
    +
  • + + + + + +
  • + + Online + +
    + +   + + + Nov 17 + - + Nov 26, 2020 + + +   + (77 participants) + +
    +
  • + + + + + +
  • + + Online + +
    + +   + + + Oct 20 + - + Oct 29, 2020 + + +   + (100 participants) + +
    +
  • + + + + + +
  • + + Online (Mega-CodeRefinery) + +
    + +   + + + May 25 + - + Jun 4, 2020 + + +   + (102 participants) + +
    +
  • + + + + + +
  • + + Trondheim + +
    + +   + + + Feb 25 + - + Feb 27, 2020 + + +   + (28 participants) + +
    +
  • + + + + + +
  • + + Espoo + +
    + +   + + + Dec 10 + - + Dec 12, 2019 + + +   + (30 participants) + +
    +
  • + + + + + +
  • + + Lille + +
    + +   + + + Nov 25 + - + Dec 5, 2019 + + +   + (28 participants) + +
    +
  • + + + + + +
  • + + Stockholm + +
    + +   + + + Nov 19 + - + Nov 21, 2019 + + +   + (28 participants) + +
    +
  • + + + + + +
  • + + Trondheim + +
    + +   + + + Oct 22 + - + Oct 24, 2019 + + +   + (20 participants) + +
    +
  • + + + + + +
  • + + Aalborg + +
    + +   + + + Jun 11 + - + Jun 13, 2019 + + +   + (20 participants) + +
    +
  • + + + + + +
  • + + Oslo + +
    + +   + + + Jun 3 + - + Jun 5, 2019 + + +   + (20 participants) + +
    +
  • + + + + + +
  • + + Helsinki + +
    + +   + + + May 27 + - + May 29, 2019 + + +   + (27 participants) + +
    +
  • + + + + + +
  • + + Gothenburg + +
    + +   + + + May 21 + - + May 23, 2019 + + +   + (25 participants) + +
    +
  • + + + + + +
  • + + Tartu + +
    + +   + + + Apr 2 + - + Apr 4, 2019 + + +   + (26 participants) + +
    +
  • + + + + + +
  • + + Stockholm + +
    + +   + + + Mar 25 + - + Mar 27, 2019 + + +   + (30 participants) + +
    +
  • + + + + + +
  • + + Espoo + +
    + +   + + + Dec 11 + - + Dec 13, 2018 + + +   + (33 participants) + +
    +
  • + + + + + +
  • + + Uppsala + +
    + +   + + + Dec 3 + - + Dec 5, 2018 + + +   + (31 participants) + +
    +
  • + + + + + +
  • + + Kiruna + +
    + +   + + + Nov 21 + - + Nov 23, 2018 + + +   + (38 participants) + +
    +
  • + + + + + +
  • + + Reykjavik + +
    + +   + + + Aug 21 + - + Aug 23, 2018 + + +   + (26 participants) + +
    +
  • + + + + + +
  • + + Oslo + +
    + +   + + + Jun 12 + - + Jun 14, 2018 + + +   + (42 participants) + +
    +
  • + + + + + +
  • + + Espoo + +
    + +   + + + May 29 + - + May 31, 2018 + + +   + (48 participants) + +
    +
  • + + + + + +
  • + + Lund + +
    + +   + + + May 15 + - + May 17, 2018 + + +   + (31 participants) + +
    +
  • + + + + + +
  • + + Turku + +
    + +   + + + Mar 20 + - + Mar 22, 2018 + + +   + (23 participants) + +
    +
  • + + + + + +
  • + + Trondheim + +
    + +   + + + Feb 27 + - + Mar 1, 2018 + + +   + (22 participants) + +
    +
  • + + + + + +
  • + + Espoo + +
    + +   + + + Dec 14 + - + Dec 16, 2017 + + +   + (40 participants) + +
    +
  • + + + + + +
  • + + Linköping + +
    + +   + + + Nov 7 + - + Nov 9, 2017 + + +   + (22 participants) + +
    +
  • + + + + + +
  • + + Aarhus + +
    + +   + + + Oct 24 + - + Oct 26, 2017 + + +   + (27 participants) + +
    +
  • + + + + + +
  • + + Tromsø + +
    + +   + + + Jun 19 + - + Jun 21, 2017 + + +   + (23 participants) + +
    +
  • + + + + + +
  • + + Copenhagen + +
    + +   + + + May 9 + - + May 11, 2017 + + +   + (23 participants) + +
    +
  • + + + + + +
  • + + Stockholm + +
    + +   + + + Feb 20 + - + Feb 22, 2017 + + +   + (34 participants) + +
    +
  • + + + + + +
  • + + Espoo + +
    + +   + + + Dec 14 + - + Dec 16, 2016 + + +   + (25 participants) + +
    +
  • + + +
+ + +

Open house events

+ +
+ +
+

Instructor training events

+ + + +
    + + + + +
  • + + Online (with FocusCoE) + +
    + +   + + + Nov 2 + - + Nov 9, 2020 + + +   + (14 participants) + +
    +
  • + + + + + +
  • + + Online (with TU Delft) + +
    + +   + + + Jun 24 + - + Jun 25, 2020 + + +   + (23 participants) + +
    +
  • + + + + + +
  • + + Stockholm + +
    + +   + + + Nov 4 + - + Nov 5, 2019 + + +   + (30 participants) + +
    +
  • + + +
+ + +

Shorter workshops and other events

+ + + + + +
+
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/workshops/position-online.png b/branch/main/workshops/position-online.png new file mode 100644 index 000000000..86e87a3c7 Binary files /dev/null and b/branch/main/workshops/position-online.png differ diff --git a/branch/main/workshops/request/index.html b/branch/main/workshops/request/index.html new file mode 100644 index 000000000..4ec87f20d --- /dev/null +++ b/branch/main/workshops/request/index.html @@ -0,0 +1,925 @@ + + + + Request a workshop - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Request a workshop + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Request a workshop

+ + + +

Join an existing workshop

+

Requesting a workshop is so 2019, isn't it? At least for us it is, +since anyone can attend any workshop. As of 2022, most of our +workshops are online and anyone may join, no matter where you are. +This isn't just because of Covid-19, but we have found that our +teaching style provides such a +high-quality program that few people show up in-person when there is +that opportunity. Join as a partner and +you can provide in-person exercise sessions and support to your local +audience.

+

Run your own workshop

+

You are welcome to re-use our materials for your own workshops. +Please don't call it a "CodeRefinery" workshop, but you can say it +uses CodeRefinery materials. (e.g. call it "Software development for +researchers (CodeRefinery)"). The policy of our name usage may change +later. You can read more about reusing our +lessons - in short, please do so (you can reuse +them right where they are), and send us improvements to support reuse.

+

Local / custom workshops requests

+

If you would like to request a private workshop, please get in +touch. As of 2022, with our updated funding +situation, CodeRefinery is more of a decentralized organization and we +may not have dedicated staff to offer workshops, but we still like to +make that possible wherever we can. Thus, you would be expected to +help with the teaching and organization some.

+

During this transition period, it's best to join the CodeRefniery +chat and discuss there - things +may change fast. It's good to ask if you are interested, even if we +can't do it yet - this shows demand and helps with future funding!

+

Since CodeRefinery still has Nordic roots, that is our main audience. +Workshops have been requested by both organizations and individual +research groups. Price might be free (e.g. a staff member at a +national computing center can provide the workshop) or some other +CodeRefinery partner might be able to name a price. We have supported +workshops even outside of the Nordics.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/workshops/statistics/index.html b/branch/main/workshops/statistics/index.html new file mode 100644 index 000000000..7c262c410 --- /dev/null +++ b/branch/main/workshops/statistics/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/branch/main/workshops/teaching-style/index.html b/branch/main/workshops/teaching-style/index.html new file mode 100644 index 000000000..e8f48b593 --- /dev/null +++ b/branch/main/workshops/teaching-style/index.html @@ -0,0 +1,970 @@ + + + + The CodeRefinery teaching style - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - The CodeRefinery teaching style + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

The CodeRefinery teaching style

+ + + +
+

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!

+

[Feedback, online Scientific Computing kickstart, June 2021]

+
+

In-person workshops are taught in the Carpentries style. Our lessons +would fit in a Carpentries workshop, and we welcome such collaboration +or even joining the Carpentries.

+

In March 2020, CodeRefinery moved online like many others. While at +first, we taught the same way as everyone else did, we were bold +enough to go farther and eventually found something special.

+

Co-teaching

+

Listening to one person is usually monotonous, even if they are an +above-average speaker. Speakers usually try to create engagement by +having the audience speak as well, but quite often the audience is too +quiet, or a few audience members dominate.

+

Instead, we do co-teaching: two instructors teach as a discussion +between them. For example, at certain times, one may assume the role +of the explainer and one the role of the one doing the demos. A +conversation is much more engaging than a lecture, and in addition, +this greatly reduces the preparation effort, since the team can fill +in any gaps together.

+

Parallel chat

+

Asking for questions by voice rarely gets many. Even when it does, a +few people often dominate. Using a standard chat in an online course +scrolls too fast and many questions get lost.

+

Parallel chat is basically "google doc" but for questions. +Questions and comments are always added to the bottom, and answers +come as needed. We have many helpers around to answer all the +questions, the point that learners sometimes complain about +information overload. Many others have tried to do something similar, +but our implementation seems to be the best.

+

Livestreaming

+

With the above developments, we don't actually need all the learners +in one "meeting". Instead, we can run the course as a livestream, and +then we can literally reach everyone who might want to attend. +Personal data for registering isn't even needed (but we do take +registrations for access to the parallel chat and other support).

+

Videos

+

Once the course is a livestream, it is trivial to release videos of +the course - there is no privacy risk, since there are no audience in +the livestream production room. These videos aren't just released, +but the streaming site provides immediate access to them, so that +learners can immediately review or catch up with things they missed. +This extra flexibility helps many more people make the most of the course.

+

Reverse hybrid

+

Just because a course is online doesn't mean that people can't +interact in-person: many do, by watching the course together in +their own space (where people can be more comfortable). Many +partner organizations run in-person breakout rooms where professional +support is provided. We call this reverse hybrid.

+

Teams

+

The best interaction is in small groups - this is the benefit of +in-person, isn't it? We support learners in forming these teams and +training team leaders for them, in addition to providing expert +helpers for additional support. These teams could meet in-person (see +"reverse hybrid" above), or online.

+

Open collaboration

+

At the scale we can reach above, we have a new level of openness. Not +only are the lesson materials open, but our very partnership in +putting on the courses is open. We often organize courses in +partnership with several organizations, with co-instructors and +helpers coming from all around. In addition to providing a higher +quality workshop for learners, this provides a more engaging and +education experience for the staff putting on the events.

+

Open collaboration allows us the resources to do all the things above.

+

Accessibility to more learning styles

+

Put together, we don't just reach more people, but we actually are +able to teach to many more learning styles. Whether you are a quiet +person and would rather ask questions anonymously (without taking time +from someone else), need to attend from your own spaces, need more +time to review after the teaching period, or more, we can do better +than most.

+

Read more

+

Our techniques and tools are as open as our teaching. Read more in +the community teaching +training or read technical +descriptions in our manuals.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/workshops/upcoming/index.html b/branch/main/workshops/upcoming/index.html new file mode 100644 index 000000000..6a0d0d69b --- /dev/null +++ b/branch/main/workshops/upcoming/index.html @@ -0,0 +1,915 @@ + + + + Upcoming workshops and events - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Upcoming workshops and events + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Upcoming workshops and events

+ + + +

Core CodeRefinery Workshops

+ +

We don't want you to miss a workshop or event. The best +way to stay informed is to join our newsletter +(we are working on reviving it and will post updates there soon). +You can also subscribe to our RSS feed.

+

Past workshops and events

+ +

Upcoming workshops from partner organizations

+

Partners are invited to send a pull +request +to list your workshop/event here.

+ +

Privacy policy

+

Our privacy policy +documents what registration data we store, where, and why.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/main/workshops/yes-no-questions-online.png b/branch/main/workshops/yes-no-questions-online.png new file mode 100644 index 000000000..ec07e86ba Binary files /dev/null and b/branch/main/workshops/yes-no-questions-online.png differ diff --git a/branch/rkdarst--open-source-courses/404.html b/branch/rkdarst--open-source-courses/404.html new file mode 100644 index 000000000..991f7d1ec --- /dev/null +++ b/branch/rkdarst--open-source-courses/404.html @@ -0,0 +1,526 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+

404, page not found (or moved to coderefinery.github.io)

+
+ +

+ Try going to NEWURL + instead. If this does not work, clear your browser cache. +

+ + + + +

+ We had to change URLs for the lessons. If you are looking for + one of the CodeRefinery lessons, try changing coderefinery.org to + coderefinery.github.io in the URL to find the page you want. +

+ + + +

+ This is not the page you are looking for ... return back to the + index page? +

+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/CNAME b/branch/rkdarst--open-source-courses/CNAME new file mode 100644 index 000000000..241b540e5 --- /dev/null +++ b/branch/rkdarst--open-source-courses/CNAME @@ -0,0 +1 @@ +coderefinery.org \ No newline at end of file diff --git a/branch/rkdarst--open-source-courses/about/code-of-conduct/index.html b/branch/rkdarst--open-source-courses/about/code-of-conduct/index.html new file mode 100644 index 000000000..9d9c3479b --- /dev/null +++ b/branch/rkdarst--open-source-courses/about/code-of-conduct/index.html @@ -0,0 +1,564 @@ + + + + Code of conduct - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Code of conduct + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Code of conduct

+ + + +

Code of conduct

+

Introduction and source of inspiration

+

In any events or community space organized by CodeRefinery, we are committed to +creating a friendly and respectful place for learning, teaching and +contributing. All participants in our events and communications are expected to +show respect and courtesy to others.

+

We follow the Code of Conduct by the +Carpentries +as primary principles. Here is a summary of CodeRefinery's Code of Conduct +adapted from the Carpentries Code of Conduct:

+

Expected behaviors

+

We are dedicated to providing a welcoming and supportive environment for all +people, regardless of background or identity. By participating in any events or +community space organized by CodeRefinery, participants accept to abide by +CodeRefinery’s Code of Conduct and accept the procedures by which any Code of +Conduct incidents are resolved. Any form of behaviour to exclude, intimidate, +or cause discomfort is a violation of the Code of Conduct.

+

In order to foster a positive and professional learning environment we encourage the following kinds of behaviours in all platforms and events:

+ +

Unexpected behaviors

+

On the other hand, unexpected behaviors include but not limited to:

+ +

Consequence of violation of Code of Conduct

+

Participants who are asked to stop any inappropriate behaviour are expected to +comply immediately. This applies to any events and community space organized by +CodeRefinery, either online or in-person. If a participant engages in behaviour +that violates this code of conduct, the organiser of the event or CodeRefinery +core team member(s) may warn the offender, ask them to leave the event or +platform (without refund, if applicable), or set up an incident-specific +CodeRefinery Code of Conduct Committee to investigate the Code of Conduct +violation and impose appropriate sanctions.

+

Incidence report

+

If you feel that the Code of Conduct was violated in an event organized by +CodeRefinery, no matter if it is online or in physical space, please notify the +coordinator/host of the event (or Code of Conduct facilitator if there is a +dedicated person). If you feel uncomfortable directly notifying someone in the +workshop, use the form in the next paragraph.

+

If the incident happened in a community space organized by CodeRefinery, please +complete this form to report the +incident.

+

Designed CodeRefinery team members have access to reported incidents. We do not +yet have a separate Code of Conduct committee, but we may set up an +incident-specific committee, if reported incidence is deemed to require it.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/about/contact/index.html b/branch/rkdarst--open-source-courses/about/contact/index.html new file mode 100644 index 000000000..6292fb96a --- /dev/null +++ b/branch/rkdarst--open-source-courses/about/contact/index.html @@ -0,0 +1,522 @@ + + + + Contact CodeRefinery - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Contact CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Contact CodeRefinery

+ + + +

CodeRefinery is a small organization so far, and no matter who you +talk to, you are close to the core.

+

Chat: Zulip

+

We use Zulip to discuss within our team and community. +We discuss in the open and you can join us on +https://coderefinery.zulipchat.com: you can listen in, follow +certain threads, participate, and influence. Learn how CodeRefinery +uses it.

+

Email: Support line

+

To ask questions about workshops or services or to report issues: +support@coderefinery.org

+

Announcements: Newsletter

+

You can subscribe to the CodeRefinery newsletter +here.

+

Announcements and social media: Mastodon and Twitter

+

If you like what we do, please reach out: +Mastodon at +@coderefinery@fosstodon.org and +Twitter at @coderefine

+

Calendars

+

See calendars.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/about/contributors/index.html b/branch/rkdarst--open-source-courses/about/contributors/index.html new file mode 100644 index 000000000..aff013350 --- /dev/null +++ b/branch/rkdarst--open-source-courses/about/contributors/index.html @@ -0,0 +1,1451 @@ + + + + CodeRefinery contributors - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery contributors + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + +

CodeRefinery contributors

+ + + +

Below we list (hopefully) all speakers, instructors, hosts, helpers, and +exercise leaders of past CodeRefinery workshops, as well as CodeRefinery events +and shared events. Without these contributions, these events would not have been possible. +Thank you so much for your contributions!

+

You can join us too.

+

People who are or were part of the project

+

Here listing all persons who were part of the project as official staff or have +contributed a significant amount of volunteer work.

+ +

On this page +our instructors share their teaching philosophies in short recorded videos.

+

Instructors, helpers, and exercise leads

+ + + + +
+
+

Instructors/speakers

+
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • Anne Fouilloux
  • + +
  • Annika Rockenberger
  • + +
  • Bjørn Lindi
  • + +
  • Dhanya Pushpadas
  • + +
  • Diana Iusan
  • + +
  • Enrico Glerean
  • + +
  • Hande Celikkanat
  • + +
  • Jarno Rantaharju
  • + +
  • Jens Wehner
  • + +
  • Johan Hellsvik
  • + +
  • Johan Hidding
  • + +
  • João M. da Silva
  • + +
  • Juho Lehtonen
  • + +
  • Jyry Suvilehto
  • + +
  • Luca Ferranti
  • + +
  • Marijn van Vliet
  • + +
  • Mark Abraham
  • + +
  • Matteo Tomasini
  • + +
  • Matus Kalas
  • + +
  • Max Roald Eckardt
  • + +
  • Max Schön
  • + +
  • N. D.
  • + +
  • Nico Reissmann
  • + +
  • Nils Charles Prieur
  • + +
  • Pavlin Mitev
  • + +
  • Pinja Koskinen
  • + +
  • Radovan Bast
  • + +
  • Raphaela Heil
  • + +
  • Richard Darst
  • + +
  • Sabry Razick
  • + +
  • Samantha Wittke
  • + +
  • Seija Sirkiä
  • + +
  • Simo Tuomisto
  • + +
  • Sri Harsha Vathsavayi
  • + +
  • Stefan Negru
  • + +
  • Thomas Pfau
  • + +
  • Thor Wikfeldt
  • + +
  • Will Usher
  • + +
+
+ +
+

Hosts, helpers, and exercise leaders

+
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • Abel Carreras
  • + +
  • Agneta Ghose
  • + +
  • Aili Sarre
  • + +
  • Alberto Lazzarotto
  • + +
  • Aleksandra Wilczynska
  • + +
  • Amir Ebrahimi Fard
  • + +
  • Ankita Priya
  • + +
  • Annajiat Alim Rasel
  • + +
  • Anne Fouilloux
  • + +
  • Anni Järvenpää
  • + +
  • Annika Rockenberger
  • + +
  • Anthony Scemama
  • + +
  • Ashwin Vishnu
  • + +
  • Athanasios Protopapas
  • + +
  • Björn Claremar
  • + +
  • Bjørn Lindi
  • + +
  • Carolina Robustini
  • + +
  • Cristian Cira
  • + +
  • Dan Mønster
  • + +
  • Daniel Holmberg
  • + +
  • Devaraju Narayanappa
  • + +
  • Dhanya Pushpadas
  • + +
  • Diana Iusan
  • + +
  • Dmytro Fishman
  • + +
  • Dmytro Kryvokhyzha
  • + +
  • Ebrahim Afyounian
  • + +
  • Emilia Lipponen
  • + +
  • Emiliano Gelati
  • + +
  • Emiliano Molinaro
  • + +
  • Enrico Glerean
  • + +
  • Erika Yashiro
  • + +
  • Evelien Van Dijk
  • + +
  • Evgeny Posenitskiy
  • + +
  • Fabricio Oliveira
  • + +
  • Flavio Calvo
  • + +
  • Francesco Tabaro
  • + +
  • Giordano Lipari
  • + +
  • Hadrien Gourlé
  • + +
  • Harshit Agrawal
  • + +
  • Hasti Narimanzadeh
  • + +
  • Heather Andrews
  • + +
  • Heikki Lehväslaiho
  • + +
  • Hui Tang
  • + +
  • Ingrid Strandberg
  • + +
  • Inigo Aldazabal
  • + +
  • Ivan Kuzmin
  • + +
  • Jakob Sauer Jørgensen
  • + +
  • Janne Blomqvist
  • + +
  • Jannetta Steyn
  • + +
  • Jarno Rantaharju
  • + +
  • Jean Iaquinta
  • + +
  • Jens Wehner
  • + +
  • Joakim Löfgren
  • + +
  • Johan Hellsvik
  • + +
  • Johan Hidding
  • + +
  • Jose Carlos Llanusa
  • + +
  • João M. da Silva
  • + +
  • Juan Sebastian Diaz Boada
  • + +
  • Juho Lehtonen
  • + +
  • Kaveh Karimi
  • + +
  • Kerstin Lenk
  • + +
  • Lauri Neuvonen
  • + +
  • Leif Wigge
  • + +
  • Lesetja Lekoloane
  • + +
  • Lex Nederbragt
  • + +
  • Lora Armstrong
  • + +
  • Luc Girod
  • + +
  • Luca Ferranti
  • + +
  • Lucy Whalley
  • + +
  • Luis Amezcua
  • + +
  • Manana Koberidze
  • + +
  • Manuel Garcia Alvarez
  • + +
  • Marco Foscato
  • + +
  • Marijn Van Vliet
  • + +
  • Massimo Pizzol
  • + +
  • Matthew Morris
  • + +
  • Matúš Kalaš
  • + +
  • Maurits Kok
  • + +
  • Max Roald Eckardt
  • + +
  • Meron Vermaas
  • + +
  • Mika Jalava
  • + +
  • Mikael Djurfeldt
  • + +
  • Mikael Öhman
  • + +
  • Mikhail Papkov
  • + +
  • Mikko Heikkilä
  • + +
  • Naoe Tatara
  • + +
  • Narayan Puthanmadam Subramaniyam
  • + +
  • Nico Reissmann
  • + +
  • Niharika Gauraha
  • + +
  • Niket Agrawal
  • + +
  • Octavian Andrei
  • + +
  • Patric Holmvall
  • + +
  • Paula Martinez Lavanchy
  • + +
  • Pavlin Mitev
  • + +
  • Pedro Ojeda
  • + +
  • Pedro Ojeda May
  • + +
  • Pengfei Xu
  • + +
  • Peter Kjellström
  • + +
  • Philip Gjedde
  • + +
  • Pradeep Eranti
  • + +
  • Preethy Nair
  • + +
  • Qiang Li
  • + +
  • Radek Lonka
  • + +
  • Radovan Bast
  • + +
  • Raphaela Heil
  • + +
  • Raul Ortiz Merino
  • + +
  • Richard Darst
  • + +
  • Roberto Di Remigio
  • + +
  • Rohit Goswami
  • + +
  • Romain Caneill
  • + +
  • Ruslan Zhuravchak
  • + +
  • Sabry Razick
  • + +
  • Samantha Wittke
  • + +
  • Sebastian Schmidt
  • + +
  • Shashank Shekhar Harivyasi
  • + +
  • Shreyas Deshpande
  • + +
  • Simoneta Caño de Las Heras
  • + +
  • Sri Harsha Vathsavayi
  • + +
  • Stephan Smuts
  • + +
  • Stephanie van de Sandt
  • + +
  • Stig Rune Jensen
  • + +
  • Sunniva Indrehus
  • + +
  • Susan Branchett
  • + +
  • Ted Hsuan Yun Chen
  • + +
  • Thomas Arildsen
  • + +
  • Thor Wikfeldt
  • + +
  • Tobias Lindstrøm Jensen
  • + +
  • Toby Hodges
  • + +
  • Tomasz Kopec
  • + +
  • Tomi Häkkinen
  • + +
  • Tor Kjellsson Lindblom
  • + +
  • Tuomas Rossi
  • + +
  • Vang Que Le
  • + +
  • Vesa Vahermaa
  • + +
  • Will Usher
  • + +
  • Ygor Morais Jaques
  • + +
  • Zubair Maalick
  • + +
+
+
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/about/funding/asc.png b/branch/rkdarst--open-source-courses/about/funding/asc.png new file mode 100644 index 000000000..45e833fcf Binary files /dev/null and b/branch/rkdarst--open-source-courses/about/funding/asc.png differ diff --git a/branch/rkdarst--open-source-courses/about/funding/csc.png b/branch/rkdarst--open-source-courses/about/funding/csc.png new file mode 100644 index 000000000..3268bd814 Binary files /dev/null and b/branch/rkdarst--open-source-courses/about/funding/csc.png differ diff --git a/branch/rkdarst--open-source-courses/about/funding/deic.png b/branch/rkdarst--open-source-courses/about/funding/deic.png new file mode 100644 index 000000000..a591abf66 Binary files /dev/null and b/branch/rkdarst--open-source-courses/about/funding/deic.png differ diff --git a/branch/rkdarst--open-source-courses/about/funding/enccs.png b/branch/rkdarst--open-source-courses/about/funding/enccs.png new file mode 100644 index 000000000..88f0984b3 Binary files /dev/null and b/branch/rkdarst--open-source-courses/about/funding/enccs.png differ diff --git a/branch/rkdarst--open-source-courses/about/funding/index.html b/branch/rkdarst--open-source-courses/about/funding/index.html new file mode 100644 index 000000000..849bbdbfd --- /dev/null +++ b/branch/rkdarst--open-source-courses/about/funding/index.html @@ -0,0 +1,496 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/about/funding/neic.png b/branch/rkdarst--open-source-courses/about/funding/neic.png new file mode 100644 index 000000000..a68367fcc Binary files /dev/null and b/branch/rkdarst--open-source-courses/about/funding/neic.png differ diff --git a/branch/rkdarst--open-source-courses/about/funding/sigma2.jpg b/branch/rkdarst--open-source-courses/about/funding/sigma2.jpg new file mode 100644 index 000000000..87bf6fea7 Binary files /dev/null and b/branch/rkdarst--open-source-courses/about/funding/sigma2.jpg differ diff --git a/branch/rkdarst--open-source-courses/about/funding/snic.png b/branch/rkdarst--open-source-courses/about/funding/snic.png new file mode 100644 index 000000000..d43fae37b Binary files /dev/null and b/branch/rkdarst--open-source-courses/about/funding/snic.png differ diff --git a/branch/rkdarst--open-source-courses/about/history/index.html b/branch/rkdarst--open-source-courses/about/history/index.html new file mode 100644 index 000000000..d7b8a9101 --- /dev/null +++ b/branch/rkdarst--open-source-courses/about/history/index.html @@ -0,0 +1,568 @@ + + + + History of the project - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - History of the project + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

History of the project

+ + + +

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 the Nordic +e-Infrastructure Collaboration (NeIC), a +state-funded Nordic public funding organization, to bring this +project to a Nordic level, both to have more impact, but also to +connect instructors across Nordic borders. The first grant was +2016-2018, with partners NeIC, CSC (Finland), SNIC (Sweden), DeIC +(Denmark), and UNINETT Sigma2 AS (Norway).

+

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.

+

In 2018 the project has received follow-up funding from NeIC for 3 more years, +until 2021. The partners were the same as the first phase, but now +including the University of Tartu (Estonia). Aalto University +(Finland) formally joined the last year after being a long-term +voluntary participant.

+

In 2020, Covid-19 hit, and everyone went online. We didn't take an +opportunity to do the same thing, but online, while waiting for things +to become normal. Instead, we took advantage of being equally close +to each other (online) as to our previous in-person teams (now online) +to work together much more closely than we used to. We developed an +extensive and unique CodeRefinery teaching +style which stayed with us even +post-Covid.

+

In 2021 the project successfully applied to the NeIC open call 2021 +for another 3 years, starting 2022. The focus of this phase is to +produce a sustainable organization that can exist without NeIC's +funding. The partners at the beginning of the phase were NeIC, Aalto +University, Aarhus University CHCAA (Denmark), Aalborg University +CLAAUDIA (Denmark), CSC, DeiC, ENCCS (Sweden), ETAIS (Estonia), SNIC, +Sigma2 AS, and the University of Oslo USIT (Norway).

+

CodeRefinery now welcomes any other partners to join.

+

Funding partners 2016-2021

+
+
+ + logo: CSC - IT Center for Science + +
+
+ + logo: Aalto Scientific Computing + +
+
+ + logo: Danish e-Infrastructure Cooperation + +
+
+ + logo: Nordic e-Infrastructure Collaboration + +
+
+ + logo: Sigma2 + +
+
+ + logo: Swedish National Infrastructure for Computing + +
+
+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/about/impact/index.html b/branch/rkdarst--open-source-courses/about/impact/index.html new file mode 100644 index 000000000..068e97a14 --- /dev/null +++ b/branch/rkdarst--open-source-courses/about/impact/index.html @@ -0,0 +1,525 @@ + + + + Impact of online CodeRefinery workshops - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Impact of online CodeRefinery workshops + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Impact of online CodeRefinery workshops

+ + + +

Over 1700 people have attended a CodeRefinery workshop since the project started! Since the pandemic started, we shifted the gear towards online workshops. In total about 900 participated in online CodeRefinery workshops.

+

Along the change in tools and practices, we changed questions in pre-/post-workshop surveys. To provide the most consistent and recent picture of our participants and impact, the below is based on data provided by pre-/post-workshop surveys answered in relevance to only online workshops. (Note: pre-/post-workshops are opt-in.)

+

Participants' background

+

Results of pre-workshop surveys (answers given by 301 persons) show that our workshop participants range from undergraduate students to full +professors, and come from a variety of academic disciplines.

+

The chart below shows the result of a question asking about their job title, position or occupation.

+ +

alt text

+

The chart below shows the result of a question asking about their academic discipline.
+alt text

+

What is our impact?

+

The long-term impact of CodeRefinery workshops is measured through a +post-workshop survey which is sent out to all former participants 3 months to 1 year after attending a workshop. To date (12th Sep 2021) we received 80 voluntary responses to +a post-workshop survey by participants of an online workshop.

+

The heatmap below shows how former participants +use various software development tools after attending a workshop, and +how their code and collaboration with colleagues has changed.

+

Please note that a part of responses answered the specific tool to different types of impact, for example, there are cases where both "started using" and "using better" was chosen for "Version control".

+

alt text

+

The chart below shows fraction of former participants who feel their code and collaboration with colleagues has been improved. +alt text

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/about/partners/index.html b/branch/rkdarst--open-source-courses/about/partners/index.html new file mode 100644 index 000000000..96802a773 --- /dev/null +++ b/branch/rkdarst--open-source-courses/about/partners/index.html @@ -0,0 +1,528 @@ + + + + Partners - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Partners + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Partners

+ + + +

Our workshops are free to all, because why not - but teaching doesn't +end after the class. Partners both help organize courses and provide +support for learners during and after the courses.

+

List of partners

+

Aalto University (Aalto Scientific Computing, ASC)

+

ASC has been involved in CodeRefinery since 2017.

+ +

Joining as a partner

+

See information for organizations. Make a pull +request to this page if you want to be a partner (more detailed +criteria may be created later).

+

NeIC grant collaborators

+

Certain organizations are formal collaborators in the Nordic +e-Infrastructure Collaboration (NeIC) "CodeRefinery v3" grant, these +can be seen in history and the NeIC +reports. This grant is a subset of the +broader CodeRefinery open project.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/about/project/index.html b/branch/rkdarst--open-source-courses/about/project/index.html new file mode 100644 index 000000000..e58eae698 --- /dev/null +++ b/branch/rkdarst--open-source-courses/about/project/index.html @@ -0,0 +1,676 @@ + + + + The CodeRefinery project - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - The CodeRefinery project + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

The CodeRefinery project

+ + + + + +

Objectives

+

CodeRefinery improves science by providing training and infrastructure +for researchers, who often need to use computational tools but have +little training in tools beyond basic programming. Our support allows +research to be more reproducible, open, and efficient and thus +promotes the goals of open science and FAIR data management - in +addition to making the lives of countless researchers better, since +they learn the tools needed to do their work with less trouble.

+

We are most known for our practical-level workshop +about base-level practices of software development tools for +researchers. We are also known for our +unique and engaging online teaching +style, and are building a community +around this type of shared teaching.

+

Through our spin-off project Nordic-RSE, we +serve as a hub for research software engineers in the Nordic +countries, namely in Iceland, Denmark, Norway, Sweden, Finland, and +Estonia. Research Software Engineers are basically the professional +level of what we teach, and the two-way collaboration is very +productive.

+

We are a community project seeking volunteers to sustain what we have +accomplished in the first five years.

+

Key facts

+ +

CodeRefinery and The Carpentries

+

We are basically intermediate-level +Carpentries lessons and would like to work +more closely with The Carpentries. Our in-person workshops are +basically "Carpentries-style", though our online workshops have +adopted our own unique style. Our +overall philosophy is similar. Our target audience is learners who +already have some experience with programming and would like to +develop software in a more efficient and sustainable way. We believe +that for many learners we can offer a good second step after their +Carpentries workshop.

+

We would like to work more closely with The Carpentries and offer our +lessons as intermediate-level carpentries. If you are reading this, +please get in touch.

+

Core Activities

+ +

Infrastructure services

+

Our code repository hosting service is open and free for all +researchers based in Nordic universities and research institutes. Please +contact us if you would like to use these services.

+

Training opportunities

+

We offer training opportunities to researchers from Nordic research groups and projects +to learn basic-to-advanced research computing skills and become confident in using +state-of-the-art tools and practices from modern collaborative software +engineering.

+

CodeRefinery Workshops

+

The key objective of CodeRefinery workshop is to grow researchers' software +best practices skills to facilitate open and reproducible research.

+ +

Instructor training workshops

+

One purpose of our Instructor training workshops is to train +CodeRefinery instructors, but being (or becoming) a CodeRefinery +instructor is not required. With the workshops we also aim at building +partnerships with research software engineers +and researchers who are willing to lead skills' transfer within their +local communities in the Nordics.

+

Instructor training workshops take 2 days and cover this lesson +material.

+ +

Other types of events

+

We have organized hackathons, get-together events and shorter workshops +customized for individual research groups. Regularly we also host +online Open House events where CodeRefinery instructors together with +a wider community of interested people work in sprints on topics +ranging from lesson development to website updates.

+

We're always interested in new collaborations, so if you would like to +co-organize an event with us or suggest a new type of event, don't +hesitate to get in touch!

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/about/reports/index.html b/branch/rkdarst--open-source-courses/about/reports/index.html new file mode 100644 index 000000000..ddf72152c --- /dev/null +++ b/branch/rkdarst--open-source-courses/about/reports/index.html @@ -0,0 +1,574 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Articles and reports

+ + + +

Articles and blog posts about CodeRefinery

+ +

Presentations

+ +

Newsletter archives

+

The CodeRefinery newsletter is sent out every few months. +Subscribers will be informed about upcoming workshops, hackathons and +other events, as well as other interesting developments like new training +material, community building activities and general project +updates.

+

Here you can browse the archive of all previous +newsletters. To sign up, please +visit tinyletter.com/coderefinery.

+

Project proposals, reports, and documents

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/about/reports/open-call-2021-evaluation.pdf b/branch/rkdarst--open-source-courses/about/reports/open-call-2021-evaluation.pdf new file mode 100644 index 000000000..5c1a76091 Binary files /dev/null and b/branch/rkdarst--open-source-courses/about/reports/open-call-2021-evaluation.pdf differ diff --git a/branch/rkdarst--open-source-courses/about/reports/open-call-2021-proposal.pdf b/branch/rkdarst--open-source-courses/about/reports/open-call-2021-proposal.pdf new file mode 100644 index 000000000..edb74ccd9 Binary files /dev/null and b/branch/rkdarst--open-source-courses/about/reports/open-call-2021-proposal.pdf differ diff --git a/branch/rkdarst--open-source-courses/about/reports/phase-1-collaboration-agreement.pdf b/branch/rkdarst--open-source-courses/about/reports/phase-1-collaboration-agreement.pdf new file mode 100644 index 000000000..ff9d7a8df Binary files /dev/null and b/branch/rkdarst--open-source-courses/about/reports/phase-1-collaboration-agreement.pdf differ diff --git a/branch/rkdarst--open-source-courses/about/reports/phase-1-project-directive.pdf b/branch/rkdarst--open-source-courses/about/reports/phase-1-project-directive.pdf new file mode 100644 index 000000000..b851c0aa9 Binary files /dev/null and b/branch/rkdarst--open-source-courses/about/reports/phase-1-project-directive.pdf differ diff --git a/branch/rkdarst--open-source-courses/about/reports/phase-1-project-plan-v1.0.pdf b/branch/rkdarst--open-source-courses/about/reports/phase-1-project-plan-v1.0.pdf new file mode 100644 index 000000000..f0f88d356 Binary files /dev/null and b/branch/rkdarst--open-source-courses/about/reports/phase-1-project-plan-v1.0.pdf differ diff --git a/branch/rkdarst--open-source-courses/about/reports/phase-1-report.pdf b/branch/rkdarst--open-source-courses/about/reports/phase-1-report.pdf new file mode 100644 index 000000000..f4bbf29cb Binary files /dev/null and b/branch/rkdarst--open-source-courses/about/reports/phase-1-report.pdf differ diff --git a/branch/rkdarst--open-source-courses/about/reports/phase-2-collaboration-agreement.pdf b/branch/rkdarst--open-source-courses/about/reports/phase-2-collaboration-agreement.pdf new file mode 100644 index 000000000..f5c2de6d2 Binary files /dev/null and b/branch/rkdarst--open-source-courses/about/reports/phase-2-collaboration-agreement.pdf differ diff --git a/branch/rkdarst--open-source-courses/about/reports/phase-2-mid-term-report.pdf b/branch/rkdarst--open-source-courses/about/reports/phase-2-mid-term-report.pdf new file mode 100644 index 000000000..04c95bed4 Binary files /dev/null and b/branch/rkdarst--open-source-courses/about/reports/phase-2-mid-term-report.pdf differ diff --git a/branch/rkdarst--open-source-courses/about/reports/phase-2-project-directive.pdf b/branch/rkdarst--open-source-courses/about/reports/phase-2-project-directive.pdf new file mode 100644 index 000000000..1ab63feb8 Binary files /dev/null and b/branch/rkdarst--open-source-courses/about/reports/phase-2-project-directive.pdf differ diff --git a/branch/rkdarst--open-source-courses/about/reports/phase-2-project-plan.pdf b/branch/rkdarst--open-source-courses/about/reports/phase-2-project-plan.pdf new file mode 100644 index 000000000..343083988 Binary files /dev/null and b/branch/rkdarst--open-source-courses/about/reports/phase-2-project-plan.pdf differ diff --git a/branch/rkdarst--open-source-courses/about/reports/phase-2-report.pdf b/branch/rkdarst--open-source-courses/about/reports/phase-2-report.pdf new file mode 100644 index 000000000..6f4a362a0 Binary files /dev/null and b/branch/rkdarst--open-source-courses/about/reports/phase-2-report.pdf differ diff --git a/branch/rkdarst--open-source-courses/about/reports/phase-3-collaboration-agreement.pdf b/branch/rkdarst--open-source-courses/about/reports/phase-3-collaboration-agreement.pdf new file mode 100644 index 000000000..60860df7c Binary files /dev/null and b/branch/rkdarst--open-source-courses/about/reports/phase-3-collaboration-agreement.pdf differ diff --git a/branch/rkdarst--open-source-courses/about/reports/phase-3-project-plan.pdf b/branch/rkdarst--open-source-courses/about/reports/phase-3-project-plan.pdf new file mode 100644 index 000000000..2eb20da9d Binary files /dev/null and b/branch/rkdarst--open-source-courses/about/reports/phase-3-project-plan.pdf differ diff --git a/branch/rkdarst--open-source-courses/about/staff-meetings/index.html b/branch/rkdarst--open-source-courses/about/staff-meetings/index.html new file mode 100644 index 000000000..43cdc1a5a --- /dev/null +++ b/branch/rkdarst--open-source-courses/about/staff-meetings/index.html @@ -0,0 +1,1167 @@ + + + + Staff meeting minutes - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Staff meeting minutes + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Staff meeting minutes

+ + + +

CodeRefinery staff meeting

+

hackmd-github-sync-badge

+

:::info

+ +

Next meeting

+ +

About this document

+ +

Tasks (in progress or unassigned)

+ + + +

Decisions

+

Decisions made in the meeting should be listed with the item-number.

+ +

Old decisions are listed in the section at the bottom.

+

Discussion items

+

Each new discussion item gets a number. It is OK that the same item may be discussed in several meetings. Please add items that you would like that we discuss.

+ +

Freshdesk Support

+

RB watching support line until we organise next event.

+

Information

+ +

Done tasks

+ +

Archive of decisions

+ +

Archive of discussions

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/about/statistics/OnlineParticipants.png b/branch/rkdarst--open-source-courses/about/statistics/OnlineParticipants.png new file mode 100644 index 000000000..125afb1c1 Binary files /dev/null and b/branch/rkdarst--open-source-courses/about/statistics/OnlineParticipants.png differ diff --git a/branch/rkdarst--open-source-courses/about/statistics/Registration_FindOut_Countries.png b/branch/rkdarst--open-source-courses/about/statistics/Registration_FindOut_Countries.png new file mode 100644 index 000000000..1e4112d8f Binary files /dev/null and b/branch/rkdarst--open-source-courses/about/statistics/Registration_FindOut_Countries.png differ diff --git a/branch/rkdarst--open-source-courses/about/statistics/index.html b/branch/rkdarst--open-source-courses/about/statistics/index.html new file mode 100644 index 000000000..bc0a37d48 --- /dev/null +++ b/branch/rkdarst--open-source-courses/about/statistics/index.html @@ -0,0 +1,4928 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + +

Registration statistics

+ + + +

This is mainly to simplify reporting to funding organizations. But maybe it is +also interesting otherwise.

+
+
+ Twitch and Zoom participants per day +
+
+ Heatmap of how/where participants learned about the workshop by country of affiliation +
+
+ + + + +

Standard CodeRefinery workshops

+ + +

+ Number of participants/registrants by country of affiliation. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SwedenNorwayFinlandDenmarkEstoniaIcelandNetherlandsOtherTotalTwitch viewersZoom
+ + Full online workshop (6 half-days) + + + + + Sep 20 + - + Sep 29, 2022 + + + + 52 + + + + + + 50 + + + + + + 76 + + + + + + 7 + + + + + + + + + + 34 + + + + + + + + 43 + + + + + + 262 + + + + + 97—157 + + + + 25—59 + +
+ + Full online workshop (6 half-days) + + + + + Mar 22 + - + Mar 31, 2022 + + + + 46 + + + + + + 87 + + + + + + 54 + + + + + + 14 + + + + + + + + + + 55 + + + + + + + + 41 + + + + + + 297 + + + + + 144—215 + + + +
+ + Full online workshop (6 half-days) + + + + + May 10 + - + May 20, 2021 + + + + 21 + + + + + + 43 + + + + + + 24 + + + + + + 12 + + + + + + + + + + 16 + + + + + + + + 12 + + + + + + 128 + + + + + + +
+ + Online + + + + + Nov 17 + - + Nov 26, 2020 + + + + 27 + + + + + + 26 + + + + + + 3 + + + + + + + + + + + + + + + + 21 + + + + + + 77 + + + + + + +
+ + Online + + + + + Oct 20 + - + Oct 29, 2020 + + + + 19 + + + + + + 4 + + + + + + 22 + + + + + + 11 + + + + + + + + + + 43 + + + + + + + + 1 + + + + + + 100 + + + + + + +
+ + Online (Mega-CodeRefinery) + + + + + May 25 + - + Jun 4, 2020 + + + + 5 + + + + + + 16 + + + + + + 75 + + + + + + 2 + + + + + + + + 1 + + + + + + + + + + 3 + + + + + + 102 + + + + + + +
+ + Trondheim + + + + + Feb 25 + - + Feb 27, 2020 + + + + 1 + + + + + + 26 + + + + + + + + + + + + + + + + + + 1 + + + + + + 28 + + + + + + +
+ + Espoo + + + + + Dec 10 + - + Dec 12, 2019 + + + + + + + + 30 + + + + + + + + + + + + + + + + + + + + 30 + + + + + + +
+ + Lille + + + + + Nov 25 + - + Dec 5, 2019 + + + + + + + + + + + + + + + + + + + + 28 + + + + + + 28 + + + + + + +
+ + Stockholm + + + + + Nov 19 + - + Nov 21, 2019 + + + + 28 + + + + + + + + + + + + + + + + + + + + + + + + 28 + + + + + + +
+ + Trondheim + + + + + Oct 22 + - + Oct 24, 2019 + + + + + + 20 + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + +
+ + Aalborg + + + + + Jun 11 + - + Jun 13, 2019 + + + + + + + + + + 18 + + + + + + + + + + + + + + 2 + + + + + + 20 + + + + + + +
+ + Oslo + + + + + Jun 3 + - + Jun 5, 2019 + + + + 1 + + + + + + 18 + + + + + + + + 1 + + + + + + + + + + + + + + + + + + 20 + + + + + + +
+ + Helsinki + + + + + May 27 + - + May 29, 2019 + + + + 1 + + + + + + + + 26 + + + + + + + + + + + + + + + + + + + + 27 + + + + + + +
+ + Gothenburg + + + + + May 21 + - + May 23, 2019 + + + + 25 + + + + + + + + + + + + + + + + + + + + + + + + 25 + + + + + + +
+ + Tartu + + + + + Apr 2 + - + Apr 4, 2019 + + + + + + + + + + + + 25 + + + + + + + + + + + + 1 + + + + + + 26 + + + + + + +
+ + Stockholm + + + + + Mar 25 + - + Mar 27, 2019 + + + + 28 + + + + + + + + + + + + + + + + + + + + 2 + + + + + + 30 + + + + + + +
+ + Espoo + + + + + Dec 11 + - + Dec 13, 2018 + + + + + + + + 31 + + + + + + 1 + + + + + + + + + + + + + + 1 + + + + + + 33 + + + + + + +
+ + Uppsala + + + + + Dec 3 + - + Dec 5, 2018 + + + + 30 + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + 31 + + + + + + +
+ + Kiruna + + + + + Nov 21 + - + Nov 23, 2018 + + + + 36 + + + + + + 1 + + + + + + + + + + + + + + + + + + 1 + + + + + + 38 + + + + + + +
+ + Reykjavik + + + + + Aug 21 + - + Aug 23, 2018 + + + + 3 + + + + + + + + + + + + + + 22 + + + + + + + + + + 1 + + + + + + 26 + + + + + + +
+ + Oslo + + + + + Jun 12 + - + Jun 14, 2018 + + + + 3 + + + + + + 38 + + + + + + + + + + + + + + + + + + 1 + + + + + + 42 + + + + + + +
+ + Espoo + + + + + May 29 + - + May 31, 2018 + + + + + + + + 48 + + + + + + + + + + + + + + + + + + + + 48 + + + + + + +
+ + Lund + + + + + May 15 + - + May 17, 2018 + + + + 30 + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + 31 + + + + + + +
+ + Turku + + + + + Mar 20 + - + Mar 22, 2018 + + + + 1 + + + + + + + + 22 + + + + + + + + + + + + + + + + + + + + 23 + + + + + + +
+ + Trondheim + + + + + Feb 27 + - + Mar 1, 2018 + + + + 1 + + + + + + 20 + + + + + + + + 1 + + + + + + + + + + + + + + + + + + 22 + + + + + + +
+ + Espoo + + + + + Dec 14 + - + Dec 16, 2017 + + + + + + + + 40 + + + + + + + + + + + + + + + + + + + + 40 + + + + + + +
+ + Linköping + + + + + Nov 7 + - + Nov 9, 2017 + + + + 21 + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + 22 + + + + + + +
+ + Aarhus + + + + + Oct 24 + - + Oct 26, 2017 + + + + 3 + + + + + + + + + + 24 + + + + + + + + + + + + + + + + + + 27 + + + + + + +
+ + Tromsø + + + + + Jun 19 + - + Jun 21, 2017 + + + + 1 + + + + + + 21 + + + + + + + + + + + + + + + + + + 1 + + + + + + 23 + + + + + + +
+ + Copenhagen + + + + + May 9 + - + May 11, 2017 + + + + 3 + + + + + + + + + + 19 + + + + + + + + + + 1 + + + + + + + + + + + + 23 + + + + + + +
+ + Stockholm + + + + + Feb 20 + - + Feb 22, 2017 + + + + 34 + + + + + + + + + + + + + + + + + + + + + + + + 34 + + + + + + +
+ + Espoo + + + + + Dec 14 + - + Dec 16, 2016 + + + + + + + + 25 + + + + + + + + + + + + + + + + + + + + 25 + + + + + + +
+ Total + + 33 + + 420 + + 372 + + 476 + + 111 + + 25 + + 23 + + 149 + + 160 + + 1736 +
+ + +

Instructor training events

+ + +

+ Number of participants/registrants by country of affiliation. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SwedenNorwayFinlandDenmarkEstoniaIcelandNetherlandsOtherTotalTwitch viewersZoom
+ + Online (with FocusCoE) + + + + + Nov 2 + - + Nov 9, 2020 + + + + + + + + + + + + + + + + + + + + 14 + + + + + + 14 + + + + + + +
+ + Online (with TU Delft) + + + + + Jun 24 + - + Jun 25, 2020 + + + + + + 1 + + + + + + 1 + + + + + + + + + + + + 21 + + + + + + + + + + + + 23 + + + + + + +
+ + Stockholm + + + + + Nov 4 + - + Nov 5, 2019 + + + + 15 + + + + + + 8 + + + + + + 2 + + + + + + 2 + + + + + + 2 + + + + + + + + + + + + 1 + + + + + + 30 + + + + + + +
+ Total + + 3 + + 15 + + 9 + + 3 + + 2 + + 2 + + 0 + + 21 + + 15 + + 67 +
+ + +

Shorter workshops and other events

+ + +

+ Number of participants/registrants by country of affiliation. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SwedenNorwayFinlandDenmarkEstoniaIcelandNetherlandsOtherTotalTwitch viewersZoom
+ + CarpentryCon 2022: Online teaching strategies from CodeRefinery + + + + + Aug 3, 2022 + + + + + + + + + + + + + + + + + + + + 15 + + + + + + 15 + + + + + + +
+ + Community teaching mini-workshop + + + + + Jun 21, 2022 + + + + 5 + + + + + + 7 + + + + + + 5 + + + + + + 2 + + + + + + + + + + + + + + 3 + + + + + + 22 + + + + + + +
+ + Git workshop with Compex Systems Modelling group at UiT + + + + + Feb 16 + - + Feb 23, 2022 + + + + + + 19 + + + + + + + + + + + + + + + + + + + + + + 19 + + + + + + +
+ + Python for Scientific Computing + + + + + Oct 25 + - + Oct 28, 2021 + + + + + + + + + + + + + + + + + + + + + + + +
+ + CodeRefinery workshop with focus on Git and GitLab for Metacenter + + + + + Mar 25 + - + Apr 8, 2021 + + + + + + 15 + + + + + + + + + + + + + + + + + + + + + + 15 + + + + + + +
+ + Online CodeRefinery Hackathon on Software Testing + + + + + Mar 17 + - + Mar 24, 2021 + + + + 16 + + + + + + 6 + + + + + + 4 + + + + + + 3 + + + + + + + + + + + + + + 4 + + + + + + 33 + + + + + + +
+ + Online CodeRefinery Workshop on Software Testing + + + + + Mar 17, 2021 + + + + 31 + + + + + + 14 + + + + + + 7 + + + + + + 5 + + + + + + + + + + 2 + + + + + + + + 10 + + + + + + 69 + + + + + + +
+ + Introduction to Shell, Computing resources for researchers, and HPC Kickstart (Aalto University and University of Oslo) (online) + + + + + Jan 29, 2021 + + + + + + 59 + + + + + + 71 + + + + + + + + + + + + + + + + + + + + 130 + + + + + + +
+ + Introduction to Conda for (Data) Scientists (online) + + + + + Jan 8, 2021 + + + + 1 + + + + + + 39 + + + + + + 5 + + + + + + + + + + + + 2 + + + + + + + + 1 + + + + + + 48 + + + + + + +
+ + Collaborative version control with Git (online) + + + + + Dec 10 + - + Dec 11, 2020 + + + + + + 15 + + + + + + + + + + + + + + + + + + + + + + 15 + + + + + + +
+ + Version control (Karlstad/online) + + + + + Sep 22 + - + Sep 23, 2020 + + + + 11 + + + + + + + + + + + + + + + + + + + + 1 + + + + + + 12 + + + + + + +
+ + Python for Scientific Computing (online) + + + + + Sep 14 + - + Sep 23, 2020 + + + + 3 + + + + + + 24 + + + + + + 41 + + + + + + + + + + + + + + + + + + + + 68 + + + + + + +
+ + GitHub without command line (Tampere/online) + + + + + Aug 13, 2020 + + + + + + + + 16 + + + + + + + + + + + + + + + + + + + + 16 + + + + + + +
+ + Workshop for those familiar with Git (online) + + + + + May 18 + - + May 20, 2020 + + + + 20 + + + + + + 2 + + + + + + 1 + + + + + + + + + + + + + + + + 4 + + + + + + 27 + + + + + + +
+ + Collaborative Git (online) + + + + + May 6, 2020 + + + + 25 + + + + + + 5 + + + + + + 3 + + + + + + 4 + + + + + + + + + + + + + + + + + + 37 + + + + + + +
+ + GitHub without command line (online) + + + + + Apr 15 + - + Apr 22, 2020 + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + + 10 + + + + + + +
+ + Introduction to Git (online) + + + + + Apr 7 + - + Apr 8, 2020 + + + + 19 + + + + + + + + 1 + + + + + + + + + + + + + + + + 2 + + + + + + 22 + + + + + + +
+ + Best Software Practices for the Norwegian Earth System Model (Oslo/Bergen/Online) + + + + + Feb 5, 2020 + + + + + + 30 + + + + + + + + + + + + + + + + + + + + + + 30 + + + + + + +
+ + Social coding and open software (Oslo) + + + + + Jan 9, 2020 + + + + + + 21 + + + + + + + + + + + + + + + + + + + + + + 21 + + + + + + +
+ + Hackathon (Stockholm) + + + + + Nov 6 + - + Nov 7, 2019 + + + + 4 + + + + + + 8 + + + + + + 3 + + + + + + 1 + + + + + + 1 + + + + + + + + + + + + 1 + + + + + + 18 + + + + + + +
+ + Reproducibility workshop (Stockholm) + + + + + Sep 9 + - + Sep 12, 2019 + + + + 12 + + + + + + + + + + + + + + + + + + + + + + + + 12 + + + + + + +
+ + Python for Dynamics and Evolution of Earth and Planets (Oslo) + + + + + Apr 1 + - + Apr 5, 2019 + + + + + + 12 + + + + + + + + + + + + + + + + + + + + + + 12 + + + + + + +
+ + Mixed Arts with CodeRefinery & Software Carpentry (Copenhagen) + + + + + Mar 5, 2019 + + + + + + + + + + 40 + + + + + + + + + + + + + + + + + + 40 + + + + + + +
+ + Git in practice (Oslo) + + + + + Feb 27, 2019 + + + + + + 18 + + + + + + + + + + + + + + + + + + + + + + 18 + + + + + + +
+ + Git workshop (Umeå) + + + + + Oct 16, 2017 + + + + 21 + + + + + + + + + + + + + + + + + + + + + + + + 21 + + + + + + +
+ + Workshop: Interfacing Fortran, C, C++, and Python (Manchester) + + + + + Sep 8, 2017 + + + + + + + + + + + + + + + + + + + + 15 + + + + + + 15 + + + + + + +
+ + Workshop: Mixed Martial Arts with CodeRefinery (Umeå) + + + + + May 29, 2017 + + + + + + + + + + + + + + + + + + + + 15 + + + + + + 15 + + + + + + +
+ + CodeRefinery get-together (Stockholm) + + + + + May 19, 2017 + + + + 15 + + + + + + + + + + + + + + + + + + + + + + + + 15 + + + + + + +
+ + CodeRefinery seminar (Oslo) + + + + + Apr 6, 2017 + + + + + + 15 + + + + + + + + + + + + + + + + + + + + + + 15 + + + + + + +
+ Total + + 29 + + 183 + + 319 + + 157 + + 55 + + 1 + + 0 + + 4 + + 71 + + 790 +
+ + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/atom.xml b/branch/rkdarst--open-source-courses/atom.xml new file mode 100644 index 000000000..e1de58f0e --- /dev/null +++ b/branch/rkdarst--open-source-courses/atom.xml @@ -0,0 +1,3838 @@ + + + CodeRefinery + CodeRefinery acts as a hub for FAIR (Findable, Accessible, Interoperable, and Reusable) software practices. + + + Zola + 2022-12-12T00:00:00+00:00 + https://coderefinery.org/atom.xml + + Open source courses + 2022-12-12T00:00:00+00:00 + 2022-12-12T00:00:00+00:00 + + https://coderefinery.org/blog/2022/12/12/open-source-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>CodeRefinery courses (like many these days) are open source. This +should be the minimum requirement for most (all?) courses, and many +are - but it's important to clearly specify just what this means and +why.</p> +<h2 id="four-freedoms-applied-to-course-material">Four freedoms applied to course material</h2> +<p>As usual when we mean &quot;open source&quot;, we actually mean &quot;free (as in +speech)&quot;. Let's look at the <a href="https://en.wikipedia.org/wiki/Free_software#Definition">Four essential freedoms of free +software</a> and +see how they apply to teaching</p> +<ul> +<li><strong>Freedom 0: The freedom to use the program for any purpose.</strong>: You +can use the material and re-teach the lesson yourself.</li> +<li><strong>Freedom 1: The freedom to study how the program works, and change +it to make it do what you wish.</strong>: Not just the material is +released, but the necessary planning and instructor hints to do so. +Beyond that, you should be able to see the &quot;source code&quot; so that you +can use those techniques yourself.</li> +<li><strong>Freedom 2: The freedom to redistribute and make copies so you can +help your neighbor.</strong> This is hopefully somewhat clear: a license +lets you redistribute it yourself, not just link to the current location.</li> +<li><strong>Freedom 3: The freedom to improve the program, and release your +improvements (and modified versions in general) to the public, so +that the whole community benefits.</strong> This is the most interesting +one. Can you improve it and reshare? Do these reshares get lost in +your fork, never to be seen by others, or can others take advantages +to them? Or even, can you improve and send back to the original +source? This is a lot harder for course material</li> +</ul> +<h2 id="how-we-do-it">How we do it</h2> +<p>This should be clear if you know the main CodeRefinery workshop - it +is basically a tutorial to the practices we use!</p> +<ul> +<li>Git for version control <a href="https://coderefinery.github.io/git-intro/">git-intro lesson</a></li> +<li>Github for platform for collaboration <a href="https://coderefinery.github.io/git-collaborative/">git-collaborative lesson</a></li> +<li>Sphinx + Github Actions + Github pages for the actual lesson material <a href="https://coderefinery.github.io/documentation/">documentation lesson</a></li> +<li><a href="https://github.com/coderefinery/sphinx-lesson">sphinx-lesson</a> +provides some minor Sphinx extensions for lesson-like documentation +sites.</li> +</ul> +<p>The lessons are treated as open-source software projects - except it's +documentation, not code. All of the tools nicely fit into place.</p> +<h2 id="the-benefits">The benefits</h2> +<p>And what do we get? Anyone can contribute, and even propose changes, +with minimal effort and without having to ask for permission or files +first. These changes can easily be tracked, and people can even +easily create their own versions (linked to ours via forks, so we can +see and integrate changes later if desired).</p> +<p><strong>Is there any other way?</strong> At one meeting, we were discussing if +there is any other reasonable option (other than git + PR/MR workflow) +that can provide this level of collaboration. The closes we could +think of was &quot;google docs-like tool&quot; where someone can suggest +changes. But still, changes can either be suggested, or the lesson +can be copied and with no more easily suggestions. <strong>From what we can +tell, we need to use git.</strong></p> +<h2 id="why-open-collaboration-is-harder-for-course-material">Why open collaboration is harder for course material</h2> +<p>Open collaboration on teaching can be hard, <strong>because everyone wants +their course to have material perfectly suited to it,</strong> with nothing +extra. This leads to a tendency to fork material, rather than +contribute upstream. It might also lead to the tendency to not design +for reuse, since who would want to use it, anyway?</p> +<p><strong>How we get around this:</strong> We have to consider this in the design: we +have to design in enough modularity so that a lesson can be taught +multiple ways. It can be hard, and not perfect - but it's better to +have upstream changes to an imperfect lesson, rather than many +diverged lessons (that probably aren't perfect anyway, since they are +)</p> +<h2 id="what-do-we-hope-others-can-do">What do we hope others can do?</h2> +<p>Try to be more open than before. We don't expect that everything can +be perfect: git for everything is too much, and not everyone has time +or skills to do that. But for larger, collaborative courses, it's +important. CodeRefinery is happy to help advise you in the mechanics +of things.</p> +<h2 id="see-also">See also</h2> +<ul> +<li>Our +<a href="https://coderefinery.github.io/community-teaching/">community-teaching</a> +workshop covers this (or will, once it gets more developed)</li> +</ul> + + + + Upcoming workshops and events + 2022-12-06T00:00:00+00:00 + 2022-12-06T00:00:00+00:00 + + https://coderefinery.org/workshops/upcoming/ + <h2 id="core-coderefinery-workshops">Core 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>Spring 2023: Tue-Thu, March 21-23 and March 28-30 (6 half-day, online)</li> +<li>Autumn 2023: Tue-Thu, September 19-21 and 26-28 (6 half-day, online)</li> +</ul> +<h2 id="past-workshops-and-events">Past workshops and events</h2> +<ul> +<li><a href="https://scicomp.aalto.fi/training/scip/python-for-scicomp-2022/">Python for Scientific Computing, November 22-25, +2022</a>.</li> +<li>On <a href="https://coderefinery.org/workshops/past/">this page</a> we list all our past workshops and events.</li> +</ul> +<h2 id="how-to-be-informed-about-future-events">How to be informed about future events</h2> +<p>We don't want you to miss a workshop or event. The best +way to stay informed is to join <a href="https://tinyletter.com/coderefinery">our newsletter</a> +(we are working on reviving it and will post updates there soon).</p> +<p>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> +<div class="uk-alert-primary" uk-alert> +<a class="uk-alert-close" uk-close></a> +<p>Partners are invited to <a 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> +</div> +<h2 id="privacy-policy">Privacy policy</h2> +<p>Our <a href="/privacy-policy/">privacy policy</a> +documents what registration data we store, where, and why.</p> + + + + Learner teams in courses + 2022-11-28T00:00:00+00:00 + 2022-11-28T00:00:00+00:00 + + 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 &quot;large&quot; (~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 (&quot;expert helpers&quot;) 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 href="https://coderefinery.github.io/manuals/exercise-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 &quot;do you want to take part in a team?&quot; 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 &quot;work tables in a classroom&quot;. 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: &quot;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&quot;. 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="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 +&quot;livestream for the masses, higher-quality teams for those who want +them.&quot;</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 href="https://coderefinery.github.io/manuals/exercise-leaders/">CodeRefinery manuals: Exercise +leaders</a></li> +<li><a href="https://coderefinery.github.io/manuals/expert-helpers/">Expert helpers and their role in helping exercise +leaders</a></li> +<li>Series index: <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of Teaching</a></li> +</ul> + + + + Livestreaming courses + 2022-11-14T00:00:00+00:00 + 2022-11-14T00:00:00+00:00 + + 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 &quot;someone might do something bad if they +could join&quot;[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 &quot;meeting&quot; +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 (&quot;HackMD&quot;) 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 &quot;anyone who wasn't able to +register can watch the stream&quot;. We also got a lot of experience with +streaming in our project <a href="https://researchsoftwarehour.github.io">Research Software +Hour</a>.</p> +<p>The fully &quot;proper&quot; livestreamed course was 2021 February, our <a 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 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 &quot;top&quot; 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 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 href="https://coderefinery.github.io/manuals/livestream-teaching/">Teaching via +livestreaming</a> +in the community-teaching guide.</li> +<li><a href="https://coderefinery.github.io/manuals/coderefinery-mooc/">CodeRefinery +MOOC</a>, +which is mainly about livestreaming.</li> +</ul> +<hr /> +<p>[1] Incidentally, since 2020 we have had a daily online meeting, our +Scientific Computing Garage help session, with the Zoom link online, +and have never had any problems. My hypothesis is that if you don't +have an exact data listed along with the Zoom information, it's not +found by those that want to troll.</p> + + + + Lessons learned from the Sep 2022 online workshop + 2022-11-08T00:00:00+00:00 + 2022-11-08T00:00:00+00:00 + + https://coderefinery.org/blog/2022/11/08/lessons-learned-Sep-2022/ + <p>September 20-22 and 27-29, 2022, we held again our <a 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 href="https://coderefinery.org/blog/2020/04/14/first-online-workshop/">our first online workshop +2020</a> and the +<a 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 &quot;wrong&quot; 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 &quot;are not needed&quot;</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 href="https://github.com/coderefinery/coderefinery.org/issues/697">here</a>.</li> +</ul> +<h3 id="collaborative-notes">Collaborative notes</h3> +<ul> +<li>HackMD goes to Twitch chat anyway so maybe no point in keeping it as a secret. +<ul> +<li>Add HackMD link to the workshop page and use the workshop page as main entry point so that participants don't have to hunt for links in email inboxes.</li> +</ul> +</li> +<li>HackMD started to be slow even if it should not with ~100 participants. +<ul> +<li>Numbering questions adds confusion -&gt; keep bullets and change to numbers in archive if needed. But this problem was only there because the document was sluggish at times.</li> +<li>Note for future: when pre-seeding the question numbers, leave a line between them. Then, when someone pushes enter after a number to add a new line, it doesn't increment the future numbers. Just saw this, this solves a big problem with numbering.</li> +</ul> +</li> +<li>Later in the workshop we deployed our own HedgeDoc instance, which worked quite well.</li> +</ul> +<h3 id="installation-and-tools">Installation and tools</h3> +<ul> +<li>Many did not install software beforehand. Either we haven't communicated clearly enough that this is needed or the install sessions were not recognized and not taken up. Very few people showed up at the install help sessions.</li> +</ul> +<h3 id="lesson-content">Lesson content</h3> +<ul> +<li>More big picture cohesion between exercises: It has been suggested to have a better connection between lessons and work on one repository that is continuously improved.</li> +<li>Provide snapshots and starting points for those who have not done the previous exercises.</li> +<li>Topics in Day 4 (at least) would deserve a longer lesson.</li> +<li>We can try to communicate better that after the Git lessons it can be OK and also useful to join only for the lessons of interest (to motivate people to pop in also for 1 or 2 lessons).</li> +<li>Especially in in-person: the Twitch sessions felt long (since there was so little interaction in the in-person rooms).</li> +</ul> +<h3 id="communication-with-participants">Communication with participants</h3> +<ul> +<li>Add all sessions to the <a href="https://coderefinery.org/calendars/">CodeRefinery calendar</a>.</li> +<li>Link all relevant repositories in one place (i.e. this calendar and anything that needs attention near a workshop). Make sure those repositories have good instructions in READMEs.</li> +</ul> + + + + CodeRefinery Mastodon account + 2022-11-08T00:00:00+00:00 + 2022-11-08T00:00:00+00:00 + + 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 href="https://fosstodon.org/@coderefinery">@coderefinery@fosstodon.org</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 href="https://mastodon.help">https://mastodon.help</a> gives a basic introduction of the how and +why. <a 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>@username@server.name</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>@coderefinery@fosstodon.org</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 href="https://fosstodon.org">https://fosstodon.org</a> (FOSS = &quot;free and open source +software&quot;) to focus on the software and technology side of things.</li> +<li>For others in academia or research, +<a 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 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 (&quot;reblog&quot;) 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>&quot;Fediverse&quot; (&quot;federated universe&quot;) is the term used to refer to the +entire network of Mastodon servers (and more) that can communicate. +It's not just Mastodon - +<a 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 href="https://fediscience.org/server-list.html">Academia/research server list</a></li> +<li><a href="https://mastodon.help">https://mastodon.help</a></li> +<li><a href="https://fedi.tips/">https://fedi.tips/</a></li> +<li><a href="https://www.pwnallthethings.com/p/twitter-was-special-but-its-time">About engagement farming</a></li> +</ul> + + + + Video publishing supports more learning styles + 2022-11-08T00:00:00+00:00 + 2022-11-08T00:00:00+00:00 + + 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 &quot;don't +say anything if you don't want to be recorded&quot; isn't good enough, +either - I don't want to push &quot;publish&quot; 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 &quot;good enough&quot; 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 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 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 href="https://youtu.be/thvMNTBJg2Y">video demonstration of ffmpeg-editlist</a></li> +<li><a href="https://coderefinery.github.io/manuals/video-editor/">Video editor</a> +role description in the CodeRefinery manuals</li> +<li><a href="https://github.com/coderefinery/ffmpeg-editlist">ffmpeg-editlist</a></li> +<li><a 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 &quot;it won't be interesting for others to watch later&quot;. +This post also shows how that's the wrong perspective: the videos +aren't only for random people later, but people in the course already.</p> + + + + Reverse hybrid teaching + 2022-11-07T00:00:00+00:00 + 2022-11-07T00:00:00+00:00 + + 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 &quot;reverse hybrid&quot; 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 href="https://coderefinery.github.io/manuals/co-instructors/">CodeRefinery manuals on +co-instructors</a></li> +<li><a href="https://coderefinery.github.io/manuals/hackmd-mechanics/">CodeRefinery manuals on how we do parallel chat, &quot;HackMD&quot;</a></li> +<li>Series index: <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of Teaching</a></li> +</ul> + + + + Co-teaching and scaling up + 2022-10-31T00:00:00+00:00 + 2022-10-31T00:00:00+00:00 + + 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 &quot;voice of the +audience&quot;. 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 &quot;asking questions a +learner might have&quot; 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 +&quot;500-person lecture&quot; problems that I had when I was in university. We +now use co-teaching for anything that needs to seem &quot;professional&quot;, +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 href="https://coderefinery.github.io/manuals/team-teaching/">Co-teaching in CodeRefinery +manuals</a></li> +<li><a href="https://coderefinery.github.io/community-teaching/team-teaching/">Co-teaching in Community +Teaching</a></li> +<li>Series index: <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of Teaching</a></li> +</ul> + + + + Parallel chat ("HackMD") and scaling teaching + 2022-10-24T00:00:00+00:00 + 2022-10-24T00:00:00+00:00 + + 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 &quot;please +turn on your cameras so I can see how it's going&quot; - 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 &quot;parallel chat&quot;, or as we typically call it &quot;HackMD&quot; +after the service we started using, <a 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 &quot;one right answer&quot; 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 &quot;+&quot; or &quot;-&quot; or &quot;o&quot; added after the options.</li> +</ul> +<p>Just look at the number of questions in our old courses, <a href="https://coderefinery.github.io/2022-03-22-workshop/questions/day1/">one 3.5-hour +day of our May 2022 +workshop</a> - +and this is day 1, when people didn't yet know how it worked.</p> +<p>But there are some disadvantages:</p> +<ul> +<li>An absolute flood of information, which <em>will</em> be distracting to +anyone trying to follow it. We warn people at the start to be +careful about this, and it's mostly OK. It's anyway archived for +follow-up later at one's convenience.</li> +<li>Another window for people follow. Like above, we warn people to +focus on the learning and parallel chat only when there is time.</li> +<li>It's different, so needs some explanation (but we've seen people +catch on very quickly once they see it).</li> +</ul> +<p>So, just how does this work? Well, we create the text document with +some standard notes at the top and bottom. It's made freely editable +without any login, shared to everyone in the workshop. All learners +are told to ask every new question in +list item at the bottom of the document - <em>always</em> the bottom, since +that's the only thing we follow. The course team has this open and +answers questions, focusing their attention at the bottom. Some other +notes:</p> +<ul> +<li>Instructors should discuss it via voice often, mentioning when the +look at it and when questions come from it. Let the audience know +it's actually useful.</li> +<li>Screenshare it during the Q&amp;A parts and breaks (you need a tool that +won't show the names of anyone who might have happened to be logged +in - HackMD does this properly). It provides something to look at +and reminds people that it exists and has lots of answers.</li> +<li>We often use it as an icebreaker as a demo. Maybe not everyone +understands it.</li> +<li>It can also be used for lightweight polls: learners can <code>+1</code> or add +a character to a line to make simple bar graphs.</li> +<li>Like we said above, it's not a perfect tool, but easy to use and fun.</li> +<li>A &quot;HackMD manager&quot; 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 href="https://coderefinery.github.io/manuals/hackmd-mechanics/">HackMD mechanics in CodeRefinery +manuals</a></li> +<li><a href="https://coderefinery.github.io/manuals/hackmd-helper/">HackMD manager role +description</a></li> +<li>Series index: <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of Teaching</a></li> +</ul> + + + + Python for Scientific Computing open for registration and collaborators + 2022-10-21T00:00:00+00:00 + 2022-10-21T00:00:00+00:00 + + https://coderefinery.org/blog/2022/10/21/python-for-scicomp/ + <p>Our next workshop, <a 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 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 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 href="https://coderefinery.github.io/manuals/chat/">CodeRefinery</a> chat and +introduce yourself.</p> + + + + CodeRefinery teaching strategies and the future of teaching + 2022-10-17T00:00:00+00:00 + 2022-10-17T00:00:00+00:00 + + 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 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 &quot;return to +normal&quot;, 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 &quot;reverse hybrid&quot; 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 &quot;start page&quot; of the series):</p> +<ul> +<li><a href="https://coderefinery.org/blog/2022/10/24/parallel-chat/">Random access chat (&quot;HackMD&quot;) 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><a href="https://coderefinery.org/blog/2022/12/12/open-source-courses/">Open source courses</a></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>Sphinx-lesson</li> +<li>Working together as a team</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 href="https://coderefinery.github.io/manuals/">CodeRefinery manuals</a></li> +<li><a href="https://coderefinery.github.io/community-teaching/">CodeRefinery community teaching +training</a></li> +</ul> + + + + Outcomes from online hackathon about measuring the impact of CodeRefinery workshops + 2022-05-18T00:00:00+00:00 + 2022-05-18T00:00:00+00:00 + + 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 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 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 href="https://github.com/coderefinery/pre-workshop-survey">pre-workshop +survey</a> data which was +part of the registration process and <a 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 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 &quot;pays us back&quot;.</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 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 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 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 href="https://github.com/coderefinery/post-workshop-survey">Post-workshop survey</a></h3> +<ul> +<li>What to ask straight after the workshop and what to ask later? Separate +survey?</li> +<li>Could be integrated to the pre-workshop survey because it can be updated</li> +<li>Update questions: +<ul> +<li>we could add the question: what would you like to learn more?</li> +<li>Maybe condense a bit (less text and repetition)</li> +<li>Remove suggestive questions if any</li> +<li>add academic field</li> +</ul> +</li> +<li>What data to request from groups / partners? +<ul> +<li>Number of participants</li> +<li>How did they like the event</li> +</ul> +</li> +</ul> + + + + Our plans to improve our workshop registration process + 2022-05-04T00:00:00+00:00 + 2022-05-04T00:00:00+00:00 + + 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 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 &quot;can I have the +Q&amp;A&quot; and then I can say &quot;not right not but if you register you will get it in +an email tonight so you have it tomorrow&quot;</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 &quot;survived&quot; 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>&quot;affiliation or university&quot;: have a list of institutions + &quot;other&quot; * 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>&quot;do you want to participate in Stockholm? click here&quot; -&gt; another form</li> +<li>&quot;in Aalto&quot; -&gt; another form</li> +<li>none of the above -&gt; central form +<ul> +<li>group registration (exercise lead? or anybody as proxy?)</li> +<li>register as exercise lead and want to help out a &quot;random&quot; group</li> +<li>want to be part of a group -&gt; click here but we can't guarantee a helper, especially if you register late</li> +<li>want to only watch alone</li> +</ul> +</li> +<li>also offer options to get informed for those unsure/undecided +<ul> +<li>yes</li> +<li>&quot;interested&quot; </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 &quot;general&quot; 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>&quot;helpers, rename yourself and join a room that does not have helpers yet&quot;</li> +<li>&quot;learners, if you are in a room that is too empty or too full, join another one&quot; </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 href="https://forms.gle/xNSmW7DJ43jV7NhD9">example +form</a> and collected comments:</p> +<ul> +<li>Problems: &quot;team organized by us&quot; is not separated from &quot;self-organized team&quot;</li> +<li>The &quot;probably not but send info&quot; 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>&quot;observer&quot;: let them decide whether they want emails or not</li> +<li>&quot;how do you plan on attending&quot; +<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 href="https://github.com/coderefinery/template-workshop-webpage">workshop template</a></li> +</ul> + + + + Lessons learned from the May 2021 online workshop + 2021-11-25T00:00:00+00:00 + 2021-11-25T00:00:00+00:00 + + 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 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 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 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 &quot;voice of audience&quot;.</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 &quot;could somebody do X?&quot; 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 &quot;real&quot; video is available or wouldn't make sense, one workaround might be to have someone show a &quot;video&quot; (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 &quot;real&quot; video is available or wouldn't make sense, one workaround might be to have someone show a &quot;video&quot; (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 &quot;don't capture mouse cursor&quot; 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 &quot;And now we are done with the intro, and will go to our first lesson, Jupyter&quot;. It makes cutting a bit easier and also helps learners to re-orient.</li> +<li>The zoom default &quot;focus on the current speaker&quot; 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 &quot;plain&quot; 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 &quot;beginner&quot; label for software. Maybe it would make sense to host a &quot;Research Software Hour&quot; 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 &quot;I'm about to take the screenshare&quot; 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 &quot;none&quot; 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 &quot;team registrations&quot;, as long they include an EL, we should send an acceptance ASAP.</li> +<li>Regarding individual learners and ELs: +1) opening sign-up as individual ELs and to set its soft-deadline much earlier than for individual learners, +2) for individual learners, opening registration first as stream viewers only with an option of 'want to join in interactive exercise sessions' yes/no, +3) after the soft-deadline of individual ELs, to those who said 'yes', sending invitations to sign-up for zoom participation in another reg. form, and +4) accept the capacity of #individual ELs x 5 and otherwise put them in waitlist. +However, I actually want to suggest a quite wild idea rather than struggling with the dilemma of no-shows and withdrawal with very very short notice while not being able to accept all sign ups. Instead of coordinating for acceptance and grouping on backside, how about encouraging open&amp;public self-organization of groups? somewhere everyone can access, 'sign up' by writing their name, as a learner or EL, potentially also country, affiliation, background so that it might happen that they will self-organize a team. Once they can make a group of 6-7 people with at least one who can be acting as an EL, then their participation is sort of 'confirmed'. This is different from team registration as this is primarily for those who want to join but cannot make a group will find others to make a group to join in the workshop. +Another thing is that the threshold of ELs could be even lower than some people may think. And I would say being an EL is probably better way to learn about the CodeRefinery lesson materials than joining as an learner. Especially if some people have already made their own team, one of them should be able to act as an EL, or they can even circulate the role among eath other. +And what I learned from the R+Tidyverse workshop until yesterday is that if a learner cannot turn on camera or mic (for any reason), it is almost no worth to join in a breakout room session, as HackMD Q&amp;A will more or less perfectly solve the problem in that case.</li> +</ul> + + + + Towards citable lessons + 2021-11-21T00:00:00+00:00 + 2021-11-21T00:00:00+00:00 + + 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 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 +&quot;cite as&quot; 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 &quot;code&quot; (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 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 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>&quot;creator&quot;: significant contributions</li> +<li>&quot;contributor&quot;/Editor: reviewing/approving contributions</li> +<li>&quot;contributor&quot;/Other: smaller contributions</li> +</ul> +</li> +<li>On Zenodo we start with &quot;creator&quot; (author) and &quot;contributor&quot; (other). +<ul> +<li>See also categories that Zenodo understands: <a href="https://developers.zenodo.org/#representation">https://developers.zenodo.org/#representation</a> (search for &quot;creators&quot; and &quot;contributors&quot;)</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 &quot;release&quot; 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 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 data-lang="json" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-json "><code class="language-json" data-lang="json"><span> </span><span style="color:#d07711;">&quot;creators&quot;</span><span>: [ +</span><span> { +</span><span> </span><span style="color:#d07711;">&quot;orcid&quot;</span><span>: </span><span style="color:#d07711;">&quot;0000-0002-1825-0097&quot;</span><span>, +</span><span> </span><span style="color:#d07711;">&quot;affiliation&quot;</span><span>: </span><span style="color:#d07711;">&quot;Feline research institute&quot;</span><span>, +</span><span> </span><span style="color:#d07711;">&quot;name&quot;</span><span>: </span><span style="color:#d07711;">&quot;Field, Gar&quot; +</span><span> }, +</span><span> { +</span><span> </span><span style="color:#d07711;">&quot;orcid&quot;</span><span>: </span><span style="color:#d07711;">&quot;0000-0002-1825-0097&quot;</span><span>, +</span><span> </span><span style="color:#d07711;">&quot;affiliation&quot;</span><span>: </span><span style="color:#d07711;">&quot;Feline research institute&quot;</span><span>, +</span><span> </span><span style="color:#d07711;">&quot;name&quot;</span><span>: </span><span style="color:#d07711;">&quot;Cat, Felix&quot; +</span><span> } +</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 href="https://about.zenodo.org/">https://about.zenodo.org/</a></li> +<li>Zenodo terms of use <a href="https://about.zenodo.org/terms/">https://about.zenodo.org/terms/</a></li> +<li>Zenodo policies <a href="https://about.zenodo.org/policies/">https://about.zenodo.org/policies/</a></li> +<li>Zenodo FAQ <a href="https://help.zenodo.org/">https://help.zenodo.org/</a></li> +<li>Zenodo REST API <a href="https://developers.zenodo.org/">https://developers.zenodo.org/</a></li> +<li>Zenodo .zenodo.json and GitHub <a href="https://developers.zenodo.org/#github">https://developers.zenodo.org/#github</a></li> +<li>GitHub-Zenodo tutorial <a href="https://guides.github.com/activities/citable-code/">https://guides.github.com/activities/citable-code/</a></li> +<li>The <a href="https://allcontributors.org/">https://allcontributors.org/</a> specification and GitHub bot</li> +<li>The CITATION.cff format <a href="https://citation-file-format.github.io/">https://citation-file-format.github.io/</a></li> +<li>The CITATION.cff format keywords <a 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 href="https://spdx.dev/ids/">https://spdx.dev/ids/</a></li> +</ul> + + + + Lessons learned from phase 2 of the project + 2021-11-20T00:00:00+00:00 + 2021-11-20T00:00:00+00:00 + + 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 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 &quot;actual&quot; 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>&quot;Webinar (stream)-by default&quot; with an option for joining in zoom-meeting room for extra help may work better (ref. <a href="https://scicomp.aalto.fi/training/scip/python-for-scicomp/">Python for SciComp 2021</a>)?</li> +<li>Post-workshop Q&amp;A session time/day would be useful? </li> +<li>We have considered for the future to offer optional exercise walk-through sessions. These could be +interesting not only for learners but recording of these sessions could also help future +exercise leads.</li> +</ul> +</li> +</ul> +<h4 id="communication-with-participants">Communication with participants</h4> +<ul> +<li>Indico's email function worked well to send information about the workshop to participants/signers.</li> +<li>We experienced few cases of typo in email address, thus we could not reach registrants.</li> +<li>Online collaborative notebook (HackMD and similar) worked well for Q&amp;A during the lectures. </li> +</ul> +<h4 id="certificates">Certificates</h4> +<ul> +<li>Should CR issue any certificate at all? Certificates became participation certificates and possibly we should delegate certification to participating organizations.</li> +<li><a href="https://www.tudelft.nl/en/library/research-data-management/r/training-events/training-for-researchers/code-refinery-workshop">&quot;TU Delft PhD candidates can obtain 2 GS credits (Research skills) when attending and actively participating in the workshop (complete assistance)&quot;</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>&quot;software installation and setup&quot; +<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 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 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 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 href="https://coderefinery.github.io/2021-01-08-coderefinery-online/">Introduction to Conda for (Data) Scientists</a> as a part of <a 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 href="https://carpentries.topicbox.com/groups/local-nordic">Nordic region mailing list at topic-box (managed by the Carpentries)</a>, </li> +<li><a href="https://2020.carpentrycon.org/schedule/#session-48">&quot;Nordic and Baltic Get Together&quot; session at CarpentryCon 2020 @home</a>, and</li> +<li><a 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 &quot;Seminar for bibliotekenes nettverk for ph.d.-støtte&quot; (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 &quot;safe&quot; 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 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 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 &quot;Standup&quot;-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 +&quot;levels&quot; as well as types (e.g. lesson contributions or exercise leads) of contributions? +Ref. <a 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 &quot;burn-out&quot; 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 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 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 &quot;Support line/ request tracker&quot;).</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>&quot;Rights to work results&quot; vs. Open Science +<ul> +<li>Ref: a page about <a href="https://www.uio.no/english/for-employees/employment/work-results/rights-to-work-results.html">&quot;Rights to work results&quot; at University of Oslo</a></li> +<li>General clarification is needed here so that everyone won't be in trouble later.</li> +<li>It should be also better explained and clarified in terms of the choice of platform for collaborative works in this regard so that staff/volunteers etc. can feel safe in using the chosen (cloud-based) platforms, including GitHub, YouTube, Twitch, HackMD, Tinyletter etc.</li> +</ul> +</li> +<li>We also lacked support in questions about how to start an own organization/ spin-off.</li> +</ul> + + + + Bi-weekly Community Calls started + 2021-09-01T00:00:00+00:00 + 2021-09-01T00:00:00+00:00 + + 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 &quot;order&quot; workshops</li> +</ul> +<p>For more details of each call, please visit <a 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 &quot;CodeRefinery way forward&quot;, where we will be discussing the community organization model. For the connection details and agenda, please follow <a 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 href="https://coderefinery.zulipchat.com/#">Zulip</a> :)</p> + + + + Community discussion in Nordic and Baltic countries + 2020-11-13T00:00:00+00:00 + 2020-11-13T00:00:00+00:00 + + https://coderefinery.org/blog/2020/11/13/carpentry-community-discussion-nordic/ + <p>This blogpost is based on the notes made on <a 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 &quot;never touch learners keyboard&quot;. 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 href="https://nordic-rse.org/">Nordic Research Software Engineer initiative</a> and its <a 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 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 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 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) &quot;Taking over learner's keyboard on an in-person workshop should never happen&quot;, 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 &quot;Let's build an augmented reality web app!&quot; based on a full-day workshop given at the <a href="https://www.ub.uio.no/english/courses-events/events/all-libraries/2020/research-bazaar-2020.html">research bazaar at the University of Oslo</a> earlier this year: +<ul> +<li>goal: making 3D holiday greeting card using HTML and JavaScript: https://arworkshop.teebusch.repl.co/card1.html</li> +<li>The lesson material is all there: https://repl.it/@Teebusch/arworkshop</li> +</ul> +</li> +<li>(Joakim) Suggestion of a repository of Carpentries Nordic/Baltic community members with specialities and skills</li> +<li>(Annika) Google Sheets for this?</li> +<li>(Anne) EOSC Nordic claims to be a knowledge-hub</li> +<li>(Radovan) Is also working on mapping.</li> +</ul> +<h3 id="announcements">Announcements</h3> +<ul> +<li>Nordic RSE (research software engineers) online get-together (Nov 30 - Dec 2): https://nordic-rse.org/events/2020-online-get-together/ (everybody welcome to attend and submit proposals or ideas)</li> +<li>Local-nordic Carpentries mailing list: https://carpentries.topicbox.com/groups/local-nordic</li> +<li>CodeRefinery workshop in November 17-19, 24-26 (registration closed): https://coderefinery.github.io/2020-11-17-online/ (looking for helpers: great way to learn)</li> +</ul> +<h2 id="participant-list">Participant list</h2> +<ol> +<li>Annika Rockenberger (host, Norway, Oslo)</li> +<li>Naoe Tatara (co-host, Norway, Oslo)</li> +<li>Kerstin Lenk (Finland, Tampere)</li> +<li>Lars Kjær (Denmark, Copenhagen)</li> +<li>Tobias Busch (Norway, Oslo)</li> +<li>Lina Andrén (Sweden, Stockholm)</li> +<li>Mohamed Abdelhalim (Norway, Oslo)</li> +<li>Annajiat Alim Rasel (Bangladesh, Dhaka)</li> +<li>Joakim Philipson (Sweden, Stockholm)</li> +<li>Thomas Arildsen (Denmark, Aarborg)</li> +<li>Radovan Bast(Norway, Tromsø)</li> +<li>Samantha Wittke (Finland, Helsinki)</li> +<li>Olav Vahtras (Sweden, Stockholm)</li> +<li>Anne Fouilloux(Norway, Oslo)</li> +<li>Richard Darst (Finland, Helsinki)</li> +</ol> +<p>Thank you for all the contributions!</p> + + + + Making lessons citable and giving credits for contributors + 2020-10-02T00:00:00+00:00 + 2020-10-02T00:00:00+00:00 + + https://coderefinery.org/open-house/credit/ + <p>CodeRefinery is organizing a half day online &quot;open house&quot; 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 href="https://hackmd.io/@coderefinery/2020-10-02-openhouse">shared +document</a>. +Please note that this document will be archived in our <a 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 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 href="https://coderefinery.zulipchat.com">Zulip chat</a> +with possibilities to further discuss via video if necessary.</p> +<p>We conclude the day around 12:00 pm (UTC+1).</p> + + + + git-pr: painless small pull requests + 2020-09-29T00:00:00+00:00 + 2020-09-29T00:00:00+00:00 + + 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 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 href="https://github.com/NordicHPC/git-pr">https://github.com/NordicHPC/git-pr</a> - it is a +single shell script to copy to your path.</p> +<p>It's beta-quality software: it is used by me and a few others all the +time, but there will almost certainly be issues as others start using +it. Send issues and PRs!</p> +<p>It supports both Github and Gitlab, though Gitlab support is less well +tested.</p> +<p>There is a lot of prior art on different pieces here, there isn't much +in git-pr that is completely new - In particular, the GitHub command +line interface has come out since then and has some overlap. You can +see other options in the git-pr README.</p> + + + + Writing newsletter articles and blog posts + 2020-08-24T00:00:00+00:00 + 2020-08-24T00:00:00+00:00 + + https://coderefinery.org/open-house/newsletter/ + <p>CodeRefinery is organizing a one day online &quot;open house&quot; 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 href="https://hackmd.io/@coderefinery/2020-08-24-openhouse">shared +document</a>. +Please note that this document will be archived in our <a 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 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 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 href="https://hackmd.io/@coderefinery/2020-08-24-openhouse">shared +document</a>.</p> + + + + Report from the Mega-Coderefinery workshop + 2020-07-31T00:00:00+00:00 + 2020-07-31T00:00:00+00:00 + + 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 +&quot;High-performance computing (HPC) Kickstart&quot; 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 href="https://coderefinery.github.io/2020-05-25-online/">Webpage</a></p> +<h2 id="finnish-hpc-kickstart">Finnish HPC Kickstart</h2> +<p><a 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 &quot;required&quot; 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 +&quot;helper introduction meeting&quot;, 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 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>&quot;Require&quot; 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">&quot;Bring your own breakout room&quot;</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 href="https://doi.org/10.1007/s11301-017-0133-3">Graf-Vlachy, L., Buhtz, K. &amp; König, 2018</a>). Encourage people to come with friends or groupmates.</li> +<li>How it worked: +<ul> +<li>This is implemented as a &quot;Team name&quot; 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 &quot;random&quot; 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 &quot;team name&quot; 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 &quot;CR&quot; +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 &quot;Room&quot; 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 href="https://coderefinery.github.io/manuals/helping-and-teaching/">General</a></li> +<li><a 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 &quot;correct&quot; 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 &quot;special expert helpers&quot; (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. &quot;we expect you to finish 1-3, 4-5 are optional. 20 +minutes, ending at xx:45&quot;.</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 &quot;if it's even a little bit slow to you, +then it takes ages for a learner to understand&quot;.</li> +</ul> +<h3 id="recommendations-5">Recommendations</h3> +<ul> +<li>Have lots of &quot;meta-talk&quot; 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 &quot;HackMD master&quot; 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 &quot;questions section&quot; and &quot;lesson section&quot;, 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 &quot;pre-assign breakout rooms&quot; 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 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 (&quot;spotlight video&quot;) 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>&quot;Custom streaming server&quot; seems to be able to broadcast to +anything. In particular, we used <a 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 &quot;Spotlight video&quot; 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. &quot;video not broadcast, voice may be&quot;). It is +much harder to add this later.</li> +</ul> +<h2 id="recording">Recording</h2> +<ul> +<li>Once you do streaming, it is a smaller step to recording and posting +the videos. +<ul> +<li>Who is benefited by the recordings? Perhaps not brand new +learners, but the learners who were in the workshop can review +them again later.</li> +</ul> +</li> +<li>If recordings require post-processing, they will almost never get +done. +<ul> +<li>Plan for one-short recording as much as you can: find a way to +keep learners out of the recording so you can go and directly +publish it with the minimum effort afterwards.</li> +</ul> +</li> +<li>A surprising number of learners have asked for the videos after the +workshop. +<ul> +<li>While the videos may not be as useful to someone learning the +material from scratch, they are probably very useful to an +existing learner who wants to review something they already saw, +teach others, etc.</li> +<li>When we can't provide them quickly, their usefulness is much +reduced.</li> +</ul> +</li> +</ul> +<h3 id="recommendations-8">Recommendations</h3> +<ul> +<li>Clearly announce the recording privacy statement when first +registering.</li> +<li>Try to make the recording as one-shot as possible, with minimal +post-processing needed. Plan for who will do this and when already +before the workshop.</li> +</ul> + + + + CodeRefinery tools in action: NordicHPC + 2020-04-27T00:00:00+00:00 + 2020-04-27T00:00:00+00:00 + + 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 href="https://coderefinery.github.io/git-intro/">git</a> (everything), +<a href="https://coderefinery.github.io/git-collaborative/">pull-request based +workflows</a> +(e.g. sonar, git-pr, slurm2sql), <a href="https://coderefinery.github.io/testing/">automated +testing</a> (e.g. .travis.yml in +sonar, envkernel, nbscript, slurm2sql), <a 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 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 href="https://github.com/NordicHPC/nbscript">nbscrpt</a> is an attempt to +provide the familiar script interface to Jupyter notebooks.</li> +<li><a href="https://github.com/NordicHPC/sonar">sonar</a> and +<a href="https://github.com/NordicHPC/sonar-web">sonar-web</a> provide a way to +watch what is actually running on clusters.</li> +<li><a href="https://github.com/NordicHPC/git-pr">git-pr</a> saves you keystrokes +when making pull requests, though perhaps +<a href="https://cli.github.com/">cli.github.com</a> takes its place.</li> +<li><a 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 href="https://github.com/NordicHPC/envkernel">envkernel</a> is a Jupyter +extension which lets you run your kernels in different environments, +such as Docker, Singularity, and virtual/conda environments more +easily.</li> +</ul> +<p>Do you have a nice tool that needs a home? You know what to do...</p> + + + + Announcing the first Nordic-RSE conference + 2020-04-24T00:00:00+00:00 + 2020-04-24T00:00:00+00:00 + + https://coderefinery.org/blog/2020/04/24/nordic-rse-conference/ + <p>A couple of years ago, <a 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 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 href="https://society-rse.org/">the UK</a>, <a href="http://nl-rse.org/">the +Netherlands</a> and +<a 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 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 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 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 +(nordic-rse-organizers@neic.no) 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 href="https://e-science.se/">Swedish e-Science Research Centre +(SeRC)</a>, the <a href="https://snic.se/">Swedish National Infrastructure +for Computing (SNIC)</a> and the <a 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:nordic-rse-organizers@neic.no">get in +touch</a>.</p> + + + + CodeRefinery workshops moving online + 2020-04-24T00:00:00+00:00 + 2020-04-24T00:00:00+00:00 + + 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 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 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 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 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 &quot;bring their own breakout room&quot; 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 &quot;giving&quot; 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 href="https://coderefinery.org/workshops/upcoming/#notify-me">notify-me +form</a> if you +want to receive an email as soon as registration opens for these +workshoops!</p> + + + + Rebase vs merge + 2020-04-24T00:00:00+00:00 + 2020-04-24T00:00:00+00:00 + + 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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</p> +<p>We can rebase the <code>feature_A</code> branch to the last commit in <code>master</code>:</p> +<pre data-lang="bash" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#5597d6;">git</span><span> checkout feature_A +</span><span style="color:#5597d6;">git</span><span> rebase master +</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:70%&quot;}</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 data-lang="sh" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#5597d6;">git</span><span> checkout master +</span><span style="color:#5597d6;">git</span><span> merge feature_B</span><span style="color:#5597d6;"> --no-ff +</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 data-lang="sh" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#5597d6;">git</span><span> config</span><span style="color:#5597d6;"> --global</span><span> branch.master.mergeoptions</span><span style="color:#5597d6;"> --no-ff +</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</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 data-lang="sh" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#5597d6;">git</span><span> checkout fix_types +</span><span style="color:#5597d6;">git</span><span> rebase master +</span><span style="color:#5597d6;">git</span><span> checkout master +</span><span style="color:#5597d6;">git</span><span> merge fix_typos</span><span style="color:#5597d6;"> --ff-only +</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</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 href="https://medium.com/@porteneuve/getting-solid-at-git-rebase-vs-merge-4fa1a48c53aa">[1] Getting Solid at Merge vs Rebase</a></p> + + + + Research Software Hour + 2020-04-24T00:00:00+00:00 + 2020-04-24T00:00:00+00:00 + + 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 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 href="https://researchsoftwarehour.github.io/">the website</a> +and join us each Tuesday at 20:30 CEST on Twitch.</p> + + + + Work on blog posts + 2020-04-24T00:00:00+00:00 + 2020-04-24T00:00:00+00:00 + + https://coderefinery.org/open-house/blog-posts/ + <p>CodeRefinery is organizing a one day online &quot;open house&quot; 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 href="https://hackmd.io/46XkhCr5T4yahKprL6N01A">shared +document</a>. +Please note that this document will be archived in our <a 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 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 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 href="https://hackmd.io/46XkhCr5T4yahKprL6N01A">shared +document</a>.</p> + + + + Lessons learned from running our first online workshop + 2020-04-14T00:00:00+00:00 + 2020-04-14T00:00:00+00:00 + + https://coderefinery.org/blog/2020/04/14/first-online-workshop/ + <p>April 7-8, 2020, we gave our first online workshop on <a 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 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 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 &quot;ice-breaker&quot; 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 &quot;setting up and configuring Git&quot; 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: &quot;price of workshop is to attend a later workshop +as helper&quot; (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> (&quot;flipped classroom&quot; 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 &quot;it's easiest to share +the screen since you don't have to do the thinking&quot;.</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 &quot;sticky&quot; 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 href="https://coderefinery.github.io/manuals/instructor-tech-setup/">displaying the +last commands +typed</a> +really helps.</li> +<li>Gray/dark background terminal looked better than light background terminal.</li> +</ul> +<h3 id="how-to-make-this-more-scalable">How to make this more scalable?</h3> +<ul> +<li>This time we did not plan to record or stream but we nevertheless asked the +participants in a pre-workshop survey: 2/20 preferred not to have the +workshop streamed, 1/20 didn't want it recorded.</li> +<li>The workshop was great, but we should think more about how to reach more +people. A small workshop where we can individually interact with everyone is +amazing, but the promise of digital technology is that we can reach everyone in +the world. How can we get the best of both? Can we also do something for +everyone else who can't attend but might want to watch later? This is +something to think about.</li> +<li>How can we make this more scalable? This workshop was quite labor-intensive. +You could probably do it with two instructors (instructor + HackMD watcher) + 1 +zoom expert (host + general helper) + a lot of semi-experienced helpers (1:5 +ratio) + a few debuggers to help with tech support the first hour (not +overlapping with instructor or HackMD watcher).</li> +<li>Imagine if we had main room recorded (or even streamed), but breakout rooms +not. People can still ask and interact with privacy in the small rooms - and +we take these comments/issues back to the main room. Other people following +along later can do the exercises at their own pace, and hear the +intros/conclusions in the main rooms, and it might feel a bit like a small +class.</li> +</ul> + + + + Work on instructor training material + 2020-03-24T00:00:00+00:00 + 2020-03-24T00:00:00+00:00 + + https://coderefinery.org/open-house/instructor-training-material/ + <p>CodeRefinery is organizing a one day online &quot;open house&quot; dedicated to +work together on revising and +improving <a href="https://coderefinery.github.io/instructor-training/">our instructor training +material</a>. +<a href="https://github.com/coderefinery/instructor-training/issues">Issues are filed +here</a>, +notes from the first workshop can be in the <a 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 href="https://hackmd.io/@doFoQYKqR623RI-YyXvmew/HJGgb_9VL">shared +document</a>. +Please note that this document will be archived in our <a 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 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 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 href="https://hackmd.io/@doFoQYKqR623RI-YyXvmew/HJGgb_9VL">shared +document</a>.</p> + + + + Preparing for online teaching + 2020-03-20T00:00:00+00:00 + 2020-03-20T00:00:00+00:00 + + https://coderefinery.org/open-house/online-teaching/ + <p>We will meet on <a href="https://kth-se.zoom.us/j/152239500">video</a> (9:00 am, UTC+1) +and <a href="https://coderefinery.zulipchat.com">chat</a> and discuss techniques, +solutions, and tricks for online teaching and collect our notes in a <a 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 href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>.</p> + + + + Collaborative work on the website + 2020-02-11T00:00:00+00:00 + 2020-02-11T00:00:00+00:00 + + 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 href="https://coderefinery.org">coderefinery.org</a>. <a 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 href="https://coderefinery.org">coderefinery.org</a> is very welcome to join.</p> +<p>We will collect nodes in a <a href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>. +Please note that this document will be archived in our +<a 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 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 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 href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>.</p> + + + + Collaborative work on the training material + 2019-12-13T00:00:00+00:00 + 2019-12-13T00:00:00+00:00 + + 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 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 href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>. +Please note that this document will be archived in our +<a 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 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 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 href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>.</p> + + + diff --git a/branch/rkdarst--open-source-courses/blog/2020/04/14/first-online-workshop/index.html b/branch/rkdarst--open-source-courses/blog/2020/04/14/first-online-workshop/index.html new file mode 100644 index 000000000..605ee1daf --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/2020/04/14/first-online-workshop/index.html @@ -0,0 +1,775 @@ + + + + Lessons learned from running our first online workshop - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Lessons learned from running our first online workshop + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Lessons learned from running our first online workshop

+ + + + +
+ +

April 7-8, 2020, we gave our first online workshop on introduction to +Git (2 x 3 hours) with 22 +participants and we plan to deliver many more such workshops on a number of +topics based on our lessons.

+

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).

+

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.

+

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.

+

Breaks and ice-breaker

+
    +
  • 5 minute breaks were too short, better 10 minutes or longer, at least once an +hour.
  • +
  • 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 +presentation +and references therein).
  • +
  • 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.
  • +
  • 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.
  • +
+

Solving technical issues

+

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.

+
    +
  • 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.
  • +
  • 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. +
      +
    • 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.
    • +
    • We think that when pre-making the rooms, you have to create some empty +spares for this.
    • +
    +
  • +
+

Helpers

+

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.

+
    +
  • 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.
  • +
  • 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.
  • +
  • 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).
  • +
+

Breakout sessions

+

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.

+
    +
  • Fewer longer (15 min) breakout sessions were better than many short ones +(5-10 min).
  • +
  • This also means that we should group some exercises and not have them spread +out every 10 minutes.
  • +
  • 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.
  • +
  • Groups with 4-5 persons seem to work well, with one helper.
  • +
  • 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.
  • +
  • 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.
  • +
  • Some people just wanted to work alone, that's OK too.
  • +
  • Method 1: group work +
      +
    • Most teaching done in main room (this is important for the most important +and delicate topics).
    • +
    • Participants are in breakout rooms, working independently, sharing +screen/asking for help when they need to.
    • +
    +
  • +
  • Method 2: flipped classroom ("flipped classroom" isn't quite the right +term though) +
      +
    • Initial motivation in the main room.
    • +
    • Switch to breakout rooms early to go through the type-along exercises.
    • +
    • This only works when things are clear enough that people can't get too lost.
    • +
    • (*) 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".
    • +
    • (*) Instructor flips between the rooms every 1-2 minutes answering hard +questions and following progress.
    • +
    • Join the end for a wrap-up where best questions are discussed.
    • +
    • Helpers and instructors should write down the most important questions to +discuss afterwards.
    • +
    +
  • +
  • In reality, use the best of both depending on your specific lesson, +especially the asterisk (*) points! +
      +
    • Encourage the instructor to cycle through breakout rooms to watch +discussions and help out.
    • +
    • 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).
    • +
    +
  • +
  • Host can lose host rights sometimes. +
      +
    • Host should not enter breakout rooms, at least if they are not the original +host because then hostship is transferred to original host.
    • +
    • 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.
    • +
    • 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.
    • +
    +
  • +
  • Co-hosts seem to be able to jump between rooms freely after first joining +the room they were originally assigned to (i.e. can't select any group from +the main room).
  • +
  • At one point, Zoom dropped the whole meeting and everyone re-joined +(automatically). Pre-assembled breakout rooms got lost, which was annoying.
  • +
+

HackMD

+

HackMD was a vital resource, but you should have someone dedicated to watching it and keeping it organized.

+
    +
  • We were impressed how well it worked, holding up with 25 persons editing +without noticeable lag.
  • +
  • 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.
  • +
  • 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!
  • +
  • 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.
  • +
  • Students can come back after the course and find better researched answers, +if the in-course answer is unsatisfactory.
  • +
  • Make sure that the HackMD contents, without any identifying information, can +be made public after the course.
  • +
  • Instead of asking questions in a particular section of the HackMD and +searching and scrolling it was better to ask questions always at the current +bottom of the document. Add new section headings as you start new sections.
  • +
  • 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.
  • +
  • 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.
  • +
+

Chat

+

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.

+
    +
  • 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.
  • +
  • The chat can be used for formative assessment questions where participants +are asked to vote for correct answers in a multiple-choice question.
  • +
  • Practical announcements/instructions should be provided both written and +spoken, to reduce chance they are missed.
  • +
  • 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.
  • +
+

Organization

+

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.

+
    +
  • 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 should have been 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.
  • +
  • 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:
  • +
  • Roles during main lectures: +
      +
    • Host person in charge of overall schedule, timekeeping, breakout rooms and +Zoom chat/participant reactions, clearing feedback, balancing answering +questions, moderating, etc.
    • +
    • 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.
    • +
    • One person watching and formatting the HackMD (but more persons might be +needed if there are many questions).
    • +
    • Backup expert helpers for problems that require intensive debugging (at +least needed at the beginning).
    • +
    +
  • +
  • Roles during breakouts (this is more flexible): +
      +
    • Host in main room watching stuff.
    • +
    • One helper per room leading.
    • +
    • Lesson instructor hopping from room to room answering advanced questions +and also probing the general mood.
    • +
    +
  • +
  • Host makes all instructors and helpers co-hosts so that they can move between +rooms.
  • +
+

Screencasting

+

The requirements and recommendations are roughly like in-person.

+
    +
  • Showing history of commands via tmux or similar, coupled with displaying the +last commands +typed +really helps.
  • +
  • Gray/dark background terminal looked better than light background terminal.
  • +
+

How to make this more scalable?

+
    +
  • 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.
  • +
  • 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.
  • +
  • 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).
  • +
  • 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.
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/blog/2020/04/24/nordic-rse-conference/index.html b/branch/rkdarst--open-source-courses/blog/2020/04/24/nordic-rse-conference/index.html new file mode 100644 index 000000000..686c8dd9a --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/2020/04/24/nordic-rse-conference/index.html @@ -0,0 +1,601 @@ + + + + Announcing the first Nordic-RSE conference - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Announcing the first Nordic-RSE conference + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Announcing the first Nordic-RSE conference

+ + + + +
+ +

A couple of years ago, several CodeRefinery members and their +friends +started discussing how a Nordic network of Research Software Engineers +(RSEs) could be established, and soon thereafter the Nordic-RSE +initiative was launched. The idea was to +follow in the footsteps of very successful such initiatives in other +countries, most notably in the UK, the +Netherlands and +Germany. For the past two years +we have been taking the first steps in this direction. A survey was +conducted +to learn about the environment for people in RSE-related +roles. Information on groups and people +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 +the first Nordic-RSE conference, +Nordic-RSE2020, will take place in Stockholm between 1st and 2nd +December 2020!

+

About the conference

+

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.

+

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.

+

Who should attend?

+

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.

+

We welcome participation from:

+
    +
  • Researchers at any career stage who develop software for research +purposes;
  • +
  • Software developers working in a research context, whatever their +job title or field;
  • +
  • Those interested in advancing the understanding of how best to use +existing research software (e.g. with respect to scalability, +performance and/or reproducibility);
  • +
  • People from any organization providing tools, platforms or services +that benefit research software;
  • +
  • Anyone with a stake in research software (funders, publishers, +decision makers, etc).
  • +
+

We especially encourage first-time presenters and can offer mentoring +and other support with preparing your contribution.

+

Getting involved

+

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 +(nordic-rse-organizers@neic.no) if you would like to help or if you +have any questions on how to get involved with Nordic-RSE2020.

+

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 Swedish e-Science Research Centre +(SeRC), the Swedish National Infrastructure +for Computing (SNIC) and the Swedish e-science +collaboration (eSSENCE). By supporting +us, our sponsors are helping to raise awareness of the importance of +developing RSE career path in the Nordics.

+

Inviting new sponsors

+

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.

+

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 get in +touch.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/blog/2020/04/24/online-workshops-update/index.html b/branch/rkdarst--open-source-courses/blog/2020/04/24/online-workshops-update/index.html new file mode 100644 index 000000000..7bab1bc1e --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/2020/04/24/online-workshops-update/index.html @@ -0,0 +1,584 @@ + + + + CodeRefinery workshops moving online - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery workshops moving online + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

CodeRefinery workshops moving online

+ + + + +
+ +

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 +Git-intro 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 scale up and reach a larger audience +than possible with in-person workshops.

+

We learned many important lessons in this first experiment and we +tried to summarize them all in a previous +article. We +hope that these notes can be of help to others who are going online +with some of their teaching.

+

New notify-me form

+

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 new more +fine-grained notify-me +form 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.

+

Join an online workshops as a helper

+

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.

+

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 helper for upcoming online or in-person workshops in our +new notify-me +form. Remember +also that there is no better way to consolidate new knowledge than +teaching it to others!

+

Bring your own breakout room/helper

+

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.

+

Upcoming online workshops

+

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.

+

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.

+

Sign up for the notify-me +form if you +want to receive an email as soon as registration opens for these +workshoops!

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/blog/2020/04/24/rebase-vs-merge/index.html b/branch/rkdarst--open-source-courses/blog/2020/04/24/rebase-vs-merge/index.html new file mode 100644 index 000000000..12b7e8ae8 --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/2020/04/24/rebase-vs-merge/index.html @@ -0,0 +1,567 @@ + + + + Rebase vs merge - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Rebase vs merge + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Rebase vs merge

+ + + + +
+ +

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?

+

Let us take a closer look at rebase and merge, how they differ and in +which situations they are an advantage to use.

+

Rebase

+

Rebase gives you the opportunity to move the base of a branch to a new +base. Here we have two branches, master and feature_A.

+

Initial tree{:class="img-responsive" style="max-width:100%"}

+

We can rebase the feature_A branch to the last commit in master:

+
git checkout feature_A
+git rebase master
+
+

The result will look like this.

+

First rebase tree{:class="img-responsive" style="max-width:100%"}

+

Checking out master again, we can merge feature_A with master. 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.

+

FF-merge tree{:class="img-responsive" style="max-width:100%"}

+

Merge

+

If we don’t use rebase, but just merge feature_A with master, we get an merge commit, a new commit pointing to the previous last commit in master and the previous last commit in feature_A.

+

Plain merge tree{:class="img-responsive" style="max-width:100%"}

+

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.

+

Mixing rebase and merge

+

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:

+
    +
  • When we merge a semantic unit to master, we use merge.
  • +
  • When patch features, or do general corrections, we use rebase.
  • +
+

How will this look?

+

Merge revisited

+

Let us say we have created a new function or class, something that belongs together - a semantic unit we call feature_B. The base of feature_B is the last commit in master.

+

Master feature-b tree{:class="img-responsive" style="max-width:70%"}

+

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:

+
git checkout master
+git merge feature_B --no-ff
+
+

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:

+
git config --global branch.master.mergeoptions --no-ff
+
+

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.

+

No-ff merge tree{:class="img-responsive" style="max-width:100%"}

+

Rebase revisited

+

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, master 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.

+

No-ff merge tree plus patch{:class="img-responsive" style="max-width:100%"}

+

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:

+
git checkout fix_types
+git rebase master
+git checkout master
+git merge fix_typos --ff-only
+
+

The git graph will now look like this:

+

No-ff merge plus rebase{:class="img-responsive" style="max-width:100%"}

+

Rebase vs merge revisited

+

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 master 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.

+

[1] Getting Solid at Merge vs Rebase

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/blog/2020/04/24/rsh/index.html b/branch/rkdarst--open-source-courses/blog/2020/04/24/rsh/index.html new file mode 100644 index 000000000..cef4cfed7 --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/2020/04/24/rsh/index.html @@ -0,0 +1,542 @@ + + + + Research Software Hour - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Research Software Hour + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Research Software Hour

+ + + + +
+ +

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 Research Software Hour that combines +the spirit of CodeRefinery with real-life examples from our daily +work - and hopefully, some entertainment, too. We hope watchers +experience the spirit of research software and computing.

+

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.

+

We wish to show why we enjoy research software and computing and how +you can, too. 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. 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.

+

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!

+

Read more at the website +and join us each Tuesday at 20:30 CEST on Twitch.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/blog/2020/04/27/nordichpc-tools/index.html b/branch/rkdarst--open-source-courses/blog/2020/04/27/nordichpc-tools/index.html new file mode 100644 index 000000000..843a8e78d --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/2020/04/27/nordichpc-tools/index.html @@ -0,0 +1,551 @@ + + + + CodeRefinery tools in action: NordicHPC - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery tools in action: NordicHPC + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

CodeRefinery tools in action: NordicHPC

+ + + + +
+ +

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.

+

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.

+

Within the organization, you can find many examples of using +git (everything), +pull-request based +workflows +(e.g. sonar, git-pr, slurm2sql), automated +testing (e.g. .travis.yml in +sonar, envkernel, nbscript, slurm2sql), modular code +development +(e.g. ), open +licensing +(e.g. everything).

+

Below you see some examples of NordicHPC tools. Some tools are useful +to anyone, but some may be more interesting to cluster administrators.

+
    +
  • nbscrpt is an attempt to +provide the familiar script interface to Jupyter notebooks.
  • +
  • sonar and +sonar-web provide a way to +watch what is actually running on clusters.
  • +
  • git-pr saves you keystrokes +when making pull requests, though perhaps +cli.github.com takes its place.
  • +
  • slurm2sql imports the HPC +Slurm job history to a sqlite3 database. It can be useful, even +individually, to get and analyze data about your jobs.
  • +
  • envkernel is a Jupyter +extension which lets you run your kernels in different environments, +such as Docker, Singularity, and virtual/conda environments more +easily.
  • +
+

Do you have a nice tool that needs a home? You know what to do...

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/blog/2020/07/31/mega-coderefinery/index.html b/branch/rkdarst--open-source-courses/blog/2020/07/31/mega-coderefinery/index.html new file mode 100644 index 000000000..eda297313 --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/2020/07/31/mega-coderefinery/index.html @@ -0,0 +1,1176 @@ + + + + Report from the Mega-Coderefinery workshop - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Report from the Mega-Coderefinery workshop + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Report from the Mega-Coderefinery workshop

+ + + + +
+ +

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.

+

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.

+

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.

+

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.

+

Executive summary

+
    +
  • Yes, we scale to 100 people pretty well, but you do need a good +vision about how to do it.
  • +
  • We maintained good learning outcomes with our adjusted strategies.
  • +
  • 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.
  • +
  • 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.
  • +
  • You need to put in extra effort to ensure things run smoothly and +make sure that everyone is prepared - anticipate all problems.
  • +
  • Roles of staff should be carefully explained and ideally not +overlapping, to reduce the cognitive load.
  • +
+

Mega-CodeRefinery

+

Webpage

+

Finnish HPC Kickstart

+

Webpage

+

Organization

+
    +
  • Pre-workshop install help times: +
      +
    • Emphasis on getting ready and making sure things are installed +and configured.
    • +
    • 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.
    • +
    • The installation verification time occurred right after the +"helper introduction meeting", so helpers would stay and help +people verify their installation.
    • +
    +
  • +
  • Installation instructions consist not just of installation, but also +verification instructions. +
      +
    • In particular, verifying of the git configuration, since if +there are any issues, it very quickly derails things.
    • +
    +
  • +
  • We created installation and verification videos for the most +critical part, git youtube +playlist: +
      +
    • One on verifying an installation (make repo, run it)
    • +
    • One for most common problems you might see and how to fix
    • +
    • One for advanced topics (ssh keys)
    • +
    +
  • +
  • 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.
  • +
  • We kept the Zoom meeting room open for 30 min to 1 hour after the scheduled lessons are over on that day. +
      +
    • This enabled continuation of exercises in re-opening breakout rooms.
    • +
    • Some participants could receive individual help by a helper or an expert helper.
    • +
    • In the main room, we did debriefing among instructors and helpers so that we could reflect on the day after.
    • +
    +
  • +
  • The larger the audience gets, the more diverse it is. +
      +
    • This causes more load on helpers and more effort for organizers +to prepare.
    • +
    • It also makes it harder to please everyone.
    • +
    • But on average, we felt that the outcome was about as expected.
    • +
    +
  • +
  • To scale to this cognitive load, carefully assign roles (roles +explained below): +
      +
    • Zoom host, focuses on chat, breakout rooms, registration, etc.
    • +
    • HackMD master
    • +
    • Expert helpers (special ops)
    • +
    • Instructors
    • +
    • Helpers
    • +
    • 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.
    • +
    +
  • +
+

Recommendations

+
    +
  • Place a large emphasis on getting ready for the workshop.
  • +
  • Have multiple ways for learners to verify their installation.
  • +
  • "Require" attendance in pre-workshop installation verification +times. Invite helpers there to get involved and practice basic +helping.
  • +
+

Teams

+

Our recruitment/sign-up strategy was twofold.

+
    +
  1. Open call for helpers and sign-up for individual learners.
  2. +
  3. “Bring your own breakout room”: We allowed learners to register as teams, where each team brought its own helper.
  4. +
+

Open call for helpers and sign-up for individual learners.

+
    +
  • First we had a general call for helpers to assign a breakout room with individual learners.
  • +
  • Our plan was to allocate one helper for 5 learnes accepted approx. (the number of helpers) * 5 of individual leraner sign-ups.
  • +
  • We tried to sort these learners by university/country/field, but didn't put too much effort into this.
  • +
  • Helpers and learners were told which team they will be in before the workshop (personalized email with breakout room number).
  • +
  • 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. +
      +
    • For a long workshop like this one (6 half-days), getting to know each other seemed to result in more interaction by the end.
    • +
    • 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.
    • +
    • It took a session or two for people to get comfortable with their room, but once they did it went well.
    • +
    +
  • +
+

"Bring your own breakout room"

+
    +
  • 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.
  • +
  • Research shows that multiple adopters in an organization greatly increases uptake of new tools (Graf-Vlachy, L., Buhtz, K. & König, 2018). Encourage people to come with friends or groupmates.
  • +
  • How it worked: +
      +
    • This is implemented as a "Team name" option when registering.
    • +
    • They are put in their own breakout room together.
    • +
    +
  • +
  • Advantages: +
      +
    • Scalability: 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.
    • +
    • Team building: 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.
    • +
    • Possibility to use familiar examples: 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.
    • +
    +
  • +
  • The concept of teams could be extended to in-person workshops, too. +
      +
    • Not necessarily pre-assigned, but cleverly organize tables, expect the group to stay together all days.
    • +
    • One could give the teams names and so on, to increase team spirit.
    • +
    +
  • +
+

Recommendations

+
    +
  • Accept a "team name" as part of registration. These people will be +put into the same breakout rooms. Worst case, it isn't used.
  • +
  • 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.
  • +
+

Breakout rooms management

+
    +
  • Assign names depending on breakout room and role. Here, n is the +breakout room number: +
      +
    • (n) First Last - learner
    • +
    • (n,H) First Last - helper
    • +
    • 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))
    • +
    • (CR) First Last for instructors and expert helpers (here "CR" +stood for CodeRefinery staff).
    • +
    +
  • +
  • Initial breakout room assignments serves as a guideline, rooms are +constantly adjusted as needed but we try to keep teams together.
  • +
  • Preferably, one breakout room should have minimum 4 learners.
  • +
  • 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.
  • +
  • Some people don't join with the right Zoom name. +
      +
    • Other co-hosts can browse the registration list and manually +rename participants who didn't name themselves correctly.
    • +
    • Then, the Zoom host only has to worry about assigning them into +the right rooms, and not looking up everyone on the lists.
    • +
    +
  • +
  • Our registration system, Indico, made this management much easier +than it could have been. +
      +
    • After registration closed, we added a "Room" field to the +registration data.
    • +
    • 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.
    • +
    • We could send personalized messages to each person with the +Indico mail merge function
    • +
    • The majority of people did manage to name themselves correctly.
    • +
    +
  • +
+

Recommendations

+
    +
  • Consistent naming of participants (and an order that sorts properly) +makes managing breakout rooms reasonable.
  • +
  • Consider how your registration system can send personalized emails +to each person.
  • +
+

Helper training

+

Regular helpers:

+
    +
  • Have a helper call the previous week. Actually, have two so that +everyone can make it to at least one.
  • +
  • Helper training: + +
  • +
  • Focus on training for managing time and keeping a flow going. This +is described in our document.
  • +
  • Helpers do not need to be experts in everything. +
      +
    • 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.
    • +
    +
  • +
  • Helper training is focused on: +
      +
    • Motivation of learners and teaching psychology.
    • +
    • How to help: don't do it for them, etc.
    • +
    • Keeping the flow going, encourage everyone to speak up and +share.
    • +
    • Knowing when and how to call for an expert helper to come to the +room.
    • +
    +
  • +
+

Special expert helpers:

+
    +
  • There are also "special expert helpers" (we need a new name), who +are experts in the material and problems that may come up. +
      +
    • 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.
    • +
    • Special experts aren't assigned to any particular breakout room. +Instead, they are able to go to any room that needs more help.
    • +
    • 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.
    • +
    • 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.
    • +
    +
  • +
  • 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.
  • +
  • Special experts also serve as backup helpers and can take over or +permanently join a room if a helper is unprepared.
  • +
  • The instructor is also encouraged to pop into some breakout rooms to +see how things are going. This may be enough in small workshops.
  • +
  • Special experts should be Zoom co-hosts. They are then able to go +into any breakout room they want (the mechanics of this is not +obvious, see our helper training info for more).
  • +
  • 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.
  • +
+

Recommendations

+
    +
  • Hierarchical helpers allows you to extend to a greater size.
  • +
  • You need to put thought into how helpers work and prepare them well. +We should develop a special, quick training for them.
  • +
  • Special expert helpers connect the instructor (occupied with +teaching) to the pulse of the breakout rooms and serve as helper +mentors.
  • +
+

Lesson adjustment

+
    +
  • Make the exercise sessions as long as possible, group things +together. +
      +
    • There is a significant overhead to each breakout session, +becoming adjusted, figure out just what it is you are supposed +to do.
    • +
    +
  • +
  • Type-along is hard, given limited screen space to both watch and do.
  • +
  • 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.
  • +
  • With hierarchical helpers and more people in general, make sure that +each exercise and hands-on session is as self-contained as possible. +
      +
    • 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.
    • +
    +
  • +
+

Recommendations

+
    +
  • Consider limits of online formats and how difficult it is to do +interactive work.
  • +
+

Exercises and breakout sessions

+
    +
  • Very clearly say what the goal is, what the duration is (duration +and time it ends), etc. for each lesson
  • +
  • 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 +
      +
    • e.g. "we expect you to finish 1-3, 4-5 are optional. 20 +minutes, ending at xx:45".
    • +
    • When participants are in two time zones, it is extra important +to use this format of not specifying hour.
    • +
    +
  • +
  • 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".
  • +
+

Recommendations

+
    +
  • Have lots of "meta-talk" about what you are doing, what expectations +are, etc.
  • +
+

HackMD

+
    +
  • HackMD serves as a side channel to answer questions, so that the +main flow is not disrupted. +
      +
    • Learners keep it open and always watch and ask questions at the +bottom.
    • +
    +
  • +
  • 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. +
      +
    • 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).
    • +
    +
  • +
  • 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.
  • +
  • HackMD starts failing with a lot of people +
      +
    • We saw the limits at 50-100 people. If most people leave it in +view mode, it gets a little bit better.
    • +
    • If there isn't much text in it, it's better (~10k characters is +low).
    • +
    • When the document grew too long: we moved some of the text from +previous episodes to a side-HackMD and linked to it.
    • +
    • The failure mode was usually not being able to edit.
    • +
    • 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.
    • +
    • We even saw Google Docs fail with 50 simultaneous editors during +an icebreaker (and our icebreakers with hackmd seemed to work +with ~50).
    • +
    +
  • +
  • Always have people ask questions and comment at the bottom. +
      +
    • There is not a "questions section" and "lesson section", always +write at the bottom.
    • +
    • 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.
    • +
    +
  • +
  • Suggested heading arrangements (but hackmd master does whatever +makes sense): +
      +
    • # for page title
    • +
    • ## for each lesson
    • +
    • ### for each episode
    • +
    • #### for each exercise, group discussion, etc. (if it needs to +be smaller than ###.)
    • +
    +
  • +
  • Make participants aware that we plan to publish questions and +answers later as workshop outcomes. +
      +
    • After the workshop we add questions and answers from the HackMD +document to the workshop page.
    • +
    • 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.
    • +
    • 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 [name=Myname] 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 +[name=Myname]. 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.
    • +
    • 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.
    • +
    +
  • +
+

Zoom

+
    +
  • Have a dedicated host, who focuses on breakout rooms and +registration related matters.
  • +
  • Use a client, not the web browser - though web browser is minimally +OK.
  • +
  • Assigning leareners to breakout rooms takes a long time, but luckily +Zoom can make it easy enough: +
      +
    • The "pre-assign breakout rooms" seems to only work within one +organization, thus was useless to us
    • +
    • When people name themselves according to the (n) Firstname Lastname system, people sort properly and it becomes very fast +to assign hundreds of people to their rooms.
    • +
    +
  • +
  • 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. +
      +
    • This is important when you approve entry to the meeting room from the waiting room.
    • +
    • 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.
    • +
    +
  • +
  • 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 CodeRefinery Zulip channel. +
      +
    • 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.
    • +
    • HackMD can also be used to discuss among staff, of course always +at the very bottom.
    • +
    +
  • +
  • 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).
  • +
  • We saw some interesting Zoom problems: +
      +
    • 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.
    • +
    • 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.
    • +
    • 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.
    • +
    +
  • +
+

Recommendations

+
    +
  • Managing breakout rooms isn't too hard, but do practice.
  • +
+

Streaming

+

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.

+
    +
  • +

    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.

    +
  • +
  • +

    What's the point of streaming?

    +
      +
    • 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.
    • +
    • 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.
    • +
    • We can imagine a fully federated system: There is one small Zoom +meeting with instructors doing the teaching. All 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.
    • +
    +
  • +
  • +

    Stream as an overflow

    +
      +
    • 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
    • +
    • We emphasized that the experience would not be the same, and +they should try to come to another workshop later.
    • +
    • 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.
    • +
    +
  • +
  • +

    Interacting with stream viewers

    +
      +
    • We got questions and comments on the stream chat.
    • +
    • 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)
    • +
    • Stream viewers seemed pretty happy with what they were getting.
    • +
    +
  • +
  • +

    Risks of streaming

    +
      +
    • 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.
    • +
    • 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.
    • +
    • Risk of learner audio or video being broadcast. Zoom provides +tools ("spotlight video") to prevent this, but it doesn't work +all the time.
    • +
    • Extra effort needed. The marginal cost isn't that great in the +end, once you know how it works.
    • +
    +
  • +
  • +

    Zoom can send a video feed to a streaming service, which +re-broadcasts to the whole world

    +
      +
    • This has to be enabled under your account, then can be +configured for a particular meeting.
    • +
    • "Custom streaming server" seems to be able to broadcast to +anything. In particular, we used Twitch to do our streaming.
    • +
    +
  • +
  • +

    Keeping learner's videos out of the stream

    +
      +
    • Privacy of learners is the first prerequisite to streaming.
    • +
    • 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.
    • +
    • Breakout rooms never recorded or streamed (though some groups +asked if they could be recorded).
    • +
    • Zoom "Spotlight video" means that only that person should go +out into the stream. +
        +
      • The zoom host must not be in the gallery view.
      • +
      • This bugs 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.
      • +
      • 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.
      • +
      • We really need to investigate this more.
      • +
      +
    • +
    +
  • +
  • +

    What to do with the stream while the breakout rooms are going on?

    +
      +
    • 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
    • +
    • 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.
    • +
    +
  • +
+

Recommendations

+
    +
  • 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.
  • +
  • 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.
  • +
+

Recording

+
    +
  • Once you do streaming, it is a smaller step to recording and posting +the videos. +
      +
    • Who is benefited by the recordings? Perhaps not brand new +learners, but the learners who were in the workshop can review +them again later.
    • +
    +
  • +
  • If recordings require post-processing, they will almost never get +done. +
      +
    • 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.
    • +
    +
  • +
  • A surprising number of learners have asked for the videos after the +workshop. +
      +
    • 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.
    • +
    • When we can't provide them quickly, their usefulness is much +reduced.
    • +
    +
  • +
+

Recommendations

+
    +
  • Clearly announce the recording privacy statement when first +registering.
  • +
  • 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.
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/blog/2020/09/29/git-pr/index.html b/branch/rkdarst--open-source-courses/blog/2020/09/29/git-pr/index.html new file mode 100644 index 000000000..e6c53dc28 --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/2020/09/29/git-pr/index.html @@ -0,0 +1,560 @@ + + + + git-pr: painless small pull requests - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - git-pr: painless small pull requests + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

git-pr: painless small pull requests

+ + + + +
+ +

git-pr: painless small pull requests

+

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, https://github.com/NordicHPC/git-pr.

+

Let's talk about how it works.

+

Making a change

+

First, git-pr will help you to make the new feature branch. git pr branch $branch_name willcreate a new feature branch off of the +upstreamdefault branch and check it out for you. You might want to +git fetch first. Make your commits off of this branch.

+

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.

+

Then, to push the pull request, I use git pr open. 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.

+

One thing that git-pr will do is figure out the upstream and your +local copy by yourself. Default upstream goes in priority order +upstreamorigin, Default personal fork goes in the order +localoriginupstream, 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.

+

git pr prune will remove all merged branches both locally and on the +remote (possibly dangerous!).

+

Various git pr fetch* commands will fetch pull requests into a local +pr/NNN branch.

+

There are various other small useful things, with it, but this is the +main part.

+

These are only 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.

+

About git-pr

+

You can find it at https://github.com/NordicHPC/git-pr - it is a +single shell script to copy to your path.

+

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!

+

It supports both Github and Gitlab, though Gitlab support is less well +tested.

+

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.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/blog/2020/11/13/carpentry-community-discussion-nordic/index.html b/branch/rkdarst--open-source-courses/blog/2020/11/13/carpentry-community-discussion-nordic/index.html new file mode 100644 index 000000000..fb7edd9a1 --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/2020/11/13/carpentry-community-discussion-nordic/index.html @@ -0,0 +1,576 @@ + + + + Community discussion in Nordic and Baltic countries - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Community discussion in Nordic and Baltic countries + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Community discussion in Nordic and Baltic countries

+ + + + +
+ +

This blogpost is based on the notes made on Carpentries Community Discussion Etherpad on the 30th Oct. 2020.

+

Summary

+

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?

+

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 below.

+

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.

+

There are ongoing initiatives to develop Nordic community further. Among other things, information about the Nordic Research Software Engineer initiative and its first online get-together event on 30th Nov. - 2nd Dec. was announced.

+

Workshop debriefing

+

Experiences from two recently held online Carpentries workshops were shared and discussed:

+

Sweden, Stockholm -- Mix and Match (SQL, OpenRefine, Python programming and plotting)

+

A self-organized workshop by KTH, Stockholm University, and Karolinska Institute

+
    +
  • (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.
  • +
  • (Radovan) (In his experiences from teaching online workshops in CodeRefinery) 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).
  • +
  • (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.
  • +
+

Norway, Bodø -- DC social science

+

A centrally-organized workshop at Bodø University

+
    +
  • (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.
  • +
  • (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.
  • +
  • (Lina) Depending on the context?
  • +
  • (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.
  • +
  • (Joakim) Important thing is not give pressure on instructors.
  • +
  • (Lina) Letting learners take over instructor's screen would be interesting.
  • +
  • (Lars) Polls for ice-breakers as well. Easy to rush through, but important not to, especially when you cannot see faces as feedback.
  • +
  • (Radovan) Hopefully useful tips for online teaching learned from CodeRefinery workshops: https://coderefinery.github.io/manuals/
  • +
+

Community building, collaboration, and ongoing initiatives in the Nordic and Baltic region

+
    +
  • (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 research bazaar at the University of Oslo earlier this year: +
      +
    • goal: making 3D holiday greeting card using HTML and JavaScript: https://arworkshop.teebusch.repl.co/card1.html
    • +
    • The lesson material is all there: https://repl.it/@Teebusch/arworkshop
    • +
    +
  • +
  • (Joakim) Suggestion of a repository of Carpentries Nordic/Baltic community members with specialities and skills
  • +
  • (Annika) Google Sheets for this?
  • +
  • (Anne) EOSC Nordic claims to be a knowledge-hub
  • +
  • (Radovan) Is also working on mapping.
  • +
+

Announcements

+
    +
  • 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)
  • +
  • Local-nordic Carpentries mailing list: https://carpentries.topicbox.com/groups/local-nordic
  • +
  • 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)
  • +
+

Participant list

+
    +
  1. Annika Rockenberger (host, Norway, Oslo)
  2. +
  3. Naoe Tatara (co-host, Norway, Oslo)
  4. +
  5. Kerstin Lenk (Finland, Tampere)
  6. +
  7. Lars Kjær (Denmark, Copenhagen)
  8. +
  9. Tobias Busch (Norway, Oslo)
  10. +
  11. Lina Andrén (Sweden, Stockholm)
  12. +
  13. Mohamed Abdelhalim (Norway, Oslo)
  14. +
  15. Annajiat Alim Rasel (Bangladesh, Dhaka)
  16. +
  17. Joakim Philipson (Sweden, Stockholm)
  18. +
  19. Thomas Arildsen (Denmark, Aarborg)
  20. +
  21. Radovan Bast(Norway, Tromsø)
  22. +
  23. Samantha Wittke (Finland, Helsinki)
  24. +
  25. Olav Vahtras (Sweden, Stockholm)
  26. +
  27. Anne Fouilloux(Norway, Oslo)
  28. +
  29. Richard Darst (Finland, Helsinki)
  30. +
+

Thank you for all the contributions!

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/blog/2021/09/01/bi-weekly-community-calls/index.html b/branch/rkdarst--open-source-courses/blog/2021/09/01/bi-weekly-community-calls/index.html new file mode 100644 index 000000000..f262b1e5f --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/2021/09/01/bi-weekly-community-calls/index.html @@ -0,0 +1,525 @@ + + + + Bi-weekly Community Calls started - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Bi-weekly Community Calls started + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Bi-weekly Community Calls started

+ + + + +
+ +

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.

+

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!

+

So far, we informed and discussed among others;

+
    +
  • CodeRefinery project: current status and future,
  • +
  • How to improve outreach and publicity,
  • +
  • Importance of possibility to provide ECTS,
  • +
  • How CodeRefinery should give credits to contributions by volunteers,
  • +
  • Mentorship program for exercise leads after the workshop,
  • +
  • How to "order" workshops
  • +
+

For more details of each call, please visit the archive of the minutes

+

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 the Community Call HackMD.

+

We all look forward to seeing you at community calls and Zulip :)

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/blog/2021/11/20/phase-2-lessons-learned/index.html b/branch/rkdarst--open-source-courses/blog/2021/11/20/phase-2-lessons-learned/index.html new file mode 100644 index 000000000..83d1d7d93 --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/2021/11/20/phase-2-lessons-learned/index.html @@ -0,0 +1,861 @@ + + + + Lessons learned from phase 2 of the project - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Lessons learned from phase 2 of the project + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Lessons learned from phase 2 of the project

+ + + + +
+ +

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.

+

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.

+

Workshop/event organization

+

Metrics

+
    +
  • 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 (https://coderefinery.org/about/statistics/) which really simplified +reporting.
  • +
+

Survey

+
    +
  • Survey should be designed considering analysis and presentation of results, +as well as and what to focus on (what we want to show off).
  • +
  • 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.
  • +
  • How to get a better and precise overview of "actual" participants: +
      +
    • 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.)
    • +
    • 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.
    • +
    • Post-workshop survey: +
        +
      • 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.
      • +
      • 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.
      • +
      • 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.
      • +
      +
    • +
    +
  • +
+

Capacity and workshop format

+
    +
  • How to afford as many as possible learners while keeping good learner experiences +or even improving them.
  • +
  • How we carried out online workshops in 2020-2021: +
      +
    • Standard 3-full day CR workshop was transformed into 6-half day format, typically Tuesday-Thursday over 2 consecutive weeks.
    • +
    • Helper/Exercise lead onboarding sessions as well as installation help drop-in sessions were held typically a week before the 1st week.
    • +
    • All the exercises were done in breakout room with a group of regular members.
    • +
    • We recruited exercise leads and accepted 5-6 individual learners per exercise lead plus team registration including their own exercise lead.
    • +
    • We used priority criteria based on countries and/or institution's characteristics.
    • +
    • Problems/challenges we experienced: +
        +
      • Withdrawals on short notices and no-shows
      • +
      • Much hassles by the coordinators
      • +
      • Feedback showing both positive and negative experiences with regular members/exercise leads
      • +
      +
    • +
    +
  • +
  • What is the optimal format of help provision and exercises: +
      +
    • Should the group members be fixed or more ad-hoc or even hop-in-and-out?
    • +
    • 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.
    • +
    • "Webinar (stream)-by default" with an option for joining in zoom-meeting room for extra help may work better (ref. Python for SciComp 2021)?
    • +
    • Post-workshop Q&A session time/day would be useful?
    • +
    • 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.
    • +
    +
  • +
+

Communication with participants

+
    +
  • Indico's email function worked well to send information about the workshop to participants/signers.
  • +
  • We experienced few cases of typo in email address, thus we could not reach registrants.
  • +
  • Online collaborative notebook (HackMD and similar) worked well for Q&A during the lectures.
  • +
+

Certificates

+ +

Planning

+
    +
  • 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.
  • +
  • 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.
  • +
+

Lesson development

+
    +
  • Only happened before workshops. This was very efficient but introduced stress.
  • +
  • It probably requires a calendar event to dedicate time for this.
  • +
  • "software installation and setup" +
      +
    • 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).
    • +
    • The procedures need validations given diverse scenarios.
    • +
    • 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).
    • +
    +
  • +
  • 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.
  • +
  • It is important to make the contribution criteria clear for making lesson citable: +
      +
    • “creator”(author): significant contributions
    • +
    • “contributor”/Editor: reviewing/approving contributions
    • +
    • “contributor”/Other: smaller contributions
    • +
    +
  • +
  • Ref: https://hackmd.io/@coderefinery/citable-lessons
  • +
  • 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: +
      +
    • Institution/Organization etc.
    • +
    • Type of event and link to the event page: +
        +
      • Workshop
      • +
      • Credited course
      • +
      • Non-credited course
      • +
      • Other type (specify)
      • +
      +
    • +
    • Which lessons were used +
        +
      • Only CR lessons (which ones)
      • +
      • CR lessons (which ones) as well as other lesson materials (what materials?)
      • +
      • part of CR lessons (where of it)
      • +
      +
    • +
    +
  • +
+

The Carpentries

+

Membership and use of its benefits

+
    +
  • Membership tier: Platinum, 3 years (2018 Nov. 1 - 2021 Nov. 1)
  • +
  • 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.
  • +
  • Use of instructor seats and Centrally-Organized Workshops (COW):
  • +
+ + + + +
yearused seatsbadged instructorsCOW
2018-2019138-
2019-20201283
2020-2021*1061
+
    +
  • For each membership year, NeIC had 15 priority seats for the instructor training and 6 COWs without fee.
  • +
  • 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.
  • +
  • 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.
  • +
+

Relationship with the Carpentries and recognition of CR in the Carpentries community

+ +

Regional Coordinator (RC)

+
    +
  • 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 35 workshops. 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.
  • +
  • RC initiated the following: + +
  • +
  • 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.
  • +
  • Upon the expiration of the NeIC's membership, RC in Nordic region is also discontinued.
  • +
+

Dissemination of opportunities to use the NeIC's membership benefit

+
    +
  • Dissemination of opportunities were done via CR and NeIC website, CR Zulip chat, CR newsletter, at relevant workshops, CR twitter, etc.
  • +
  • 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.
  • +
+

Uptake of the membership benefits

+
    +
  • 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.
  • +
  • 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).
  • +
  • Provision of teaching/learning opportunities in Carpentries SOWs/COWs initiated by CR might have been helping; +
      +
    • to disseminate the usefulness of the Carpentries workshops, as well as
    • +
    • to provide a "safe" place for newly-badged instructors to try teaching.
    • +
    • 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.
    • +
    +
  • +
  • The Carpentries is also changing along time: +
      +
    • Membership price model and the price itself had been stable for a couple of years, but will be changed within 2021.
    • +
    • RC role is to be changed in the process of re-designing community development program. 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 (Community Initiatives). The discount offer of having an RC is to be discontinued.
    • +
    • The Carpentries will have online workshops as their standard option to offer in near future; it is so far only as pilot.
    • +
    +
  • +
+

Meeting minutes and decision tracking

+
    +
  • 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.
  • +
+

Time reporting and vacation planning

+
    +
  • 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).
  • +
  • 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.
  • +
  • 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).
  • +
  • In hindsight, it would have been better to offer more 1-1 discussions between +project manager and staff.
  • +
  • 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.
  • +
  • It reduces confusion to share a vacation plan: not only for the project +manager but for the entire staff.
  • +
+

Issue/task tracking

+
    +
  • 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.
  • +
  • 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.
  • +
  • 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.
  • +
+

Support line/ request tracker

+
    +
  • We got roughly 200-300 tickets/year.
  • +
  • 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.
  • +
  • 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.
  • +
  • Most tickets arrive around workshops.
  • +
  • Most non-workshop tickets were to unblock GitLab accounts.
  • +
+

Communication within the community and the project

+
    +
  • We have started within NeIC Slack.
  • +
  • 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.
  • +
  • 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.
  • +
  • We are unsure however, whether the problem with outreach is lack of tools or lack of processes.
  • +
  • One way out is to move communication to the public space which we have +done when moving from Slack to Zulip.
  • +
  • Internally Zulip chat has been good for the project.
  • +
  • In addition, we have managed to engage many helpers and volunteers for each workshop.
  • +
  • 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.
  • +
  • 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.
  • +
+

Data management

+
    +
  • Google Drive has served us well in the first years.
  • +
  • However, this storage was connected to a personal account.
  • +
  • Over time we used GitHub more and more.
  • +
  • HackMD was used a lot in the last 2 years of the project, both for workshops and notes and meetings.
  • +
  • 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.
  • +
  • We should have created a data management plan.
  • +
  • Relevant to some points written in Legal questions.
  • +
+

Community engagement

+
    +
  • There was a constant stream of people interested in becoming more involved.
  • +
  • We have activated some, but as 'communication' says above, some potential was left unrealized.
  • +
  • Growing a community requires also promoting newcomers and mentoring.
  • +
  • Mentoring also requires volunteer mentors.
  • +
  • With more mentoring and more follow-up we could have had engaged more people and more organizations.
  • +
  • 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. Supporting community champions and running champions programs
  • +
  • How to keep the community engagement up and running without "burn-out" is a constant challenge.
  • +
+

Stakeholder engagement

+
    +
  • Steering group seems to have become less engaged over time.
  • +
  • At the beginning of the project the SG actively influenced and gave ideas and input and suggestions.
  • +
  • Over time the steering group meetings and communication grew more and more +passive and turned into a reporting channel.
  • +
  • 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.
  • +
+

Infrastructure hosting (GitLab service)

+
    +
  • Both the steering group and also the project staff became less interested in this over time.
  • +
  • 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).
  • +
+ +
    +
  • The project was lacking support in GDPR-related questions +
      +
    • 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?
    • +
    • 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 GDPR is not followed due to its server existence outside of the EU +(especially in +US) +(Ref. Recommendations by European Data Protection +Board)
    • +
    • 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").
    • +
    • 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.
    • +
    +
  • +
  • "Rights to work results" vs. Open Science +
      +
    • Ref: a page about "Rights to work results" at University of Oslo
    • +
    • General clarification is needed here so that everyone won't be in trouble later.
    • +
    • 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.
    • +
    +
  • +
  • We also lacked support in questions about how to start an own organization/ spin-off.
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/blog/2021/11/21/towards-citable-lessons/index.html b/branch/rkdarst--open-source-courses/blog/2021/11/21/towards-citable-lessons/index.html new file mode 100644 index 000000000..e487192de --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/2021/11/21/towards-citable-lessons/index.html @@ -0,0 +1,647 @@ + + + + Towards citable lessons - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Towards citable lessons + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Towards citable lessons

+ + + + +
+ +

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.

+

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.

+

Technical choices

+
    +
  • 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.
  • +
  • We will convert the 3 remaining Jekyll lessons to Sphinx to simplify pdf export.
  • +
  • We will not start with https://allcontributors.org/ because it requires each contributor +to have a GitHub account which we have found a too strict limitation.
  • +
  • We start with tracking authorship in CITATION.cff since GitHub presents a +"cite as" button when this file is present.
  • +
  • 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.
  • +
+

Distinguishing authors and contributors

+
    +
  • Removed "code" (lesson material) does not mean removing authorship unless the author prefers to be removed.
  • +
  • Example for how Carpentries do it (unix shell lesson): + +
  • +
  • Definitions of the roles: +
      +
    • "creator": significant contributions
    • +
    • "contributor"/Editor: reviewing/approving contributions
    • +
    • "contributor"/Other: smaller contributions
    • +
    +
  • +
  • On Zenodo we start with "creator" (author) and "contributor" (other). +
      +
    • See also categories that Zenodo understands: https://developers.zenodo.org/#representation (search for "creators" and "contributors")
    • +
    • 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.
    • +
    +
  • +
  • We still need to verify whether CITATION.cff and/or .zenodo.json can map to +the definitions of roles (above).
  • +
+

How we will reach out to creators and contributors

+
    +
  • We will do this on a per-lesson basis and we will start with the lessons +which we teach the most often.
  • +
  • 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.
  • +
  • We reach out to everybody and ask whether they want to be contributor or author.
  • +
  • If a person cannot be reached, we do not add the person without consent and +rather add the person later once we reach them.
  • +
  • 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.
  • +
  • On the GitHub issue we will ask authors for their ORCID.
  • +
+

Archiving lessons as pdf

+
    +
  • 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.
  • +
  • We have concluded that we wish to attempt depositing pdf versions unless this +turns out too difficult.
  • +
  • The pdf versions will be generated automatically as part of a "release" workflow.
  • +
  • The automatic pdf generation is relatively straightforward with Sphinx +lessons but less trivial with Jekyll-based lessons.
  • +
  • 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.
  • +
  • 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.
  • +
+

ORCID vs. Zenodo community

+
    +
  • We have decided against introducing a project ORCID for CodeRefinery and +rather collect related records in a CodeRefinery Zenodo community.
  • +
+

How we wish to test the workflow

+
    +
  • For one or two example lessons we will create a fork and test the release +deployment and DOI generation on Zenodo sandbox.
  • +
+

Suggested workflow to make lessons citable via Zenodo

+
    +
  • Add a .zenodo.json to the lesson repo, for example:
  • +
+
    "creators": [
+        {   
+            "orcid": "0000-0002-1825-0097",
+            "affiliation": "Feline research institute",
+            "name": "Field, Gar"
+        },
+        {   
+            "orcid": "0000-0002-1825-0097",
+            "affiliation": "Feline research institute",
+            "name": "Cat, Felix"
+        }
+    ],
+
+
    +
  • Generate pdfs from Sphinx sources via LaTeX: +
      +
    • In conf.py, set latex_engine = 'xelatex' (makes emojis work), then make clean ; make latexpdf.
    • +
    • This will become part of GitHub Actions, it will not be a manual step.
    • +
    +
  • +
  • Create a release of the lesson on GitHub.
  • +
  • On Zenodo, check syncing with GitHub.
  • +
+

Resources

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/blog/2021/11/25/lessons-learned-may-2021/index.html b/branch/rkdarst--open-source-courses/blog/2021/11/25/lessons-learned-may-2021/index.html new file mode 100644 index 000000000..64572b3fc --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/2021/11/25/lessons-learned-may-2021/index.html @@ -0,0 +1,617 @@ + + + + Lessons learned from the May 2021 online workshop - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Lessons learned from the May 2021 online workshop + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Lessons learned from the May 2021 online workshop

+ + + + +
+ +

May 10-12 and 18-20, 2021, we gave our at that time largest CodeRefinery +online workshop (6 x 3.5 hours) with 128 participants. +We plan to deliver many more such workshops based on our lessons.

+

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.

+

This complements our lessons learned from our first online workshop.

+

Lesson coordination

+
    +
  • 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.
  • +
  • The teaching coordinator should check in for basic practicalities with each instructor: +
      +
    • team-teaching if desired
    • +
    • material to cover
    • +
    • schedule breaks
    • +
    • test screenshare prior to the lesson
    • +
    • how to control breakouts yourself
    • +
    +
  • +
  • Be clear about video on or off for instructors. If multiple people on then gallery OBS capture doesn't work.
  • +
  • Include role mentoring as part of the coordination initial meeting.
  • +
  • More talk about "voice of audience".
  • +
  • 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.
  • +
  • Inform individual exercise leads about how the set group of individual learners is like (e.g. expecting how many in the room, OS, background).
  • +
  • Inform exercise leads and all the team members who are replacing when a regular exercise leader is absent.
  • +
  • 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.
  • +
+

Zoom and OBS

+
    +
  • Ask participants to join with video OFF when they join after the workshop started (otherwise they may appear in the stream).
  • +
  • Huge amount of work that many people did making the instructions, and testing them on all the different OSs, surely helped.
  • +
  • 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.
  • +
  • Gallery insert view is risky.
  • +
  • You can't spotlight someone when only two peoples' videos are on.
  • +
  • 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.
  • +
  • It takes manual work to switch from one to two people (changing cropping), and also two to three (alignment).
  • +
  • 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.
  • +
  • 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.
  • +
  • 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.
  • +
  • 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.
  • +
  • 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.
  • +
  • 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).
  • +
  • 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.
  • +
  • OBS helper: would be nice to have a way to unmute both of us.
  • +
+

Collaborative notes

+
    +
  • Don't try to insert html into HackMD :sweat_smile:
  • +
  • HackMD at this size seems to have worked, not all the time for everybody, but sufficiently.
  • +
  • Using one HackMD for twitch and zoom was a good idea.
  • +
  • Provide plan for the day (including breaks and exercise plan) on top of HackMD and mention it at the beginning of the day.
  • +
  • When talking about HackMD, please share it, it gives people something to +look at.
  • +
  • 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.
  • +
+

Installation and tools

+
    +
  • +

    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.

    +
  • +
  • +

    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)

    +
    +

    [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?

    +
    +
  • +
+

Presenting and coordinating

+
    +
  • Coordination plan should be continuously reviewed.
  • +
  • Strong director role is needed.
  • +
  • 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.
  • +
  • Make it clear what someone needs to have open: Screenshare, HackMD, your terminal. You get links to the episodes from HackMD.
  • +
  • Avoid breaks between exercise explanation and doing exercise.
  • +
  • Clearly mark interruptions/speaking up during presentations as interruption (as in: not part of the presentation).
  • +
  • Spotlight video changes every time screenshare changes: It is defininitely still important to warn before stopping screen sharing (more than before)
  • +
  • Announcing "I'm about to take the screenshare" and waiting two seconds works +well.
  • +
  • Share screen for what you are talking about. Makes editing a bit easier.
  • +
  • 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.
  • +
+

Lesson content

+
    +
  • Staging area: as usual, a difficult episode +
      +
    • What parts of the episode is a dependency for other parts of CodeRefinery?
    • +
    • Remove it?
    • +
    • Make it clear it is advanced/optional/you won't get it yet, when it is taught?
    • +
    • Move it to the end?
    • +
    +
  • +
+

Communication with participants

+
    +
  • Indico: select "none" after selecting some registrants to for example sending emails (otherwise selection remain).
  • +
  • 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.
  • +
  • As for the "team registrations", as long they include an EL, we should send an acceptance ASAP.
  • +
  • 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.
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/blog/2022/05/04/improving-workshop-registration/index.html b/branch/rkdarst--open-source-courses/blog/2022/05/04/improving-workshop-registration/index.html new file mode 100644 index 000000000..d91feaf2d --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/2022/05/04/improving-workshop-registration/index.html @@ -0,0 +1,784 @@ + + + + Our plans to improve our workshop registration process - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Our plans to improve our workshop registration process + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Our plans to improve our workshop registration process

+ + + + +
+ +

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 297 registrants which is a +record for us.

+

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.

+

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.

+

Below we summarize our observations and strategies for the upcoming events.

+

Goals of a good registration

+
    +
  • +

    Avoid chaos during the workshop

    +
      +
    • Avoid misunderstandings about registration types
    • +
    • Teams are clear and require minimum effort from organizers
    • +
    +
  • +
  • +

    Be able to predict attendance, avoid major disappointments

    +
  • +
  • +

    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)

    +
      +
    • E.g. not being bound only to Indico or something else that needs to be installed
    • +
    +
  • +
  • +

    Collect good information on participants for reporting later

    +
  • +
  • +

    Registration does not have to ever close

    +
      +
    • Continued registrations allow people to join halfway through
    • +
    • What needs does this have?
    • +
    +
  • +
  • +

    Editable by organizers (without making a copy by exporting)

    +
      +
    • e.g. exporting Indico to spreadsheet makes a copy, if people modify their registration our copy is invalid
    • +
    • Google Docs allows a form to be directly connected to a spreadsheet, we can modify old registrations while new ones come in
    • +
    +
  • +
+

Lessons learned from a recent event

+
    +
  • Unclear what registration options mean, people sign up for Zoom and don't show up
  • +
  • We have to manage teams ourselves, which requires too much communication and +manual work. Teams should be able to do this themselves.
  • +
  • Scheduling teams is hard, must optimize for this and avoid all ambiguity
  • +
  • Registration coordinator shouldn't teach (much, certainly not early on)
  • +
  • Communication and registration is the same person or same two persons
  • +
  • Communication/registration and teaching coordination should not be the same person
  • +
  • Indico is a good tool but we need to remove old copy-pasted questions/options and streamline
  • +
  • Allow teams to register with one contact point only
  • +
  • Merging teams is hard in indico
  • +
  • Adjusting teams is hard in indico
  • +
  • Communication/registration/coordination is a full time job for two weeks prior to the workshop
  • +
  • Question about availability is too often misunderstood: ask differently
  • +
  • Optimize for fewer emails since these are difficult to delegate
  • +
  • For exercise leads it is confusing whether to choose staff registration or regular registration
  • +
  • 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"
  • +
  • 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
  • +
  • Team registrations seem to have worked though and they seem to have the only +groups that "survived" to the end.
  • +
  • Local organizers could choose to use a centrally organized zoom if they +wanted - as long as they managed the teams themselves
  • +
+

Suggestions for improving our previous registration form

+
    +
  • "affiliation or university": have a list of institutions + "other" * free +text for other institutions or companies not listed
  • +
  • can we decentralize registration to groups and partners? +
      +
    • groups/partners scale as far as they like to as many helpers as they have
    • +
    +
  • +
  • questions on form +
      +
    • "do you want to participate in Stockholm? click here" -> another form
    • +
    • "in Aalto" -> another form
    • +
    • none of the above -> central form +
        +
      • group registration (exercise lead? or anybody as proxy?)
      • +
      • register as exercise lead and want to help out a "random" group
      • +
      • want to be part of a group -> click here but we can't guarantee a helper, especially if you register late
      • +
      • want to only watch alone
      • +
      +
    • +
    • also offer options to get informed for those unsure/undecided +
        +
      • yes
      • +
      • "interested"
      • +
      +
    • +
    +
  • +
  • standardized reporting form for partners
  • +
+

How to manage teams?

+
    +
  • Teams could handle some issues/setup themselves
  • +
  • They need some templates to send information
  • +
  • Which information should be sent by CR and which by the local organizers?
  • +
  • Need to get statistics and feedback from the local groups
  • +
  • Need to clarify if there will be "general" helpers in addition to team helpers
  • +
  • Larger project partners will probably prefer offering in-person exercise groups
  • +
  • How to deal with registration in the wrong form if we have several forms?
  • +
  • Each partner needs to clearly commit to a certain level of support and size
  • +
  • How to self-organize teams: +
      +
    • "helpers, rename yourself and join a room that does not have helpers yet"
    • +
    • "learners, if you are in a room that is too empty or too full, join another one"
    • +
    • this is to avoid rooms that are too full or too empty, or without helpers, or avoiding communicating which days an EL is unavailable
    • +
    • what if one exercise lead or room is more popular than another room?
    • +
    • how about continuity between days?
    • +
    +
  • +
  • What to do with solo registrations who are not part of a group and want to be +in an exercise group? +
      +
    • Is pairing up happening locally or centrally?
    • +
    +
  • +
+

Comments on a mock-up registration form

+

We have together reviewed an example +form and collected comments:

+
    +
  • Problems: "team organized by us" is not separated from "self-organized team"
  • +
  • The "probably not but send info" does not need to be asked for each day separately
  • +
  • But it's nice to offer the possibility to stay informed and decide later
  • +
  • Nice to have one form both for staff and everyone else to avoid the confusion that we saw at the previous event
  • +
  • "observer": let them decide whether they want emails or not
  • +
  • "how do you plan on attending" +
      +
    • Option 1: +
        +
      • Maybe confusing if somebody selects both zoom and in person
      • +
      • In-person breakout delegated to the local organization
      • +
      +
    • +
    • Option 2:
    • +
    +
  • +
  • Local rooms +
      +
    • Ask this earlier
    • +
    +
  • +
  • Teams +
      +
    • Ask this question earlier
    • +
    +
  • +
  • It is important that registrants can change their choices
  • +
  • In general, Radio buttons are nicer than dropdowns because you get to see the answers right away +
      +
    • But dropdown takes less screen space
    • +
    +
  • +
+

What if we get asked for help with creating a registration page for a local partner?

+
    +
  • We need to communicate who we share data with and ask for consent
  • +
  • We document what we ask and what we recommend partners to ask
  • +
  • We document which privacy policy we follow and which privacy standards +we require
  • +
  • We could offer a form/event if some local organizers need a separate +form but do not want to set it up themselves
  • +
+

Starting point for the new registration form

+
    +
  • OS +
      +
    • Dropdown
    • +
    +
  • +
  • Discipline +
      +
    • Dropdown
    • +
    +
  • +
  • Name +
      +
    • Open
    • +
    +
  • +
  • Email +
      +
    • Open
    • +
    +
  • +
  • Affiliation +
      +
    • Open
    • +
    • Has not been used for reporting yet but the information is good to +have
    • +
    +
  • +
  • Country +
      +
    • Dropdown
    • +
    +
  • +
  • Team name +
      +
    • Open
    • +
    +
  • +
  • Permission to give contact details to breakout room organizer +
      +
    • Yes/no dropdown
    • +
    +
  • +
  • Other notes to organizers +
      +
    • Open
    • +
    +
  • +
  • Room +
      +
    • Open
    • +
    +
  • +
  • Which days attending +
      +
    • Radio buttons
    • +
    +
  • +
  • Type of attendee +
      +
    • Radio buttons
    • +
    +
  • +
  • Do you want to attend in Zoom or follow live-stream only? +
      +
    • Dropdown/Radio buttons
    • +
    +
  • +
+

Conclusions

+
    +
  • Central registration is in Indico
  • +
  • We can offer a copy of our Indico template for a separate event for local partners who cannot use a local +registration system
  • +
  • Local partners are welcome to use their own registration systems
  • +
  • Teams can register as a team with a single contact point and the contact point does not have to be an exercise lead
  • +
  • We offer the possibility for individual learners and individual exercise leads to self-join exercise rooms
  • +
  • Workshop limits: +
      +
    • in terms of Twitch: it seems one bottleneck could be the collaborative HackMD document
    • +
    • in terms of exercise groups: the number of volunteers but also groups without exercise leads can be useful
    • +
    +
  • +
+

Follow-up steps

+
    +
  • Share a mock-up form soon with stakeholders for feedback via email and during a team meeting
  • +
  • Explain the setup clearly and concisely, directly in the workshop template
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/blog/2022/05/18/measuring-impact/index.html b/branch/rkdarst--open-source-courses/blog/2022/05/18/measuring-impact/index.html new file mode 100644 index 000000000..cd3910efe --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/2022/05/18/measuring-impact/index.html @@ -0,0 +1,731 @@ + + + + Outcomes from online hackathon about measuring the impact of CodeRefinery workshops - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Outcomes from online hackathon about measuring the impact of CodeRefinery workshops + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Outcomes from online hackathon about measuring the impact of CodeRefinery workshops

+ + + + +
+ +

Introduction

+

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.

+

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:

+
    +
  • When we operate online and hybrid, we are accessible to many more styles of +attendance (and different measurements, such as live-stream viewers).
  • +
  • We have an excellent report as part of +coderefinery.org, this will be +split to a separate repository that is usable separately.
  • +
  • Tune our daily feedback questions and provide more time and motivation for +this (see below).
  • +
  • Our quantitative measures include number of registrations, number of known +attendees (in person/online), and number of unknown attendees (live-stream +viewers).
  • +
  • Our qualitative measures include text-based feedback per day and also a +post-workshop survey.
  • +
+

How did we measure attendance and impact up to now?

+

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 here today +represent the number of registrants and the real number of participants is +probably lower.

+

In addition, we have collected pre-workshop +survey data which was +part of the registration process and post-workshop +survey data which we +collect 3-6 months after a workshop (we have not been very consistent with the +exact intervals).

+

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 interesting +data but it wasn't +really driving lesson changes.

+

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.

+

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.

+

Discussion

+

The main points of our discussion were:

+
    +
  • The number of participants per country is still an important thing to +measure, even if it may not be 100% accurate. +
      +
    • We can get that from registrations and Twitch data.
    • +
    • 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.
    • +
    +
  • +
  • How can we measure less but have more meaningful results while not adding too much +work? +
      +
    • We should not try to achieve perfection. Some data / details cannot be +collected.
    • +
    • We get some feedback via email also.
    • +
    • We could interview individual participants or groups for feedback / +impressions on the workshop +
        +
      • That would give more profound insights on how did the students feel.
      • +
      • We could ask for volunteers at the beginning of the workshop.
      • +
      • Conduct the interview at the end, and turn it into a blog.
      • +
      +
    • +
    +
  • +
  • We should not forget people take workshops for different reasons +
      +
    • Do some participants re-take a workshop for more in-depth knowledge? If so, are they attending partially?
    • +
    • 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.
    • +
    +
  • +
  • Do we track how did people learn about the workshop? +
      +
    • Currently in the pre-workshop survey, but we should do it in the +registration.
    • +
    +
  • +
  • How to get feedback that helps us improve? +
      +
    • We could ask: why did you decide to stop following the stream?
    • +
    • We do ask: what did you find useful or not so useful?
    • +
    +
  • +
  • The HackMD feedback is one of the most important ways for us to improve the +lessons, as opposed to the pre-workshop survey. +
      +
    • The results need to be interpreted and compiled manually.
    • +
    +
  • +
  • Yet, we ask for the HackMD feedback in the last 5 min of the days, right as +people are leaving. +
      +
    • Consider improvements, such as asking before, or during, the last lesson.
    • +
    • Provide sufficient time for this, discuss the feedback as it comes in to +motivate it.
    • +
    +
  • +
  • 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".
  • +
  • Our current (early 2022 and earlier) post-workshop survey questions are +found at: +https://github.com/coderefinery/post-workshop-survey#survey-questions
  • +
  • NeIC perspective: +
      +
    • Ask project partners / stakeholders how do they benefit from CodeRefinery +training and how we can improve this
    • +
    +
  • +
  • How can we improve response rate? +
      +
    • Even shorter and clearer questionnaire
    • +
    • Good timing for when the survey is sent to participants, it seems that +Monday is the best day to send them out
    • +
    +
  • +
  • How can we learn why somebody stopped? +
      +
    • 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
    • +
    • 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)
    • +
    • 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)
    • +
    • 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
    • +
    • 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
    • +
    +
  • +
+

What will we change?

+

Registration (in addition to a previous discussion)

+
    +
  • We do ask: country and academic discipline +
      +
    • Also should allow multiple selections to mark interdisciplinary work
    • +
    +
  • +
  • Here we could also ask: career stage and how did you you learn about +workshop?
  • +
  • For group registrations it might get a bit tricky: +
      +
    • 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)
    • +
    • Make it possible and encourage the contact person to update the +registration form, e.g. at the end of the workshop
    • +
    +
  • +
+

Pre-workshop survey

+
    +
  • Integrate selected questions from the pre-workshop survey into the registration
  • +
  • In hindsight the pre-workshop data has not been used to change workshop lessons +
      +
    • Live-feedback (turned into issues turned into lesson/program changes) has +been the main feedback loop
    • +
    • Some of the questions can be turned into icebreaker question
    • +
    +
  • +
+

Statistics page

+
    +
  • Registration numbers +
      +
    • Convert from JSON to YAML (less error prone)
    • +
    • Make a separate repository
    • +
    +
  • +
  • Number of stream viewers +
      +
    • Combine registration numbers with streaming numbers on https://coderefinery.org/about/statistics/
    • +
    • Present views per country (it seems this is non-downloadable)
    • +
    • Present views over time (Twitch provides this data per 10-minute interval)
    • +
    +
  • +
+

Live-feedback (HackMD)

+
    +
  • Integrate feedback into the lesson itself, e.g. the last 10 min of the +workshop are dedicate to filling it in
  • +
+

Post-workshop survey

+
    +
  • What to ask straight after the workshop and what to ask later? Separate +survey?
  • +
  • Could be integrated to the pre-workshop survey because it can be updated
  • +
  • Update questions: +
      +
    • we could add the question: what would you like to learn more?
    • +
    • Maybe condense a bit (less text and repetition)
    • +
    • Remove suggestive questions if any
    • +
    • add academic field
    • +
    +
  • +
  • What data to request from groups / partners? +
      +
    • Number of participants
    • +
    • How did they like the event
    • +
    +
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/blog/2022/10/17/future-of-teaching/index.html b/branch/rkdarst--open-source-courses/blog/2022/10/17/future-of-teaching/index.html new file mode 100644 index 000000000..e6c3e8204 --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/2022/10/17/future-of-teaching/index.html @@ -0,0 +1,586 @@ + + + + CodeRefinery teaching strategies and the future of teaching - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery teaching strategies and the future of teaching + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

CodeRefinery teaching strategies and the future of teaching

+ + + + +
+ +

This is the index page of the Future of +Teaching series.

+

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. This series of blog posts will +discuss what we did and how you can learn from it.

+

So, what is the future of teaching? For type of practical, hands-on +learning, we could try to classify learning situations into three +types:

+
    +
  • Very large courses and massive open online courses (MOOC),where +individual interaction isn't possible.
  • +
  • Small-medium courses, 10-30 people, with traditional classroom-type +interactions.
  • +
  • One-on-one or small-group mentoring.
  • +
+

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: The middle layer +got squeezed out: 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.

+

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 our +manuals.

+

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.

+

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.

+

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):

+ +

See also

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/blog/2022/10/21/python-for-scicomp/index.html b/branch/rkdarst--open-source-courses/blog/2022/10/21/python-for-scicomp/index.html new file mode 100644 index 000000000..fd2bb2a06 --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/2022/10/21/python-for-scicomp/index.html @@ -0,0 +1,544 @@ + + + + Python for Scientific Computing open for registration and collaborators - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Python for Scientific Computing open for registration and collaborators + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Python for Scientific Computing open for registration and collaborators

+ + + + +
+ +

Our next workshop, Python for Scientific +computing, +is ready for you! Take part in different ways:

+
    +
  • +

    If you want to learn, you can register. Like all of our livestream +courses, +there are diverse ways to attend based on your needs.

    +
  • +
  • +

    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.

    +
  • +
  • +

    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.

    +
  • +
+

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 +material and +teaching is open-source before, during, and after the course.

+

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.

+

If you want to contribute more (or see how we do it), join the +CodeRefinery chat and +introduce yourself.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/blog/2022/10/24/parallel-chat/index.html b/branch/rkdarst--open-source-courses/blog/2022/10/24/parallel-chat/index.html new file mode 100644 index 000000000..7102b2e59 --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/2022/10/24/parallel-chat/index.html @@ -0,0 +1,630 @@ + + + + Parallel chat ("HackMD") and scaling teaching - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Parallel chat ("HackMD") and scaling teaching + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Parallel chat ("HackMD") and scaling teaching

+ + + + + + +
+ +

Part of a series on the Future of +Teaching

+

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.

+

Our solution is "parallel chat", or as we typically call it "HackMD" +after the service we started using, hackmd.io - 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.

+

Demonstration of HackMD

+

There are a variety of reasons this is so good:

+
    +
  • You can have multiple people asking and answering at the same time +(not possible with voice, and linear chat gets confusing with)
  • +
  • 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.
  • +
  • People can ask anonymously - which encourages questions from those +who would usually be silent in courses.
  • +
  • Equally, questions don't distract everyone, so there is no pressure +to be quiet to let the course go on.
  • +
  • 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.
  • +
  • By having more questions asked, you can get much more feedback while +teaching - so much you have to be careful to not be overloaded!
  • +
  • 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.
  • +
+

Just look at the number of questions in our old courses, one 3.5-hour +day of our May 2022 +workshop - +and this is day 1, when people didn't yet know how it worked.

+

But there are some disadvantages:

+
    +
  • An absolute flood of information, which will 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.
  • +
  • Another window for people follow. Like above, we warn people to +focus on the learning and parallel chat only when there is time.
  • +
  • It's different, so needs some explanation (but we've seen people +catch on very quickly once they see it).
  • +
+

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 - always 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:

+
    +
  • 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.
  • +
  • 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.
  • +
  • We often use it as an icebreaker as a demo. Maybe not everyone +understands it.
  • +
  • It can also be used for lightweight polls: learners can +1 or add +a character to a line to make simple bar graphs.
  • +
  • Like we said above, it's not a perfect tool, but easy to use and fun.
  • +
  • A "HackMD manager" watches it and tries to keep things organized, +adds section headings, and so on. This makes it easy.
  • +
  • Remember, new content only to the bottom! People can't go following +multiple sections.
  • +
+

We don't have unlimited scaling and there are some other problems, +though. Some possible issues that may come up:

+
    +
  • To make this really good, you need at least one person focusing on +the parallel chat - or at least two co-instructors. In workshops of +our size, this hasn't been a big issue, though - it provides a good +task for helpers.
  • +
  • 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.
  • +
  • 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.
  • +
+

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...

+
    +
  • Lack of helpers to answer in parallel - fewer answers ⇒ fewer +questions. Fewer questions ⇒ less time looking at it ⇒ less +motivation to ask questions.
  • +
  • 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.
  • +
+

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.

+

See also:

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/blog/2022/10/31/co-teaching/index.html b/branch/rkdarst--open-source-courses/blog/2022/10/31/co-teaching/index.html new file mode 100644 index 000000000..153e24437 --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/2022/10/31/co-teaching/index.html @@ -0,0 +1,575 @@ + + + + Co-teaching and scaling up - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Co-teaching and scaling up + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Co-teaching and scaling up

+ + + + + + +
+ +

Co-teaching

+

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 +parallel chat, +but a significant part also comes from co-teaching, the topic +of this article.

+

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.

+

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 parallel chat 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.

+

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.

+

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.

+

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.

+

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.

+

See also:

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/blog/2022/11/07/reverse-hybrid/index.html b/branch/rkdarst--open-source-courses/blog/2022/11/07/reverse-hybrid/index.html new file mode 100644 index 000000000..bced3570f --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/2022/11/07/reverse-hybrid/index.html @@ -0,0 +1,577 @@ + + + + Reverse hybrid teaching - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Reverse hybrid teaching + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Reverse hybrid teaching

+ + + + + + +
+ +

Part of a series on the Future of +Teaching

+

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?

+

We've found a surprising solution which we call reverse hybrid. +Surely others have thought of this, and maybe there is even a proper +name.

+

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.

+

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.

+

But what do we lose? Do we lose interaction with instructors? As +our posts on co-teaching and parallel chat 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.

+

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 parallel chat 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.

+

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 no longer have to teach +alone, which is a mindset change more than anything.

+

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?

+

See also

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/blog/2022/11/08/lessons-learned-Sep-2022/index.html b/branch/rkdarst--open-source-courses/blog/2022/11/08/lessons-learned-Sep-2022/index.html new file mode 100644 index 000000000..3bbf5ea67 --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/2022/11/08/lessons-learned-Sep-2022/index.html @@ -0,0 +1,669 @@ + + + + Lessons learned from the Sep 2022 online workshop - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Lessons learned from the Sep 2022 online workshop + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Lessons learned from the Sep 2022 online workshop

+ + + + +
+ +

September 20-22 and 27-29, 2022, we held again our CodeRefinery online +workshop (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 our first online workshop +2020 and the +May 2021 +workshop.

+

We have identified the following main issues that we want to address for future events:

+
    +
  • Registration process is still too complicated.
  • +
  • We are asking ourselves how to further scale without being completely overwhelmed by coordination/communication/synchronization.
  • +
  • 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.
  • +
  • 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.
  • +
+

Registration

+
    +
  • We still need a more lightweight system registration. +
      +
    • This is a balancing act between guiding people and trusting them to self-organise.
    • +
    +
  • +
  • Could we actually get away with no registration at all? How to get stats then? +
      +
    • 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. +
        +
      • Part of it can be via the icebreaker questions.
      • +
      +
    • +
    +
  • +
  • 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.
  • +
  • We could have registration but let people self-organise more: +
      +
    • Offer HackMD, exercise lead zoom, exercise Zoom, stream and inform people about those resources.
    • +
    • Give hints about different ways to participate but no rigid instructions.
    • +
    +
  • +
  • We could leave team registration completely to the partners or participants to handle: +
      +
    • Tell that they could summon teams in their organisation communication channels.
    • +
    • They could indicate somewhere that they are open for managing additional teams.
    • +
    • Tell organisations that they can organise their own registration.
    • +
    +
  • +
  • Exercise leader registration was confusing (too many forms to fill out).
  • +
  • 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.
  • +
  • How to deal with late registrants? +
      +
    • Should they get the Zoom link or only HackMD? +
        +
      • If not we should take those options away from the registration form. Maybe have a last minute registration form as a separate one.
      • +
      +
    • +
    +
  • +
  • Consider adding others who are helping to Indico (our registration system) as managers :grin:.
  • +
  • We could communicate clearer that also participating part of the workshop is possible and encouraged.
  • +
+

Workshop format

+
    +
  • 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.
  • +
  • Communicate better that even if the Git part gets too difficult, the second week may still be worth watching and again easier to comprehend.
  • +
  • Generally we observed a significant no-show rate (over 50%).
  • +
  • Maybe this format is too big for the resources/time that we have as organisers. +
      +
    • Maybe the task distribution was not clear/visible.
    • +
    • It at least difficult to get enough instructors to commit
    • +
    +
  • +
  • Learners were not that motivated in joining the Otaniemi in-person (daily decreasing numbers).
  • +
  • Is September too crowded with other events?
  • +
  • Have we saturated the local market?
  • +
  • Workshop going over lunch time (until 13:30 local time) was an issue at least in JYU and CSC, +
      +
    • People managed when topic to come after break was announced before break so that they knew if they could skip without losing the thread.
    • +
    +
  • +
  • We could try flipped learning: have people watch videos / read the docs and then come on-site/online to discuss and solve problems
  • +
  • Should we do more asynchronous teaching/learning?
  • +
+

Coordination

+
    +
  • Establish the process according to the experience gained from this and previous workshops: +
      +
    • Make step-by-step instructions in manuals on how to arrange such events.
    • +
    • Put everything that participants will need for the workshop already into the Indico confirmation message. +
        +
      • Info from emails sent could be also in manuals except for the links.
      • +
      +
    • +
    +
  • +
  • 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.
  • +
+

Zoom and Twitch

+
    +
  • Ask exercise leads (ELs) not to speak in learners Zoom while lecturers speak in Twitch.
  • +
  • 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.
  • +
  • Utilise Zoom annotate in co-teaching.
  • +
  • Exercise Zoom rooms: +
      +
    • Tech questions room: difficult to follow if someone actually goes there. +
        +
      • It would be better to join the tech room during breaks, or before/after the lectures.
      • +
      +
    • +
    • Quiet room had 1-3 participants always.
    • +
    +
  • +
  • Exercise room instructions screen-share: We did it from separate device so we had the host computer free to operate stuff.
  • +
  • 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).
  • +
  • More interaction in video room: +
      +
    • Since there was so little interaction and not enough exercise time: some ELs felt that they "are not needed"
    • +
    • Too few exercises or too short exercise time and hence not enough possibility for interaction.
    • +
    +
  • +
  • Exercises felt too short (because many participants were software-unprepared).
  • +
  • Navigation problems among different webpages continues to be an issue. Few suggestions on how we could solve it have been and are being discussed here.
  • +
+

Collaborative notes

+
    +
  • HackMD goes to Twitch chat anyway so maybe no point in keeping it as a secret. +
      +
    • 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.
    • +
    +
  • +
  • HackMD started to be slow even if it should not with ~100 participants. +
      +
    • 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.
    • +
    • 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.
    • +
    +
  • +
  • Later in the workshop we deployed our own HedgeDoc instance, which worked quite well.
  • +
+

Installation and tools

+
    +
  • 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.
  • +
+

Lesson content

+
    +
  • 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.
  • +
  • Provide snapshots and starting points for those who have not done the previous exercises.
  • +
  • Topics in Day 4 (at least) would deserve a longer lesson.
  • +
  • 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).
  • +
  • Especially in in-person: the Twitch sessions felt long (since there was so little interaction in the in-person rooms).
  • +
+

Communication with participants

+
    +
  • Add all sessions to the CodeRefinery calendar.
  • +
  • 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.
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/blog/2022/11/08/mastodon/index.html b/branch/rkdarst--open-source-courses/blog/2022/11/08/mastodon/index.html new file mode 100644 index 000000000..8e02f8e8a --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/2022/11/08/mastodon/index.html @@ -0,0 +1,590 @@ + + + + CodeRefinery Mastodon account - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery Mastodon account + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

CodeRefinery Mastodon account

+ + + + + + +
+ +

For the obvious reasons, CodeRefinery is looking into a Mastodon +account. You can now find us at +@coderefinery@fosstodon.org.

+

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.

+

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?

+
    +
  • https://mastodon.help gives a basic introduction of the how and +why. https://fedi.tips/ gives a longer FAQ (and a separate +introduction).
  • +
  • Usernames are like emails with a username and a server name, +@username@server.name.
  • +
  • To join, you choose a server that you feel comfortable in, and they +all communicate. Some recommendations are below.
  • +
  • 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.
  • +
  • When in doubt, just join somewhere that looks reasonable - don't let +the Paradox of Choice hold back progress!
  • +
+

If you are just joining, you can start out by following CodeRefinery - +copy @coderefinery@fosstodon.org to your search and follow it. You +may be interested in following some of the people that we follow to +seed your list.

+

Deciding a server:

+
    +
  • We chose https://fosstodon.org (FOSS = "free and open source +software") to focus on the software and technology side of things.
  • +
  • For others in academia or research, +https://fediscience.org/server-list.html is a very nice list of +other interesting servers.
  • +
  • https://mastodon.social/ is run by the non-profit that coordinates +the Mastodon open-source project, but that does not mean you +should necessarily prefer it.
  • +
  • Do a web search for server lists. There are both news articles with +broad recommendations, and searchable lists with many servers for +specialized topics.
  • +
+

What you should know about Mastodon (especially vs. Twitter):

+
    +
  • 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.
  • +
  • It's not designed for low-effort replies (quote-replies) since it +makes engagement farming and negative attention. You can reply to +posts with the reply button on each post. (don't forget you can +click on post to see the thread).
  • +
  • Use hashtags to make things searchable, there is no full-text search +(to make it harder for random attacks based on opinions)
  • +
  • "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 - +ActivityPub can +communicate across different types of servers, such as image +hosting, video, blogging, etc. - in theory avoiding lock-in.
  • +
  • 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.
  • +
+

We hope to see you there!

+

See also

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/blog/2022/11/14/livestreaming-courses/index.html b/branch/rkdarst--open-source-courses/blog/2022/11/14/livestreaming-courses/index.html new file mode 100644 index 000000000..cfbe1176e --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/2022/11/14/livestreaming-courses/index.html @@ -0,0 +1,615 @@ + + + + Livestreaming courses - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Livestreaming courses + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Livestreaming courses

+ + + + + + +
+ +

Part of a series on the Future of +Teaching

+

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.

+

Start of the livestream idea

+

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.

+

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 parallel chat ("HackMD") for +questions and +co-teaching, 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 could move on to +the next step without losing essential points like interactivity or +engagement.

+

How livestreaming works for our courses

+

Then came livestreaming. 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 Research Software +Hour.

+

The fully "proper" livestreamed course was 2021 February, our Intro +to scientific computing/HPC +Kickstart, +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.

+

How do we actually do it? Instructors teach by Zoom, but there are +no learners or helpers there. The Zoom windows are captured by OBS +(Open Broadcaster Software), 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.

+
+

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.

+
+

Evaluation

+
+

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!

+
    +
  • Feedback from Summer 2021 HPC Kickstart
  • +
+
+

In general, feedback was positive.

+

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 parallel chat +anyway. And when the audience is not in the stream, you can publish +videos immediately with no privacy risk - which is great for +accessibility.

+

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.

+

See also

+ +
+

[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.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/blog/2022/11/21/video-publishing/index.html b/branch/rkdarst--open-source-courses/blog/2022/11/21/video-publishing/index.html new file mode 100644 index 000000000..3411178b1 --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/2022/11/21/video-publishing/index.html @@ -0,0 +1,588 @@ + + + + Video publishing supports more learning styles - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Video publishing supports more learning styles + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Video publishing supports more learning styles

+ + + + + + +
+ +

Part of a series on the Future of +Teaching

+

What if all the talking in a course didn't disappear right after the +course was over?

+

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 hope 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.

+

This is part of why we developed livestream teaching: we want to +separate the instructor interaction from learner interaction, so that +there is no privacy risk whatsoever when recording. This only works if the +livestream is engaging enough, but our previous posts show how we +handled that problem.

+

In order for a video to be useful, it has to be published quickly. +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 extremely useful. We can't have a long publishing +process with this.

+

So, with livestreaming, what do we get?

+
    +
  • 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.
  • +
  • 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.
  • +
  • Learners can catch up immediately or refresh themselves on what they +saw going off into the future.
  • +
  • If learners know videos will be available, they +are suddenly much more free to go with the flow of the course.
  • +
+

We actually made our own tool, +ffmpeg-editlist, +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.

+

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 (stats from Python for +Scientific Computing 2022). 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.

+

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.

+

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.

+

Read more:

+ +

[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.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/blog/2022/11/28/teams/index.html b/branch/rkdarst--open-source-courses/blog/2022/11/28/teams/index.html new file mode 100644 index 000000000..d7c8f2817 --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/2022/11/28/teams/index.html @@ -0,0 +1,641 @@ + + + + Learner teams in courses - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Learner teams in courses + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Learner teams in courses

+ + + + + + +
+ +

Part of a series on the Future of +Teaching

+

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 co-teaching and +barely at the start of parallel +chat, so we were focused +on the personal experience. Our solution was learner teams.

+

How it worked

+

The basic mechanics was this:

+
    +
  • 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).
  • +
  • Some learners registered as teams (in this case, we kept them +together).
  • +
  • We would also accommodate individual learners by finding suitable +teams for them - and this did work well.
  • +
  • Each team has an exercise leader assigned to it. It might be +someone who separately volunteered, or it might be someone who is +already part of the group.
  • +
  • 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 not work as well.
  • +
  • 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.
  • +
  • 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.
  • +
+

We have a short ~1-hour training course for the exercise +leaders, +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.

+

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.

+

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.

+

Teams seemed to work best when it was actively managed. 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.

+

Evaluation

+

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.

+

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.

+

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.

+

Benefits

+

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.

+

Decrease of teams with the rise of livestreaming

+

By 2022, the roles of teams has been decreasing (though this isn't +exactly a good thing). Our developments in +co-teaching, parallel +chat, and +livestreaming 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."

+

Downside: amount of organizational work

+

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.

+

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.

+

Summary

+

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.

+

See also

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/blog/2022/12/12/open-source-courses/index.html b/branch/rkdarst--open-source-courses/blog/2022/12/12/open-source-courses/index.html new file mode 100644 index 000000000..edf4ddcf1 --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/2022/12/12/open-source-courses/index.html @@ -0,0 +1,595 @@ + + + + Open source courses - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Open source courses + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Open source courses

+ + + + + + +
+ +

Part of a series on the Future of +Teaching

+

CodeRefinery courses (like many these days) are open source. This +should be the minimum requirement for most (all?) courses, and many +are - but it's important to clearly specify just what this means and +why.

+

Four freedoms applied to course material

+

As usual when we mean "open source", we actually mean "free (as in +speech)". Let's look at the Four essential freedoms of free +software and +see how they apply to teaching

+
    +
  • Freedom 0: The freedom to use the program for any purpose.: You +can use the material and re-teach the lesson yourself.
  • +
  • Freedom 1: The freedom to study how the program works, and change +it to make it do what you wish.: Not just the material is +released, but the necessary planning and instructor hints to do so. +Beyond that, you should be able to see the "source code" so that you +can use those techniques yourself.
  • +
  • Freedom 2: The freedom to redistribute and make copies so you can +help your neighbor. This is hopefully somewhat clear: a license +lets you redistribute it yourself, not just link to the current location.
  • +
  • Freedom 3: The freedom to improve the program, and release your +improvements (and modified versions in general) to the public, so +that the whole community benefits. This is the most interesting +one. Can you improve it and reshare? Do these reshares get lost in +your fork, never to be seen by others, or can others take advantages +to them? Or even, can you improve and send back to the original +source? This is a lot harder for course material
  • +
+

How we do it

+

This should be clear if you know the main CodeRefinery workshop - it +is basically a tutorial to the practices we use!

+ +

The lessons are treated as open-source software projects - except it's +documentation, not code. All of the tools nicely fit into place.

+

The benefits

+

And what do we get? Anyone can contribute, and even propose changes, +with minimal effort and without having to ask for permission or files +first. These changes can easily be tracked, and people can even +easily create their own versions (linked to ours via forks, so we can +see and integrate changes later if desired).

+

Is there any other way? At one meeting, we were discussing if +there is any other reasonable option (other than git + PR/MR workflow) +that can provide this level of collaboration. The closes we could +think of was "google docs-like tool" where someone can suggest +changes. But still, changes can either be suggested, or the lesson +can be copied and with no more easily suggestions. From what we can +tell, we need to use git.

+

Why open collaboration is harder for course material

+

Open collaboration on teaching can be hard, because everyone wants +their course to have material perfectly suited to it, with nothing +extra. This leads to a tendency to fork material, rather than +contribute upstream. It might also lead to the tendency to not design +for reuse, since who would want to use it, anyway?

+

How we get around this: We have to consider this in the design: we +have to design in enough modularity so that a lesson can be taught +multiple ways. It can be hard, and not perfect - but it's better to +have upstream changes to an imperfect lesson, rather than many +diverged lessons (that probably aren't perfect anyway, since they are +)

+

What do we hope others can do?

+

Try to be more open than before. We don't expect that everything can +be perfect: git for everything is too much, and not everyone has time +or skills to do that. But for larger, collaborative courses, it's +important. CodeRefinery is happy to help advise you in the mechanics +of things.

+

See also

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/blog/TEMPLATE.md.template b/branch/rkdarst--open-source-courses/blog/TEMPLATE.md.template new file mode 100644 index 000000000..10c687902 --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/TEMPLATE.md.template @@ -0,0 +1,18 @@ ++++ +title = 'TITLE' +slug = "20ZZ/XX/YY/name" +description = "1-2 sentence description for social media previews" + +[extra] +authors = "NAME, NAME, NAME" ++++ + +Concise introduction. + +Body here. + +More body. + + +See also +* Optional but nice diff --git a/branch/rkdarst--open-source-courses/blog/image_01.png b/branch/rkdarst--open-source-courses/blog/image_01.png new file mode 100644 index 000000000..4108dccbb Binary files /dev/null and b/branch/rkdarst--open-source-courses/blog/image_01.png differ diff --git a/branch/rkdarst--open-source-courses/blog/image_02.png b/branch/rkdarst--open-source-courses/blog/image_02.png new file mode 100644 index 000000000..fc9242958 Binary files /dev/null and b/branch/rkdarst--open-source-courses/blog/image_02.png differ diff --git a/branch/rkdarst--open-source-courses/blog/image_03.png b/branch/rkdarst--open-source-courses/blog/image_03.png new file mode 100644 index 000000000..0b8621a10 Binary files /dev/null and b/branch/rkdarst--open-source-courses/blog/image_03.png differ diff --git a/branch/rkdarst--open-source-courses/blog/image_04.png b/branch/rkdarst--open-source-courses/blog/image_04.png new file mode 100644 index 000000000..fe25162fd Binary files /dev/null and b/branch/rkdarst--open-source-courses/blog/image_04.png differ diff --git a/branch/rkdarst--open-source-courses/blog/image_05.png b/branch/rkdarst--open-source-courses/blog/image_05.png new file mode 100644 index 000000000..8ec04ce65 Binary files /dev/null and b/branch/rkdarst--open-source-courses/blog/image_05.png differ diff --git a/branch/rkdarst--open-source-courses/blog/image_06.png b/branch/rkdarst--open-source-courses/blog/image_06.png new file mode 100644 index 000000000..892d0bc92 Binary files /dev/null and b/branch/rkdarst--open-source-courses/blog/image_06.png differ diff --git a/branch/rkdarst--open-source-courses/blog/image_07.png b/branch/rkdarst--open-source-courses/blog/image_07.png new file mode 100644 index 000000000..628c27906 Binary files /dev/null and b/branch/rkdarst--open-source-courses/blog/image_07.png differ diff --git a/branch/rkdarst--open-source-courses/blog/image_08.png b/branch/rkdarst--open-source-courses/blog/image_08.png new file mode 100644 index 000000000..68607afaf Binary files /dev/null and b/branch/rkdarst--open-source-courses/blog/image_08.png differ diff --git a/branch/rkdarst--open-source-courses/blog/index.html b/branch/rkdarst--open-source-courses/blog/index.html new file mode 100644 index 000000000..5eae87c7a --- /dev/null +++ b/branch/rkdarst--open-source-courses/blog/index.html @@ -0,0 +1,619 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +

Blog posts

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/calendars/index.html b/branch/rkdarst--open-source-courses/calendars/index.html new file mode 100644 index 000000000..c9b9aedc4 --- /dev/null +++ b/branch/rkdarst--open-source-courses/calendars/index.html @@ -0,0 +1,510 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + + +
+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/img/favicon.ico b/branch/rkdarst--open-source-courses/img/favicon.ico new file mode 100644 index 000000000..a2df0fb66 Binary files /dev/null and b/branch/rkdarst--open-source-courses/img/favicon.ico differ diff --git a/branch/rkdarst--open-source-courses/index.html b/branch/rkdarst--open-source-courses/index.html new file mode 100644 index 000000000..c3306db11 --- /dev/null +++ b/branch/rkdarst--open-source-courses/index.html @@ -0,0 +1,877 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+
+ + CodeRefinery logo + +
+
+ +

Training and e-Infrastructure for Research Software Development

+

We teach all the essential tools which are usually skipped in academic +education so everyone can make full use of software, computing, and +data. We don't just give courses, but we are a training network that you +can join to share the effort and bring better courses to your +community.

+

Our standard workshop is well known in Nordic +academic circles and our our engaging online teaching +style is considered best-in-class even +compared to in-person teaching. CodeRefinery aims to operate as a +community project with support from academic organizations.

+

View our vision of the future of +teaching (or read +it).

+ +
+
+ +
+
+ +

News

+ + + +

Newsletter

+ +

+ This is a low traffic newsletter about our events and updates: One email every 1 or 2 months + (archives). +

+ +
+ +
+
+ +
+
+ +
+
+ +
+ +
+ +
+

Latest blog posts

+ + + +

+ You can see a list of all blog posts + here. +

+ +
+
+ +
+

Feedback and testimonials

+ +
+
    + + +

    I'm more conscious about the way I write programs and organize their 'organic' +growth. I try to modularize more and write proper tests. I also use git more +extensive to keep track about my different development branches +

    + +

    The main thing I got out of the workshop is that I'm now extensively using the +issue-tracking systems on GitHub and GitLab. Also on one of my major projects +we have moved towards having shorter lived feature branches and using merge +requests for more frequent merges and less code divergence. I also started +using GitLab's issues system more frequently. It made it easier for people in +my lab to report bugs, and easier for me to keep track of them +

    + +

    My code became much more 'sustainable' in the sense for others to +read/use/modify it. In detail the most significant is improved use of git +(forking workflow) and more strict 'purity' of functions. Use of PyCharm +increased speed of development +

    + +

    I take more time to think about long term solutions than 'quick fixes' even if +it's short of time. Another aspect is that I try to make the code reproducible +in the sense of documentation, code readability, clear log files, etc, both for +helping myself and my collaborators +

    + +

    My code is better documented, and I use version control much more. I have also +started writing more unit tests +

    + +

    I write my codes now in such a way that the person who will be taking over my +job would have less time figuring out what is going on. The emphasis of writing +modular codes in the workshop was very helpful for me and for the people using +my code +

    + +

    For me the most important thing was to learn to use git better. Now I make +frequent commented commits so it is far easier to see what I actually did for +me and others too +

    + +

    This was an extremely useful workshop. Thank you very much! I wish I had known +this stuff already as a grad student 10+ years ago. It is now easier to +collaborate with co-developers and easier to keep things in order and +structured +

    + +

    Constantly making sure my code is as accessible as possible to ensure future me +and others can understand and use it, i.e. writing explanatory comments +everywhere no matter how simple the code may be. +

    + +

    Increased confidence. Sense of community (extremely valuable during the +pandemic times). The value of volunteering. +

    + +

    I'm significantly more confident in navigating and creating versions and +branches in git and on GitHub. +

    + +

    It was a great experience, it just did sum up all the necessary tools and step +to build more sustainable code. That saved me A LOT of time trying to figuring +out everything by myself!! :) +

    + +

    I am an experienced developer and instructor and attended the workshop mainly +to help out. It did not change much for me in terms of the course content. +However, the course was am absolutely great experience for me in terms of +seeing how to conduct a massive online course with live participation. The +HackMD "backchannel" and breakout rooms with helpers are features I now +incorporate in teaching at my own university. +

    + +

    Think much more before starting a coding project and overall better structure: +coding with a structure in mind (making modules, simplifying), using a +structured approach to coding (knowing which tools, which steps, doing reviews, +etc.), etc. +

    + +

    I have a much broader understanding of these tools and why they are important. +I regularly use the tutorials and movies to help teach new incoming students in +between CodeRefinery workshops. +

    + +

    The project team has a common understanding of why and how to track code +versions and collaborate on processing scripts +

    + +

    More focus on that results and papers should be reproducible, ideally even for +referees. +

    + +
+
+ +

+ More feedback and testimonials + here. +

+ +
+ + +

CodeRefinery provides

+ + + +
+
+
+ + + picture of a classroom + +

Training opportunities

+

+ We offer training opportunities to researchers from Nordic + research groups (but we aim to expand beyond Nordics) to learn + basic-to-advanced research computing skills and become confident + in using state-of-the-art tools and practices from modern + collaborative software engineering. +

+ More ›

+
+
+ +
+
+ + + wordcloud + +

Lesson materials

+

+ We develop and maintain training material on software best + practices for researchers that already write code. Our material + addresses all academic disciplines and tries to be as programming + language-independent as possible. +

+ More ›

+
+
+ +
+
+ + + image of a terminal + +

Code Repository Hosting

+

+ Our code repository hosting service is open and free for all + researchers based in Nordic universities and research institutes + and their collaborators. +

+ More ›

+
+
+ +
+
+ + ResearchSoftwareHour logo + +

Research Software Hour

+

+ Online stream/show about scientific computing and research + software. It is designed to provide the skills typically picked up + via informal networks: we explore and discuss tools and how we + program and compute. +

+ More ›

+
+
+
+ + +
+
+

Mastodon

+ +

+ We are at @coderefinery@fosstodon.org + (joining hints). +

+ + + +
+ +
+

Twitter

+ + + + + + + +
+
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/index/description/index.html b/branch/rkdarst--open-source-courses/index/description/index.html new file mode 100644 index 000000000..6ab75aa4b --- /dev/null +++ b/branch/rkdarst--open-source-courses/index/description/index.html @@ -0,0 +1,512 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + +

Training and e-Infrastructure for Research Software Development

+

We teach all the essential tools which are usually skipped in academic +education so everyone can make full use of software, computing, and +data. We don't just give courses, but we are a training network that you +can join to share the effort and bring better courses to your +community.

+

Our standard workshop is well known in Nordic +academic circles and our our engaging online teaching +style is considered best-in-class even +compared to in-person teaching. CodeRefinery aims to operate as a +community project with support from academic organizations.

+

View our vision of the future of +teaching (or read +it).

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/index/index.html b/branch/rkdarst--open-source-courses/index/index.html new file mode 100644 index 000000000..849bbdbfd --- /dev/null +++ b/branch/rkdarst--open-source-courses/index/index.html @@ -0,0 +1,496 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/index/news/index.html b/branch/rkdarst--open-source-courses/index/news/index.html new file mode 100644 index 000000000..00fbb8e3e --- /dev/null +++ b/branch/rkdarst--open-source-courses/index/news/index.html @@ -0,0 +1,505 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + +

News

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/index/provides/index.html b/branch/rkdarst--open-source-courses/index/provides/index.html new file mode 100644 index 000000000..9a04bd108 --- /dev/null +++ b/branch/rkdarst--open-source-courses/index/provides/index.html @@ -0,0 +1,512 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + +

CodeRefinery provides

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/join/community-teaching-training/index.html b/branch/rkdarst--open-source-courses/join/community-teaching-training/index.html new file mode 100644 index 000000000..50623d059 --- /dev/null +++ b/branch/rkdarst--open-source-courses/join/community-teaching-training/index.html @@ -0,0 +1,539 @@ + + + + Community teaching training - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Community teaching training + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Community teaching training

+ + + +

Want to learn about the CodeRefinery teaching +style? Want to be able to run your own +workshop as a livestream and invite others to attend. Want to join +forces to make teaching more open, accessible, and available? Attend +our community teaching training.

+

Our community teaching training recognizes that in the connected +era, teaching doesn't have to be a solitary or small team affair. +CodeRefinery's workshops are done as a broad team with many diverse +roles, and this allows us to reach a huge number of people.

+ +

Courses are offered as we need to (contact us if you want one), +usually around once a year - but really, right now we onboard most +people to our style by working together.

+

"Community teaching training" is much more broad and doesn't duplicate +the Carpentries instructor +training - attending both +is useful.

+

See also

+

The material can be found at Community teaching +training.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/join/individuals/index.html b/branch/rkdarst--open-source-courses/join/individuals/index.html new file mode 100644 index 000000000..0b57793a2 --- /dev/null +++ b/branch/rkdarst--open-source-courses/join/individuals/index.html @@ -0,0 +1,568 @@ + + + + For individuals - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - For individuals + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

For individuals

+ + + +

As individuals, there are plenty of ways to join CodeRefinery, +regardless of what you do now. Also see what professional +staff and organizations +can do.

+

For any of these, you can get started by joining a +meeting and say hi, especially the "community +calls" on the first of each month. Or join our +chat and introduce +yourself in the "#new members" stream. Or contact anyone you know for +a recommendation on how to get involved - we aren't that formal yet.

+

Our chat has all kinds of interesting facts and help, so hanging out +there will probably teach you something anyway.

+

Read more: roles +overview for +all the varying responsibilities in a workshop (surely there is +something for you there)

+

As a learner

+

Anyone may attend our workshops, and this is a great way to get +started. If you want to do more than just attend, join our chat and +give feedback during the workshop.

+

As an exercise leader

+

Even during your first workshop, you could register as an exercise +leader and help others, as part of a +team. This is actually not +that hard, you aren't expected to know anything, instead you are more +focus on keeping a good flow and welcoming environment. There are +other expert helpers to help you. If you are comfortable enough with +the pre-requisites and aren't too scared by error messages, you can do +it! We have some basic onboarding +training +for you!

+

Maybe you want to bring all the rest of your research group as your +team?

+

As a co-instructor or expert helper

+

We don't teach alone, and thus it's remarkably easy to get started as +an instructor! In fact, we almost recommend it as a starting point, +since it's good to have a co-instructor that understands the difficulty +of doing and learning the topics.

+

If teaching isn't for you, there are plenty of staff helpers at every +workshop.

+

Lesson contributions

+

We would love to see more contributions to our lessons. We are a normal open +source project on GitHub, and you can contribute via issues, pull requests, or +by discussing in our chat. You +are welcome to reuse our lessons as well

+

A good starting point is to either open a topic on our +chat or to open an issue on one of the +lesson repositories in our GitHub +organization where you can describe what you +would like to change to collect feedback and possibly also contributors.

+

No contribution is too small and ideas for changes are very often very good +ideas and we would love to work with you on making our lessons better and more +modular and even more relevant.

+

Help out the CodeRefinery project itself

+

As an open project, there are always things to do to keep us running! +We're especially interested in people who know how to grow a +community, do better communications, or manage many events better than +we do now.

+

Joining CodeRefinery as an individual

+

Currently there is no formal joining, hang out in meetings/chat and +offer suggestions, and you can call yourself a part of CodeRefinery. +Create a pull request to add yourself to +contributors after significant +activity/commitment, or ~1 year of activity in general.

+

See also

+

Also see what professional staff and +organizations can do.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/join/meetings/index.html b/branch/rkdarst--open-source-courses/join/meetings/index.html new file mode 100644 index 000000000..0f66580a4 --- /dev/null +++ b/branch/rkdarst--open-source-courses/join/meetings/index.html @@ -0,0 +1,553 @@ + + + + CodeRefinery meetings - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery meetings + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

CodeRefinery meetings

+ + + +

Team meetings

+

Every Monday at 14 CET/CEST. Except the first Monday of the month where we have a +call with more community focus (see below).

+

Scope: Making sure everything fits together; improving the processes, website +and documentation; information exchange; bouncing ideas off others. This is +the place where day-to-day decisions are made, but any major decisions will +also be discussed in chat, over several weeks, or in other meetings +such as the community call or with the steering group. Despite the +name, everyone is welcome to this event too.

+ +

Community calls

+

Held on a monthly interval on Mondays at 14 CET/CEST, +the first Monday of a month.

+

Scope: All topics involving community onboarding, "what can I do?", +workshop scheduling, governance, and roadmap. This is the place to +drop by if you would like to get involved but don't know where to start.

+ +

Archive of past community calls

+ +

Archive of past staff meetings

+

These were meetings about administrative tasks such as generation of reports +and deliverables, involving paid staff. In Autumn 2021, with the end of phase +2 of the project, we dropped the distinction between "staff" and "non-staff" +and dropped the separation between staff meetings and community calls and +started to focus on community calls.

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/join/organizations/index.html b/branch/rkdarst--open-source-courses/join/organizations/index.html new file mode 100644 index 000000000..ad4b6eb7e --- /dev/null +++ b/branch/rkdarst--open-source-courses/join/organizations/index.html @@ -0,0 +1,551 @@ + + + + For organizations - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - For organizations + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

For organizations

+ + + +

CodeRefinery is a collaboration between different organizations (most +are universities or research computing infrastructure providers), and +you can join!

+

Provide CodeRefinery workshops to your community

+

Joining as an organization isn't that different than what is +described on the staff page, but you can do so even +more systematically and take part in decision-making about what +workshops we offer and when.

+

Do your own teaching better

+

Do you need to teach and reach a broader audience? Do you put on your +own workshops? Join CodeRefinery, learn our teaching strategies, and +let's do better together. Plenty of technical staff (who aren't +primarily teachers) need to teach as part of their jobs, and this is +the kind of community that CodeRefinery provides.

+

Provide your workshops to the CodeRefinery community

+

You might offer some of your own workshops to be livestreamed to a +wide audience, and we will help you to develop the workshop and do the +streaming - including finding many expert co-instructors to help with +the writing and teaching. This exchange of teaching also leads to +lots of other technical skill exchange, which is excellent for your +staff skills as well.

+

Relation to The Carpentries

+

The Carpentries is another well-known +organization that provides teaching. Compared to them, we are more +intermediate- and advanced-level, and focus on accommodating existing +teaching needs, rather than putting a huge amount of effort into +long procedures to making a few lessons perfect. Lessons and +workshops are primarily maintained and managed by the different +partners, and we focus on teaching and pedagogy collaboration.

+

Joining CodeRefinery as an organization

+

In the future, there will be some way to officially join CodeRefinery +as an organization, but that will come when it's time. For now, if +you express interest, you can join almost immediately and help figure +out the way we will work later. Currently, you could consider +yourself a partner if (criteria are subject to change):

+ +

See also

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/join/staff/index.html b/branch/rkdarst--open-source-courses/join/staff/index.html new file mode 100644 index 000000000..45055d50d --- /dev/null +++ b/branch/rkdarst--open-source-courses/join/staff/index.html @@ -0,0 +1,534 @@ + + + + For staff - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - For staff + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

For staff

+ + + +

If you work at an organization that supports computational research, +join us! Don't forget you can do everything on the for +individuals page as part of your job, and +your whole organization could join.

+ +

Letting your local audience know about our events is a simple way to +provide a high-impact training opportunity to your community with +little work on your side. Many of our workshops are online and +livestreamed, so anyone can attend.

+

Run your own breakout rooms and/or provide local support

+

Go one step beyond simple advertising: organize your local community. +We call this "distributed registration" and basically means that you +collect your own registration, organize people into teams (if +desired), set up in-person on online spaces to watch the course and do +the exercises. We can support you however possible, for example more +chat support, training exercise leaders, and you can join our planning +meetings.

+ +

For any of these, you can get started by join a +meeting and say hi, especially the "community +calls" on the first of each month. Or join our +chat and introduce +yourself in the "#new members" stream. Or contact anyone you know for +a recommendation on how to get involved - we aren't that formal yet.

+

Request in-person workshops

+

This is currently somewhat on hiatus, since our online workshops work +so well, but you could request your +own workshop.

+

Joining CodeRefinery as staff

+

See individuals.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/lessons/contributing/index.html b/branch/rkdarst--open-source-courses/lessons/contributing/index.html new file mode 100644 index 000000000..cce05baa9 --- /dev/null +++ b/branch/rkdarst--open-source-courses/lessons/contributing/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/branch/rkdarst--open-source-courses/lessons/core/index.html b/branch/rkdarst--open-source-courses/lessons/core/index.html new file mode 100644 index 000000000..8ae9604ec --- /dev/null +++ b/branch/rkdarst--open-source-courses/lessons/core/index.html @@ -0,0 +1,548 @@ + + + + Core CodeRefinery lessons - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Core CodeRefinery lessons + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Core CodeRefinery lessons

+ + + +

Also see all of our online lessons: Lesson index

+

These are the lessons which are included in the "standard" +CodeRefinery workshop, and what we believe that every computational +scientist (even those with very small amounts of computation) should +know.

+ +

Also see all of our online lessons: Lesson index

+

Self-study workshop

+

Want to study this material yourself? No problem! The CodeRefinery +teaching style tries to make this accessible to you. All the +lessons above are designed to be self-sufficient for self-study. We +also have video recordings and archived "parallel chat Q&A" (which can +go into other both basic and advanced questions) which may +optionally be useful for other teaching styles.

+

The following are the video recordings + parallel chat of the 2022 +September workshop:

+ +

For self-study purposes, you may need the installation +instructions. Note +that you may want to see what is necessary for each lesson, before +going and installing everything there.

+

Support in self-study is very important. There are several +options:

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/lessons/from-coderefinery/index.html b/branch/rkdarst--open-source-courses/lessons/from-coderefinery/index.html new file mode 100644 index 000000000..abdc1f424 --- /dev/null +++ b/branch/rkdarst--open-source-courses/lessons/from-coderefinery/index.html @@ -0,0 +1,571 @@ + + + + All CodeRefinery lessons - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - All CodeRefinery lessons + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

All CodeRefinery lessons

+ + + +

These are various lessons we teach or recommended:

+

CodeRefinery lessons

+

See Core lessons for the ones we teach at every +workshop, and a self-study program.

+

This is not a strict division, but lessons can be classified as to +what is initially useful to yourself, to your group, and to the whole +community.

+

Lessons marked with (*) are part of a regular 6 half-day workshop.

+ +

Video recordings

+

A number of video recordings of CodeRefinery lessons and workshops and +Research Software Hour sessions can be +found on our YouTube +channel.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/lessons/index.html b/branch/rkdarst--open-source-courses/lessons/index.html new file mode 100644 index 000000000..9133a902b --- /dev/null +++ b/branch/rkdarst--open-source-courses/lessons/index.html @@ -0,0 +1,519 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

CodeRefinery lessons

+ + + +

This is an index of our lessons - see the sub-pages for more.

+

Core lessons

+

See core lessons. These are the ones we teach +during our standard workshops and include good self-study +possibilities. You probably want to start here.

+ +

All CodeRefinery lessons

+

See all coderefinery lessons.

+

Other lessons by our partners and the CodeRefinery community

+

See other lessons.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/lessons/other/index.html b/branch/rkdarst--open-source-courses/lessons/other/index.html new file mode 100644 index 000000000..b828d62ce --- /dev/null +++ b/branch/rkdarst--open-source-courses/lessons/other/index.html @@ -0,0 +1,526 @@ + + + + Other lessons - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Other lessons + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Other lessons

+ + + +

Other lessons by our partners and the CodeRefinery community

+

You can expect these to be open-source, reusable, in a git repository, and with +a community you can join and give contributions to:

+ +

Lessons we contributed to as instructors or helpers

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/lessons/reusing/index.html b/branch/rkdarst--open-source-courses/lessons/reusing/index.html new file mode 100644 index 000000000..acd772267 --- /dev/null +++ b/branch/rkdarst--open-source-courses/lessons/reusing/index.html @@ -0,0 +1,524 @@ + + + + Reusing/teaching our lessons - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Reusing/teaching our lessons + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Reusing/teaching our lessons

+ + + +

All of our material is open source and reuse is encouraged. In +general, we only recommend similarly open-source, reusable lessons. +Check the license from each repository in case of questions (most +CodeRefinery-developed lessons use CC BY +4.0.

+

Teaching these lessons independently is encouraged, just make sure the +distinction between the "CodeRefinery" project and your workshop is +clear. For example, give your own name to the workshop but say +"(CodeRefinery lessons)".

+

Our lessons are designed to be generic, (mostly) stand-alone, and +re-used in place without forking so that anyone can use them and +they can fit into different types of programs. We welcome +contributions which make the lessons more reusable - send changes +using standard open-source practices (you know, what we teach in +CodeRefinery and all).

+

Please let us know if the material is helpful - it is important for us to +know whether this material has impact outside of our workshops. Some +courses/workshops we know of are listed below but we would like to list more.

+

Derivative work based on our material

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/open-house/blog-posts/index.html b/branch/rkdarst--open-source-courses/open-house/blog-posts/index.html new file mode 100644 index 000000000..c435ecc86 --- /dev/null +++ b/branch/rkdarst--open-source-courses/open-house/blog-posts/index.html @@ -0,0 +1,530 @@ + + + + Work on blog posts - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Work on blog posts + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + April 24, 2020 + +
+ + coderefinery open house logo + +
+

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.

+

Tentative list of articles:

+
    +
  • Online lessons, what we're working on, how we'll be delivering online workshops
  • +
  • Merge vs rebase
  • +
  • Nordic-RSE conference
  • +
  • NordicHPC tools
  • +
+

Anyone who would like to contribute to these articles or suggests new +topics is welcome to join!

+

We will collect notes in a shared +document. +Please note that this document will be archived in our Open House +event repository.

+

We first meet online at 9:00 am (UTC+1) via video (connection link +will be shared in our shared +document and then work on +the instructor training material. During the day, we will coordinate +the work through our Zulip chat +with possibilities to further discuss via video if necessary.

+

We conclude the day around 4:00 pm (UTC+1) by writing a short +/summary in our shared +document.

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/open-house/coderefinery_openhouse.jpg b/branch/rkdarst--open-source-courses/open-house/coderefinery_openhouse.jpg new file mode 100644 index 000000000..ad5d89dee Binary files /dev/null and b/branch/rkdarst--open-source-courses/open-house/coderefinery_openhouse.jpg differ diff --git a/branch/rkdarst--open-source-courses/open-house/coderefinery_openhouse.png b/branch/rkdarst--open-source-courses/open-house/coderefinery_openhouse.png new file mode 100644 index 000000000..9c830b2e8 Binary files /dev/null and b/branch/rkdarst--open-source-courses/open-house/coderefinery_openhouse.png differ diff --git a/branch/rkdarst--open-source-courses/open-house/credit/index.html b/branch/rkdarst--open-source-courses/open-house/credit/index.html new file mode 100644 index 000000000..6708c4345 --- /dev/null +++ b/branch/rkdarst--open-source-courses/open-house/credit/index.html @@ -0,0 +1,518 @@ + + + + Making lessons citable and giving credits for contributors - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Making lessons citable and giving credits for contributors + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + October 02, 2020 + +
+ + coderefinery open house logo + +
+

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.

+

Anyone interested is welcome to contribute to discussion on how to realize these in practice!

+

We will collect notes in a shared +document. +Please note that this document will be archived in our Open House +event repository.

+

We first meet online at 9:00 am (CEST) / 10:00 am (EEST) via video (connection link +will be shared in our shared document. +If we decide on working individually during the day, we will coordinate +the work through our Zulip chat +with possibilities to further discuss via video if necessary.

+

We conclude the day around 12:00 pm (UTC+1).

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/open-house/index.html b/branch/rkdarst--open-source-courses/open-house/index.html new file mode 100644 index 000000000..849bbdbfd --- /dev/null +++ b/branch/rkdarst--open-source-courses/open-house/index.html @@ -0,0 +1,496 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/open-house/instructor-training-material/index.html b/branch/rkdarst--open-source-courses/open-house/instructor-training-material/index.html new file mode 100644 index 000000000..6f711666c --- /dev/null +++ b/branch/rkdarst--open-source-courses/open-house/instructor-training-material/index.html @@ -0,0 +1,531 @@ + + + + Work on instructor training material - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Work on instructor training material + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + March 24, 2020 + +
+ + coderefinery open house logo + +
+

CodeRefinery is organizing a one day online "open house" dedicated to +work together on revising and +improving our instructor training +material. +Issues are filed +here, +notes from the first workshop can be in the shared +document, and we +are taking what each of us wants to work on. Input for the further +improvement are also very welcome.

+

Anyone who would like to contribute to the instructor training +material, or learn how to contribute to any CodeRefinery lesson in +general, is welcome!

+

We will collect nodes in a shared +document. +Please note that this document will be archived in our Open House +event repository.

+

We first meet online at 9:00 am (UTC+1) via video (connection link +will be shared in our shared +document and +then work on the instructor training material. During the day, we will +coordinate the work through our Zulip +chat with possibilities to +further discuss via video if necessary.

+

We conclude the day around 4:00 pm (UTC+1) by writing a short +blog/summary in our shared +document.

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/open-house/newsletter/index.html b/branch/rkdarst--open-source-courses/open-house/newsletter/index.html new file mode 100644 index 000000000..6828378e7 --- /dev/null +++ b/branch/rkdarst--open-source-courses/open-house/newsletter/index.html @@ -0,0 +1,531 @@ + + + + Writing newsletter articles and blog posts - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Writing newsletter articles and blog posts + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + August 24, 2020 + +
+ + coderefinery open house logo + +
+

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.

+

Tentative list of articles:

+
    +
  • Future mega-CR
  • +
  • Update on citable lessons and credit/visibility for instructor and helpers
  • +
  • Update on sustainability efforts?
  • +
  • Manuals : how they can be used for your lessons
  • +
  • git-pr
  • +
+

Anyone who would like to contribute to these articles or suggests new +topics is welcome to join!

+

We will collect notes in a shared +document. +Please note that this document will be archived in our Open House +event repository.

+

We first meet online at 9:00 am (CEST) / 10:00 am (EEST) via video (connection link +will be shared in our shared +document and then work on +the instructor training material. During the day, we will coordinate +the work through our Zulip chat +with possibilities to further discuss via video if necessary.

+

We conclude the day around 4:00 pm (UTC+1) by writing a short +/summary in our shared +document.

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/open-house/online-teaching/index.html b/branch/rkdarst--open-source-courses/open-house/online-teaching/index.html new file mode 100644 index 000000000..b1227f140 --- /dev/null +++ b/branch/rkdarst--open-source-courses/open-house/online-teaching/index.html @@ -0,0 +1,511 @@ + + + + Preparing for online teaching - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Preparing for online teaching + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + March 20, 2020 + +
+ + coderefinery open house logo + +
+

We will meet on video (9:00 am, UTC+1) +and chat and discuss techniques, +solutions, and tricks for online teaching and collect our notes in a shared +document.

+

Anyone who would like to contribute or learn is most welcome!

+

We will conclude the day around 4:00 pm (UTC+1) by writing a short blog/summary +in our shared document.

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/open-house/training-material/index.html b/branch/rkdarst--open-source-courses/open-house/training-material/index.html new file mode 100644 index 000000000..4c22f1f86 --- /dev/null +++ b/branch/rkdarst--open-source-courses/open-house/training-material/index.html @@ -0,0 +1,520 @@ + + + + Collaborative work on the training material - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Collaborative work on the training material + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + December 13, 2019 + +
+ + coderefinery open house logo + +
+

Welcome to the first CodeRefinery Open House!

+

The idea behind this event is to bring together people who are interesting in +contributing to the CodeRefinery training +material.

+

Anyone who would like to contribute, learn how to contribute to the +CodeRefinery training material is very welcome to join.

+

We will collect nodes in a shared document. +Please note that this document will be archived in our +Open House event repository.

+

We first meet online at 9:00 am (UTC+1) via video (connection link will be +shared in our shared document) and +then work on CodeRefinery training material. During the day, we will coordinate +the work through our Zulip chat with +possibilities to further discuss via video if necessary.

+

We conclude the day around 4:00pm (UTC+1) by writing a short blog/summary in +our shared document.

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/open-house/website/index.html b/branch/rkdarst--open-source-courses/open-house/website/index.html new file mode 100644 index 000000000..3115f420e --- /dev/null +++ b/branch/rkdarst--open-source-courses/open-house/website/index.html @@ -0,0 +1,524 @@ + + + + Collaborative work on the website - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Collaborative work on the website + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + February 11, 2020 + +
+ + coderefinery open house logo + +
+

Welcome to the second CodeRefinery Open House!

+

Following up on our successful first CodeRefinery Open House, we will have our +second online Open house!

+

The idea behind this event is to work together on revising and improving +coderefinery.org. Issues are +filed and we are +taking what each of us wants to work on. Input for the further improvement are +very welcome!

+

Anyone who would like to contribute, or learn how to contribute to +coderefinery.org is very welcome to join.

+

We will collect nodes in a shared document. +Please note that this document will be archived in our +Open House event repository.

+

We first meet online at 9:00 am (UTC+1) via video (connection link will be +shared in our shared document) and +then work on CodeRefinery training material. During the day, we will coordinate +the work through our Zulip chat with +possibilities to further discuss via video if necessary.

+

We conclude the day around 4:00pm (UTC+1) by writing a short blog/summary in +our shared document.

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/organization/contact/index.html b/branch/rkdarst--open-source-courses/organization/contact/index.html new file mode 100644 index 000000000..1a41594a8 --- /dev/null +++ b/branch/rkdarst--open-source-courses/organization/contact/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/branch/rkdarst--open-source-courses/organization/contributors/index.html b/branch/rkdarst--open-source-courses/organization/contributors/index.html new file mode 100644 index 000000000..78a6e9f86 --- /dev/null +++ b/branch/rkdarst--open-source-courses/organization/contributors/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/branch/rkdarst--open-source-courses/organization/get-involved/index.html b/branch/rkdarst--open-source-courses/organization/get-involved/index.html new file mode 100644 index 000000000..cce05baa9 --- /dev/null +++ b/branch/rkdarst--open-source-courses/organization/get-involved/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/branch/rkdarst--open-source-courses/organization/how-to-help/index.html b/branch/rkdarst--open-source-courses/organization/how-to-help/index.html new file mode 100644 index 000000000..cce05baa9 --- /dev/null +++ b/branch/rkdarst--open-source-courses/organization/how-to-help/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/branch/rkdarst--open-source-courses/organization/meeting-minutes/index.html b/branch/rkdarst--open-source-courses/organization/meeting-minutes/index.html new file mode 100644 index 000000000..f3640bc4f --- /dev/null +++ b/branch/rkdarst--open-source-courses/organization/meeting-minutes/index.html @@ -0,0 +1,638 @@ + + + + Community call meeting minutes - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Community call meeting minutes + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Community call meeting minutes

+ + + +

Check the Git history of this file for old minutes.

+

Agenda and notes

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/organization/meetings/index.html b/branch/rkdarst--open-source-courses/organization/meetings/index.html new file mode 100644 index 000000000..c0a6afe8f --- /dev/null +++ b/branch/rkdarst--open-source-courses/organization/meetings/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/branch/rkdarst--open-source-courses/organization/partners/index.html b/branch/rkdarst--open-source-courses/organization/partners/index.html new file mode 100644 index 000000000..8f13fea77 --- /dev/null +++ b/branch/rkdarst--open-source-courses/organization/partners/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/branch/rkdarst--open-source-courses/privacy-policy/index.html b/branch/rkdarst--open-source-courses/privacy-policy/index.html new file mode 100644 index 000000000..5842d1d4a --- /dev/null +++ b/branch/rkdarst--open-source-courses/privacy-policy/index.html @@ -0,0 +1,672 @@ + + + + CodeRefinery privacy policy - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery privacy policy + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

CodeRefinery privacy policy

+ + + +

Update, 12th October 2021

+

In short:

+ +

On the 1st October 2021, it was announced that CodeRefinery will receive +partial financial support by NeIC for the next 3 years (CodeRefinery +Sustainability Phase, CodeRefinery SP, see +https://neic.no/news/2021/10/01/2021-open-call-results/). The next phase of +the CodeRefinery project is mainly consisting of in-kind contributions by +diverse partner organizations. In this new phase, we need to renew our privacy +policy, but we need some time before the new privacy policy is set.

+

We will continue using our online community spaces and the current +owners/administrators will remain until new roles are set in the CodeRefinery +SP.

+

Previously we have written that "Stored names and email addresses of users +will be removed with the end of this project (2021-10-31)". However, we need +to keep participation data from 2020 and 2021 workshops at least until the end +of 2022 since we often get asked for participation certificates long after the +workshop is concluded. Therefore, we will keep information of the +participants who are qualified to certificates (either as learner, helper, +expert helper, or exercise lead) in the currently used platform, Indico, +managed by NeIC. The currently participating staff who is also committed to be +a part of the CodeRefinery SP have access to the information.

+

We continue using the newsletter in the new phase but +we may switch to other services but in this case we would notify all +subscribers about deletion of their contact information and invite them to +re-register to the new services that we may migrate to. If a user wants to +unsubscribe before that, they are welcome to do so anytime.

+
+

This Privacy Policy covers person identifiable information that may be +provided to CodeRefinery. Your data only comes from what you decide to provide +to us by understanding privacy policy of the platforms we are using for +different purposes as shown below. Changes to this Privacy Policy will be +posted on this page. Any changes will only apply to information collected +after the posted date of any such change. Additionally, information may be +provided to governmental bodies and other entities as required by law.

+

Definitions

+ +

What information do we obtain and why?

+

We obtain user data including person identifiable information in the following manner for each purpose:

+ +

Information you provide in our Online community spaces are visible and +accessible according to each service's privacy policy. Please note that your +information may be visible to other users in the Online community spaces than +CodeRefinery team members. We use your information within each Online +community space for communication purpose in a reasonable and respectful +manner. We will not use your person identifiable information provided in our +Online community spaces for other purposes than communication with you and +within the community. When we archive a note taken in +HackMD during a workshop, we will delete all the +person identifiable information of users.

+

We obtain the following data anonymously and voluntarily from users.

+ +

Who has access to the personally identifiable information?

+ +

Where we store the data

+ +

How long we store the data

+ +

Anonymity and right to be forgotten

+ +

Questions/concerns?

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/processed_images/0706072f0f401f2500.png b/branch/rkdarst--open-source-courses/processed_images/0706072f0f401f2500.png new file mode 100644 index 000000000..cdf1a0ec4 Binary files /dev/null and b/branch/rkdarst--open-source-courses/processed_images/0706072f0f401f2500.png differ diff --git a/branch/rkdarst--open-source-courses/processed_images/3e74c353dd575c6200.png b/branch/rkdarst--open-source-courses/processed_images/3e74c353dd575c6200.png new file mode 100644 index 000000000..fada8218a Binary files /dev/null and b/branch/rkdarst--open-source-courses/processed_images/3e74c353dd575c6200.png differ diff --git a/branch/rkdarst--open-source-courses/processed_images/66cf79ffcc02c26900.png b/branch/rkdarst--open-source-courses/processed_images/66cf79ffcc02c26900.png new file mode 100644 index 000000000..8444708ef Binary files /dev/null and b/branch/rkdarst--open-source-courses/processed_images/66cf79ffcc02c26900.png differ diff --git a/branch/rkdarst--open-source-courses/processed_images/b9e86c7a4b86a29f00.png b/branch/rkdarst--open-source-courses/processed_images/b9e86c7a4b86a29f00.png new file mode 100644 index 000000000..cf6c224fd Binary files /dev/null and b/branch/rkdarst--open-source-courses/processed_images/b9e86c7a4b86a29f00.png differ diff --git a/branch/rkdarst--open-source-courses/processed_images/fd3d474f3aab2ffb00.png b/branch/rkdarst--open-source-courses/processed_images/fd3d474f3aab2ffb00.png new file mode 100644 index 000000000..f6492e06e Binary files /dev/null and b/branch/rkdarst--open-source-courses/processed_images/fd3d474f3aab2ffb00.png differ diff --git a/branch/rkdarst--open-source-courses/registration/index.html b/branch/rkdarst--open-source-courses/registration/index.html new file mode 100644 index 000000000..910bdcc0c --- /dev/null +++ b/branch/rkdarst--open-source-courses/registration/index.html @@ -0,0 +1,523 @@ + + + + Registration procedure - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Registration procedure + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Registration procedure

+ + + +

Confirmation email

+

After filling out the registration form you will receive an automatic +confirmation email but please note that your registration is only tentative +until we confirm it with another (human-written) email which should happen +typically within a week.

+

Waiting list

+

We maintain a waiting list for seats but this is currently not automatic so we +need this short time buffer to manually confirm participants and inform those who +are on the waiting list.

+

First come, first serve

+

The seats are assigned on a first come first serve basis but we need to also +make sure that registered participants are affiliated with a Nordic academic +institution since the course is free for participants and financed by the +Nordic e-Infrastructure Collaboration (unless this is an event outside of Nordics +funded by a different organization).

+

Cancellation

+

We ask confirmed participants who are not able to participate at the course +they have signed up for, to inform us as soon as possible so that people on the +waiting list can take the vacant seat.

+

Questions?

+

If you have any questions about your registration status, please write to +support@coderefinery.org.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/repository/index.html b/branch/rkdarst--open-source-courses/repository/index.html new file mode 100644 index 000000000..836e8e461 --- /dev/null +++ b/branch/rkdarst--open-source-courses/repository/index.html @@ -0,0 +1,594 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + +
+

Code repository hosting for Nordic research software

+
    +
  • Over 300 active users, 175 groups, with over 400 active projects.
  • +
  • The service is hosted at https://source.coderefinery.org.
  • +
  • The is currently run from and the data is stored on servers at the +Danish e-Infrastructure Cooperation (DeiC). DeiC is part of the Nordic +e-Infrastructure collaboration funding this project.
  • +
  • To inform us about issues, please contact support@coderefinery.org.
  • +
  • We announce service breaks through messages displayed once you log into the +platform but we try to announce them well in advance and to keep them very +short.
  • +
  • This service is for collaborating on code and scripts. It is not designed to be +a data sharing or data archive service. There are other services for data +sharing and archival. In doubt please ask support@coderefinery.org.
  • +
  • We are currently funded until 2025. We are actively working on +securing long-term funding for this service. The goal is to create a service +for many years to come. If we do not manage to secure long-term funding, we +will notify users well in advance and assist in migrating repository and data.
  • +
  • The entire file system is backed up every day. The schedule is 1/month full +backup, 3 out of 4 weeks differential backup, 1/day incremental backup. We +reserve the right to reduce the number of days backed up if space becomes an +issue.
  • +
+
+

Why use this service, rather than a service like GitHub or BitBucket?

+

The service we provide is a GitLab instance which targets persons and groups who:

+ +

GitHub, Bitbucket, +GitLab.com, and similar services are popular code +repository hosting services. If you already use them, please continue to do +so! They allow hosting public repositories and to some extent also private +repositories. They may offer higher visibility and discoverability than the +instance offered by our project.

+

Who can use this service?

+

Students, researchers, and staff affiliated with a Nordic academic institution. +If you are not sure whether you can use the system, please contact +support@coderefinery.org. +  +Your collaborators outside the Nordics can join your projects but cannot create new projects. +Ask them to register and then you can add them to your projects or groups as collaborators. +No need to ask us or inform us in order to add external collaborators.

+

You need to be first enabled before you can create projects and groups

+

Newly signed-in users need to first be enabled before they can create projects and groups. +This is to prevent abuse.

+

Please follow these steps:

+ +

How about federated access such as Feide or HAKA or eduGAIN or Kalmar2?

+

We support sign in with eduGAIN. Otherwise you need a specific user account +for this instance. We recommend creating an account with the email address your +identity federation gives you, as this will make it easier to enable other +federated access providers seamlessly. + 

+

Is there a data limit per project?

+

Currently no limit is enforced but we recommend less than 100 MB per project. +This should really be for code and not for persistent storage of data. If you +use more, we may contact you. If you need more, please contact us and motivate +why you need more and we will see what we can do about it. If you have a good +motivation, you will probably get a larger soft limit.

+

Can I serve GitLab pages?

+

Yes! GitLab pages now serve via *.pages.coderefinery.org. +Currently only HTTP. TLS is in the works.

+

Does the service include shared continuous integration runners?

+

No, shared runners are not part of the offering but you can connect +your own CI runners to your projects for automated tests and builds.

+

SSH key fingerprints

+

Public key fingerprints can be used to validate a connection to a remote server.

+

These are the public key fingerprints for source.coderefinery.org (in hexadecimal format):

+
MD5:b8:c9:43:24:33:96:ba:5d:88:84:73:81:38:ac:e6:0f (RSA)
+MD5:21:dc:4e:ef:4f:1c:44:f8:d8:5e:3a:30:15:32:e3:4c (ECDSA)
+
+

These are the SHA256 hashes:

+
SHA256:dQ6iP+E6PZ2Ureynaw1eGKqRLJ5RtL4C7qUJlNSvLW8 (RSA)
+SHA256:dtWo53mvtXVv3NxZf44kpRIfvJ8edcEqv7HFEltPpa4 (ECDSA)
+
+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/robots.txt b/branch/rkdarst--open-source-courses/robots.txt new file mode 100644 index 000000000..71c44faeb --- /dev/null +++ b/branch/rkdarst--open-source-courses/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Disallow: +Allow: / +Sitemap: https://coderefinery.org/sitemap.xml diff --git a/branch/rkdarst--open-source-courses/see-also/other-lessons/index.html b/branch/rkdarst--open-source-courses/see-also/other-lessons/index.html new file mode 100644 index 000000000..fbf93514c --- /dev/null +++ b/branch/rkdarst--open-source-courses/see-also/other-lessons/index.html @@ -0,0 +1,502 @@ + + + + Other lessons - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Other lessons + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Other lessons

+ + + +

We are working on this page ...

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/see-also/other-projects/index.html b/branch/rkdarst--open-source-courses/see-also/other-projects/index.html new file mode 100644 index 000000000..07f345f55 --- /dev/null +++ b/branch/rkdarst--open-source-courses/see-also/other-projects/index.html @@ -0,0 +1,538 @@ + + + + Recommended material created by other organizations/projects - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Recommended material created by other organizations/projects + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Recommended material created by other organizations/projects

+ + + + +

Interesting organisations and projects to follow

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/sitemap.xml b/branch/rkdarst--open-source-courses/sitemap.xml new file mode 100644 index 000000000..8da116402 --- /dev/null +++ b/branch/rkdarst--open-source-courses/sitemap.xml @@ -0,0 +1,256 @@ + + + + https://coderefinery.org/ + + + https://coderefinery.org/about/code-of-conduct/ + + + https://coderefinery.org/about/contact/ + + + https://coderefinery.org/about/contributors/ + + + https://coderefinery.org/about/funding/ + + + https://coderefinery.org/about/history/ + + + https://coderefinery.org/about/impact/ + + + https://coderefinery.org/about/partners/ + + + https://coderefinery.org/about/project/ + + + https://coderefinery.org/about/reports/ + + + https://coderefinery.org/about/staff-meetings/ + + + https://coderefinery.org/about/statistics/ + + + https://coderefinery.org/blog/ + + + https://coderefinery.org/blog/2020/04/14/first-online-workshop/ + 2020-04-14 + + + https://coderefinery.org/blog/2020/04/24/nordic-rse-conference/ + 2020-04-24 + + + https://coderefinery.org/blog/2020/04/24/online-workshops-update/ + 2020-04-24 + + + https://coderefinery.org/blog/2020/04/24/rebase-vs-merge/ + 2020-04-24 + + + https://coderefinery.org/blog/2020/04/24/rsh/ + 2020-04-24 + + + https://coderefinery.org/blog/2020/04/27/nordichpc-tools/ + 2020-04-27 + + + https://coderefinery.org/blog/2020/07/31/mega-coderefinery/ + 2020-07-31 + + + https://coderefinery.org/blog/2020/09/29/git-pr/ + 2020-09-29 + + + https://coderefinery.org/blog/2020/11/13/carpentry-community-discussion-nordic/ + 2020-11-13 + + + https://coderefinery.org/blog/2021/09/01/bi-weekly-community-calls/ + 2021-09-01 + + + https://coderefinery.org/blog/2021/11/20/phase-2-lessons-learned/ + 2021-11-20 + + + https://coderefinery.org/blog/2021/11/21/towards-citable-lessons/ + 2021-11-21 + + + https://coderefinery.org/blog/2021/11/25/lessons-learned-may-2021/ + 2021-11-25 + + + https://coderefinery.org/blog/2022/05/04/improving-workshop-registration/ + 2022-05-04 + + + https://coderefinery.org/blog/2022/05/18/measuring-impact/ + 2022-05-18 + + + https://coderefinery.org/blog/2022/10/17/future-of-teaching/ + 2022-10-17 + + + https://coderefinery.org/blog/2022/10/21/python-for-scicomp/ + 2022-10-21 + + + https://coderefinery.org/blog/2022/10/24/parallel-chat/ + 2022-10-24 + + + https://coderefinery.org/blog/2022/10/31/co-teaching/ + 2022-10-31 + + + https://coderefinery.org/blog/2022/11/07/reverse-hybrid/ + 2022-11-07 + + + https://coderefinery.org/blog/2022/11/08/lessons-learned-Sep-2022/ + 2022-11-08 + + + https://coderefinery.org/blog/2022/11/08/mastodon/ + 2022-11-08 + + + https://coderefinery.org/blog/2022/11/14/livestreaming-courses/ + 2022-11-14 + + + https://coderefinery.org/blog/2022/11/21/video-publishing/ + 2022-11-08 + + + https://coderefinery.org/blog/2022/11/28/teams/ + 2022-11-28 + + + https://coderefinery.org/blog/2022/12/12/open-source-courses/ + 2022-12-12 + + + https://coderefinery.org/calendars/ + + + https://coderefinery.org/index/ + + + https://coderefinery.org/index/description/ + + + https://coderefinery.org/index/news/ + + + https://coderefinery.org/index/provides/ + + + https://coderefinery.org/join/community-teaching-training/ + + + https://coderefinery.org/join/individuals/ + + + https://coderefinery.org/join/meetings/ + + + https://coderefinery.org/join/organizations/ + + + https://coderefinery.org/join/staff/ + + + https://coderefinery.org/lessons/ + + + https://coderefinery.org/lessons/core/ + + + https://coderefinery.org/lessons/from-coderefinery/ + + + https://coderefinery.org/lessons/other/ + + + https://coderefinery.org/lessons/reusing/ + + + https://coderefinery.org/open-house/ + + + https://coderefinery.org/open-house/blog-posts/ + 2020-04-24 + + + https://coderefinery.org/open-house/credit/ + 2020-10-02 + + + https://coderefinery.org/open-house/instructor-training-material/ + 2020-03-24 + + + https://coderefinery.org/open-house/newsletter/ + 2020-08-24 + + + https://coderefinery.org/open-house/online-teaching/ + 2020-03-20 + + + https://coderefinery.org/open-house/training-material/ + 2019-12-13 + + + https://coderefinery.org/open-house/website/ + 2020-02-11 + + + https://coderefinery.org/organization/meeting-minutes/ + + + https://coderefinery.org/privacy-policy/ + + + https://coderefinery.org/registration/ + + + https://coderefinery.org/repository/ + + + https://coderefinery.org/see-also/other-lessons/ + + + https://coderefinery.org/see-also/other-projects/ + + + https://coderefinery.org/workshops/ + + + https://coderefinery.org/workshops/past/ + + + https://coderefinery.org/workshops/request/ + + + https://coderefinery.org/workshops/teaching-style/ + + + https://coderefinery.org/workshops/upcoming/ + 2022-12-06 + + diff --git a/branch/rkdarst--open-source-courses/style.css b/branch/rkdarst--open-source-courses/style.css new file mode 100644 index 000000000..c53ceed0d --- /dev/null +++ b/branch/rkdarst--open-source-courses/style.css @@ -0,0 +1 @@ +@import url("https://fonts.googleapis.com/css2?family=Roboto&display=swap");html{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:16px;font-weight:normal;line-height:1.5;-webkit-text-size-adjust:100%;background:#fff;color:#666}body{margin:0}a,.uk-link{color:#1e87f0;text-decoration:none;cursor:pointer}a:hover,.uk-link:hover,.uk-link-toggle:hover .uk-link{color:#0f6ecd;text-decoration:underline}abbr[title]{text-decoration:underline dotted;-webkit-text-decoration-style:dotted}b,strong{font-weight:bolder}:not(pre)>code,:not(pre)>kbd,:not(pre)>samp{font-family:Consolas,monaco,monospace;font-size:.875rem;color:#f0506e;white-space:nowrap;padding:2px 6px;background:#f8f8f8}em{color:#f0506e}ins{background:#ffd;color:#666;text-decoration:none}mark{background:#ffd;color:#666}q{font-style:italic}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}audio,canvas,iframe,img,svg,video{vertical-align:middle}canvas,img,svg,video{max-width:100%;height:auto;box-sizing:border-box}img:not([src]){visibility:hidden;min-width:1px}iframe{border:0}p,ul,ol,dl,pre,address,fieldset,figure{margin:0 0 20px 0}*+p,*+ul,*+ol,*+dl,*+pre,*+address,*+fieldset,*+figure{margin-top:20px}h1,.uk-h1,h2,.uk-h2,.markdown h1,h3,.uk-h3,.markdown h2,h4,.uk-h4,.markdown h3,h5,.uk-h5,h6,.uk-h6,.uk-heading-small,.uk-heading-medium,.uk-heading-large,.uk-heading-xlarge,.uk-heading-2xlarge{margin:0 0 20px 0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-weight:normal;color:#333;text-transform:none}*+h1,*+.uk-h1,*+h2,*+.uk-h2,.markdown *+h1,*+h3,*+.uk-h3,.markdown *+h2,*+h4,*+.uk-h4,.markdown *+h3,*+h5,*+.uk-h5,*+h6,*+.uk-h6,*+.uk-heading-small,*+.uk-heading-medium,*+.uk-heading-large,*+.uk-heading-xlarge,*+.uk-heading-2xlarge{margin-top:40px}h1,.uk-h1{font-size:2.23125rem;line-height:1.2}h2,.uk-h2,.markdown h1{font-size:1.7rem;line-height:1.3}h3,.uk-h3,.markdown h2{font-size:1.5rem;line-height:1.4}h4,.uk-h4,.markdown h3{font-size:1.25rem;line-height:1.4}h5,.uk-h5{font-size:16px;line-height:1.4}h6,.uk-h6{font-size:.875rem;line-height:1.4}@media (min-width: 960px){h1,.uk-h1{font-size:2.625rem}h2,.uk-h2,.markdown h1{font-size:2rem}}ul,ol{padding-left:30px}ul>li>ul,ul>li>ol,ol>li>ol,ol>li>ul{margin:0}dt{font-weight:bold}dd{margin-left:0}hr,.uk-hr{overflow:visible;text-align:inherit;margin:0 0 20px 0;border:0;border-top:1px solid #e5e5e5}*+hr,*+.uk-hr{margin-top:20px}address{font-style:normal}blockquote{margin:0 0 20px 0;font-size:1.25rem;line-height:1.5;font-style:italic;color:#333}*+blockquote{margin-top:20px}blockquote p:last-of-type{margin-bottom:0}blockquote footer{margin-top:10px;font-size:.875rem;line-height:1.5;color:#666}blockquote footer::before{content:"— "}pre{font:.875rem / 1.5 Consolas,monaco,monospace;color:#666;-moz-tab-size:4;tab-size:4;overflow:auto;padding:10px;border:1px solid #e5e5e5;border-radius:3px;background:#fff}pre code{font-family:Consolas,monaco,monospace}:focus{outline:none}:focus-visible{outline:2px dotted #333}::selection{background:#39f;color:#fff;text-shadow:none}details,main{display:block}summary{display:list-item}template{display:none}:root{--uk-breakpoint-s: 640px;--uk-breakpoint-m: 960px;--uk-breakpoint-l: 1200px;--uk-breakpoint-xl: 1600px}a.uk-link-muted,.uk-link-muted a,.uk-link-toggle .uk-link-muted{color:#999}a.uk-link-muted:hover,.uk-link-muted a:hover,.uk-link-toggle:hover .uk-link-muted{color:#666}a.uk-link-text,.uk-link-text a,.uk-link-toggle .uk-link-text{color:inherit}a.uk-link-text:hover,.uk-link-text a:hover,.uk-link-toggle:hover .uk-link-text{color:#999}a.uk-link-heading,.uk-link-heading a,.uk-link-toggle .uk-link-heading{color:inherit}a.uk-link-heading:hover,.uk-link-heading a:hover,.uk-link-toggle:hover .uk-link-heading{color:#1e87f0;text-decoration:none}a.uk-link-reset,.uk-link-reset a{color:inherit !important;text-decoration:none !important}.uk-link-toggle{color:inherit !important;text-decoration:none !important}.uk-heading-small{font-size:2.6rem;line-height:1.2}.uk-heading-medium{font-size:2.8875rem;line-height:1.1}.uk-heading-large{font-size:3.4rem;line-height:1.1}.uk-heading-xlarge{font-size:4rem;line-height:1}.uk-heading-2xlarge{font-size:6rem;line-height:1}@media (min-width: 960px){.uk-heading-small{font-size:3.25rem}.uk-heading-medium{font-size:3.5rem}.uk-heading-large{font-size:4rem}.uk-heading-xlarge{font-size:6rem}.uk-heading-2xlarge{font-size:8rem}}@media (min-width: 1200px){.uk-heading-medium{font-size:4rem}.uk-heading-large{font-size:6rem}.uk-heading-xlarge{font-size:8rem}.uk-heading-2xlarge{font-size:11rem}}.uk-heading-divider{padding-bottom:calc(5px + 0.1em);border-bottom:calc(0.2px + 0.05em) solid #e5e5e5}.uk-heading-bullet{position:relative}.uk-heading-bullet::before{content:"";display:inline-block;position:relative;top:calc(-0.1 * 1em);vertical-align:middle;height:calc(4px + 0.7em);margin-right:calc(5px + 0.2em);border-left:calc(5px + 0.1em) solid #e5e5e5}.uk-heading-line{overflow:hidden}.uk-heading-line>*{display:inline-block;position:relative}.uk-heading-line>::before,.uk-heading-line>::after{content:"";position:absolute;top:calc(50% - (calc(0.2px + 0.05em) / 2));width:2000px;border-bottom:calc(0.2px + 0.05em) solid #e5e5e5}.uk-heading-line>::before{right:100%;margin-right:calc(5px + 0.3em)}.uk-heading-line>::after{left:100%;margin-left:calc(5px + 0.3em)}[class*='uk-divider']{border:none;margin-bottom:20px}*+[class*='uk-divider']{margin-top:20px}.uk-divider-icon{position:relative;height:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22%23e5e5e5%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");background-repeat:no-repeat;background-position:50% 50%}.uk-divider-icon::before,.uk-divider-icon::after{content:"";position:absolute;top:50%;max-width:calc(50% - (50px / 2));border-bottom:1px solid #e5e5e5}.uk-divider-icon::before{right:calc(50% + (50px / 2));width:100%}.uk-divider-icon::after{left:calc(50% + (50px / 2));width:100%}.uk-divider-small{line-height:0}.uk-divider-small::after{content:"";display:inline-block;width:100px;max-width:100%;border-top:1px solid #e5e5e5;vertical-align:top}.uk-divider-vertical{width:max-content;height:100px;margin-left:auto;margin-right:auto;border-left:1px solid #e5e5e5}.uk-list,.markdown ul{padding:0;list-style:none}.uk-list>*,.markdown ul>*{break-inside:avoid-column}.uk-list>*>:last-child,.markdown ul>*>:last-child{margin-bottom:0}.uk-list>:nth-child(n+2),.markdown ul>:nth-child(n+2),.uk-list>*>ul,.markdown ul>*>ul{margin-top:10px}.uk-list-disc>*,.uk-list-circle>*,.uk-list-square>*,.markdown ul>*,.uk-list-decimal>*,.uk-list-hyphen>*{padding-left:30px}.uk-list-decimal{counter-reset:decimal}.uk-list-decimal>*{counter-increment:decimal}.uk-list-disc>::before,.uk-list-circle>::before,.uk-list-square>::before,.markdown ul>::before,.uk-list-decimal>::before,.uk-list-hyphen>::before{content:"";position:relative;left:-30px;width:30px;height:1.5em;margin-bottom:-1.5em;display:list-item;list-style-position:inside;text-align:right}.uk-list-disc>::before{list-style-type:disc}.uk-list-circle>::before{list-style-type:circle}.uk-list-square>::before,.markdown ul>::before{list-style-type:square}.uk-list-decimal>::before{content:counter(decimal, decimal) " . "}.uk-list-hyphen>::before{content:'–\00A0\00A0'}.uk-list-muted>::before{color:#999 !important}.uk-list-emphasis>::before{color:#333 !important}.uk-list-primary>::before{color:#1e87f0 !important}.uk-list-secondary>::before{color:#222 !important}.uk-list-bullet>*{padding-left:30px}.uk-list-bullet>::before{content:"";display:list-item;position:relative;left:-30px;width:30px;height:1.5em;margin-bottom:-1.5em;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23666%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%}.uk-list-divider>:nth-child(n+2){margin-top:10px;padding-top:10px;border-top:1px solid #e5e5e5}.uk-list-striped>*{padding:10px 10px}.uk-list-striped>*:nth-of-type(odd){border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5}.uk-list-striped>:nth-of-type(odd){background:#f8f8f8}.uk-list-striped>:nth-child(n+2){margin-top:0}.uk-list-large>:nth-child(n+2),.uk-list-large>*>ul{margin-top:20px}.uk-list-collapse>:nth-child(n+2),.uk-list-collapse>*>ul{margin-top:0}.uk-list-large.uk-list-divider>:nth-child(n+2){margin-top:20px;padding-top:20px}.uk-list-collapse.uk-list-divider>:nth-child(n+2){margin-top:0;padding-top:0}.uk-list-large.uk-list-striped>*{padding:20px 10px}.uk-list-collapse.uk-list-striped>*{padding-top:0;padding-bottom:0}.uk-list-large.uk-list-striped>:nth-child(n+2),.uk-list-collapse.uk-list-striped>:nth-child(n+2){margin-top:0}.uk-description-list>dt{color:#333;font-size:.875rem;font-weight:normal;text-transform:uppercase}.uk-description-list>dt:nth-child(n+2){margin-top:20px}.uk-description-list-divider>dt:nth-child(n+2){margin-top:20px;padding-top:20px;border-top:1px solid #e5e5e5}.uk-table{border-collapse:collapse;border-spacing:0;width:100%;margin-bottom:20px}*+.uk-table{margin-top:20px}.uk-table th{padding:16px 12px;text-align:left;vertical-align:bottom;font-size:.875rem;font-weight:normal;color:#999;text-transform:uppercase}.uk-table td{padding:16px 12px;vertical-align:top}.uk-table td>:last-child{margin-bottom:0}.uk-table tfoot{font-size:.875rem}.uk-table caption{font-size:.875rem;text-align:left;color:#999}.uk-table-middle,.uk-table-middle td{vertical-align:middle !important}.uk-table-divider>tr:not(:first-child),.uk-table-divider>:not(:first-child)>tr,.uk-table-divider>:first-child>tr:not(:first-child){border-top:1px solid #e5e5e5}.uk-table-striped>tr:nth-of-type(odd),.uk-table-striped tbody tr:nth-of-type(odd){background:#f8f8f8;border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5}.uk-table-hover>tr:hover,.uk-table-hover tbody tr:hover{background:#ffd}.uk-table>tr.uk-active,.uk-table tbody tr.uk-active{background:#ffd}.uk-table-small th,.uk-table-small td{padding:10px 12px}.uk-table-large th,.uk-table-large td{padding:22px 12px}.uk-table-justify th:first-child,.uk-table-justify td:first-child{padding-left:0}.uk-table-justify th:last-child,.uk-table-justify td:last-child{padding-right:0}.uk-table-shrink{width:1px}.uk-table-expand{min-width:150px}.uk-table-link{padding:0 !important}.uk-table-link>a{display:block;padding:16px 12px}.uk-table-small .uk-table-link>a{padding:10px 12px}@media (max-width: 959px){.uk-table-responsive,.uk-table-responsive tbody,.uk-table-responsive th,.uk-table-responsive td,.uk-table-responsive tr{display:block}.uk-table-responsive thead{display:none}.uk-table-responsive th,.uk-table-responsive td{width:auto !important;max-width:none !important;min-width:0 !important;overflow:visible !important;white-space:normal !important}.uk-table-responsive th:not(:first-child):not(.uk-table-link),.uk-table-responsive td:not(:first-child):not(.uk-table-link),.uk-table-responsive .uk-table-link:not(:first-child)>a{padding-top:5px !important}.uk-table-responsive th:not(:last-child):not(.uk-table-link),.uk-table-responsive td:not(:last-child):not(.uk-table-link),.uk-table-responsive .uk-table-link:not(:last-child)>a{padding-bottom:5px !important}.uk-table-justify.uk-table-responsive th,.uk-table-justify.uk-table-responsive td{padding-left:0;padding-right:0}}.uk-table tbody tr{transition:background-color 0.1s linear}.uk-table-striped>tr:nth-of-type(even):last-child,.uk-table-striped tbody tr:nth-of-type(even):last-child{border-bottom:1px solid #e5e5e5}.uk-icon{margin:0;border:none;border-radius:0;overflow:visible;font:inherit;color:inherit;text-transform:none;padding:0;background-color:transparent;display:inline-block;fill:currentcolor;line-height:0}button.uk-icon:not(:disabled){cursor:pointer}.uk-icon::-moz-focus-inner{border:0;padding:0}.uk-icon:not(.uk-preserve) [fill*='#']:not(.uk-preserve){fill:currentcolor}.uk-icon:not(.uk-preserve) [stroke*='#']:not(.uk-preserve){stroke:currentcolor}.uk-icon>*{transform:translate(0, 0)}.uk-icon-image{width:20px;height:20px;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;vertical-align:middle;object-fit:scale-down;max-width:none}.uk-icon-link{color:#999;text-decoration:none !important}.uk-icon-link:hover{color:#666}.uk-icon-link:active,.uk-active>.uk-icon-link{color:#595959}.uk-icon-button{box-sizing:border-box;width:36px;height:36px;border-radius:500px;background:#f8f8f8;color:#999;vertical-align:middle;display:inline-flex;justify-content:center;align-items:center;transition:0.1s ease-in-out;transition-property:color, background-color}.uk-icon-button:hover{background-color:#ebebeb;color:#666}.uk-icon-button:active,.uk-active>.uk-icon-button{background-color:#dfdfdf;color:#666}.uk-range{-webkit-appearance:none;box-sizing:border-box;margin:0;vertical-align:middle;max-width:100%;width:100%;background:transparent}.uk-range:focus{outline:none}.uk-range::-moz-focus-outer{border:none}.uk-range:not(:disabled)::-webkit-slider-thumb{cursor:pointer}.uk-range:not(:disabled)::-moz-range-thumb{cursor:pointer}.uk-range::-webkit-slider-runnable-track{height:3px;background:#ebebeb;border-radius:500px}.uk-range:focus::-webkit-slider-runnable-track,.uk-range:active::-webkit-slider-runnable-track{background:#dfdfdf}.uk-range::-moz-range-track{height:3px;background:#ebebeb;border-radius:500px}.uk-range:focus::-moz-range-track{background:#dfdfdf}.uk-range::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-7px;height:15px;width:15px;border-radius:500px;background:#fff;border:1px solid #ccc}.uk-range::-moz-range-thumb{border:none;height:15px;width:15px;margin-top:-7px;border-radius:500px;background:#fff;border:1px solid #ccc}.uk-input,.uk-select,.uk-textarea,.uk-radio,.uk-checkbox{box-sizing:border-box;margin:0;border-radius:0;font:inherit}.uk-input{overflow:visible}.uk-select{text-transform:none}.uk-select optgroup{font:inherit;font-weight:bold}.uk-textarea{overflow:auto}.uk-input[type="search"]::-webkit-search-cancel-button,.uk-input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}.uk-input[type="number"]::-webkit-inner-spin-button,.uk-input[type="number"]::-webkit-outer-spin-button{height:auto}.uk-input::-moz-placeholder,.uk-textarea::-moz-placeholder{opacity:1}.uk-radio:not(:disabled),.uk-checkbox:not(:disabled){cursor:pointer}.uk-fieldset{border:none;margin:0;padding:0}.uk-input,.uk-textarea{-webkit-appearance:none}.uk-input,.uk-select,.uk-textarea{max-width:100%;width:100%;border:0 none;padding:0 10px;background:#fff;color:#666;border:1px solid #e5e5e5;transition:0.2s ease-in-out;transition-property:color, background-color, border}.uk-input,.uk-select:not([multiple]):not([size]){height:40px;vertical-align:middle;display:inline-block}.uk-input:not(input),.uk-select:not(select){line-height:38px}.uk-select[multiple],.uk-select[size],.uk-textarea{padding-top:6px;padding-bottom:6px;vertical-align:top}.uk-select[multiple],.uk-select[size]{resize:vertical}.uk-input:focus,.uk-select:focus,.uk-textarea:focus{outline:none;background-color:#fff;color:#666;border-color:#1e87f0}.uk-input:disabled,.uk-select:disabled,.uk-textarea:disabled{background-color:#f8f8f8;color:#999;border-color:#e5e5e5}.uk-input::placeholder{color:#999}.uk-textarea::placeholder{color:#999}.uk-form-small{font-size:.875rem}.uk-form-small:not(textarea):not([multiple]):not([size]){height:30px;padding-left:8px;padding-right:8px}textarea.uk-form-small,.uk-form-small[multiple],.uk-form-small[size]{padding:5px 8px}.uk-form-small:not(select):not(input):not(textarea){line-height:28px}.uk-form-large{font-size:1.25rem}.uk-form-large:not(textarea):not([multiple]):not([size]){height:55px;padding-left:12px;padding-right:12px}textarea.uk-form-large,.uk-form-large[multiple],.uk-form-large[size]{padding:7px 12px}.uk-form-large:not(select):not(input):not(textarea){line-height:53px}.uk-form-danger,.uk-form-danger:focus{color:#f0506e;border-color:#f0506e}.uk-form-success,.uk-form-success:focus{color:#32d296;border-color:#32d296}.uk-form-blank{background:none;border-color:transparent}.uk-form-blank:focus{border-color:#e5e5e5;border-style:solid}input.uk-form-width-xsmall{width:50px}select.uk-form-width-xsmall{width:75px}.uk-form-width-small{width:130px}.uk-form-width-medium{width:200px}.uk-form-width-large{width:500px}.uk-select:not([multiple]):not([size]){-webkit-appearance:none;-moz-appearance:none;padding-right:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");background-repeat:no-repeat;background-position:100% 50%}.uk-select:not([multiple]):not([size]) option{color:#666}.uk-select:not([multiple]):not([size]):disabled{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-input[list]{padding-right:20px;background-repeat:no-repeat;background-position:100% 50%}.uk-input[list]:hover,.uk-input[list]:focus{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2012%208%206%2016%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-input[list]::-webkit-calendar-picker-indicator{display:none !important}.uk-radio,.uk-checkbox{display:inline-block;height:16px;width:16px;overflow:hidden;margin-top:-4px;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;background-color:rgba(0,0,0,0);background-repeat:no-repeat;background-position:50% 50%;border:1px solid #ccc;transition:0.2s ease-in-out;transition-property:background-color, border}.uk-radio{border-radius:50%}.uk-radio:focus,.uk-checkbox:focus{background-color:rgba(0,0,0,0);outline:none;border-color:#1e87f0}.uk-radio:checked,.uk-checkbox:checked,.uk-checkbox:indeterminate{background-color:#1e87f0;border-color:rgba(0,0,0,0)}.uk-radio:checked:focus,.uk-checkbox:checked:focus,.uk-checkbox:indeterminate:focus{background-color:#0e6ecd}.uk-radio:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23fff%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23fff%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-checkbox:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23fff%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-radio:disabled,.uk-checkbox:disabled{background-color:#f8f8f8;border-color:#e5e5e5}.uk-radio:disabled:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23999%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:disabled:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-checkbox:disabled:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23999%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-legend{width:100%;color:inherit;padding:0;font-size:1.5rem;line-height:1.4}.uk-form-custom{display:inline-block;position:relative;max-width:100%;vertical-align:middle}.uk-form-custom select,.uk-form-custom input[type="file"]{position:absolute;top:0;z-index:1;width:100%;height:100%;left:0;-webkit-appearance:none;opacity:0;cursor:pointer}.uk-form-custom input[type="file"]{font-size:500px;overflow:hidden}.uk-form-label{color:#333;font-size:.875rem}.uk-form-stacked .uk-form-label{display:block;margin-bottom:5px}@media (max-width: 959px){.uk-form-horizontal .uk-form-label{display:block;margin-bottom:5px}}@media (min-width: 960px){.uk-form-horizontal .uk-form-label{width:200px;margin-top:7px;float:left}.uk-form-horizontal .uk-form-controls{margin-left:215px}.uk-form-horizontal .uk-form-controls-text{padding-top:7px}}.uk-form-icon{position:absolute;top:0;bottom:0;left:0;width:40px;display:inline-flex;justify-content:center;align-items:center;color:#999}.uk-form-icon:hover{color:#666}.uk-form-icon:not(a):not(button):not(input){pointer-events:none}.uk-form-icon:not(.uk-form-icon-flip)~.uk-input{padding-left:40px !important}.uk-form-icon-flip{right:0;left:auto}.uk-form-icon-flip~.uk-input{padding-right:40px !important}.uk-button{margin:0;border:none;overflow:visible;font:inherit;color:inherit;text-transform:none;-webkit-appearance:none;border-radius:0;display:inline-block;box-sizing:border-box;padding:0 30px;vertical-align:middle;font-size:.875rem;line-height:38px;text-align:center;text-decoration:none;text-transform:uppercase;transition:0.1s ease-in-out;transition-property:color, background-color, border-color}.uk-button:not(:disabled){cursor:pointer}.uk-button::-moz-focus-inner{border:0;padding:0}.uk-button:hover{text-decoration:none}.uk-button-default{background-color:rgba(0,0,0,0);color:#333;border:1px solid #e5e5e5}.uk-button-default:hover{background-color:rgba(0,0,0,0);color:#333;border-color:#b2b2b2}.uk-button-default:active,.uk-button-default.uk-active{background-color:rgba(0,0,0,0);color:#333;border-color:#999}.uk-button-primary{background-color:#1e87f0;color:#fff;border:1px solid transparent}.uk-button-primary:hover{background-color:#0f7ae5;color:#fff}.uk-button-primary:active,.uk-button-primary.uk-active{background-color:#0e6ecd;color:#fff}.uk-button-secondary{background-color:#222;color:#fff;border:1px solid transparent}.uk-button-secondary:hover{background-color:#151515;color:#fff}.uk-button-secondary:active,.uk-button-secondary.uk-active{background-color:#090909;color:#fff}.uk-button-danger{background-color:#f0506e;color:#fff;border:1px solid transparent}.uk-button-danger:hover{background-color:#ee395b;color:#fff}.uk-button-danger:active,.uk-button-danger.uk-active{background-color:#ec2147;color:#fff}.uk-button-default:disabled,.uk-button-primary:disabled,.uk-button-secondary:disabled,.uk-button-danger:disabled{background-color:rgba(0,0,0,0);color:#999;border-color:#e5e5e5}.uk-button-small{padding:0 15px;line-height:28px;font-size:.875rem}.uk-button-large{padding:0 40px;line-height:53px;font-size:.875rem}.uk-button-text{padding:0;line-height:1.5;background:none;color:#333;position:relative}.uk-button-text::before{content:"";position:absolute;bottom:0;left:0;right:100%;border-bottom:1px solid #333;transition:right 0.3s ease-out}.uk-button-text:hover{color:#333}.uk-button-text:hover::before{right:0}.uk-button-text:disabled{color:#999}.uk-button-text:disabled::before{display:none}.uk-button-link{padding:0;line-height:1.5;background:none;color:#333}.uk-button-link:hover{color:#999;text-decoration:none}.uk-button-link:disabled{color:#999;text-decoration:none}.uk-button-group{display:inline-flex;vertical-align:middle;position:relative}.uk-button-group>.uk-button:nth-child(n+2),.uk-button-group>div:nth-child(n+2) .uk-button{margin-left:-1px}.uk-button-group .uk-button:hover,.uk-button-group .uk-button:active,.uk-button-group .uk-button.uk-active{position:relative;z-index:1}.uk-progress{vertical-align:baseline;display:block;width:100%;border:0;background-color:#f8f8f8;margin-bottom:20px;height:15px;border-radius:500px;overflow:hidden}*+.uk-progress{margin-top:20px}.uk-progress::-webkit-progress-bar{background-color:transparent}.uk-progress::-webkit-progress-value{background-color:#1e87f0;transition:width 0.6s ease}.uk-progress::-moz-progress-bar{background-color:#1e87f0;transition:width 0.6s ease}.uk-section{display:flow-root;box-sizing:border-box;padding-top:40px;padding-bottom:40px}@media (min-width: 960px){.uk-section{padding-top:70px;padding-bottom:70px}}.uk-section>:last-child{margin-bottom:0}.uk-section-xsmall{padding-top:20px;padding-bottom:20px}.uk-section-small{padding-top:40px;padding-bottom:40px}.uk-section-large{padding-top:70px;padding-bottom:70px}@media (min-width: 960px){.uk-section-large{padding-top:140px;padding-bottom:140px}}.uk-section-xlarge{padding-top:140px;padding-bottom:140px}@media (min-width: 960px){.uk-section-xlarge{padding-top:210px;padding-bottom:210px}}.uk-section-default{background:#fff}.uk-section-muted{background:#f8f8f8}.uk-section-primary{background:#1e87f0}.uk-section-secondary{background:#222}.uk-container{display:flow-root;box-sizing:content-box;max-width:1200px;margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}@media (min-width: 640px){.uk-container{padding-left:30px;padding-right:30px}}@media (min-width: 960px){.uk-container{padding-left:40px;padding-right:40px}}.uk-container>:last-child{margin-bottom:0}.uk-container .uk-container{padding-left:0;padding-right:0}.uk-container-xsmall{max-width:750px}.uk-container-small{max-width:900px}.uk-container-large{max-width:1400px}.uk-container-xlarge{max-width:1600px}.uk-container-expand{max-width:none}.uk-container-expand-left{margin-left:0}.uk-container-expand-right{margin-right:0}@media (min-width: 640px){.uk-container-expand-left.uk-container-xsmall,.uk-container-expand-right.uk-container-xsmall{max-width:calc(50% + (750px / 2) - 30px)}.uk-container-expand-left.uk-container-small,.uk-container-expand-right.uk-container-small{max-width:calc(50% + (900px / 2) - 30px)}}@media (min-width: 960px){.uk-container-expand-left,.uk-container-expand-right{max-width:calc(50% + (1200px / 2) - 40px)}.uk-container-expand-left.uk-container-xsmall,.uk-container-expand-right.uk-container-xsmall{max-width:calc(50% + (750px / 2) - 40px)}.uk-container-expand-left.uk-container-small,.uk-container-expand-right.uk-container-small{max-width:calc(50% + (900px / 2) - 40px)}.uk-container-expand-left.uk-container-large,.uk-container-expand-right.uk-container-large{max-width:calc(50% + (1400px / 2) - 40px)}.uk-container-expand-left.uk-container-xlarge,.uk-container-expand-right.uk-container-xlarge{max-width:calc(50% + (1600px / 2) - 40px)}}.uk-container-item-padding-remove-left,.uk-container-item-padding-remove-right{width:calc(100% + 15px)}.uk-container-item-padding-remove-left{margin-left:-15px}.uk-container-item-padding-remove-right{margin-right:-15px}@media (min-width: 640px){.uk-container-item-padding-remove-left,.uk-container-item-padding-remove-right{width:calc(100% + 30px)}.uk-container-item-padding-remove-left{margin-left:-30px}.uk-container-item-padding-remove-right{margin-right:-30px}}@media (min-width: 960px){.uk-container-item-padding-remove-left,.uk-container-item-padding-remove-right{width:calc(100% + 40px)}.uk-container-item-padding-remove-left{margin-left:-40px}.uk-container-item-padding-remove-right{margin-right:-40px}}.uk-tile{display:flow-root;position:relative;box-sizing:border-box;padding-left:15px;padding-right:15px;padding-top:40px;padding-bottom:40px}@media (min-width: 640px){.uk-tile{padding-left:30px;padding-right:30px}}@media (min-width: 960px){.uk-tile{padding-left:40px;padding-right:40px;padding-top:70px;padding-bottom:70px}}.uk-tile>:last-child{margin-bottom:0}.uk-tile-xsmall{padding-top:20px;padding-bottom:20px}.uk-tile-small{padding-top:40px;padding-bottom:40px}.uk-tile-large{padding-top:70px;padding-bottom:70px}@media (min-width: 960px){.uk-tile-large{padding-top:140px;padding-bottom:140px}}.uk-tile-xlarge{padding-top:140px;padding-bottom:140px}@media (min-width: 960px){.uk-tile-xlarge{padding-top:210px;padding-bottom:210px}}.uk-tile-default{background-color:#fff}.uk-tile-muted{background-color:#f8f8f8}.uk-tile-primary{background-color:#1e87f0}.uk-tile-secondary{background-color:#222}.uk-card{position:relative;box-sizing:border-box;transition:box-shadow 0.1s ease-in-out}.uk-card-body{display:flow-root;padding:30px 30px}.uk-card-header{display:flow-root;padding:15px 30px}.uk-card-footer{display:flow-root;padding:15px 30px}@media (min-width: 1200px){.uk-card-body{padding:40px 40px}.uk-card-header{padding:20px 40px}.uk-card-footer{padding:20px 40px}}.uk-card-body>:last-child,.uk-card-header>:last-child,.uk-card-footer>:last-child{margin-bottom:0}.uk-card-title{font-size:1.5rem;line-height:1.4}.uk-card-badge{position:absolute;top:15px;right:15px;z-index:1;height:22px;padding:0 10px;background:#1e87f0;color:#fff;font-size:.875rem;display:flex;justify-content:center;align-items:center;line-height:0;border-radius:2px;text-transform:uppercase}.uk-card-badge:first-child+*{margin-top:0}.uk-card-hover:not(.uk-card-default):not(.uk-card-primary):not(.uk-card-secondary):hover{background-color:#fff;box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-card-default{background-color:#fff;color:#666;box-shadow:0 5px 15px rgba(0,0,0,0.08)}.uk-card-default .uk-card-title{color:#333}.uk-card-default.uk-card-hover:hover{background-color:#fff;box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-card-default .uk-card-header{border-bottom:1px solid #e5e5e5}.uk-card-default .uk-card-footer{border-top:1px solid #e5e5e5}.uk-card-primary{background-color:#1e87f0;color:#fff;box-shadow:0 5px 15px rgba(0,0,0,0.08)}.uk-card-primary .uk-card-title{color:#fff}.uk-card-primary.uk-card-hover:hover{background-color:#1e87f0;box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-card-secondary{background-color:#222;color:#fff;box-shadow:0 5px 15px rgba(0,0,0,0.08)}.uk-card-secondary .uk-card-title{color:#fff}.uk-card-secondary.uk-card-hover:hover{background-color:#222;box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-card-small.uk-card-body,.uk-card-small .uk-card-body{padding:20px 20px}.uk-card-small .uk-card-header{padding:13px 20px}.uk-card-small .uk-card-footer{padding:13px 20px}@media (min-width: 1200px){.uk-card-large.uk-card-body,.uk-card-large .uk-card-body{padding:70px 70px}.uk-card-large .uk-card-header{padding:35px 70px}.uk-card-large .uk-card-footer{padding:35px 70px}}.uk-card-body>.uk-nav-default{margin-left:-30px;margin-right:-30px}.uk-card-body>.uk-nav-default:only-child{margin-top:-15px;margin-bottom:-15px}.uk-card-body>.uk-nav-default>li>a,.uk-card-body>.uk-nav-default .uk-nav-header,.uk-card-body>.uk-nav-default .uk-nav-divider{padding-left:30px;padding-right:30px}.uk-card-body>.uk-nav-default .uk-nav-sub{padding-left:45px}@media (min-width: 1200px){.uk-card-body>.uk-nav-default{margin-left:-40px;margin-right:-40px}.uk-card-body>.uk-nav-default:only-child{margin-top:-25px;margin-bottom:-25px}.uk-card-body>.uk-nav-default>li>a,.uk-card-body>.uk-nav-default .uk-nav-header,.uk-card-body>.uk-nav-default .uk-nav-divider{padding-left:40px;padding-right:40px}.uk-card-body>.uk-nav-default .uk-nav-sub{padding-left:55px}}.uk-card-small>.uk-nav-default{margin-left:-20px;margin-right:-20px}.uk-card-small>.uk-nav-default:only-child{margin-top:-5px;margin-bottom:-5px}.uk-card-small>.uk-nav-default>li>a,.uk-card-small>.uk-nav-default .uk-nav-header,.uk-card-small>.uk-nav-default .uk-nav-divider{padding-left:20px;padding-right:20px}.uk-card-small>.uk-nav-default .uk-nav-sub{padding-left:35px}@media (min-width: 1200px){.uk-card-large>.uk-nav-default{margin:0}.uk-card-large>.uk-nav-default:only-child{margin:0}.uk-card-large>.uk-nav-default>li>a,.uk-card-large>.uk-nav-default .uk-nav-header,.uk-card-large>.uk-nav-default .uk-nav-divider{padding-left:0;padding-right:0}.uk-card-large>.uk-nav-default .uk-nav-sub{padding-left:15px}}.uk-close{color:#999;transition:0.1s ease-in-out;transition-property:color, opacity}.uk-close:hover{color:#666}.uk-spinner>*{animation:uk-spinner-rotate 1.4s linear infinite}@keyframes uk-spinner-rotate{0%{transform:rotate(0deg)}100%{transform:rotate(270deg)}}.uk-spinner>*>*{stroke-dasharray:88px;stroke-dashoffset:0;transform-origin:center;animation:uk-spinner-dash 1.4s ease-in-out infinite;stroke-width:1;stroke-linecap:round}@keyframes uk-spinner-dash{0%{stroke-dashoffset:88px}50%{stroke-dashoffset:22px;transform:rotate(135deg)}100%{stroke-dashoffset:88px;transform:rotate(450deg)}}.uk-totop{padding:5px;color:#999;transition:color 0.1s ease-in-out}.uk-totop:hover{color:#666}.uk-totop:active{color:#333}.uk-marker{padding:5px;background:#222;color:#fff;border-radius:500px}.uk-marker:hover{color:#fff}.uk-alert{position:relative;margin-bottom:20px;padding:15px 29px 15px 15px;background:#f8f8f8;color:#666}*+.uk-alert{margin-top:20px}.uk-alert>:last-child{margin-bottom:0}.uk-alert-close{position:absolute;top:20px;right:15px;color:inherit;opacity:.4}.uk-alert-close:first-child+*{margin-top:0}.uk-alert-close:hover{color:inherit;opacity:.8}.uk-alert-primary{background:#d8eafc;color:#1e87f0}.uk-alert-success{background:#edfbf6;color:#32d296}.uk-alert-warning{background:#fef5ee;color:#faa05a}.uk-alert-danger{background:#fef4f6;color:#f0506e}.uk-alert h1,.uk-alert h2,.uk-alert h3,.uk-alert h4,.uk-alert h5,.uk-alert h6{color:inherit}.uk-alert a:not([class]){color:inherit;text-decoration:underline}.uk-alert a:not([class]):hover{color:inherit;text-decoration:underline}.uk-placeholder{margin-bottom:20px;padding:30px 30px;background:rgba(0,0,0,0);border:1px dashed #e5e5e5}*+.uk-placeholder{margin-top:20px}.uk-placeholder>:last-child{margin-bottom:0}.uk-badge{box-sizing:border-box;min-width:18px;height:18px;padding:0 5px;border-radius:500px;vertical-align:middle;background:#1e87f0;color:#fff !important;font-size:11px;display:inline-flex;justify-content:center;align-items:center;line-height:0}.uk-badge:hover{text-decoration:none}.uk-label{display:inline-block;padding:0 10px;background:#1e87f0;line-height:1.5;font-size:.875rem;color:#fff;vertical-align:middle;white-space:nowrap;border-radius:2px;text-transform:uppercase}.uk-label-success{background-color:#32d296;color:#fff}.uk-label-warning{background-color:#faa05a;color:#fff}.uk-label-danger{background-color:#f0506e;color:#fff}.uk-overlay{padding:30px 30px}.uk-overlay>:last-child{margin-bottom:0}.uk-overlay-default{background:rgba(255,255,255,0.8)}.uk-overlay-primary{background:rgba(34,34,34,0.8)}.uk-article{display:flow-root}.uk-article>:last-child{margin-bottom:0}.uk-article+.uk-article{margin-top:70px}.uk-article-title{font-size:2.23125rem;line-height:1.2}@media (min-width: 960px){.uk-article-title{font-size:2.625rem}}.uk-article-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-article-meta a{color:#999}.uk-article-meta a:hover{color:#666;text-decoration:none}.uk-comment-body{display:flow-root;overflow-wrap:break-word;word-wrap:break-word}.uk-comment-header{display:flow-root;margin-bottom:20px}.uk-comment-body>:last-child,.uk-comment-header>:last-child{margin-bottom:0}.uk-comment-title{font-size:1.25rem;line-height:1.4}.uk-comment-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-comment-list{padding:0;list-style:none}.uk-comment-list>:nth-child(n+2){margin-top:70px}.uk-comment-list .uk-comment~ul{margin:70px 0 0 0;padding-left:30px;list-style:none}@media (min-width: 960px){.uk-comment-list .uk-comment~ul{padding-left:100px}}.uk-comment-list .uk-comment~ul>:nth-child(n+2){margin-top:70px}.uk-comment-primary{padding:30px;background-color:#f8f8f8}.uk-search{display:inline-block;position:relative;max-width:100%;margin:0}.uk-search-input::-webkit-search-cancel-button,.uk-search-input::-webkit-search-decoration{-webkit-appearance:none}.uk-search-input::-moz-placeholder{opacity:1}.uk-search-input{box-sizing:border-box;margin:0;border-radius:0;font:inherit;overflow:visible;-webkit-appearance:none;vertical-align:middle;width:100%;border:none;color:#666}.uk-search-input:focus{outline:none}.uk-search-input::placeholder{color:#999}.uk-search .uk-search-icon{position:absolute;top:0;bottom:0;left:0;display:inline-flex;justify-content:center;align-items:center;color:#999}.uk-search .uk-search-icon:hover{color:#999}.uk-search .uk-search-icon:not(a):not(button):not(input){pointer-events:none}.uk-search .uk-search-icon-flip{right:0;left:auto}.uk-search-default{width:240px}.uk-search-default .uk-search-input{height:40px;padding-left:10px;padding-right:10px;background:rgba(0,0,0,0);border:1px solid #e5e5e5}.uk-search-default .uk-search-input:focus{background-color:rgba(0,0,0,0);border-color:#1e87f0}.uk-search-default .uk-search-icon{width:40px}.uk-search-default .uk-search-icon:not(.uk-search-icon-flip)~.uk-search-input{padding-left:40px}.uk-search-default .uk-search-icon-flip~.uk-search-input{padding-right:40px}.uk-search-navbar{width:400px}.uk-search-navbar .uk-search-input{height:40px;background:rgba(0,0,0,0);font-size:1.5rem}.uk-search-navbar .uk-search-icon{width:40px}.uk-search-navbar .uk-search-icon:not(.uk-search-icon-flip)~.uk-search-input{padding-left:40px}.uk-search-navbar .uk-search-icon-flip~.uk-search-input{padding-right:40px}.uk-search-large{width:500px}.uk-search-large .uk-search-input{height:80px;background:rgba(0,0,0,0);font-size:2.625rem}.uk-search-large .uk-search-icon{width:80px}.uk-search-large .uk-search-icon:not(.uk-search-icon-flip)~.uk-search-input{padding-left:80px}.uk-search-large .uk-search-icon-flip~.uk-search-input{padding-right:80px}.uk-search-toggle{color:#999}.uk-search-toggle:hover{color:#666}.uk-accordion{padding:0;list-style:none}.uk-accordion>:nth-child(n+2){margin-top:20px}.uk-accordion-title{display:block;font-size:1.25rem;line-height:1.4;color:#333;overflow:hidden}.uk-accordion-title::before{content:"";width:1.4em;height:1.4em;margin-left:10px;float:right;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%}.uk-open>.uk-accordion-title::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-accordion-title:hover{color:#666;text-decoration:none}.uk-accordion-content{display:flow-root;margin-top:20px}.uk-accordion-content>:last-child{margin-bottom:0}.uk-drop{display:none;position:absolute;z-index:1020;--uk-position-offset: 20px;--uk-position-viewport-offset: 15px;box-sizing:border-box;width:300px}.uk-drop.uk-open{display:block}.uk-drop-stack .uk-drop-grid>*{width:100% !important}.uk-dropdown{display:none;position:absolute;z-index:1020;--uk-position-offset: 10px;--uk-position-viewport-offset: 15px;box-sizing:border-box;min-width:200px;padding:25px;background:#fff;color:#666;box-shadow:0 5px 12px rgba(0,0,0,0.15)}.uk-dropdown.uk-open{display:block}.uk-dropdown>:last-child{margin-bottom:0}.uk-dropdown-large{padding:40px}.uk-dropdown-nav{font-size:.875rem}.uk-dropdown-nav>li>a{color:#999}.uk-dropdown-nav>li>a:hover,.uk-dropdown-nav>li.uk-active>a{color:#666}.uk-dropdown-nav .uk-nav-subtitle{font-size:12px}.uk-dropdown-nav .uk-nav-header{color:#333}.uk-dropdown-nav .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-dropdown-nav .uk-nav-sub a{color:#999}.uk-dropdown-nav .uk-nav-sub a:hover,.uk-dropdown-nav .uk-nav-sub li.uk-active>a{color:#666}.uk-dropdown-stack .uk-dropdown-grid>*{width:100% !important}.uk-dropbar{--uk-position-offset: 0;--uk-position-shift-offset: 0;--uk-position-viewport-offset: 0;display:none;position:absolute;z-index:1020;box-sizing:border-box;padding:25px 15px 25px 15px;background:#fff;color:#666}.uk-dropbar.uk-open{display:block}.uk-dropbar>:last-child{margin-bottom:0}@media (min-width: 640px){.uk-dropbar{padding-left:30px;padding-right:30px}}@media (min-width: 960px){.uk-dropbar{padding-left:40px;padding-right:40px}}.uk-dropbar-large{padding-top:40px;padding-bottom:40px}.uk-dropbar-top{box-shadow:0 12px 7px -6px rgba(0,0,0,0.05)}.uk-dropbar-bottom{box-shadow:0 -12px 7px -6px rgba(0,0,0,0.05)}.uk-dropbar-left{box-shadow:12px 0 7px -6px rgba(0,0,0,0.05)}.uk-dropbar-right{box-shadow:-12px 0 7px -6px rgba(0,0,0,0.05)}.uk-modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:15px 15px;background:rgba(0,0,0,0.6);opacity:0;transition:opacity 0.15s linear}@media (min-width: 640px){.uk-modal{padding:50px 30px}}@media (min-width: 960px){.uk-modal{padding-left:40px;padding-right:40px}}.uk-modal.uk-open{opacity:1}.uk-modal-page{overflow:hidden}.uk-modal-dialog{position:relative;box-sizing:border-box;margin:0 auto;width:600px;max-width:100% !important;background:#fff;opacity:0;transform:translateY(-100px);transition:0.3s linear;transition-property:opacity, transform}.uk-open>.uk-modal-dialog{opacity:1;transform:translateY(0)}.uk-modal-container .uk-modal-dialog{width:1200px}.uk-modal-full{padding:0;background:none}.uk-modal-full .uk-modal-dialog{margin:0;width:100%;max-width:100%;transform:translateY(0)}.uk-modal-body{display:flow-root;padding:20px 20px}.uk-modal-header{display:flow-root;padding:10px 20px;background:#fff;border-bottom:1px solid #e5e5e5}.uk-modal-footer{display:flow-root;padding:10px 20px;background:#fff;border-top:1px solid #e5e5e5}@media (min-width: 640px){.uk-modal-body{padding:30px 30px}.uk-modal-header{padding:15px 30px}.uk-modal-footer{padding:15px 30px}}.uk-modal-body>:last-child,.uk-modal-header>:last-child,.uk-modal-footer>:last-child{margin-bottom:0}.uk-modal-title{font-size:2rem;line-height:1.3}[class*='uk-modal-close-']{position:absolute;z-index:1010;top:10px;right:10px;padding:5px}[class*='uk-modal-close-']:first-child+*{margin-top:0}.uk-modal-close-outside{top:0;right:-5px;transform:translate(0, -100%);color:#fff}.uk-modal-close-outside:hover{color:#fff}@media (min-width: 960px){.uk-modal-close-outside{right:0;transform:translate(100%, -100%)}}.uk-modal-close-full{top:0;right:0;padding:20px;background:#fff}.uk-slideshow{-webkit-tap-highlight-color:transparent}.uk-slideshow-items{position:relative;z-index:0;margin:0;padding:0;list-style:none;overflow:hidden;-webkit-touch-callout:none;touch-action:pan-y}.uk-slideshow-items>*{position:absolute;top:0;left:0;right:0;bottom:0;overflow:hidden;will-change:transform, opacity}.uk-slideshow-items>:not(.uk-active){display:none}.uk-slider{-webkit-tap-highlight-color:transparent}.uk-slider-container{overflow:hidden}.uk-slider-container-offset{margin:-11px -25px -39px -25px;padding:11px 25px 39px 25px}.uk-slider-items{will-change:transform;position:relative;touch-action:pan-y}.uk-slider-items:not(.uk-grid){display:flex;margin:0;padding:0;list-style:none;-webkit-touch-callout:none}.uk-slider-items.uk-grid{flex-wrap:nowrap}.uk-slider-items>*{flex:none;max-width:100%;position:relative}.uk-sticky{position:relative;box-sizing:border-box}.uk-sticky-fixed{z-index:980;margin:0 !important;-webkit-backface-visibility:hidden;backface-visibility:hidden}.uk-sticky[class*='uk-animation-']{animation-duration:.2s}.uk-sticky.uk-animation-reverse{animation-duration:.2s}.uk-sticky-placeholder{pointer-events:none}.uk-offcanvas{display:none;position:fixed;top:0;bottom:0;left:0;z-index:1000}.uk-offcanvas-flip .uk-offcanvas{right:0;left:auto}.uk-offcanvas-bar{position:absolute;top:0;bottom:0;left:-270px;box-sizing:border-box;width:270px;padding:20px 20px;background:#222;overflow-y:auto;-webkit-overflow-scrolling:touch}@media (min-width: 640px){.uk-offcanvas-bar{left:-350px;width:350px;padding:30px 30px}}.uk-offcanvas-flip .uk-offcanvas-bar{left:auto;right:-270px}@media (min-width: 640px){.uk-offcanvas-flip .uk-offcanvas-bar{right:-350px}}.uk-open>.uk-offcanvas-bar{left:0}.uk-offcanvas-flip .uk-open>.uk-offcanvas-bar{left:auto;right:0}.uk-offcanvas-bar-animation{transition:left 0.3s ease-out}.uk-offcanvas-flip .uk-offcanvas-bar-animation{transition-property:right}.uk-offcanvas-reveal{position:absolute;top:0;bottom:0;left:0;width:0;overflow:hidden;transition:width 0.3s ease-out}.uk-offcanvas-reveal .uk-offcanvas-bar{left:0}.uk-offcanvas-flip .uk-offcanvas-reveal .uk-offcanvas-bar{left:auto;right:0}.uk-open>.uk-offcanvas-reveal{width:270px}@media (min-width: 640px){.uk-open>.uk-offcanvas-reveal{width:350px}}.uk-offcanvas-flip .uk-offcanvas-reveal{right:0;left:auto}.uk-offcanvas-close{position:absolute;z-index:1000;top:5px;right:5px;padding:5px}@media (min-width: 640px){.uk-offcanvas-close{top:10px;right:10px}}.uk-offcanvas-close:first-child+*{margin-top:0}.uk-offcanvas-overlay{width:100vw;touch-action:none}.uk-offcanvas-overlay::before{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(0,0,0,0.1);opacity:0;transition:opacity 0.15s linear}.uk-offcanvas-overlay.uk-open::before{opacity:1}.uk-offcanvas-page,.uk-offcanvas-container{overflow-x:hidden;overflow-x:clip}.uk-offcanvas-container{position:relative;left:0;transition:left 0.3s ease-out;box-sizing:border-box;width:100%}.uk-offcanvas-container-animation:not(.uk-offcanvas-flip){left:270px}.uk-offcanvas-flip.uk-offcanvas-container-animation{left:-270px}@media (min-width: 640px){.uk-offcanvas-container-animation:not(.uk-offcanvas-flip){left:350px}.uk-offcanvas-flip.uk-offcanvas-container-animation{left:-350px}}.uk-switcher{margin:0;padding:0;list-style:none}.uk-switcher>:not(.uk-active){display:none}.uk-switcher>*>:last-child{margin-bottom:0}.uk-leader{overflow:hidden}.uk-leader-fill::after{display:inline-block;margin-left:15px;width:0;content:attr(data-fill);white-space:nowrap}.uk-leader-fill.uk-leader-hide::after{display:none}:root{--uk-leader-fill-content: .}.uk-notification{position:fixed;top:10px;left:10px;z-index:1040;box-sizing:border-box;width:350px}.uk-notification-top-right,.uk-notification-bottom-right{left:auto;right:10px}.uk-notification-top-center,.uk-notification-bottom-center{left:50%;margin-left:-175px}.uk-notification-bottom-left,.uk-notification-bottom-right,.uk-notification-bottom-center{top:auto;bottom:10px}@media (max-width: 639px){.uk-notification{left:10px;right:10px;width:auto;margin:0}}.uk-notification-message{position:relative;padding:15px;background:#f8f8f8;color:#666;font-size:1.25rem;line-height:1.4;cursor:pointer}*+.uk-notification-message{margin-top:10px}.uk-notification-close{display:none;position:absolute;top:20px;right:15px}.uk-notification-message:hover .uk-notification-close{display:block}.uk-notification-message-primary{color:#1e87f0}.uk-notification-message-success{color:#32d296}.uk-notification-message-warning{color:#faa05a}.uk-notification-message-danger{color:#f0506e}.uk-tooltip{display:none;position:absolute;z-index:1030;--uk-position-offset: 10px;--uk-position-viewport-offset: 10;top:0;box-sizing:border-box;max-width:200px;padding:3px 6px;background:#666;border-radius:2px;color:#fff;font-size:12px}.uk-tooltip.uk-active{display:block}.uk-sortable{position:relative}.uk-sortable>:last-child{margin-bottom:0}.uk-sortable-drag{position:fixed !important;z-index:1050 !important;pointer-events:none}.uk-sortable-placeholder{opacity:0;pointer-events:none}.uk-sortable-empty{min-height:50px}.uk-sortable-handle:hover{cursor:move}.uk-countdown-number{font-variant-numeric:tabular-nums;font-size:2rem;line-height:.8}@media (min-width: 640px){.uk-countdown-number{font-size:4rem}}@media (min-width: 960px){.uk-countdown-number{font-size:6rem}}.uk-countdown-separator{font-size:1rem;line-height:1.6}@media (min-width: 640px){.uk-countdown-separator{font-size:2rem}}@media (min-width: 960px){.uk-countdown-separator{font-size:3rem}}.uk-grid{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none}.uk-grid>*{margin:0}.uk-grid>*>:last-child{margin-bottom:0}.uk-grid{margin-left:-30px}.uk-grid>*{padding-left:30px}.uk-grid+.uk-grid,.uk-grid>.uk-grid-margin,*+.uk-grid-margin{margin-top:30px}@media (min-width: 1200px){.uk-grid{margin-left:-40px}.uk-grid>*{padding-left:40px}.uk-grid+.uk-grid,.uk-grid>.uk-grid-margin,*+.uk-grid-margin{margin-top:40px}}.uk-grid-small,.uk-grid-column-small{margin-left:-15px}.uk-grid-small>*,.uk-grid-column-small>*{padding-left:15px}.uk-grid+.uk-grid-small,.uk-grid+.uk-grid-row-small,.uk-grid-small>.uk-grid-margin,.uk-grid-row-small>.uk-grid-margin,*+.uk-grid-margin-small{margin-top:15px}.uk-grid-medium,.uk-grid-column-medium{margin-left:-30px}.uk-grid-medium>*,.uk-grid-column-medium>*{padding-left:30px}.uk-grid+.uk-grid-medium,.uk-grid+.uk-grid-row-medium,.uk-grid-medium>.uk-grid-margin,.uk-grid-row-medium>.uk-grid-margin,*+.uk-grid-margin-medium{margin-top:30px}.uk-grid-large,.uk-grid-column-large{margin-left:-40px}.uk-grid-large>*,.uk-grid-column-large>*{padding-left:40px}.uk-grid+.uk-grid-large,.uk-grid+.uk-grid-row-large,.uk-grid-large>.uk-grid-margin,.uk-grid-row-large>.uk-grid-margin,*+.uk-grid-margin-large{margin-top:40px}@media (min-width: 1200px){.uk-grid-large,.uk-grid-column-large{margin-left:-70px}.uk-grid-large>*,.uk-grid-column-large>*{padding-left:70px}.uk-grid+.uk-grid-large,.uk-grid+.uk-grid-row-large,.uk-grid-large>.uk-grid-margin,.uk-grid-row-large>.uk-grid-margin,*+.uk-grid-margin-large{margin-top:70px}}.uk-grid-collapse,.uk-grid-column-collapse{margin-left:0}.uk-grid-collapse>*,.uk-grid-column-collapse>*{padding-left:0}.uk-grid+.uk-grid-collapse,.uk-grid+.uk-grid-row-collapse,.uk-grid-collapse>.uk-grid-margin,.uk-grid-row-collapse>.uk-grid-margin{margin-top:0}.uk-grid-divider>*{position:relative}.uk-grid-divider>:not(.uk-first-column)::before{content:"";position:absolute;top:0;bottom:0;border-left:1px solid #e5e5e5}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{content:"";position:absolute;left:0;right:0;border-top:1px solid #e5e5e5}.uk-grid-divider{margin-left:-60px}.uk-grid-divider>*{padding-left:60px}.uk-grid-divider>:not(.uk-first-column)::before{left:30px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin{margin-top:60px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{top:-30px;left:60px}@media (min-width: 1200px){.uk-grid-divider{margin-left:-80px}.uk-grid-divider>*{padding-left:80px}.uk-grid-divider>:not(.uk-first-column)::before{left:40px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin{margin-top:80px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{top:-40px;left:80px}}.uk-grid-divider.uk-grid-small,.uk-grid-divider.uk-grid-column-small{margin-left:-30px}.uk-grid-divider.uk-grid-small>*,.uk-grid-divider.uk-grid-column-small>*{padding-left:30px}.uk-grid-divider.uk-grid-small>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-column-small>:not(.uk-first-column)::before{left:15px}.uk-grid-divider.uk-grid-small.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-small.uk-grid-stack>.uk-grid-margin{margin-top:30px}.uk-grid-divider.uk-grid-small.uk-grid-stack>.uk-grid-margin::before{top:-15px;left:30px}.uk-grid-divider.uk-grid-row-small.uk-grid-stack>.uk-grid-margin::before{top:-15px}.uk-grid-divider.uk-grid-column-small.uk-grid-stack>.uk-grid-margin::before{left:30px}.uk-grid-divider.uk-grid-medium,.uk-grid-divider.uk-grid-column-medium{margin-left:-60px}.uk-grid-divider.uk-grid-medium>*,.uk-grid-divider.uk-grid-column-medium>*{padding-left:60px}.uk-grid-divider.uk-grid-medium>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-column-medium>:not(.uk-first-column)::before{left:30px}.uk-grid-divider.uk-grid-medium.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-medium.uk-grid-stack>.uk-grid-margin{margin-top:60px}.uk-grid-divider.uk-grid-medium.uk-grid-stack>.uk-grid-margin::before{top:-30px;left:60px}.uk-grid-divider.uk-grid-row-medium.uk-grid-stack>.uk-grid-margin::before{top:-30px}.uk-grid-divider.uk-grid-column-medium.uk-grid-stack>.uk-grid-margin::before{left:60px}.uk-grid-divider.uk-grid-large,.uk-grid-divider.uk-grid-column-large{margin-left:-80px}.uk-grid-divider.uk-grid-large>*,.uk-grid-divider.uk-grid-column-large>*{padding-left:80px}.uk-grid-divider.uk-grid-large>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-column-large>:not(.uk-first-column)::before{left:40px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin{margin-top:80px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin::before{top:-40px;left:80px}.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin::before{top:-40px}.uk-grid-divider.uk-grid-column-large.uk-grid-stack>.uk-grid-margin::before{left:80px}@media (min-width: 1200px){.uk-grid-divider.uk-grid-large,.uk-grid-divider.uk-grid-column-large{margin-left:-140px}.uk-grid-divider.uk-grid-large>*,.uk-grid-divider.uk-grid-column-large>*{padding-left:140px}.uk-grid-divider.uk-grid-large>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-column-large>:not(.uk-first-column)::before{left:70px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin{margin-top:140px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin::before{top:-70px;left:140px}.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin::before{top:-70px}.uk-grid-divider.uk-grid-column-large.uk-grid-stack>.uk-grid-margin::before{left:140px}}.uk-grid-match>*,.uk-grid-item-match{display:flex;flex-wrap:wrap}.uk-grid-match>*>:not([class*='uk-width']),.uk-grid-item-match>:not([class*='uk-width']){box-sizing:border-box;width:100%;flex:auto}.uk-nav,.uk-nav ul{margin:0;padding:0;list-style:none}.uk-nav li>a{display:flex;align-items:center;column-gap:0.25em;text-decoration:none}.uk-nav>li>a{padding:5px 0}ul.uk-nav-sub{padding:5px 0 5px 15px}.uk-nav-sub ul{padding-left:15px}.uk-nav-sub a{padding:2px 0}.uk-nav-parent-icon{margin-left:auto}.uk-nav>li>a[aria-expanded="true"] .uk-nav-parent-icon{transform:rotate(180deg)}.uk-nav-header{padding:5px 0;text-transform:uppercase;font-size:.875rem}.uk-nav-header:not(:first-child){margin-top:20px}.uk-nav .uk-nav-divider{margin:5px 0}.uk-nav-default{font-size:.875rem;line-height:1.5}.uk-nav-default>li>a{color:#999}.uk-nav-default>li>a:hover{color:#666}.uk-nav-default>li.uk-active>a{color:#333}.uk-nav-default .uk-nav-subtitle{font-size:12px}.uk-nav-default .uk-nav-header{color:#333}.uk-nav-default .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-default .uk-nav-sub{font-size:.875rem;line-height:1.5}.uk-nav-default .uk-nav-sub a{color:#999}.uk-nav-default .uk-nav-sub a:hover{color:#666}.uk-nav-default .uk-nav-sub li.uk-active>a{color:#333}.uk-nav-primary{font-size:1.5rem;line-height:1.5}.uk-nav-primary>li>a{color:#999}.uk-nav-primary>li>a:hover{color:#666}.uk-nav-primary>li.uk-active>a{color:#333}.uk-nav-primary .uk-nav-subtitle{font-size:1.25rem}.uk-nav-primary .uk-nav-header{color:#333}.uk-nav-primary .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-primary .uk-nav-sub{font-size:1.25rem;line-height:1.5}.uk-nav-primary .uk-nav-sub a{color:#999}.uk-nav-primary .uk-nav-sub a:hover{color:#666}.uk-nav-primary .uk-nav-sub li.uk-active>a{color:#333}.uk-nav-secondary{font-size:16px;line-height:1.5}.uk-nav-secondary>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider){margin-top:0}.uk-nav-secondary>li>a{color:#333;padding:10px 10px}.uk-nav-secondary>li>a:hover{color:#333;background-color:#f8f8f8}.uk-nav-secondary>li.uk-active>a{color:#333;background-color:#f8f8f8}.uk-nav-secondary .uk-nav-subtitle{font-size:.875rem;color:#999}.uk-nav-secondary>li>a:hover .uk-nav-subtitle{color:#666}.uk-nav-secondary>li.uk-active>a .uk-nav-subtitle{color:#333}.uk-nav-secondary .uk-nav-header{color:#333}.uk-nav-secondary .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-secondary .uk-nav-sub{font-size:.875rem;line-height:1.5}.uk-nav-secondary .uk-nav-sub a{color:#999}.uk-nav-secondary .uk-nav-sub a:hover{color:#666}.uk-nav-secondary .uk-nav-sub li.uk-active>a{color:#333}.uk-nav-center{text-align:center}.uk-nav-center li>a{justify-content:center}.uk-nav-center .uk-nav-sub,.uk-nav-center .uk-nav-sub ul{padding-left:0}.uk-nav-center .uk-nav-parent-icon{margin-left:4px}.uk-nav.uk-nav-divider>:not(.uk-nav-header,.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider){margin-top:5px;padding-top:5px;border-top:1px solid #e5e5e5}.uk-navbar{display:flex;position:relative}.uk-navbar-container:not(.uk-navbar-transparent){background:#f8f8f8}.uk-navbar-left,.uk-navbar-right,[class*='uk-navbar-center']{display:flex;gap:30px;align-items:center}.uk-navbar-right{margin-left:auto}.uk-navbar-center:only-child{margin-left:auto;margin-right:auto;position:relative}.uk-navbar-center:not(:only-child){position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:max-content;box-sizing:border-box;z-index:990}.uk-navbar-center-left,.uk-navbar-center-right{position:absolute;top:0}.uk-navbar-center-left{right:calc(100% + 30px)}.uk-navbar-center-right{left:calc(100% + 30px)}[class*='uk-navbar-center-']{width:max-content;box-sizing:border-box}.uk-navbar-nav{display:flex;gap:30px;margin:0;padding:0;list-style:none}.uk-navbar-left,.uk-navbar-right,.uk-navbar-center:only-child{flex-wrap:wrap}.uk-navbar-nav>li>a,.uk-navbar-item,.uk-navbar-toggle{display:flex;justify-content:center;align-items:center;column-gap:0.25em;box-sizing:border-box;min-height:80px;font-size:.875rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";text-decoration:none}.uk-navbar-nav>li>a{padding:0 0;color:#999;text-transform:uppercase;transition:0.1s ease-in-out;transition-property:color, background-color}.uk-navbar-nav>li:hover>a,.uk-navbar-nav>li>a[aria-expanded="true"]{color:#666}.uk-navbar-nav>li>a:active{color:#333}.uk-navbar-nav>li.uk-active>a{color:#333}.uk-navbar-parent-icon{margin-left:4px}.uk-navbar-nav>li>a[aria-expanded="true"] .uk-navbar-parent-icon{transform:rotate(180deg)}.uk-navbar-item{padding:0 0;color:#666}.uk-navbar-item>:last-child{margin-bottom:0}.uk-navbar-toggle{padding:0 0;color:#999}.uk-navbar-toggle:hover,.uk-navbar-toggle[aria-expanded="true"]{color:#666;text-decoration:none}.uk-navbar-subtitle{font-size:.875rem}.uk-navbar-justify .uk-navbar-left,.uk-navbar-justify .uk-navbar-right,.uk-navbar-justify .uk-navbar-nav,.uk-navbar-justify .uk-navbar-nav>li,.uk-navbar-justify .uk-navbar-item,.uk-navbar-justify .uk-navbar-toggle{flex-grow:1}.uk-navbar-dropdown{display:none;position:absolute;z-index:1020;--uk-position-offset: 15px;--uk-position-shift-offset: 0;--uk-position-viewport-offset: 15px;box-sizing:border-box;width:200px;padding:25px;background:#fff;color:#666;box-shadow:0 5px 12px rgba(0,0,0,0.15)}.uk-navbar-dropdown.uk-open{display:block}.uk-navbar-dropdown>:last-child{margin-bottom:0}.uk-navbar-dropdown-grid{margin-left:-30px}.uk-navbar-dropdown-grid>*{padding-left:30px}.uk-navbar-dropdown-grid>.uk-grid-margin{margin-top:30px}.uk-navbar-dropdown-stack .uk-navbar-dropdown-grid>*{width:100% !important}.uk-navbar-dropdown-width-2:not(.uk-navbar-dropdown-stack){width:400px}.uk-navbar-dropdown-width-3:not(.uk-navbar-dropdown-stack){width:600px}.uk-navbar-dropdown-width-4:not(.uk-navbar-dropdown-stack){width:800px}.uk-navbar-dropdown-width-5:not(.uk-navbar-dropdown-stack){width:1000px}.uk-navbar-dropdown-large{--uk-position-shift-offset: 0;padding:40px}.uk-navbar-dropdown-dropbar{width:auto;background:transparent;padding:25px 0 25px 0;--uk-position-offset: 0;--uk-position-shift-offset: 0;--uk-position-viewport-offset: 15px;box-shadow:none}@media (min-width: 640px){.uk-navbar-dropdown-dropbar{--uk-position-viewport-offset: 30px}}@media (min-width: 960px){.uk-navbar-dropdown-dropbar{--uk-position-viewport-offset: 40px}}.uk-navbar-dropdown-dropbar-large{--uk-position-shift-offset: 0;padding-top:40px;padding-bottom:40px}.uk-navbar-dropdown-nav{font-size:.875rem}.uk-navbar-dropdown-nav>li>a{color:#999}.uk-navbar-dropdown-nav>li>a:hover{color:#666}.uk-navbar-dropdown-nav>li.uk-active>a{color:#333}.uk-navbar-dropdown-nav .uk-nav-subtitle{font-size:12px}.uk-navbar-dropdown-nav .uk-nav-header{color:#333}.uk-navbar-dropdown-nav .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-navbar-dropdown-nav .uk-nav-sub a{color:#999}.uk-navbar-dropdown-nav .uk-nav-sub a:hover{color:#666}.uk-navbar-dropdown-nav .uk-nav-sub li.uk-active>a{color:#333}.uk-navbar-dropbar{display:block !important;z-index:980;padding:0;left:0;right:0}.uk-subnav{display:flex;flex-wrap:wrap;align-items:center;margin-left:-20px;padding:0;list-style:none}.uk-subnav>*{flex:none;padding-left:20px;position:relative}.uk-subnav>*>:first-child{display:flex;align-items:center;column-gap:0.25em;color:#999;font-size:.875rem;text-transform:uppercase;transition:0.1s ease-in-out;transition-property:color, background-color}.uk-subnav>*>a:hover{color:#666;text-decoration:none}.uk-subnav>.uk-active>a{color:#333}.uk-subnav-divider{margin-left:-41px}.uk-subnav-divider>*{display:flex;align-items:center}.uk-subnav-divider>::before{content:"";height:1.5em;margin-left:0px;margin-right:20px;border-left:1px solid transparent}.uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before{border-left-color:#e5e5e5}.uk-subnav-pill>*>:first-child{padding:5px 10px;background:rgba(0,0,0,0);color:#999}.uk-subnav-pill>*>a:hover{background-color:#f8f8f8;color:#666}.uk-subnav-pill>*>a:active{background-color:#f8f8f8;color:#666}.uk-subnav-pill>.uk-active>a{background-color:#1e87f0;color:#fff}.uk-subnav>.uk-disabled>a{color:#999}.uk-breadcrumb{padding:0;list-style:none}.uk-breadcrumb>*{display:contents}.uk-breadcrumb>*>*{font-size:.875rem;color:#999}.uk-breadcrumb>*>:hover{color:#666;text-decoration:none}.uk-breadcrumb>:last-child>span,.uk-breadcrumb>:last-child>a:not([href]){color:#666}.uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before{content:"/";display:inline-block;margin:0 20px 0 calc(20px - 4px);font-size:.875rem;color:#999}.uk-pagination{display:flex;flex-wrap:wrap;margin-left:0;padding:0;list-style:none}.uk-pagination>*{flex:none;padding-left:0;position:relative}.uk-pagination>*>*{display:block;padding:5px 10px;color:#999;transition:color 0.1s ease-in-out}.uk-pagination>*>:hover{color:#666;text-decoration:none}.uk-pagination>.uk-active>*{color:#666}.uk-pagination>.uk-disabled>*{color:#999}.uk-tab{display:flex;flex-wrap:wrap;margin-left:-20px;padding:0;list-style:none;position:relative}.uk-tab::before{content:"";position:absolute;bottom:0;left:20px;right:0;border-bottom:1px solid #e5e5e5}.uk-tab>*{flex:none;padding-left:20px;position:relative}.uk-tab>*>a{display:flex;align-items:center;column-gap:0.25em;justify-content:center;padding:5px 10px;color:#999;border-bottom:1px solid transparent;font-size:.875rem;text-transform:uppercase;transition:color 0.1s ease-in-out}.uk-tab>*>a:hover{color:#666;text-decoration:none}.uk-tab>.uk-active>a{color:#333;border-color:#1e87f0}.uk-tab>.uk-disabled>a{color:#999}.uk-tab-bottom::before{top:0;bottom:auto}.uk-tab-bottom>*>a{border-top:1px solid transparent;border-bottom:none}.uk-tab-left,.uk-tab-right{flex-direction:column;margin-left:0}.uk-tab-left>*,.uk-tab-right>*{padding-left:0}.uk-tab-left::before{top:0;bottom:0;left:auto;right:0;border-left:1px solid #e5e5e5;border-bottom:none}.uk-tab-right::before{top:0;bottom:0;left:0;right:auto;border-left:1px solid #e5e5e5;border-bottom:none}.uk-tab-left>*>a{justify-content:left;border-right:1px solid transparent;border-bottom:none}.uk-tab-right>*>a{justify-content:left;border-left:1px solid transparent;border-bottom:none}.uk-tab .uk-dropdown{margin-left:30px}.uk-slidenav{padding:5px 10px;color:rgba(102,102,102,0.5);transition:color 0.1s ease-in-out}.uk-slidenav:hover{color:rgba(102,102,102,0.9)}.uk-slidenav:active{color:rgba(102,102,102,0.5)}.uk-slidenav-large{padding:10px 10px}.uk-slidenav-container{display:flex}.uk-dotnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-12px}.uk-dotnav>*{flex:none;padding-left:12px}.uk-dotnav>*>*{display:block;box-sizing:border-box;width:10px;height:10px;border-radius:50%;background:rgba(0,0,0,0);text-indent:100%;overflow:hidden;white-space:nowrap;border:1px solid rgba(102,102,102,0.4);transition:0.2s ease-in-out;transition-property:background-color, border-color}.uk-dotnav>*>:hover{background-color:rgba(102,102,102,0.6);border-color:rgba(0,0,0,0)}.uk-dotnav>*>:active{background-color:rgba(102,102,102,0.2);border-color:rgba(0,0,0,0)}.uk-dotnav>.uk-active>*{background-color:rgba(102,102,102,0.6);border-color:rgba(0,0,0,0)}.uk-dotnav-vertical{flex-direction:column;margin-left:0;margin-top:-12px}.uk-dotnav-vertical>*{padding-left:0;padding-top:12px}.uk-thumbnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-15px}.uk-thumbnav>*{padding-left:15px}.uk-thumbnav>*>*{display:inline-block;position:relative}.uk-thumbnav>*>*::after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(255,255,255,0.4);transition:background-color 0.1s ease-in-out}.uk-thumbnav>*>:hover::after{background-color:rgba(0,0,0,0)}.uk-thumbnav>.uk-active>*::after{background-color:rgba(0,0,0,0)}.uk-thumbnav-vertical{flex-direction:column;margin-left:0;margin-top:-15px}.uk-thumbnav-vertical>*{padding-left:0;padding-top:15px}.uk-iconnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-10px}.uk-iconnav>*{padding-left:10px}.uk-iconnav>*>a{display:flex;align-items:center;column-gap:0.25em;line-height:0;color:#999;text-decoration:none;font-size:.875rem;transition:0.1s ease-in-out;transition-property:color, background-color}.uk-iconnav>*>a:hover{color:#666}.uk-iconnav>.uk-active>a{color:#666}.uk-iconnav-vertical{flex-direction:column;margin-left:0;margin-top:-10px}.uk-iconnav-vertical>*{padding-left:0;padding-top:10px}.uk-lightbox{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;background:#000;opacity:0;transition:opacity 0.15s linear;touch-action:pinch-zoom}.uk-lightbox.uk-open{display:block;opacity:1}.uk-lightbox :focus{outline-color:rgba(255,255,255,0.7)}.uk-lightbox :focus-visible{outline-color:rgba(255,255,255,0.7)}.uk-lightbox-page{overflow:hidden}.uk-lightbox-items>*{position:absolute;top:0;right:0;bottom:0;left:0;display:none;justify-content:center;align-items:center;color:rgba(255,255,255,0.7);will-change:transform, opacity}.uk-lightbox-items>*>*{max-width:100vw;max-height:100vh}.uk-lightbox-items>*>:not(iframe){width:auto;height:auto}.uk-lightbox-items>.uk-active{display:flex}.uk-lightbox-toolbar{padding:10px 10px;background:rgba(0,0,0,0.3);color:rgba(255,255,255,0.7)}.uk-lightbox-toolbar>*{color:rgba(255,255,255,0.7)}.uk-lightbox-toolbar-icon{padding:5px;color:rgba(255,255,255,0.7)}.uk-lightbox-toolbar-icon:hover{color:#fff}.uk-lightbox-button{box-sizing:border-box;width:50px;height:50px;background:rgba(0,0,0,0.3);color:rgba(255,255,255,0.7);display:inline-flex;justify-content:center;align-items:center}.uk-lightbox-button:hover{color:#fff}.uk-lightbox-caption:empty{display:none}.uk-lightbox-iframe{width:80%;height:80%}[class*='uk-animation-']{animation:.5s ease-out both}.uk-animation-fade{animation-name:uk-fade;animation-duration:.8s;animation-timing-function:linear}.uk-animation-scale-up{animation-name:uk-fade, uk-scale-up}.uk-animation-scale-down{animation-name:uk-fade, uk-scale-down}.uk-animation-slide-top{animation-name:uk-fade, uk-slide-top}.uk-animation-slide-bottom{animation-name:uk-fade, uk-slide-bottom}.uk-animation-slide-left{animation-name:uk-fade, uk-slide-left}.uk-animation-slide-right{animation-name:uk-fade, uk-slide-right}.uk-animation-slide-top-small{animation-name:uk-fade, uk-slide-top-small}.uk-animation-slide-bottom-small{animation-name:uk-fade, uk-slide-bottom-small}.uk-animation-slide-left-small{animation-name:uk-fade, uk-slide-left-small}.uk-animation-slide-right-small{animation-name:uk-fade, uk-slide-right-small}.uk-animation-slide-top-medium{animation-name:uk-fade, uk-slide-top-medium}.uk-animation-slide-bottom-medium{animation-name:uk-fade, uk-slide-bottom-medium}.uk-animation-slide-left-medium{animation-name:uk-fade, uk-slide-left-medium}.uk-animation-slide-right-medium{animation-name:uk-fade, uk-slide-right-medium}.uk-animation-kenburns{animation-name:uk-kenburns;animation-duration:15s}.uk-animation-shake{animation-name:uk-shake}.uk-animation-stroke{animation-name:uk-stroke;animation-duration:2s;stroke-dasharray:var(--uk-animation-stroke)}.uk-animation-reverse{animation-direction:reverse;animation-timing-function:ease-in}.uk-animation-fast{animation-duration:.1s}.uk-animation-toggle:not(:hover):not(:focus) [class*='uk-animation-']{animation-name:none}@keyframes uk-fade{0%{opacity:0}100%{opacity:1}}@keyframes uk-scale-up{0%{transform:scale(0.9)}100%{transform:scale(1)}}@keyframes uk-scale-down{0%{transform:scale(1.1)}100%{transform:scale(1)}}@keyframes uk-slide-top{0%{transform:translateY(-100%)}100%{transform:translateY(0)}}@keyframes uk-slide-bottom{0%{transform:translateY(100%)}100%{transform:translateY(0)}}@keyframes uk-slide-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes uk-slide-right{0%{transform:translateX(100%)}100%{transform:translateX(0)}}@keyframes uk-slide-top-small{0%{transform:translateY(-10px)}100%{transform:translateY(0)}}@keyframes uk-slide-bottom-small{0%{transform:translateY(10px)}100%{transform:translateY(0)}}@keyframes uk-slide-left-small{0%{transform:translateX(-10px)}100%{transform:translateX(0)}}@keyframes uk-slide-right-small{0%{transform:translateX(10px)}100%{transform:translateX(0)}}@keyframes uk-slide-top-medium{0%{transform:translateY(-50px)}100%{transform:translateY(0)}}@keyframes uk-slide-bottom-medium{0%{transform:translateY(50px)}100%{transform:translateY(0)}}@keyframes uk-slide-left-medium{0%{transform:translateX(-50px)}100%{transform:translateX(0)}}@keyframes uk-slide-right-medium{0%{transform:translateX(50px)}100%{transform:translateX(0)}}@keyframes uk-kenburns{0%{transform:scale(1)}100%{transform:scale(1.2)}}@keyframes uk-shake{0%,100%{transform:translateX(0)}10%{transform:translateX(-9px)}20%{transform:translateX(8px)}30%{transform:translateX(-7px)}40%{transform:translateX(6px)}50%{transform:translateX(-5px)}60%{transform:translateX(4px)}70%{transform:translateX(-3px)}80%{transform:translateX(2px)}90%{transform:translateX(-1px)}}@keyframes uk-stroke{0%{stroke-dashoffset:var(--uk-animation-stroke)}100%{stroke-dashoffset:0}}[class*='uk-child-width']>*{box-sizing:border-box;width:100%}.uk-child-width-1-2>*{width:50%}.uk-child-width-1-3>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4>*{width:25%}.uk-child-width-1-5>*{width:20%}.uk-child-width-1-6>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto>*{width:auto}.uk-child-width-expand>:not([class*='uk-width']){flex:1;min-width:1px}@media (min-width: 640px){.uk-child-width-1-1\@s>*{width:100%}.uk-child-width-1-2\@s>*{width:50%}.uk-child-width-1-3\@s>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@s>*{width:25%}.uk-child-width-1-5\@s>*{width:20%}.uk-child-width-1-6\@s>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@s>*{width:auto}.uk-child-width-expand\@s>:not([class*='uk-width']){flex:1;min-width:1px}}@media (min-width: 960px){.uk-child-width-1-1\@m>*{width:100%}.uk-child-width-1-2\@m>*{width:50%}.uk-child-width-1-3\@m>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@m>*{width:25%}.uk-child-width-1-5\@m>*{width:20%}.uk-child-width-1-6\@m>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@m>*{width:auto}.uk-child-width-expand\@m>:not([class*='uk-width']){flex:1;min-width:1px}}@media (min-width: 1200px){.uk-child-width-1-1\@l>*{width:100%}.uk-child-width-1-2\@l>*{width:50%}.uk-child-width-1-3\@l>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@l>*{width:25%}.uk-child-width-1-5\@l>*{width:20%}.uk-child-width-1-6\@l>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@l>*{width:auto}.uk-child-width-expand\@l>:not([class*='uk-width']){flex:1;min-width:1px}}@media (min-width: 1600px){.uk-child-width-1-1\@xl>*{width:100%}.uk-child-width-1-2\@xl>*{width:50%}.uk-child-width-1-3\@xl>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@xl>*{width:25%}.uk-child-width-1-5\@xl>*{width:20%}.uk-child-width-1-6\@xl>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@xl>*{width:auto}.uk-child-width-expand\@xl>:not([class*='uk-width']){flex:1;min-width:1px}}[class*='uk-width']{box-sizing:border-box;width:100%;max-width:100%}.uk-width-1-2{width:50%}.uk-width-1-3{width:calc(100% * 1 / 3.001)}.uk-width-2-3{width:calc(100% * 2 / 3.001)}.uk-width-1-4{width:25%}.uk-width-3-4{width:75%}.uk-width-1-5{width:20%}.uk-width-2-5{width:40%}.uk-width-3-5{width:60%}.uk-width-4-5{width:80%}.uk-width-1-6{width:calc(100% * 1 / 6.001)}.uk-width-5-6{width:calc(100% * 5 / 6.001)}.uk-width-small{width:150px}.uk-width-medium{width:300px}.uk-width-large{width:450px}.uk-width-xlarge{width:600px}.uk-width-2xlarge{width:750px}.uk-width-auto{width:auto}.uk-width-expand{flex:1;min-width:1px}@media (min-width: 640px){.uk-width-1-1\@s{width:100%}.uk-width-1-2\@s{width:50%}.uk-width-1-3\@s{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@s{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@s{width:25%}.uk-width-3-4\@s{width:75%}.uk-width-1-5\@s{width:20%}.uk-width-2-5\@s{width:40%}.uk-width-3-5\@s{width:60%}.uk-width-4-5\@s{width:80%}.uk-width-1-6\@s{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@s{width:calc(100% * 5 / 6.001)}.uk-width-small\@s{width:150px}.uk-width-medium\@s{width:300px}.uk-width-large\@s{width:450px}.uk-width-xlarge\@s{width:600px}.uk-width-2xlarge\@s{width:750px}.uk-width-auto\@s{width:auto}.uk-width-expand\@s{flex:1;min-width:1px}}@media (min-width: 960px){.uk-width-1-1\@m{width:100%}.uk-width-1-2\@m{width:50%}.uk-width-1-3\@m{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@m{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@m{width:25%}.uk-width-3-4\@m{width:75%}.uk-width-1-5\@m{width:20%}.uk-width-2-5\@m{width:40%}.uk-width-3-5\@m{width:60%}.uk-width-4-5\@m{width:80%}.uk-width-1-6\@m{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@m{width:calc(100% * 5 / 6.001)}.uk-width-small\@m{width:150px}.uk-width-medium\@m{width:300px}.uk-width-large\@m{width:450px}.uk-width-xlarge\@m{width:600px}.uk-width-2xlarge\@m{width:750px}.uk-width-auto\@m{width:auto}.uk-width-expand\@m{flex:1;min-width:1px}}@media (min-width: 1200px){.uk-width-1-1\@l{width:100%}.uk-width-1-2\@l{width:50%}.uk-width-1-3\@l{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@l{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@l{width:25%}.uk-width-3-4\@l{width:75%}.uk-width-1-5\@l{width:20%}.uk-width-2-5\@l{width:40%}.uk-width-3-5\@l{width:60%}.uk-width-4-5\@l{width:80%}.uk-width-1-6\@l{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@l{width:calc(100% * 5 / 6.001)}.uk-width-small\@l{width:150px}.uk-width-medium\@l{width:300px}.uk-width-large\@l{width:450px}.uk-width-xlarge\@l{width:600px}.uk-width-2xlarge\@l{width:750px}.uk-width-auto\@l{width:auto}.uk-width-expand\@l{flex:1;min-width:1px}}@media (min-width: 1600px){.uk-width-1-1\@xl{width:100%}.uk-width-1-2\@xl{width:50%}.uk-width-1-3\@xl{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@xl{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@xl{width:25%}.uk-width-3-4\@xl{width:75%}.uk-width-1-5\@xl{width:20%}.uk-width-2-5\@xl{width:40%}.uk-width-3-5\@xl{width:60%}.uk-width-4-5\@xl{width:80%}.uk-width-1-6\@xl{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@xl{width:calc(100% * 5 / 6.001)}.uk-width-small\@xl{width:150px}.uk-width-medium\@xl{width:300px}.uk-width-large\@xl{width:450px}.uk-width-xlarge\@xl{width:600px}.uk-width-2xlarge\@xl{width:750px}.uk-width-auto\@xl{width:auto}.uk-width-expand\@xl{flex:1;min-width:1px}}.uk-width-max-content{width:max-content}.uk-width-min-content{width:min-content}[class*='uk-height']{box-sizing:border-box}.uk-height-1-1{height:100%}.uk-height-viewport{min-height:100vh}.uk-height-viewport-2{min-height:200vh}.uk-height-viewport-3{min-height:300vh}.uk-height-viewport-4{min-height:400vh}.uk-height-small{height:150px}.uk-height-medium{height:300px}.uk-height-large{height:450px}.uk-height-max-small{max-height:150px}.uk-height-max-medium{max-height:300px}.uk-height-max-large{max-height:450px}.uk-text-lead{font-size:1.5rem;line-height:1.5;color:#333}.uk-text-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-text-meta a{color:#999}.uk-text-meta a:hover{color:#666;text-decoration:none}.uk-text-small{font-size:.875rem;line-height:1.5}.uk-text-large{font-size:1.5rem;line-height:1.5}.uk-text-default{font-size:16px;line-height:1.5}.uk-text-light{font-weight:300}.uk-text-normal{font-weight:400}.uk-text-bold{font-weight:700}.uk-text-lighter{font-weight:lighter}.uk-text-bolder{font-weight:bolder}.uk-text-italic{font-style:italic}.uk-text-capitalize{text-transform:capitalize !important}.uk-text-uppercase{text-transform:uppercase !important}.uk-text-lowercase{text-transform:lowercase !important}.uk-text-decoration-none{text-decoration:none !important}.uk-text-muted{color:#999 !important}.uk-text-emphasis{color:#333 !important}.uk-text-primary{color:#1e87f0 !important}.uk-text-secondary{color:#222 !important}.uk-text-success{color:#32d296 !important}.uk-text-warning{color:#faa05a !important}.uk-text-danger{color:#f0506e !important}.uk-text-background{-webkit-background-clip:text;color:transparent !important;display:inline-block;background-color:#1e87f0}.uk-text-left{text-align:left !important}.uk-text-right{text-align:right !important}.uk-text-center{text-align:center !important}.uk-text-justify{text-align:justify !important}@media (min-width: 640px){.uk-text-left\@s{text-align:left !important}.uk-text-right\@s{text-align:right !important}.uk-text-center\@s{text-align:center !important}}@media (min-width: 960px){.uk-text-left\@m{text-align:left !important}.uk-text-right\@m{text-align:right !important}.uk-text-center\@m{text-align:center !important}}@media (min-width: 1200px){.uk-text-left\@l{text-align:left !important}.uk-text-right\@l{text-align:right !important}.uk-text-center\@l{text-align:center !important}}@media (min-width: 1600px){.uk-text-left\@xl{text-align:left !important}.uk-text-right\@xl{text-align:right !important}.uk-text-center\@xl{text-align:center !important}}.uk-text-top{vertical-align:top !important}.uk-text-middle{vertical-align:middle !important}.uk-text-bottom{vertical-align:bottom !important}.uk-text-baseline{vertical-align:baseline !important}.uk-text-nowrap{white-space:nowrap}.uk-text-truncate{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}th.uk-text-truncate,td.uk-text-truncate{max-width:0}.uk-text-break{overflow-wrap:break-word}th.uk-text-break,td.uk-text-break{word-break:break-word}[class*='uk-column-']{column-gap:30px}@media (min-width: 1200px){[class*='uk-column-']{column-gap:40px}}[class*='uk-column-'] img{transform:translate3d(0, 0, 0)}.uk-column-divider{column-rule:1px solid #e5e5e5;column-gap:60px}@media (min-width: 1200px){.uk-column-divider{column-gap:80px}}.uk-column-1-2{column-count:2}.uk-column-1-3{column-count:3}.uk-column-1-4{column-count:4}.uk-column-1-5{column-count:5}.uk-column-1-6{column-count:6}@media (min-width: 640px){.uk-column-1-2\@s{column-count:2}.uk-column-1-3\@s{column-count:3}.uk-column-1-4\@s{column-count:4}.uk-column-1-5\@s{column-count:5}.uk-column-1-6\@s{column-count:6}}@media (min-width: 960px){.uk-column-1-2\@m{column-count:2}.uk-column-1-3\@m{column-count:3}.uk-column-1-4\@m{column-count:4}.uk-column-1-5\@m{column-count:5}.uk-column-1-6\@m{column-count:6}}@media (min-width: 1200px){.uk-column-1-2\@l{column-count:2}.uk-column-1-3\@l{column-count:3}.uk-column-1-4\@l{column-count:4}.uk-column-1-5\@l{column-count:5}.uk-column-1-6\@l{column-count:6}}@media (min-width: 1600px){.uk-column-1-2\@xl{column-count:2}.uk-column-1-3\@xl{column-count:3}.uk-column-1-4\@xl{column-count:4}.uk-column-1-5\@xl{column-count:5}.uk-column-1-6\@xl{column-count:6}}.uk-column-span{column-span:all}[uk-cover],[data-uk-cover]{max-width:none;position:absolute;left:50%;top:50%;--uk-position-translate-x: -50%;--uk-position-translate-y: -50%;transform:translate(var(--uk-position-translate-x), var(--uk-position-translate-y))}iframe[uk-cover],iframe[data-uk-cover]{pointer-events:none}.uk-cover-container{overflow:hidden;position:relative}.uk-background-default{background-color:#fff}.uk-background-muted{background-color:#f8f8f8}.uk-background-primary{background-color:#1e87f0}.uk-background-secondary{background-color:#222}.uk-background-cover,.uk-background-contain,.uk-background-width-1-1,.uk-background-height-1-1{background-position:50% 50%;background-repeat:no-repeat}.uk-background-cover{background-size:cover}.uk-background-contain{background-size:contain}.uk-background-width-1-1{background-size:100%}.uk-background-height-1-1{background-size:auto 100%}.uk-background-top-left{background-position:0 0}.uk-background-top-center{background-position:50% 0}.uk-background-top-right{background-position:100% 0}.uk-background-center-left{background-position:0 50%}.uk-background-center-center{background-position:50% 50%}.uk-background-center-right{background-position:100% 50%}.uk-background-bottom-left{background-position:0 100%}.uk-background-bottom-center{background-position:50% 100%}.uk-background-bottom-right{background-position:100% 100%}.uk-background-norepeat{background-repeat:no-repeat}.uk-background-fixed{background-attachment:fixed;backface-visibility:hidden}@media (pointer: coarse){.uk-background-fixed{background-attachment:scroll}}@media (max-width: 639px){.uk-background-image\@s{background-image:none !important}}@media (max-width: 959px){.uk-background-image\@m{background-image:none !important}}@media (max-width: 1199px){.uk-background-image\@l{background-image:none !important}}@media (max-width: 1599px){.uk-background-image\@xl{background-image:none !important}}.uk-background-blend-multiply{background-blend-mode:multiply}.uk-background-blend-screen{background-blend-mode:screen}.uk-background-blend-overlay{background-blend-mode:overlay}.uk-background-blend-darken{background-blend-mode:darken}.uk-background-blend-lighten{background-blend-mode:lighten}.uk-background-blend-color-dodge{background-blend-mode:color-dodge}.uk-background-blend-color-burn{background-blend-mode:color-burn}.uk-background-blend-hard-light{background-blend-mode:hard-light}.uk-background-blend-soft-light{background-blend-mode:soft-light}.uk-background-blend-difference{background-blend-mode:difference}.uk-background-blend-exclusion{background-blend-mode:exclusion}.uk-background-blend-hue{background-blend-mode:hue}.uk-background-blend-saturation{background-blend-mode:saturation}.uk-background-blend-color{background-blend-mode:color}.uk-background-blend-luminosity{background-blend-mode:luminosity}[class*='uk-align']{display:block;margin-bottom:30px}*+[class*='uk-align']{margin-top:30px}.uk-align-center{margin-left:auto;margin-right:auto}.uk-align-left{margin-top:0;margin-right:30px;float:left}.uk-align-right{margin-top:0;margin-left:30px;float:right}@media (min-width: 640px){.uk-align-left\@s{margin-top:0;margin-right:30px;float:left}.uk-align-right\@s{margin-top:0;margin-left:30px;float:right}}@media (min-width: 960px){.uk-align-left\@m{margin-top:0;margin-right:30px;float:left}.uk-align-right\@m{margin-top:0;margin-left:30px;float:right}}@media (min-width: 1200px){.uk-align-left\@l{margin-top:0;float:left}.uk-align-right\@l{margin-top:0;float:right}.uk-align-left,.uk-align-left\@s,.uk-align-left\@m,.uk-align-left\@l{margin-right:40px}.uk-align-right,.uk-align-right\@s,.uk-align-right\@m,.uk-align-right\@l{margin-left:40px}}@media (min-width: 1600px){.uk-align-left\@xl{margin-top:0;margin-right:40px;float:left}.uk-align-right\@xl{margin-top:0;margin-left:40px;float:right}}.uk-svg,.uk-svg:not(.uk-preserve) [fill*='#']:not(.uk-preserve){fill:currentcolor}.uk-svg:not(.uk-preserve) [stroke*='#']:not(.uk-preserve){stroke:currentcolor}.uk-svg{transform:translate(0, 0)}.uk-panel{display:flow-root;position:relative;box-sizing:border-box}.uk-panel>:last-child{margin-bottom:0}.uk-panel-scrollable{height:170px;padding:10px;border:1px solid #e5e5e5;overflow:auto;-webkit-overflow-scrolling:touch;resize:both}.uk-clearfix::before{content:"";display:table-cell}.uk-clearfix::after{content:"";display:table;clear:both}.uk-float-left{float:left}.uk-float-right{float:right}[class*='uk-float-']{max-width:100%}.uk-overflow-hidden{overflow:hidden}.uk-overflow-auto{overflow:auto;-webkit-overflow-scrolling:touch}.uk-overflow-auto>:last-child{margin-bottom:0}.uk-box-sizing-content{box-sizing:content-box}.uk-box-sizing-border{box-sizing:border-box}.uk-resize{resize:both}.uk-resize-horizontal{resize:horizontal}.uk-resize-vertical{resize:vertical}.uk-display-block{display:block !important}.uk-display-inline{display:inline !important}.uk-display-inline-block{display:inline-block !important}[class*='uk-inline']{display:inline-block;position:relative;max-width:100%;vertical-align:middle;-webkit-backface-visibility:hidden}.uk-inline-clip{overflow:hidden}.uk-preserve-width,.uk-preserve-width canvas,.uk-preserve-width img,.uk-preserve-width svg,.uk-preserve-width video{max-width:none}.uk-responsive-width,.uk-responsive-height{box-sizing:border-box}.uk-responsive-width{max-width:100% !important;height:auto}.uk-responsive-height{max-height:100%;width:auto;max-width:none}[uk-responsive],[data-uk-responsive]{max-width:100%}.uk-object-cover{object-fit:cover}.uk-object-contain{object-fit:contain}.uk-object-fill{object-fit:fill}.uk-object-none{object-fit:none}.uk-object-scale-down{object-fit:scale-down}.uk-object-top-left{object-position:0 0}.uk-object-top-center{object-position:50% 0}.uk-object-top-right{object-position:100% 0}.uk-object-center-left{object-position:0 50%}.uk-object-center-center{object-position:50% 50%}.uk-object-center-right{object-position:100% 50%}.uk-object-bottom-left{object-position:0 100%}.uk-object-bottom-center{object-position:50% 100%}.uk-object-bottom-right{object-position:100% 100%}.uk-border-circle{border-radius:50%}.uk-border-pill{border-radius:500px}.uk-border-rounded{border-radius:5px}.uk-inline-clip[class*='uk-border-']{-webkit-transform:translateZ(0)}.uk-box-shadow-small{box-shadow:0 2px 8px rgba(0,0,0,0.08)}.uk-box-shadow-medium{box-shadow:0 5px 15px rgba(0,0,0,0.08)}.uk-box-shadow-large{box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-box-shadow-xlarge{box-shadow:0 28px 50px rgba(0,0,0,0.16)}[class*='uk-box-shadow-hover']{transition:box-shadow .1s ease-in-out}.uk-box-shadow-hover-small:hover{box-shadow:0 2px 8px rgba(0,0,0,0.08)}.uk-box-shadow-hover-medium:hover{box-shadow:0 5px 15px rgba(0,0,0,0.08)}.uk-box-shadow-hover-large:hover{box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-box-shadow-hover-xlarge:hover{box-shadow:0 28px 50px rgba(0,0,0,0.16)}@supports (filter: blur(0)){.uk-box-shadow-bottom{display:inline-block;position:relative;z-index:0;max-width:100%;vertical-align:middle}.uk-box-shadow-bottom::after{content:"";position:absolute;bottom:-30px;left:0;right:0;z-index:-1;height:30px;border-radius:100%;background:#444;filter:blur(20px);will-change:filter}}.uk-dropcap::first-letter,.uk-dropcap>p:first-of-type::first-letter{display:block;margin-right:10px;float:left;font-size:4.5em;line-height:1;margin-bottom:-2px}@-moz-document url-prefix(){.uk-dropcap::first-letter,.uk-dropcap>p:first-of-type::first-letter{margin-top:1.1%}}.uk-logo{font-size:1.5rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";color:#333;text-decoration:none}:where(.uk-logo){display:inline-block;vertical-align:middle}.uk-logo:hover{color:#333;text-decoration:none}.uk-logo :where(img, svg, video){display:block}.uk-logo-inverse{display:none}.uk-disabled{pointer-events:none}.uk-drag,.uk-drag *{cursor:move}.uk-drag iframe{pointer-events:none}.uk-dragover{box-shadow:0 0 20px rgba(100,100,100,0.3)}.uk-blend-multiply{mix-blend-mode:multiply}.uk-blend-screen{mix-blend-mode:screen}.uk-blend-overlay{mix-blend-mode:overlay}.uk-blend-darken{mix-blend-mode:darken}.uk-blend-lighten{mix-blend-mode:lighten}.uk-blend-color-dodge{mix-blend-mode:color-dodge}.uk-blend-color-burn{mix-blend-mode:color-burn}.uk-blend-hard-light{mix-blend-mode:hard-light}.uk-blend-soft-light{mix-blend-mode:soft-light}.uk-blend-difference{mix-blend-mode:difference}.uk-blend-exclusion{mix-blend-mode:exclusion}.uk-blend-hue{mix-blend-mode:hue}.uk-blend-saturation{mix-blend-mode:saturation}.uk-blend-color{mix-blend-mode:color}.uk-blend-luminosity{mix-blend-mode:luminosity}.uk-transform-center{transform:translate(-50%, -50%)}.uk-transform-origin-top-left{transform-origin:0 0}.uk-transform-origin-top-center{transform-origin:50% 0}.uk-transform-origin-top-right{transform-origin:100% 0}.uk-transform-origin-center-left{transform-origin:0 50%}.uk-transform-origin-center-right{transform-origin:100% 50%}.uk-transform-origin-bottom-left{transform-origin:0 100%}.uk-transform-origin-bottom-center{transform-origin:50% 100%}.uk-transform-origin-bottom-right{transform-origin:100% 100%}.uk-flex{display:flex}.uk-flex-inline{display:inline-flex}.uk-flex-left{justify-content:flex-start}.uk-flex-center{justify-content:center}.uk-flex-right{justify-content:flex-end}.uk-flex-between{justify-content:space-between}.uk-flex-around{justify-content:space-around}@media (min-width: 640px){.uk-flex-left\@s{justify-content:flex-start}.uk-flex-center\@s{justify-content:center}.uk-flex-right\@s{justify-content:flex-end}.uk-flex-between\@s{justify-content:space-between}.uk-flex-around\@s{justify-content:space-around}}@media (min-width: 960px){.uk-flex-left\@m{justify-content:flex-start}.uk-flex-center\@m{justify-content:center}.uk-flex-right\@m{justify-content:flex-end}.uk-flex-between\@m{justify-content:space-between}.uk-flex-around\@m{justify-content:space-around}}@media (min-width: 1200px){.uk-flex-left\@l{justify-content:flex-start}.uk-flex-center\@l{justify-content:center}.uk-flex-right\@l{justify-content:flex-end}.uk-flex-between\@l{justify-content:space-between}.uk-flex-around\@l{justify-content:space-around}}@media (min-width: 1600px){.uk-flex-left\@xl{justify-content:flex-start}.uk-flex-center\@xl{justify-content:center}.uk-flex-right\@xl{justify-content:flex-end}.uk-flex-between\@xl{justify-content:space-between}.uk-flex-around\@xl{justify-content:space-around}}.uk-flex-stretch{align-items:stretch}.uk-flex-top{align-items:flex-start}.uk-flex-middle{align-items:center}.uk-flex-bottom{align-items:flex-end}.uk-flex-row{flex-direction:row}.uk-flex-row-reverse{flex-direction:row-reverse}.uk-flex-column{flex-direction:column}.uk-flex-column-reverse{flex-direction:column-reverse}.uk-flex-nowrap{flex-wrap:nowrap}.uk-flex-wrap{flex-wrap:wrap}.uk-flex-wrap-reverse{flex-wrap:wrap-reverse}.uk-flex-wrap-stretch{align-content:stretch}.uk-flex-wrap-top{align-content:flex-start}.uk-flex-wrap-middle{align-content:center}.uk-flex-wrap-bottom{align-content:flex-end}.uk-flex-wrap-between{align-content:space-between}.uk-flex-wrap-around{align-content:space-around}.uk-flex-first{order:-1}.uk-flex-last{order:99}@media (min-width: 640px){.uk-flex-first\@s{order:-1}.uk-flex-last\@s{order:99}}@media (min-width: 960px){.uk-flex-first\@m{order:-1}.uk-flex-last\@m{order:99}}@media (min-width: 1200px){.uk-flex-first\@l{order:-1}.uk-flex-last\@l{order:99}}@media (min-width: 1600px){.uk-flex-first\@xl{order:-1}.uk-flex-last\@xl{order:99}}.uk-flex-none{flex:none}.uk-flex-auto{flex:auto}.uk-flex-1{flex:1}.uk-margin{margin-bottom:20px}*+.uk-margin{margin-top:20px !important}.uk-margin-top{margin-top:20px !important}.uk-margin-bottom{margin-bottom:20px !important}.uk-margin-left{margin-left:20px !important}.uk-margin-right{margin-right:20px !important}.uk-margin-small{margin-bottom:10px}*+.uk-margin-small{margin-top:10px !important}.uk-margin-small-top{margin-top:10px !important}.uk-margin-small-bottom{margin-bottom:10px !important}.uk-margin-small-left{margin-left:10px !important}.uk-margin-small-right{margin-right:10px !important}.uk-margin-medium{margin-bottom:40px}*+.uk-margin-medium{margin-top:40px !important}.uk-margin-medium-top{margin-top:40px !important}.uk-margin-medium-bottom{margin-bottom:40px !important}.uk-margin-medium-left{margin-left:40px !important}.uk-margin-medium-right{margin-right:40px !important}.uk-margin-large{margin-bottom:40px}*+.uk-margin-large{margin-top:40px !important}.uk-margin-large-top{margin-top:40px !important}.uk-margin-large-bottom{margin-bottom:40px !important}.uk-margin-large-left{margin-left:40px !important}.uk-margin-large-right{margin-right:40px !important}@media (min-width: 1200px){.uk-margin-large{margin-bottom:70px}*+.uk-margin-large{margin-top:70px !important}.uk-margin-large-top{margin-top:70px !important}.uk-margin-large-bottom{margin-bottom:70px !important}.uk-margin-large-left{margin-left:70px !important}.uk-margin-large-right{margin-right:70px !important}}.uk-margin-xlarge{margin-bottom:70px}*+.uk-margin-xlarge{margin-top:70px !important}.uk-margin-xlarge-top{margin-top:70px !important}.uk-margin-xlarge-bottom{margin-bottom:70px !important}.uk-margin-xlarge-left{margin-left:70px !important}.uk-margin-xlarge-right{margin-right:70px !important}@media (min-width: 1200px){.uk-margin-xlarge{margin-bottom:140px}*+.uk-margin-xlarge{margin-top:140px !important}.uk-margin-xlarge-top{margin-top:140px !important}.uk-margin-xlarge-bottom{margin-bottom:140px !important}.uk-margin-xlarge-left{margin-left:140px !important}.uk-margin-xlarge-right{margin-right:140px !important}}.uk-margin-auto{margin-left:auto !important;margin-right:auto !important}.uk-margin-auto-top{margin-top:auto !important}.uk-margin-auto-bottom{margin-bottom:auto !important}.uk-margin-auto-left{margin-left:auto !important}.uk-margin-auto-right{margin-right:auto !important}.uk-margin-auto-vertical{margin-top:auto !important;margin-bottom:auto !important}@media (min-width: 640px){.uk-margin-auto\@s{margin-left:auto !important;margin-right:auto !important}.uk-margin-auto-left\@s{margin-left:auto !important}.uk-margin-auto-right\@s{margin-right:auto !important}}@media (min-width: 960px){.uk-margin-auto\@m{margin-left:auto !important;margin-right:auto !important}.uk-margin-auto-left\@m{margin-left:auto !important}.uk-margin-auto-right\@m{margin-right:auto !important}}@media (min-width: 1200px){.uk-margin-auto\@l{margin-left:auto !important;margin-right:auto !important}.uk-margin-auto-left\@l{margin-left:auto !important}.uk-margin-auto-right\@l{margin-right:auto !important}}@media (min-width: 1600px){.uk-margin-auto\@xl{margin-left:auto !important;margin-right:auto !important}.uk-margin-auto-left\@xl{margin-left:auto !important}.uk-margin-auto-right\@xl{margin-right:auto !important}}.uk-margin-remove{margin:0 !important}.uk-margin-remove-top{margin-top:0 !important}.uk-margin-remove-bottom{margin-bottom:0 !important}.uk-margin-remove-left{margin-left:0 !important}.uk-margin-remove-right{margin-right:0 !important}.uk-margin-remove-vertical{margin-top:0 !important;margin-bottom:0 !important}.uk-margin-remove-adjacent+*,.uk-margin-remove-first-child>:first-child{margin-top:0 !important}.uk-margin-remove-last-child>:last-child{margin-bottom:0 !important}@media (min-width: 640px){.uk-margin-remove-left\@s{margin-left:0 !important}.uk-margin-remove-right\@s{margin-right:0 !important}}@media (min-width: 960px){.uk-margin-remove-left\@m{margin-left:0 !important}.uk-margin-remove-right\@m{margin-right:0 !important}}@media (min-width: 1200px){.uk-margin-remove-left\@l{margin-left:0 !important}.uk-margin-remove-right\@l{margin-right:0 !important}}@media (min-width: 1600px){.uk-margin-remove-left\@xl{margin-left:0 !important}.uk-margin-remove-right\@xl{margin-right:0 !important}}.uk-padding{padding:30px}@media (min-width: 1200px){.uk-padding{padding:40px}}.uk-padding-small{padding:15px}.uk-padding-large{padding:40px}@media (min-width: 1200px){.uk-padding-large{padding:70px}}.uk-padding-remove{padding:0 !important}.uk-padding-remove-top{padding-top:0 !important}.uk-padding-remove-bottom{padding-bottom:0 !important}.uk-padding-remove-left{padding-left:0 !important}.uk-padding-remove-right{padding-right:0 !important}.uk-padding-remove-vertical{padding-top:0 !important;padding-bottom:0 !important}.uk-padding-remove-horizontal{padding-left:0 !important;padding-right:0 !important}:root{--uk-position-margin-offset: 0px}[class*='uk-position-top'],[class*='uk-position-bottom'],[class*='uk-position-left'],[class*='uk-position-right'],[class*='uk-position-center']{position:absolute !important;max-width:calc(100% - (var(--uk-position-margin-offset) * 2));box-sizing:border-box}.uk-position-top{top:0;left:0;right:0}.uk-position-bottom{bottom:0;left:0;right:0}.uk-position-left{top:0;bottom:0;left:0}.uk-position-right{top:0;bottom:0;right:0}.uk-position-top-left{top:0;left:0}.uk-position-top-right{top:0;right:0}.uk-position-bottom-left{bottom:0;left:0}.uk-position-bottom-right{bottom:0;right:0}.uk-position-center{top:calc(50% - var(--uk-position-margin-offset));left:calc(50% - var(--uk-position-margin-offset));--uk-position-translate-x: -50%;--uk-position-translate-y: -50%;transform:translate(var(--uk-position-translate-x), var(--uk-position-translate-y));width:max-content}[class*='uk-position-center-left'],[class*='uk-position-center-right']{top:calc(50% - var(--uk-position-margin-offset));--uk-position-translate-y: -50%;transform:translate(0, var(--uk-position-translate-y))}.uk-position-center-left{left:0}.uk-position-center-right{right:0}.uk-position-center-left-out{right:100%;width:max-content}.uk-position-center-right-out{left:100%;width:max-content}.uk-position-top-center,.uk-position-bottom-center{left:calc(50% - var(--uk-position-margin-offset));--uk-position-translate-x: -50%;transform:translate(var(--uk-position-translate-x), 0);width:max-content}.uk-position-top-center{top:0}.uk-position-bottom-center{bottom:0}.uk-position-cover{position:absolute;top:0;bottom:0;left:0;right:0}.uk-position-small{margin:15px;--uk-position-margin-offset: 15px}.uk-position-medium{margin:30px;--uk-position-margin-offset: 30px}.uk-position-large{margin:30px;--uk-position-margin-offset: 30px}@media (min-width: 1200px){.uk-position-large{margin:50px;--uk-position-margin-offset: 50px}}.uk-position-relative{position:relative !important}.uk-position-absolute{position:absolute !important}.uk-position-fixed{position:fixed !important}.uk-position-sticky{position:sticky !important}.uk-position-z-index{z-index:1}.uk-position-z-index-zero{z-index:0}.uk-position-z-index-negative{z-index:-1}:where(.uk-transition-fade),:where([class*='uk-transition-scale']),:where([class*='uk-transition-slide']){--uk-position-translate-x: 0;--uk-position-translate-y: 0}.uk-transition-fade,[class*='uk-transition-scale'],[class*='uk-transition-slide']{--uk-translate-x: 0;--uk-translate-y: 0;--uk-scale-x: 1;--uk-scale-y: 1;transform:translate(var(--uk-position-translate-x), var(--uk-position-translate-y)) translate(var(--uk-translate-x), var(--uk-translate-y)) scale(var(--uk-scale-x), var(--uk-scale-y));transition:.3s ease-out;transition-property:opacity, transform, filter;opacity:0}.uk-transition-toggle:hover .uk-transition-fade,.uk-transition-toggle:focus .uk-transition-fade,.uk-transition-toggle .uk-transition-fade:focus-within,.uk-transition-active.uk-active .uk-transition-fade{opacity:1}[class*='uk-transition-scale']{-webkit-backface-visibility:hidden}.uk-transition-scale-up{--uk-scale-x: 1;--uk-scale-y: 1}.uk-transition-scale-down{--uk-scale-x: 1.03;--uk-scale-y: 1.03}.uk-transition-toggle:hover .uk-transition-scale-up,.uk-transition-toggle:focus .uk-transition-scale-up,.uk-transition-toggle .uk-transition-scale-up:focus-within,.uk-transition-active.uk-active .uk-transition-scale-up{--uk-scale-x: 1.03;--uk-scale-y: 1.03;opacity:1}.uk-transition-toggle:hover .uk-transition-scale-down,.uk-transition-toggle:focus .uk-transition-scale-down,.uk-transition-toggle .uk-transition-scale-down:focus-within,.uk-transition-active.uk-active .uk-transition-scale-down{--uk-scale-x: 1;--uk-scale-y: 1;opacity:1}.uk-transition-slide-top{--uk-translate-y: -100%}.uk-transition-slide-bottom{--uk-translate-y: 100%}.uk-transition-slide-left{--uk-translate-x: -100%}.uk-transition-slide-right{--uk-translate-x: 100%}.uk-transition-slide-top-small{--uk-translate-y: calc(-1 * 10px)}.uk-transition-slide-bottom-small{--uk-translate-y: 10px}.uk-transition-slide-left-small{--uk-translate-x: calc(-1 * 10px)}.uk-transition-slide-right-small{--uk-translate-x: 10px}.uk-transition-slide-top-medium{--uk-translate-y: calc(-1 * 50px)}.uk-transition-slide-bottom-medium{--uk-translate-y: 50px}.uk-transition-slide-left-medium{--uk-translate-x: calc(-1 * 50px)}.uk-transition-slide-right-medium{--uk-translate-x: 50px}.uk-transition-toggle:hover [class*='uk-transition-slide'],.uk-transition-toggle:focus [class*='uk-transition-slide'],.uk-transition-toggle [class*='uk-transition-slide']:focus-within,.uk-transition-active.uk-active [class*='uk-transition-slide']{--uk-translate-x: 0;--uk-translate-y: 0;opacity:1}.uk-transition-opaque{opacity:1}.uk-transition-slow{transition-duration:.7s}[hidden],.uk-hidden{display:none !important}@media (min-width: 640px){.uk-hidden\@s{display:none !important}}@media (min-width: 960px){.uk-hidden\@m{display:none !important}}@media (min-width: 1200px){.uk-hidden\@l{display:none !important}}@media (min-width: 1600px){.uk-hidden\@xl{display:none !important}}@media (max-width: 639px){.uk-visible\@s{display:none !important}}@media (max-width: 959px){.uk-visible\@m{display:none !important}}@media (max-width: 1199px){.uk-visible\@l{display:none !important}}@media (max-width: 1599px){.uk-visible\@xl{display:none !important}}.uk-invisible{visibility:hidden !important}.uk-visible-toggle:not(:hover):not(:focus) .uk-hidden-hover:not(:focus-within){position:absolute !important;width:0 !important;height:0 !important;padding:0 !important;margin:0 !important;overflow:hidden !important}.uk-visible-toggle:not(:hover):not(:focus) .uk-invisible-hover:not(:focus-within){opacity:0 !important}@media (hover: none){.uk-hidden-touch{display:none !important}}@media (hover){.uk-hidden-notouch{display:none !important}}.uk-light,.uk-section-primary:not(.uk-preserve-color),.uk-section-secondary:not(.uk-preserve-color),.uk-tile-primary:not(.uk-preserve-color),.uk-tile-secondary:not(.uk-preserve-color),.uk-card-primary.uk-card-body,.uk-card-primary>:not([class*='uk-card-media']),.uk-card-secondary.uk-card-body,.uk-card-secondary>:not([class*='uk-card-media']),.uk-overlay-primary,.uk-offcanvas-bar{color:rgba(255,255,255,0.7)}.uk-light a,.uk-section-primary:not(.uk-preserve-color) a,.uk-section-secondary:not(.uk-preserve-color) a,.uk-tile-primary:not(.uk-preserve-color) a,.uk-tile-secondary:not(.uk-preserve-color) a,.uk-card-primary.uk-card-body a,.uk-card-primary>:not([class*='uk-card-media']) a,.uk-card-secondary.uk-card-body a,.uk-card-secondary>:not([class*='uk-card-media']) a,.uk-overlay-primary a,.uk-offcanvas-bar a,.uk-light .uk-link,.uk-section-primary:not(.uk-preserve-color) .uk-link,.uk-section-secondary:not(.uk-preserve-color) .uk-link,.uk-tile-primary:not(.uk-preserve-color) .uk-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-link,.uk-card-primary.uk-card-body .uk-link,.uk-card-primary>:not([class*='uk-card-media']) .uk-link,.uk-card-secondary.uk-card-body .uk-link,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link,.uk-overlay-primary .uk-link,.uk-offcanvas-bar .uk-link{color:#fff}.uk-light a:hover,.uk-section-primary:not(.uk-preserve-color) a:hover,.uk-section-secondary:not(.uk-preserve-color) a:hover,.uk-tile-primary:not(.uk-preserve-color) a:hover,.uk-tile-secondary:not(.uk-preserve-color) a:hover,.uk-card-primary.uk-card-body a:hover,.uk-card-primary>:not([class*='uk-card-media']) a:hover,.uk-card-secondary.uk-card-body a:hover,.uk-card-secondary>:not([class*='uk-card-media']) a:hover,.uk-overlay-primary a:hover,.uk-offcanvas-bar a:hover,.uk-light .uk-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link:hover,.uk-card-primary.uk-card-body .uk-link:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-link:hover,.uk-card-secondary.uk-card-body .uk-link:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link:hover,.uk-overlay-primary .uk-link:hover,.uk-offcanvas-bar .uk-link:hover,.uk-light .uk-link-toggle:hover .uk-link,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-toggle:hover .uk-link,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-toggle:hover .uk-link,.uk-overlay-primary .uk-link-toggle:hover .uk-link,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link{color:#fff}.uk-light :not(pre)>code,.uk-section-primary:not(.uk-preserve-color) :not(pre)>code,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>code,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>code,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>code,.uk-card-primary.uk-card-body :not(pre)>code,.uk-card-primary>:not([class*='uk-card-media']) :not(pre)>code,.uk-card-secondary.uk-card-body :not(pre)>code,.uk-card-secondary>:not([class*='uk-card-media']) :not(pre)>code,.uk-overlay-primary :not(pre)>code,.uk-offcanvas-bar :not(pre)>code,.uk-light :not(pre)>kbd,.uk-section-primary:not(.uk-preserve-color) :not(pre)>kbd,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>kbd,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>kbd,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>kbd,.uk-card-primary.uk-card-body :not(pre)>kbd,.uk-card-primary>:not([class*='uk-card-media']) :not(pre)>kbd,.uk-card-secondary.uk-card-body :not(pre)>kbd,.uk-card-secondary>:not([class*='uk-card-media']) :not(pre)>kbd,.uk-overlay-primary :not(pre)>kbd,.uk-offcanvas-bar :not(pre)>kbd,.uk-light :not(pre)>samp,.uk-section-primary:not(.uk-preserve-color) :not(pre)>samp,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>samp,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>samp,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>samp,.uk-card-primary.uk-card-body :not(pre)>samp,.uk-card-primary>:not([class*='uk-card-media']) :not(pre)>samp,.uk-card-secondary.uk-card-body :not(pre)>samp,.uk-card-secondary>:not([class*='uk-card-media']) :not(pre)>samp,.uk-overlay-primary :not(pre)>samp,.uk-offcanvas-bar :not(pre)>samp{color:rgba(255,255,255,0.7);background:rgba(255,255,255,0.1)}.uk-light em,.uk-section-primary:not(.uk-preserve-color) em,.uk-section-secondary:not(.uk-preserve-color) em,.uk-tile-primary:not(.uk-preserve-color) em,.uk-tile-secondary:not(.uk-preserve-color) em,.uk-card-primary.uk-card-body em,.uk-card-primary>:not([class*='uk-card-media']) em,.uk-card-secondary.uk-card-body em,.uk-card-secondary>:not([class*='uk-card-media']) em,.uk-overlay-primary em,.uk-offcanvas-bar em{color:#fff}.uk-light h1,.uk-section-primary:not(.uk-preserve-color) h1,.uk-section-secondary:not(.uk-preserve-color) h1,.uk-tile-primary:not(.uk-preserve-color) h1,.uk-tile-secondary:not(.uk-preserve-color) h1,.uk-card-primary.uk-card-body h1,.uk-card-primary>:not([class*='uk-card-media']) h1,.uk-card-secondary.uk-card-body h1,.uk-card-secondary>:not([class*='uk-card-media']) h1,.uk-overlay-primary h1,.uk-offcanvas-bar h1,.uk-light .uk-h1,.uk-section-primary:not(.uk-preserve-color) .uk-h1,.uk-section-secondary:not(.uk-preserve-color) .uk-h1,.uk-tile-primary:not(.uk-preserve-color) .uk-h1,.uk-tile-secondary:not(.uk-preserve-color) .uk-h1,.uk-card-primary.uk-card-body .uk-h1,.uk-card-primary>:not([class*='uk-card-media']) .uk-h1,.uk-card-secondary.uk-card-body .uk-h1,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h1,.uk-overlay-primary .uk-h1,.uk-offcanvas-bar .uk-h1,.uk-light h2,.uk-section-primary:not(.uk-preserve-color) h2,.uk-section-secondary:not(.uk-preserve-color) h2,.uk-tile-primary:not(.uk-preserve-color) h2,.uk-tile-secondary:not(.uk-preserve-color) h2,.uk-card-primary.uk-card-body h2,.uk-card-primary>:not([class*='uk-card-media']) h2,.uk-card-secondary.uk-card-body h2,.uk-card-secondary>:not([class*='uk-card-media']) h2,.uk-overlay-primary h2,.uk-offcanvas-bar h2,.uk-light .uk-h2,.uk-light .markdown h1,.markdown .uk-light h1,.uk-section-primary:not(.uk-preserve-color) .uk-h2,.uk-section-primary:not(.uk-preserve-color) .markdown h1,.markdown .uk-section-primary:not(.uk-preserve-color) h1,.uk-section-secondary:not(.uk-preserve-color) .uk-h2,.uk-section-secondary:not(.uk-preserve-color) .markdown h1,.markdown .uk-section-secondary:not(.uk-preserve-color) h1,.uk-tile-primary:not(.uk-preserve-color) .uk-h2,.uk-tile-primary:not(.uk-preserve-color) .markdown h1,.markdown .uk-tile-primary:not(.uk-preserve-color) h1,.uk-tile-secondary:not(.uk-preserve-color) .uk-h2,.uk-tile-secondary:not(.uk-preserve-color) .markdown h1,.markdown .uk-tile-secondary:not(.uk-preserve-color) h1,.uk-card-primary.uk-card-body .uk-h2,.uk-card-primary.uk-card-body .markdown h1,.markdown .uk-card-primary.uk-card-body h1,.uk-card-primary>:not([class*='uk-card-media']) .uk-h2,.uk-card-primary>:not([class*='uk-card-media']) .markdown h1,.markdown .uk-card-primary>:not([class*='uk-card-media']) h1,.uk-card-secondary.uk-card-body .uk-h2,.uk-card-secondary.uk-card-body .markdown h1,.markdown .uk-card-secondary.uk-card-body h1,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h2,.uk-card-secondary>:not([class*='uk-card-media']) .markdown h1,.markdown .uk-card-secondary>:not([class*='uk-card-media']) h1,.uk-overlay-primary .uk-h2,.uk-overlay-primary .markdown h1,.markdown .uk-overlay-primary h1,.uk-offcanvas-bar .uk-h2,.uk-offcanvas-bar .markdown h1,.markdown .uk-offcanvas-bar h1,.uk-light h3,.uk-section-primary:not(.uk-preserve-color) h3,.uk-section-secondary:not(.uk-preserve-color) h3,.uk-tile-primary:not(.uk-preserve-color) h3,.uk-tile-secondary:not(.uk-preserve-color) h3,.uk-card-primary.uk-card-body h3,.uk-card-primary>:not([class*='uk-card-media']) h3,.uk-card-secondary.uk-card-body h3,.uk-card-secondary>:not([class*='uk-card-media']) h3,.uk-overlay-primary h3,.uk-offcanvas-bar h3,.uk-light .uk-h3,.uk-light .markdown h2,.markdown .uk-light h2,.uk-section-primary:not(.uk-preserve-color) .uk-h3,.uk-section-primary:not(.uk-preserve-color) .markdown h2,.markdown .uk-section-primary:not(.uk-preserve-color) h2,.uk-section-secondary:not(.uk-preserve-color) .uk-h3,.uk-section-secondary:not(.uk-preserve-color) .markdown h2,.markdown .uk-section-secondary:not(.uk-preserve-color) h2,.uk-tile-primary:not(.uk-preserve-color) .uk-h3,.uk-tile-primary:not(.uk-preserve-color) .markdown h2,.markdown .uk-tile-primary:not(.uk-preserve-color) h2,.uk-tile-secondary:not(.uk-preserve-color) .uk-h3,.uk-tile-secondary:not(.uk-preserve-color) .markdown h2,.markdown .uk-tile-secondary:not(.uk-preserve-color) h2,.uk-card-primary.uk-card-body .uk-h3,.uk-card-primary.uk-card-body .markdown h2,.markdown .uk-card-primary.uk-card-body h2,.uk-card-primary>:not([class*='uk-card-media']) .uk-h3,.uk-card-primary>:not([class*='uk-card-media']) .markdown h2,.markdown .uk-card-primary>:not([class*='uk-card-media']) h2,.uk-card-secondary.uk-card-body .uk-h3,.uk-card-secondary.uk-card-body .markdown h2,.markdown .uk-card-secondary.uk-card-body h2,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h3,.uk-card-secondary>:not([class*='uk-card-media']) .markdown h2,.markdown .uk-card-secondary>:not([class*='uk-card-media']) h2,.uk-overlay-primary .uk-h3,.uk-overlay-primary .markdown h2,.markdown .uk-overlay-primary h2,.uk-offcanvas-bar .uk-h3,.uk-offcanvas-bar .markdown h2,.markdown .uk-offcanvas-bar h2,.uk-light h4,.uk-section-primary:not(.uk-preserve-color) h4,.uk-section-secondary:not(.uk-preserve-color) h4,.uk-tile-primary:not(.uk-preserve-color) h4,.uk-tile-secondary:not(.uk-preserve-color) h4,.uk-card-primary.uk-card-body h4,.uk-card-primary>:not([class*='uk-card-media']) h4,.uk-card-secondary.uk-card-body h4,.uk-card-secondary>:not([class*='uk-card-media']) h4,.uk-overlay-primary h4,.uk-offcanvas-bar h4,.uk-light .uk-h4,.uk-light .markdown h3,.markdown .uk-light h3,.uk-section-primary:not(.uk-preserve-color) .uk-h4,.uk-section-primary:not(.uk-preserve-color) .markdown h3,.markdown .uk-section-primary:not(.uk-preserve-color) h3,.uk-section-secondary:not(.uk-preserve-color) .uk-h4,.uk-section-secondary:not(.uk-preserve-color) .markdown h3,.markdown .uk-section-secondary:not(.uk-preserve-color) h3,.uk-tile-primary:not(.uk-preserve-color) .uk-h4,.uk-tile-primary:not(.uk-preserve-color) .markdown h3,.markdown .uk-tile-primary:not(.uk-preserve-color) h3,.uk-tile-secondary:not(.uk-preserve-color) .uk-h4,.uk-tile-secondary:not(.uk-preserve-color) .markdown h3,.markdown .uk-tile-secondary:not(.uk-preserve-color) h3,.uk-card-primary.uk-card-body .uk-h4,.uk-card-primary.uk-card-body .markdown h3,.markdown .uk-card-primary.uk-card-body h3,.uk-card-primary>:not([class*='uk-card-media']) .uk-h4,.uk-card-primary>:not([class*='uk-card-media']) .markdown h3,.markdown .uk-card-primary>:not([class*='uk-card-media']) h3,.uk-card-secondary.uk-card-body .uk-h4,.uk-card-secondary.uk-card-body .markdown h3,.markdown .uk-card-secondary.uk-card-body h3,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h4,.uk-card-secondary>:not([class*='uk-card-media']) .markdown h3,.markdown .uk-card-secondary>:not([class*='uk-card-media']) h3,.uk-overlay-primary .uk-h4,.uk-overlay-primary .markdown h3,.markdown .uk-overlay-primary h3,.uk-offcanvas-bar .uk-h4,.uk-offcanvas-bar .markdown h3,.markdown .uk-offcanvas-bar h3,.uk-light h5,.uk-section-primary:not(.uk-preserve-color) h5,.uk-section-secondary:not(.uk-preserve-color) h5,.uk-tile-primary:not(.uk-preserve-color) h5,.uk-tile-secondary:not(.uk-preserve-color) h5,.uk-card-primary.uk-card-body h5,.uk-card-primary>:not([class*='uk-card-media']) h5,.uk-card-secondary.uk-card-body h5,.uk-card-secondary>:not([class*='uk-card-media']) h5,.uk-overlay-primary h5,.uk-offcanvas-bar h5,.uk-light .uk-h5,.uk-section-primary:not(.uk-preserve-color) .uk-h5,.uk-section-secondary:not(.uk-preserve-color) .uk-h5,.uk-tile-primary:not(.uk-preserve-color) .uk-h5,.uk-tile-secondary:not(.uk-preserve-color) .uk-h5,.uk-card-primary.uk-card-body .uk-h5,.uk-card-primary>:not([class*='uk-card-media']) .uk-h5,.uk-card-secondary.uk-card-body .uk-h5,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h5,.uk-overlay-primary .uk-h5,.uk-offcanvas-bar .uk-h5,.uk-light h6,.uk-section-primary:not(.uk-preserve-color) h6,.uk-section-secondary:not(.uk-preserve-color) h6,.uk-tile-primary:not(.uk-preserve-color) h6,.uk-tile-secondary:not(.uk-preserve-color) h6,.uk-card-primary.uk-card-body h6,.uk-card-primary>:not([class*='uk-card-media']) h6,.uk-card-secondary.uk-card-body h6,.uk-card-secondary>:not([class*='uk-card-media']) h6,.uk-overlay-primary h6,.uk-offcanvas-bar h6,.uk-light .uk-h6,.uk-section-primary:not(.uk-preserve-color) .uk-h6,.uk-section-secondary:not(.uk-preserve-color) .uk-h6,.uk-tile-primary:not(.uk-preserve-color) .uk-h6,.uk-tile-secondary:not(.uk-preserve-color) .uk-h6,.uk-card-primary.uk-card-body .uk-h6,.uk-card-primary>:not([class*='uk-card-media']) .uk-h6,.uk-card-secondary.uk-card-body .uk-h6,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h6,.uk-overlay-primary .uk-h6,.uk-offcanvas-bar .uk-h6,.uk-light .uk-heading-small,.uk-section-primary:not(.uk-preserve-color) .uk-heading-small,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-small,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-small,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-small,.uk-card-primary.uk-card-body .uk-heading-small,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-small,.uk-card-secondary.uk-card-body .uk-heading-small,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-small,.uk-overlay-primary .uk-heading-small,.uk-offcanvas-bar .uk-heading-small,.uk-light .uk-heading-medium,.uk-section-primary:not(.uk-preserve-color) .uk-heading-medium,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-medium,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-medium,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-medium,.uk-card-primary.uk-card-body .uk-heading-medium,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-medium,.uk-card-secondary.uk-card-body .uk-heading-medium,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-medium,.uk-overlay-primary .uk-heading-medium,.uk-offcanvas-bar .uk-heading-medium,.uk-light .uk-heading-large,.uk-section-primary:not(.uk-preserve-color) .uk-heading-large,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-large,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-large,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-large,.uk-card-primary.uk-card-body .uk-heading-large,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-large,.uk-card-secondary.uk-card-body .uk-heading-large,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-large,.uk-overlay-primary .uk-heading-large,.uk-offcanvas-bar .uk-heading-large,.uk-light .uk-heading-xlarge,.uk-section-primary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-card-primary.uk-card-body .uk-heading-xlarge,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-xlarge,.uk-card-secondary.uk-card-body .uk-heading-xlarge,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-xlarge,.uk-overlay-primary .uk-heading-xlarge,.uk-offcanvas-bar .uk-heading-xlarge,.uk-light .uk-heading-2xlarge,.uk-section-primary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-card-primary.uk-card-body .uk-heading-2xlarge,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-2xlarge,.uk-card-secondary.uk-card-body .uk-heading-2xlarge,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-2xlarge,.uk-overlay-primary .uk-heading-2xlarge,.uk-offcanvas-bar .uk-heading-2xlarge{color:#fff}.uk-light blockquote,.uk-section-primary:not(.uk-preserve-color) blockquote,.uk-section-secondary:not(.uk-preserve-color) blockquote,.uk-tile-primary:not(.uk-preserve-color) blockquote,.uk-tile-secondary:not(.uk-preserve-color) blockquote,.uk-card-primary.uk-card-body blockquote,.uk-card-primary>:not([class*='uk-card-media']) blockquote,.uk-card-secondary.uk-card-body blockquote,.uk-card-secondary>:not([class*='uk-card-media']) blockquote,.uk-overlay-primary blockquote,.uk-offcanvas-bar blockquote{color:#fff}.uk-light blockquote footer,.uk-section-primary:not(.uk-preserve-color) blockquote footer,.uk-section-secondary:not(.uk-preserve-color) blockquote footer,.uk-tile-primary:not(.uk-preserve-color) blockquote footer,.uk-tile-secondary:not(.uk-preserve-color) blockquote footer,.uk-card-primary.uk-card-body blockquote footer,.uk-card-primary>:not([class*='uk-card-media']) blockquote footer,.uk-card-secondary.uk-card-body blockquote footer,.uk-card-secondary>:not([class*='uk-card-media']) blockquote footer,.uk-overlay-primary blockquote footer,.uk-offcanvas-bar blockquote footer{color:rgba(255,255,255,0.7)}.uk-light hr,.uk-section-primary:not(.uk-preserve-color) hr,.uk-section-secondary:not(.uk-preserve-color) hr,.uk-tile-primary:not(.uk-preserve-color) hr,.uk-tile-secondary:not(.uk-preserve-color) hr,.uk-card-primary.uk-card-body hr,.uk-card-primary>:not([class*='uk-card-media']) hr,.uk-card-secondary.uk-card-body hr,.uk-card-secondary>:not([class*='uk-card-media']) hr,.uk-overlay-primary hr,.uk-offcanvas-bar hr,.uk-light .uk-hr,.uk-section-primary:not(.uk-preserve-color) .uk-hr,.uk-section-secondary:not(.uk-preserve-color) .uk-hr,.uk-tile-primary:not(.uk-preserve-color) .uk-hr,.uk-tile-secondary:not(.uk-preserve-color) .uk-hr,.uk-card-primary.uk-card-body .uk-hr,.uk-card-primary>:not([class*='uk-card-media']) .uk-hr,.uk-card-secondary.uk-card-body .uk-hr,.uk-card-secondary>:not([class*='uk-card-media']) .uk-hr,.uk-overlay-primary .uk-hr,.uk-offcanvas-bar .uk-hr{border-top-color:rgba(255,255,255,0.2)}.uk-light :focus,.uk-section-primary:not(.uk-preserve-color) :focus,.uk-section-secondary:not(.uk-preserve-color) :focus,.uk-tile-primary:not(.uk-preserve-color) :focus,.uk-tile-secondary:not(.uk-preserve-color) :focus,.uk-card-primary.uk-card-body :focus,.uk-card-primary>:not([class*='uk-card-media']) :focus,.uk-card-secondary.uk-card-body :focus,.uk-card-secondary>:not([class*='uk-card-media']) :focus,.uk-overlay-primary :focus,.uk-offcanvas-bar :focus{outline-color:#fff}.uk-light :focus-visible,.uk-section-primary:not(.uk-preserve-color) :focus-visible,.uk-section-secondary:not(.uk-preserve-color) :focus-visible,.uk-tile-primary:not(.uk-preserve-color) :focus-visible,.uk-tile-secondary:not(.uk-preserve-color) :focus-visible,.uk-card-primary.uk-card-body :focus-visible,.uk-card-primary>:not([class*='uk-card-media']) :focus-visible,.uk-card-secondary.uk-card-body :focus-visible,.uk-card-secondary>:not([class*='uk-card-media']) :focus-visible,.uk-overlay-primary :focus-visible,.uk-offcanvas-bar :focus-visible{outline-color:#fff}.uk-light a.uk-link-muted,.uk-section-primary:not(.uk-preserve-color) a.uk-link-muted,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-muted,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-muted,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-muted,.uk-card-primary.uk-card-body a.uk-link-muted,.uk-card-primary>:not([class*='uk-card-media']) a.uk-link-muted,.uk-card-secondary.uk-card-body a.uk-link-muted,.uk-card-secondary>:not([class*='uk-card-media']) a.uk-link-muted,.uk-overlay-primary a.uk-link-muted,.uk-offcanvas-bar a.uk-link-muted,.uk-light .uk-link-muted a,.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a,.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a,.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a,.uk-card-primary.uk-card-body .uk-link-muted a,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-muted a,.uk-card-secondary.uk-card-body .uk-link-muted a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-muted a,.uk-overlay-primary .uk-link-muted a,.uk-offcanvas-bar .uk-link-muted a{color:rgba(255,255,255,0.5)}.uk-light a.uk-link-muted:hover,.uk-section-primary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-card-primary.uk-card-body a.uk-link-muted:hover,.uk-card-primary>:not([class*='uk-card-media']) a.uk-link-muted:hover,.uk-card-secondary.uk-card-body a.uk-link-muted:hover,.uk-card-secondary>:not([class*='uk-card-media']) a.uk-link-muted:hover,.uk-overlay-primary a.uk-link-muted:hover,.uk-offcanvas-bar a.uk-link-muted:hover,.uk-light .uk-link-muted a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-card-primary.uk-card-body .uk-link-muted a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-muted a:hover,.uk-card-secondary.uk-card-body .uk-link-muted a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-muted a:hover,.uk-overlay-primary .uk-link-muted a:hover,.uk-offcanvas-bar .uk-link-muted a:hover,.uk-light .uk-link-toggle:hover .uk-link-muted,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-muted,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-toggle:hover .uk-link-muted,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-muted,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-toggle:hover .uk-link-muted,.uk-overlay-primary .uk-link-toggle:hover .uk-link-muted,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-muted{color:rgba(255,255,255,0.7)}.uk-light a.uk-link-text:hover,.uk-section-primary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-card-primary.uk-card-body a.uk-link-text:hover,.uk-card-primary>:not([class*='uk-card-media']) a.uk-link-text:hover,.uk-card-secondary.uk-card-body a.uk-link-text:hover,.uk-card-secondary>:not([class*='uk-card-media']) a.uk-link-text:hover,.uk-overlay-primary a.uk-link-text:hover,.uk-offcanvas-bar a.uk-link-text:hover,.uk-light .uk-link-text a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-card-primary.uk-card-body .uk-link-text a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-text a:hover,.uk-card-secondary.uk-card-body .uk-link-text a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-text a:hover,.uk-overlay-primary .uk-link-text a:hover,.uk-offcanvas-bar .uk-link-text a:hover,.uk-light .uk-link-toggle:hover .uk-link-text,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-text,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-toggle:hover .uk-link-text,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-text,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-toggle:hover .uk-link-text,.uk-overlay-primary .uk-link-toggle:hover .uk-link-text,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-text{color:rgba(255,255,255,0.5)}.uk-light a.uk-link-heading:hover,.uk-section-primary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-card-primary.uk-card-body a.uk-link-heading:hover,.uk-card-primary>:not([class*='uk-card-media']) a.uk-link-heading:hover,.uk-card-secondary.uk-card-body a.uk-link-heading:hover,.uk-card-secondary>:not([class*='uk-card-media']) a.uk-link-heading:hover,.uk-overlay-primary a.uk-link-heading:hover,.uk-offcanvas-bar a.uk-link-heading:hover,.uk-light .uk-link-heading a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-card-primary.uk-card-body .uk-link-heading a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-heading a:hover,.uk-card-secondary.uk-card-body .uk-link-heading a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-heading a:hover,.uk-overlay-primary .uk-link-heading a:hover,.uk-offcanvas-bar .uk-link-heading a:hover,.uk-light .uk-link-toggle:hover .uk-link-heading,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-heading,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-toggle:hover .uk-link-heading,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-heading,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-toggle:hover .uk-link-heading,.uk-overlay-primary .uk-link-toggle:hover .uk-link-heading,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-heading{color:#fff}.uk-light .uk-heading-divider,.uk-section-primary:not(.uk-preserve-color) .uk-heading-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-divider,.uk-card-primary.uk-card-body .uk-heading-divider,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-divider,.uk-card-secondary.uk-card-body .uk-heading-divider,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-divider,.uk-overlay-primary .uk-heading-divider,.uk-offcanvas-bar .uk-heading-divider{border-bottom-color:rgba(255,255,255,0.2)}.uk-light .uk-heading-bullet::before,.uk-section-primary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-card-primary.uk-card-body .uk-heading-bullet::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-bullet::before,.uk-card-secondary.uk-card-body .uk-heading-bullet::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-bullet::before,.uk-overlay-primary .uk-heading-bullet::before,.uk-offcanvas-bar .uk-heading-bullet::before{border-left-color:rgba(255,255,255,0.2)}.uk-light .uk-heading-line>::before,.uk-section-primary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-card-primary.uk-card-body .uk-heading-line>::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-line>::before,.uk-card-secondary.uk-card-body .uk-heading-line>::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-line>::before,.uk-overlay-primary .uk-heading-line>::before,.uk-offcanvas-bar .uk-heading-line>::before,.uk-light .uk-heading-line>::after,.uk-section-primary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-card-primary.uk-card-body .uk-heading-line>::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-line>::after,.uk-card-secondary.uk-card-body .uk-heading-line>::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-line>::after,.uk-overlay-primary .uk-heading-line>::after,.uk-offcanvas-bar .uk-heading-line>::after{border-bottom-color:rgba(255,255,255,0.2)}.uk-light .uk-divider-icon,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon,.uk-card-primary.uk-card-body .uk-divider-icon,.uk-card-primary>:not([class*='uk-card-media']) .uk-divider-icon,.uk-card-secondary.uk-card-body .uk-divider-icon,.uk-card-secondary>:not([class*='uk-card-media']) .uk-divider-icon,.uk-overlay-primary .uk-divider-icon,.uk-offcanvas-bar .uk-divider-icon{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22rgba(255,255,255,0.2)%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-light .uk-divider-icon::before,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-card-primary.uk-card-body .uk-divider-icon::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-divider-icon::before,.uk-card-secondary.uk-card-body .uk-divider-icon::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-divider-icon::before,.uk-overlay-primary .uk-divider-icon::before,.uk-offcanvas-bar .uk-divider-icon::before,.uk-light .uk-divider-icon::after,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-card-primary.uk-card-body .uk-divider-icon::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-divider-icon::after,.uk-card-secondary.uk-card-body .uk-divider-icon::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-divider-icon::after,.uk-overlay-primary .uk-divider-icon::after,.uk-offcanvas-bar .uk-divider-icon::after{border-bottom-color:rgba(255,255,255,0.2)}.uk-light .uk-divider-small::after,.uk-section-primary:not(.uk-preserve-color) .uk-divider-small::after,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-small::after,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-small::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-small::after,.uk-card-primary.uk-card-body .uk-divider-small::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-divider-small::after,.uk-card-secondary.uk-card-body .uk-divider-small::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-divider-small::after,.uk-overlay-primary .uk-divider-small::after,.uk-offcanvas-bar .uk-divider-small::after{border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-divider-vertical,.uk-section-primary:not(.uk-preserve-color) .uk-divider-vertical,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-vertical,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-vertical,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-vertical,.uk-card-primary.uk-card-body .uk-divider-vertical,.uk-card-primary>:not([class*='uk-card-media']) .uk-divider-vertical,.uk-card-secondary.uk-card-body .uk-divider-vertical,.uk-card-secondary>:not([class*='uk-card-media']) .uk-divider-vertical,.uk-overlay-primary .uk-divider-vertical,.uk-offcanvas-bar .uk-divider-vertical{border-left-color:rgba(255,255,255,0.2)}.uk-light .uk-list-muted>::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-muted>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-muted>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-muted>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-muted>::before,.uk-card-primary.uk-card-body .uk-list-muted>::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-list-muted>::before,.uk-card-secondary.uk-card-body .uk-list-muted>::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-muted>::before,.uk-overlay-primary .uk-list-muted>::before,.uk-offcanvas-bar .uk-list-muted>::before{color:rgba(255,255,255,0.5) !important}.uk-light .uk-list-emphasis>::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-emphasis>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-emphasis>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-emphasis>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-emphasis>::before,.uk-card-primary.uk-card-body .uk-list-emphasis>::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-list-emphasis>::before,.uk-card-secondary.uk-card-body .uk-list-emphasis>::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-emphasis>::before,.uk-overlay-primary .uk-list-emphasis>::before,.uk-offcanvas-bar .uk-list-emphasis>::before{color:#fff !important}.uk-light .uk-list-primary>::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-primary>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-primary>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-primary>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-primary>::before,.uk-card-primary.uk-card-body .uk-list-primary>::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-list-primary>::before,.uk-card-secondary.uk-card-body .uk-list-primary>::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-primary>::before,.uk-overlay-primary .uk-list-primary>::before,.uk-offcanvas-bar .uk-list-primary>::before{color:#fff !important}.uk-light .uk-list-secondary>::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-secondary>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-secondary>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-secondary>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-secondary>::before,.uk-card-primary.uk-card-body .uk-list-secondary>::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-list-secondary>::before,.uk-card-secondary.uk-card-body .uk-list-secondary>::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-secondary>::before,.uk-overlay-primary .uk-list-secondary>::before,.uk-offcanvas-bar .uk-list-secondary>::before{color:#fff !important}.uk-light .uk-list-bullet>::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-bullet>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-bullet>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-bullet>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-bullet>::before,.uk-card-primary.uk-card-body .uk-list-bullet>::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-list-bullet>::before,.uk-card-secondary.uk-card-body .uk-list-bullet>::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-bullet>::before,.uk-overlay-primary .uk-list-bullet>::before,.uk-offcanvas-bar .uk-list-bullet>::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22rgba(255,255,255,0.7)%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-list-divider>:nth-child(n+2),.uk-section-primary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2),.uk-section-secondary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2),.uk-tile-primary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2),.uk-card-primary.uk-card-body .uk-list-divider>:nth-child(n+2),.uk-card-primary>:not([class*='uk-card-media']) .uk-list-divider>:nth-child(n+2),.uk-card-secondary.uk-card-body .uk-list-divider>:nth-child(n+2),.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-divider>:nth-child(n+2),.uk-overlay-primary .uk-list-divider>:nth-child(n+2),.uk-offcanvas-bar .uk-list-divider>:nth-child(n+2){border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-list-striped>*:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-list-striped>*:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped>*:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped>*:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped>*:nth-of-type(odd),.uk-card-primary.uk-card-body .uk-list-striped>*:nth-of-type(odd),.uk-card-primary>:not([class*='uk-card-media']) .uk-list-striped>*:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-list-striped>*:nth-of-type(odd),.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-striped>*:nth-of-type(odd),.uk-overlay-primary .uk-list-striped>*:nth-of-type(odd),.uk-offcanvas-bar .uk-list-striped>*:nth-of-type(odd){border-top-color:rgba(255,255,255,0.2);border-bottom-color:rgba(255,255,255,0.2)}.uk-light .uk-list-striped>:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-card-primary.uk-card-body .uk-list-striped>:nth-of-type(odd),.uk-card-primary>:not([class*='uk-card-media']) .uk-list-striped>:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-list-striped>:nth-of-type(odd),.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-striped>:nth-of-type(odd),.uk-overlay-primary .uk-list-striped>:nth-of-type(odd),.uk-offcanvas-bar .uk-list-striped>:nth-of-type(odd){background-color:rgba(255,255,255,0.1)}.uk-light .uk-icon-link,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link,.uk-card-primary.uk-card-body .uk-icon-link,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-link,.uk-card-secondary.uk-card-body .uk-icon-link,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-link,.uk-overlay-primary .uk-icon-link,.uk-offcanvas-bar .uk-icon-link{color:rgba(255,255,255,0.5)}.uk-light .uk-icon-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-card-primary.uk-card-body .uk-icon-link:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-link:hover,.uk-card-secondary.uk-card-body .uk-icon-link:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-link:hover,.uk-overlay-primary .uk-icon-link:hover,.uk-offcanvas-bar .uk-icon-link:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-icon-link:active,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:active,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:active,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:active,.uk-card-primary.uk-card-body .uk-icon-link:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-link:active,.uk-card-secondary.uk-card-body .uk-icon-link:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-link:active,.uk-overlay-primary .uk-icon-link:active,.uk-offcanvas-bar .uk-icon-link:active,.uk-light .uk-active>.uk-icon-link,.uk-section-primary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-section-secondary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-tile-primary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-card-primary.uk-card-body .uk-active>.uk-icon-link,.uk-card-primary>:not([class*='uk-card-media']) .uk-active>.uk-icon-link,.uk-card-secondary.uk-card-body .uk-active>.uk-icon-link,.uk-card-secondary>:not([class*='uk-card-media']) .uk-active>.uk-icon-link,.uk-overlay-primary .uk-active>.uk-icon-link,.uk-offcanvas-bar .uk-active>.uk-icon-link{color:rgba(255,255,255,0.7)}.uk-light .uk-icon-button,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button,.uk-card-primary.uk-card-body .uk-icon-button,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-button,.uk-card-secondary.uk-card-body .uk-icon-button,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-button,.uk-overlay-primary .uk-icon-button,.uk-offcanvas-bar .uk-icon-button{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.5)}.uk-light .uk-icon-button:hover,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-card-primary.uk-card-body .uk-icon-button:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-button:hover,.uk-card-secondary.uk-card-body .uk-icon-button:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-button:hover,.uk-overlay-primary .uk-icon-button:hover,.uk-offcanvas-bar .uk-icon-button:hover{background-color:rgba(255,255,255,0.15);color:rgba(255,255,255,0.7)}.uk-light .uk-icon-button:active,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:active,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:active,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:active,.uk-card-primary.uk-card-body .uk-icon-button:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-button:active,.uk-card-secondary.uk-card-body .uk-icon-button:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-button:active,.uk-overlay-primary .uk-icon-button:active,.uk-offcanvas-bar .uk-icon-button:active{background-color:rgba(255,255,255,0.2);color:rgba(255,255,255,0.7)}.uk-light .uk-input,.uk-section-primary:not(.uk-preserve-color) .uk-input,.uk-section-secondary:not(.uk-preserve-color) .uk-input,.uk-tile-primary:not(.uk-preserve-color) .uk-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-input,.uk-card-primary.uk-card-body .uk-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-input,.uk-card-secondary.uk-card-body .uk-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input,.uk-overlay-primary .uk-input,.uk-offcanvas-bar .uk-input,.uk-light .uk-select,.uk-section-primary:not(.uk-preserve-color) .uk-select,.uk-section-secondary:not(.uk-preserve-color) .uk-select,.uk-tile-primary:not(.uk-preserve-color) .uk-select,.uk-tile-secondary:not(.uk-preserve-color) .uk-select,.uk-card-primary.uk-card-body .uk-select,.uk-card-primary>:not([class*='uk-card-media']) .uk-select,.uk-card-secondary.uk-card-body .uk-select,.uk-card-secondary>:not([class*='uk-card-media']) .uk-select,.uk-overlay-primary .uk-select,.uk-offcanvas-bar .uk-select,.uk-light .uk-textarea,.uk-section-primary:not(.uk-preserve-color) .uk-textarea,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea,.uk-card-primary.uk-card-body .uk-textarea,.uk-card-primary>:not([class*='uk-card-media']) .uk-textarea,.uk-card-secondary.uk-card-body .uk-textarea,.uk-card-secondary>:not([class*='uk-card-media']) .uk-textarea,.uk-overlay-primary .uk-textarea,.uk-offcanvas-bar .uk-textarea{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.7);background-clip:padding-box;border-color:rgba(255,255,255,0.2)}.uk-light .uk-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-input:focus,.uk-card-primary.uk-card-body .uk-input:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-input:focus,.uk-card-secondary.uk-card-body .uk-input:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input:focus,.uk-overlay-primary .uk-input:focus,.uk-offcanvas-bar .uk-input:focus,.uk-light .uk-select:focus,.uk-section-primary:not(.uk-preserve-color) .uk-select:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-select:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-select:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-select:focus,.uk-card-primary.uk-card-body .uk-select:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-select:focus,.uk-card-secondary.uk-card-body .uk-select:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-select:focus,.uk-overlay-primary .uk-select:focus,.uk-offcanvas-bar .uk-select:focus,.uk-light .uk-textarea:focus,.uk-section-primary:not(.uk-preserve-color) .uk-textarea:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea:focus,.uk-card-primary.uk-card-body .uk-textarea:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-textarea:focus,.uk-card-secondary.uk-card-body .uk-textarea:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-textarea:focus,.uk-overlay-primary .uk-textarea:focus,.uk-offcanvas-bar .uk-textarea:focus{background-color:rgba(255,255,255,0.15);color:rgba(255,255,255,0.7);border-color:rgba(255,255,255,0.7)}.uk-light .uk-input::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-input::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-input::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-input::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-input::placeholder,.uk-card-primary.uk-card-body .uk-input::placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-input::placeholder,.uk-card-secondary.uk-card-body .uk-input::placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input::placeholder,.uk-overlay-primary .uk-input::placeholder,.uk-offcanvas-bar .uk-input::placeholder{color:rgba(255,255,255,0.5)}.uk-light .uk-textarea::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-card-primary.uk-card-body .uk-textarea::placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-textarea::placeholder,.uk-card-secondary.uk-card-body .uk-textarea::placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-textarea::placeholder,.uk-overlay-primary .uk-textarea::placeholder,.uk-offcanvas-bar .uk-textarea::placeholder{color:rgba(255,255,255,0.5)}.uk-light .uk-select:not([multiple]):not([size]),.uk-section-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-section-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-tile-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-tile-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-card-primary.uk-card-body .uk-select:not([multiple]):not([size]),.uk-card-primary>:not([class*='uk-card-media']) .uk-select:not([multiple]):not([size]),.uk-card-secondary.uk-card-body .uk-select:not([multiple]):not([size]),.uk-card-secondary>:not([class*='uk-card-media']) .uk-select:not([multiple]):not([size]),.uk-overlay-primary .uk-select:not([multiple]):not([size]),.uk-offcanvas-bar .uk-select:not([multiple]):not([size]){background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba(255,255,255,0.7)%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba(255,255,255,0.7)%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-light .uk-input[list]:hover,.uk-section-primary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-card-primary.uk-card-body .uk-input[list]:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-input[list]:hover,.uk-card-secondary.uk-card-body .uk-input[list]:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input[list]:hover,.uk-overlay-primary .uk-input[list]:hover,.uk-offcanvas-bar .uk-input[list]:hover,.uk-light .uk-input[list]:focus,.uk-section-primary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-card-primary.uk-card-body .uk-input[list]:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-input[list]:focus,.uk-card-secondary.uk-card-body .uk-input[list]:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input[list]:focus,.uk-overlay-primary .uk-input[list]:focus,.uk-offcanvas-bar .uk-input[list]:focus{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba(255,255,255,0.7)%22%20points%3D%2212%2012%208%206%2016%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-light .uk-radio,.uk-section-primary:not(.uk-preserve-color) .uk-radio,.uk-section-secondary:not(.uk-preserve-color) .uk-radio,.uk-tile-primary:not(.uk-preserve-color) .uk-radio,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio,.uk-card-primary.uk-card-body .uk-radio,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio,.uk-card-secondary.uk-card-body .uk-radio,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio,.uk-overlay-primary .uk-radio,.uk-offcanvas-bar .uk-radio,.uk-light .uk-checkbox,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox,.uk-card-primary.uk-card-body .uk-checkbox,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox,.uk-card-secondary.uk-card-body .uk-checkbox,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox,.uk-overlay-primary .uk-checkbox,.uk-offcanvas-bar .uk-checkbox{background-color:rgba(255,255,255,0.1);border-color:rgba(255,255,255,0.2)}.uk-light .uk-radio:focus,.uk-section-primary:not(.uk-preserve-color) .uk-radio:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:focus,.uk-card-primary.uk-card-body .uk-radio:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio:focus,.uk-card-secondary.uk-card-body .uk-radio:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio:focus,.uk-overlay-primary .uk-radio:focus,.uk-offcanvas-bar .uk-radio:focus,.uk-light .uk-checkbox:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-card-primary.uk-card-body .uk-checkbox:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:focus,.uk-card-secondary.uk-card-body .uk-checkbox:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:focus,.uk-overlay-primary .uk-checkbox:focus,.uk-offcanvas-bar .uk-checkbox:focus{background-color:rgba(255,255,255,0.15);border-color:rgba(255,255,255,0.7)}.uk-light .uk-radio:checked,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-card-primary.uk-card-body .uk-radio:checked,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio:checked,.uk-card-secondary.uk-card-body .uk-radio:checked,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio:checked,.uk-overlay-primary .uk-radio:checked,.uk-offcanvas-bar .uk-radio:checked,.uk-light .uk-checkbox:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-card-primary.uk-card-body .uk-checkbox:checked,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:checked,.uk-card-secondary.uk-card-body .uk-checkbox:checked,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:checked,.uk-overlay-primary .uk-checkbox:checked,.uk-offcanvas-bar .uk-checkbox:checked,.uk-light .uk-checkbox:indeterminate,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate,.uk-overlay-primary .uk-checkbox:indeterminate,.uk-offcanvas-bar .uk-checkbox:indeterminate{background-color:#fff;border-color:rgba(255,255,255,0.7)}.uk-light .uk-radio:checked:focus,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-card-primary.uk-card-body .uk-radio:checked:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio:checked:focus,.uk-card-secondary.uk-card-body .uk-radio:checked:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio:checked:focus,.uk-overlay-primary .uk-radio:checked:focus,.uk-offcanvas-bar .uk-radio:checked:focus,.uk-light .uk-checkbox:checked:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-card-primary.uk-card-body .uk-checkbox:checked:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:checked:focus,.uk-card-secondary.uk-card-body .uk-checkbox:checked:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:checked:focus,.uk-overlay-primary .uk-checkbox:checked:focus,.uk-offcanvas-bar .uk-checkbox:checked:focus,.uk-light .uk-checkbox:indeterminate:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate:focus,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate:focus,.uk-overlay-primary .uk-checkbox:indeterminate:focus,.uk-offcanvas-bar .uk-checkbox:indeterminate:focus{background-color:#fff}.uk-light .uk-radio:checked,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-card-primary.uk-card-body .uk-radio:checked,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio:checked,.uk-card-secondary.uk-card-body .uk-radio:checked,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio:checked,.uk-overlay-primary .uk-radio:checked,.uk-offcanvas-bar .uk-radio:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23666%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-checkbox:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-card-primary.uk-card-body .uk-checkbox:checked,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:checked,.uk-card-secondary.uk-card-body .uk-checkbox:checked,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:checked,.uk-overlay-primary .uk-checkbox:checked,.uk-offcanvas-bar .uk-checkbox:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-light .uk-checkbox:indeterminate,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate,.uk-overlay-primary .uk-checkbox:indeterminate,.uk-offcanvas-bar .uk-checkbox:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-form-label,.uk-section-primary:not(.uk-preserve-color) .uk-form-label,.uk-section-secondary:not(.uk-preserve-color) .uk-form-label,.uk-tile-primary:not(.uk-preserve-color) .uk-form-label,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-label,.uk-card-primary.uk-card-body .uk-form-label,.uk-card-primary>:not([class*='uk-card-media']) .uk-form-label,.uk-card-secondary.uk-card-body .uk-form-label,.uk-card-secondary>:not([class*='uk-card-media']) .uk-form-label,.uk-overlay-primary .uk-form-label,.uk-offcanvas-bar .uk-form-label{color:#fff}.uk-light .uk-form-icon,.uk-section-primary:not(.uk-preserve-color) .uk-form-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-form-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-form-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-icon,.uk-card-primary.uk-card-body .uk-form-icon,.uk-card-primary>:not([class*='uk-card-media']) .uk-form-icon,.uk-card-secondary.uk-card-body .uk-form-icon,.uk-card-secondary>:not([class*='uk-card-media']) .uk-form-icon,.uk-overlay-primary .uk-form-icon,.uk-offcanvas-bar .uk-form-icon{color:rgba(255,255,255,0.5)}.uk-light .uk-form-icon:hover,.uk-section-primary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-card-primary.uk-card-body .uk-form-icon:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-form-icon:hover,.uk-card-secondary.uk-card-body .uk-form-icon:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-form-icon:hover,.uk-overlay-primary .uk-form-icon:hover,.uk-offcanvas-bar .uk-form-icon:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-button-default,.uk-section-primary:not(.uk-preserve-color) .uk-button-default,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default,.uk-card-primary.uk-card-body .uk-button-default,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default,.uk-card-secondary.uk-card-body .uk-button-default,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default,.uk-overlay-primary .uk-button-default,.uk-offcanvas-bar .uk-button-default{background-color:rgba(0,0,0,0);color:#fff;border-color:rgba(255,255,255,0.7)}.uk-light .uk-button-default:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:hover,.uk-card-primary.uk-card-body .uk-button-default:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default:hover,.uk-card-secondary.uk-card-body .uk-button-default:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default:hover,.uk-overlay-primary .uk-button-default:hover,.uk-offcanvas-bar .uk-button-default:hover{background-color:rgba(0,0,0,0);color:#fff;border-color:#fff}.uk-light .uk-button-default:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:active,.uk-card-primary.uk-card-body .uk-button-default:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default:active,.uk-card-secondary.uk-card-body .uk-button-default:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default:active,.uk-overlay-primary .uk-button-default:active,.uk-offcanvas-bar .uk-button-default:active,.uk-light .uk-button-default.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-card-primary.uk-card-body .uk-button-default.uk-active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default.uk-active,.uk-card-secondary.uk-card-body .uk-button-default.uk-active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default.uk-active,.uk-overlay-primary .uk-button-default.uk-active,.uk-offcanvas-bar .uk-button-default.uk-active{background-color:rgba(0,0,0,0);color:#fff;border-color:#fff}.uk-light .uk-button-primary,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary,.uk-card-primary.uk-card-body .uk-button-primary,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary,.uk-card-secondary.uk-card-body .uk-button-primary,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary,.uk-overlay-primary .uk-button-primary,.uk-offcanvas-bar .uk-button-primary{background-color:#fff;color:#666}.uk-light .uk-button-primary:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-card-primary.uk-card-body .uk-button-primary:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary:hover,.uk-card-secondary.uk-card-body .uk-button-primary:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary:hover,.uk-overlay-primary .uk-button-primary:hover,.uk-offcanvas-bar .uk-button-primary:hover{background-color:#f2f2f2;color:#666}.uk-light .uk-button-primary:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:active,.uk-card-primary.uk-card-body .uk-button-primary:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary:active,.uk-card-secondary.uk-card-body .uk-button-primary:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary:active,.uk-overlay-primary .uk-button-primary:active,.uk-offcanvas-bar .uk-button-primary:active,.uk-light .uk-button-primary.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-card-primary.uk-card-body .uk-button-primary.uk-active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary.uk-active,.uk-card-secondary.uk-card-body .uk-button-primary.uk-active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary.uk-active,.uk-overlay-primary .uk-button-primary.uk-active,.uk-offcanvas-bar .uk-button-primary.uk-active{background-color:#e6e6e6;color:#666}.uk-light .uk-button-secondary,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary,.uk-card-primary.uk-card-body .uk-button-secondary,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary,.uk-card-secondary.uk-card-body .uk-button-secondary,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary,.uk-overlay-primary .uk-button-secondary,.uk-offcanvas-bar .uk-button-secondary{background-color:#fff;color:#666}.uk-light .uk-button-secondary:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-card-primary.uk-card-body .uk-button-secondary:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary:hover,.uk-card-secondary.uk-card-body .uk-button-secondary:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary:hover,.uk-overlay-primary .uk-button-secondary:hover,.uk-offcanvas-bar .uk-button-secondary:hover{background-color:#f2f2f2;color:#666}.uk-light .uk-button-secondary:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-card-primary.uk-card-body .uk-button-secondary:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary:active,.uk-card-secondary.uk-card-body .uk-button-secondary:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary:active,.uk-overlay-primary .uk-button-secondary:active,.uk-offcanvas-bar .uk-button-secondary:active,.uk-light .uk-button-secondary.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-card-primary.uk-card-body .uk-button-secondary.uk-active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary.uk-active,.uk-card-secondary.uk-card-body .uk-button-secondary.uk-active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary.uk-active,.uk-overlay-primary .uk-button-secondary.uk-active,.uk-offcanvas-bar .uk-button-secondary.uk-active{background-color:#e6e6e6;color:#666}.uk-light .uk-button-text,.uk-section-primary:not(.uk-preserve-color) .uk-button-text,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text,.uk-card-primary.uk-card-body .uk-button-text,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text,.uk-card-secondary.uk-card-body .uk-button-text,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text,.uk-overlay-primary .uk-button-text,.uk-offcanvas-bar .uk-button-text{color:#fff}.uk-light .uk-button-text::before,.uk-section-primary:not(.uk-preserve-color) .uk-button-text::before,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text::before,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text::before,.uk-card-primary.uk-card-body .uk-button-text::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text::before,.uk-card-secondary.uk-card-body .uk-button-text::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text::before,.uk-overlay-primary .uk-button-text::before,.uk-offcanvas-bar .uk-button-text::before{border-bottom-color:#fff}.uk-light .uk-button-text:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:hover,.uk-card-primary.uk-card-body .uk-button-text:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text:hover,.uk-card-secondary.uk-card-body .uk-button-text:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text:hover,.uk-overlay-primary .uk-button-text:hover,.uk-offcanvas-bar .uk-button-text:hover{color:#fff}.uk-light .uk-button-text:disabled,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-card-primary.uk-card-body .uk-button-text:disabled,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text:disabled,.uk-card-secondary.uk-card-body .uk-button-text:disabled,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text:disabled,.uk-overlay-primary .uk-button-text:disabled,.uk-offcanvas-bar .uk-button-text:disabled{color:rgba(255,255,255,0.5)}.uk-light .uk-button-link,.uk-section-primary:not(.uk-preserve-color) .uk-button-link,.uk-section-secondary:not(.uk-preserve-color) .uk-button-link,.uk-tile-primary:not(.uk-preserve-color) .uk-button-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link,.uk-card-primary.uk-card-body .uk-button-link,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-link,.uk-card-secondary.uk-card-body .uk-button-link,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-link,.uk-overlay-primary .uk-button-link,.uk-offcanvas-bar .uk-button-link{color:#fff}.uk-light .uk-button-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link:hover,.uk-card-primary.uk-card-body .uk-button-link:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-link:hover,.uk-card-secondary.uk-card-body .uk-button-link:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-link:hover,.uk-overlay-primary .uk-button-link:hover,.uk-offcanvas-bar .uk-button-link:hover{color:rgba(255,255,255,0.5)}.uk-light .uk-grid-divider>:not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-primary.uk-card-body .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-grid-divider>:not(.uk-first-column)::before,.uk-overlay-primary .uk-grid-divider>:not(.uk-first-column)::before,.uk-offcanvas-bar .uk-grid-divider>:not(.uk-first-column)::before{border-left-color:rgba(255,255,255,0.2)}.uk-light .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-primary.uk-card-body .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-secondary.uk-card-body .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-overlay-primary .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-offcanvas-bar .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-close,.uk-section-primary:not(.uk-preserve-color) .uk-close,.uk-section-secondary:not(.uk-preserve-color) .uk-close,.uk-tile-primary:not(.uk-preserve-color) .uk-close,.uk-tile-secondary:not(.uk-preserve-color) .uk-close,.uk-card-primary.uk-card-body .uk-close,.uk-card-primary>:not([class*='uk-card-media']) .uk-close,.uk-card-secondary.uk-card-body .uk-close,.uk-card-secondary>:not([class*='uk-card-media']) .uk-close,.uk-overlay-primary .uk-close,.uk-offcanvas-bar .uk-close{color:rgba(255,255,255,0.5)}.uk-light .uk-close:hover,.uk-section-primary:not(.uk-preserve-color) .uk-close:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-close:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-close:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-close:hover,.uk-card-primary.uk-card-body .uk-close:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-close:hover,.uk-card-secondary.uk-card-body .uk-close:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-close:hover,.uk-overlay-primary .uk-close:hover,.uk-offcanvas-bar .uk-close:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-totop,.uk-section-primary:not(.uk-preserve-color) .uk-totop,.uk-section-secondary:not(.uk-preserve-color) .uk-totop,.uk-tile-primary:not(.uk-preserve-color) .uk-totop,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop,.uk-card-primary.uk-card-body .uk-totop,.uk-card-primary>:not([class*='uk-card-media']) .uk-totop,.uk-card-secondary.uk-card-body .uk-totop,.uk-card-secondary>:not([class*='uk-card-media']) .uk-totop,.uk-overlay-primary .uk-totop,.uk-offcanvas-bar .uk-totop{color:rgba(255,255,255,0.5)}.uk-light .uk-totop:hover,.uk-section-primary:not(.uk-preserve-color) .uk-totop:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:hover,.uk-card-primary.uk-card-body .uk-totop:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-totop:hover,.uk-card-secondary.uk-card-body .uk-totop:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-totop:hover,.uk-overlay-primary .uk-totop:hover,.uk-offcanvas-bar .uk-totop:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-totop:active,.uk-section-primary:not(.uk-preserve-color) .uk-totop:active,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:active,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:active,.uk-card-primary.uk-card-body .uk-totop:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-totop:active,.uk-card-secondary.uk-card-body .uk-totop:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-totop:active,.uk-overlay-primary .uk-totop:active,.uk-offcanvas-bar .uk-totop:active{color:#fff}.uk-light .uk-badge,.uk-section-primary:not(.uk-preserve-color) .uk-badge,.uk-section-secondary:not(.uk-preserve-color) .uk-badge,.uk-tile-primary:not(.uk-preserve-color) .uk-badge,.uk-tile-secondary:not(.uk-preserve-color) .uk-badge,.uk-card-primary.uk-card-body .uk-badge,.uk-card-primary>:not([class*='uk-card-media']) .uk-badge,.uk-card-secondary.uk-card-body .uk-badge,.uk-card-secondary>:not([class*='uk-card-media']) .uk-badge,.uk-overlay-primary .uk-badge,.uk-offcanvas-bar .uk-badge{background-color:#fff;color:#666 !important}.uk-light .uk-label,.uk-section-primary:not(.uk-preserve-color) .uk-label,.uk-section-secondary:not(.uk-preserve-color) .uk-label,.uk-tile-primary:not(.uk-preserve-color) .uk-label,.uk-tile-secondary:not(.uk-preserve-color) .uk-label,.uk-card-primary.uk-card-body .uk-label,.uk-card-primary>:not([class*='uk-card-media']) .uk-label,.uk-card-secondary.uk-card-body .uk-label,.uk-card-secondary>:not([class*='uk-card-media']) .uk-label,.uk-overlay-primary .uk-label,.uk-offcanvas-bar .uk-label{background-color:#fff;color:#666}.uk-light .uk-article-meta,.uk-section-primary:not(.uk-preserve-color) .uk-article-meta,.uk-section-secondary:not(.uk-preserve-color) .uk-article-meta,.uk-tile-primary:not(.uk-preserve-color) .uk-article-meta,.uk-tile-secondary:not(.uk-preserve-color) .uk-article-meta,.uk-card-primary.uk-card-body .uk-article-meta,.uk-card-primary>:not([class*='uk-card-media']) .uk-article-meta,.uk-card-secondary.uk-card-body .uk-article-meta,.uk-card-secondary>:not([class*='uk-card-media']) .uk-article-meta,.uk-overlay-primary .uk-article-meta,.uk-offcanvas-bar .uk-article-meta{color:rgba(255,255,255,0.5)}.uk-light .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input,.uk-card-primary.uk-card-body .uk-search-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-input,.uk-overlay-primary .uk-search-input,.uk-offcanvas-bar .uk-search-input{color:rgba(255,255,255,0.7)}.uk-light .uk-search-input::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-card-primary.uk-card-body .uk-search-input::placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-input::placeholder,.uk-card-secondary.uk-card-body .uk-search-input::placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-input::placeholder,.uk-overlay-primary .uk-search-input::placeholder,.uk-offcanvas-bar .uk-search-input::placeholder{color:rgba(255,255,255,0.5)}.uk-light .uk-search .uk-search-icon,.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-card-primary.uk-card-body .uk-search .uk-search-icon,.uk-card-primary>:not([class*='uk-card-media']) .uk-search .uk-search-icon,.uk-card-secondary.uk-card-body .uk-search .uk-search-icon,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search .uk-search-icon,.uk-overlay-primary .uk-search .uk-search-icon,.uk-offcanvas-bar .uk-search .uk-search-icon{color:rgba(255,255,255,0.5)}.uk-light .uk-search .uk-search-icon:hover,.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-card-primary.uk-card-body .uk-search .uk-search-icon:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-search .uk-search-icon:hover,.uk-card-secondary.uk-card-body .uk-search .uk-search-icon:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search .uk-search-icon:hover,.uk-overlay-primary .uk-search .uk-search-icon:hover,.uk-offcanvas-bar .uk-search .uk-search-icon:hover{color:rgba(255,255,255,0.5)}.uk-light .uk-search-default .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-card-primary.uk-card-body .uk-search-default .uk-search-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-default .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-default .uk-search-input,.uk-overlay-primary .uk-search-default .uk-search-input,.uk-offcanvas-bar .uk-search-default .uk-search-input{background-color:rgba(0,0,0,0);border-color:rgba(255,255,255,0.2)}.uk-light .uk-search-default .uk-search-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-card-primary.uk-card-body .uk-search-default .uk-search-input:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-default .uk-search-input:focus,.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-default .uk-search-input:focus,.uk-overlay-primary .uk-search-default .uk-search-input:focus,.uk-offcanvas-bar .uk-search-default .uk-search-input:focus{background-color:rgba(0,0,0,0.05)}.uk-light .uk-search-navbar .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-card-primary.uk-card-body .uk-search-navbar .uk-search-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-navbar .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-navbar .uk-search-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-navbar .uk-search-input,.uk-overlay-primary .uk-search-navbar .uk-search-input,.uk-offcanvas-bar .uk-search-navbar .uk-search-input{background-color:rgba(0,0,0,0)}.uk-light .uk-search-large .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-card-primary.uk-card-body .uk-search-large .uk-search-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-large .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-large .uk-search-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-large .uk-search-input,.uk-overlay-primary .uk-search-large .uk-search-input,.uk-offcanvas-bar .uk-search-large .uk-search-input{background-color:rgba(0,0,0,0)}.uk-light .uk-search-toggle,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle,.uk-card-primary.uk-card-body .uk-search-toggle,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-toggle,.uk-card-secondary.uk-card-body .uk-search-toggle,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-toggle,.uk-overlay-primary .uk-search-toggle,.uk-offcanvas-bar .uk-search-toggle{color:rgba(255,255,255,0.5)}.uk-light .uk-search-toggle:hover,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-card-primary.uk-card-body .uk-search-toggle:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-toggle:hover,.uk-card-secondary.uk-card-body .uk-search-toggle:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-toggle:hover,.uk-overlay-primary .uk-search-toggle:hover,.uk-offcanvas-bar .uk-search-toggle:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-default>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-card-primary.uk-card-body .uk-nav-default>li>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default>li>a,.uk-card-secondary.uk-card-body .uk-nav-default>li>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default>li>a,.uk-overlay-primary .uk-nav-default>li>a,.uk-offcanvas-bar .uk-nav-default>li>a{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-default>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-card-primary.uk-card-body .uk-nav-default>li>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-default>li>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default>li>a:hover,.uk-overlay-primary .uk-nav-default>li>a:hover,.uk-offcanvas-bar .uk-nav-default>li>a:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-default>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-default>li.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-default>li.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default>li.uk-active>a,.uk-overlay-primary .uk-nav-default>li.uk-active>a,.uk-offcanvas-bar .uk-nav-default>li.uk-active>a{color:#fff}.uk-light .uk-nav-default .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-header,.uk-overlay-primary .uk-nav-default .uk-nav-header,.uk-offcanvas-bar .uk-nav-default .uk-nav-header{color:#fff}.uk-light .uk-nav-default .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-divider,.uk-overlay-primary .uk-nav-default .uk-nav-divider,.uk-offcanvas-bar .uk-nav-default .uk-nav-divider{border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-nav-default .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a,.uk-overlay-primary .uk-nav-default .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-default .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-default .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-overlay-primary .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub li.uk-active>a{color:#fff}.uk-light .uk-nav-primary>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-card-primary.uk-card-body .uk-nav-primary>li>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary>li>a,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary>li>a,.uk-overlay-primary .uk-nav-primary>li>a,.uk-offcanvas-bar .uk-nav-primary>li>a{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-primary>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-card-primary.uk-card-body .uk-nav-primary>li>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary>li>a:hover,.uk-overlay-primary .uk-nav-primary>li>a:hover,.uk-offcanvas-bar .uk-nav-primary>li>a:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-primary>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-primary>li.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-primary>li.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary>li.uk-active>a,.uk-overlay-primary .uk-nav-primary>li.uk-active>a,.uk-offcanvas-bar .uk-nav-primary>li.uk-active>a{color:#fff}.uk-light .uk-nav-primary .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-header,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-header,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-header,.uk-overlay-primary .uk-nav-primary .uk-nav-header,.uk-offcanvas-bar .uk-nav-primary .uk-nav-header{color:#fff}.uk-light .uk-nav-primary .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-divider,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-divider,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-divider,.uk-overlay-primary .uk-nav-primary .uk-nav-divider,.uk-offcanvas-bar .uk-nav-primary .uk-nav-divider{border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-nav-primary .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-primary .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-overlay-primary .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub li.uk-active>a{color:#fff}.uk-light .uk-nav-secondary>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a,.uk-card-primary.uk-card-body .uk-nav-secondary>li>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-secondary>li>a,.uk-card-secondary.uk-card-body .uk-nav-secondary>li>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-secondary>li>a,.uk-overlay-primary .uk-nav-secondary>li>a,.uk-offcanvas-bar .uk-nav-secondary>li>a{color:#fff}.uk-light .uk-nav-secondary>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover,.uk-card-primary.uk-card-body .uk-nav-secondary>li>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-secondary>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-secondary>li>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-secondary>li>a:hover,.uk-overlay-primary .uk-nav-secondary>li>a:hover,.uk-offcanvas-bar .uk-nav-secondary>li>a:hover{color:#fff;background-color:rgba(255,255,255,0.1)}.uk-light .uk-nav-secondary>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-secondary>li.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-secondary>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-secondary>li.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-secondary>li.uk-active>a,.uk-overlay-primary .uk-nav-secondary>li.uk-active>a,.uk-offcanvas-bar .uk-nav-secondary>li.uk-active>a{color:#fff;background-color:rgba(255,255,255,0.1)}.uk-light .uk-nav-secondary .uk-nav-subtitle,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle,.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-subtitle,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-secondary .uk-nav-subtitle,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-subtitle,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-secondary .uk-nav-subtitle,.uk-overlay-primary .uk-nav-secondary .uk-nav-subtitle,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-subtitle{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-card-primary.uk-card-body .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-card-secondary.uk-card-body .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-overlay-primary .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-offcanvas-bar .uk-nav-secondary>li>a:hover .uk-nav-subtitle{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-card-primary.uk-card-body .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-card-secondary.uk-card-body .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-overlay-primary .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-offcanvas-bar .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle{color:#fff}.uk-light .uk-nav-secondary .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header,.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-header,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-secondary .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-header,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-secondary .uk-nav-header,.uk-overlay-primary .uk-nav-secondary .uk-nav-header,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-header{color:#fff}.uk-light .uk-nav-secondary .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider,.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-divider,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-secondary .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-divider,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-secondary .uk-nav-divider,.uk-overlay-primary .uk-nav-secondary .uk-nav-divider,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-divider{border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-nav-secondary .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a,.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-secondary .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-secondary .uk-nav-sub a,.uk-overlay-primary .uk-nav-secondary .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub a{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-secondary .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover,.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-secondary .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-secondary .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-secondary .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub a:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-overlay-primary .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub li.uk-active>a{color:#fff}.uk-light .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-section-primary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-section-secondary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-tile-primary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-tile-secondary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-card-primary.uk-card-body .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-card-primary>:not([class*='uk-card-media']) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-card-secondary.uk-card-body .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-overlay-primary .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-offcanvas-bar .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider){border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-navbar-nav>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a,.uk-overlay-primary .uk-navbar-nav>li>a,.uk-offcanvas-bar .uk-navbar-nav>li>a{color:rgba(255,255,255,0.5)}.uk-light .uk-navbar-nav>li:hover>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li:hover>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li:hover>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li:hover>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li:hover>a,.uk-overlay-primary .uk-navbar-nav>li:hover>a,.uk-offcanvas-bar .uk-navbar-nav>li:hover>a,.uk-light .uk-navbar-nav>li>a[aria-expanded="true"],.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded="true"],.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded="true"],.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded="true"],.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded="true"],.uk-card-primary.uk-card-body .uk-navbar-nav>li>a[aria-expanded="true"],.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a[aria-expanded="true"],.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a[aria-expanded="true"],.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a[aria-expanded="true"],.uk-overlay-primary .uk-navbar-nav>li>a[aria-expanded="true"],.uk-offcanvas-bar .uk-navbar-nav>li>a[aria-expanded="true"]{color:rgba(255,255,255,0.7)}.uk-light .uk-navbar-nav>li>a:active,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:active,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:active,.uk-overlay-primary .uk-navbar-nav>li>a:active,.uk-offcanvas-bar .uk-navbar-nav>li>a:active{color:#fff}.uk-light .uk-navbar-nav>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li.uk-active>a,.uk-overlay-primary .uk-navbar-nav>li.uk-active>a,.uk-offcanvas-bar .uk-navbar-nav>li.uk-active>a{color:#fff}.uk-light .uk-navbar-item,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-item,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-item,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-item,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-item,.uk-card-primary.uk-card-body .uk-navbar-item,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-item,.uk-card-secondary.uk-card-body .uk-navbar-item,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-item,.uk-overlay-primary .uk-navbar-item,.uk-offcanvas-bar .uk-navbar-item{color:rgba(255,255,255,0.7)}.uk-light .uk-navbar-toggle,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-card-primary.uk-card-body .uk-navbar-toggle,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-toggle,.uk-card-secondary.uk-card-body .uk-navbar-toggle,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-toggle,.uk-overlay-primary .uk-navbar-toggle,.uk-offcanvas-bar .uk-navbar-toggle{color:rgba(255,255,255,0.5)}.uk-light .uk-navbar-toggle:hover,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-card-primary.uk-card-body .uk-navbar-toggle:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-toggle:hover,.uk-card-secondary.uk-card-body .uk-navbar-toggle:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-toggle:hover,.uk-overlay-primary .uk-navbar-toggle:hover,.uk-offcanvas-bar .uk-navbar-toggle:hover,.uk-light .uk-navbar-toggle[aria-expanded="true"],.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded="true"],.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded="true"],.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded="true"],.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded="true"],.uk-card-primary.uk-card-body .uk-navbar-toggle[aria-expanded="true"],.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-toggle[aria-expanded="true"],.uk-card-secondary.uk-card-body .uk-navbar-toggle[aria-expanded="true"],.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-toggle[aria-expanded="true"],.uk-overlay-primary .uk-navbar-toggle[aria-expanded="true"],.uk-offcanvas-bar .uk-navbar-toggle[aria-expanded="true"]{color:rgba(255,255,255,0.7)}.uk-light .uk-subnav>*>:first-child,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-card-primary.uk-card-body .uk-subnav>*>:first-child,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>*>:first-child,.uk-card-secondary.uk-card-body .uk-subnav>*>:first-child,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>*>:first-child,.uk-overlay-primary .uk-subnav>*>:first-child,.uk-offcanvas-bar .uk-subnav>*>:first-child{color:rgba(255,255,255,0.5)}.uk-light .uk-subnav>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-card-primary.uk-card-body .uk-subnav>*>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>*>a:hover,.uk-card-secondary.uk-card-body .uk-subnav>*>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>*>a:hover,.uk-overlay-primary .uk-subnav>*>a:hover,.uk-offcanvas-bar .uk-subnav>*>a:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-subnav>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-card-primary.uk-card-body .uk-subnav>.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>.uk-active>a,.uk-card-secondary.uk-card-body .uk-subnav>.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>.uk-active>a,.uk-overlay-primary .uk-subnav>.uk-active>a,.uk-offcanvas-bar .uk-subnav>.uk-active>a{color:#fff}.uk-light .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary.uk-card-body .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-overlay-primary .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-offcanvas-bar .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before{border-left-color:rgba(255,255,255,0.2)}.uk-light .uk-subnav-pill>*>:first-child,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-card-primary.uk-card-body .uk-subnav-pill>*>:first-child,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>*>:first-child,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>:first-child,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>*>:first-child,.uk-overlay-primary .uk-subnav-pill>*>:first-child,.uk-offcanvas-bar .uk-subnav-pill>*>:first-child{background-color:rgba(0,0,0,0);color:rgba(255,255,255,0.5)}.uk-light .uk-subnav-pill>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:hover,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:hover,.uk-overlay-primary .uk-subnav-pill>*>a:hover,.uk-offcanvas-bar .uk-subnav-pill>*>a:hover{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.7)}.uk-light .uk-subnav-pill>*>a:active,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:active,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:active,.uk-overlay-primary .uk-subnav-pill>*>a:active,.uk-offcanvas-bar .uk-subnav-pill>*>a:active{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.7)}.uk-light .uk-subnav-pill>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-card-primary.uk-card-body .uk-subnav-pill>.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>.uk-active>a,.uk-card-secondary.uk-card-body .uk-subnav-pill>.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>.uk-active>a,.uk-overlay-primary .uk-subnav-pill>.uk-active>a,.uk-offcanvas-bar .uk-subnav-pill>.uk-active>a{background-color:#fff;color:#666}.uk-light .uk-subnav>.uk-disabled>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-card-primary.uk-card-body .uk-subnav>.uk-disabled>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>.uk-disabled>a,.uk-card-secondary.uk-card-body .uk-subnav>.uk-disabled>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>.uk-disabled>a,.uk-overlay-primary .uk-subnav>.uk-disabled>a,.uk-offcanvas-bar .uk-subnav>.uk-disabled>a{color:rgba(255,255,255,0.5)}.uk-light .uk-breadcrumb>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-card-primary.uk-card-body .uk-breadcrumb>*>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>*>*,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>*>*,.uk-overlay-primary .uk-breadcrumb>*>*,.uk-offcanvas-bar .uk-breadcrumb>*>*{color:rgba(255,255,255,0.5)}.uk-light .uk-breadcrumb>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-card-primary.uk-card-body .uk-breadcrumb>*>:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>*>:hover,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>*>:hover,.uk-overlay-primary .uk-breadcrumb>*>:hover,.uk-offcanvas-bar .uk-breadcrumb>*>:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-breadcrumb>:last-child>*,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-card-primary.uk-card-body .uk-breadcrumb>:last-child>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>:last-child>*,.uk-card-secondary.uk-card-body .uk-breadcrumb>:last-child>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>:last-child>*,.uk-overlay-primary .uk-breadcrumb>:last-child>*,.uk-offcanvas-bar .uk-breadcrumb>:last-child>*{color:rgba(255,255,255,0.7)}.uk-light .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary.uk-card-body .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-overlay-primary .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-offcanvas-bar .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before{color:rgba(255,255,255,0.5)}.uk-light .uk-pagination>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-card-primary.uk-card-body .uk-pagination>*>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>*>*,.uk-card-secondary.uk-card-body .uk-pagination>*>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>*>*,.uk-overlay-primary .uk-pagination>*>*,.uk-offcanvas-bar .uk-pagination>*>*{color:rgba(255,255,255,0.5)}.uk-light .uk-pagination>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-card-primary.uk-card-body .uk-pagination>*>:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>*>:hover,.uk-card-secondary.uk-card-body .uk-pagination>*>:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>*>:hover,.uk-overlay-primary .uk-pagination>*>:hover,.uk-offcanvas-bar .uk-pagination>*>:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-pagination>.uk-active>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-card-primary.uk-card-body .uk-pagination>.uk-active>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>.uk-active>*,.uk-card-secondary.uk-card-body .uk-pagination>.uk-active>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>.uk-active>*,.uk-overlay-primary .uk-pagination>.uk-active>*,.uk-offcanvas-bar .uk-pagination>.uk-active>*{color:rgba(255,255,255,0.7)}.uk-light .uk-pagination>.uk-disabled>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-card-primary.uk-card-body .uk-pagination>.uk-disabled>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>.uk-disabled>*,.uk-card-secondary.uk-card-body .uk-pagination>.uk-disabled>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>.uk-disabled>*,.uk-overlay-primary .uk-pagination>.uk-disabled>*,.uk-offcanvas-bar .uk-pagination>.uk-disabled>*{color:rgba(255,255,255,0.5)}.uk-light .uk-tab::before,.uk-section-primary:not(.uk-preserve-color) .uk-tab::before,.uk-section-secondary:not(.uk-preserve-color) .uk-tab::before,.uk-tile-primary:not(.uk-preserve-color) .uk-tab::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab::before,.uk-card-primary.uk-card-body .uk-tab::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab::before,.uk-card-secondary.uk-card-body .uk-tab::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab::before,.uk-overlay-primary .uk-tab::before,.uk-offcanvas-bar .uk-tab::before{border-color:rgba(255,255,255,0.2)}.uk-light .uk-tab>*>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a,.uk-card-primary.uk-card-body .uk-tab>*>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>*>a,.uk-card-secondary.uk-card-body .uk-tab>*>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>*>a,.uk-overlay-primary .uk-tab>*>a,.uk-offcanvas-bar .uk-tab>*>a{color:rgba(255,255,255,0.5)}.uk-light .uk-tab>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-card-primary.uk-card-body .uk-tab>*>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>*>a:hover,.uk-card-secondary.uk-card-body .uk-tab>*>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>*>a:hover,.uk-overlay-primary .uk-tab>*>a:hover,.uk-offcanvas-bar .uk-tab>*>a:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-tab>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-card-primary.uk-card-body .uk-tab>.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>.uk-active>a,.uk-card-secondary.uk-card-body .uk-tab>.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>.uk-active>a,.uk-overlay-primary .uk-tab>.uk-active>a,.uk-offcanvas-bar .uk-tab>.uk-active>a{color:#fff;border-color:#fff}.uk-light .uk-tab>.uk-disabled>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-card-primary.uk-card-body .uk-tab>.uk-disabled>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>.uk-disabled>a,.uk-card-secondary.uk-card-body .uk-tab>.uk-disabled>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>.uk-disabled>a,.uk-overlay-primary .uk-tab>.uk-disabled>a,.uk-offcanvas-bar .uk-tab>.uk-disabled>a{color:rgba(255,255,255,0.5)}.uk-light .uk-slidenav,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav,.uk-card-primary.uk-card-body .uk-slidenav,.uk-card-primary>:not([class*='uk-card-media']) .uk-slidenav,.uk-card-secondary.uk-card-body .uk-slidenav,.uk-card-secondary>:not([class*='uk-card-media']) .uk-slidenav,.uk-overlay-primary .uk-slidenav,.uk-offcanvas-bar .uk-slidenav{color:rgba(255,255,255,0.7)}.uk-light .uk-slidenav:hover,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-card-primary.uk-card-body .uk-slidenav:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-slidenav:hover,.uk-card-secondary.uk-card-body .uk-slidenav:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-slidenav:hover,.uk-overlay-primary .uk-slidenav:hover,.uk-offcanvas-bar .uk-slidenav:hover{color:rgba(255,255,255,0.95)}.uk-light .uk-slidenav:active,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:active,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:active,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:active,.uk-card-primary.uk-card-body .uk-slidenav:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-slidenav:active,.uk-card-secondary.uk-card-body .uk-slidenav:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-slidenav:active,.uk-overlay-primary .uk-slidenav:active,.uk-offcanvas-bar .uk-slidenav:active{color:rgba(255,255,255,0.7)}.uk-light .uk-dotnav>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-card-primary.uk-card-body .uk-dotnav>*>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>*>*,.uk-card-secondary.uk-card-body .uk-dotnav>*>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>*>*,.uk-overlay-primary .uk-dotnav>*>*,.uk-offcanvas-bar .uk-dotnav>*>*{background-color:rgba(0,0,0,0);border-color:rgba(255,255,255,0.9)}.uk-light .uk-dotnav>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-card-primary.uk-card-body .uk-dotnav>*>:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>*>:hover,.uk-card-secondary.uk-card-body .uk-dotnav>*>:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>*>:hover,.uk-overlay-primary .uk-dotnav>*>:hover,.uk-offcanvas-bar .uk-dotnav>*>:hover{background-color:rgba(255,255,255,0.9);border-color:transparent}.uk-light .uk-dotnav>*>:active,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-card-primary.uk-card-body .uk-dotnav>*>:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>*>:active,.uk-card-secondary.uk-card-body .uk-dotnav>*>:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>*>:active,.uk-overlay-primary .uk-dotnav>*>:active,.uk-offcanvas-bar .uk-dotnav>*>:active{background-color:rgba(255,255,255,0.5);border-color:transparent}.uk-light .uk-dotnav>.uk-active>*,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-card-primary.uk-card-body .uk-dotnav>.uk-active>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>.uk-active>*,.uk-card-secondary.uk-card-body .uk-dotnav>.uk-active>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>.uk-active>*,.uk-overlay-primary .uk-dotnav>.uk-active>*,.uk-offcanvas-bar .uk-dotnav>.uk-active>*{background-color:rgba(255,255,255,0.9);border-color:transparent}.uk-light .uk-accordion-title::before,.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-card-primary.uk-card-body .uk-accordion-title::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-accordion-title::before,.uk-card-secondary.uk-card-body .uk-accordion-title::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-accordion-title::before,.uk-overlay-primary .uk-accordion-title::before,.uk-offcanvas-bar .uk-accordion-title::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,0.7)%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,0.7)%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-open>.uk-accordion-title::before,.uk-section-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-section-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-tile-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-card-primary.uk-card-body .uk-open>.uk-accordion-title::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-open>.uk-accordion-title::before,.uk-card-secondary.uk-card-body .uk-open>.uk-accordion-title::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-open>.uk-accordion-title::before,.uk-overlay-primary .uk-open>.uk-accordion-title::before,.uk-offcanvas-bar .uk-open>.uk-accordion-title::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,0.7)%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-iconnav>*>a,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-card-primary.uk-card-body .uk-iconnav>*>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-iconnav>*>a,.uk-card-secondary.uk-card-body .uk-iconnav>*>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-iconnav>*>a,.uk-overlay-primary .uk-iconnav>*>a,.uk-offcanvas-bar .uk-iconnav>*>a{color:rgba(255,255,255,0.5)}.uk-light .uk-iconnav>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-card-primary.uk-card-body .uk-iconnav>*>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-iconnav>*>a:hover,.uk-card-secondary.uk-card-body .uk-iconnav>*>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-iconnav>*>a:hover,.uk-overlay-primary .uk-iconnav>*>a:hover,.uk-offcanvas-bar .uk-iconnav>*>a:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-iconnav>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-card-primary.uk-card-body .uk-iconnav>.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-iconnav>.uk-active>a,.uk-card-secondary.uk-card-body .uk-iconnav>.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-iconnav>.uk-active>a,.uk-overlay-primary .uk-iconnav>.uk-active>a,.uk-offcanvas-bar .uk-iconnav>.uk-active>a{color:rgba(255,255,255,0.7)}.uk-light .uk-text-lead,.uk-section-primary:not(.uk-preserve-color) .uk-text-lead,.uk-section-secondary:not(.uk-preserve-color) .uk-text-lead,.uk-tile-primary:not(.uk-preserve-color) .uk-text-lead,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-lead,.uk-card-primary.uk-card-body .uk-text-lead,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-lead,.uk-card-secondary.uk-card-body .uk-text-lead,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-lead,.uk-overlay-primary .uk-text-lead,.uk-offcanvas-bar .uk-text-lead{color:rgba(255,255,255,0.7)}.uk-light .uk-text-meta,.uk-section-primary:not(.uk-preserve-color) .uk-text-meta,.uk-section-secondary:not(.uk-preserve-color) .uk-text-meta,.uk-tile-primary:not(.uk-preserve-color) .uk-text-meta,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-meta,.uk-card-primary.uk-card-body .uk-text-meta,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-meta,.uk-card-secondary.uk-card-body .uk-text-meta,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-meta,.uk-overlay-primary .uk-text-meta,.uk-offcanvas-bar .uk-text-meta{color:rgba(255,255,255,0.5)}.uk-light .uk-text-muted,.uk-section-primary:not(.uk-preserve-color) .uk-text-muted,.uk-section-secondary:not(.uk-preserve-color) .uk-text-muted,.uk-tile-primary:not(.uk-preserve-color) .uk-text-muted,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-muted,.uk-card-primary.uk-card-body .uk-text-muted,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-muted,.uk-card-secondary.uk-card-body .uk-text-muted,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-muted,.uk-overlay-primary .uk-text-muted,.uk-offcanvas-bar .uk-text-muted{color:rgba(255,255,255,0.5) !important}.uk-light .uk-text-emphasis,.uk-section-primary:not(.uk-preserve-color) .uk-text-emphasis,.uk-section-secondary:not(.uk-preserve-color) .uk-text-emphasis,.uk-tile-primary:not(.uk-preserve-color) .uk-text-emphasis,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-emphasis,.uk-card-primary.uk-card-body .uk-text-emphasis,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-emphasis,.uk-card-secondary.uk-card-body .uk-text-emphasis,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-emphasis,.uk-overlay-primary .uk-text-emphasis,.uk-offcanvas-bar .uk-text-emphasis{color:#fff !important}.uk-light .uk-text-primary,.uk-section-primary:not(.uk-preserve-color) .uk-text-primary,.uk-section-secondary:not(.uk-preserve-color) .uk-text-primary,.uk-tile-primary:not(.uk-preserve-color) .uk-text-primary,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-primary,.uk-card-primary.uk-card-body .uk-text-primary,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-primary,.uk-card-secondary.uk-card-body .uk-text-primary,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-primary,.uk-overlay-primary .uk-text-primary,.uk-offcanvas-bar .uk-text-primary{color:#fff !important}.uk-light .uk-text-secondary,.uk-section-primary:not(.uk-preserve-color) .uk-text-secondary,.uk-section-secondary:not(.uk-preserve-color) .uk-text-secondary,.uk-tile-primary:not(.uk-preserve-color) .uk-text-secondary,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-secondary,.uk-card-primary.uk-card-body .uk-text-secondary,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-secondary,.uk-card-secondary.uk-card-body .uk-text-secondary,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-secondary,.uk-overlay-primary .uk-text-secondary,.uk-offcanvas-bar .uk-text-secondary{color:#fff !important}.uk-light .uk-column-divider,.uk-section-primary:not(.uk-preserve-color) .uk-column-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-column-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-column-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-column-divider,.uk-card-primary.uk-card-body .uk-column-divider,.uk-card-primary>:not([class*='uk-card-media']) .uk-column-divider,.uk-card-secondary.uk-card-body .uk-column-divider,.uk-card-secondary>:not([class*='uk-card-media']) .uk-column-divider,.uk-overlay-primary .uk-column-divider,.uk-offcanvas-bar .uk-column-divider{column-rule-color:rgba(255,255,255,0.2)}.uk-light .uk-logo,.uk-section-primary:not(.uk-preserve-color) .uk-logo,.uk-section-secondary:not(.uk-preserve-color) .uk-logo,.uk-tile-primary:not(.uk-preserve-color) .uk-logo,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo,.uk-card-primary.uk-card-body .uk-logo,.uk-card-primary>:not([class*='uk-card-media']) .uk-logo,.uk-card-secondary.uk-card-body .uk-logo,.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo,.uk-overlay-primary .uk-logo,.uk-offcanvas-bar .uk-logo{color:#fff}.uk-light .uk-logo:hover,.uk-section-primary:not(.uk-preserve-color) .uk-logo:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-logo:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-logo:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo:hover,.uk-card-primary.uk-card-body .uk-logo:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-logo:hover,.uk-card-secondary.uk-card-body .uk-logo:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo:hover,.uk-overlay-primary .uk-logo:hover,.uk-offcanvas-bar .uk-logo:hover{color:#fff}.uk-light .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-section-primary:not(.uk-preserve-color) .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-section-secondary:not(.uk-preserve-color) .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-tile-primary:not(.uk-preserve-color) .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-tile-secondary:not(.uk-preserve-color) .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-card-primary.uk-card-body .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-card-primary>:not([class*='uk-card-media']) .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-card-secondary.uk-card-body .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-overlay-primary .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-offcanvas-bar .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-light .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-section-primary:not(.uk-preserve-color) .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-section-secondary:not(.uk-preserve-color) .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-tile-primary:not(.uk-preserve-color) .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-tile-secondary:not(.uk-preserve-color) .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-card-primary.uk-card-body .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-card-primary>:not([class*='uk-card-media']) .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-card-secondary.uk-card-body .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-overlay-primary .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-offcanvas-bar .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type){display:none}.uk-light .uk-logo-inverse,.uk-section-primary:not(.uk-preserve-color) .uk-logo-inverse,.uk-section-secondary:not(.uk-preserve-color) .uk-logo-inverse,.uk-tile-primary:not(.uk-preserve-color) .uk-logo-inverse,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo-inverse,.uk-card-primary.uk-card-body .uk-logo-inverse,.uk-card-primary>:not([class*='uk-card-media']) .uk-logo-inverse,.uk-card-secondary.uk-card-body .uk-logo-inverse,.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo-inverse,.uk-overlay-primary .uk-logo-inverse,.uk-offcanvas-bar .uk-logo-inverse{display:block}@media print{*,*::before,*::after{background:transparent !important;color:black !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}*{font-family:'Roboto', sans-serif}.markdown h1{color:#404040}.markdown h2{color:#404040}.markdown h3{color:#404040} diff --git a/branch/rkdarst--open-source-courses/workshops/discipline-online.png b/branch/rkdarst--open-source-courses/workshops/discipline-online.png new file mode 100644 index 000000000..dac295cd5 Binary files /dev/null and b/branch/rkdarst--open-source-courses/workshops/discipline-online.png differ diff --git a/branch/rkdarst--open-source-courses/workshops/disciplines_positions.png b/branch/rkdarst--open-source-courses/workshops/disciplines_positions.png new file mode 100644 index 000000000..83df85b0a Binary files /dev/null and b/branch/rkdarst--open-source-courses/workshops/disciplines_positions.png differ diff --git a/branch/rkdarst--open-source-courses/workshops/full-workshops.json b/branch/rkdarst--open-source-courses/workshops/full-workshops.json new file mode 100644 index 000000000..5494582d5 --- /dev/null +++ b/branch/rkdarst--open-source-courses/workshops/full-workshops.json @@ -0,0 +1,1000 @@ +{ + "events": [ + { + "name": "Full online workshop (6 half-days)", + "website": "https://coderefinery.github.io/2022-09-20-workshop/", + "start_date": "2022-09-20", + "end_date": "2022-09-29", + "host": [ + "Radovan Bast", + "Matias Jääskeläinen", + "Richard Darst" + ], + "instructors": [ + "Sabry Razick", + "Samantha Wittke", + "Dhanya Pushpadas", + "Thomas Pfau", + "Radovan Bast", + "Hande Celikkanat", + "Johan Hellsvik", + "Thor Wikfeldt", + "Jarno Rantaharju", + "Matteo Tomasini", + "Richard Darst" + ], + "expert_helpers": [ + "Diana Iusan", + "Thor Wikfeldt", + "Johan Hellsvik", + "Stephan Smuts", + "Juho Lehtonen", + "Dhanya Pushpadas" + ], + "helpers": [ + "Björn Claremar", + "Philip Gjedde", + "Juho Lehtonen", + "Bjørn Lindi", + "Giordano Lipari", + "Dhanya Pushpadas", + "Stephanie van de Sandt", + "Meron Vermaas", + "Aleksandra Wilczynska", + "Ruslan Zhuravchak", + "Kaveh Karimi" + ], + "num_participants": { + "FI": 76, + "SE": 52, + "NO": 50, + "ES": 12, + "DK": 7, + "NL": 34, + "IN": 4, + "IE": 3, + "CH": 3, + "UK": 3, + "IT": 3, + "FR": 2, + "US": 2, + "TT": 1, + "SG": 1, + "CN": 1, + "TH": 1, + "GR": 1, + "IR": 1, + "TR": 1, + "BR": 1, + "ID": 1, + "DE": 1, + "CA": 1, + "total": 262 + }, + "twitch_viewers": { + "smallest_viewers_max": 97, + "largest_viewers_max": 157 + }, + "zoom_participants": { + "min": 25, + "max": 59 + } + }, + { + "name": "Full online workshop (6 half-days)", + "website": "https://coderefinery.github.io/2022-03-22-workshop/", + "start_date": "2022-03-22", + "end_date": "2022-03-31", + "host": [ + "Radovan Bast", + "Richard Darst", + "Enrico Glerean" + ], + "instructors": [ + "Radovan Bast", + "Richard Darst", + "Luca Ferranti", + "Johan Hellsvik", + "Diana Iusan", + "Jarno Rantaharju", + "Sabry Razick", + "Thor Wikfeldt", + "Samantha Wittke" + ], + "expert_helpers": [ + "Enrico Glerean", + "Bjørn Lindi" + ], + "helpers": [ + "Niket Agrawal", + "Inigo Aldazabal", + "Heather Andrews", + "Thomas Arildsen", + "Lora Armstrong", + "Susan Branchett", + "Romain Caneill", + "Abel Carreras", + "Björn Claremar", + "Juan Sebastian Diaz Boada", + "Marco Foscato", + "Manuel Garcia Alvarez", + "Niharika Gauraha", + "Agneta Ghose", + "Toby Hodges", + "Maurits Kok", + "Bjørn Lindi", + "Jose Carlos Llanusa", + "Pedro Ojeda", + "Dhanya Pushpadas", + "Stephan Smuts", + "Ingrid Strandberg", + "Aleksandra Wilczynska" + ], + "num_participants": { + "AT": 1, + "BD": 1, + "BR": 1, + "DK": 14, + "FI": 54, + "FR": 1, + "DE": 6, + "HU": 1, + "IN": 2, + "IT": 2, + "MM": 1, + "NL": 55, + "NG": 1, + "NO": 87, + "PK": 1, + "ES": 16, + "SE": 46, + "CH": 1, + "UK": 3, + "US": 3, + "total": 297 + }, + "twitch_viewers": { + "smallest_viewers_max": 144, + "largest_viewers_max": 215 + } + }, + { + "name": "Full online workshop (6 half-days)", + "website": "https://coderefinery.github.io/2021-05-10-workshop/", + "start_date": "2021-05-10", + "end_date": "2021-05-20", + "host": [ + "Richard Darst" + ], + "instructors": [ + "Radovan Bast", + "Anne Fouilloux", + "Johan Hellsvik", + "Diana Iusan", + "Juho Lehtonen", + "Sabry Razick", + "Thor Wikfeldt", + "Samantha Wittke" + ], + "expert_helpers": [ + "Richard Darst", + "Max R. Eckardt", + "Patric Holmvall", + "Anni Järvenpää", + "Stefan Negru", + "Jarno Rantaharju", + "Marijn van Vliet" + ], + "helpers": [ + "Niket Agrawal", + "Octavian Andrei", + "Thomas Arildsen", + "Flavio Calvo", + "Ted Hsuan Yun Chen", + "Luca Ferranti", + "Marco Foscato", + "Manuel Garcia Alvarez", + "Luc Girod", + "Shashank Shekhar Harivyasi", + "Patric Holmvall", + "Sunniva Indrehus", + "Stig Rune Jensen", + "Matúš Kalaš", + "Alberto Lazzarotto", + "Lesetja Lekoloane", + "Pavlin Mitev", + "Devaraju Narayanappa", + "Fabricio Oliveira", + "Massimo Pizzol", + "Evgeny Posenitskiy", + "Ankita Priya", + "Annajiat Alim Rasel", + "Aili Sarre", + "Jannetta Steyn", + "Ingrid Strandberg", + "Naoe Tatara", + "Will Usher" + ], + "num_participants": { + "SE" : 21, + "NO" : 43, + "FI" : 24, + "DK" : 12, + "NL" : 16, + "BD" : 1, + "FR" : 1, + "IN" : 1, + "IT" : 3, + "SL" : 1, + "ZA" : 3, + "CH" : 0, + "UK" : 2, + "total": 128 + } + }, + { + "name": "Online", + "website": "https://coderefinery.github.io/2020-11-17-online/", + "start_date": "2020-11-17", + "end_date": "2020-11-26", + "host": [ + "Naoe Tatara" + ], + "instructors": [ + "Radovan Bast", + "Anne Fouilloux", + "Matus Kalas", + "Pavlin Mitev", + "Sabry Razick", + "Thor Wikfeldt" + ], + "expert_helpers": [ + "Richard Darst", + "Max R. Eckardt", + "Juho Lehtonen", + "Emiliano Molinaro", + "Stefan Negru", + "Samantha Wittke" + ], + "helpers": [ + "Octavian Andrei", + "Raphaela Heil", + "Johan Hellsvik", + "Patric Holmvall", + "Diana Iusan", + "Matthew Morris", + "Athanasios Protopapas", + "Annajiat Alim Rasel", + "Anthony Scemama", + "Ingrid Strandberg" + ], + "num_participants": { + "NO": 26, + "SE": 27, + "FI": 3, + "FR": 4, + "PL": 2, + "IN": 1, + "DE": 4, + "BE": 1, + "BD": 1, + "ES": 3, + "CH": 1, + "US": 2, + "UK": 2, + "total": 77 + } + }, + { + "name": "Online", + "website": "https://coderefinery.github.io/2020-10-20-online/", + "start_date": "2020-10-20", + "end_date": "2020-10-29", + "host": [ + "Richard Darst", + "Naoe Tatara", + "Radovan Bast" + ], + "instructors": [ + "Radovan Bast", + "Richard Darst", + "Johan Hidding", + "Jarno Rantaharju", + "Sabry Razick", + "Marijn van Vliet", + "Jens Wehner", + "Thor Wikfeldt" + ], + "expert_helpers": [ + "Enrico Glerean", + "Juho Lehtonen", + "Samantha Wittke" + ], + "helpers": [ + "Niket Agrawal", + "Susan Branchett", + "Simoneta Caño de Las Heras", + "Amir Ebrahimi Fard", + "Johan Hidding", + "Jakob Sauer Jørgensen", + "Maurits Kok", + "Raul Ortiz Merino", + "Ingrid Strandberg", + "Evelien Van Dijk", + "Jens Wehner" + ], + "num_participants": { + "DK": 11, + "FI": 22, + "MA": 1, + "NL": 43, + "NO": 4, + "SE": 19, + "total": 100 + } + }, + { + "name": "Online (Mega-CodeRefinery)", + "website": "https://coderefinery.github.io/2020-05-25-online/", + "start_date": "2020-05-25", + "end_date": "2020-06-04", + "host": [ + "Naoe Tatara" + ], + "instructors": [ + "Radovan Bast", + "Anne Fouilloux", + "Bjørn Lindi", + "Thor Wikfeldt", + "Stefan Negru", + "Richard Darst" + ], + "expert_helpers": [ + "Enrico Glerean", + "Jarno Rantaharju", + "Juho Lehtonen", + "Sabry Razick" + ], + "helpers": [ + "Daniel Holmberg", + "Ebrahim Afyounian", + "Erika Yashiro", + "Francesco Tabaro", + "Joakim Löfgren", + "Kerstin Lenk", + "Lauri Neuvonen", + "Luis Amezcua", + "Mikael Djurfeldt", + "Mikko Heikkilä", + "Pengfei Xu", + "Preethy Nair", + "Raphaela Heil", + "Rohit Goswami", + "Samantha Wittke", + "Sebastian Schmidt", + "Tomi Häkkinen", + "Tuomas Rossi", + "Ygor Morais Jaques" + ], + "num_participants": { + "DK": 2, + "FI": 75, + "IS": 1, + "NP": 1, + "NO": 16, + "SE": 5, + "UK": 1, + "US": 1, + "total": 102 + } + }, + { + "name": "Trondheim", + "start_date": "2020-02-25", + "end_date": "2020-02-27", + "instructors": [ + "Anne Fouilloux", + "Bjørn Lindi", + "Nico Reissmann" + ], + "helpers": [ + "Radek Lonka" + ], + "num_participants": { + "NO": 26, + "SE": 1, + "PL": 1, + "total": 28 + }, + "location": { + "lat": 63.41921, + "lon": 10.402319 + } + }, + { + "name": "Espoo", + "start_date": "2019-12-10", + "end_date": "2019-12-12", + "instructors": [ + "Radovan Bast", + "Richard Darst", + "Enrico Glerean", + "Juho Lehtonen", + "João M. da Silva", + "Jarno Rantaharju" + ], + "helpers": [ + "Marijn Van Vliet", + "Anni Järvenpää", + "Shreyas Deshpande" + ], + "num_participants": { + "FI": 30, + "total": 30 + }, + "location": { + "lat": 60.18708, + "lon": 24.82909 + } + }, + { + "name": "Lille", + "start_date": "2019-11-25", + "end_date": "2019-12-05", + "instructors": [ + "Radovan Bast" + ], + "num_participants": { + "FR": 28, + "total": 28 + }, + "location": { + "lat": 50.61141, + "lon": 3.14053 + } + }, + { + "name": "Stockholm", + "start_date": "2019-11-19", + "end_date": "2019-11-21", + "instructors": [ + "Thor Wikfeldt", + "Radovan Bast", + "Anne Fouilloux" + ], + "helpers": [ + "Dmytro Kryvokhyzha", + "Carolina Robustini", + "Ashwin Vishnu" + ], + "num_participants": { + "SE": 28, + "total": 28 + }, + "location": { + "lat": 59.35002, + "lon": 18.02398 + } + }, + { + "name": "Trondheim", + "start_date": "2019-10-22", + "end_date": "2019-10-24", + "instructors": [ + "Thor Wikfeldt", + "Radovan Bast", + "Bjørn Lindi" + ], + "helpers": [ + "Nico Reissmann", + "Radek Lonka" + ], + "num_participants": { + "NO": 20, + "total": 20 + }, + "location": { + "lat": 63.41594, + "lon": 10.40656 + } + }, + { + "name": "Aalborg", + "start_date": "2019-06-11", + "end_date": "2019-06-13", + "instructors": [ + "Max Roald Eckardt", + "Radovan Bast", + "Sabry Razick" + ], + "helpers": [ + "Thomas Arildsen", + "Vang Que Le", + "Tobias Lindstrøm Jensen", + "Emiliano Molinaro", + "Lucy Whalley" + ], + "num_participants": { + "DK": 18, + "US": 1, + "UK": 1, + "total": 20 + }, + "location": { + "lat": 57.01398, + "lon": 9.98891 + } + }, + { + "name": "Oslo", + "start_date": "2019-06-03", + "end_date": "2019-06-05", + "instructors": [ + "Radovan Bast", + "Sabry Razick", + "Anne Fouilloux", + "Stefan Negru" + ], + "helpers": [ + "Jean Iaquinta" + ], + "num_participants": { + "NO": 18, + "DK": 1, + "SE": 1, + "total": 20 + }, + "location": { + "lat": 59.94347, + "lon": 10.718161 + } + }, + { + "name": "Helsinki", + "start_date": "2019-05-27", + "end_date": "2019-05-29", + "instructors": [ + "Richard Darst", + "Juho Lehtonen", + "João M. da Silva", + "Stefan Negru" + ], + "helpers": [ + "Manana Koberidze", + "Enrico Glerean" + ], + "num_participants": { + "FI": 26, + "SE": 1, + "total": 27 + }, + "location": { + "lat": 60.20444, + "lon": 24.96171 + } + }, + { + "name": "Gothenburg", + "start_date": "2019-05-21", + "end_date": "2019-05-23", + "instructors": [ + "Max Roald Eckardt", + "Anne Fouilloux", + "Bjørn Lindi", + "Thor Wikfeldt" + ], + "helpers": [ + "Leif Wigge", + "Tuomas Rossi", + "Mikael Öhman" + ], + "num_participants": { + "SE": 25, + "total": 25 + }, + "location": { + "lat": 57.708870, + "lon": 11.974560 + } + }, + { + "name": "Tartu", + "start_date": "2019-04-02", + "end_date": "2019-04-04", + "instructors": [ + "Bjørn Lindi", + "João M. da Silva", + "Radovan Bast", + "Sabry Razick" + ], + "helpers": [ + "Dmytro Fishman", + "Ivan Kuzmin", + "Mikhail Papkov" + ], + "num_participants": { + "EE": 25, + "DE": 1, + "total": 26 + }, + "location": { + "lat": 58.370850, + "lon": 26.714720 + } + }, + { + "name": "Stockholm", + "start_date": "2019-03-25", + "end_date": "2019-03-27", + "instructors": [ + "Radovan Bast", + "Thor Wikfeldt", + "Juho Lehtonen" + ], + "helpers": [ + "Tor Kjellsson Lindblom" + ], + "num_participants": { + "SE": 28, + "DE": 2, + "total": 30 + }, + "location": { + "lat": 59.34819, + "lon": 18.07489 + } + }, + { + "name": "Espoo", + "start_date": "2018-12-11", + "end_date": "2018-12-13", + "instructors": [ + "Stefan Negru", + "Juho Lehtonen", + "Radovan Bast", + "Richard Darst" + ], + "helpers": [ + "João M. da Silva", + "Pradeep Eranti" + ], + "num_participants": { + "FI": 31, + "DK": 1, + "UK": 1, + "total": 33 + }, + "location": { + "lat": 60.18708, + "lon": 24.82909 + } + }, + { + "name": "Uppsala", + "start_date": "2018-12-03", + "end_date": "2018-12-05", + "instructors": [ + "Thor Wikfeldt", + "Radovan Bast", + "Max Schön" + ], + "helpers": [ + "Hadrien Gourlé" + ], + "num_participants": { + "SE": 30, + "NO": 1, + "total": 31 + }, + "location": { + "lat": 59.8434075, + "lon": 17.641331 + } + }, + { + "name": "Kiruna", + "start_date": "2018-11-21", + "end_date": "2018-11-23", + "instructors": [ + "Thor Wikfeldt", + "Max Roald Eckardt", + "Sabry Razick", + "Radovan Bast" + ], + "num_participants": { + "SE": 36, + "NO": 1, + "CH": 1, + "total": 38 + }, + "location": { + "lat": 67.850, + "lon": 20.2166667 + } + }, + { + "name": "Reykjavik", + "start_date": "2018-08-21", + "end_date": "2018-08-23", + "instructors": [ + "Thor Wikfeldt", + "Bjørn Lindi", + "Radovan Bast" + ], + "num_participants": { + "IS": 22, + "SE": 3, + "CH": 1, + "total": 26 + }, + "location": { + "lat": 64.1396, + "lon": -21.9519 + } + }, + { + "name": "Oslo", + "start_date": "2018-06-12", + "end_date": "2018-06-14", + "instructors": [ + "Sabry Razick", + "Sri Harsha Vathsavayi", + "Richard Darst" + ], + "helpers": [ + "Anne Fouilloux" + ], + "num_participants": { + "NO": 38, + "DE": 1, + "SE": 3, + "total": 42 + }, + "location": { + "lat": 59.94347, + "lon": 10.718161 + } + }, + { + "name": "Espoo", + "start_date": "2018-05-29", + "end_date": "2018-05-31", + "instructors": [ + "Jyry Suvilehto", + "Sri Harsha Vathsavayi", + "Richard Darst" + ], + "num_participants": { + "FI": 48, + "total": 48 + }, + "location": { + "lat": 60.18708, + "lon": 24.82909 + } + }, + { + "name": "Lund", + "start_date": "2018-05-15", + "end_date": "2018-05-17", + "instructors": [ + "Radovan Bast", + "Sabry Razick", + "Thor Wikfeldt" + ], + "num_participants": { + "SE": 30, + "DK": 1, + "total": 31 + }, + "location": { + "lat": 55.715043, + "lon": 13.212401 + } + }, + { + "name": "Turku", + "start_date": "2018-03-20", + "end_date": "2018-03-22", + "instructors": [ + "Jyry Suvilehto", + "Radovan Bast", + "Sri Harsha Vathsavayi" + ], + "helpers": [ + "Zubair Maalick" + ], + "num_participants": { + "FI": 22, + "SE": 1, + "total": 23 + }, + "location": { + "lat": 60.4493, + "lon": 22.2952 + } + }, + { + "name": "Trondheim", + "start_date": "2018-02-27", + "end_date": "2018-03-01", + "instructors": [ + "Bjørn Lindi", + "Radovan Bast", + "Thor Wikfeldt" + ], + "num_participants": { + "NO": 20, + "SE": 1, + "DK": 1, + "total": 22 + }, + "location": { + "lat": 63.4208, + "lon": 10.3928 + } + }, + { + "name": "Espoo", + "start_date": "2017-12-14", + "end_date": "2017-12-16", + "instructors": [ + "Bjørn Lindi", + "Jyry Suvilehto", + "N. D.", + "Radovan Bast", + "Sri Harsha Vathsavayi", + "Seija Sirkiä" + ], + "helpers": [ + "Janne Blomqvist", + "Richard Darst", + "Mika Jalava", + "Harshit Agrawal", + "Vesa Vahermaa" + ], + "num_participants": { + "FI": 40, + "total": 40 + }, + "location": { + "lat": 60.18708, + "lon": 24.82909 + } + }, + { + "name": "Linköping", + "start_date": "2017-11-07", + "end_date": "2017-11-09", + "instructors": [ + "Radovan Bast", + "Thor Wikfeldt", + "Sabry Razick" + ], + "helpers": [ + "Peter Kjellström" + ], + "num_participants": { + "NO": 1, + "SE": 21, + "total": 22 + }, + "location": { + "lat": 58.3978, + "lon": 15.5760 + } + }, + { + "name": "Aarhus", + "start_date": "2017-10-24", + "end_date": "2017-10-26", + "instructors": [ + "Bjørn Lindi", + "Radovan Bast", + "Thor Wikfeldt", + "Sabry Razick" + ], + "helpers": [ + "Dan Mønster" + ], + "num_participants": { + "DK": 24, + "SE": 3, + "total": 27 + }, + "location": { + "lat": 56.1681, + "lon": 10.2030 + } + }, + { + "name": "Tromsø", + "start_date": "2017-06-19", + "end_date": "2017-06-21", + "instructors": [ + "Bjørn Lindi", + "Radovan Bast", + "Thor Wikfeldt", + "Jyry Suvilehto" + ], + "num_participants": { + "BE": 1, + "SE": 1, + "NO": 21, + "total": 23 + }, + "location": { + "lat": 69.68137, + "lon": 18.97228 + } + }, + { + "name": "Copenhagen", + "start_date": "2017-05-09", + "end_date": "2017-05-11", + "instructors": [ + "Sri Harsha Vathsavayi", + "N. D.", + "Radovan Bast", + "Jyry Suvilehto" + ], + "num_participants": { + "SE": 3, + "NL": 1, + "DK": 19, + "total": 23 + }, + "location": { + "lat": 55.78626, + "lon": 12.523 + } + }, + { + "name": "Stockholm", + "start_date": "2017-02-20", + "end_date": "2017-02-22", + "instructors": [ + "Sabry Razick", + "N. D.", + "Radovan Bast", + "Thor Wikfeldt", + "Bjørn Lindi" + ], + "helpers": [ + "Cristian Cira" + ], + "num_participants": { + "SE": 34, + "total": 34 + }, + "location": { + "lat": 59.34819, + "lon": 18.07489 + } + }, + { + "name": "Espoo", + "start_date": "2016-12-14", + "end_date": "2016-12-16", + "instructors": [ + "Jyry Suvilehto", + "N. D.", + "Pinja Koskinen", + "Radovan Bast", + "Thor Wikfeldt" + ], + "helpers": [ + "Sri Harsha Vathsavayi", + "Heikki Lehväslaiho" + ], + "num_participants": { + "FI": 25, + "total": 25 + }, + "location": { + "lat": 60.17833, + "lon": 24.83303 + } + } + ] +} diff --git a/branch/rkdarst--open-source-courses/workshops/heatmap-online.png b/branch/rkdarst--open-source-courses/workshops/heatmap-online.png new file mode 100644 index 000000000..1231fc079 Binary files /dev/null and b/branch/rkdarst--open-source-courses/workshops/heatmap-online.png differ diff --git a/branch/rkdarst--open-source-courses/workshops/heatmap_yesno.png b/branch/rkdarst--open-source-courses/workshops/heatmap_yesno.png new file mode 100644 index 000000000..2a142de2a Binary files /dev/null and b/branch/rkdarst--open-source-courses/workshops/heatmap_yesno.png differ diff --git a/branch/rkdarst--open-source-courses/workshops/impact/index.html b/branch/rkdarst--open-source-courses/workshops/impact/index.html new file mode 100644 index 000000000..cf7347365 --- /dev/null +++ b/branch/rkdarst--open-source-courses/workshops/impact/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/branch/rkdarst--open-source-courses/workshops/index.html b/branch/rkdarst--open-source-courses/workshops/index.html new file mode 100644 index 000000000..849bbdbfd --- /dev/null +++ b/branch/rkdarst--open-source-courses/workshops/index.html @@ -0,0 +1,496 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/workshops/instructor-training.json b/branch/rkdarst--open-source-courses/workshops/instructor-training.json new file mode 100644 index 000000000..db31f5216 --- /dev/null +++ b/branch/rkdarst--open-source-courses/workshops/instructor-training.json @@ -0,0 +1,79 @@ +{ + "events": [ + { + "name": "Online (with FocusCoE)", + "website": "https://coderefinery.github.io/2020-11-02-instructor-training/", + "start_date": "2020-11-02", + "end_date": "2020-11-09", + "instructors": [ + "Radovan Bast", + "Richard Darst", + "Anne Fouilloux", + "Sabry Razick" + ], + "helpers": [ + "Jarno Rantaharju" + ], + "num_participants": { + "total": 14 + } + }, + { + "name": "Online (with TU Delft)", + "website": "https://coderefinery.github.io/2020-06-24-instructor-training/", + "start_date": "2020-06-24", + "end_date": "2020-06-25", + "instructors": [ + "Radovan Bast", + "Richard Darst", + "Anne Fouilloux" + ], + "helpers": [ + "Thor Wikfeldt", + "Paula Martinez Lavanchy" + ], + "num_participants": { + "NO": 1, + "FI": 1, + "NL": 21, + "total": 23 + } + }, + { + "name": "Stockholm", + "start_date": "2019-11-04", + "end_date": "2019-11-05", + "organizers": [ + "Thor Wikfeldt", + "Anne Fouilloux", + "Radovan Bast" + ], + "instructors": [ + "Thor Wikfeldt", + "Anne Fouilloux", + "Radovan Bast", + "Radovan Bast", + "Richard Darst" + ], + "helpers": [ + "Juho Lehtonen", + "Sabry Razick", + "Jarno Rantaharju", + "João M. da Silva", + "Max Roald Eckardt", + "Naoe Tatara", + "Emiliano Molinaro", + "Bjørn Lindi" + ], + "num_participants": { + "NO": 8, + "DK": 2, + "FI": 2, + "UK": 1, + "EE": 2, + "SE": 15, + "total": 30 + } + } + ] +} diff --git a/branch/rkdarst--open-source-courses/workshops/other.json b/branch/rkdarst--open-source-courses/workshops/other.json new file mode 100644 index 000000000..fbd00c461 --- /dev/null +++ b/branch/rkdarst--open-source-courses/workshops/other.json @@ -0,0 +1,620 @@ +{ + "events": [ + { + "name": "CarpentryCon 2022: Online teaching strategies from CodeRefinery", + "website": "https://hackmd.io/@coderefinery/carpentrycon-2022-attendee", + "start_date": "2022-08-03", + "end_date": "2022-08-03", + "Organizer": [ + "Radovan Bast", + "Richard Darst" + ], + "instructors": [ + "Radovan Bast", + "Richard Darst", + "Luca Ferranti", + "Samantha Wittke" + ], + "num_participants": { + "total": 15 + } + }, + { + "name": "Community teaching mini-workshop", + "website": "https://hackmd.io/@coderefinery/community-teaching-2022-summer", + "start_date": "2022-06-21", + "end_date": "2022-06-21", + "Organizer": [ + "Radovan Bast", + "Richard Darst" + ], + "instructors": [ + "Radovan Bast", + "Richard Darst", + "Diana Iusan", + "Johan Hellsvik" + ], + "helpers": [], + "num_participants": { + "DK": 2, + "ES": 1, + "SE": 5, + "NO": 7, + "FI": 5, + "LT": 1, + "LV": 1, + "total": 22 + } + }, + { + "name": "Git workshop with Compex Systems Modelling group at UiT", + "start_date": "2022-02-16", + "end_date": "2022-02-23", + "Organizer": [ + "Radovan Bast" + ], + "instructors": [ + "Radovan Bast" + ], + "helpers": [], + "num_participants": { + "NO": 19, + "total": 19 + } + }, + { + "name": "Python for Scientific Computing", + "website": "https://scicomp.aalto.fi/training/scip/python-for-scicomp/", + "start_date": "2021-10-25", + "end_date": "2021-10-28", + "Organizer": [ + "Richard Darst", + "Enrico Glerean" + ], + "instructors": [ + "Radovan Bast", + "Richard Darst", + "Enrico Glerean", + "Johan Hellsvik", + "Diana Iusan", + "Pavlin Mitev", + "Thomas Pfau", + "Dhanya Pushpadas", + "Jarno Rantaharju", + "Sabry Razick", + "Simo Tuomisto", + "Marijn van Vliet", + "Samantha Wittke" + ], + "helpers": [] + }, + { + "name": "CodeRefinery workshop with focus on Git and GitLab for Metacenter", + "website": "https://coderefinery.github.io/2021-03-25-online/", + "start_date": "2021-03-25", + "end_date": "2021-04-08", + "host": [ + "Sabry Razick", + "Radovan Bast" + ], + "instructors": [ + "Sabry Razick", + "Radovan Bast" + ], + "helpers": [], + "num_participants": { + "NO": 15, + "total": 15 + } + }, + { + "name": "Online CodeRefinery Hackathon on Software Testing", + "website": "https://coderefinery.github.io/2021-03-17-testing-hackathon/", + "start_date": "2021-03-17", + "end_date": "2021-03-24", + "host": [ + "Naoe Tatara", + "Thor Wikfeldt" + ], + "mentors": [ + "Anne Fouilloux", + "Diana Iusan", + "Johan Hellsvik", + "Mark Abraham", + "Qiang Li", + "Radovan Bast", + "Richard Darst", + "Roberto Di Remigio", + "Samantha Wittke", + "Thor Wikfeldt" + ], + "helpers": [ + "Naoe Tatara" + ], + "num_participants": { + "NO": 6, + "FI": 4, + "SE": 16, + "DK": 3, + "ZA": 4, + "total": 33 + } + }, + { + "name": "Online CodeRefinery Workshop on Software Testing", + "website": "https://coderefinery.github.io/2021-03-17-testing-hackathon/", + "start_date": "2021-03-17", + "end_date": "2021-03-17", + "host": [ + "Naoe Tatara", + "Thor Wikfeldt" + ], + "instructors": [ + "Diana Iusan", + "Johan Hellsvik", + "Mark Abraham", + "Thor Wikfeldt" + ], + "helpers": [ + "Qiang Li", + "Radovan Bast", + "Roberto Di Remigio", + "Samantha Wittke", + "Naoe Tatara" + ], + "num_participants": { + "NO": 14, + "FI": 7, + "SE": 31, + "DK": 5, + "IE": 1, + "NL": 2, + "UK": 1, + "FR": 2, + "TN": 1, + "ZA": 5, + "total": 69 + } + }, + { + "name": "Introduction to Shell, Computing resources for researchers, and HPC Kickstart (Aalto University and University of Oslo) (online)", + "website": "https://coderefinery.github.io/2021-01-29-linux-online/", + "start_date": "2021-01-29", + "end_date": "2021-01-29", + "instructors": [ + "Richard Darst", + "Enrico Glerean", + "Anne Fouilloux", + "Sabry Razick" + ], + "helpers": [ + "Marijn van Vliet", + "Jarno Rantaharju", + "Naoe Tatara" + ], + "num_participants": { + "NO": 59, + "FI": 71, + "total": 130 + } + }, + { + "name": "Introduction to Conda for (Data) Scientists (online)", + "website": "https://coderefinery.github.io/2021-01-08-coderefinery-online/", + "start_date": "2021-01-08", + "end_date": "2021-01-08", + "instructors": [ + "Anne Fouilloux", + "Samantha Wittke" + ], + "helpers": [ + "Niket Agrawal", + "Octavian Andrei", + "Radovan Bast", + "Emiliano Gelati", + "Tomasz Kopec", + "Emilia Lipponen", + "Lex Nederbragt", + "Hui Tang", + "Sabry Razick", + "Naoe Tatara" + ], + "num_participants": { + "NO": 39, + "FI": 5, + "NL": 2, + "SE": 1, + "IN": 1, + "total": 48 + } + }, + { + "name": "Collaborative version control with Git (online)", + "website": "https://coderefinery.github.io/2020-12-10-online/", + "start_date": "2020-12-10", + "end_date": "2020-12-11", + "instructors": [ + "Anne Fouilloux", + "Radovan Bast" + ], + "helpers": [ + "Sabry Razick" + ], + "num_participants": { + "NO": 15, + "total": 15 + } + }, + { + "name": "Version control (Karlstad/online)", + "website": "https://wikfeldt.github.io/2020-09-22-karlstad/", + "start_date": "2020-09-22", + "end_date": "2020-09-23", + "instructors": [ + "Raphaela Heil", + "Thor Wikfeldt", + "Pavlin Mitev" + ], + "helpers": [ + "Diana Iusan" + ], + "num_participants": { + "SE": 11, + "CN": 1, + "total": 12 + } + }, + { + "name": "Python for Scientific Computing (online)", + "website": "https://scicomp.aalto.fi/training/scip/python-for-scicomp/", + "start_date": "2020-09-14", + "end_date": "2020-09-23", + "host": [ + "Naoe Tatara" + ], + "instructors": [ + "Anne Fouilloux", + "Richard Darst", + "Samantha Wittke", + "Thor Wikfeldt", + "Radovan Bast" + ], + "num_participants": { + "FI": 41, + "NO": 24, + "SE": 3, + "total": 68 + } + }, + { + "name": "GitHub without command line (Tampere/online)", + "start_date": "2020-08-13", + "end_date": "2020-08-13", + "instructors": [ + "Radovan Bast", + "Richard Darst" + ], + "helpers": [ + "Kerstin Lenk", + "Narayan Puthanmadam Subramaniyam" + ], + "num_participants": { + "FI": 16, + "total": 16 + }, + "location": { + "lat": 61.49512, + "lon": 23.77887 + } + }, + { + "name": "Workshop for those familiar with Git (online)", + "website": "https://coderefinery.github.io/2020-05-18-online/", + "start_date": "2020-05-18", + "end_date": "2020-05-20", + "host": [ + "Naoe Tatara" + ], + "instructors": [ + "Radovan Bast", + "Bjørn Lindi", + "Sabry Razick", + "Thor Wikfeldt" + ], + "helpers": [ + "Richard Darst", + "Max Roald Eckardt", + "Juho Lehtonen", + "Pavlin Mitev" + ], + "num_participants": { + "SE": 20, + "NO": 2, + "FI": 1, + "DE": 2, + "unknown": 2, + "total": 27 + } + }, + { + "name": "Collaborative Git (online)", + "website": "https://coderefinery.github.io/2020-05-06-online/", + "start_date": "2020-05-06", + "end_date": "2020-05-06", + "instructors": [ + "Anne Fouilloux", + "Bjørn Lindi", + "Thor Wikfeldt", + "Stefan Negru" + ], + "helpers": [ + "Radovan Bast", + "Richard Darst", + "Juho Lehtonen", + "Sabry Razick" + ], + "num_participants": { + "SE": 25, + "NO": 5, + "DK": 4, + "FI": 3, + "total": 37 + } + }, + { + "name": "GitHub without command line (online)", + "start_date": "2020-04-15", + "end_date": "2020-04-22", + "instructors": [ + "Radovan Bast" + ], + "num_participants": { + "NO": 10, + "total": 10 + } + }, + { + "name": "Introduction to Git (online)", + "website": "https://coderefinery.github.io/2020-04-07-online/", + "start_date": "2020-04-07", + "end_date": "2020-04-08", + "instructors": [ + "Anne Fouilloux", + "Radovan Bast", + "Thor Wikfeldt", + "Richard Darst" + ], + "helpers": [ + "Flavio Calvo", + "João M. da Silva", + "Pedro Ojeda May", + "Pavlin Mitev", + "Hasti Narimanzadeh" + ], + "num_participants": { + "SE": 19, + "FI": 1, + "DE": 2, + "total": 22 + } + }, + { + "name": "Best Software Practices for the Norwegian Earth System Model (Oslo/Bergen/Online)", + "start_date": "2020-02-05", + "end_date": "2020-02-05", + "instructors": [ + "Anne Fouilloux" + ], + "num_participants": { + "NO": 30, + "total": 30 + } + }, + { + "name": "Social coding and open software (Oslo)", + "website": "https://www.ub.uio.no/english/courses-events/events/all-libraries/2020/research-bazaar/social-coding.html", + "start_date": "2020-01-09", + "end_date": "2020-01-09", + "instructors": [ + "Anne Fouilloux" + ], + "num_participants": { + "NO": 21, + "total": 21 + }, + "location": { + "lat": 59.91712, + "lon": 10.73719 + } + }, + { + "name": "Hackathon (Stockholm)", + "start_date": "2019-11-06", + "end_date": "2019-11-07", + "organizers": [ + "Thor Wikfeldt", + "Anne Fouilloux", + "Radovan Bast" + ], + "speakers": [ + "Rosa Lönneborg", + "Richard Darst", + "Anne Fouilloux", + "Radovan Bast" + ], + "num_participants": { + "NO": 8, + "FI": 3, + "DK": 1, + "UK": 1, + "EE": 1, + "SE": 4, + "total": 18 + }, + "location": { + "lat": 59.34781, + "lon": 18.07257 + } + }, + { + "name": "Reproducibility workshop (Stockholm)", + "start_date": "2019-09-09", + "end_date": "2019-09-12", + "instructors": [ + "Thor Wikfeldt", + "Will Usher" + ], + "num_participants": { + "SE": 12, + "total": 12 + }, + "location": { + "lat": 59.34847, + "lon": 18.0729 + } + }, + { + "name": "Python for Dynamics and Evolution of Earth and Planets (Oslo)", + "website": "https://annefou.github.io/2019-04-01-deep/", + "start_date": "2019-04-01", + "end_date": "2019-04-05", + "instructors": [ + "Nils Charles Prieur", + "Anne Fouilloux" + ], + "num_participants": { + "NO": 12, + "total": 12 + }, + "location": { + "lat": 59.94347, + "lon": 10.718161 + } + }, + { + "name": "Mixed Arts with CodeRefinery & Software Carpentry (Copenhagen)", + "website": "https://kln-courses.github.io/mixed-arts/", + "start_date": "2019-03-05", + "end_date": "2019-03-05", + "instructors": [ + "Annika Rockenberger", + "Max Roald Eckardt" + ], + "num_participants": { + "DK": 40, + "total": 40 + }, + "location": { + "lat": 55.66293, + "lon": 12.59031 + } + }, + { + "name": "Git in practice (Oslo)", + "website": "https://uio-carpentry.github.io/2019-02-27-git/", + "start_date": "2019-02-27", + "end_date": "2019-02-27", + "instructors": [ + "Sabry Razick", + "Anne Fouilloux" + ], + "helpers": [ + "Annika Rockenberger " + ], + "num_participants": { + "NO": 18, + "total": 18 + }, + "location": { + "lat": 59.939637, + "lon": 10.723291 + } + }, + { + "name": "Git workshop (Umeå)", + "start_date": "2017-10-16", + "end_date": "2017-10-16", + "instructors": [ + "Radovan Bast", + "Jyry Suvilehto", + "Thor Wikfeldt" + ], + "num_participants": { + "SE": 21, + "total": 21 + }, + "location": { + "lat": 63.8191, + "lon": 20.31 + } + }, + { + "name": "Workshop: Interfacing Fortran, C, C++, and Python (Manchester)", + "website": "https://rse.ac.uk/conf2017/workshop-and-tutorial-abstracts/#mixed-martial-arts-with-coderefinery", + "start_date": "2017-09-08", + "end_date": "2017-09-08", + "instructors": [ + "Radovan Bast" + ], + "num_participants": { + "total": 15 + }, + "location": { + "lat": 53.47724, + "lon": -2.25475 + } + }, + { + "name": "Workshop: Mixed Martial Arts with CodeRefinery (Umeå)", + "website": "http://neic2017.nordforsk.org/workshops/coderefinery/", + "start_date": "2017-05-29", + "end_date": "2017-05-29", + "instructors": [ + "Bjørn Lindi", + "Radovan Bast" + ], + "num_participants": { + "total": 15 + }, + "location": { + "lat": 63.8267, + "lon": 20.2665 + } + }, + { + "name": "CodeRefinery get-together (Stockholm)", + "start_date": "2017-05-19", + "end_date": "2017-05-19", + "organizers": [ + "Radovan Bast", + "Thor Wikfeldt" + ], + "speakers": [ + "Mark Abraham", + "Mikael Leetmaa" + ], + "num_participants": { + "SE": 15, + "total": 15 + }, + "location": { + "lat": 59.34819, + "lon": 18.07489 + } + }, + { + "name": "CodeRefinery seminar (Oslo)", + "website": "https://www.uio.no/english/services/it/research/events/coderefinery-2017-april.html", + "start_date": "2017-04-06", + "end_date": "2017-04-06", + "num_participants": { + "NO": 15, + "total": 15 + }, + "location": { + "lat": 59.94347, + "lon": 10.718161 + } + } + ] +} diff --git a/branch/rkdarst--open-source-courses/workshops/past/index.html b/branch/rkdarst--open-source-courses/workshops/past/index.html new file mode 100644 index 000000000..a78ed8bfa --- /dev/null +++ b/branch/rkdarst--open-source-courses/workshops/past/index.html @@ -0,0 +1,2528 @@ + + + + Past workshops and events - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Past workshops and events + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +

Past workshops and events

+

This page lists the standard core CodeRefinery +workshop as well as other teaching events by the +CodeRefinery team. Before March 2020, we focused on small/medium +in-person workshops at sites around the Nordics. After that, we +focused on online teaching, and by the time in-person restrictions +were over, the CodeRefinery teaching +style was so well developed that we +are continuing online with in-person workshops as requested.

+ + +
+
+

(locations "in the ocean" represent online events)

+
+ + + +
+
+

Standard CodeRefinery workshops

+ + + +
    + + + + +
  • + + Full online workshop (6 half-days) + +
    + +   + + + Sep 20 + - + Sep 29, 2022 + + +   + (262 participants) + +
    +
  • + + + + + +
  • + + Full online workshop (6 half-days) + +
    + +   + + + Mar 22 + - + Mar 31, 2022 + + +   + (297 participants) + +
    +
  • + + + + + +
  • + + Full online workshop (6 half-days) + +
    + +   + + + May 10 + - + May 20, 2021 + + +   + (128 participants) + +
    +
  • + + + + + +
  • + + Online + +
    + +   + + + Nov 17 + - + Nov 26, 2020 + + +   + (77 participants) + +
    +
  • + + + + + +
  • + + Online + +
    + +   + + + Oct 20 + - + Oct 29, 2020 + + +   + (100 participants) + +
    +
  • + + + + + +
  • + + Online (Mega-CodeRefinery) + +
    + +   + + + May 25 + - + Jun 4, 2020 + + +   + (102 participants) + +
    +
  • + + + + + +
  • + + Trondheim + +
    + +   + + + Feb 25 + - + Feb 27, 2020 + + +   + (28 participants) + +
    +
  • + + + + + +
  • + + Espoo + +
    + +   + + + Dec 10 + - + Dec 12, 2019 + + +   + (30 participants) + +
    +
  • + + + + + +
  • + + Lille + +
    + +   + + + Nov 25 + - + Dec 5, 2019 + + +   + (28 participants) + +
    +
  • + + + + + +
  • + + Stockholm + +
    + +   + + + Nov 19 + - + Nov 21, 2019 + + +   + (28 participants) + +
    +
  • + + + + + +
  • + + Trondheim + +
    + +   + + + Oct 22 + - + Oct 24, 2019 + + +   + (20 participants) + +
    +
  • + + + + + +
  • + + Aalborg + +
    + +   + + + Jun 11 + - + Jun 13, 2019 + + +   + (20 participants) + +
    +
  • + + + + + +
  • + + Oslo + +
    + +   + + + Jun 3 + - + Jun 5, 2019 + + +   + (20 participants) + +
    +
  • + + + + + +
  • + + Helsinki + +
    + +   + + + May 27 + - + May 29, 2019 + + +   + (27 participants) + +
    +
  • + + + + + +
  • + + Gothenburg + +
    + +   + + + May 21 + - + May 23, 2019 + + +   + (25 participants) + +
    +
  • + + + + + +
  • + + Tartu + +
    + +   + + + Apr 2 + - + Apr 4, 2019 + + +   + (26 participants) + +
    +
  • + + + + + +
  • + + Stockholm + +
    + +   + + + Mar 25 + - + Mar 27, 2019 + + +   + (30 participants) + +
    +
  • + + + + + +
  • + + Espoo + +
    + +   + + + Dec 11 + - + Dec 13, 2018 + + +   + (33 participants) + +
    +
  • + + + + + +
  • + + Uppsala + +
    + +   + + + Dec 3 + - + Dec 5, 2018 + + +   + (31 participants) + +
    +
  • + + + + + +
  • + + Kiruna + +
    + +   + + + Nov 21 + - + Nov 23, 2018 + + +   + (38 participants) + +
    +
  • + + + + + +
  • + + Reykjavik + +
    + +   + + + Aug 21 + - + Aug 23, 2018 + + +   + (26 participants) + +
    +
  • + + + + + +
  • + + Oslo + +
    + +   + + + Jun 12 + - + Jun 14, 2018 + + +   + (42 participants) + +
    +
  • + + + + + +
  • + + Espoo + +
    + +   + + + May 29 + - + May 31, 2018 + + +   + (48 participants) + +
    +
  • + + + + + +
  • + + Lund + +
    + +   + + + May 15 + - + May 17, 2018 + + +   + (31 participants) + +
    +
  • + + + + + +
  • + + Turku + +
    + +   + + + Mar 20 + - + Mar 22, 2018 + + +   + (23 participants) + +
    +
  • + + + + + +
  • + + Trondheim + +
    + +   + + + Feb 27 + - + Mar 1, 2018 + + +   + (22 participants) + +
    +
  • + + + + + +
  • + + Espoo + +
    + +   + + + Dec 14 + - + Dec 16, 2017 + + +   + (40 participants) + +
    +
  • + + + + + +
  • + + Linköping + +
    + +   + + + Nov 7 + - + Nov 9, 2017 + + +   + (22 participants) + +
    +
  • + + + + + +
  • + + Aarhus + +
    + +   + + + Oct 24 + - + Oct 26, 2017 + + +   + (27 participants) + +
    +
  • + + + + + +
  • + + Tromsø + +
    + +   + + + Jun 19 + - + Jun 21, 2017 + + +   + (23 participants) + +
    +
  • + + + + + +
  • + + Copenhagen + +
    + +   + + + May 9 + - + May 11, 2017 + + +   + (23 participants) + +
    +
  • + + + + + +
  • + + Stockholm + +
    + +   + + + Feb 20 + - + Feb 22, 2017 + + +   + (34 participants) + +
    +
  • + + + + + +
  • + + Espoo + +
    + +   + + + Dec 14 + - + Dec 16, 2016 + + +   + (25 participants) + +
    +
  • + + +
+ + +

Open house events

+ +
+ +
+

Instructor training events

+ + + +
    + + + + +
  • + + Online (with FocusCoE) + +
    + +   + + + Nov 2 + - + Nov 9, 2020 + + +   + (14 participants) + +
    +
  • + + + + + +
  • + + Online (with TU Delft) + +
    + +   + + + Jun 24 + - + Jun 25, 2020 + + +   + (23 participants) + +
    +
  • + + + + + +
  • + + Stockholm + +
    + +   + + + Nov 4 + - + Nov 5, 2019 + + +   + (30 participants) + +
    +
  • + + +
+ + +

Shorter workshops and other events

+ + + + + +
+
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/workshops/position-online.png b/branch/rkdarst--open-source-courses/workshops/position-online.png new file mode 100644 index 000000000..86e87a3c7 Binary files /dev/null and b/branch/rkdarst--open-source-courses/workshops/position-online.png differ diff --git a/branch/rkdarst--open-source-courses/workshops/request/index.html b/branch/rkdarst--open-source-courses/workshops/request/index.html new file mode 100644 index 000000000..95b708958 --- /dev/null +++ b/branch/rkdarst--open-source-courses/workshops/request/index.html @@ -0,0 +1,536 @@ + + + + Request a workshop - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Request a workshop + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Request a workshop

+ + + +

Join an existing workshop

+

Requesting a workshop is so 2019, isn't it? At least for us it is, +since anyone can attend any workshop. As of 2022, most of our +workshops are online and anyone may join, no matter where you are. +This isn't just because of Covid-19, but we have found that our +teaching style provides such a +high-quality program that few people show up in-person when there is +that opportunity. Join as a partner and +you can provide in-person exercise sessions and support to your local +audience.

+

Run your own workshop

+

You are welcome to re-use our materials for your own workshops. +Please don't call it a "CodeRefinery" workshop, but you can say it +uses CodeRefinery materials. (e.g. call it "Software development for +researchers (CodeRefinery)"). The policy of our name usage may change +later. You can read more about reusing our +lessons - in short, please do so (you can reuse +them right where they are), and send us improvements to support reuse.

+

Local / custom workshops requests

+

If you would like to request a private workshop, please get in +touch. As of 2022, with our updated funding +situation, CodeRefinery is more of a decentralized organization and we +may not have dedicated staff to offer workshops, but we still like to +make that possible wherever we can. Thus, you would be expected to +help with the teaching and organization some.

+

During this transition period, it's best to join the CodeRefniery +chat and discuss there - things +may change fast. It's good to ask if you are interested, even if we +can't do it yet - this shows demand and helps with future funding!

+

Since CodeRefinery still has Nordic roots, that is our main audience. +Workshops have been requested by both organizations and individual +research groups. Price might be free (e.g. a staff member at a +national computing center can provide the workshop) or some other +CodeRefinery partner might be able to name a price. We have supported +workshops even outside of the Nordics.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/workshops/statistics/index.html b/branch/rkdarst--open-source-courses/workshops/statistics/index.html new file mode 100644 index 000000000..7c262c410 --- /dev/null +++ b/branch/rkdarst--open-source-courses/workshops/statistics/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/branch/rkdarst--open-source-courses/workshops/teaching-style/index.html b/branch/rkdarst--open-source-courses/workshops/teaching-style/index.html new file mode 100644 index 000000000..3e338aac7 --- /dev/null +++ b/branch/rkdarst--open-source-courses/workshops/teaching-style/index.html @@ -0,0 +1,581 @@ + + + + The CodeRefinery teaching style - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - The CodeRefinery teaching style + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

The CodeRefinery teaching style

+ + + +
+

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!

+

[Feedback, online Scientific Computing kickstart, June 2021]

+
+

In-person workshops are taught in the Carpentries style. Our lessons +would fit in a Carpentries workshop, and we welcome such collaboration +or even joining the Carpentries.

+

In March 2020, CodeRefinery moved online like many others. While at +first, we taught the same way as everyone else did, we were bold +enough to go farther and eventually found something special.

+

Co-teaching

+

Listening to one person is usually monotonous, even if they are an +above-average speaker. Speakers usually try to create engagement by +having the audience speak as well, but quite often the audience is too +quiet, or a few audience members dominate.

+

Instead, we do co-teaching: two instructors teach as a discussion +between them. For example, at certain times, one may assume the role +of the explainer and one the role of the one doing the demos. A +conversation is much more engaging than a lecture, and in addition, +this greatly reduces the preparation effort, since the team can fill +in any gaps together.

+

Parallel chat

+

Asking for questions by voice rarely gets many. Even when it does, a +few people often dominate. Using a standard chat in an online course +scrolls too fast and many questions get lost.

+

Parallel chat is basically "google doc" but for questions. +Questions and comments are always added to the bottom, and answers +come as needed. We have many helpers around to answer all the +questions, the point that learners sometimes complain about +information overload. Many others have tried to do something similar, +but our implementation seems to be the best.

+

Livestreaming

+

With the above developments, we don't actually need all the learners +in one "meeting". Instead, we can run the course as a livestream, and +then we can literally reach everyone who might want to attend. +Personal data for registering isn't even needed (but we do take +registrations for access to the parallel chat and other support).

+

Videos

+

Once the course is a livestream, it is trivial to release videos of +the course - there is no privacy risk, since there are no audience in +the livestream production room. These videos aren't just released, +but the streaming site provides immediate access to them, so that +learners can immediately review or catch up with things they missed. +This extra flexibility helps many more people make the most of the course.

+

Reverse hybrid

+

Just because a course is online doesn't mean that people can't +interact in-person: many do, by watching the course together in +their own space (where people can be more comfortable). Many +partner organizations run in-person breakout rooms where professional +support is provided. We call this reverse hybrid.

+

Teams

+

The best interaction is in small groups - this is the benefit of +in-person, isn't it? We support learners in forming these teams and +training exercise leaders for them, in addition to providing expert +helpers for additional support. These teams could meet in-person (see +"reverse hybrid" above), or online.

+

Open collaboration

+

At the scale we can reach above, we have a new level of openness. Not +only are the lesson materials open, but our very partnership in +putting on the courses is open. We often organize courses in +partnership with several organizations, with co-instructors and +helpers coming from all around. In addition to providing a higher +quality workshop for learners, this provides a more engaging and +education experience for the staff putting on the events.

+

Open collaboration allows us the resources to do all the things above.

+

Accessibility to more learning styles

+

Put together, we don't just reach more people, but we actually are +able to teach to many more learning styles. Whether you are a quiet +person and would rather ask questions anonymously (without taking time +from someone else), need to attend from your own spaces, need more +time to review after the teaching period, or more, we can do better +than most.

+

Read more

+

Our techniques and tools are as open as our teaching. Read more in +the community teaching +training or read technical +descriptions in our manuals.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/workshops/upcoming/index.html b/branch/rkdarst--open-source-courses/workshops/upcoming/index.html new file mode 100644 index 000000000..f56c715dd --- /dev/null +++ b/branch/rkdarst--open-source-courses/workshops/upcoming/index.html @@ -0,0 +1,529 @@ + + + + Upcoming workshops and events - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Upcoming workshops and events + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Upcoming workshops and events

+ + + +

Core CodeRefinery Workshops

+ + +

Past workshops and events

+ +

How to be informed about future events

+

We don't want you to miss a workshop or event. The best +way to stay informed is to join our newsletter +(we are working on reviving it and will post updates there soon).

+

You can also subscribe to our RSS feed.

+

Upcoming workshops from partner organizations

+
+ +

Partners are invited to send a pull +request +to list your workshop/event here.

+
+

Privacy policy

+

Our privacy policy +documents what registration data we store, where, and why.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--open-source-courses/workshops/yes-no-questions-online.png b/branch/rkdarst--open-source-courses/workshops/yes-no-questions-online.png new file mode 100644 index 000000000..ec07e86ba Binary files /dev/null and b/branch/rkdarst--open-source-courses/workshops/yes-no-questions-online.png differ diff --git a/branch/rkdarst--registration/404.html b/branch/rkdarst--registration/404.html new file mode 100644 index 000000000..c61bc6056 --- /dev/null +++ b/branch/rkdarst--registration/404.html @@ -0,0 +1,459 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+

404, page not found (or moved to coderefinery.github.io)

+
+ +

+ Try going to NEWURL + instead. If this does not work, clear your browser cache. +

+ + + + +

+ We had to change URLs for the lessons. If you are looking for + one of the CodeRefinery lessons, try changing coderefinery.org to + coderefinery.github.io in the URL to find the page you want. +

+ + + +

+ This is not the page you are looking for ... return back to the + index page? +

+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/CNAME b/branch/rkdarst--registration/CNAME new file mode 100644 index 000000000..241b540e5 --- /dev/null +++ b/branch/rkdarst--registration/CNAME @@ -0,0 +1 @@ +coderefinery.org \ No newline at end of file diff --git a/branch/rkdarst--registration/about/code-of-conduct/index.html b/branch/rkdarst--registration/about/code-of-conduct/index.html new file mode 100644 index 000000000..f508a7c57 --- /dev/null +++ b/branch/rkdarst--registration/about/code-of-conduct/index.html @@ -0,0 +1,494 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + +

Code of conduct

+

Introduction and source of inspiration

+

In any events or community space organized by CodeRefinery, we are committed to +creating a friendly and respectful place for learning, teaching and +contributing. All participants in our events and communications are expected to +show respect and courtesy to others.

+

We follow the Code of Conduct by the +Carpentries +as primary principles. Here is a summary of CodeRefinery's Code of Conduct +adapted from the Carpentries Code of Conduct:

+

Expected behaviors

+

We are dedicated to providing a welcoming and supportive environment for all +people, regardless of background or identity. By participating in any events or +community space organized by CodeRefinery, participants accept to abide by +CodeRefinery’s Code of Conduct and accept the procedures by which any Code of +Conduct incidents are resolved. Any form of behaviour to exclude, intimidate, +or cause discomfort is a violation of the Code of Conduct.

+

In order to foster a positive and professional learning environment we encourage the following kinds of behaviours in all platforms and events:

+ +

Unexpected behaviors

+

On the other hand, unexpected behaviors include but not limited to:

+ +

Consequence of violation of Code of Conduct

+

Participants who are asked to stop any inappropriate behaviour are expected to +comply immediately. This applies to any events and community space organized by +CodeRefinery, either online or in-person. If a participant engages in behaviour +that violates this code of conduct, the organiser of the event or CodeRefinery +core team member(s) may warn the offender, ask them to leave the event or +platform (without refund, if applicable), or set up an incident-specific +CodeRefinery Code of Conduct Committee to investigate the Code of Conduct +violation and impose appropriate sanctions.

+

Incidence report

+

If you feel that the Code of Conduct was violated in an event organized by +CodeRefinery, no matter if it is online or in physical space, please notify the +coordinator/host of the event (or Code of Conduct facilitator if there is a +dedicated person). If you feel uncomfortable directly notifying someone in the +workshop, use the form in the next paragraph.

+

If the incident happened in a community space organized by CodeRefinery, please +complete this form to report the +incident.

+

Designed CodeRefinery team members have access to reported incidents. We do not +yet have a separate Code of Conduct committee, but we may set up an +incident-specific committee, if reported incidence is deemed to require it.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/about/funding/asc.png b/branch/rkdarst--registration/about/funding/asc.png new file mode 100644 index 000000000..45e833fcf Binary files /dev/null and b/branch/rkdarst--registration/about/funding/asc.png differ diff --git a/branch/rkdarst--registration/about/funding/csc.png b/branch/rkdarst--registration/about/funding/csc.png new file mode 100644 index 000000000..3268bd814 Binary files /dev/null and b/branch/rkdarst--registration/about/funding/csc.png differ diff --git a/branch/rkdarst--registration/about/funding/deic.png b/branch/rkdarst--registration/about/funding/deic.png new file mode 100644 index 000000000..a591abf66 Binary files /dev/null and b/branch/rkdarst--registration/about/funding/deic.png differ diff --git a/branch/rkdarst--registration/about/funding/enccs.png b/branch/rkdarst--registration/about/funding/enccs.png new file mode 100644 index 000000000..88f0984b3 Binary files /dev/null and b/branch/rkdarst--registration/about/funding/enccs.png differ diff --git a/branch/rkdarst--registration/about/funding/index.html b/branch/rkdarst--registration/about/funding/index.html new file mode 100644 index 000000000..d38421134 --- /dev/null +++ b/branch/rkdarst--registration/about/funding/index.html @@ -0,0 +1,429 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/about/funding/neic.png b/branch/rkdarst--registration/about/funding/neic.png new file mode 100644 index 000000000..a68367fcc Binary files /dev/null and b/branch/rkdarst--registration/about/funding/neic.png differ diff --git a/branch/rkdarst--registration/about/funding/sigma2.jpg b/branch/rkdarst--registration/about/funding/sigma2.jpg new file mode 100644 index 000000000..87bf6fea7 Binary files /dev/null and b/branch/rkdarst--registration/about/funding/sigma2.jpg differ diff --git a/branch/rkdarst--registration/about/funding/snic.png b/branch/rkdarst--registration/about/funding/snic.png new file mode 100644 index 000000000..d43fae37b Binary files /dev/null and b/branch/rkdarst--registration/about/funding/snic.png differ diff --git a/branch/rkdarst--registration/about/history/index.html b/branch/rkdarst--registration/about/history/index.html new file mode 100644 index 000000000..40e6756ad --- /dev/null +++ b/branch/rkdarst--registration/about/history/index.html @@ -0,0 +1,477 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + +

History of the project

+

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.

+

In 2018 the project has received follow-up funding from NeIC for 3 more years, +until 2021. In 2021 the project successfully applied to the NeIC open call +2021 for another 3 years, starting 2022.

+

Funding partners 2016-2021

+
+
+ + logo: CSC - IT Center for Science + +
+
+ + logo: Aalto Scientific Computing + +
+
+ + logo: Danish e-Infrastructure Cooperation + +
+
+ + logo: Nordic e-Infrastructure Collaboration + +
+
+ + logo: Sigma2 + +
+
+ + logo: Swedish National Infrastructure for Computing + +
+
+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/about/impact/index.html b/branch/rkdarst--registration/about/impact/index.html new file mode 100644 index 000000000..5d8b7e9ef --- /dev/null +++ b/branch/rkdarst--registration/about/impact/index.html @@ -0,0 +1,459 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Impact of online CodeRefinery workshops + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Impact of online CodeRefinery workshops

+ + + +

Over 1100 people have attended a CodeRefinery workshop since the project +started! Since the pandemic started, we shifted the gear towards online workshops. In total 407 participated in online CodeRefinery workshops.

+

Along the change in tools and practices, we changed questions in pre-/post-workshop surveys. To provide the most consistent and recent picture of our participants and impact, the below is based on data provided by pre-/post-workshop surveys answered in relevance to only online workshops. (Note: pre-/post-workshops are opt-in.)

+

Participants' background

+

Results of pre-workshop surveys (answers given by 301 persons) show that our workshop participants range from undergraduate students to full +professors, and come from a variety of academic disciplines.

+

The chart below shows the result of a question asking about their job title, position or occupation.

+ +

alt text

+

The chart below shows the result of a question asking about their academic discipline.
+alt text

+

What is our impact?

+

The long-term impact of CodeRefinery workshops is measured through a +post-workshop survey which is sent out to all former participants 3 months to 1 year after attending a workshop. To date (12th Sep 2021) we received 80 voluntary responses to +a post-workshop survey by participants of an online workshop.

+

The heatmap below shows how former participants +use various software development tools after attending a workshop, and +how their code and collaboration with colleagues has changed.

+

Please note that a part of responses answered the specific tool to different types of impact, for example, there are cases where both "started using" and "using better" was chosen for "Version control".

+

alt text

+

The chart below shows fraction of former participants who feel their code and collaboration with colleagues has been improved. +alt text

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/about/project/index.html b/branch/rkdarst--registration/about/project/index.html new file mode 100644 index 000000000..a9b3cbc86 --- /dev/null +++ b/branch/rkdarst--registration/about/project/index.html @@ -0,0 +1,592 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - The CodeRefinery project + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

The CodeRefinery project

+ + + + + +

Objectives

+

We are working with students, researchers, and research software engineers +from all disciplines to advance software development and management practices, +so that research groups can collaboratively develop, test, +review and discuss their source code, with the aim of making it shareable and reusable, +thus following the FAIR principles.

+

Through our spin-off project Nordic-RSE, we serve as a hub for research software engineers in the Nordic countries, +namely in Iceland, Denmark, Norway, Sweden, Finland, and Estonia.

+

We are a community project seeking volunteers to sustain what we have +accomplished in the first five years.

+

Key facts

+ +

CodeRefinery and The Carpentries

+

We are in the same galaxy as the Carpentries +organization and closely work with them. We run our +workshops in a slightly different way, but our general philosophy, lesson +material, and procedures are very similar. Our target audience is learners who +already have some experience with programming and would like to develop +software in a more efficient and sustainable way. We believe that for many +learners we can offer a good second step after their Carpentries workshop.

+

Core Activities

+ +
+

Infrastructure services

+

Our code repository hosting service is open and free for all +researchers based in Nordic universities and research institutes. Please +contact us if you would like to use these services.

+

Training opportunities

+

We offer training opportunities to researchers from Nordic research groups and projects +to learn basic-to-advanced research computing skills and become confident in using +state-of-the-art tools and practices from modern collaborative software +engineering.

+

CodeRefinery Workshops

+

The key objective of CodeRefinery workshop is to grow researchers' software +best practices skills to facilitate open and reproducible research.

+ +

Instructor training workshops

+

One purpose of our Instructor training workshops is to train +CodeRefinery instructors, but being (or becoming) a CodeRefinery +instructor is not required. With the workshops we also aim at building +partnerships with research software engineers +and researchers who are willing to lead skills' transfer within their +local communities in the Nordics.

+

Instructor training workshops take 2 days and cover this lesson +material.

+ +

Other types of events

+

We have organized hackathons, get-together events and shorter workshops +customized for individual research groups. Regularly we also host +online Open House events where CodeRefinery instructors together with +a wider community of interested people work in sprints on topics +ranging from lesson development to website updates.

+

We're always interested in new collaborations, so if you would like to +co-organize an event with us or suggest a new type of event, don't +hesitate to get in touch!

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/about/reports/index.html b/branch/rkdarst--registration/about/reports/index.html new file mode 100644 index 000000000..67e9944f2 --- /dev/null +++ b/branch/rkdarst--registration/about/reports/index.html @@ -0,0 +1,500 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Articles and reports

+ + + +

Articles and blog posts about CodeRefinery

+ +

Presentations

+ +

Newsletter archives

+

The CodeRefinery newsletter is sent out every few months. +Subscribers will be informed about upcoming workshops, hackathons and +other events, as well as other interesting developments like new training +material, community building activities and general project +updates.

+

Here you can browse the archive of all previous +newsletters. To sign up, please +visit tinyletter.com/coderefinery.

+

Project proposals, reports, and documents

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/about/reports/open-call-2021-evaluation.pdf b/branch/rkdarst--registration/about/reports/open-call-2021-evaluation.pdf new file mode 100644 index 000000000..5c1a76091 Binary files /dev/null and b/branch/rkdarst--registration/about/reports/open-call-2021-evaluation.pdf differ diff --git a/branch/rkdarst--registration/about/reports/open-call-2021-proposal.pdf b/branch/rkdarst--registration/about/reports/open-call-2021-proposal.pdf new file mode 100644 index 000000000..edb74ccd9 Binary files /dev/null and b/branch/rkdarst--registration/about/reports/open-call-2021-proposal.pdf differ diff --git a/branch/rkdarst--registration/about/reports/phase-1-collaboration-agreement.pdf b/branch/rkdarst--registration/about/reports/phase-1-collaboration-agreement.pdf new file mode 100644 index 000000000..ff9d7a8df Binary files /dev/null and b/branch/rkdarst--registration/about/reports/phase-1-collaboration-agreement.pdf differ diff --git a/branch/rkdarst--registration/about/reports/phase-1-project-directive.pdf b/branch/rkdarst--registration/about/reports/phase-1-project-directive.pdf new file mode 100644 index 000000000..b851c0aa9 Binary files /dev/null and b/branch/rkdarst--registration/about/reports/phase-1-project-directive.pdf differ diff --git a/branch/rkdarst--registration/about/reports/phase-1-project-plan-v1.0.pdf b/branch/rkdarst--registration/about/reports/phase-1-project-plan-v1.0.pdf new file mode 100644 index 000000000..f0f88d356 Binary files /dev/null and b/branch/rkdarst--registration/about/reports/phase-1-project-plan-v1.0.pdf differ diff --git a/branch/rkdarst--registration/about/reports/phase-1-report.pdf b/branch/rkdarst--registration/about/reports/phase-1-report.pdf new file mode 100644 index 000000000..f4bbf29cb Binary files /dev/null and b/branch/rkdarst--registration/about/reports/phase-1-report.pdf differ diff --git a/branch/rkdarst--registration/about/reports/phase-2-collaboration-agreement.pdf b/branch/rkdarst--registration/about/reports/phase-2-collaboration-agreement.pdf new file mode 100644 index 000000000..f5c2de6d2 Binary files /dev/null and b/branch/rkdarst--registration/about/reports/phase-2-collaboration-agreement.pdf differ diff --git a/branch/rkdarst--registration/about/reports/phase-2-mid-term-report.pdf b/branch/rkdarst--registration/about/reports/phase-2-mid-term-report.pdf new file mode 100644 index 000000000..04c95bed4 Binary files /dev/null and b/branch/rkdarst--registration/about/reports/phase-2-mid-term-report.pdf differ diff --git a/branch/rkdarst--registration/about/reports/phase-2-project-directive.pdf b/branch/rkdarst--registration/about/reports/phase-2-project-directive.pdf new file mode 100644 index 000000000..1ab63feb8 Binary files /dev/null and b/branch/rkdarst--registration/about/reports/phase-2-project-directive.pdf differ diff --git a/branch/rkdarst--registration/about/reports/phase-2-project-plan.pdf b/branch/rkdarst--registration/about/reports/phase-2-project-plan.pdf new file mode 100644 index 000000000..343083988 Binary files /dev/null and b/branch/rkdarst--registration/about/reports/phase-2-project-plan.pdf differ diff --git a/branch/rkdarst--registration/about/reports/phase-2-report.pdf b/branch/rkdarst--registration/about/reports/phase-2-report.pdf new file mode 100644 index 000000000..6f4a362a0 Binary files /dev/null and b/branch/rkdarst--registration/about/reports/phase-2-report.pdf differ diff --git a/branch/rkdarst--registration/about/reports/phase-3-collaboration-agreement.pdf b/branch/rkdarst--registration/about/reports/phase-3-collaboration-agreement.pdf new file mode 100644 index 000000000..60860df7c Binary files /dev/null and b/branch/rkdarst--registration/about/reports/phase-3-collaboration-agreement.pdf differ diff --git a/branch/rkdarst--registration/about/reports/phase-3-project-plan.pdf b/branch/rkdarst--registration/about/reports/phase-3-project-plan.pdf new file mode 100644 index 000000000..2eb20da9d Binary files /dev/null and b/branch/rkdarst--registration/about/reports/phase-3-project-plan.pdf differ diff --git a/branch/rkdarst--registration/about/staff-meetings/index.html b/branch/rkdarst--registration/about/staff-meetings/index.html new file mode 100644 index 000000000..ffb011f59 --- /dev/null +++ b/branch/rkdarst--registration/about/staff-meetings/index.html @@ -0,0 +1,1100 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Staff meeting minutes + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Staff meeting minutes

+ + + +

CodeRefinery staff meeting

+

hackmd-github-sync-badge

+

:::info

+ +

Next meeting

+ +

About this document

+ +

Tasks (in progress or unassigned)

+ + + +

Decisions

+

Decisions made in the meeting should be listed with the item-number.

+ +

Old decisions are listed in the section at the bottom.

+

Discussion items

+

Each new discussion item gets a number. It is OK that the same item may be discussed in several meetings. Please add items that you would like that we discuss.

+ +

Freshdesk Support

+

RB watching support line until we organise next event.

+

Information

+ +

Done tasks

+ +

Archive of decisions

+ +

Archive of discussions

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/about/statistics/OnlineParticipants.png b/branch/rkdarst--registration/about/statistics/OnlineParticipants.png new file mode 100644 index 000000000..125afb1c1 Binary files /dev/null and b/branch/rkdarst--registration/about/statistics/OnlineParticipants.png differ diff --git a/branch/rkdarst--registration/about/statistics/Registration_FindOut_Countries.png b/branch/rkdarst--registration/about/statistics/Registration_FindOut_Countries.png new file mode 100644 index 000000000..1e4112d8f Binary files /dev/null and b/branch/rkdarst--registration/about/statistics/Registration_FindOut_Countries.png differ diff --git a/branch/rkdarst--registration/about/statistics/index.html b/branch/rkdarst--registration/about/statistics/index.html new file mode 100644 index 000000000..d4b0fd713 --- /dev/null +++ b/branch/rkdarst--registration/about/statistics/index.html @@ -0,0 +1,4855 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +

Statistics

+ +

This is mainly to simplify reporting to funding organizations. But maybe it is +also interesting otherwise.

+
+
+ Twitch and Zoom participants per day +
+
+ Heatmap of how/where participants learned about the workshop by country of affiliation +
+
+ + +

Standard CodeRefinery workshops

+ + +

+ Number of participants/registrants by country of affiliation. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SwedenNorwayFinlandDenmarkEstoniaIcelandNetherlandsOtherTotalTwitch viewersZoom
+ + Full online workshop (6 half-days) + + + + + Sep 20 + - + Sep 29, 2022 + + + + 52 + + + + + + 50 + + + + + + 76 + + + + + + 7 + + + + + + + + + + 34 + + + + + + + + 43 + + + + + + 262 + + + + + 97—157 + + + + 25—59 + +
+ + Full online workshop (6 half-days) + + + + + Mar 22 + - + Mar 31, 2022 + + + + 46 + + + + + + 87 + + + + + + 54 + + + + + + 14 + + + + + + + + + + 55 + + + + + + + + 41 + + + + + + 297 + + + + + 144—215 + + + +
+ + Full online workshop (6 half-days) + + + + + May 10 + - + May 20, 2021 + + + + 21 + + + + + + 43 + + + + + + 24 + + + + + + 12 + + + + + + + + + + 16 + + + + + + + + 12 + + + + + + 128 + + + + + + +
+ + Online + + + + + Nov 17 + - + Nov 26, 2020 + + + + 27 + + + + + + 26 + + + + + + 3 + + + + + + + + + + + + + + + + 21 + + + + + + 77 + + + + + + +
+ + Online + + + + + Oct 20 + - + Oct 29, 2020 + + + + 19 + + + + + + 4 + + + + + + 22 + + + + + + 11 + + + + + + + + + + 43 + + + + + + + + 1 + + + + + + 100 + + + + + + +
+ + Online (Mega-CodeRefinery) + + + + + May 25 + - + Jun 4, 2020 + + + + 5 + + + + + + 16 + + + + + + 75 + + + + + + 2 + + + + + + + + 1 + + + + + + + + + + 3 + + + + + + 102 + + + + + + +
+ + Trondheim + + + + + Feb 25 + - + Feb 27, 2020 + + + + 1 + + + + + + 26 + + + + + + + + + + + + + + + + + + 1 + + + + + + 28 + + + + + + +
+ + Espoo + + + + + Dec 10 + - + Dec 12, 2019 + + + + + + + + 30 + + + + + + + + + + + + + + + + + + + + 30 + + + + + + +
+ + Lille + + + + + Nov 25 + - + Dec 5, 2019 + + + + + + + + + + + + + + + + + + + + 28 + + + + + + 28 + + + + + + +
+ + Stockholm + + + + + Nov 19 + - + Nov 21, 2019 + + + + 28 + + + + + + + + + + + + + + + + + + + + + + + + 28 + + + + + + +
+ + Trondheim + + + + + Oct 22 + - + Oct 24, 2019 + + + + + + 20 + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + +
+ + Aalborg + + + + + Jun 11 + - + Jun 13, 2019 + + + + + + + + + + 18 + + + + + + + + + + + + + + 2 + + + + + + 20 + + + + + + +
+ + Oslo + + + + + Jun 3 + - + Jun 5, 2019 + + + + 1 + + + + + + 18 + + + + + + + + 1 + + + + + + + + + + + + + + + + + + 20 + + + + + + +
+ + Helsinki + + + + + May 27 + - + May 29, 2019 + + + + 1 + + + + + + + + 26 + + + + + + + + + + + + + + + + + + + + 27 + + + + + + +
+ + Gothenburg + + + + + May 21 + - + May 23, 2019 + + + + 25 + + + + + + + + + + + + + + + + + + + + + + + + 25 + + + + + + +
+ + Tartu + + + + + Apr 2 + - + Apr 4, 2019 + + + + + + + + + + + + 25 + + + + + + + + + + + + 1 + + + + + + 26 + + + + + + +
+ + Stockholm + + + + + Mar 25 + - + Mar 27, 2019 + + + + 28 + + + + + + + + + + + + + + + + + + + + 2 + + + + + + 30 + + + + + + +
+ + Espoo + + + + + Dec 11 + - + Dec 13, 2018 + + + + + + + + 31 + + + + + + 1 + + + + + + + + + + + + + + 1 + + + + + + 33 + + + + + + +
+ + Uppsala + + + + + Dec 3 + - + Dec 5, 2018 + + + + 30 + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + 31 + + + + + + +
+ + Kiruna + + + + + Nov 21 + - + Nov 23, 2018 + + + + 36 + + + + + + 1 + + + + + + + + + + + + + + + + + + 1 + + + + + + 38 + + + + + + +
+ + Reykjavik + + + + + Aug 21 + - + Aug 23, 2018 + + + + 3 + + + + + + + + + + + + + + 22 + + + + + + + + + + 1 + + + + + + 26 + + + + + + +
+ + Oslo + + + + + Jun 12 + - + Jun 14, 2018 + + + + 3 + + + + + + 38 + + + + + + + + + + + + + + + + + + 1 + + + + + + 42 + + + + + + +
+ + Espoo + + + + + May 29 + - + May 31, 2018 + + + + + + + + 48 + + + + + + + + + + + + + + + + + + + + 48 + + + + + + +
+ + Lund + + + + + May 15 + - + May 17, 2018 + + + + 30 + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + 31 + + + + + + +
+ + Turku + + + + + Mar 20 + - + Mar 22, 2018 + + + + 1 + + + + + + + + 22 + + + + + + + + + + + + + + + + + + + + 23 + + + + + + +
+ + Trondheim + + + + + Feb 27 + - + Mar 1, 2018 + + + + 1 + + + + + + 20 + + + + + + + + 1 + + + + + + + + + + + + + + + + + + 22 + + + + + + +
+ + Espoo + + + + + Dec 14 + - + Dec 16, 2017 + + + + + + + + 40 + + + + + + + + + + + + + + + + + + + + 40 + + + + + + +
+ + Linköping + + + + + Nov 7 + - + Nov 9, 2017 + + + + 21 + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + 22 + + + + + + +
+ + Aarhus + + + + + Oct 24 + - + Oct 26, 2017 + + + + 3 + + + + + + + + + + 24 + + + + + + + + + + + + + + + + + + 27 + + + + + + +
+ + Tromsø + + + + + Jun 19 + - + Jun 21, 2017 + + + + 1 + + + + + + 21 + + + + + + + + + + + + + + + + + + 1 + + + + + + 23 + + + + + + +
+ + Copenhagen + + + + + May 9 + - + May 11, 2017 + + + + 3 + + + + + + + + + + 19 + + + + + + + + + + 1 + + + + + + + + + + + + 23 + + + + + + +
+ + Stockholm + + + + + Feb 20 + - + Feb 22, 2017 + + + + 34 + + + + + + + + + + + + + + + + + + + + + + + + 34 + + + + + + +
+ + Espoo + + + + + Dec 14 + - + Dec 16, 2016 + + + + + + + + 25 + + + + + + + + + + + + + + + + + + + + 25 + + + + + + +
+ Total + + 33 + + 420 + + 372 + + 476 + + 111 + + 25 + + 23 + + 149 + + 160 + + 1736 +
+ + +

Instructor training events

+ + +

+ Number of participants/registrants by country of affiliation. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SwedenNorwayFinlandDenmarkEstoniaIcelandNetherlandsOtherTotalTwitch viewersZoom
+ + Online (with FocusCoE) + + + + + Nov 2 + - + Nov 9, 2020 + + + + + + + + + + + + + + + + + + + + 14 + + + + + + 14 + + + + + + +
+ + Online (with TU Delft) + + + + + Jun 24 + - + Jun 25, 2020 + + + + + + 1 + + + + + + 1 + + + + + + + + + + + + 21 + + + + + + + + + + + + 23 + + + + + + +
+ + Stockholm + + + + + Nov 4 + - + Nov 5, 2019 + + + + 15 + + + + + + 8 + + + + + + 2 + + + + + + 2 + + + + + + 2 + + + + + + + + + + + + 1 + + + + + + 30 + + + + + + +
+ Total + + 3 + + 15 + + 9 + + 3 + + 2 + + 2 + + 0 + + 21 + + 15 + + 67 +
+ + +

Shorter workshops and other events

+ + +

+ Number of participants/registrants by country of affiliation. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SwedenNorwayFinlandDenmarkEstoniaIcelandNetherlandsOtherTotalTwitch viewersZoom
+ + CarpentryCon 2022: Online teaching strategies from CodeRefinery + + + + + Aug 3, 2022 + + + + + + + + + + + + + + + + + + + + 15 + + + + + + 15 + + + + + + +
+ + Community teaching mini-workshop + + + + + Jun 21, 2022 + + + + 5 + + + + + + 7 + + + + + + 5 + + + + + + 2 + + + + + + + + + + + + + + 3 + + + + + + 22 + + + + + + +
+ + Git workshop with Compex Systems Modelling group at UiT + + + + + Feb 16 + - + Feb 23, 2022 + + + + + + 19 + + + + + + + + + + + + + + + + + + + + + + 19 + + + + + + +
+ + Python for Scientific Computing + + + + + Oct 25 + - + Oct 28, 2021 + + + + + + + + + + + + + + + + + + + + + + + +
+ + CodeRefinery workshop with focus on Git and GitLab for Metacenter + + + + + Mar 25 + - + Apr 8, 2021 + + + + + + 15 + + + + + + + + + + + + + + + + + + + + + + 15 + + + + + + +
+ + Online CodeRefinery Hackathon on Software Testing + + + + + Mar 17 + - + Mar 24, 2021 + + + + 16 + + + + + + 6 + + + + + + 4 + + + + + + 3 + + + + + + + + + + + + + + 4 + + + + + + 33 + + + + + + +
+ + Online CodeRefinery Workshop on Software Testing + + + + + Mar 17, 2021 + + + + 31 + + + + + + 14 + + + + + + 7 + + + + + + 5 + + + + + + + + + + 2 + + + + + + + + 10 + + + + + + 69 + + + + + + +
+ + Introduction to Shell, Computing resources for researchers, and HPC Kickstart (Aalto University and University of Oslo) (online) + + + + + Jan 29, 2021 + + + + + + 59 + + + + + + 71 + + + + + + + + + + + + + + + + + + + + 130 + + + + + + +
+ + Introduction to Conda for (Data) Scientists (online) + + + + + Jan 8, 2021 + + + + 1 + + + + + + 39 + + + + + + 5 + + + + + + + + + + + + 2 + + + + + + + + 1 + + + + + + 48 + + + + + + +
+ + Collaborative version control with Git (online) + + + + + Dec 10 + - + Dec 11, 2020 + + + + + + 15 + + + + + + + + + + + + + + + + + + + + + + 15 + + + + + + +
+ + Version control (Karlstad/online) + + + + + Sep 22 + - + Sep 23, 2020 + + + + 11 + + + + + + + + + + + + + + + + + + + + 1 + + + + + + 12 + + + + + + +
+ + Python for Scientific Computing (online) + + + + + Sep 14 + - + Sep 23, 2020 + + + + 3 + + + + + + 24 + + + + + + 41 + + + + + + + + + + + + + + + + + + + + 68 + + + + + + +
+ + GitHub without command line (Tampere/online) + + + + + Aug 13, 2020 + + + + + + + + 16 + + + + + + + + + + + + + + + + + + + + 16 + + + + + + +
+ + Workshop for those familiar with Git (online) + + + + + May 18 + - + May 20, 2020 + + + + 20 + + + + + + 2 + + + + + + 1 + + + + + + + + + + + + + + + + 4 + + + + + + 27 + + + + + + +
+ + Collaborative Git (online) + + + + + May 6, 2020 + + + + 25 + + + + + + 5 + + + + + + 3 + + + + + + 4 + + + + + + + + + + + + + + + + + + 37 + + + + + + +
+ + GitHub without command line (online) + + + + + Apr 15 + - + Apr 22, 2020 + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + + 10 + + + + + + +
+ + Introduction to Git (online) + + + + + Apr 7 + - + Apr 8, 2020 + + + + 19 + + + + + + + + 1 + + + + + + + + + + + + + + + + 2 + + + + + + 22 + + + + + + +
+ + Best Software Practices for the Norwegian Earth System Model (Oslo/Bergen/Online) + + + + + Feb 5, 2020 + + + + + + 30 + + + + + + + + + + + + + + + + + + + + + + 30 + + + + + + +
+ + Social coding and open software (Oslo) + + + + + Jan 9, 2020 + + + + + + 21 + + + + + + + + + + + + + + + + + + + + + + 21 + + + + + + +
+ + Hackathon (Stockholm) + + + + + Nov 6 + - + Nov 7, 2019 + + + + 4 + + + + + + 8 + + + + + + 3 + + + + + + 1 + + + + + + 1 + + + + + + + + + + + + 1 + + + + + + 18 + + + + + + +
+ + Reproducibility workshop (Stockholm) + + + + + Sep 9 + - + Sep 12, 2019 + + + + 12 + + + + + + + + + + + + + + + + + + + + + + + + 12 + + + + + + +
+ + Python for Dynamics and Evolution of Earth and Planets (Oslo) + + + + + Apr 1 + - + Apr 5, 2019 + + + + + + 12 + + + + + + + + + + + + + + + + + + + + + + 12 + + + + + + +
+ + Mixed Arts with CodeRefinery & Software Carpentry (Copenhagen) + + + + + Mar 5, 2019 + + + + + + + + + + 40 + + + + + + + + + + + + + + + + + + 40 + + + + + + +
+ + Git in practice (Oslo) + + + + + Feb 27, 2019 + + + + + + 18 + + + + + + + + + + + + + + + + + + + + + + 18 + + + + + + +
+ + Git workshop (Umeå) + + + + + Oct 16, 2017 + + + + 21 + + + + + + + + + + + + + + + + + + + + + + + + 21 + + + + + + +
+ + Workshop: Interfacing Fortran, C, C++, and Python (Manchester) + + + + + Sep 8, 2017 + + + + + + + + + + + + + + + + + + + + 15 + + + + + + 15 + + + + + + +
+ + Workshop: Mixed Martial Arts with CodeRefinery (Umeå) + + + + + May 29, 2017 + + + + + + + + + + + + + + + + + + + + 15 + + + + + + 15 + + + + + + +
+ + CodeRefinery get-together (Stockholm) + + + + + May 19, 2017 + + + + 15 + + + + + + + + + + + + + + + + + + + + + + + + 15 + + + + + + +
+ + CodeRefinery seminar (Oslo) + + + + + Apr 6, 2017 + + + + + + 15 + + + + + + + + + + + + + + + + + + + + + + 15 + + + + + + +
+ Total + + 29 + + 183 + + 319 + + 157 + + 55 + + 1 + + 0 + + 4 + + 71 + + 790 +
+ + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/atom.xml b/branch/rkdarst--registration/atom.xml new file mode 100644 index 000000000..e55987431 --- /dev/null +++ b/branch/rkdarst--registration/atom.xml @@ -0,0 +1,3688 @@ + + + CodeRefinery + CodeRefinery acts as a hub for FAIR (Findable, Accessible, Interoperable, and Reusable) software practices. + + + Zola + 2022-12-05T00:00:00+00:00 + https://coderefinery.org/atom.xml + + Registration and learner management + 2022-12-05T00:00:00+00:00 + 2022-12-05T00:00:00+00:00 + + https://coderefinery.org/blog/2022/12/05/registration/ + <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>Registration and managing learners can be hard when there are hundreds +of them, but if you plan out a course well, it's manageable.</p> +<p>In a small course, you register and people come, and everything else +gets figured out from there. When you have more than a hundred people +coming, perhaps with pre-made <a href="TODO:LINK">teams</a>, +registration can be much, much harder. Luckily, if +you plan the course considering that registration will be a major +task, it can work out OK.</p> +<h2 id="basic-registration-strategies">Basic registration strategies</h2> +<p><strong>Basic registration</strong> would be easy: you let people sign up, they can +get emails. Since we +<a href="https://coderefinery.org/blog/2022/11/14/livestreaming-courses/">livestream</a>, people can +even attend without registering, which we think is important (providing +personal data is not necessary to attend - this is by design). +Registering allows someone to receive emails, and it's relatively easy +to send different emails to different groups if desired (for example, +those from our university get information on our local +online/in-person exercise sessions).</p> +<p>At Aalto University, this is what we have done for most online +courses, and it works well.</p> +<h2 id="registration-including-teams">Registration including teams</h2> +<p>If we want to provide <a href="TODO:LINK">teams</a> as a service, things get more +involved. The main idea of registering including teams is that we want +to make them pre-arranged and the constant day-after-day. We also want to +provide an exercise leader for each team (again the same one each day). +The in-person equivalent to that is &quot;sit at a table with at group, that group +is your team&quot;. Our online version is much harder than this, since we +need to pre-plan a lot more. We <em>could</em> emulate this by randomly assigning +Zoom breakout rooms on day 1, and then ask people to join the same one +each day. But, we think that part of the benefit is assigning similar +teams (if you know someone, you are with them) and having it clear +that rooms <em>will</em> stay the same day-after-day.</p> +<p>So, to do this teams online, our registration system needs to:</p> +<ul> +<li>Accept the normal registration</li> +<li>Know a little bit about people to assign them to suitable teams (if +desired).</li> +<li>Provide a way for people to indicate pre-made teams.</li> +<li>Provide a way for us to see the information above easily and assign +the teams ...</li> +<li>... and then send everyone a customized email with their team's room +number</li> +<li>And be able to quickly update this information based on last-minute +changes, send people new info, and not get overwhelmed with this +job.</li> +</ul> +<p>This, especially the last one, turns out to be exceptionally hard. We +are working on ways to make this better:</p> +<ul> +<li>point1</li> +<li>point2</li> +<li>point3</li> +</ul> +<h2 id="distributed-registration">Distributed registration</h2> +<p>The livestream and <a href="https://coderefinery.org/blog/2022/11/07/reverse-hybrid/">reverse +hybrid</a> approaches allow another +option: <strong>distributed registration</strong>. With this idea, we don't need a +central registration (or if we do, it can be only for general +information), and we let each local partner run a registration that +includes the teams - and let them deal with that locally in a smaller +and more manageable form.</p> +<h2 id="summary">Summary</h2> +<p>We did a lot of great things with <a href="TODO:LINK">teams</a>, but it was a lot +of work back then, and is still a lot of work now. Anyone running a +large course (that goes beyond &quot;infodump to an audience&quot;) should +carefully consider how to make this manageable.</p> + + + + Livestreaming courses + 2022-11-14T00:00:00+00:00 + 2022-11-14T00:00:00+00:00 + + 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 &quot;someone might do something bad if they +could join&quot;[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 &quot;meeting&quot; +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 (&quot;HackMD&quot;) 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 &quot;anyone who wasn't able to +register can watch the stream&quot;. We also got a lot of experience with +streaming in our project <a href="https://researchsoftwarehour.github.io">Research Software +Hour</a>.</p> +<p>The fully &quot;proper&quot; livestreamed course was 2021 February, our <a 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 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 &quot;top&quot; 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 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 href="https://coderefinery.github.io/manuals/livestream-teaching/">Teaching via +livestreaming</a> +in the community-teaching guide.</li> +<li><a href="https://coderefinery.github.io/manuals/coderefinery-mooc/">CodeRefinery +MOOC</a>, +which is mainly about livestreaming.</li> +</ul> +<hr /> +<p>[1] Incidentally, since 2020 we have had a daily online meeting, our +Scientific Computing Garage help session, with the Zoom link online, +and have never had any problems. My hypothesis is that if you don't +have an exact data listed along with the Zoom information, it's not +found by those that want to troll.</p> + + + + Lessons learned from the Sep 2022 online workshop + 2022-11-08T00:00:00+00:00 + 2022-11-08T00:00:00+00:00 + + https://coderefinery.org/blog/2022/11/08/lessons-learned-Sep-2022/ + <p>September 20-22 and 27-29, 2022, we held again our <a 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 href="https://coderefinery.org/blog/2020/04/14/first-online-workshop/">our first online workshop +2020</a> and the +<a 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 &quot;wrong&quot; 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 &quot;are not needed&quot;</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 href="https://github.com/coderefinery/coderefinery.org/issues/697">here</a>.</li> +</ul> +<h3 id="collaborative-notes">Collaborative notes</h3> +<ul> +<li>HackMD goes to Twitch chat anyway so maybe no point in keeping it as a secret. +<ul> +<li>Add HackMD link to the workshop page and use the workshop page as main entry point so that participants don't have to hunt for links in email inboxes.</li> +</ul> +</li> +<li>HackMD started to be slow even if it should not with ~100 participants. +<ul> +<li>Numbering questions adds confusion -&gt; keep bullets and change to numbers in archive if needed. But this problem was only there because the document was sluggish at times.</li> +<li>Note for future: when pre-seeding the question numbers, leave a line between them. Then, when someone pushes enter after a number to add a new line, it doesn't increment the future numbers. Just saw this, this solves a big problem with numbering.</li> +</ul> +</li> +<li>Later in the workshop we deployed our own HedgeDoc instance, which worked quite well.</li> +</ul> +<h3 id="installation-and-tools">Installation and tools</h3> +<ul> +<li>Many did not install software beforehand. Either we haven't communicated clearly enough that this is needed or the install sessions were not recognized and not taken up. Very few people showed up at the install help sessions.</li> +</ul> +<h3 id="lesson-content">Lesson content</h3> +<ul> +<li>More big picture cohesion between exercises: It has been suggested to have a better connection between lessons and work on one repository that is continuously improved.</li> +<li>Provide snapshots and starting points for those who have not done the previous exercises.</li> +<li>Topics in Day 4 (at least) would deserve a longer lesson.</li> +<li>We can try to communicate better that after the Git lessons it can be OK and also useful to join only for the lessons of interest (to motivate people to pop in also for 1 or 2 lessons).</li> +<li>Especially in in-person: the Twitch sessions felt long (since there was so little interaction in the in-person rooms).</li> +</ul> +<h3 id="communication-with-participants">Communication with participants</h3> +<ul> +<li>Add all sessions to the <a href="https://coderefinery.org/calendars/">CodeRefinery calendar</a>.</li> +<li>Link all relevant repositories in one place (i.e. this calendar and anything that needs attention near a workshop). Make sure those repositories have good instructions in READMEs.</li> +</ul> + + + + CodeRefinery Mastodon account + 2022-11-08T00:00:00+00:00 + 2022-11-08T00:00:00+00:00 + + 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 href="https://fosstodon.org/@coderefinery">@coderefinery@fosstodon.org</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 href="https://mastodon.help">https://mastodon.help</a> gives a basic introduction of the how and +why. <a 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>@username@server.name</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>@coderefinery@fosstodon.org</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 href="https://fosstodon.org">https://fosstodon.org</a> (FOSS = &quot;free and open source +software&quot;) to focus on the software and technology side of things.</li> +<li>For others in academia or research, +<a 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 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 (&quot;reblog&quot;) 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>&quot;Fediverse&quot; (&quot;federated universe&quot;) is the term used to refer to the +entire network of Mastodon servers (and more) that can communicate.</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 href="https://fediscience.org/server-list.html">Academia/research server list</a></li> +<li><a href="https://mastodon.help">https://mastodon.help</a></li> +<li><a href="https://fedi.tips/">https://fedi.tips/</a></li> +<li><a href="https://www.pwnallthethings.com/p/twitter-was-special-but-its-time">About engagement farming</a></li> +</ul> + + + + Video publishing supports more learning styles + 2022-11-08T00:00:00+00:00 + 2022-11-08T00:00:00+00:00 + + 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 &quot;don't +say anything if you don't want to be recorded&quot; isn't good enough, +either - I don't want to push &quot;publish&quot; 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 &quot;good enough&quot; 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 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 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 href="https://youtu.be/thvMNTBJg2Y">video demonstration of ffmpeg-editlist</a></li> +<li><a href="https://coderefinery.github.io/manuals/video-editor/">Video editor</a> +role description in the CodeRefinery manuals</li> +<li><a href="https://github.com/coderefinery/ffmpeg-editlist">ffmpeg-editlist</a></li> +<li><a 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 &quot;it won't be interesting for others to watch later&quot;. +This post also shows how that's the wrong perspective: the videos +aren't only for random people later, but people in the course already.</p> + + + + Reverse hybrid teaching + 2022-11-07T00:00:00+00:00 + 2022-11-07T00:00:00+00:00 + + 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 &quot;reverse hybrid&quot; 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 href="https://coderefinery.github.io/manuals/co-instructors/">CodeRefinery manuals on +co-instructors</a></li> +<li><a href="https://coderefinery.github.io/manuals/hackmd-mechanics/">CodeRefinery manuals on how we do parallel chat, &quot;HackMD&quot;</a></li> +<li>Series index: <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of Teaching</a></li> +</ul> + + + + Co-teaching and scaling up + 2022-10-31T00:00:00+00:00 + 2022-10-31T00:00:00+00:00 + + 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 &quot;voice of the +audience&quot;. 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 &quot;asking questions a +learner might have&quot; 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 +&quot;500-person lecture&quot; problems that I had when I was in university. We +now use co-teaching for anything that needs to seem &quot;professional&quot;, +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 href="https://coderefinery.github.io/manuals/team-teaching/">Co-teaching in CodeRefinery +manuals</a></li> +<li><a 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> + + + + + 2022-10-31T00:00:00+00:00 + 2022-10-31T00:00:00+00:00 + + https://coderefinery.org/workshops/upcoming/ + <h1 id="upcoming-workshops-and-events">Upcoming workshops and events</h1> +<h2 id="workshop-dates-for-2022">Workshop dates for 2022</h2> +<!-- If you edit this section, also update the date on top of this page. This +is important for RSS feed. --> +<ul> +<li>Spring 2023: Tue-Thu, March 21-23 and March 28-30 (6 half-day, online)</li> +<li>Autumn 2023: Tue-Thu, September 19-21 and 26-28 (6 half-day, online)</li> +</ul> +<h2 id="past-workshops-and-events">Past workshops and events</h2> +<p>On <a href="/workshops/past/">this page</a> we list all our past workshops and events.</p> +<h2 id="how-to-be-informed-about-future-events">How to be informed about future events</h2> +<p>We don't want you to miss a workshop or event. The best +way to stay informed is to join <a href="https://tinyletter.com/coderefinery">our newsletter</a> +(we are working on reviving it and will post updates there soon).</p> +<p>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> +<div class="uk-alert-primary" uk-alert> +<a class="uk-alert-close" uk-close></a> +<p>Partners are invited to <a 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> +</div> +<ul> +<li><a href="https://scicomp.aalto.fi/training/scip/python-for-scicomp-2022/">Python for Scientific Computing, November 22-25, +2022</a></li> +</ul> +<h2 id="privacy-policy">Privacy policy</h2> +<p>Our <a href="/privacy-policy/">privacy policy</a> +documents what registration data we store, where, and why.</p> + + + + Parallel chat ("HackMD") and scaling teaching + 2022-10-24T00:00:00+00:00 + 2022-10-24T00:00:00+00:00 + + 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 &quot;please +turn on your cameras so I can see how it's going&quot; - 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 &quot;parallel chat&quot;, or as we typically call it &quot;HackMD&quot; +after the service we started using, <a 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 &quot;one right answer&quot; 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 &quot;+&quot; or &quot;-&quot; or &quot;o&quot; added after the options.</li> +</ul> +<p>Just look at the number of questions in our old courses, <a href="https://coderefinery.github.io/2022-03-22-workshop/questions/day1/">one 3.5-hour +day of our May 2022 +workshop</a> - +and this is day 1, when people didn't yet know how it worked.</p> +<p>But there are some disadvantages:</p> +<ul> +<li>An absolute flood of information, which <em>will</em> be distracting to +anyone trying to follow it. We warn people at the start to be +careful about this, and it's mostly OK. It's anyway archived for +follow-up later at one's convenience.</li> +<li>Another window for people follow. Like above, we warn people to +focus on the learning and parallel chat only when there is time.</li> +<li>It's different, so needs some explanation (but we've seen people +catch on very quickly once they see it).</li> +</ul> +<p>So, just how does this work? Well, we create the text document with +some standard notes at the top and bottom. It's made freely editable +without any login, shared to everyone in the workshop. All learners +are told to ask every new question in +list item at the bottom of the document - <em>always</em> the bottom, since +that's the only thing we follow. The course team has this open and +answers questions, focusing their attention at the bottom. Some other +notes:</p> +<ul> +<li>Instructors should discuss it via voice often, mentioning when the +look at it and when questions come from it. Let the audience know +it's actually useful.</li> +<li>Screenshare it during the Q&amp;A parts and breaks (you need a tool that +won't show the names of anyone who might have happened to be logged +in - HackMD does this properly). It provides something to look at +and reminds people that it exists and has lots of answers.</li> +<li>We often use it as an icebreaker as a demo. Maybe not everyone +understands it.</li> +<li>It can also be used for lightweight polls: learners can <code>+1</code> or add +a character to a line to make simple bar graphs.</li> +<li>Like we said above, it's not a perfect tool, but easy to use and fun.</li> +<li>A &quot;HackMD manager&quot; 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 href="https://coderefinery.github.io/manuals/hackmd-mechanics/">HackMD mechanics in CodeRefinery +manuals</a></li> +<li><a href="https://coderefinery.github.io/manuals/hackmd-helper/">HackMD manager role +description</a></li> +<li>Series index: <a href="https://coderefinery.org/blog/2022/10/17/future-of-teaching/">Future of Teaching</a></li> +</ul> + + + + Python for Scientific Computing open for registration and collaborators + 2022-10-21T00:00:00+00:00 + 2022-10-21T00:00:00+00:00 + + https://coderefinery.org/blog/2022/10/21/python-for-scicomp/ + <p>Our next workshop, <a 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 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 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 href="https://coderefinery.github.io/manuals/chat/">CodeRefinery</a> chat and +introduce yourself.</p> + + + + CodeRefinery teaching strategies and the future of teaching + 2022-10-17T00:00:00+00:00 + 2022-10-17T00:00:00+00:00 + + 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 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 &quot;return to +normal&quot;, 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 &quot;reverse hybrid&quot; 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 &quot;start page&quot; of the series):</p> +<ul> +<li><a href="https://coderefinery.org/blog/2022/10/24/parallel-chat/">Random access chat (&quot;HackMD&quot;) 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</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><a href="https://coderefinery.org/blog/2022/12/05/registration/">Registration and learner management</a></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>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 href="https://coderefinery.github.io/manuals/">CodeRefinery manuals</a></li> +<li><a href="https://coderefinery.github.io/community-teaching/">CodeRefinery community teaching +training</a></li> +</ul> + + + + Outcomes from online hackathon about measuring the impact of CodeRefinery workshops + 2022-05-18T00:00:00+00:00 + 2022-05-18T00:00:00+00:00 + + 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 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 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 href="https://github.com/coderefinery/pre-workshop-survey">pre-workshop +survey</a> data which was +part of the registration process and <a 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 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 &quot;pays us back&quot;.</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 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 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 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 href="https://github.com/coderefinery/post-workshop-survey">Post-workshop survey</a></h3> +<ul> +<li>What to ask straight after the workshop and what to ask later? Separate +survey?</li> +<li>Could be integrated to the pre-workshop survey because it can be updated</li> +<li>Update questions: +<ul> +<li>we could add the question: what would you like to learn more?</li> +<li>Maybe condense a bit (less text and repetition)</li> +<li>Remove suggestive questions if any</li> +<li>add academic field</li> +</ul> +</li> +<li>What data to request from groups / partners? +<ul> +<li>Number of participants</li> +<li>How did they like the event</li> +</ul> +</li> +</ul> + + + + Our plans to improve our workshop registration process + 2022-05-04T00:00:00+00:00 + 2022-05-04T00:00:00+00:00 + + 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 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 &quot;can I have the +Q&amp;A&quot; and then I can say &quot;not right not but if you register you will get it in +an email tonight so you have it tomorrow&quot;</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 &quot;survived&quot; 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>&quot;affiliation or university&quot;: have a list of institutions + &quot;other&quot; * 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>&quot;do you want to participate in Stockholm? click here&quot; -&gt; another form</li> +<li>&quot;in Aalto&quot; -&gt; another form</li> +<li>none of the above -&gt; central form +<ul> +<li>group registration (exercise lead? or anybody as proxy?)</li> +<li>register as exercise lead and want to help out a &quot;random&quot; group</li> +<li>want to be part of a group -&gt; click here but we can't guarantee a helper, especially if you register late</li> +<li>want to only watch alone</li> +</ul> +</li> +<li>also offer options to get informed for those unsure/undecided +<ul> +<li>yes</li> +<li>&quot;interested&quot; </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 &quot;general&quot; 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>&quot;helpers, rename yourself and join a room that does not have helpers yet&quot;</li> +<li>&quot;learners, if you are in a room that is too empty or too full, join another one&quot; </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 href="https://forms.gle/xNSmW7DJ43jV7NhD9">example +form</a> and collected comments:</p> +<ul> +<li>Problems: &quot;team organized by us&quot; is not separated from &quot;self-organized team&quot;</li> +<li>The &quot;probably not but send info&quot; 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>&quot;observer&quot;: let them decide whether they want emails or not</li> +<li>&quot;how do you plan on attending&quot; +<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 href="https://github.com/coderefinery/template-workshop-webpage">workshop template</a></li> +</ul> + + + + Lessons learned from the May 2021 online workshop + 2021-11-25T00:00:00+00:00 + 2021-11-25T00:00:00+00:00 + + 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 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 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 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 &quot;voice of audience&quot;.</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 &quot;could somebody do X?&quot; 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 &quot;real&quot; video is available or wouldn't make sense, one workaround might be to have someone show a &quot;video&quot; (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 &quot;real&quot; video is available or wouldn't make sense, one workaround might be to have someone show a &quot;video&quot; (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 &quot;don't capture mouse cursor&quot; 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 &quot;And now we are done with the intro, and will go to our first lesson, Jupyter&quot;. It makes cutting a bit easier and also helps learners to re-orient.</li> +<li>The zoom default &quot;focus on the current speaker&quot; 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 &quot;plain&quot; 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 &quot;beginner&quot; label for software. Maybe it would make sense to host a &quot;Research Software Hour&quot; 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 &quot;I'm about to take the screenshare&quot; 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 &quot;none&quot; 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 &quot;team registrations&quot;, as long they include an EL, we should send an acceptance ASAP.</li> +<li>Regarding individual learners and ELs: +1) opening sign-up as individual ELs and to set its soft-deadline much earlier than for individual learners, +2) for individual learners, opening registration first as stream viewers only with an option of 'want to join in interactive exercise sessions' yes/no, +3) after the soft-deadline of individual ELs, to those who said 'yes', sending invitations to sign-up for zoom participation in another reg. form, and +4) accept the capacity of #individual ELs x 5 and otherwise put them in waitlist. +However, I actually want to suggest a quite wild idea rather than struggling with the dilemma of no-shows and withdrawal with very very short notice while not being able to accept all sign ups. Instead of coordinating for acceptance and grouping on backside, how about encouraging open&amp;public self-organization of groups? somewhere everyone can access, 'sign up' by writing their name, as a learner or EL, potentially also country, affiliation, background so that it might happen that they will self-organize a team. Once they can make a group of 6-7 people with at least one who can be acting as an EL, then their participation is sort of 'confirmed'. This is different from team registration as this is primarily for those who want to join but cannot make a group will find others to make a group to join in the workshop. +Another thing is that the threshold of ELs could be even lower than some people may think. And I would say being an EL is probably better way to learn about the CodeRefinery lesson materials than joining as an learner. Especially if some people have already made their own team, one of them should be able to act as an EL, or they can even circulate the role among eath other. +And what I learned from the R+Tidyverse workshop until yesterday is that if a learner cannot turn on camera or mic (for any reason), it is almost no worth to join in a breakout room session, as HackMD Q&amp;A will more or less perfectly solve the problem in that case.</li> +</ul> + + + + Towards citable lessons + 2021-11-21T00:00:00+00:00 + 2021-11-21T00:00:00+00:00 + + 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 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 +&quot;cite as&quot; 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 &quot;code&quot; (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 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 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>&quot;creator&quot;: significant contributions</li> +<li>&quot;contributor&quot;/Editor: reviewing/approving contributions</li> +<li>&quot;contributor&quot;/Other: smaller contributions</li> +</ul> +</li> +<li>On Zenodo we start with &quot;creator&quot; (author) and &quot;contributor&quot; (other). +<ul> +<li>See also categories that Zenodo understands: <a href="https://developers.zenodo.org/#representation">https://developers.zenodo.org/#representation</a> (search for &quot;creators&quot; and &quot;contributors&quot;)</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 &quot;release&quot; 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 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 data-lang="json" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-json "><code class="language-json" data-lang="json"><span> </span><span style="color:#d07711;">&quot;creators&quot;</span><span>: [ +</span><span> { +</span><span> </span><span style="color:#d07711;">&quot;orcid&quot;</span><span>: </span><span style="color:#d07711;">&quot;0000-0002-1825-0097&quot;</span><span>, +</span><span> </span><span style="color:#d07711;">&quot;affiliation&quot;</span><span>: </span><span style="color:#d07711;">&quot;Feline research institute&quot;</span><span>, +</span><span> </span><span style="color:#d07711;">&quot;name&quot;</span><span>: </span><span style="color:#d07711;">&quot;Field, Gar&quot; +</span><span> }, +</span><span> { +</span><span> </span><span style="color:#d07711;">&quot;orcid&quot;</span><span>: </span><span style="color:#d07711;">&quot;0000-0002-1825-0097&quot;</span><span>, +</span><span> </span><span style="color:#d07711;">&quot;affiliation&quot;</span><span>: </span><span style="color:#d07711;">&quot;Feline research institute&quot;</span><span>, +</span><span> </span><span style="color:#d07711;">&quot;name&quot;</span><span>: </span><span style="color:#d07711;">&quot;Cat, Felix&quot; +</span><span> } +</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 href="https://about.zenodo.org/">https://about.zenodo.org/</a></li> +<li>Zenodo terms of use <a href="https://about.zenodo.org/terms/">https://about.zenodo.org/terms/</a></li> +<li>Zenodo policies <a href="https://about.zenodo.org/policies/">https://about.zenodo.org/policies/</a></li> +<li>Zenodo FAQ <a href="https://help.zenodo.org/">https://help.zenodo.org/</a></li> +<li>Zenodo REST API <a href="https://developers.zenodo.org/">https://developers.zenodo.org/</a></li> +<li>Zenodo .zenodo.json and GitHub <a href="https://developers.zenodo.org/#github">https://developers.zenodo.org/#github</a></li> +<li>GitHub-Zenodo tutorial <a href="https://guides.github.com/activities/citable-code/">https://guides.github.com/activities/citable-code/</a></li> +<li>The <a href="https://allcontributors.org/">https://allcontributors.org/</a> specification and GitHub bot</li> +<li>The CITATION.cff format <a href="https://citation-file-format.github.io/">https://citation-file-format.github.io/</a></li> +<li>The CITATION.cff format keywords <a 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 href="https://spdx.dev/ids/">https://spdx.dev/ids/</a></li> +</ul> + + + + Lessons learned from phase 2 of the project + 2021-11-20T00:00:00+00:00 + 2021-11-20T00:00:00+00:00 + + 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 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 &quot;actual&quot; 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>&quot;Webinar (stream)-by default&quot; with an option for joining in zoom-meeting room for extra help may work better (ref. <a href="https://scicomp.aalto.fi/training/scip/python-for-scicomp/">Python for SciComp 2021</a>)?</li> +<li>Post-workshop Q&amp;A session time/day would be useful? </li> +<li>We have considered for the future to offer optional exercise walk-through sessions. These could be +interesting not only for learners but recording of these sessions could also help future +exercise leads.</li> +</ul> +</li> +</ul> +<h4 id="communication-with-participants">Communication with participants</h4> +<ul> +<li>Indico's email function worked well to send information about the workshop to participants/signers.</li> +<li>We experienced few cases of typo in email address, thus we could not reach registrants.</li> +<li>Online collaborative notebook (HackMD and similar) worked well for Q&amp;A during the lectures. </li> +</ul> +<h4 id="certificates">Certificates</h4> +<ul> +<li>Should CR issue any certificate at all? Certificates became participation certificates and possibly we should delegate certification to participating organizations.</li> +<li><a href="https://www.tudelft.nl/en/library/research-data-management/r/training-events/training-for-researchers/code-refinery-workshop">&quot;TU Delft PhD candidates can obtain 2 GS credits (Research skills) when attending and actively participating in the workshop (complete assistance)&quot;</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>&quot;software installation and setup&quot; +<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 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 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 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 href="https://coderefinery.github.io/2021-01-08-coderefinery-online/">Introduction to Conda for (Data) Scientists</a> as a part of <a 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 href="https://carpentries.topicbox.com/groups/local-nordic">Nordic region mailing list at topic-box (managed by the Carpentries)</a>, </li> +<li><a href="https://2020.carpentrycon.org/schedule/#session-48">&quot;Nordic and Baltic Get Together&quot; session at CarpentryCon 2020 @home</a>, and</li> +<li><a 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 &quot;Seminar for bibliotekenes nettverk for ph.d.-støtte&quot; (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 &quot;safe&quot; 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 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 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 &quot;Standup&quot;-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 +&quot;levels&quot; as well as types (e.g. lesson contributions or exercise leads) of contributions? +Ref. <a 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 &quot;burn-out&quot; 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 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 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 &quot;Support line/ request tracker&quot;).</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>&quot;Rights to work results&quot; vs. Open Science +<ul> +<li>Ref: a page about <a href="https://www.uio.no/english/for-employees/employment/work-results/rights-to-work-results.html">&quot;Rights to work results&quot; at University of Oslo</a></li> +<li>General clarification is needed here so that everyone won't be in trouble later.</li> +<li>It should be also better explained and clarified in terms of the choice of platform for collaborative works in this regard so that staff/volunteers etc. can feel safe in using the chosen (cloud-based) platforms, including GitHub, YouTube, Twitch, HackMD, Tinyletter etc.</li> +</ul> +</li> +<li>We also lacked support in questions about how to start an own organization/ spin-off.</li> +</ul> + + + + Bi-weekly Community Calls started + 2021-09-01T00:00:00+00:00 + 2021-09-01T00:00:00+00:00 + + 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 &quot;order&quot; workshops</li> +</ul> +<p>For more details of each call, please visit <a 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 &quot;CodeRefinery way forward&quot;, where we will be discussing the community organization model. For the connection details and agenda, please follow <a 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 href="https://coderefinery.zulipchat.com/#">Zulip</a> :)</p> + + + + Community discussion in Nordic and Baltic countries + 2020-11-13T00:00:00+00:00 + 2020-11-13T00:00:00+00:00 + + https://coderefinery.org/blog/2020/11/13/carpentry-community-discussion-nordic/ + <p>This blogpost is based on the notes made on <a 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 &quot;never touch learners keyboard&quot;. 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 href="https://nordic-rse.org/">Nordic Research Software Engineer initiative</a> and its <a 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 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 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 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) &quot;Taking over learner's keyboard on an in-person workshop should never happen&quot;, 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 &quot;Let's build an augmented reality web app!&quot; based on a full-day workshop given at the <a href="https://www.ub.uio.no/english/courses-events/events/all-libraries/2020/research-bazaar-2020.html">research bazaar at the University of Oslo</a> earlier this year: +<ul> +<li>goal: making 3D holiday greeting card using HTML and JavaScript: https://arworkshop.teebusch.repl.co/card1.html</li> +<li>The lesson material is all there: https://repl.it/@Teebusch/arworkshop</li> +</ul> +</li> +<li>(Joakim) Suggestion of a repository of Carpentries Nordic/Baltic community members with specialities and skills</li> +<li>(Annika) Google Sheets for this?</li> +<li>(Anne) EOSC Nordic claims to be a knowledge-hub</li> +<li>(Radovan) Is also working on mapping.</li> +</ul> +<h3 id="announcements">Announcements</h3> +<ul> +<li>Nordic RSE (research software engineers) online get-together (Nov 30 - Dec 2): https://nordic-rse.org/events/2020-online-get-together/ (everybody welcome to attend and submit proposals or ideas)</li> +<li>Local-nordic Carpentries mailing list: https://carpentries.topicbox.com/groups/local-nordic</li> +<li>CodeRefinery workshop in November 17-19, 24-26 (registration closed): https://coderefinery.github.io/2020-11-17-online/ (looking for helpers: great way to learn)</li> +</ul> +<h2 id="participant-list">Participant list</h2> +<ol> +<li>Annika Rockenberger (host, Norway, Oslo)</li> +<li>Naoe Tatara (co-host, Norway, Oslo)</li> +<li>Kerstin Lenk (Finland, Tampere)</li> +<li>Lars Kjær (Denmark, Copenhagen)</li> +<li>Tobias Busch (Norway, Oslo)</li> +<li>Lina Andrén (Sweden, Stockholm)</li> +<li>Mohamed Abdelhalim (Norway, Oslo)</li> +<li>Annajiat Alim Rasel (Bangladesh, Dhaka)</li> +<li>Joakim Philipson (Sweden, Stockholm)</li> +<li>Thomas Arildsen (Denmark, Aarborg)</li> +<li>Radovan Bast(Norway, Tromsø)</li> +<li>Samantha Wittke (Finland, Helsinki)</li> +<li>Olav Vahtras (Sweden, Stockholm)</li> +<li>Anne Fouilloux(Norway, Oslo)</li> +<li>Richard Darst (Finland, Helsinki)</li> +</ol> +<p>Thank you for all the contributions!</p> + + + + Making lessons citable and giving credits for contributors + 2020-10-02T00:00:00+00:00 + 2020-10-02T00:00:00+00:00 + + https://coderefinery.org/open-house/credit/ + <p>CodeRefinery is organizing a half day online &quot;open house&quot; 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 href="https://hackmd.io/@coderefinery/2020-10-02-openhouse">shared +document</a>. +Please note that this document will be archived in our <a 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 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 href="https://coderefinery.zulipchat.com">Zulip chat</a> +with possibilities to further discuss via video if necessary.</p> +<p>We conclude the day around 12:00 pm (UTC+1).</p> + + + + git-pr: painless small pull requests + 2020-09-29T00:00:00+00:00 + 2020-09-29T00:00:00+00:00 + + 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 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 href="https://github.com/NordicHPC/git-pr">https://github.com/NordicHPC/git-pr</a> - it is a +single shell script to copy to your path.</p> +<p>It's beta-quality software: it is used by me and a few others all the +time, but there will almost certainly be issues as others start using +it. Send issues and PRs!</p> +<p>It supports both Github and Gitlab, though Gitlab support is less well +tested.</p> +<p>There is a lot of prior art on different pieces here, there isn't much +in git-pr that is completely new - In particular, the GitHub command +line interface has come out since then and has some overlap. You can +see other options in the git-pr README.</p> + + + + Writing newsletter articles and blog posts + 2020-08-24T00:00:00+00:00 + 2020-08-24T00:00:00+00:00 + + https://coderefinery.org/open-house/newsletter/ + <p>CodeRefinery is organizing a one day online &quot;open house&quot; 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 href="https://hackmd.io/@coderefinery/2020-08-24-openhouse">shared +document</a>. +Please note that this document will be archived in our <a 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 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 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 href="https://hackmd.io/@coderefinery/2020-08-24-openhouse">shared +document</a>.</p> + + + + Report from the Mega-Coderefinery workshop + 2020-07-31T00:00:00+00:00 + 2020-07-31T00:00:00+00:00 + + 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 +&quot;High-performance computing (HPC) Kickstart&quot; 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 href="https://coderefinery.github.io/2020-05-25-online/">Webpage</a></p> +<h2 id="finnish-hpc-kickstart">Finnish HPC Kickstart</h2> +<p><a 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 &quot;required&quot; 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 +&quot;helper introduction meeting&quot;, 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 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>&quot;Require&quot; 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">&quot;Bring your own breakout room&quot;</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 href="https://doi.org/10.1007/s11301-017-0133-3">Graf-Vlachy, L., Buhtz, K. &amp; König, 2018</a>). Encourage people to come with friends or groupmates.</li> +<li>How it worked: +<ul> +<li>This is implemented as a &quot;Team name&quot; 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 &quot;random&quot; 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 &quot;team name&quot; 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 &quot;CR&quot; +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 &quot;Room&quot; 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 href="https://coderefinery.github.io/manuals/helping-and-teaching/">General</a></li> +<li><a 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 &quot;correct&quot; 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 &quot;special expert helpers&quot; (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. &quot;we expect you to finish 1-3, 4-5 are optional. 20 +minutes, ending at xx:45&quot;.</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 &quot;if it's even a little bit slow to you, +then it takes ages for a learner to understand&quot;.</li> +</ul> +<h3 id="recommendations-5">Recommendations</h3> +<ul> +<li>Have lots of &quot;meta-talk&quot; 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 &quot;HackMD master&quot; 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 &quot;questions section&quot; and &quot;lesson section&quot;, 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 &quot;pre-assign breakout rooms&quot; 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 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 (&quot;spotlight video&quot;) 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>&quot;Custom streaming server&quot; seems to be able to broadcast to +anything. In particular, we used <a 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 &quot;Spotlight video&quot; 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. &quot;video not broadcast, voice may be&quot;). It is +much harder to add this later.</li> +</ul> +<h2 id="recording">Recording</h2> +<ul> +<li>Once you do streaming, it is a smaller step to recording and posting +the videos. +<ul> +<li>Who is benefited by the recordings? Perhaps not brand new +learners, but the learners who were in the workshop can review +them again later.</li> +</ul> +</li> +<li>If recordings require post-processing, they will almost never get +done. +<ul> +<li>Plan for one-short recording as much as you can: find a way to +keep learners out of the recording so you can go and directly +publish it with the minimum effort afterwards.</li> +</ul> +</li> +<li>A surprising number of learners have asked for the videos after the +workshop. +<ul> +<li>While the videos may not be as useful to someone learning the +material from scratch, they are probably very useful to an +existing learner who wants to review something they already saw, +teach others, etc.</li> +<li>When we can't provide them quickly, their usefulness is much +reduced.</li> +</ul> +</li> +</ul> +<h3 id="recommendations-8">Recommendations</h3> +<ul> +<li>Clearly announce the recording privacy statement when first +registering.</li> +<li>Try to make the recording as one-shot as possible, with minimal +post-processing needed. Plan for who will do this and when already +before the workshop.</li> +</ul> + + + + CodeRefinery tools in action: NordicHPC + 2020-04-27T00:00:00+00:00 + 2020-04-27T00:00:00+00:00 + + 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 href="https://coderefinery.github.io/git-intro/">git</a> (everything), +<a href="https://coderefinery.github.io/git-collaborative/">pull-request based +workflows</a> +(e.g. sonar, git-pr, slurm2sql), <a href="https://coderefinery.github.io/testing/">automated +testing</a> (e.g. .travis.yml in +sonar, envkernel, nbscript, slurm2sql), <a 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 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 href="https://github.com/NordicHPC/nbscript">nbscrpt</a> is an attempt to +provide the familiar script interface to Jupyter notebooks.</li> +<li><a href="https://github.com/NordicHPC/sonar">sonar</a> and +<a href="https://github.com/NordicHPC/sonar-web">sonar-web</a> provide a way to +watch what is actually running on clusters.</li> +<li><a href="https://github.com/NordicHPC/git-pr">git-pr</a> saves you keystrokes +when making pull requests, though perhaps +<a href="https://cli.github.com/">cli.github.com</a> takes its place.</li> +<li><a 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 href="https://github.com/NordicHPC/envkernel">envkernel</a> is a Jupyter +extension which lets you run your kernels in different environments, +such as Docker, Singularity, and virtual/conda environments more +easily.</li> +</ul> +<p>Do you have a nice tool that needs a home? You know what to do...</p> + + + + Announcing the first Nordic-RSE conference + 2020-04-24T00:00:00+00:00 + 2020-04-24T00:00:00+00:00 + + https://coderefinery.org/blog/2020/04/24/nordic-rse-conference/ + <p>A couple of years ago, <a 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 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 href="https://society-rse.org/">the UK</a>, <a href="http://nl-rse.org/">the +Netherlands</a> and +<a 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 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 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 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 +(nordic-rse-organizers@neic.no) 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 href="https://e-science.se/">Swedish e-Science Research Centre +(SeRC)</a>, the <a href="https://snic.se/">Swedish National Infrastructure +for Computing (SNIC)</a> and the <a 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:nordic-rse-organizers@neic.no">get in +touch</a>.</p> + + + + CodeRefinery workshops moving online + 2020-04-24T00:00:00+00:00 + 2020-04-24T00:00:00+00:00 + + 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 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 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 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 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 &quot;bring their own breakout room&quot; 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 &quot;giving&quot; 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 href="https://coderefinery.org/workshops/upcoming/#notify-me">notify-me +form</a> if you +want to receive an email as soon as registration opens for these +workshoops!</p> + + + + Rebase vs merge + 2020-04-24T00:00:00+00:00 + 2020-04-24T00:00:00+00:00 + + 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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</p> +<p>We can rebase the <code>feature_A</code> branch to the last commit in <code>master</code>:</p> +<pre data-lang="bash" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#5597d6;">git</span><span> checkout feature_A +</span><span style="color:#5597d6;">git</span><span> rebase master +</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:70%&quot;}</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 data-lang="sh" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#5597d6;">git</span><span> checkout master +</span><span style="color:#5597d6;">git</span><span> merge feature_B</span><span style="color:#5597d6;"> --no-ff +</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 data-lang="sh" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#5597d6;">git</span><span> config</span><span style="color:#5597d6;"> --global</span><span> branch.master.mergeoptions</span><span style="color:#5597d6;"> --no-ff +</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</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 data-lang="sh" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#5597d6;">git</span><span> checkout fix_types +</span><span style="color:#5597d6;">git</span><span> rebase master +</span><span style="color:#5597d6;">git</span><span> checkout master +</span><span style="color:#5597d6;">git</span><span> merge fix_typos</span><span style="color:#5597d6;"> --ff-only +</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" />{:class=&quot;img-responsive&quot; style=&quot;max-width:100%&quot;}</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 href="https://medium.com/@porteneuve/getting-solid-at-git-rebase-vs-merge-4fa1a48c53aa">[1] Getting Solid at Merge vs Rebase</a></p> + + + + Research Software Hour + 2020-04-24T00:00:00+00:00 + 2020-04-24T00:00:00+00:00 + + 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 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 href="https://researchsoftwarehour.github.io/">the website</a> +and join us each Tuesday at 20:30 CEST on Twitch.</p> + + + + Work on blog posts + 2020-04-24T00:00:00+00:00 + 2020-04-24T00:00:00+00:00 + + https://coderefinery.org/open-house/blog-posts/ + <p>CodeRefinery is organizing a one day online &quot;open house&quot; 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 href="https://hackmd.io/46XkhCr5T4yahKprL6N01A">shared +document</a>. +Please note that this document will be archived in our <a 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 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 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 href="https://hackmd.io/46XkhCr5T4yahKprL6N01A">shared +document</a>.</p> + + + + Lessons learned from running our first online workshop + 2020-04-14T00:00:00+00:00 + 2020-04-14T00:00:00+00:00 + + https://coderefinery.org/blog/2020/04/14/first-online-workshop/ + <p>April 7-8, 2020, we gave our first online workshop on <a 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 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 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 &quot;ice-breaker&quot; 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 &quot;setting up and configuring Git&quot; 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: &quot;price of workshop is to attend a later workshop +as helper&quot; (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> (&quot;flipped classroom&quot; 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 &quot;it's easiest to share +the screen since you don't have to do the thinking&quot;.</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 &quot;sticky&quot; 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 href="https://coderefinery.github.io/manuals/instructor-tech-setup/">displaying the +last commands +typed</a> +really helps.</li> +<li>Gray/dark background terminal looked better than light background terminal.</li> +</ul> +<h3 id="how-to-make-this-more-scalable">How to make this more scalable?</h3> +<ul> +<li>This time we did not plan to record or stream but we nevertheless asked the +participants in a pre-workshop survey: 2/20 preferred not to have the +workshop streamed, 1/20 didn't want it recorded.</li> +<li>The workshop was great, but we should think more about how to reach more +people. A small workshop where we can individually interact with everyone is +amazing, but the promise of digital technology is that we can reach everyone in +the world. How can we get the best of both? Can we also do something for +everyone else who can't attend but might want to watch later? This is +something to think about.</li> +<li>How can we make this more scalable? This workshop was quite labor-intensive. +You could probably do it with two instructors (instructor + HackMD watcher) + 1 +zoom expert (host + general helper) + a lot of semi-experienced helpers (1:5 +ratio) + a few debuggers to help with tech support the first hour (not +overlapping with instructor or HackMD watcher).</li> +<li>Imagine if we had main room recorded (or even streamed), but breakout rooms +not. People can still ask and interact with privacy in the small rooms - and +we take these comments/issues back to the main room. Other people following +along later can do the exercises at their own pace, and hear the +intros/conclusions in the main rooms, and it might feel a bit like a small +class.</li> +</ul> + + + + Work on instructor training material + 2020-03-24T00:00:00+00:00 + 2020-03-24T00:00:00+00:00 + + https://coderefinery.org/open-house/instructor-training-material/ + <p>CodeRefinery is organizing a one day online &quot;open house&quot; dedicated to +work together on revising and +improving <a href="https://coderefinery.github.io/instructor-training/">our instructor training +material</a>. +<a href="https://github.com/coderefinery/instructor-training/issues">Issues are filed +here</a>, +notes from the first workshop can be in the <a 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 href="https://hackmd.io/@doFoQYKqR623RI-YyXvmew/HJGgb_9VL">shared +document</a>. +Please note that this document will be archived in our <a 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 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 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 href="https://hackmd.io/@doFoQYKqR623RI-YyXvmew/HJGgb_9VL">shared +document</a>.</p> + + + + Preparing for online teaching + 2020-03-20T00:00:00+00:00 + 2020-03-20T00:00:00+00:00 + + https://coderefinery.org/open-house/online-teaching/ + <p>We will meet on <a href="https://kth-se.zoom.us/j/152239500">video</a> (9:00 am, UTC+1) +and <a href="https://coderefinery.zulipchat.com">chat</a> and discuss techniques, +solutions, and tricks for online teaching and collect our notes in a <a 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 href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>.</p> + + + + Collaborative work on the website + 2020-02-11T00:00:00+00:00 + 2020-02-11T00:00:00+00:00 + + 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 href="https://coderefinery.org">coderefinery.org</a>. <a 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 href="https://coderefinery.org">coderefinery.org</a> is very welcome to join.</p> +<p>We will collect nodes in a <a href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>. +Please note that this document will be archived in our +<a 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 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 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 href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>.</p> + + + + Collaborative work on the training material + 2019-12-13T00:00:00+00:00 + 2019-12-13T00:00:00+00:00 + + 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 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 href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>. +Please note that this document will be archived in our +<a 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 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 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 href="https://hackmd.io/1Sso1UFMTXKihv1sedsTIA">shared document</a>.</p> + + + diff --git a/branch/rkdarst--registration/blog/2020/04/14/first-online-workshop/index.html b/branch/rkdarst--registration/blog/2020/04/14/first-online-workshop/index.html new file mode 100644 index 000000000..5c0ae6d61 --- /dev/null +++ b/branch/rkdarst--registration/blog/2020/04/14/first-online-workshop/index.html @@ -0,0 +1,708 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Lessons learned from running our first online workshop + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Lessons learned from running our first online workshop

+ + + + +
+ +

April 7-8, 2020, we gave our first online workshop on introduction to +Git (2 x 3 hours) with 22 +participants and we plan to deliver many more such workshops on a number of +topics based on our lessons.

+

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).

+

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.

+

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.

+

Breaks and ice-breaker

+
    +
  • 5 minute breaks were too short, better 10 minutes or longer, at least once an +hour.
  • +
  • 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 +presentation +and references therein).
  • +
  • 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.
  • +
  • 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.
  • +
+

Solving technical issues

+

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.

+
    +
  • 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.
  • +
  • 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. +
      +
    • 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.
    • +
    • We think that when pre-making the rooms, you have to create some empty +spares for this.
    • +
    +
  • +
+

Helpers

+

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.

+
    +
  • 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.
  • +
  • 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.
  • +
  • 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).
  • +
+

Breakout sessions

+

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.

+
    +
  • Fewer longer (15 min) breakout sessions were better than many short ones +(5-10 min).
  • +
  • This also means that we should group some exercises and not have them spread +out every 10 minutes.
  • +
  • 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.
  • +
  • Groups with 4-5 persons seem to work well, with one helper.
  • +
  • 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.
  • +
  • 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.
  • +
  • Some people just wanted to work alone, that's OK too.
  • +
  • Method 1: group work +
      +
    • Most teaching done in main room (this is important for the most important +and delicate topics).
    • +
    • Participants are in breakout rooms, working independently, sharing +screen/asking for help when they need to.
    • +
    +
  • +
  • Method 2: flipped classroom ("flipped classroom" isn't quite the right +term though) +
      +
    • Initial motivation in the main room.
    • +
    • Switch to breakout rooms early to go through the type-along exercises.
    • +
    • This only works when things are clear enough that people can't get too lost.
    • +
    • (*) 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".
    • +
    • (*) Instructor flips between the rooms every 1-2 minutes answering hard +questions and following progress.
    • +
    • Join the end for a wrap-up where best questions are discussed.
    • +
    • Helpers and instructors should write down the most important questions to +discuss afterwards.
    • +
    +
  • +
  • In reality, use the best of both depending on your specific lesson, +especially the asterisk (*) points! +
      +
    • Encourage the instructor to cycle through breakout rooms to watch +discussions and help out.
    • +
    • 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).
    • +
    +
  • +
  • Host can lose host rights sometimes. +
      +
    • Host should not enter breakout rooms, at least if they are not the original +host because then hostship is transferred to original host.
    • +
    • 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.
    • +
    • 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.
    • +
    +
  • +
  • Co-hosts seem to be able to jump between rooms freely after first joining +the room they were originally assigned to (i.e. can't select any group from +the main room).
  • +
  • At one point, Zoom dropped the whole meeting and everyone re-joined +(automatically). Pre-assembled breakout rooms got lost, which was annoying.
  • +
+

HackMD

+

HackMD was a vital resource, but you should have someone dedicated to watching it and keeping it organized.

+
    +
  • We were impressed how well it worked, holding up with 25 persons editing +without noticeable lag.
  • +
  • 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.
  • +
  • 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!
  • +
  • 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.
  • +
  • Students can come back after the course and find better researched answers, +if the in-course answer is unsatisfactory.
  • +
  • Make sure that the HackMD contents, without any identifying information, can +be made public after the course.
  • +
  • Instead of asking questions in a particular section of the HackMD and +searching and scrolling it was better to ask questions always at the current +bottom of the document. Add new section headings as you start new sections.
  • +
  • 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.
  • +
  • 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.
  • +
+

Chat

+

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.

+
    +
  • 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.
  • +
  • The chat can be used for formative assessment questions where participants +are asked to vote for correct answers in a multiple-choice question.
  • +
  • Practical announcements/instructions should be provided both written and +spoken, to reduce chance they are missed.
  • +
  • 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.
  • +
+

Organization

+

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.

+
    +
  • 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 should have been 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.
  • +
  • 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:
  • +
  • Roles during main lectures: +
      +
    • Host person in charge of overall schedule, timekeeping, breakout rooms and +Zoom chat/participant reactions, clearing feedback, balancing answering +questions, moderating, etc.
    • +
    • 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.
    • +
    • One person watching and formatting the HackMD (but more persons might be +needed if there are many questions).
    • +
    • Backup expert helpers for problems that require intensive debugging (at +least needed at the beginning).
    • +
    +
  • +
  • Roles during breakouts (this is more flexible): +
      +
    • Host in main room watching stuff.
    • +
    • One helper per room leading.
    • +
    • Lesson instructor hopping from room to room answering advanced questions +and also probing the general mood.
    • +
    +
  • +
  • Host makes all instructors and helpers co-hosts so that they can move between +rooms.
  • +
+

Screencasting

+

The requirements and recommendations are roughly like in-person.

+
    +
  • Showing history of commands via tmux or similar, coupled with displaying the +last commands +typed +really helps.
  • +
  • Gray/dark background terminal looked better than light background terminal.
  • +
+

How to make this more scalable?

+
    +
  • 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.
  • +
  • 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.
  • +
  • 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).
  • +
  • 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.
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/blog/2020/04/24/nordic-rse-conference/index.html b/branch/rkdarst--registration/blog/2020/04/24/nordic-rse-conference/index.html new file mode 100644 index 000000000..130fdb4f2 --- /dev/null +++ b/branch/rkdarst--registration/blog/2020/04/24/nordic-rse-conference/index.html @@ -0,0 +1,534 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Announcing the first Nordic-RSE conference + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Announcing the first Nordic-RSE conference

+ + + + +
+ +

A couple of years ago, several CodeRefinery members and their +friends +started discussing how a Nordic network of Research Software Engineers +(RSEs) could be established, and soon thereafter the Nordic-RSE +initiative was launched. The idea was to +follow in the footsteps of very successful such initiatives in other +countries, most notably in the UK, the +Netherlands and +Germany. For the past two years +we have been taking the first steps in this direction. A survey was +conducted +to learn about the environment for people in RSE-related +roles. Information on groups and people +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 +the first Nordic-RSE conference, +Nordic-RSE2020, will take place in Stockholm between 1st and 2nd +December 2020!

+

About the conference

+

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.

+

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.

+

Who should attend?

+

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.

+

We welcome participation from:

+
    +
  • Researchers at any career stage who develop software for research +purposes;
  • +
  • Software developers working in a research context, whatever their +job title or field;
  • +
  • Those interested in advancing the understanding of how best to use +existing research software (e.g. with respect to scalability, +performance and/or reproducibility);
  • +
  • People from any organization providing tools, platforms or services +that benefit research software;
  • +
  • Anyone with a stake in research software (funders, publishers, +decision makers, etc).
  • +
+

We especially encourage first-time presenters and can offer mentoring +and other support with preparing your contribution.

+

Getting involved

+

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 +(nordic-rse-organizers@neic.no) if you would like to help or if you +have any questions on how to get involved with Nordic-RSE2020.

+

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 Swedish e-Science Research Centre +(SeRC), the Swedish National Infrastructure +for Computing (SNIC) and the Swedish e-science +collaboration (eSSENCE). By supporting +us, our sponsors are helping to raise awareness of the importance of +developing RSE career path in the Nordics.

+

Inviting new sponsors

+

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.

+

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 get in +touch.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/blog/2020/04/24/online-workshops-update/index.html b/branch/rkdarst--registration/blog/2020/04/24/online-workshops-update/index.html new file mode 100644 index 000000000..583e555b8 --- /dev/null +++ b/branch/rkdarst--registration/blog/2020/04/24/online-workshops-update/index.html @@ -0,0 +1,517 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery workshops moving online + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

CodeRefinery workshops moving online

+ + + + +
+ +

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 +Git-intro 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 scale up and reach a larger audience +than possible with in-person workshops.

+

We learned many important lessons in this first experiment and we +tried to summarize them all in a previous +article. We +hope that these notes can be of help to others who are going online +with some of their teaching.

+

New notify-me form

+

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 new more +fine-grained notify-me +form 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.

+

Join an online workshops as a helper

+

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.

+

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 helper for upcoming online or in-person workshops in our +new notify-me +form. Remember +also that there is no better way to consolidate new knowledge than +teaching it to others!

+

Bring your own breakout room/helper

+

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.

+

Upcoming online workshops

+

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.

+

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.

+

Sign up for the notify-me +form if you +want to receive an email as soon as registration opens for these +workshoops!

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/blog/2020/04/24/rebase-vs-merge/index.html b/branch/rkdarst--registration/blog/2020/04/24/rebase-vs-merge/index.html new file mode 100644 index 000000000..686a1773f --- /dev/null +++ b/branch/rkdarst--registration/blog/2020/04/24/rebase-vs-merge/index.html @@ -0,0 +1,500 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Rebase vs merge + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Rebase vs merge

+ + + + +
+ +

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?

+

Let us take a closer look at rebase and merge, how they differ and in +which situations they are an advantage to use.

+

Rebase

+

Rebase gives you the opportunity to move the base of a branch to a new +base. Here we have two branches, master and feature_A.

+

Initial tree{:class="img-responsive" style="max-width:100%"}

+

We can rebase the feature_A branch to the last commit in master:

+
git checkout feature_A
+git rebase master
+
+

The result will look like this.

+

First rebase tree{:class="img-responsive" style="max-width:100%"}

+

Checking out master again, we can merge feature_A with master. 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.

+

FF-merge tree{:class="img-responsive" style="max-width:100%"}

+

Merge

+

If we don’t use rebase, but just merge feature_A with master, we get an merge commit, a new commit pointing to the previous last commit in master and the previous last commit in feature_A.

+

Plain merge tree{:class="img-responsive" style="max-width:100%"}

+

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.

+

Mixing rebase and merge

+

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:

+
    +
  • When we merge a semantic unit to master, we use merge.
  • +
  • When patch features, or do general corrections, we use rebase.
  • +
+

How will this look?

+

Merge revisited

+

Let us say we have created a new function or class, something that belongs together - a semantic unit we call feature_B. The base of feature_B is the last commit in master.

+

Master feature-b tree{:class="img-responsive" style="max-width:70%"}

+

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:

+
git checkout master
+git merge feature_B --no-ff
+
+

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:

+
git config --global branch.master.mergeoptions --no-ff
+
+

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.

+

No-ff merge tree{:class="img-responsive" style="max-width:100%"}

+

Rebase revisited

+

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, master 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.

+

No-ff merge tree plus patch{:class="img-responsive" style="max-width:100%"}

+

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:

+
git checkout fix_types
+git rebase master
+git checkout master
+git merge fix_typos --ff-only
+
+

The git graph will now look like this:

+

No-ff merge plus rebase{:class="img-responsive" style="max-width:100%"}

+

Rebase vs merge revisited

+

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 master 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.

+

[1] Getting Solid at Merge vs Rebase

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/blog/2020/04/24/rsh/index.html b/branch/rkdarst--registration/blog/2020/04/24/rsh/index.html new file mode 100644 index 000000000..41f2cc194 --- /dev/null +++ b/branch/rkdarst--registration/blog/2020/04/24/rsh/index.html @@ -0,0 +1,475 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Research Software Hour + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Research Software Hour

+ + + + +
+ +

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 Research Software Hour that combines +the spirit of CodeRefinery with real-life examples from our daily +work - and hopefully, some entertainment, too. We hope watchers +experience the spirit of research software and computing.

+

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.

+

We wish to show why we enjoy research software and computing and how +you can, too. 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. 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.

+

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!

+

Read more at the website +and join us each Tuesday at 20:30 CEST on Twitch.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/blog/2020/04/27/nordichpc-tools/index.html b/branch/rkdarst--registration/blog/2020/04/27/nordichpc-tools/index.html new file mode 100644 index 000000000..d68134ed0 --- /dev/null +++ b/branch/rkdarst--registration/blog/2020/04/27/nordichpc-tools/index.html @@ -0,0 +1,484 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery tools in action: NordicHPC + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

CodeRefinery tools in action: NordicHPC

+ + + + +
+ +

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.

+

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.

+

Within the organization, you can find many examples of using +git (everything), +pull-request based +workflows +(e.g. sonar, git-pr, slurm2sql), automated +testing (e.g. .travis.yml in +sonar, envkernel, nbscript, slurm2sql), modular code +development +(e.g. ), open +licensing +(e.g. everything).

+

Below you see some examples of NordicHPC tools. Some tools are useful +to anyone, but some may be more interesting to cluster administrators.

+
    +
  • nbscrpt is an attempt to +provide the familiar script interface to Jupyter notebooks.
  • +
  • sonar and +sonar-web provide a way to +watch what is actually running on clusters.
  • +
  • git-pr saves you keystrokes +when making pull requests, though perhaps +cli.github.com takes its place.
  • +
  • slurm2sql imports the HPC +Slurm job history to a sqlite3 database. It can be useful, even +individually, to get and analyze data about your jobs.
  • +
  • envkernel is a Jupyter +extension which lets you run your kernels in different environments, +such as Docker, Singularity, and virtual/conda environments more +easily.
  • +
+

Do you have a nice tool that needs a home? You know what to do...

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/blog/2020/07/31/mega-coderefinery/index.html b/branch/rkdarst--registration/blog/2020/07/31/mega-coderefinery/index.html new file mode 100644 index 000000000..0b692bcaa --- /dev/null +++ b/branch/rkdarst--registration/blog/2020/07/31/mega-coderefinery/index.html @@ -0,0 +1,1109 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Report from the Mega-Coderefinery workshop + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Report from the Mega-Coderefinery workshop

+ + + + +
+ +

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.

+

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.

+

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.

+

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.

+

Executive summary

+
    +
  • Yes, we scale to 100 people pretty well, but you do need a good +vision about how to do it.
  • +
  • We maintained good learning outcomes with our adjusted strategies.
  • +
  • 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.
  • +
  • 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.
  • +
  • You need to put in extra effort to ensure things run smoothly and +make sure that everyone is prepared - anticipate all problems.
  • +
  • Roles of staff should be carefully explained and ideally not +overlapping, to reduce the cognitive load.
  • +
+

Mega-CodeRefinery

+

Webpage

+

Finnish HPC Kickstart

+

Webpage

+

Organization

+
    +
  • Pre-workshop install help times: +
      +
    • Emphasis on getting ready and making sure things are installed +and configured.
    • +
    • 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.
    • +
    • The installation verification time occurred right after the +"helper introduction meeting", so helpers would stay and help +people verify their installation.
    • +
    +
  • +
  • Installation instructions consist not just of installation, but also +verification instructions. +
      +
    • In particular, verifying of the git configuration, since if +there are any issues, it very quickly derails things.
    • +
    +
  • +
  • We created installation and verification videos for the most +critical part, git youtube +playlist: +
      +
    • One on verifying an installation (make repo, run it)
    • +
    • One for most common problems you might see and how to fix
    • +
    • One for advanced topics (ssh keys)
    • +
    +
  • +
  • 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.
  • +
  • We kept the Zoom meeting room open for 30 min to 1 hour after the scheduled lessons are over on that day. +
      +
    • This enabled continuation of exercises in re-opening breakout rooms.
    • +
    • Some participants could receive individual help by a helper or an expert helper.
    • +
    • In the main room, we did debriefing among instructors and helpers so that we could reflect on the day after.
    • +
    +
  • +
  • The larger the audience gets, the more diverse it is. +
      +
    • This causes more load on helpers and more effort for organizers +to prepare.
    • +
    • It also makes it harder to please everyone.
    • +
    • But on average, we felt that the outcome was about as expected.
    • +
    +
  • +
  • To scale to this cognitive load, carefully assign roles (roles +explained below): +
      +
    • Zoom host, focuses on chat, breakout rooms, registration, etc.
    • +
    • HackMD master
    • +
    • Expert helpers (special ops)
    • +
    • Instructors
    • +
    • Helpers
    • +
    • 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.
    • +
    +
  • +
+

Recommendations

+
    +
  • Place a large emphasis on getting ready for the workshop.
  • +
  • Have multiple ways for learners to verify their installation.
  • +
  • "Require" attendance in pre-workshop installation verification +times. Invite helpers there to get involved and practice basic +helping.
  • +
+

Teams

+

Our recruitment/sign-up strategy was twofold.

+
    +
  1. Open call for helpers and sign-up for individual learners.
  2. +
  3. “Bring your own breakout room”: We allowed learners to register as teams, where each team brought its own helper.
  4. +
+

Open call for helpers and sign-up for individual learners.

+
    +
  • First we had a general call for helpers to assign a breakout room with individual learners.
  • +
  • Our plan was to allocate one helper for 5 learnes accepted approx. (the number of helpers) * 5 of individual leraner sign-ups.
  • +
  • We tried to sort these learners by university/country/field, but didn't put too much effort into this.
  • +
  • Helpers and learners were told which team they will be in before the workshop (personalized email with breakout room number).
  • +
  • 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. +
      +
    • For a long workshop like this one (6 half-days), getting to know each other seemed to result in more interaction by the end.
    • +
    • 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.
    • +
    • It took a session or two for people to get comfortable with their room, but once they did it went well.
    • +
    +
  • +
+

"Bring your own breakout room"

+
    +
  • 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.
  • +
  • Research shows that multiple adopters in an organization greatly increases uptake of new tools (Graf-Vlachy, L., Buhtz, K. & König, 2018). Encourage people to come with friends or groupmates.
  • +
  • How it worked: +
      +
    • This is implemented as a "Team name" option when registering.
    • +
    • They are put in their own breakout room together.
    • +
    +
  • +
  • Advantages: +
      +
    • Scalability: 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.
    • +
    • Team building: 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.
    • +
    • Possibility to use familiar examples: 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.
    • +
    +
  • +
  • The concept of teams could be extended to in-person workshops, too. +
      +
    • Not necessarily pre-assigned, but cleverly organize tables, expect the group to stay together all days.
    • +
    • One could give the teams names and so on, to increase team spirit.
    • +
    +
  • +
+

Recommendations

+
    +
  • Accept a "team name" as part of registration. These people will be +put into the same breakout rooms. Worst case, it isn't used.
  • +
  • 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.
  • +
+

Breakout rooms management

+
    +
  • Assign names depending on breakout room and role. Here, n is the +breakout room number: +
      +
    • (n) First Last - learner
    • +
    • (n,H) First Last - helper
    • +
    • 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))
    • +
    • (CR) First Last for instructors and expert helpers (here "CR" +stood for CodeRefinery staff).
    • +
    +
  • +
  • Initial breakout room assignments serves as a guideline, rooms are +constantly adjusted as needed but we try to keep teams together.
  • +
  • Preferably, one breakout room should have minimum 4 learners.
  • +
  • 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.
  • +
  • Some people don't join with the right Zoom name. +
      +
    • Other co-hosts can browse the registration list and manually +rename participants who didn't name themselves correctly.
    • +
    • Then, the Zoom host only has to worry about assigning them into +the right rooms, and not looking up everyone on the lists.
    • +
    +
  • +
  • Our registration system, Indico, made this management much easier +than it could have been. +
      +
    • After registration closed, we added a "Room" field to the +registration data.
    • +
    • 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.
    • +
    • We could send personalized messages to each person with the +Indico mail merge function
    • +
    • The majority of people did manage to name themselves correctly.
    • +
    +
  • +
+

Recommendations

+
    +
  • Consistent naming of participants (and an order that sorts properly) +makes managing breakout rooms reasonable.
  • +
  • Consider how your registration system can send personalized emails +to each person.
  • +
+

Helper training

+

Regular helpers:

+
    +
  • Have a helper call the previous week. Actually, have two so that +everyone can make it to at least one.
  • +
  • Helper training: + +
  • +
  • Focus on training for managing time and keeping a flow going. This +is described in our document.
  • +
  • Helpers do not need to be experts in everything. +
      +
    • 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.
    • +
    +
  • +
  • Helper training is focused on: +
      +
    • Motivation of learners and teaching psychology.
    • +
    • How to help: don't do it for them, etc.
    • +
    • Keeping the flow going, encourage everyone to speak up and +share.
    • +
    • Knowing when and how to call for an expert helper to come to the +room.
    • +
    +
  • +
+

Special expert helpers:

+
    +
  • There are also "special expert helpers" (we need a new name), who +are experts in the material and problems that may come up. +
      +
    • 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.
    • +
    • Special experts aren't assigned to any particular breakout room. +Instead, they are able to go to any room that needs more help.
    • +
    • 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.
    • +
    • 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.
    • +
    +
  • +
  • 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.
  • +
  • Special experts also serve as backup helpers and can take over or +permanently join a room if a helper is unprepared.
  • +
  • The instructor is also encouraged to pop into some breakout rooms to +see how things are going. This may be enough in small workshops.
  • +
  • Special experts should be Zoom co-hosts. They are then able to go +into any breakout room they want (the mechanics of this is not +obvious, see our helper training info for more).
  • +
  • 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.
  • +
+

Recommendations

+
    +
  • Hierarchical helpers allows you to extend to a greater size.
  • +
  • You need to put thought into how helpers work and prepare them well. +We should develop a special, quick training for them.
  • +
  • Special expert helpers connect the instructor (occupied with +teaching) to the pulse of the breakout rooms and serve as helper +mentors.
  • +
+

Lesson adjustment

+
    +
  • Make the exercise sessions as long as possible, group things +together. +
      +
    • There is a significant overhead to each breakout session, +becoming adjusted, figure out just what it is you are supposed +to do.
    • +
    +
  • +
  • Type-along is hard, given limited screen space to both watch and do.
  • +
  • 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.
  • +
  • With hierarchical helpers and more people in general, make sure that +each exercise and hands-on session is as self-contained as possible. +
      +
    • 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.
    • +
    +
  • +
+

Recommendations

+
    +
  • Consider limits of online formats and how difficult it is to do +interactive work.
  • +
+

Exercises and breakout sessions

+
    +
  • Very clearly say what the goal is, what the duration is (duration +and time it ends), etc. for each lesson
  • +
  • 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 +
      +
    • e.g. "we expect you to finish 1-3, 4-5 are optional. 20 +minutes, ending at xx:45".
    • +
    • When participants are in two time zones, it is extra important +to use this format of not specifying hour.
    • +
    +
  • +
  • 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".
  • +
+

Recommendations

+
    +
  • Have lots of "meta-talk" about what you are doing, what expectations +are, etc.
  • +
+

HackMD

+
    +
  • HackMD serves as a side channel to answer questions, so that the +main flow is not disrupted. +
      +
    • Learners keep it open and always watch and ask questions at the +bottom.
    • +
    +
  • +
  • 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. +
      +
    • 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).
    • +
    +
  • +
  • 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.
  • +
  • HackMD starts failing with a lot of people +
      +
    • We saw the limits at 50-100 people. If most people leave it in +view mode, it gets a little bit better.
    • +
    • If there isn't much text in it, it's better (~10k characters is +low).
    • +
    • When the document grew too long: we moved some of the text from +previous episodes to a side-HackMD and linked to it.
    • +
    • The failure mode was usually not being able to edit.
    • +
    • 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.
    • +
    • We even saw Google Docs fail with 50 simultaneous editors during +an icebreaker (and our icebreakers with hackmd seemed to work +with ~50).
    • +
    +
  • +
  • Always have people ask questions and comment at the bottom. +
      +
    • There is not a "questions section" and "lesson section", always +write at the bottom.
    • +
    • 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.
    • +
    +
  • +
  • Suggested heading arrangements (but hackmd master does whatever +makes sense): +
      +
    • # for page title
    • +
    • ## for each lesson
    • +
    • ### for each episode
    • +
    • #### for each exercise, group discussion, etc. (if it needs to +be smaller than ###.)
    • +
    +
  • +
  • Make participants aware that we plan to publish questions and +answers later as workshop outcomes. +
      +
    • After the workshop we add questions and answers from the HackMD +document to the workshop page.
    • +
    • 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.
    • +
    • 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 [name=Myname] 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 +[name=Myname]. 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.
    • +
    • 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.
    • +
    +
  • +
+

Zoom

+
    +
  • Have a dedicated host, who focuses on breakout rooms and +registration related matters.
  • +
  • Use a client, not the web browser - though web browser is minimally +OK.
  • +
  • Assigning leareners to breakout rooms takes a long time, but luckily +Zoom can make it easy enough: +
      +
    • The "pre-assign breakout rooms" seems to only work within one +organization, thus was useless to us
    • +
    • When people name themselves according to the (n) Firstname Lastname system, people sort properly and it becomes very fast +to assign hundreds of people to their rooms.
    • +
    +
  • +
  • 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. +
      +
    • This is important when you approve entry to the meeting room from the waiting room.
    • +
    • 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.
    • +
    +
  • +
  • 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 CodeRefinery Zulip channel. +
      +
    • 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.
    • +
    • HackMD can also be used to discuss among staff, of course always +at the very bottom.
    • +
    +
  • +
  • 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).
  • +
  • We saw some interesting Zoom problems: +
      +
    • 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.
    • +
    • 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.
    • +
    • 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.
    • +
    +
  • +
+

Recommendations

+
    +
  • Managing breakout rooms isn't too hard, but do practice.
  • +
+

Streaming

+

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.

+
    +
  • +

    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.

    +
  • +
  • +

    What's the point of streaming?

    +
      +
    • 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.
    • +
    • 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.
    • +
    • We can imagine a fully federated system: There is one small Zoom +meeting with instructors doing the teaching. All 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.
    • +
    +
  • +
  • +

    Stream as an overflow

    +
      +
    • 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
    • +
    • We emphasized that the experience would not be the same, and +they should try to come to another workshop later.
    • +
    • 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.
    • +
    +
  • +
  • +

    Interacting with stream viewers

    +
      +
    • We got questions and comments on the stream chat.
    • +
    • 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)
    • +
    • Stream viewers seemed pretty happy with what they were getting.
    • +
    +
  • +
  • +

    Risks of streaming

    +
      +
    • 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.
    • +
    • 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.
    • +
    • Risk of learner audio or video being broadcast. Zoom provides +tools ("spotlight video") to prevent this, but it doesn't work +all the time.
    • +
    • Extra effort needed. The marginal cost isn't that great in the +end, once you know how it works.
    • +
    +
  • +
  • +

    Zoom can send a video feed to a streaming service, which +re-broadcasts to the whole world

    +
      +
    • This has to be enabled under your account, then can be +configured for a particular meeting.
    • +
    • "Custom streaming server" seems to be able to broadcast to +anything. In particular, we used Twitch to do our streaming.
    • +
    +
  • +
  • +

    Keeping learner's videos out of the stream

    +
      +
    • Privacy of learners is the first prerequisite to streaming.
    • +
    • 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.
    • +
    • Breakout rooms never recorded or streamed (though some groups +asked if they could be recorded).
    • +
    • Zoom "Spotlight video" means that only that person should go +out into the stream. +
        +
      • The zoom host must not be in the gallery view.
      • +
      • This bugs 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.
      • +
      • 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.
      • +
      • We really need to investigate this more.
      • +
      +
    • +
    +
  • +
  • +

    What to do with the stream while the breakout rooms are going on?

    +
      +
    • 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
    • +
    • 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.
    • +
    +
  • +
+

Recommendations

+
    +
  • 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.
  • +
  • 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.
  • +
+

Recording

+
    +
  • Once you do streaming, it is a smaller step to recording and posting +the videos. +
      +
    • Who is benefited by the recordings? Perhaps not brand new +learners, but the learners who were in the workshop can review +them again later.
    • +
    +
  • +
  • If recordings require post-processing, they will almost never get +done. +
      +
    • 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.
    • +
    +
  • +
  • A surprising number of learners have asked for the videos after the +workshop. +
      +
    • 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.
    • +
    • When we can't provide them quickly, their usefulness is much +reduced.
    • +
    +
  • +
+

Recommendations

+
    +
  • Clearly announce the recording privacy statement when first +registering.
  • +
  • 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.
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/blog/2020/09/29/git-pr/index.html b/branch/rkdarst--registration/blog/2020/09/29/git-pr/index.html new file mode 100644 index 000000000..13c4216c7 --- /dev/null +++ b/branch/rkdarst--registration/blog/2020/09/29/git-pr/index.html @@ -0,0 +1,493 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - git-pr: painless small pull requests + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

git-pr: painless small pull requests

+ + + + +
+ +

git-pr: painless small pull requests

+

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, https://github.com/NordicHPC/git-pr.

+

Let's talk about how it works.

+

Making a change

+

First, git-pr will help you to make the new feature branch. git pr branch $branch_name willcreate a new feature branch off of the +upstreamdefault branch and check it out for you. You might want to +git fetch first. Make your commits off of this branch.

+

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.

+

Then, to push the pull request, I use git pr open. 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.

+

One thing that git-pr will do is figure out the upstream and your +local copy by yourself. Default upstream goes in priority order +upstreamorigin, Default personal fork goes in the order +localoriginupstream, 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.

+

git pr prune will remove all merged branches both locally and on the +remote (possibly dangerous!).

+

Various git pr fetch* commands will fetch pull requests into a local +pr/NNN branch.

+

There are various other small useful things, with it, but this is the +main part.

+

These are only 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.

+

About git-pr

+

You can find it at https://github.com/NordicHPC/git-pr - it is a +single shell script to copy to your path.

+

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!

+

It supports both Github and Gitlab, though Gitlab support is less well +tested.

+

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.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/blog/2020/11/13/carpentry-community-discussion-nordic/index.html b/branch/rkdarst--registration/blog/2020/11/13/carpentry-community-discussion-nordic/index.html new file mode 100644 index 000000000..590fe411a --- /dev/null +++ b/branch/rkdarst--registration/blog/2020/11/13/carpentry-community-discussion-nordic/index.html @@ -0,0 +1,509 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Community discussion in Nordic and Baltic countries + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Community discussion in Nordic and Baltic countries

+ + + + +
+ +

This blogpost is based on the notes made on Carpentries Community Discussion Etherpad on the 30th Oct. 2020.

+

Summary

+

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?

+

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 below.

+

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.

+

There are ongoing initiatives to develop Nordic community further. Among other things, information about the Nordic Research Software Engineer initiative and its first online get-together event on 30th Nov. - 2nd Dec. was announced.

+

Workshop debriefing

+

Experiences from two recently held online Carpentries workshops were shared and discussed:

+

Sweden, Stockholm -- Mix and Match (SQL, OpenRefine, Python programming and plotting)

+

A self-organized workshop by KTH, Stockholm University, and Karolinska Institute

+
    +
  • (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.
  • +
  • (Radovan) (In his experiences from teaching online workshops in CodeRefinery) 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).
  • +
  • (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.
  • +
+

Norway, Bodø -- DC social science

+

A centrally-organized workshop at Bodø University

+
    +
  • (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.
  • +
  • (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.
  • +
  • (Lina) Depending on the context?
  • +
  • (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.
  • +
  • (Joakim) Important thing is not give pressure on instructors.
  • +
  • (Lina) Letting learners take over instructor's screen would be interesting.
  • +
  • (Lars) Polls for ice-breakers as well. Easy to rush through, but important not to, especially when you cannot see faces as feedback.
  • +
  • (Radovan) Hopefully useful tips for online teaching learned from CodeRefinery workshops: https://coderefinery.github.io/manuals/
  • +
+

Community building, collaboration, and ongoing initiatives in the Nordic and Baltic region

+
    +
  • (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 research bazaar at the University of Oslo earlier this year: +
      +
    • goal: making 3D holiday greeting card using HTML and JavaScript: https://arworkshop.teebusch.repl.co/card1.html
    • +
    • The lesson material is all there: https://repl.it/@Teebusch/arworkshop
    • +
    +
  • +
  • (Joakim) Suggestion of a repository of Carpentries Nordic/Baltic community members with specialities and skills
  • +
  • (Annika) Google Sheets for this?
  • +
  • (Anne) EOSC Nordic claims to be a knowledge-hub
  • +
  • (Radovan) Is also working on mapping.
  • +
+

Announcements

+
    +
  • 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)
  • +
  • Local-nordic Carpentries mailing list: https://carpentries.topicbox.com/groups/local-nordic
  • +
  • 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)
  • +
+

Participant list

+
    +
  1. Annika Rockenberger (host, Norway, Oslo)
  2. +
  3. Naoe Tatara (co-host, Norway, Oslo)
  4. +
  5. Kerstin Lenk (Finland, Tampere)
  6. +
  7. Lars Kjær (Denmark, Copenhagen)
  8. +
  9. Tobias Busch (Norway, Oslo)
  10. +
  11. Lina Andrén (Sweden, Stockholm)
  12. +
  13. Mohamed Abdelhalim (Norway, Oslo)
  14. +
  15. Annajiat Alim Rasel (Bangladesh, Dhaka)
  16. +
  17. Joakim Philipson (Sweden, Stockholm)
  18. +
  19. Thomas Arildsen (Denmark, Aarborg)
  20. +
  21. Radovan Bast(Norway, Tromsø)
  22. +
  23. Samantha Wittke (Finland, Helsinki)
  24. +
  25. Olav Vahtras (Sweden, Stockholm)
  26. +
  27. Anne Fouilloux(Norway, Oslo)
  28. +
  29. Richard Darst (Finland, Helsinki)
  30. +
+

Thank you for all the contributions!

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/blog/2021/09/01/bi-weekly-community-calls/index.html b/branch/rkdarst--registration/blog/2021/09/01/bi-weekly-community-calls/index.html new file mode 100644 index 000000000..5b9d79313 --- /dev/null +++ b/branch/rkdarst--registration/blog/2021/09/01/bi-weekly-community-calls/index.html @@ -0,0 +1,458 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Bi-weekly Community Calls started + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Bi-weekly Community Calls started

+ + + + +
+ +

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.

+

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!

+

So far, we informed and discussed among others;

+
    +
  • CodeRefinery project: current status and future,
  • +
  • How to improve outreach and publicity,
  • +
  • Importance of possibility to provide ECTS,
  • +
  • How CodeRefinery should give credits to contributions by volunteers,
  • +
  • Mentorship program for exercise leads after the workshop,
  • +
  • How to "order" workshops
  • +
+

For more details of each call, please visit the archive of the minutes

+

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 the Community Call HackMD.

+

We all look forward to seeing you at community calls and Zulip :)

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/blog/2021/11/20/phase-2-lessons-learned/index.html b/branch/rkdarst--registration/blog/2021/11/20/phase-2-lessons-learned/index.html new file mode 100644 index 000000000..38c97ce62 --- /dev/null +++ b/branch/rkdarst--registration/blog/2021/11/20/phase-2-lessons-learned/index.html @@ -0,0 +1,794 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Lessons learned from phase 2 of the project + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Lessons learned from phase 2 of the project

+ + + + +
+ +

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.

+

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.

+

Workshop/event organization

+

Metrics

+
    +
  • 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 (https://coderefinery.org/about/statistics/) which really simplified +reporting.
  • +
+

Survey

+
    +
  • Survey should be designed considering analysis and presentation of results, +as well as and what to focus on (what we want to show off).
  • +
  • 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.
  • +
  • How to get a better and precise overview of "actual" participants: +
      +
    • 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.)
    • +
    • 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.
    • +
    • Post-workshop survey: +
        +
      • 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.
      • +
      • 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.
      • +
      • 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.
      • +
      +
    • +
    +
  • +
+

Capacity and workshop format

+
    +
  • How to afford as many as possible learners while keeping good learner experiences +or even improving them.
  • +
  • How we carried out online workshops in 2020-2021: +
      +
    • Standard 3-full day CR workshop was transformed into 6-half day format, typically Tuesday-Thursday over 2 consecutive weeks.
    • +
    • Helper/Exercise lead onboarding sessions as well as installation help drop-in sessions were held typically a week before the 1st week.
    • +
    • All the exercises were done in breakout room with a group of regular members.
    • +
    • We recruited exercise leads and accepted 5-6 individual learners per exercise lead plus team registration including their own exercise lead.
    • +
    • We used priority criteria based on countries and/or institution's characteristics.
    • +
    • Problems/challenges we experienced: +
        +
      • Withdrawals on short notices and no-shows
      • +
      • Much hassles by the coordinators
      • +
      • Feedback showing both positive and negative experiences with regular members/exercise leads
      • +
      +
    • +
    +
  • +
  • What is the optimal format of help provision and exercises: +
      +
    • Should the group members be fixed or more ad-hoc or even hop-in-and-out?
    • +
    • 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.
    • +
    • "Webinar (stream)-by default" with an option for joining in zoom-meeting room for extra help may work better (ref. Python for SciComp 2021)?
    • +
    • Post-workshop Q&A session time/day would be useful?
    • +
    • 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.
    • +
    +
  • +
+

Communication with participants

+
    +
  • Indico's email function worked well to send information about the workshop to participants/signers.
  • +
  • We experienced few cases of typo in email address, thus we could not reach registrants.
  • +
  • Online collaborative notebook (HackMD and similar) worked well for Q&A during the lectures.
  • +
+

Certificates

+ +

Planning

+
    +
  • 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.
  • +
  • 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.
  • +
+

Lesson development

+
    +
  • Only happened before workshops. This was very efficient but introduced stress.
  • +
  • It probably requires a calendar event to dedicate time for this.
  • +
  • "software installation and setup" +
      +
    • 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).
    • +
    • The procedures need validations given diverse scenarios.
    • +
    • 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).
    • +
    +
  • +
  • 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.
  • +
  • It is important to make the contribution criteria clear for making lesson citable: +
      +
    • “creator”(author): significant contributions
    • +
    • “contributor”/Editor: reviewing/approving contributions
    • +
    • “contributor”/Other: smaller contributions
    • +
    +
  • +
  • Ref: https://hackmd.io/@coderefinery/citable-lessons
  • +
  • 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: +
      +
    • Institution/Organization etc.
    • +
    • Type of event and link to the event page: +
        +
      • Workshop
      • +
      • Credited course
      • +
      • Non-credited course
      • +
      • Other type (specify)
      • +
      +
    • +
    • Which lessons were used +
        +
      • Only CR lessons (which ones)
      • +
      • CR lessons (which ones) as well as other lesson materials (what materials?)
      • +
      • part of CR lessons (where of it)
      • +
      +
    • +
    +
  • +
+

The Carpentries

+

Membership and use of its benefits

+
    +
  • Membership tier: Platinum, 3 years (2018 Nov. 1 - 2021 Nov. 1)
  • +
  • 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.
  • +
  • Use of instructor seats and Centrally-Organized Workshops (COW):
  • +
+ + + + +
yearused seatsbadged instructorsCOW
2018-2019138-
2019-20201283
2020-2021*1061
+
    +
  • For each membership year, NeIC had 15 priority seats for the instructor training and 6 COWs without fee.
  • +
  • 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.
  • +
  • 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.
  • +
+

Relationship with the Carpentries and recognition of CR in the Carpentries community

+ +

Regional Coordinator (RC)

+
    +
  • 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 35 workshops. 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.
  • +
  • RC initiated the following: + +
  • +
  • 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.
  • +
  • Upon the expiration of the NeIC's membership, RC in Nordic region is also discontinued.
  • +
+

Dissemination of opportunities to use the NeIC's membership benefit

+
    +
  • Dissemination of opportunities were done via CR and NeIC website, CR Zulip chat, CR newsletter, at relevant workshops, CR twitter, etc.
  • +
  • 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.
  • +
+

Uptake of the membership benefits

+
    +
  • 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.
  • +
  • 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).
  • +
  • Provision of teaching/learning opportunities in Carpentries SOWs/COWs initiated by CR might have been helping; +
      +
    • to disseminate the usefulness of the Carpentries workshops, as well as
    • +
    • to provide a "safe" place for newly-badged instructors to try teaching.
    • +
    • 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.
    • +
    +
  • +
  • The Carpentries is also changing along time: +
      +
    • Membership price model and the price itself had been stable for a couple of years, but will be changed within 2021.
    • +
    • RC role is to be changed in the process of re-designing community development program. 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 (Community Initiatives). The discount offer of having an RC is to be discontinued.
    • +
    • The Carpentries will have online workshops as their standard option to offer in near future; it is so far only as pilot.
    • +
    +
  • +
+

Meeting minutes and decision tracking

+
    +
  • 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.
  • +
+

Time reporting and vacation planning

+
    +
  • 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).
  • +
  • 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.
  • +
  • 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).
  • +
  • In hindsight, it would have been better to offer more 1-1 discussions between +project manager and staff.
  • +
  • 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.
  • +
  • It reduces confusion to share a vacation plan: not only for the project +manager but for the entire staff.
  • +
+

Issue/task tracking

+
    +
  • 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.
  • +
  • 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.
  • +
  • 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.
  • +
+

Support line/ request tracker

+
    +
  • We got roughly 200-300 tickets/year.
  • +
  • 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.
  • +
  • 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.
  • +
  • Most tickets arrive around workshops.
  • +
  • Most non-workshop tickets were to unblock GitLab accounts.
  • +
+

Communication within the community and the project

+
    +
  • We have started within NeIC Slack.
  • +
  • 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.
  • +
  • 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.
  • +
  • We are unsure however, whether the problem with outreach is lack of tools or lack of processes.
  • +
  • One way out is to move communication to the public space which we have +done when moving from Slack to Zulip.
  • +
  • Internally Zulip chat has been good for the project.
  • +
  • In addition, we have managed to engage many helpers and volunteers for each workshop.
  • +
  • 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.
  • +
  • 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.
  • +
+

Data management

+
    +
  • Google Drive has served us well in the first years.
  • +
  • However, this storage was connected to a personal account.
  • +
  • Over time we used GitHub more and more.
  • +
  • HackMD was used a lot in the last 2 years of the project, both for workshops and notes and meetings.
  • +
  • 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.
  • +
  • We should have created a data management plan.
  • +
  • Relevant to some points written in Legal questions.
  • +
+

Community engagement

+
    +
  • There was a constant stream of people interested in becoming more involved.
  • +
  • We have activated some, but as 'communication' says above, some potential was left unrealized.
  • +
  • Growing a community requires also promoting newcomers and mentoring.
  • +
  • Mentoring also requires volunteer mentors.
  • +
  • With more mentoring and more follow-up we could have had engaged more people and more organizations.
  • +
  • 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. Supporting community champions and running champions programs
  • +
  • How to keep the community engagement up and running without "burn-out" is a constant challenge.
  • +
+

Stakeholder engagement

+
    +
  • Steering group seems to have become less engaged over time.
  • +
  • At the beginning of the project the SG actively influenced and gave ideas and input and suggestions.
  • +
  • Over time the steering group meetings and communication grew more and more +passive and turned into a reporting channel.
  • +
  • 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.
  • +
+

Infrastructure hosting (GitLab service)

+
    +
  • Both the steering group and also the project staff became less interested in this over time.
  • +
  • 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).
  • +
+ +
    +
  • The project was lacking support in GDPR-related questions +
      +
    • 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?
    • +
    • 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 GDPR is not followed due to its server existence outside of the EU +(especially in +US) +(Ref. Recommendations by European Data Protection +Board)
    • +
    • 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").
    • +
    • 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.
    • +
    +
  • +
  • "Rights to work results" vs. Open Science +
      +
    • Ref: a page about "Rights to work results" at University of Oslo
    • +
    • General clarification is needed here so that everyone won't be in trouble later.
    • +
    • 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.
    • +
    +
  • +
  • We also lacked support in questions about how to start an own organization/ spin-off.
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/blog/2021/11/21/towards-citable-lessons/index.html b/branch/rkdarst--registration/blog/2021/11/21/towards-citable-lessons/index.html new file mode 100644 index 000000000..8f230abc8 --- /dev/null +++ b/branch/rkdarst--registration/blog/2021/11/21/towards-citable-lessons/index.html @@ -0,0 +1,580 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Towards citable lessons + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Towards citable lessons

+ + + + +
+ +

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.

+

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.

+

Technical choices

+
    +
  • 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.
  • +
  • We will convert the 3 remaining Jekyll lessons to Sphinx to simplify pdf export.
  • +
  • We will not start with https://allcontributors.org/ because it requires each contributor +to have a GitHub account which we have found a too strict limitation.
  • +
  • We start with tracking authorship in CITATION.cff since GitHub presents a +"cite as" button when this file is present.
  • +
  • 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.
  • +
+

Distinguishing authors and contributors

+
    +
  • Removed "code" (lesson material) does not mean removing authorship unless the author prefers to be removed.
  • +
  • Example for how Carpentries do it (unix shell lesson): + +
  • +
  • Definitions of the roles: +
      +
    • "creator": significant contributions
    • +
    • "contributor"/Editor: reviewing/approving contributions
    • +
    • "contributor"/Other: smaller contributions
    • +
    +
  • +
  • On Zenodo we start with "creator" (author) and "contributor" (other). +
      +
    • See also categories that Zenodo understands: https://developers.zenodo.org/#representation (search for "creators" and "contributors")
    • +
    • 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.
    • +
    +
  • +
  • We still need to verify whether CITATION.cff and/or .zenodo.json can map to +the definitions of roles (above).
  • +
+

How we will reach out to creators and contributors

+
    +
  • We will do this on a per-lesson basis and we will start with the lessons +which we teach the most often.
  • +
  • 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.
  • +
  • We reach out to everybody and ask whether they want to be contributor or author.
  • +
  • If a person cannot be reached, we do not add the person without consent and +rather add the person later once we reach them.
  • +
  • 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.
  • +
  • On the GitHub issue we will ask authors for their ORCID.
  • +
+

Archiving lessons as pdf

+
    +
  • 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.
  • +
  • We have concluded that we wish to attempt depositing pdf versions unless this +turns out too difficult.
  • +
  • The pdf versions will be generated automatically as part of a "release" workflow.
  • +
  • The automatic pdf generation is relatively straightforward with Sphinx +lessons but less trivial with Jekyll-based lessons.
  • +
  • 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.
  • +
  • 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.
  • +
+

ORCID vs. Zenodo community

+
    +
  • We have decided against introducing a project ORCID for CodeRefinery and +rather collect related records in a CodeRefinery Zenodo community.
  • +
+

How we wish to test the workflow

+
    +
  • For one or two example lessons we will create a fork and test the release +deployment and DOI generation on Zenodo sandbox.
  • +
+

Suggested workflow to make lessons citable via Zenodo

+
    +
  • Add a .zenodo.json to the lesson repo, for example:
  • +
+
    "creators": [
+        {   
+            "orcid": "0000-0002-1825-0097",
+            "affiliation": "Feline research institute",
+            "name": "Field, Gar"
+        },
+        {   
+            "orcid": "0000-0002-1825-0097",
+            "affiliation": "Feline research institute",
+            "name": "Cat, Felix"
+        }
+    ],
+
+
    +
  • Generate pdfs from Sphinx sources via LaTeX: +
      +
    • In conf.py, set latex_engine = 'xelatex' (makes emojis work), then make clean ; make latexpdf.
    • +
    • This will become part of GitHub Actions, it will not be a manual step.
    • +
    +
  • +
  • Create a release of the lesson on GitHub.
  • +
  • On Zenodo, check syncing with GitHub.
  • +
+

Resources

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/blog/2021/11/25/lessons-learned-may-2021/index.html b/branch/rkdarst--registration/blog/2021/11/25/lessons-learned-may-2021/index.html new file mode 100644 index 000000000..5d9308993 --- /dev/null +++ b/branch/rkdarst--registration/blog/2021/11/25/lessons-learned-may-2021/index.html @@ -0,0 +1,550 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Lessons learned from the May 2021 online workshop + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Lessons learned from the May 2021 online workshop

+ + + + +
+ +

May 10-12 and 18-20, 2021, we gave our at that time largest CodeRefinery +online workshop (6 x 3.5 hours) with 128 participants. +We plan to deliver many more such workshops based on our lessons.

+

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.

+

This complements our lessons learned from our first online workshop.

+

Lesson coordination

+
    +
  • 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.
  • +
  • The teaching coordinator should check in for basic practicalities with each instructor: +
      +
    • team-teaching if desired
    • +
    • material to cover
    • +
    • schedule breaks
    • +
    • test screenshare prior to the lesson
    • +
    • how to control breakouts yourself
    • +
    +
  • +
  • Be clear about video on or off for instructors. If multiple people on then gallery OBS capture doesn't work.
  • +
  • Include role mentoring as part of the coordination initial meeting.
  • +
  • More talk about "voice of audience".
  • +
  • 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.
  • +
  • Inform individual exercise leads about how the set group of individual learners is like (e.g. expecting how many in the room, OS, background).
  • +
  • Inform exercise leads and all the team members who are replacing when a regular exercise leader is absent.
  • +
  • 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.
  • +
+

Zoom and OBS

+
    +
  • Ask participants to join with video OFF when they join after the workshop started (otherwise they may appear in the stream).
  • +
  • Huge amount of work that many people did making the instructions, and testing them on all the different OSs, surely helped.
  • +
  • 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.
  • +
  • Gallery insert view is risky.
  • +
  • You can't spotlight someone when only two peoples' videos are on.
  • +
  • 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.
  • +
  • It takes manual work to switch from one to two people (changing cropping), and also two to three (alignment).
  • +
  • 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.
  • +
  • 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.
  • +
  • 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.
  • +
  • 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.
  • +
  • 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.
  • +
  • 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).
  • +
  • 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.
  • +
  • OBS helper: would be nice to have a way to unmute both of us.
  • +
+

Collaborative notes

+
    +
  • Don't try to insert html into HackMD :sweat_smile:
  • +
  • HackMD at this size seems to have worked, not all the time for everybody, but sufficiently.
  • +
  • Using one HackMD for twitch and zoom was a good idea.
  • +
  • Provide plan for the day (including breaks and exercise plan) on top of HackMD and mention it at the beginning of the day.
  • +
  • When talking about HackMD, please share it, it gives people something to +look at.
  • +
  • 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.
  • +
+

Installation and tools

+
    +
  • +

    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.

    +
  • +
  • +

    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)

    +
    +

    [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?

    +
    +
  • +
+

Presenting and coordinating

+
    +
  • Coordination plan should be continuously reviewed.
  • +
  • Strong director role is needed.
  • +
  • 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.
  • +
  • Make it clear what someone needs to have open: Screenshare, HackMD, your terminal. You get links to the episodes from HackMD.
  • +
  • Avoid breaks between exercise explanation and doing exercise.
  • +
  • Clearly mark interruptions/speaking up during presentations as interruption (as in: not part of the presentation).
  • +
  • Spotlight video changes every time screenshare changes: It is defininitely still important to warn before stopping screen sharing (more than before)
  • +
  • Announcing "I'm about to take the screenshare" and waiting two seconds works +well.
  • +
  • Share screen for what you are talking about. Makes editing a bit easier.
  • +
  • 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.
  • +
+

Lesson content

+
    +
  • Staging area: as usual, a difficult episode +
      +
    • What parts of the episode is a dependency for other parts of CodeRefinery?
    • +
    • Remove it?
    • +
    • Make it clear it is advanced/optional/you won't get it yet, when it is taught?
    • +
    • Move it to the end?
    • +
    +
  • +
+

Communication with participants

+
    +
  • Indico: select "none" after selecting some registrants to for example sending emails (otherwise selection remain).
  • +
  • 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.
  • +
  • As for the "team registrations", as long they include an EL, we should send an acceptance ASAP.
  • +
  • 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.
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/blog/2022/05/04/improving-workshop-registration/index.html b/branch/rkdarst--registration/blog/2022/05/04/improving-workshop-registration/index.html new file mode 100644 index 000000000..bc8a9c4ad --- /dev/null +++ b/branch/rkdarst--registration/blog/2022/05/04/improving-workshop-registration/index.html @@ -0,0 +1,717 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Our plans to improve our workshop registration process + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Our plans to improve our workshop registration process

+ + + + +
+ +

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 297 registrants which is a +record for us.

+

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.

+

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.

+

Below we summarize our observations and strategies for the upcoming events.

+

Goals of a good registration

+
    +
  • +

    Avoid chaos during the workshop

    +
      +
    • Avoid misunderstandings about registration types
    • +
    • Teams are clear and require minimum effort from organizers
    • +
    +
  • +
  • +

    Be able to predict attendance, avoid major disappointments

    +
  • +
  • +

    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)

    +
      +
    • E.g. not being bound only to Indico or something else that needs to be installed
    • +
    +
  • +
  • +

    Collect good information on participants for reporting later

    +
  • +
  • +

    Registration does not have to ever close

    +
      +
    • Continued registrations allow people to join halfway through
    • +
    • What needs does this have?
    • +
    +
  • +
  • +

    Editable by organizers (without making a copy by exporting)

    +
      +
    • e.g. exporting Indico to spreadsheet makes a copy, if people modify their registration our copy is invalid
    • +
    • Google Docs allows a form to be directly connected to a spreadsheet, we can modify old registrations while new ones come in
    • +
    +
  • +
+

Lessons learned from a recent event

+
    +
  • Unclear what registration options mean, people sign up for Zoom and don't show up
  • +
  • We have to manage teams ourselves, which requires too much communication and +manual work. Teams should be able to do this themselves.
  • +
  • Scheduling teams is hard, must optimize for this and avoid all ambiguity
  • +
  • Registration coordinator shouldn't teach (much, certainly not early on)
  • +
  • Communication and registration is the same person or same two persons
  • +
  • Communication/registration and teaching coordination should not be the same person
  • +
  • Indico is a good tool but we need to remove old copy-pasted questions/options and streamline
  • +
  • Allow teams to register with one contact point only
  • +
  • Merging teams is hard in indico
  • +
  • Adjusting teams is hard in indico
  • +
  • Communication/registration/coordination is a full time job for two weeks prior to the workshop
  • +
  • Question about availability is too often misunderstood: ask differently
  • +
  • Optimize for fewer emails since these are difficult to delegate
  • +
  • For exercise leads it is confusing whether to choose staff registration or regular registration
  • +
  • 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"
  • +
  • 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
  • +
  • Team registrations seem to have worked though and they seem to have the only +groups that "survived" to the end.
  • +
  • Local organizers could choose to use a centrally organized zoom if they +wanted - as long as they managed the teams themselves
  • +
+

Suggestions for improving our previous registration form

+
    +
  • "affiliation or university": have a list of institutions + "other" * free +text for other institutions or companies not listed
  • +
  • can we decentralize registration to groups and partners? +
      +
    • groups/partners scale as far as they like to as many helpers as they have
    • +
    +
  • +
  • questions on form +
      +
    • "do you want to participate in Stockholm? click here" -> another form
    • +
    • "in Aalto" -> another form
    • +
    • none of the above -> central form +
        +
      • group registration (exercise lead? or anybody as proxy?)
      • +
      • register as exercise lead and want to help out a "random" group
      • +
      • want to be part of a group -> click here but we can't guarantee a helper, especially if you register late
      • +
      • want to only watch alone
      • +
      +
    • +
    • also offer options to get informed for those unsure/undecided +
        +
      • yes
      • +
      • "interested"
      • +
      +
    • +
    +
  • +
  • standardized reporting form for partners
  • +
+

How to manage teams?

+
    +
  • Teams could handle some issues/setup themselves
  • +
  • They need some templates to send information
  • +
  • Which information should be sent by CR and which by the local organizers?
  • +
  • Need to get statistics and feedback from the local groups
  • +
  • Need to clarify if there will be "general" helpers in addition to team helpers
  • +
  • Larger project partners will probably prefer offering in-person exercise groups
  • +
  • How to deal with registration in the wrong form if we have several forms?
  • +
  • Each partner needs to clearly commit to a certain level of support and size
  • +
  • How to self-organize teams: +
      +
    • "helpers, rename yourself and join a room that does not have helpers yet"
    • +
    • "learners, if you are in a room that is too empty or too full, join another one"
    • +
    • this is to avoid rooms that are too full or too empty, or without helpers, or avoiding communicating which days an EL is unavailable
    • +
    • what if one exercise lead or room is more popular than another room?
    • +
    • how about continuity between days?
    • +
    +
  • +
  • What to do with solo registrations who are not part of a group and want to be +in an exercise group? +
      +
    • Is pairing up happening locally or centrally?
    • +
    +
  • +
+

Comments on a mock-up registration form

+

We have together reviewed an example +form and collected comments:

+
    +
  • Problems: "team organized by us" is not separated from "self-organized team"
  • +
  • The "probably not but send info" does not need to be asked for each day separately
  • +
  • But it's nice to offer the possibility to stay informed and decide later
  • +
  • Nice to have one form both for staff and everyone else to avoid the confusion that we saw at the previous event
  • +
  • "observer": let them decide whether they want emails or not
  • +
  • "how do you plan on attending" +
      +
    • Option 1: +
        +
      • Maybe confusing if somebody selects both zoom and in person
      • +
      • In-person breakout delegated to the local organization
      • +
      +
    • +
    • Option 2:
    • +
    +
  • +
  • Local rooms +
      +
    • Ask this earlier
    • +
    +
  • +
  • Teams +
      +
    • Ask this question earlier
    • +
    +
  • +
  • It is important that registrants can change their choices
  • +
  • In general, Radio buttons are nicer than dropdowns because you get to see the answers right away +
      +
    • But dropdown takes less screen space
    • +
    +
  • +
+

What if we get asked for help with creating a registration page for a local partner?

+
    +
  • We need to communicate who we share data with and ask for consent
  • +
  • We document what we ask and what we recommend partners to ask
  • +
  • We document which privacy policy we follow and which privacy standards +we require
  • +
  • We could offer a form/event if some local organizers need a separate +form but do not want to set it up themselves
  • +
+

Starting point for the new registration form

+
    +
  • OS +
      +
    • Dropdown
    • +
    +
  • +
  • Discipline +
      +
    • Dropdown
    • +
    +
  • +
  • Name +
      +
    • Open
    • +
    +
  • +
  • Email +
      +
    • Open
    • +
    +
  • +
  • Affiliation +
      +
    • Open
    • +
    • Has not been used for reporting yet but the information is good to +have
    • +
    +
  • +
  • Country +
      +
    • Dropdown
    • +
    +
  • +
  • Team name +
      +
    • Open
    • +
    +
  • +
  • Permission to give contact details to breakout room organizer +
      +
    • Yes/no dropdown
    • +
    +
  • +
  • Other notes to organizers +
      +
    • Open
    • +
    +
  • +
  • Room +
      +
    • Open
    • +
    +
  • +
  • Which days attending +
      +
    • Radio buttons
    • +
    +
  • +
  • Type of attendee +
      +
    • Radio buttons
    • +
    +
  • +
  • Do you want to attend in Zoom or follow live-stream only? +
      +
    • Dropdown/Radio buttons
    • +
    +
  • +
+

Conclusions

+
    +
  • Central registration is in Indico
  • +
  • We can offer a copy of our Indico template for a separate event for local partners who cannot use a local +registration system
  • +
  • Local partners are welcome to use their own registration systems
  • +
  • Teams can register as a team with a single contact point and the contact point does not have to be an exercise lead
  • +
  • We offer the possibility for individual learners and individual exercise leads to self-join exercise rooms
  • +
  • Workshop limits: +
      +
    • in terms of Twitch: it seems one bottleneck could be the collaborative HackMD document
    • +
    • in terms of exercise groups: the number of volunteers but also groups without exercise leads can be useful
    • +
    +
  • +
+

Follow-up steps

+
    +
  • Share a mock-up form soon with stakeholders for feedback via email and during a team meeting
  • +
  • Explain the setup clearly and concisely, directly in the workshop template
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/blog/2022/05/18/measuring-impact/index.html b/branch/rkdarst--registration/blog/2022/05/18/measuring-impact/index.html new file mode 100644 index 000000000..82c0c1a24 --- /dev/null +++ b/branch/rkdarst--registration/blog/2022/05/18/measuring-impact/index.html @@ -0,0 +1,664 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Outcomes from online hackathon about measuring the impact of CodeRefinery workshops + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Outcomes from online hackathon about measuring the impact of CodeRefinery workshops

+ + + + +
+ +

Introduction

+

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.

+

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:

+
    +
  • When we operate online and hybrid, we are accessible to many more styles of +attendance (and different measurements, such as live-stream viewers).
  • +
  • We have an excellent report as part of +coderefinery.org, this will be +split to a separate repository that is usable separately.
  • +
  • Tune our daily feedback questions and provide more time and motivation for +this (see below).
  • +
  • Our quantitative measures include number of registrations, number of known +attendees (in person/online), and number of unknown attendees (live-stream +viewers).
  • +
  • Our qualitative measures include text-based feedback per day and also a +post-workshop survey.
  • +
+

How did we measure attendance and impact up to now?

+

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 here today +represent the number of registrants and the real number of participants is +probably lower.

+

In addition, we have collected pre-workshop +survey data which was +part of the registration process and post-workshop +survey data which we +collect 3-6 months after a workshop (we have not been very consistent with the +exact intervals).

+

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 interesting +data but it wasn't +really driving lesson changes.

+

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.

+

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.

+

Discussion

+

The main points of our discussion were:

+
    +
  • The number of participants per country is still an important thing to +measure, even if it may not be 100% accurate. +
      +
    • We can get that from registrations and Twitch data.
    • +
    • 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.
    • +
    +
  • +
  • How can we measure less but have more meaningful results while not adding too much +work? +
      +
    • We should not try to achieve perfection. Some data / details cannot be +collected.
    • +
    • We get some feedback via email also.
    • +
    • We could interview individual participants or groups for feedback / +impressions on the workshop +
        +
      • That would give more profound insights on how did the students feel.
      • +
      • We could ask for volunteers at the beginning of the workshop.
      • +
      • Conduct the interview at the end, and turn it into a blog.
      • +
      +
    • +
    +
  • +
  • We should not forget people take workshops for different reasons +
      +
    • Do some participants re-take a workshop for more in-depth knowledge? If so, are they attending partially?
    • +
    • 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.
    • +
    +
  • +
  • Do we track how did people learn about the workshop? +
      +
    • Currently in the pre-workshop survey, but we should do it in the +registration.
    • +
    +
  • +
  • How to get feedback that helps us improve? +
      +
    • We could ask: why did you decide to stop following the stream?
    • +
    • We do ask: what did you find useful or not so useful?
    • +
    +
  • +
  • The HackMD feedback is one of the most important ways for us to improve the +lessons, as opposed to the pre-workshop survey. +
      +
    • The results need to be interpreted and compiled manually.
    • +
    +
  • +
  • Yet, we ask for the HackMD feedback in the last 5 min of the days, right as +people are leaving. +
      +
    • Consider improvements, such as asking before, or during, the last lesson.
    • +
    • Provide sufficient time for this, discuss the feedback as it comes in to +motivate it.
    • +
    +
  • +
  • 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".
  • +
  • Our current (early 2022 and earlier) post-workshop survey questions are +found at: +https://github.com/coderefinery/post-workshop-survey#survey-questions
  • +
  • NeIC perspective: +
      +
    • Ask project partners / stakeholders how do they benefit from CodeRefinery +training and how we can improve this
    • +
    +
  • +
  • How can we improve response rate? +
      +
    • Even shorter and clearer questionnaire
    • +
    • Good timing for when the survey is sent to participants, it seems that +Monday is the best day to send them out
    • +
    +
  • +
  • How can we learn why somebody stopped? +
      +
    • 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
    • +
    • 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)
    • +
    • 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)
    • +
    • 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
    • +
    • 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
    • +
    +
  • +
+

What will we change?

+

Registration (in addition to a previous discussion)

+
    +
  • We do ask: country and academic discipline +
      +
    • Also should allow multiple selections to mark interdisciplinary work
    • +
    +
  • +
  • Here we could also ask: career stage and how did you you learn about +workshop?
  • +
  • For group registrations it might get a bit tricky: +
      +
    • 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)
    • +
    • Make it possible and encourage the contact person to update the +registration form, e.g. at the end of the workshop
    • +
    +
  • +
+

Pre-workshop survey

+
    +
  • Integrate selected questions from the pre-workshop survey into the registration
  • +
  • In hindsight the pre-workshop data has not been used to change workshop lessons +
      +
    • Live-feedback (turned into issues turned into lesson/program changes) has +been the main feedback loop
    • +
    • Some of the questions can be turned into icebreaker question
    • +
    +
  • +
+

Statistics page

+
    +
  • Registration numbers +
      +
    • Convert from JSON to YAML (less error prone)
    • +
    • Make a separate repository
    • +
    +
  • +
  • Number of stream viewers +
      +
    • Combine registration numbers with streaming numbers on https://coderefinery.org/about/statistics/
    • +
    • Present views per country (it seems this is non-downloadable)
    • +
    • Present views over time (Twitch provides this data per 10-minute interval)
    • +
    +
  • +
+

Live-feedback (HackMD)

+
    +
  • Integrate feedback into the lesson itself, e.g. the last 10 min of the +workshop are dedicate to filling it in
  • +
+

Post-workshop survey

+
    +
  • What to ask straight after the workshop and what to ask later? Separate +survey?
  • +
  • Could be integrated to the pre-workshop survey because it can be updated
  • +
  • Update questions: +
      +
    • we could add the question: what would you like to learn more?
    • +
    • Maybe condense a bit (less text and repetition)
    • +
    • Remove suggestive questions if any
    • +
    • add academic field
    • +
    +
  • +
  • What data to request from groups / partners? +
      +
    • Number of participants
    • +
    • How did they like the event
    • +
    +
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/blog/2022/10/17/future-of-teaching/index.html b/branch/rkdarst--registration/blog/2022/10/17/future-of-teaching/index.html new file mode 100644 index 000000000..08397154d --- /dev/null +++ b/branch/rkdarst--registration/blog/2022/10/17/future-of-teaching/index.html @@ -0,0 +1,518 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery teaching strategies and the future of teaching + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

CodeRefinery teaching strategies and the future of teaching

+ + + + +
+ +

This is the index page of the Future of +Teaching series.

+

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. This series of blog posts will +discuss what we did and how you can learn from it.

+

So, what is the future of teaching? For type of practical, hands-on +learning, we could try to classify learning situations into three +types:

+
    +
  • Very large courses and massive open online courses (MOOC),where +individual interaction isn't possible.
  • +
  • Small-medium courses, 10-30 people, with traditional classroom-type +interactions.
  • +
  • One-on-one or small-group mentoring.
  • +
+

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: The middle layer +got squeezed out: 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.

+

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 our +manuals.

+

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.

+

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.

+

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):

+ +

See also

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/blog/2022/10/21/python-for-scicomp/index.html b/branch/rkdarst--registration/blog/2022/10/21/python-for-scicomp/index.html new file mode 100644 index 000000000..f41f9fc7a --- /dev/null +++ b/branch/rkdarst--registration/blog/2022/10/21/python-for-scicomp/index.html @@ -0,0 +1,477 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Python for Scientific Computing open for registration and collaborators + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Python for Scientific Computing open for registration and collaborators

+ + + + +
+ +

Our next workshop, Python for Scientific +computing, +is ready for you! Take part in different ways:

+
    +
  • +

    If you want to learn, you can register. Like all of our livestream +courses, +there are diverse ways to attend based on your needs.

    +
  • +
  • +

    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.

    +
  • +
  • +

    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.

    +
  • +
+

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 +material and +teaching is open-source before, during, and after the course.

+

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.

+

If you want to contribute more (or see how we do it), join the +CodeRefinery chat and +introduce yourself.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/blog/2022/10/24/parallel-chat/index.html b/branch/rkdarst--registration/blog/2022/10/24/parallel-chat/index.html new file mode 100644 index 000000000..7374b2093 --- /dev/null +++ b/branch/rkdarst--registration/blog/2022/10/24/parallel-chat/index.html @@ -0,0 +1,563 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Parallel chat ("HackMD") and scaling teaching + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Parallel chat ("HackMD") and scaling teaching

+ + + + + + +
+ +

Part of a series on the Future of +Teaching

+

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.

+

Our solution is "parallel chat", or as we typically call it "HackMD" +after the service we started using, hackmd.io - 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.

+

Demonstration of HackMD

+

There are a variety of reasons this is so good:

+
    +
  • You can have multiple people asking and answering at the same time +(not possible with voice, and linear chat gets confusing with)
  • +
  • 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.
  • +
  • People can ask anonymously - which encourages questions from those +who would usually be silent in courses.
  • +
  • Equally, questions don't distract everyone, so there is no pressure +to be quiet to let the course go on.
  • +
  • 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.
  • +
  • By having more questions asked, you can get much more feedback while +teaching - so much you have to be careful to not be overloaded!
  • +
  • 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.
  • +
+

Just look at the number of questions in our old courses, one 3.5-hour +day of our May 2022 +workshop - +and this is day 1, when people didn't yet know how it worked.

+

But there are some disadvantages:

+
    +
  • An absolute flood of information, which will 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.
  • +
  • Another window for people follow. Like above, we warn people to +focus on the learning and parallel chat only when there is time.
  • +
  • It's different, so needs some explanation (but we've seen people +catch on very quickly once they see it).
  • +
+

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 - always 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:

+
    +
  • 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.
  • +
  • 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.
  • +
  • We often use it as an icebreaker as a demo. Maybe not everyone +understands it.
  • +
  • It can also be used for lightweight polls: learners can +1 or add +a character to a line to make simple bar graphs.
  • +
  • Like we said above, it's not a perfect tool, but easy to use and fun.
  • +
  • A "HackMD manager" watches it and tries to keep things organized, +adds section headings, and so on. This makes it easy.
  • +
  • Remember, new content only to the bottom! People can't go following +multiple sections.
  • +
+

We don't have unlimited scaling and there are some other problems, +though. Some possible issues that may come up:

+
    +
  • To make this really good, you need at least one person focusing on +the parallel chat - or at least two co-instructors. In workshops of +our size, this hasn't been a big issue, though - it provides a good +task for helpers.
  • +
  • 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.
  • +
  • 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.
  • +
+

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...

+
    +
  • Lack of helpers to answer in parallel - fewer answers ⇒ fewer +questions. Fewer questions ⇒ less time looking at it ⇒ less +motivation to ask questions.
  • +
  • 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.
  • +
+

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.

+

See also:

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/blog/2022/10/31/co-teaching/index.html b/branch/rkdarst--registration/blog/2022/10/31/co-teaching/index.html new file mode 100644 index 000000000..1a5663f29 --- /dev/null +++ b/branch/rkdarst--registration/blog/2022/10/31/co-teaching/index.html @@ -0,0 +1,508 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Co-teaching and scaling up + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Co-teaching and scaling up

+ + + + + + +
+ +

Co-teaching

+

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 +parallel chat, +but a significant part also comes from co-teaching, the topic +of this article.

+

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.

+

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 parallel chat 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.

+

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.

+

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.

+

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.

+

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.

+

See also:

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/blog/2022/11/07/reverse-hybrid/index.html b/branch/rkdarst--registration/blog/2022/11/07/reverse-hybrid/index.html new file mode 100644 index 000000000..a22897b0d --- /dev/null +++ b/branch/rkdarst--registration/blog/2022/11/07/reverse-hybrid/index.html @@ -0,0 +1,510 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Reverse hybrid teaching + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Reverse hybrid teaching

+ + + + + + +
+ +

Part of a series on the Future of +Teaching

+

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?

+

We've found a surprising solution which we call reverse hybrid. +Surely others have thought of this, and maybe there is even a proper +name.

+

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.

+

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.

+

But what do we lose? Do we lose interaction with instructors? As +our posts on co-teaching and parallel chat 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.

+

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 parallel chat 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.

+

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 no longer have to teach +alone, which is a mindset change more than anything.

+

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?

+

See also

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/blog/2022/11/08/lessons-learned-Sep-2022/index.html b/branch/rkdarst--registration/blog/2022/11/08/lessons-learned-Sep-2022/index.html new file mode 100644 index 000000000..80a617701 --- /dev/null +++ b/branch/rkdarst--registration/blog/2022/11/08/lessons-learned-Sep-2022/index.html @@ -0,0 +1,602 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Lessons learned from the Sep 2022 online workshop + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Lessons learned from the Sep 2022 online workshop

+ + + + +
+ +

September 20-22 and 27-29, 2022, we held again our CodeRefinery online +workshop (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 our first online workshop +2020 and the +May 2021 +workshop.

+

We have identified the following main issues that we want to address for future events:

+
    +
  • Registration process is still too complicated.
  • +
  • We are asking ourselves how to further scale without being completely overwhelmed by coordination/communication/synchronization.
  • +
  • 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.
  • +
  • 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.
  • +
+

Registration

+
    +
  • We still need a more lightweight system registration. +
      +
    • This is a balancing act between guiding people and trusting them to self-organise.
    • +
    +
  • +
  • Could we actually get away with no registration at all? How to get stats then? +
      +
    • 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. +
        +
      • Part of it can be via the icebreaker questions.
      • +
      +
    • +
    +
  • +
  • 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.
  • +
  • We could have registration but let people self-organise more: +
      +
    • Offer HackMD, exercise lead zoom, exercise Zoom, stream and inform people about those resources.
    • +
    • Give hints about different ways to participate but no rigid instructions.
    • +
    +
  • +
  • We could leave team registration completely to the partners or participants to handle: +
      +
    • Tell that they could summon teams in their organisation communication channels.
    • +
    • They could indicate somewhere that they are open for managing additional teams.
    • +
    • Tell organisations that they can organise their own registration.
    • +
    +
  • +
  • Exercise leader registration was confusing (too many forms to fill out).
  • +
  • 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.
  • +
  • How to deal with late registrants? +
      +
    • Should they get the Zoom link or only HackMD? +
        +
      • If not we should take those options away from the registration form. Maybe have a last minute registration form as a separate one.
      • +
      +
    • +
    +
  • +
  • Consider adding others who are helping to Indico (our registration system) as managers :grin:.
  • +
  • We could communicate clearer that also participating part of the workshop is possible and encouraged.
  • +
+

Workshop format

+
    +
  • 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.
  • +
  • Communicate better that even if the Git part gets too difficult, the second week may still be worth watching and again easier to comprehend.
  • +
  • Generally we observed a significant no-show rate (over 50%).
  • +
  • Maybe this format is too big for the resources/time that we have as organisers. +
      +
    • Maybe the task distribution was not clear/visible.
    • +
    • It at least difficult to get enough instructors to commit
    • +
    +
  • +
  • Learners were not that motivated in joining the Otaniemi in-person (daily decreasing numbers).
  • +
  • Is September too crowded with other events?
  • +
  • Have we saturated the local market?
  • +
  • Workshop going over lunch time (until 13:30 local time) was an issue at least in JYU and CSC, +
      +
    • People managed when topic to come after break was announced before break so that they knew if they could skip without losing the thread.
    • +
    +
  • +
  • We could try flipped learning: have people watch videos / read the docs and then come on-site/online to discuss and solve problems
  • +
  • Should we do more asynchronous teaching/learning?
  • +
+

Coordination

+
    +
  • Establish the process according to the experience gained from this and previous workshops: +
      +
    • Make step-by-step instructions in manuals on how to arrange such events.
    • +
    • Put everything that participants will need for the workshop already into the Indico confirmation message. +
        +
      • Info from emails sent could be also in manuals except for the links.
      • +
      +
    • +
    +
  • +
  • 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.
  • +
+

Zoom and Twitch

+
    +
  • Ask exercise leads (ELs) not to speak in learners Zoom while lecturers speak in Twitch.
  • +
  • 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.
  • +
  • Utilise Zoom annotate in co-teaching.
  • +
  • Exercise Zoom rooms: +
      +
    • Tech questions room: difficult to follow if someone actually goes there. +
        +
      • It would be better to join the tech room during breaks, or before/after the lectures.
      • +
      +
    • +
    • Quiet room had 1-3 participants always.
    • +
    +
  • +
  • Exercise room instructions screen-share: We did it from separate device so we had the host computer free to operate stuff.
  • +
  • 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).
  • +
  • More interaction in video room: +
      +
    • Since there was so little interaction and not enough exercise time: some ELs felt that they "are not needed"
    • +
    • Too few exercises or too short exercise time and hence not enough possibility for interaction.
    • +
    +
  • +
  • Exercises felt too short (because many participants were software-unprepared).
  • +
  • Navigation problems among different webpages continues to be an issue. Few suggestions on how we could solve it have been and are being discussed here.
  • +
+

Collaborative notes

+
    +
  • HackMD goes to Twitch chat anyway so maybe no point in keeping it as a secret. +
      +
    • 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.
    • +
    +
  • +
  • HackMD started to be slow even if it should not with ~100 participants. +
      +
    • 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.
    • +
    • 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.
    • +
    +
  • +
  • Later in the workshop we deployed our own HedgeDoc instance, which worked quite well.
  • +
+

Installation and tools

+
    +
  • 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.
  • +
+

Lesson content

+
    +
  • 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.
  • +
  • Provide snapshots and starting points for those who have not done the previous exercises.
  • +
  • Topics in Day 4 (at least) would deserve a longer lesson.
  • +
  • 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).
  • +
  • Especially in in-person: the Twitch sessions felt long (since there was so little interaction in the in-person rooms).
  • +
+

Communication with participants

+
    +
  • Add all sessions to the CodeRefinery calendar.
  • +
  • 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.
  • +
+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/blog/2022/11/08/mastodon/index.html b/branch/rkdarst--registration/blog/2022/11/08/mastodon/index.html new file mode 100644 index 000000000..5d8462d37 --- /dev/null +++ b/branch/rkdarst--registration/blog/2022/11/08/mastodon/index.html @@ -0,0 +1,519 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery Mastodon account + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

CodeRefinery Mastodon account

+ + + + + + +
+ +

For the obvious reasons, CodeRefinery is looking into a Mastodon +account. You can now find us at +@coderefinery@fosstodon.org.

+

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.

+

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?

+
    +
  • https://mastodon.help gives a basic introduction of the how and +why. https://fedi.tips/ gives a longer FAQ (and a separate +introduction).
  • +
  • Usernames are like emails with a username and a server name, +@username@server.name.
  • +
  • To join, you choose a server that you feel comfortable in, and they +all communicate. Some recommendations are below.
  • +
  • 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.
  • +
  • When in doubt, just join somewhere that looks reasonable - don't let +the Paradox of Choice hold back progress!
  • +
+

If you are just joining, you can start out by following CodeRefinery - +copy @coderefinery@fosstodon.org to your search and follow it. You +may be interested in following some of the people that we follow to +seed your list.

+

Deciding a server:

+
    +
  • We chose https://fosstodon.org (FOSS = "free and open source +software") to focus on the software and technology side of things.
  • +
  • For others in academia or research, +https://fediscience.org/server-list.html is a very nice list of +other interesting servers.
  • +
  • https://mastodon.social/ is run by the non-profit that coordinates +the Mastodon open-source project, but that does not mean you +should necessarily prefer it.
  • +
  • Do a web search for server lists. There are both news articles with +broad recommendations, and searchable lists with many servers for +specialized topics.
  • +
+

What you should know about Mastodon (especially vs. Twitter):

+
    +
  • 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.
  • +
  • It's not designed for low-effort replies (quote-replies) since it +makes engagement farming and negative attention. You can reply to +posts with the reply button on each post. (don't forget you can +click on post to see the thread).
  • +
  • Use hashtags to make things searchable, there is no full-text search +(to make it harder for random attacks based on opinions)
  • +
  • "Fediverse" ("federated universe") is the term used to refer to the +entire network of Mastodon servers (and more) that can communicate.
  • +
  • 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.
  • +
+

We hope to see you there!

+

See also

+ + + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/blog/2022/11/14/livestreaming-courses/index.html b/branch/rkdarst--registration/blog/2022/11/14/livestreaming-courses/index.html new file mode 100644 index 000000000..dc2d4c027 --- /dev/null +++ b/branch/rkdarst--registration/blog/2022/11/14/livestreaming-courses/index.html @@ -0,0 +1,548 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Livestreaming courses + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Livestreaming courses

+ + + + + + +
+ +

Part of a series on the Future of +Teaching

+

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.

+

Start of the livestream idea

+

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.

+

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 parallel chat ("HackMD") for +questions and +co-teaching, 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 could move on to +the next step without losing essential points like interactivity or +engagement.

+

How livestreaming works for our courses

+

Then came livestreaming. 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 Research Software +Hour.

+

The fully "proper" livestreamed course was 2021 February, our Intro +to scientific computing/HPC +Kickstart, +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.

+

How do we actually do it? Instructors teach by Zoom, but there are +no learners or helpers there. The Zoom windows are captured by OBS +(Open Broadcaster Software), 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.

+
+

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.

+
+

Evaluation

+
+

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!

+
    +
  • Feedback from Summer 2021 HPC Kickstart
  • +
+
+

In general, feedback was positive.

+

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 parallel chat +anyway. And when the audience is not in the stream, you can publish +videos immediately with no privacy risk - which is great for +accessibility.

+

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.

+

See also

+ +
+

[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.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/blog/2022/11/21/video-publishing/index.html b/branch/rkdarst--registration/blog/2022/11/21/video-publishing/index.html new file mode 100644 index 000000000..012eea3e2 --- /dev/null +++ b/branch/rkdarst--registration/blog/2022/11/21/video-publishing/index.html @@ -0,0 +1,521 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Video publishing supports more learning styles + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Video publishing supports more learning styles

+ + + + + + +
+ +

Part of a series on the Future of +Teaching

+

What if all the talking in a course didn't disappear right after the +course was over?

+

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 hope 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.

+

This is part of why we developed livestream teaching: we want to +separate the instructor interaction from learner interaction, so that +there is no privacy risk whatsoever when recording. This only works if the +livestream is engaging enough, but our previous posts show how we +handled that problem.

+

In order for a video to be useful, it has to be published quickly. +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 extremely useful. We can't have a long publishing +process with this.

+

So, with livestreaming, what do we get?

+
    +
  • 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.
  • +
  • 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.
  • +
  • Learners can catch up immediately or refresh themselves on what they +saw going off into the future.
  • +
  • If learners know videos will be available, they +are suddenly much more free to go with the flow of the course.
  • +
+

We actually made our own tool, +ffmpeg-editlist, +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.

+

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 (stats from Python for +Scientific Computing 2022). 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.

+

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.

+

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.

+

Read more:

+ +

[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.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/blog/2022/12/05/registration/index.html b/branch/rkdarst--registration/blog/2022/12/05/registration/index.html new file mode 100644 index 000000000..a8f70cc6b --- /dev/null +++ b/branch/rkdarst--registration/blog/2022/12/05/registration/index.html @@ -0,0 +1,516 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Registration and learner management + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+ +

Registration and learner management

+ + + + + + +
+ +

Part of a series on the Future of +Teaching

+

Registration and managing learners can be hard when there are hundreds +of them, but if you plan out a course well, it's manageable.

+

In a small course, you register and people come, and everything else +gets figured out from there. When you have more than a hundred people +coming, perhaps with pre-made teams, +registration can be much, much harder. Luckily, if +you plan the course considering that registration will be a major +task, it can work out OK.

+

Basic registration strategies

+

Basic registration would be easy: you let people sign up, they can +get emails. Since we +livestream, people can +even attend without registering, which we think is important (providing +personal data is not necessary to attend - this is by design). +Registering allows someone to receive emails, and it's relatively easy +to send different emails to different groups if desired (for example, +those from our university get information on our local +online/in-person exercise sessions).

+

At Aalto University, this is what we have done for most online +courses, and it works well.

+

Registration including teams

+

If we want to provide teams as a service, things get more +involved. The main idea of registering including teams is that we want +to make them pre-arranged and the constant day-after-day. We also want to +provide an exercise leader for each team (again the same one each day). +The in-person equivalent to that is "sit at a table with at group, that group +is your team". Our online version is much harder than this, since we +need to pre-plan a lot more. We could emulate this by randomly assigning +Zoom breakout rooms on day 1, and then ask people to join the same one +each day. But, we think that part of the benefit is assigning similar +teams (if you know someone, you are with them) and having it clear +that rooms will stay the same day-after-day.

+

So, to do this teams online, our registration system needs to:

+
    +
  • Accept the normal registration
  • +
  • Know a little bit about people to assign them to suitable teams (if +desired).
  • +
  • Provide a way for people to indicate pre-made teams.
  • +
  • Provide a way for us to see the information above easily and assign +the teams ...
  • +
  • ... and then send everyone a customized email with their team's room +number
  • +
  • And be able to quickly update this information based on last-minute +changes, send people new info, and not get overwhelmed with this +job.
  • +
+

This, especially the last one, turns out to be exceptionally hard. We +are working on ways to make this better:

+
    +
  • point1
  • +
  • point2
  • +
  • point3
  • +
+

Distributed registration

+

The livestream and reverse +hybrid approaches allow another +option: distributed registration. With this idea, we don't need a +central registration (or if we do, it can be only for general +information), and we let each local partner run a registration that +includes the teams - and let them deal with that locally in a smaller +and more manageable form.

+

Summary

+

We did a lot of great things with teams, but it was a lot +of work back then, and is still a lot of work now. Anyone running a +large course (that goes beyond "infodump to an audience") should +carefully consider how to make this manageable.

+ + +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/blog/TEMPLATE.md.template b/branch/rkdarst--registration/blog/TEMPLATE.md.template new file mode 100644 index 000000000..10c687902 --- /dev/null +++ b/branch/rkdarst--registration/blog/TEMPLATE.md.template @@ -0,0 +1,18 @@ ++++ +title = 'TITLE' +slug = "20ZZ/XX/YY/name" +description = "1-2 sentence description for social media previews" + +[extra] +authors = "NAME, NAME, NAME" ++++ + +Concise introduction. + +Body here. + +More body. + + +See also +* Optional but nice diff --git a/branch/rkdarst--registration/blog/image_01.png b/branch/rkdarst--registration/blog/image_01.png new file mode 100644 index 000000000..4108dccbb Binary files /dev/null and b/branch/rkdarst--registration/blog/image_01.png differ diff --git a/branch/rkdarst--registration/blog/image_02.png b/branch/rkdarst--registration/blog/image_02.png new file mode 100644 index 000000000..fc9242958 Binary files /dev/null and b/branch/rkdarst--registration/blog/image_02.png differ diff --git a/branch/rkdarst--registration/blog/image_03.png b/branch/rkdarst--registration/blog/image_03.png new file mode 100644 index 000000000..0b8621a10 Binary files /dev/null and b/branch/rkdarst--registration/blog/image_03.png differ diff --git a/branch/rkdarst--registration/blog/image_04.png b/branch/rkdarst--registration/blog/image_04.png new file mode 100644 index 000000000..fe25162fd Binary files /dev/null and b/branch/rkdarst--registration/blog/image_04.png differ diff --git a/branch/rkdarst--registration/blog/image_05.png b/branch/rkdarst--registration/blog/image_05.png new file mode 100644 index 000000000..8ec04ce65 Binary files /dev/null and b/branch/rkdarst--registration/blog/image_05.png differ diff --git a/branch/rkdarst--registration/blog/image_06.png b/branch/rkdarst--registration/blog/image_06.png new file mode 100644 index 000000000..892d0bc92 Binary files /dev/null and b/branch/rkdarst--registration/blog/image_06.png differ diff --git a/branch/rkdarst--registration/blog/image_07.png b/branch/rkdarst--registration/blog/image_07.png new file mode 100644 index 000000000..628c27906 Binary files /dev/null and b/branch/rkdarst--registration/blog/image_07.png differ diff --git a/branch/rkdarst--registration/blog/image_08.png b/branch/rkdarst--registration/blog/image_08.png new file mode 100644 index 000000000..68607afaf Binary files /dev/null and b/branch/rkdarst--registration/blog/image_08.png differ diff --git a/branch/rkdarst--registration/blog/index.html b/branch/rkdarst--registration/blog/index.html new file mode 100644 index 000000000..c75ca5e64 --- /dev/null +++ b/branch/rkdarst--registration/blog/index.html @@ -0,0 +1,482 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +

Blog posts

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/calendars/index.html b/branch/rkdarst--registration/calendars/index.html new file mode 100644 index 000000000..decdb0dad --- /dev/null +++ b/branch/rkdarst--registration/calendars/index.html @@ -0,0 +1,443 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + + +
+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/feedback.toml b/branch/rkdarst--registration/feedback.toml new file mode 100644 index 000000000..ff2ab312b --- /dev/null +++ b/branch/rkdarst--registration/feedback.toml @@ -0,0 +1,124 @@ +[[feedback]] +text = """ +I'm more conscious about the way I write programs and organize their 'organic' +growth. I try to modularize more and write proper tests. I also use git more +extensive to keep track about my different development branches +""" + +[[feedback]] +text = """ +The main thing I got out of the workshop is that I'm now extensively using the +issue-tracking systems on GitHub and GitLab. Also on one of my major projects +we have moved towards having shorter lived feature branches and using merge +requests for more frequent merges and less code divergence. I also started +using GitLab's issues system more frequently. It made it easier for people in +my lab to report bugs, and easier for me to keep track of them +""" + +[[feedback]] +text = """ +My code became much more 'sustainable' in the sense for others to +read/use/modify it. In detail the most significant is improved use of git +(forking workflow) and more strict 'purity' of functions. Use of PyCharm +increased speed of development +""" + +[[feedback]] +text = """ +I take more time to think about long term solutions than 'quick fixes' even if +it's short of time. Another aspect is that I try to make the code reproducible +in the sense of documentation, code readability, clear log files, etc, both for +helping myself and my collaborators +""" + +[[feedback]] +text = """ +My code is better documented, and I use version control much more. I have also +started writing more unit tests +""" + +[[feedback]] +text = """ +I write my codes now in such a way that the person who will be taking over my +job would have less time figuring out what is going on. The emphasis of writing +modular codes in the workshop was very helpful for me and for the people using +my code +""" + +[[feedback]] +text = """ +For me the most important thing was to learn to use git better. Now I make +frequent commented commits so it is far easier to see what I actually did for +me and others too +""" + +[[feedback]] +text = """ +This was an extremely useful workshop. Thank you very much! I wish I had known +this stuff already as a grad student 10+ years ago. It is now easier to +collaborate with co-developers and easier to keep things in order and +structured +""" + +[[feedback]] +text = """ +Constantly making sure my code is as accessible as possible to ensure future me +and others can understand and use it, i.e. writing explanatory comments +everywhere no matter how simple the code may be. +""" + +[[feedback]] +text = """ +Increased confidence. Sense of community (extremely valuable during the +pandemic times). The value of volunteering. +""" + +[[feedback]] +text = """ +I'm significantly more confident in navigating and creating versions and +branches in git and on GitHub. +""" + +[[feedback]] +text = """ +It was a great experience, it just did sum up all the necessary tools and step +to build more sustainable code. That saved me A LOT of time trying to figuring +out everything by myself!! :) +""" + +[[feedback]] +text = """ +I am an experienced developer and instructor and attended the workshop mainly +to help out. It did not change much for me in terms of the course content. +However, the course was am absolutely great experience for me in terms of +seeing how to conduct a massive online course with live participation. The +HackMD "backchannel" and breakout rooms with helpers are features I now +incorporate in teaching at my own university. +""" + +[[feedback]] +text = """ +Think much more before starting a coding project and overall better structure: +coding with a structure in mind (making modules, simplifying), using a +structured approach to coding (knowing which tools, which steps, doing reviews, +etc.), etc. +""" + +[[feedback]] +text = """ +I have a much broader understanding of these tools and why they are important. +I regularly use the tutorials and movies to help teach new incoming students in +between CodeRefinery workshops. +""" + +[[feedback]] +text = """ +The project team has a common understanding of why and how to track code +versions and collaborate on processing scripts +""" + +[[feedback]] +text = """ +More focus on that results and papers should be reproducible, ideally even for +referees. +""" diff --git a/branch/rkdarst--registration/img/favicon.ico b/branch/rkdarst--registration/img/favicon.ico new file mode 100644 index 000000000..a2df0fb66 Binary files /dev/null and b/branch/rkdarst--registration/img/favicon.ico differ diff --git a/branch/rkdarst--registration/index.html b/branch/rkdarst--registration/index.html new file mode 100644 index 000000000..e5bcdfc38 --- /dev/null +++ b/branch/rkdarst--registration/index.html @@ -0,0 +1,746 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+
+ + CodeRefinery logo + +

+ Watch the recordings from September 2022 CodeRefinery workshop! or check out the lessons themselves +
+
+ We got + new funding + until 2025! +

+
+
+

Training and e-Infrastructure for Research Software Development

+

+ 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. +

+ +

+ View + our vision + of the future of teaching + (or read + it). +

+ +

CodeRefinery provides

+

+

    +
  • + For organizations: an opportunity to pool competence + and offer more training and development opportunities than + they could individually. +
  • +
  • + For volunteers and the team: a community around teaching + and opportunity for skill development, both in pedagogy and + practical skills. +
  • +
  • + For learners: a welcoming and useful environment for + learning many necessary practical skills that may otherwise + not be explicitly taught. This can be through courses, + hackathons, and the like. +
  • +
+

+
+
+ +

Upcoming workshops and events

+ + +

Feedback and testimonials

+
+
    + + +

    I'm more conscious about the way I write programs and organize their 'organic' +growth. I try to modularize more and write proper tests. I also use git more +extensive to keep track about my different development branches +

    + +

    The main thing I got out of the workshop is that I'm now extensively using the +issue-tracking systems on GitHub and GitLab. Also on one of my major projects +we have moved towards having shorter lived feature branches and using merge +requests for more frequent merges and less code divergence. I also started +using GitLab's issues system more frequently. It made it easier for people in +my lab to report bugs, and easier for me to keep track of them +

    + +

    My code became much more 'sustainable' in the sense for others to +read/use/modify it. In detail the most significant is improved use of git +(forking workflow) and more strict 'purity' of functions. Use of PyCharm +increased speed of development +

    + +

    I take more time to think about long term solutions than 'quick fixes' even if +it's short of time. Another aspect is that I try to make the code reproducible +in the sense of documentation, code readability, clear log files, etc, both for +helping myself and my collaborators +

    + +

    My code is better documented, and I use version control much more. I have also +started writing more unit tests +

    + +

    I write my codes now in such a way that the person who will be taking over my +job would have less time figuring out what is going on. The emphasis of writing +modular codes in the workshop was very helpful for me and for the people using +my code +

    + +

    For me the most important thing was to learn to use git better. Now I make +frequent commented commits so it is far easier to see what I actually did for +me and others too +

    + +

    This was an extremely useful workshop. Thank you very much! I wish I had known +this stuff already as a grad student 10+ years ago. It is now easier to +collaborate with co-developers and easier to keep things in order and +structured +

    + +

    Constantly making sure my code is as accessible as possible to ensure future me +and others can understand and use it, i.e. writing explanatory comments +everywhere no matter how simple the code may be. +

    + +

    Increased confidence. Sense of community (extremely valuable during the +pandemic times). The value of volunteering. +

    + +

    I'm significantly more confident in navigating and creating versions and +branches in git and on GitHub. +

    + +

    It was a great experience, it just did sum up all the necessary tools and step +to build more sustainable code. That saved me A LOT of time trying to figuring +out everything by myself!! :) +

    + +

    I am an experienced developer and instructor and attended the workshop mainly +to help out. It did not change much for me in terms of the course content. +However, the course was am absolutely great experience for me in terms of +seeing how to conduct a massive online course with live participation. The +HackMD "backchannel" and breakout rooms with helpers are features I now +incorporate in teaching at my own university. +

    + +

    Think much more before starting a coding project and overall better structure: +coding with a structure in mind (making modules, simplifying), using a +structured approach to coding (knowing which tools, which steps, doing reviews, +etc.), etc. +

    + +

    I have a much broader understanding of these tools and why they are important. +I regularly use the tutorials and movies to help teach new incoming students in +between CodeRefinery workshops. +

    + +

    The project team has a common understanding of why and how to track code +versions and collaborate on processing scripts +

    + +

    More focus on that results and papers should be reproducible, ideally even for +referees. +

    + +
+
+

+ More feedback and testimonials + here. +

+ +
+
+
+ + + picture of a classroom + +

Training opportunities

+

+ We offer training opportunities to researchers from Nordic + research groups (but we aim to expand beyond Nordics) to learn + basic-to-advanced research computing skills and become confident + in using state-of-the-art tools and practices from modern + collaborative software engineering. +

+ More ›

+
+
+ +
+
+ + + wordcloud + +

Lesson materials

+

+ We develop and maintain training material on software best + practices for researchers that already write code. Our material + addresses all academic disciplines and tries to be as programming + language-independent as possible. +

+ More ›

+
+
+ +
+
+ + + image of a terminal + +

Code Repository Hosting

+

+ Our code repository hosting service is open and free for all + researchers based in Nordic universities and research institutes + and their collaborators. +

+ More ›

+
+
+ +
+
+ + ResearchSoftwareHour logo + +

Research Software Hour

+

+ Online stream/show about scientific computing and research + software. It is designed to provide the skills typically picked up + via informal networks: we explore and discuss tools and how we + program and compute. +

+ More ›

+
+
+
+ +

Latest news/blogs

+ + +

Stay informed and connected

+
+
+

Mastodon

+ @coderefinery@fosstodon.org, Joining hints + + +
+
+ +

Twitter

+ + +
+
+

Newsletter

+

+ This is a low traffic newsletter about our events and updates: One email every 1 or 2 months + (archives). +

+

powered by TinyLetter

+
+
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/lessons/contributing/index.html b/branch/rkdarst--registration/lessons/contributing/index.html new file mode 100644 index 000000000..d73d54eee --- /dev/null +++ b/branch/rkdarst--registration/lessons/contributing/index.html @@ -0,0 +1,447 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Contributing to our lessons + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Contributing to our lessons

+ + + +

We would love to see more contributions to our lessons. We are a normal open +source project on GitHub, and you can contribute via issues, pull requests, or +by discussing in our chat.

+

A good starting point is to either open a topic on our +chat or to open an issue on one of the +lesson repositories in our GitHub +organization where you can describe what you +would like to change to collect feedback and possibly also contributors.

+

If you are unsure which repository maps to what you would like to change, please +do not hesitate to ask in our chat.

+

No contribution is too small and ideas for changes are very often very good +ideas and we would love to work with you on making our lessons better and more +modular and even more relevant.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/lessons/index.html b/branch/rkdarst--registration/lessons/index.html new file mode 100644 index 000000000..46196315c --- /dev/null +++ b/branch/rkdarst--registration/lessons/index.html @@ -0,0 +1,520 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + +

Our lessons/material

+

This is not a strict division, but lessons can be classified as to +what is initially useful to yourself, to your group, and to the whole +community.

+

Lessons marked with (*) are part of a regular 6 half-day workshop.

+ +

Video recordings

+

A number of video recordings of CodeRefinery lessons and workshops and +Research Software Hour sessions can be +found on our YouTube +channel.

+

Other lessons by our partners and the CodeRefinery community

+

You can expect these to be open-source, reusable, in a git repository, and with +a community you can join and give contributions to:

+ +

Lessons we contributed to as instructors or helpers

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/lessons/other-projects/index.html b/branch/rkdarst--registration/lessons/other-projects/index.html new file mode 100644 index 000000000..5d8290052 --- /dev/null +++ b/branch/rkdarst--registration/lessons/other-projects/index.html @@ -0,0 +1,471 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Recommended material created by other organizations/projects + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Recommended material created by other organizations/projects

+ + + + +

Interesting organisations and projects to follow

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/lessons/reusing/index.html b/branch/rkdarst--registration/lessons/reusing/index.html new file mode 100644 index 000000000..2b2311b86 --- /dev/null +++ b/branch/rkdarst--registration/lessons/reusing/index.html @@ -0,0 +1,451 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Reusing/teaching our lessons + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Reusing/teaching our lessons

+ + + +

All of our material is open source and collaboratively developed: you are free +to teach it yourself if you would like, just make sure the distinction between +the "CodeRefinery" project and your workshop is clear.

+

Our lessons are designed to be generic, so that anyone can use them. If that +isn't the case, please help us make them so. Be aware that our lessons are +developed in a very agile manner, so keep up to date with the latest changes.

+

Please let us know if the material is helpful - it is important for us to +know whether this material has impact outside of our workshops. Some +courses/workshops we know of are listed below but we would like to list more.

+

License

+

Lesson material is licensed under CC BY 4.0 (however note, some old ones may be CC BY-SA). +Code examples: OSI-approved MIT license.

+

Derivative work based on our material

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/open-house/blog-posts/index.html b/branch/rkdarst--registration/open-house/blog-posts/index.html new file mode 100644 index 000000000..83b756067 --- /dev/null +++ b/branch/rkdarst--registration/open-house/blog-posts/index.html @@ -0,0 +1,463 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Work on blog posts + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + April 24, 2020 + +
+ + coderefinery open house logo + +
+

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.

+

Tentative list of articles:

+
    +
  • Online lessons, what we're working on, how we'll be delivering online workshops
  • +
  • Merge vs rebase
  • +
  • Nordic-RSE conference
  • +
  • NordicHPC tools
  • +
+

Anyone who would like to contribute to these articles or suggests new +topics is welcome to join!

+

We will collect notes in a shared +document. +Please note that this document will be archived in our Open House +event repository.

+

We first meet online at 9:00 am (UTC+1) via video (connection link +will be shared in our shared +document and then work on +the instructor training material. During the day, we will coordinate +the work through our Zulip chat +with possibilities to further discuss via video if necessary.

+

We conclude the day around 4:00 pm (UTC+1) by writing a short +/summary in our shared +document.

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/open-house/coderefinery_openhouse.jpg b/branch/rkdarst--registration/open-house/coderefinery_openhouse.jpg new file mode 100644 index 000000000..ad5d89dee Binary files /dev/null and b/branch/rkdarst--registration/open-house/coderefinery_openhouse.jpg differ diff --git a/branch/rkdarst--registration/open-house/coderefinery_openhouse.png b/branch/rkdarst--registration/open-house/coderefinery_openhouse.png new file mode 100644 index 000000000..9c830b2e8 Binary files /dev/null and b/branch/rkdarst--registration/open-house/coderefinery_openhouse.png differ diff --git a/branch/rkdarst--registration/open-house/credit/index.html b/branch/rkdarst--registration/open-house/credit/index.html new file mode 100644 index 000000000..46425c359 --- /dev/null +++ b/branch/rkdarst--registration/open-house/credit/index.html @@ -0,0 +1,451 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Making lessons citable and giving credits for contributors + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + October 02, 2020 + +
+ + coderefinery open house logo + +
+

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.

+

Anyone interested is welcome to contribute to discussion on how to realize these in practice!

+

We will collect notes in a shared +document. +Please note that this document will be archived in our Open House +event repository.

+

We first meet online at 9:00 am (CEST) / 10:00 am (EEST) via video (connection link +will be shared in our shared document. +If we decide on working individually during the day, we will coordinate +the work through our Zulip chat +with possibilities to further discuss via video if necessary.

+

We conclude the day around 12:00 pm (UTC+1).

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/open-house/index.html b/branch/rkdarst--registration/open-house/index.html new file mode 100644 index 000000000..d38421134 --- /dev/null +++ b/branch/rkdarst--registration/open-house/index.html @@ -0,0 +1,429 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/open-house/instructor-training-material/index.html b/branch/rkdarst--registration/open-house/instructor-training-material/index.html new file mode 100644 index 000000000..6e52c7f7e --- /dev/null +++ b/branch/rkdarst--registration/open-house/instructor-training-material/index.html @@ -0,0 +1,464 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Work on instructor training material + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + March 24, 2020 + +
+ + coderefinery open house logo + +
+

CodeRefinery is organizing a one day online "open house" dedicated to +work together on revising and +improving our instructor training +material. +Issues are filed +here, +notes from the first workshop can be in the shared +document, and we +are taking what each of us wants to work on. Input for the further +improvement are also very welcome.

+

Anyone who would like to contribute to the instructor training +material, or learn how to contribute to any CodeRefinery lesson in +general, is welcome!

+

We will collect nodes in a shared +document. +Please note that this document will be archived in our Open House +event repository.

+

We first meet online at 9:00 am (UTC+1) via video (connection link +will be shared in our shared +document and +then work on the instructor training material. During the day, we will +coordinate the work through our Zulip +chat with possibilities to +further discuss via video if necessary.

+

We conclude the day around 4:00 pm (UTC+1) by writing a short +blog/summary in our shared +document.

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/open-house/newsletter/index.html b/branch/rkdarst--registration/open-house/newsletter/index.html new file mode 100644 index 000000000..4a2bacf40 --- /dev/null +++ b/branch/rkdarst--registration/open-house/newsletter/index.html @@ -0,0 +1,464 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Writing newsletter articles and blog posts + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + August 24, 2020 + +
+ + coderefinery open house logo + +
+

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.

+

Tentative list of articles:

+
    +
  • Future mega-CR
  • +
  • Update on citable lessons and credit/visibility for instructor and helpers
  • +
  • Update on sustainability efforts?
  • +
  • Manuals : how they can be used for your lessons
  • +
  • git-pr
  • +
+

Anyone who would like to contribute to these articles or suggests new +topics is welcome to join!

+

We will collect notes in a shared +document. +Please note that this document will be archived in our Open House +event repository.

+

We first meet online at 9:00 am (CEST) / 10:00 am (EEST) via video (connection link +will be shared in our shared +document and then work on +the instructor training material. During the day, we will coordinate +the work through our Zulip chat +with possibilities to further discuss via video if necessary.

+

We conclude the day around 4:00 pm (UTC+1) by writing a short +/summary in our shared +document.

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/open-house/online-teaching/index.html b/branch/rkdarst--registration/open-house/online-teaching/index.html new file mode 100644 index 000000000..bc0afeab6 --- /dev/null +++ b/branch/rkdarst--registration/open-house/online-teaching/index.html @@ -0,0 +1,444 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Preparing for online teaching + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + March 20, 2020 + +
+ + coderefinery open house logo + +
+

We will meet on video (9:00 am, UTC+1) +and chat and discuss techniques, +solutions, and tricks for online teaching and collect our notes in a shared +document.

+

Anyone who would like to contribute or learn is most welcome!

+

We will conclude the day around 4:00 pm (UTC+1) by writing a short blog/summary +in our shared document.

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/open-house/training-material/index.html b/branch/rkdarst--registration/open-house/training-material/index.html new file mode 100644 index 000000000..869d9706b --- /dev/null +++ b/branch/rkdarst--registration/open-house/training-material/index.html @@ -0,0 +1,453 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Collaborative work on the training material + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + December 13, 2019 + +
+ + coderefinery open house logo + +
+

Welcome to the first CodeRefinery Open House!

+

The idea behind this event is to bring together people who are interesting in +contributing to the CodeRefinery training +material.

+

Anyone who would like to contribute, learn how to contribute to the +CodeRefinery training material is very welcome to join.

+

We will collect nodes in a shared document. +Please note that this document will be archived in our +Open House event repository.

+

We first meet online at 9:00 am (UTC+1) via video (connection link will be +shared in our shared document) and +then work on CodeRefinery training material. During the day, we will coordinate +the work through our Zulip chat with +possibilities to further discuss via video if necessary.

+

We conclude the day around 4:00pm (UTC+1) by writing a short blog/summary in +our shared document.

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/open-house/website/index.html b/branch/rkdarst--registration/open-house/website/index.html new file mode 100644 index 000000000..114b8e19f --- /dev/null +++ b/branch/rkdarst--registration/open-house/website/index.html @@ -0,0 +1,457 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Collaborative work on the website + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + February 11, 2020 + +
+ + coderefinery open house logo + +
+

Welcome to the second CodeRefinery Open House!

+

Following up on our successful first CodeRefinery Open House, we will have our +second online Open house!

+

The idea behind this event is to work together on revising and improving +coderefinery.org. Issues are +filed and we are +taking what each of us wants to work on. Input for the further improvement are +very welcome!

+

Anyone who would like to contribute, or learn how to contribute to +coderefinery.org is very welcome to join.

+

We will collect nodes in a shared document. +Please note that this document will be archived in our +Open House event repository.

+

We first meet online at 9:00 am (UTC+1) via video (connection link will be +shared in our shared document) and +then work on CodeRefinery training material. During the day, we will coordinate +the work through our Zulip chat with +possibilities to further discuss via video if necessary.

+

We conclude the day around 4:00pm (UTC+1) by writing a short blog/summary in +our shared document.

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/organization/contact/index.html b/branch/rkdarst--registration/organization/contact/index.html new file mode 100644 index 000000000..1d0005579 --- /dev/null +++ b/branch/rkdarst--registration/organization/contact/index.html @@ -0,0 +1,451 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Contact us + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Contact us

+ + + +

Zulip

+

We use Zulip to discuss within our team and community. +We discuss in the open and you can join us on +https://coderefinery.zulipchat.com: you can listen in, follow +certain threads, participate, and influence. Learn how it +works.

+

Support line

+

To ask questions about workshops or services or to report issues: +support@coderefinery.org

+

Newsletter

+

You can subscribe to the CodeRefinery newsletter +here.

+

Mastodon and Twitter

+

If you like what we do, please reach out: +Mastodon at +@coderefinery@fosstodon.org and +Twitter at @coderefine

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/organization/contributors/index.html b/branch/rkdarst--registration/organization/contributors/index.html new file mode 100644 index 000000000..0f614799c --- /dev/null +++ b/branch/rkdarst--registration/organization/contributors/index.html @@ -0,0 +1,1347 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Instructors and helpers + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +

Instructors and helpers

+ +

Below we list (hopefully) all speakers, instructors, hosts, helpers, and +exercise leaders of past CodeRefinery workshops, as well as CodeRefinery events +and shared events. Without these contributions, these events would not have been possible. +Thank you so much for your contributions!

+ + +
+
+

Instructors/speakers

+
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • Anne Fouilloux
  • + +
  • Annika Rockenberger
  • + +
  • Bjørn Lindi
  • + +
  • Dhanya Pushpadas
  • + +
  • Diana Iusan
  • + +
  • Enrico Glerean
  • + +
  • Hande Celikkanat
  • + +
  • Jarno Rantaharju
  • + +
  • Jens Wehner
  • + +
  • Johan Hellsvik
  • + +
  • Johan Hidding
  • + +
  • João M. da Silva
  • + +
  • Juho Lehtonen
  • + +
  • Jyry Suvilehto
  • + +
  • Luca Ferranti
  • + +
  • Marijn van Vliet
  • + +
  • Mark Abraham
  • + +
  • Matteo Tomasini
  • + +
  • Matus Kalas
  • + +
  • Max Roald Eckardt
  • + +
  • Max Schön
  • + +
  • N. D.
  • + +
  • Nico Reissmann
  • + +
  • Nils Charles Prieur
  • + +
  • Pavlin Mitev
  • + +
  • Pinja Koskinen
  • + +
  • Radovan Bast
  • + +
  • Raphaela Heil
  • + +
  • Richard Darst
  • + +
  • Sabry Razick
  • + +
  • Samantha Wittke
  • + +
  • Seija Sirkiä
  • + +
  • Simo Tuomisto
  • + +
  • Sri Harsha Vathsavayi
  • + +
  • Stefan Negru
  • + +
  • Thomas Pfau
  • + +
  • Thor Wikfeldt
  • + +
  • Will Usher
  • + +
+
+ +
+

Hosts, helpers, and exercise leaders

+
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • Abel Carreras
  • + +
  • Agneta Ghose
  • + +
  • Aili Sarre
  • + +
  • Alberto Lazzarotto
  • + +
  • Aleksandra Wilczynska
  • + +
  • Amir Ebrahimi Fard
  • + +
  • Ankita Priya
  • + +
  • Annajiat Alim Rasel
  • + +
  • Anne Fouilloux
  • + +
  • Anni Järvenpää
  • + +
  • Annika Rockenberger
  • + +
  • Anthony Scemama
  • + +
  • Ashwin Vishnu
  • + +
  • Athanasios Protopapas
  • + +
  • Björn Claremar
  • + +
  • Bjørn Lindi
  • + +
  • Carolina Robustini
  • + +
  • Cristian Cira
  • + +
  • Dan Mønster
  • + +
  • Daniel Holmberg
  • + +
  • Devaraju Narayanappa
  • + +
  • Dhanya Pushpadas
  • + +
  • Diana Iusan
  • + +
  • Dmytro Fishman
  • + +
  • Dmytro Kryvokhyzha
  • + +
  • Ebrahim Afyounian
  • + +
  • Emilia Lipponen
  • + +
  • Emiliano Gelati
  • + +
  • Emiliano Molinaro
  • + +
  • Enrico Glerean
  • + +
  • Erika Yashiro
  • + +
  • Evelien Van Dijk
  • + +
  • Evgeny Posenitskiy
  • + +
  • Fabricio Oliveira
  • + +
  • Flavio Calvo
  • + +
  • Francesco Tabaro
  • + +
  • Giordano Lipari
  • + +
  • Hadrien Gourlé
  • + +
  • Harshit Agrawal
  • + +
  • Hasti Narimanzadeh
  • + +
  • Heather Andrews
  • + +
  • Heikki Lehväslaiho
  • + +
  • Hui Tang
  • + +
  • Ingrid Strandberg
  • + +
  • Inigo Aldazabal
  • + +
  • Ivan Kuzmin
  • + +
  • Jakob Sauer Jørgensen
  • + +
  • Janne Blomqvist
  • + +
  • Jannetta Steyn
  • + +
  • Jarno Rantaharju
  • + +
  • Jean Iaquinta
  • + +
  • Jens Wehner
  • + +
  • Joakim Löfgren
  • + +
  • Johan Hellsvik
  • + +
  • Johan Hidding
  • + +
  • Jose Carlos Llanusa
  • + +
  • João M. da Silva
  • + +
  • Juan Sebastian Diaz Boada
  • + +
  • Juho Lehtonen
  • + +
  • Kaveh Karimi
  • + +
  • Kerstin Lenk
  • + +
  • Lauri Neuvonen
  • + +
  • Leif Wigge
  • + +
  • Lesetja Lekoloane
  • + +
  • Lex Nederbragt
  • + +
  • Lora Armstrong
  • + +
  • Luc Girod
  • + +
  • Luca Ferranti
  • + +
  • Lucy Whalley
  • + +
  • Luis Amezcua
  • + +
  • Manana Koberidze
  • + +
  • Manuel Garcia Alvarez
  • + +
  • Marco Foscato
  • + +
  • Marijn Van Vliet
  • + +
  • Massimo Pizzol
  • + +
  • Matthew Morris
  • + +
  • Matúš Kalaš
  • + +
  • Maurits Kok
  • + +
  • Max Roald Eckardt
  • + +
  • Meron Vermaas
  • + +
  • Mika Jalava
  • + +
  • Mikael Djurfeldt
  • + +
  • Mikael Öhman
  • + +
  • Mikhail Papkov
  • + +
  • Mikko Heikkilä
  • + +
  • Naoe Tatara
  • + +
  • Narayan Puthanmadam Subramaniyam
  • + +
  • Nico Reissmann
  • + +
  • Niharika Gauraha
  • + +
  • Niket Agrawal
  • + +
  • Octavian Andrei
  • + +
  • Patric Holmvall
  • + +
  • Paula Martinez Lavanchy
  • + +
  • Pavlin Mitev
  • + +
  • Pedro Ojeda
  • + +
  • Pedro Ojeda May
  • + +
  • Pengfei Xu
  • + +
  • Peter Kjellström
  • + +
  • Philip Gjedde
  • + +
  • Pradeep Eranti
  • + +
  • Preethy Nair
  • + +
  • Qiang Li
  • + +
  • Radek Lonka
  • + +
  • Radovan Bast
  • + +
  • Raphaela Heil
  • + +
  • Raul Ortiz Merino
  • + +
  • Richard Darst
  • + +
  • Roberto Di Remigio
  • + +
  • Rohit Goswami
  • + +
  • Romain Caneill
  • + +
  • Ruslan Zhuravchak
  • + +
  • Sabry Razick
  • + +
  • Samantha Wittke
  • + +
  • Sebastian Schmidt
  • + +
  • Shashank Shekhar Harivyasi
  • + +
  • Shreyas Deshpande
  • + +
  • Simoneta Caño de Las Heras
  • + +
  • Sri Harsha Vathsavayi
  • + +
  • Stephan Smuts
  • + +
  • Stephanie van de Sandt
  • + +
  • Stig Rune Jensen
  • + +
  • Sunniva Indrehus
  • + +
  • Susan Branchett
  • + +
  • Ted Hsuan Yun Chen
  • + +
  • Thomas Arildsen
  • + +
  • Thor Wikfeldt
  • + +
  • Tobias Lindstrøm Jensen
  • + +
  • Toby Hodges
  • + +
  • Tomasz Kopec
  • + +
  • Tomi Häkkinen
  • + +
  • Tor Kjellsson Lindblom
  • + +
  • Tuomas Rossi
  • + +
  • Vang Que Le
  • + +
  • Vesa Vahermaa
  • + +
  • Will Usher
  • + +
  • Ygor Morais Jaques
  • + +
  • Zubair Maalick
  • + +
+
+
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/organization/get-involved/index.html b/branch/rkdarst--registration/organization/get-involved/index.html new file mode 100644 index 000000000..fb1ca3186 --- /dev/null +++ b/branch/rkdarst--registration/organization/get-involved/index.html @@ -0,0 +1,495 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Get involved + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Get involved

+ + + +

CodeRefinery is a community project. All our work is open, and we +accept any type of contributions: there is a lot more than instructing +to run a successful workshop. Also, CodeRefinery is really more of a +group of like-minded people than one particular plan, so you are +welcome to join just to hang out and share ideas.

+ +

Volunteer for a workshop

+

Have you already participated in a Carpentry or CodeRefinery workshop, but +would like to attend another one to refresh your memory and share your own +knowledge? Or do you already have a solid background in research software +engineering and would like to meet like-minded people in a friendly +environment? Join a workshop as an exercise +leader, +helper, as a +co-instructor. Because of our team +teaching, +being a co-instructor is actually the second-easiest way to get started! +You don't need to know everything, we work together.

+

Have a research group or some friends? Form a team and be the +exercise leader.

+

Read more: Exercise +leader +or other roles

+ +

CodeRefinery runs many open, online courses, which anyone can +attend. Some of them can be attended by anyone via livestream, even +without registering (yes, this really works - we get high ratings for +this). You could simply advertise our courses (to your institution or +research group), or go even further and +run local breakout rooms.

+

Read more: Local advertisement and breakout rooms and Roles overview.

+

Join our "community teaching training" ("instructor training")

+

CodeRefinery isn’t just about doing teaching ourselves, but improving +your teaching. Whether you focus on teaching, or it’s a side-activity +to your other tasks, the CodeRefinery (online) teaching can help you +avoid re-inventing good practices and prepare you for teaching +together. If you teach practical computing skills, you need this workshop.

+

Read more: Community teaching training

+

Teach openly and allow others to join

+

Go to the next level and adopt CodeRefinery strategies for your own +courses, so that others can join at little cost to yourself. By +opening, you start to find more lesson developers and instructors, so +that your courses can reach the next level of quality and +impact. Soon, you will wonder why you ever bothered teaching alone.

+

Read more: Open your courses to others

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/organization/how-to-help/index.html b/branch/rkdarst--registration/organization/how-to-help/index.html new file mode 100644 index 000000000..750cfe1c9 --- /dev/null +++ b/branch/rkdarst--registration/organization/how-to-help/index.html @@ -0,0 +1,611 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - How to help + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

How to help

+ + + + + +

We are always looking for both people and institutions that can promote the +FAIRness of software management and development practice. There are many ways +that you can join and get involved and help the project:

+

Help with the workshops

+

As helper or exercise lead

+

Have you already participated in a Carpentry or CodeRefinery workshop, but +would like to attend another one to refresh your memory and share your own +knowledge? Or do you already have a solid background in research software +engineering and would like to meet like-minded people in a friendly +environment? Join a Carpentry or CodeRefinery workshop as a helper! For more +information about what a helper is supposed to do, please +refer Helper’s guide. +You don't have to know everything and be able to solve all exercises and +problems. We will anyway prepare all exercise leads in an on-boarding session.

+

Bring your team

+

Bringing a team of your colleagues or friends is a great way to participate in +a workshop: you probably "speak" the same programming language and academic +domain language, can use relatable examples, and already know each other. After +the workshops, exercise teams can form supporting groups for the weeks and +months after. And maybe one or two people from your team are a little bit more +familiar with the tools than others and then they can join as exercise leads?

+

Co-teach with others

+

Join a workshop organized by others as a co-instructor. Co-teaching is a fun +and low-preparation way to get involved in teaching. Co-teaching is also a nice +way for learners to follow a dialogue instead of a monologue and to learn +different views about technologies and tools and techniques.

+

Become an instructor

+

There is no requirement for using our training material. However, +we suggest that most instructors start with Carpentries instructor +training. We have instructor +training, but +this mostly serves as a complement focused on our lessons and more +intermediate users.

+

After taking either instructor training, you are welcome to +self-organize a CodeRefinery workshop or join a workshop as an +instructor when instructors are recruited via #workshop stream of +CodeRefinery Zulip chat.

+

With that being said, there are no strict requirements to working with +us and learning "on the job": we help people organically grow from +learner → helper → instructor. So far, the best way to get involved is to +join our chat and let us know when you see something you are +interested in.

+

As research group

+

A great way to both benefit and contribute is to send the group as team: +contributing not only learners but also one or two exercise leads. This allows +us to scale and will be a great learning experience also for the exercise +leads.

+

As group leader

+ +

As organization

+

You can support us by:

+ +

As sponsor

+

CodeRefinery is working on defining membership tiers with associated benefits +to continue its activities. We will offer different options such as:

+ +

We are working on defining the benefits for each option.

+

Host a self-organized CodeRefinery workshop

+

The requirements for a self-organized CodeRefinery workshop are:

+ +

There is no administrative fee to run a self-organized CodeRefinery workshop.

+

If your workshop fulfill the requirements detailed above, it can be listed as a +"self-organized CodeRefinery workshop" on our website. Please get in +touch with us since it is good for us to list +workshops using our material.

+

Improving the course material

+

All our material is open. It is steadily evolving and you can help us making it better:

+ +

Help the CodeRefinery project

+

CodeRefinery is more than bi-yearly workshops. There is many ways that you can become involved and help the project to continue.

+

We are collecting current to-do's all around the project (including the workshops) in our collaborative document. The best way to get started with those, is to join our Zulip chat and ask for more information.

+

Shaping the governance structure

+

We are a community project and as such we are currently working at establishing +the CodeRefinery governance and you can help us shaping the governance +structure! The more diverse input we receive, the better the project will be. +We also seek help in establishing the project as a non-profit organization.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/organization/meeting-minutes/index.html b/branch/rkdarst--registration/organization/meeting-minutes/index.html new file mode 100644 index 000000000..ce422c1b5 --- /dev/null +++ b/branch/rkdarst--registration/organization/meeting-minutes/index.html @@ -0,0 +1,500 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Community call meeting minutes + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Community call meeting minutes

+ + + +

Agenda and notes

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/organization/meetings/index.html b/branch/rkdarst--registration/organization/meetings/index.html new file mode 100644 index 000000000..3176bc325 --- /dev/null +++ b/branch/rkdarst--registration/organization/meetings/index.html @@ -0,0 +1,482 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery meetings + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

CodeRefinery meetings

+ + + +

Team meetings

+

Every Monday at 14 CET/CEST. Except the first Monday of the month where we have a +call with more community focus (see below).

+

Scope: Making sure everything fits together; improving the processes, website +and documentation; information exchange; bouncing ideas off others. This is +the place where day-to-day decisions are made, but any major decisions will +also be discussed in chat, over several weeks, or in other meetings +such as the community call or with the steering group. Despite the +name, everyone is welcome to this event too.

+ +

Community calls

+

Held on a monthly interval on Mondays at 14 CET/CEST, +the first Monday of a month.

+

Scope: All topics involving community onboarding, "what can I do?", +workshop scheduling, governance, and roadmap.

+ +

Archive of past community calls

+ +

Archive of past staff meetings

+

These were meetings about administrative tasks such as generation of reports +and deliverables, involving paid staff. In Autumn 2021, with the end of phase +2 of the project, we dropped the distinction between "staff" and "non-staff" +and dropped the separation between staff meetings and community calls and +started to focus on community calls.

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/organization/partners/index.html b/branch/rkdarst--registration/organization/partners/index.html new file mode 100644 index 000000000..d5c12967e --- /dev/null +++ b/branch/rkdarst--registration/organization/partners/index.html @@ -0,0 +1,480 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Partners + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Partners

+ + + + + +

The main point of modern CodeRefinery is that everyone needs to +teach - why not work together? Joining CodeRefinery is one of best +ways your organization can support open science, FAIR, and +reproduciblity for the computational sciences. The most important +thing to realize is that CodeRefinery is not necessarily a separate +project to be budgeted - you must teach anyway, why not work +together to get more +out of it?

+

As individuals representing the partner

+

There is no need for formal agreements at this stage. A person can +see the benefit of CodeRefinery to their organization, advertise +workshops, contribute to them, and help their community (and others).

+

Read more: Get involved

+

Joining as a partner

+

The definition of a "partner" is still being decided, but roughly they +are institutions which have long-term and systematic individual +contributions.

+

For example, a partner would:

+ +

In return, you have a much broader and better training offering for +your own community and improved teaching competence by being involved +in our community.

+

If you think that large, distributed workshops can't work or results +in lower quality for your own audience, just try coming to some of our +workshops, or attend our instructor +training.

+

Read more: Get involved

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/organization/who-we-are/index.html b/branch/rkdarst--registration/organization/who-we-are/index.html new file mode 100644 index 000000000..0ff73e3db --- /dev/null +++ b/branch/rkdarst--registration/organization/who-we-are/index.html @@ -0,0 +1,474 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Meet the community + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Meet the community

+ + + +

We are a community project

+

Since 2022, CodeRefinery is a community project and a number of persons +contribute their work in-kind (typically 10% to 50% of their time), supported +by their organizations.

+

And you can join us and contribute. And we will soon here describe more in +detail the various ways how you (as person or as organization) can help the +project if you find the project useful and interesting.

+

Instructors, helpers, and exercise leads

+

Our workshops would not be possible without the contributions from +many speakers, instructors, hosts, helpers, and exercise leaders.

+

Our teaching philosophies

+

On this page +our instructors share their teaching philosophies in short recorded videos.

+

People who are or were part of the project

+

Here listing all persons who were part of the project as official staff or have +contributed a significant amount of volunteer work:

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/privacy-policy/index.html b/branch/rkdarst--registration/privacy-policy/index.html new file mode 100644 index 000000000..55b086a95 --- /dev/null +++ b/branch/rkdarst--registration/privacy-policy/index.html @@ -0,0 +1,605 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery privacy policy + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

CodeRefinery privacy policy

+ + + +

Update, 12th October 2021

+

In short:

+ +

On the 1st October 2021, it was announced that CodeRefinery will receive +partial financial support by NeIC for the next 3 years (CodeRefinery +Sustainability Phase, CodeRefinery SP, see +https://neic.no/news/2021/10/01/2021-open-call-results/). The next phase of +the CodeRefinery project is mainly consisting of in-kind contributions by +diverse partner organizations. In this new phase, we need to renew our privacy +policy, but we need some time before the new privacy policy is set.

+

We will continue using our online community spaces and the current +owners/administrators will remain until new roles are set in the CodeRefinery +SP.

+

Previously we have written that "Stored names and email addresses of users +will be removed with the end of this project (2021-10-31)". However, we need +to keep participation data from 2020 and 2021 workshops at least until the end +of 2022 since we often get asked for participation certificates long after the +workshop is concluded. Therefore, we will keep information of the +participants who are qualified to certificates (either as learner, helper, +expert helper, or exercise lead) in the currently used platform, Indico, +managed by NeIC. The currently participating staff who is also committed to be +a part of the CodeRefinery SP have access to the information.

+

We continue using the newsletter in the new phase but +we may switch to other services but in this case we would notify all +subscribers about deletion of their contact information and invite them to +re-register to the new services that we may migrate to. If a user wants to +unsubscribe before that, they are welcome to do so anytime.

+
+

This Privacy Policy covers person identifiable information that may be +provided to CodeRefinery. Your data only comes from what you decide to provide +to us by understanding privacy policy of the platforms we are using for +different purposes as shown below. Changes to this Privacy Policy will be +posted on this page. Any changes will only apply to information collected +after the posted date of any such change. Additionally, information may be +provided to governmental bodies and other entities as required by law.

+

Definitions

+ +

What information do we obtain and why?

+

We obtain user data including person identifiable information in the following manner for each purpose:

+ +

Information you provide in our Online community spaces are visible and +accessible according to each service's privacy policy. Please note that your +information may be visible to other users in the Online community spaces than +CodeRefinery team members. We use your information within each Online +community space for communication purpose in a reasonable and respectful +manner. We will not use your person identifiable information provided in our +Online community spaces for other purposes than communication with you and +within the community. When we archive a note taken in +HackMD during a workshop, we will delete all the +person identifiable information of users.

+

We obtain the following data anonymously and voluntarily from users.

+ +

Who has access to the personally identifiable information?

+ +

Where we store the data

+ +

How long we store the data

+ +

Anonymity and right to be forgotten

+ +

Questions/concerns?

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/processed_images/0706072f0f401f2500.png b/branch/rkdarst--registration/processed_images/0706072f0f401f2500.png new file mode 100644 index 000000000..cdf1a0ec4 Binary files /dev/null and b/branch/rkdarst--registration/processed_images/0706072f0f401f2500.png differ diff --git a/branch/rkdarst--registration/processed_images/3e74c353dd575c6200.png b/branch/rkdarst--registration/processed_images/3e74c353dd575c6200.png new file mode 100644 index 000000000..fada8218a Binary files /dev/null and b/branch/rkdarst--registration/processed_images/3e74c353dd575c6200.png differ diff --git a/branch/rkdarst--registration/processed_images/66cf79ffcc02c26900.png b/branch/rkdarst--registration/processed_images/66cf79ffcc02c26900.png new file mode 100644 index 000000000..8444708ef Binary files /dev/null and b/branch/rkdarst--registration/processed_images/66cf79ffcc02c26900.png differ diff --git a/branch/rkdarst--registration/processed_images/b9e86c7a4b86a29f00.png b/branch/rkdarst--registration/processed_images/b9e86c7a4b86a29f00.png new file mode 100644 index 000000000..cf6c224fd Binary files /dev/null and b/branch/rkdarst--registration/processed_images/b9e86c7a4b86a29f00.png differ diff --git a/branch/rkdarst--registration/processed_images/d943f5d28a6cbba400.png b/branch/rkdarst--registration/processed_images/d943f5d28a6cbba400.png new file mode 100644 index 000000000..294cc96db Binary files /dev/null and b/branch/rkdarst--registration/processed_images/d943f5d28a6cbba400.png differ diff --git a/branch/rkdarst--registration/registration/index.html b/branch/rkdarst--registration/registration/index.html new file mode 100644 index 000000000..9037dd294 --- /dev/null +++ b/branch/rkdarst--registration/registration/index.html @@ -0,0 +1,456 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Registration procedure + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Registration procedure

+ + + +

Confirmation email

+

After filling out the registration form you will receive an automatic +confirmation email but please note that your registration is only tentative +until we confirm it with another (human-written) email which should happen +typically within a week.

+

Waiting list

+

We maintain a waiting list for seats but this is currently not automatic so we +need this short time buffer to manually confirm participants and inform those who +are on the waiting list.

+

First come, first serve

+

The seats are assigned on a first come first serve basis but we need to also +make sure that registered participants are affiliated with a Nordic academic +institution since the course is free for participants and financed by the +Nordic e-Infrastructure Collaboration (unless this is an event outside of Nordics +funded by a different organization).

+

Cancellation

+

We ask confirmed participants who are not able to participate at the course +they have signed up for, to inform us as soon as possible so that people on the +waiting list can take the vacant seat.

+

Questions?

+

If you have any questions about your registration status, please write to +support@coderefinery.org.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/repository/index.html b/branch/rkdarst--registration/repository/index.html new file mode 100644 index 000000000..a60439550 --- /dev/null +++ b/branch/rkdarst--registration/repository/index.html @@ -0,0 +1,527 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + +
+

Code repository hosting for Nordic research software

+
    +
  • Over 300 active users, 175 groups, with over 400 active projects.
  • +
  • The service is hosted at https://source.coderefinery.org.
  • +
  • The is currently run from and the data is stored on servers at the +Danish e-Infrastructure Cooperation (DeiC). DeiC is part of the Nordic +e-Infrastructure collaboration funding this project.
  • +
  • To inform us about issues, please contact support@coderefinery.org.
  • +
  • We announce service breaks through messages displayed once you log into the +platform but we try to announce them well in advance and to keep them very +short.
  • +
  • This service is for collaborating on code and scripts. It is not designed to be +a data sharing or data archive service. There are other services for data +sharing and archival. In doubt please ask support@coderefinery.org.
  • +
  • We are currently funded until 2025. We are actively working on +securing long-term funding for this service. The goal is to create a service +for many years to come. If we do not manage to secure long-term funding, we +will notify users well in advance and assist in migrating repository and data.
  • +
  • The entire file system is backed up every day. The schedule is 1/month full +backup, 3 out of 4 weeks differential backup, 1/day incremental backup. We +reserve the right to reduce the number of days backed up if space becomes an +issue.
  • +
+
+

Why use this service, rather than a service like GitHub or BitBucket?

+

The service we provide is a GitLab instance which targets persons and groups who:

+ +

GitHub, Bitbucket, +GitLab.com, and similar services are popular code +repository hosting services. If you already use them, please continue to do +so! They allow hosting public repositories and to some extent also private +repositories. They may offer higher visibility and discoverability than the +instance offered by our project.

+

Who can use this service?

+

Students, researchers, and staff affiliated with a Nordic academic institution. +If you are not sure whether you can use the system, please contact +support@coderefinery.org. +  +Your collaborators outside the Nordics can join your projects but cannot create new projects. +Ask them to register and then you can add them to your projects or groups as collaborators. +No need to ask us or inform us in order to add external collaborators.

+

You need to be first enabled before you can create projects and groups

+

Newly signed-in users need to first be enabled before they can create projects and groups. +This is to prevent abuse.

+

Please follow these steps:

+ +

How about federated access such as Feide or HAKA or eduGAIN or Kalmar2?

+

We support sign in with eduGAIN. Otherwise you need a specific user account +for this instance. We recommend creating an account with the email address your +identity federation gives you, as this will make it easier to enable other +federated access providers seamlessly. + 

+

Is there a data limit per project?

+

Currently no limit is enforced but we recommend less than 100 MB per project. +This should really be for code and not for persistent storage of data. If you +use more, we may contact you. If you need more, please contact us and motivate +why you need more and we will see what we can do about it. If you have a good +motivation, you will probably get a larger soft limit.

+

Can I serve GitLab pages?

+

Yes! GitLab pages now serve via *.pages.coderefinery.org. +Currently only HTTP. TLS is in the works.

+

Does the service include shared continuous integration runners?

+

No, shared runners are not part of the offering but you can connect +your own CI runners to your projects for automated tests and builds.

+

SSH key fingerprints

+

Public key fingerprints can be used to validate a connection to a remote server.

+

These are the public key fingerprints for source.coderefinery.org (in hexadecimal format):

+
MD5:b8:c9:43:24:33:96:ba:5d:88:84:73:81:38:ac:e6:0f (RSA)
+MD5:21:dc:4e:ef:4f:1c:44:f8:d8:5e:3a:30:15:32:e3:4c (ECDSA)
+
+

These are the SHA256 hashes:

+
SHA256:dQ6iP+E6PZ2Ureynaw1eGKqRLJ5RtL4C7qUJlNSvLW8 (RSA)
+SHA256:dtWo53mvtXVv3NxZf44kpRIfvJ8edcEqv7HFEltPpa4 (ECDSA)
+
+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/robots.txt b/branch/rkdarst--registration/robots.txt new file mode 100644 index 000000000..71c44faeb --- /dev/null +++ b/branch/rkdarst--registration/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Disallow: +Allow: / +Sitemap: https://coderefinery.org/sitemap.xml diff --git a/branch/rkdarst--registration/sitemap.xml b/branch/rkdarst--registration/sitemap.xml new file mode 100644 index 000000000..e05ba60b0 --- /dev/null +++ b/branch/rkdarst--registration/sitemap.xml @@ -0,0 +1,225 @@ + + + + https://coderefinery.org/ + + + https://coderefinery.org/about/code-of-conduct/ + + + https://coderefinery.org/about/funding/ + + + https://coderefinery.org/about/history/ + + + https://coderefinery.org/about/impact/ + + + https://coderefinery.org/about/project/ + + + https://coderefinery.org/about/reports/ + + + https://coderefinery.org/about/staff-meetings/ + + + https://coderefinery.org/about/statistics/ + + + https://coderefinery.org/blog/ + + + https://coderefinery.org/blog/2020/04/14/first-online-workshop/ + 2020-04-14 + + + https://coderefinery.org/blog/2020/04/24/nordic-rse-conference/ + 2020-04-24 + + + https://coderefinery.org/blog/2020/04/24/online-workshops-update/ + 2020-04-24 + + + https://coderefinery.org/blog/2020/04/24/rebase-vs-merge/ + 2020-04-24 + + + https://coderefinery.org/blog/2020/04/24/rsh/ + 2020-04-24 + + + https://coderefinery.org/blog/2020/04/27/nordichpc-tools/ + 2020-04-27 + + + https://coderefinery.org/blog/2020/07/31/mega-coderefinery/ + 2020-07-31 + + + https://coderefinery.org/blog/2020/09/29/git-pr/ + 2020-09-29 + + + https://coderefinery.org/blog/2020/11/13/carpentry-community-discussion-nordic/ + 2020-11-13 + + + https://coderefinery.org/blog/2021/09/01/bi-weekly-community-calls/ + 2021-09-01 + + + https://coderefinery.org/blog/2021/11/20/phase-2-lessons-learned/ + 2021-11-20 + + + https://coderefinery.org/blog/2021/11/21/towards-citable-lessons/ + 2021-11-21 + + + https://coderefinery.org/blog/2021/11/25/lessons-learned-may-2021/ + 2021-11-25 + + + https://coderefinery.org/blog/2022/05/04/improving-workshop-registration/ + 2022-05-04 + + + https://coderefinery.org/blog/2022/05/18/measuring-impact/ + 2022-05-18 + + + https://coderefinery.org/blog/2022/10/17/future-of-teaching/ + 2022-10-17 + + + https://coderefinery.org/blog/2022/10/21/python-for-scicomp/ + 2022-10-21 + + + https://coderefinery.org/blog/2022/10/24/parallel-chat/ + 2022-10-24 + + + https://coderefinery.org/blog/2022/10/31/co-teaching/ + 2022-10-31 + + + https://coderefinery.org/blog/2022/11/07/reverse-hybrid/ + 2022-11-07 + + + https://coderefinery.org/blog/2022/11/08/lessons-learned-Sep-2022/ + 2022-11-08 + + + https://coderefinery.org/blog/2022/11/08/mastodon/ + 2022-11-08 + + + https://coderefinery.org/blog/2022/11/14/livestreaming-courses/ + 2022-11-14 + + + https://coderefinery.org/blog/2022/11/21/video-publishing/ + 2022-11-08 + + + https://coderefinery.org/blog/2022/12/05/registration/ + 2022-12-05 + + + https://coderefinery.org/calendars/ + + + https://coderefinery.org/lessons/ + + + https://coderefinery.org/lessons/contributing/ + + + https://coderefinery.org/lessons/other-projects/ + + + https://coderefinery.org/lessons/reusing/ + + + https://coderefinery.org/open-house/ + + + https://coderefinery.org/open-house/blog-posts/ + 2020-04-24 + + + https://coderefinery.org/open-house/credit/ + 2020-10-02 + + + https://coderefinery.org/open-house/instructor-training-material/ + 2020-03-24 + + + https://coderefinery.org/open-house/newsletter/ + 2020-08-24 + + + https://coderefinery.org/open-house/online-teaching/ + 2020-03-20 + + + https://coderefinery.org/open-house/training-material/ + 2019-12-13 + + + https://coderefinery.org/open-house/website/ + 2020-02-11 + + + https://coderefinery.org/organization/contact/ + + + https://coderefinery.org/organization/contributors/ + + + https://coderefinery.org/organization/get-involved/ + + + https://coderefinery.org/organization/how-to-help/ + + + https://coderefinery.org/organization/meeting-minutes/ + + + https://coderefinery.org/organization/meetings/ + + + https://coderefinery.org/organization/partners/ + + + https://coderefinery.org/organization/who-we-are/ + + + https://coderefinery.org/privacy-policy/ + + + https://coderefinery.org/registration/ + + + https://coderefinery.org/repository/ + + + https://coderefinery.org/workshops/ + + + https://coderefinery.org/workshops/past/ + + + https://coderefinery.org/workshops/request/ + + + https://coderefinery.org/workshops/upcoming/ + 2022-10-31 + + diff --git a/branch/rkdarst--registration/style.css b/branch/rkdarst--registration/style.css new file mode 100644 index 000000000..1da20ffaa --- /dev/null +++ b/branch/rkdarst--registration/style.css @@ -0,0 +1 @@ +@import url("https://fonts.googleapis.com/css2?family=Roboto&display=swap");html{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:16px;font-weight:normal;line-height:1.5;-webkit-text-size-adjust:100%;background:#fff;color:#666}body{margin:0}a,.uk-link{color:#1e87f0;text-decoration:none;cursor:pointer}a:hover,.uk-link:hover,.uk-link-toggle:hover .uk-link{color:#0f6ecd;text-decoration:underline}abbr[title]{text-decoration:underline dotted;-webkit-text-decoration-style:dotted}b,strong{font-weight:bolder}:not(pre)>code,:not(pre)>kbd,:not(pre)>samp{font-family:Consolas,monaco,monospace;font-size:.875rem;color:#f0506e;white-space:nowrap;padding:2px 6px;background:#f8f8f8}em{color:#f0506e}ins{background:#ffd;color:#666;text-decoration:none}mark{background:#ffd;color:#666}q{font-style:italic}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}audio,canvas,iframe,img,svg,video{vertical-align:middle}canvas,img,svg,video{max-width:100%;height:auto;box-sizing:border-box}img:not([src]){visibility:hidden;min-width:1px}iframe{border:0}p,ul,ol,dl,pre,address,fieldset,figure{margin:0 0 20px 0}*+p,*+ul,*+ol,*+dl,*+pre,*+address,*+fieldset,*+figure{margin-top:20px}h1,.uk-h1,h2,.uk-h2,.markdown h1,h3,.uk-h3,.markdown h2,h4,.uk-h4,.markdown h3,h5,.uk-h5,h6,.uk-h6,.uk-heading-small,.uk-heading-medium,.uk-heading-large,.uk-heading-xlarge,.uk-heading-2xlarge{margin:0 0 20px 0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-weight:normal;color:#333;text-transform:none}*+h1,*+.uk-h1,*+h2,*+.uk-h2,.markdown *+h1,*+h3,*+.uk-h3,.markdown *+h2,*+h4,*+.uk-h4,.markdown *+h3,*+h5,*+.uk-h5,*+h6,*+.uk-h6,*+.uk-heading-small,*+.uk-heading-medium,*+.uk-heading-large,*+.uk-heading-xlarge,*+.uk-heading-2xlarge{margin-top:40px}h1,.uk-h1{font-size:2.23125rem;line-height:1.2}h2,.uk-h2,.markdown h1{font-size:1.7rem;line-height:1.3}h3,.uk-h3,.markdown h2{font-size:1.5rem;line-height:1.4}h4,.uk-h4,.markdown h3{font-size:1.25rem;line-height:1.4}h5,.uk-h5{font-size:16px;line-height:1.4}h6,.uk-h6{font-size:.875rem;line-height:1.4}@media (min-width: 960px){h1,.uk-h1{font-size:2.625rem}h2,.uk-h2,.markdown h1{font-size:2rem}}ul,ol{padding-left:30px}ul>li>ul,ul>li>ol,ol>li>ol,ol>li>ul{margin:0}dt{font-weight:bold}dd{margin-left:0}hr,.uk-hr{overflow:visible;text-align:inherit;margin:0 0 20px 0;border:0;border-top:1px solid #e5e5e5}*+hr,*+.uk-hr{margin-top:20px}address{font-style:normal}blockquote{margin:0 0 20px 0;font-size:1.25rem;line-height:1.5;font-style:italic;color:#333}*+blockquote{margin-top:20px}blockquote p:last-of-type{margin-bottom:0}blockquote footer{margin-top:10px;font-size:.875rem;line-height:1.5;color:#666}blockquote footer::before{content:"— "}pre{font:.875rem / 1.5 Consolas,monaco,monospace;color:#666;-moz-tab-size:4;tab-size:4;overflow:auto;padding:10px;border:1px solid #e5e5e5;border-radius:3px;background:#fff}pre code{font-family:Consolas,monaco,monospace}:focus{outline:none}:focus-visible{outline:2px dotted #333}::selection{background:#39f;color:#fff;text-shadow:none}details,main{display:block}summary{display:list-item}template{display:none}:root{--uk-breakpoint-s: 640px;--uk-breakpoint-m: 960px;--uk-breakpoint-l: 1200px;--uk-breakpoint-xl: 1600px}a.uk-link-muted,.uk-link-muted a,.uk-link-toggle .uk-link-muted{color:#999}a.uk-link-muted:hover,.uk-link-muted a:hover,.uk-link-toggle:hover .uk-link-muted{color:#666}a.uk-link-text,.uk-link-text a,.uk-link-toggle .uk-link-text{color:inherit}a.uk-link-text:hover,.uk-link-text a:hover,.uk-link-toggle:hover .uk-link-text{color:#999}a.uk-link-heading,.uk-link-heading a,.uk-link-toggle .uk-link-heading{color:inherit}a.uk-link-heading:hover,.uk-link-heading a:hover,.uk-link-toggle:hover .uk-link-heading{color:#1e87f0;text-decoration:none}a.uk-link-reset,.uk-link-reset a{color:inherit !important;text-decoration:none !important}.uk-link-toggle{color:inherit !important;text-decoration:none !important}.uk-heading-small{font-size:2.6rem;line-height:1.2}.uk-heading-medium{font-size:2.8875rem;line-height:1.1}.uk-heading-large{font-size:3.4rem;line-height:1.1}.uk-heading-xlarge{font-size:4rem;line-height:1}.uk-heading-2xlarge{font-size:6rem;line-height:1}@media (min-width: 960px){.uk-heading-small{font-size:3.25rem}.uk-heading-medium{font-size:3.5rem}.uk-heading-large{font-size:4rem}.uk-heading-xlarge{font-size:6rem}.uk-heading-2xlarge{font-size:8rem}}@media (min-width: 1200px){.uk-heading-medium{font-size:4rem}.uk-heading-large{font-size:6rem}.uk-heading-xlarge{font-size:8rem}.uk-heading-2xlarge{font-size:11rem}}.uk-heading-divider{padding-bottom:calc(5px + 0.1em);border-bottom:calc(0.2px + 0.05em) solid #e5e5e5}.uk-heading-bullet{position:relative}.uk-heading-bullet::before{content:"";display:inline-block;position:relative;top:calc(-0.1 * 1em);vertical-align:middle;height:calc(4px + 0.7em);margin-right:calc(5px + 0.2em);border-left:calc(5px + 0.1em) solid #e5e5e5}.uk-heading-line{overflow:hidden}.uk-heading-line>*{display:inline-block;position:relative}.uk-heading-line>::before,.uk-heading-line>::after{content:"";position:absolute;top:calc(50% - (calc(0.2px + 0.05em) / 2));width:2000px;border-bottom:calc(0.2px + 0.05em) solid #e5e5e5}.uk-heading-line>::before{right:100%;margin-right:calc(5px + 0.3em)}.uk-heading-line>::after{left:100%;margin-left:calc(5px + 0.3em)}[class*='uk-divider']{border:none;margin-bottom:20px}*+[class*='uk-divider']{margin-top:20px}.uk-divider-icon{position:relative;height:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22%23e5e5e5%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");background-repeat:no-repeat;background-position:50% 50%}.uk-divider-icon::before,.uk-divider-icon::after{content:"";position:absolute;top:50%;max-width:calc(50% - (50px / 2));border-bottom:1px solid #e5e5e5}.uk-divider-icon::before{right:calc(50% + (50px / 2));width:100%}.uk-divider-icon::after{left:calc(50% + (50px / 2));width:100%}.uk-divider-small{line-height:0}.uk-divider-small::after{content:"";display:inline-block;width:100px;max-width:100%;border-top:1px solid #e5e5e5;vertical-align:top}.uk-divider-vertical{width:max-content;height:100px;margin-left:auto;margin-right:auto;border-left:1px solid #e5e5e5}.uk-list,.markdown ul{padding:0;list-style:none}.uk-list>*>:last-child,.markdown ul>*>:last-child{margin-bottom:0}.uk-list>:nth-child(n+2),.markdown ul>:nth-child(n+2),.uk-list>*>ul,.markdown ul>*>ul{margin-top:10px}.uk-list-disc>*,.uk-list-circle>*,.uk-list-square>*,.markdown ul>*,.uk-list-decimal>*,.uk-list-hyphen>*{padding-left:30px}.uk-list-decimal{counter-reset:decimal}.uk-list-decimal>*{counter-increment:decimal}.uk-list-disc>::before,.uk-list-circle>::before,.uk-list-square>::before,.markdown ul>::before,.uk-list-decimal>::before,.uk-list-hyphen>::before{content:"";position:relative;left:-30px;width:30px;height:1.5em;margin-bottom:-1.5em;display:list-item;list-style-position:inside;text-align:right}.uk-list-disc>::before{list-style-type:disc}.uk-list-circle>::before{list-style-type:circle}.uk-list-square>::before,.markdown ul>::before{list-style-type:square}.uk-list-decimal>::before{content:counter(decimal, decimal) " . "}.uk-list-hyphen>::before{content:'–\00A0\00A0'}.uk-list-muted>::before{color:#999 !important}.uk-list-emphasis>::before{color:#333 !important}.uk-list-primary>::before{color:#1e87f0 !important}.uk-list-secondary>::before{color:#222 !important}.uk-list-bullet>*{padding-left:30px}.uk-list-bullet>::before{content:"";display:list-item;position:relative;left:-30px;width:30px;height:1.5em;margin-bottom:-1.5em;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23666%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%}.uk-list-divider>:nth-child(n+2){margin-top:10px;padding-top:10px;border-top:1px solid #e5e5e5}.uk-list-striped>*{padding:10px 10px}.uk-list-striped>*:nth-of-type(odd){border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5}.uk-list-striped>:nth-of-type(odd){background:#f8f8f8}.uk-list-striped>:nth-child(n+2){margin-top:0}.uk-list-large>:nth-child(n+2),.uk-list-large>*>ul{margin-top:20px}.uk-list-collapse>:nth-child(n+2),.uk-list-collapse>*>ul{margin-top:0}.uk-list-large.uk-list-divider>:nth-child(n+2){margin-top:20px;padding-top:20px}.uk-list-collapse.uk-list-divider>:nth-child(n+2){margin-top:0;padding-top:0}.uk-list-large.uk-list-striped>*{padding:20px 10px}.uk-list-collapse.uk-list-striped>*{padding-top:0;padding-bottom:0}.uk-list-large.uk-list-striped>:nth-child(n+2),.uk-list-collapse.uk-list-striped>:nth-child(n+2){margin-top:0}.uk-description-list>dt{color:#333;font-size:.875rem;font-weight:normal;text-transform:uppercase}.uk-description-list>dt:nth-child(n+2){margin-top:20px}.uk-description-list-divider>dt:nth-child(n+2){margin-top:20px;padding-top:20px;border-top:1px solid #e5e5e5}.uk-table{border-collapse:collapse;border-spacing:0;width:100%;margin-bottom:20px}*+.uk-table{margin-top:20px}.uk-table th{padding:16px 12px;text-align:left;vertical-align:bottom;font-size:.875rem;font-weight:normal;color:#999;text-transform:uppercase}.uk-table td{padding:16px 12px;vertical-align:top}.uk-table td>:last-child{margin-bottom:0}.uk-table tfoot{font-size:.875rem}.uk-table caption{font-size:.875rem;text-align:left;color:#999}.uk-table-middle,.uk-table-middle td{vertical-align:middle !important}.uk-table-divider>tr:not(:first-child),.uk-table-divider>:not(:first-child)>tr,.uk-table-divider>:first-child>tr:not(:first-child){border-top:1px solid #e5e5e5}.uk-table-striped>tr:nth-of-type(odd),.uk-table-striped tbody tr:nth-of-type(odd){background:#f8f8f8;border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5}.uk-table-hover>tr:hover,.uk-table-hover tbody tr:hover{background:#ffd}.uk-table>tr.uk-active,.uk-table tbody tr.uk-active{background:#ffd}.uk-table-small th,.uk-table-small td{padding:10px 12px}.uk-table-large th,.uk-table-large td{padding:22px 12px}.uk-table-justify th:first-child,.uk-table-justify td:first-child{padding-left:0}.uk-table-justify th:last-child,.uk-table-justify td:last-child{padding-right:0}.uk-table-shrink{width:1px}.uk-table-expand{min-width:150px}.uk-table-link{padding:0 !important}.uk-table-link>a{display:block;padding:16px 12px}.uk-table-small .uk-table-link>a{padding:10px 12px}@media (max-width: 959px){.uk-table-responsive,.uk-table-responsive tbody,.uk-table-responsive th,.uk-table-responsive td,.uk-table-responsive tr{display:block}.uk-table-responsive thead{display:none}.uk-table-responsive th,.uk-table-responsive td{width:auto !important;max-width:none !important;min-width:0 !important;overflow:visible !important;white-space:normal !important}.uk-table-responsive th:not(:first-child):not(.uk-table-link),.uk-table-responsive td:not(:first-child):not(.uk-table-link),.uk-table-responsive .uk-table-link:not(:first-child)>a{padding-top:5px !important}.uk-table-responsive th:not(:last-child):not(.uk-table-link),.uk-table-responsive td:not(:last-child):not(.uk-table-link),.uk-table-responsive .uk-table-link:not(:last-child)>a{padding-bottom:5px !important}.uk-table-justify.uk-table-responsive th,.uk-table-justify.uk-table-responsive td{padding-left:0;padding-right:0}}.uk-table tbody tr{transition:background-color 0.1s linear}.uk-table-striped>tr:nth-of-type(even):last-child,.uk-table-striped tbody tr:nth-of-type(even):last-child{border-bottom:1px solid #e5e5e5}.uk-icon{margin:0;border:none;border-radius:0;overflow:visible;font:inherit;color:inherit;text-transform:none;padding:0;background-color:transparent;display:inline-block;fill:currentcolor;line-height:0}button.uk-icon:not(:disabled){cursor:pointer}.uk-icon::-moz-focus-inner{border:0;padding:0}.uk-icon:not(.uk-preserve) [fill*='#']:not(.uk-preserve){fill:currentcolor}.uk-icon:not(.uk-preserve) [stroke*='#']:not(.uk-preserve){stroke:currentcolor}.uk-icon>*{transform:translate(0, 0)}.uk-icon-image{width:20px;height:20px;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;vertical-align:middle;object-fit:scale-down;max-width:none}.uk-icon-link{color:#999;text-decoration:none !important}.uk-icon-link:hover{color:#666}.uk-icon-link:active,.uk-active>.uk-icon-link{color:#595959}.uk-icon-button{box-sizing:border-box;width:36px;height:36px;border-radius:500px;background:#f8f8f8;color:#999;vertical-align:middle;display:inline-flex;justify-content:center;align-items:center;transition:0.1s ease-in-out;transition-property:color, background-color}.uk-icon-button:hover{background-color:#ebebeb;color:#666}.uk-icon-button:active,.uk-active>.uk-icon-button{background-color:#dfdfdf;color:#666}.uk-range{-webkit-appearance:none;box-sizing:border-box;margin:0;vertical-align:middle;max-width:100%;width:100%;background:transparent}.uk-range:focus{outline:none}.uk-range::-moz-focus-outer{border:none}.uk-range:not(:disabled)::-webkit-slider-thumb{cursor:pointer}.uk-range:not(:disabled)::-moz-range-thumb{cursor:pointer}.uk-range::-webkit-slider-runnable-track{height:3px;background:#ebebeb;border-radius:500px}.uk-range:focus::-webkit-slider-runnable-track,.uk-range:active::-webkit-slider-runnable-track{background:#dfdfdf}.uk-range::-moz-range-track{height:3px;background:#ebebeb;border-radius:500px}.uk-range:focus::-moz-range-track{background:#dfdfdf}.uk-range::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-7px;height:15px;width:15px;border-radius:500px;background:#fff;border:1px solid #ccc}.uk-range::-moz-range-thumb{border:none;height:15px;width:15px;margin-top:-7px;border-radius:500px;background:#fff;border:1px solid #ccc}.uk-input,.uk-select,.uk-textarea,.uk-radio,.uk-checkbox{box-sizing:border-box;margin:0;border-radius:0;font:inherit}.uk-input{overflow:visible}.uk-select{text-transform:none}.uk-select optgroup{font:inherit;font-weight:bold}.uk-textarea{overflow:auto}.uk-input[type="search"]::-webkit-search-cancel-button,.uk-input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}.uk-input[type="number"]::-webkit-inner-spin-button,.uk-input[type="number"]::-webkit-outer-spin-button{height:auto}.uk-input::-moz-placeholder,.uk-textarea::-moz-placeholder{opacity:1}.uk-radio:not(:disabled),.uk-checkbox:not(:disabled){cursor:pointer}.uk-fieldset{border:none;margin:0;padding:0}.uk-input,.uk-textarea{-webkit-appearance:none}.uk-input,.uk-select,.uk-textarea{max-width:100%;width:100%;border:0 none;padding:0 10px;background:#fff;color:#666;border:1px solid #e5e5e5;transition:0.2s ease-in-out;transition-property:color, background-color, border}.uk-input,.uk-select:not([multiple]):not([size]){height:40px;vertical-align:middle;display:inline-block}.uk-input:not(input),.uk-select:not(select){line-height:38px}.uk-select[multiple],.uk-select[size],.uk-textarea{padding-top:6px;padding-bottom:6px;vertical-align:top}.uk-select[multiple],.uk-select[size]{resize:vertical}.uk-input:focus,.uk-select:focus,.uk-textarea:focus{outline:none;background-color:#fff;color:#666;border-color:#1e87f0}.uk-input:disabled,.uk-select:disabled,.uk-textarea:disabled{background-color:#f8f8f8;color:#999;border-color:#e5e5e5}.uk-input::placeholder{color:#999}.uk-textarea::placeholder{color:#999}.uk-form-small{font-size:.875rem}.uk-form-small:not(textarea):not([multiple]):not([size]){height:30px;padding-left:8px;padding-right:8px}textarea.uk-form-small,.uk-form-small[multiple],.uk-form-small[size]{padding:5px 8px}.uk-form-small:not(select):not(input):not(textarea){line-height:28px}.uk-form-large{font-size:1.25rem}.uk-form-large:not(textarea):not([multiple]):not([size]){height:55px;padding-left:12px;padding-right:12px}textarea.uk-form-large,.uk-form-large[multiple],.uk-form-large[size]{padding:7px 12px}.uk-form-large:not(select):not(input):not(textarea){line-height:53px}.uk-form-danger,.uk-form-danger:focus{color:#f0506e;border-color:#f0506e}.uk-form-success,.uk-form-success:focus{color:#32d296;border-color:#32d296}.uk-form-blank{background:none;border-color:transparent}.uk-form-blank:focus{border-color:#e5e5e5;border-style:solid}input.uk-form-width-xsmall{width:50px}select.uk-form-width-xsmall{width:75px}.uk-form-width-small{width:130px}.uk-form-width-medium{width:200px}.uk-form-width-large{width:500px}.uk-select:not([multiple]):not([size]){-webkit-appearance:none;-moz-appearance:none;padding-right:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");background-repeat:no-repeat;background-position:100% 50%}.uk-select:not([multiple]):not([size]) option{color:#666}.uk-select:not([multiple]):not([size]):disabled{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-input[list]{padding-right:20px;background-repeat:no-repeat;background-position:100% 50%}.uk-input[list]:hover,.uk-input[list]:focus{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2012%208%206%2016%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-input[list]::-webkit-calendar-picker-indicator{display:none !important}.uk-radio,.uk-checkbox{display:inline-block;height:16px;width:16px;overflow:hidden;margin-top:-4px;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;background-color:rgba(0,0,0,0);background-repeat:no-repeat;background-position:50% 50%;border:1px solid #ccc;transition:0.2s ease-in-out;transition-property:background-color, border}.uk-radio{border-radius:50%}.uk-radio:focus,.uk-checkbox:focus{background-color:rgba(0,0,0,0);outline:none;border-color:#1e87f0}.uk-radio:checked,.uk-checkbox:checked,.uk-checkbox:indeterminate{background-color:#1e87f0;border-color:rgba(0,0,0,0)}.uk-radio:checked:focus,.uk-checkbox:checked:focus,.uk-checkbox:indeterminate:focus{background-color:#0e6ecd}.uk-radio:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23fff%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23fff%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-checkbox:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23fff%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-radio:disabled,.uk-checkbox:disabled{background-color:#f8f8f8;border-color:#e5e5e5}.uk-radio:disabled:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23999%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:disabled:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-checkbox:disabled:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23999%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-legend{width:100%;color:inherit;padding:0;font-size:1.5rem;line-height:1.4}.uk-form-custom{display:inline-block;position:relative;max-width:100%;vertical-align:middle}.uk-form-custom select,.uk-form-custom input[type="file"]{position:absolute;top:0;z-index:1;width:100%;height:100%;left:0;-webkit-appearance:none;opacity:0;cursor:pointer}.uk-form-custom input[type="file"]{font-size:500px;overflow:hidden}.uk-form-label{color:#333;font-size:.875rem}.uk-form-stacked .uk-form-label{display:block;margin-bottom:5px}@media (max-width: 959px){.uk-form-horizontal .uk-form-label{display:block;margin-bottom:5px}}@media (min-width: 960px){.uk-form-horizontal .uk-form-label{width:200px;margin-top:7px;float:left}.uk-form-horizontal .uk-form-controls{margin-left:215px}.uk-form-horizontal .uk-form-controls-text{padding-top:7px}}.uk-form-icon{position:absolute;top:0;bottom:0;left:0;width:40px;display:inline-flex;justify-content:center;align-items:center;color:#999}.uk-form-icon:hover{color:#666}.uk-form-icon:not(a):not(button):not(input){pointer-events:none}.uk-form-icon:not(.uk-form-icon-flip)~.uk-input{padding-left:40px !important}.uk-form-icon-flip{right:0;left:auto}.uk-form-icon-flip~.uk-input{padding-right:40px !important}.uk-button{margin:0;border:none;overflow:visible;font:inherit;color:inherit;text-transform:none;-webkit-appearance:none;border-radius:0;display:inline-block;box-sizing:border-box;padding:0 30px;vertical-align:middle;font-size:.875rem;line-height:38px;text-align:center;text-decoration:none;text-transform:uppercase;transition:0.1s ease-in-out;transition-property:color, background-color, border-color}.uk-button:not(:disabled){cursor:pointer}.uk-button::-moz-focus-inner{border:0;padding:0}.uk-button:hover{text-decoration:none}.uk-button-default{background-color:rgba(0,0,0,0);color:#333;border:1px solid #e5e5e5}.uk-button-default:hover{background-color:rgba(0,0,0,0);color:#333;border-color:#b2b2b2}.uk-button-default:active,.uk-button-default.uk-active{background-color:rgba(0,0,0,0);color:#333;border-color:#999}.uk-button-primary{background-color:#1e87f0;color:#fff;border:1px solid transparent}.uk-button-primary:hover{background-color:#0f7ae5;color:#fff}.uk-button-primary:active,.uk-button-primary.uk-active{background-color:#0e6ecd;color:#fff}.uk-button-secondary{background-color:#222;color:#fff;border:1px solid transparent}.uk-button-secondary:hover{background-color:#151515;color:#fff}.uk-button-secondary:active,.uk-button-secondary.uk-active{background-color:#090909;color:#fff}.uk-button-danger{background-color:#f0506e;color:#fff;border:1px solid transparent}.uk-button-danger:hover{background-color:#ee395b;color:#fff}.uk-button-danger:active,.uk-button-danger.uk-active{background-color:#ec2147;color:#fff}.uk-button-default:disabled,.uk-button-primary:disabled,.uk-button-secondary:disabled,.uk-button-danger:disabled{background-color:rgba(0,0,0,0);color:#999;border-color:#e5e5e5}.uk-button-small{padding:0 15px;line-height:28px;font-size:.875rem}.uk-button-large{padding:0 40px;line-height:53px;font-size:.875rem}.uk-button-text{padding:0;line-height:1.5;background:none;color:#333;position:relative}.uk-button-text::before{content:"";position:absolute;bottom:0;left:0;right:100%;border-bottom:1px solid #333;transition:right 0.3s ease-out}.uk-button-text:hover{color:#333}.uk-button-text:hover::before{right:0}.uk-button-text:disabled{color:#999}.uk-button-text:disabled::before{display:none}.uk-button-link{padding:0;line-height:1.5;background:none;color:#333}.uk-button-link:hover{color:#999;text-decoration:none}.uk-button-link:disabled{color:#999;text-decoration:none}.uk-button-group{display:inline-flex;vertical-align:middle;position:relative}.uk-button-group>.uk-button:nth-child(n+2),.uk-button-group>div:nth-child(n+2) .uk-button{margin-left:-1px}.uk-button-group .uk-button:hover,.uk-button-group .uk-button:active,.uk-button-group .uk-button.uk-active{position:relative;z-index:1}.uk-progress{vertical-align:baseline;display:block;width:100%;border:0;background-color:#f8f8f8;margin-bottom:20px;height:15px;border-radius:500px;overflow:hidden}*+.uk-progress{margin-top:20px}.uk-progress::-webkit-progress-bar{background-color:transparent}.uk-progress::-webkit-progress-value{background-color:#1e87f0;transition:width 0.6s ease}.uk-progress::-moz-progress-bar{background-color:#1e87f0;transition:width 0.6s ease}.uk-section{display:flow-root;box-sizing:border-box;padding-top:40px;padding-bottom:40px}@media (min-width: 960px){.uk-section{padding-top:70px;padding-bottom:70px}}.uk-section>:last-child{margin-bottom:0}.uk-section-xsmall{padding-top:20px;padding-bottom:20px}.uk-section-small{padding-top:40px;padding-bottom:40px}.uk-section-large{padding-top:70px;padding-bottom:70px}@media (min-width: 960px){.uk-section-large{padding-top:140px;padding-bottom:140px}}.uk-section-xlarge{padding-top:140px;padding-bottom:140px}@media (min-width: 960px){.uk-section-xlarge{padding-top:210px;padding-bottom:210px}}.uk-section-default{background:#fff}.uk-section-muted{background:#f8f8f8}.uk-section-primary{background:#1e87f0}.uk-section-secondary{background:#222}.uk-container{display:flow-root;box-sizing:content-box;max-width:1200px;margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}@media (min-width: 640px){.uk-container{padding-left:30px;padding-right:30px}}@media (min-width: 960px){.uk-container{padding-left:40px;padding-right:40px}}.uk-container>:last-child{margin-bottom:0}.uk-container .uk-container{padding-left:0;padding-right:0}.uk-container-xsmall{max-width:750px}.uk-container-small{max-width:900px}.uk-container-large{max-width:1400px}.uk-container-xlarge{max-width:1600px}.uk-container-expand{max-width:none}.uk-container-expand-left{margin-left:0}.uk-container-expand-right{margin-right:0}@media (min-width: 640px){.uk-container-expand-left.uk-container-xsmall,.uk-container-expand-right.uk-container-xsmall{max-width:calc(50% + (750px / 2) - 30px)}.uk-container-expand-left.uk-container-small,.uk-container-expand-right.uk-container-small{max-width:calc(50% + (900px / 2) - 30px)}}@media (min-width: 960px){.uk-container-expand-left,.uk-container-expand-right{max-width:calc(50% + (1200px / 2) - 40px)}.uk-container-expand-left.uk-container-xsmall,.uk-container-expand-right.uk-container-xsmall{max-width:calc(50% + (750px / 2) - 40px)}.uk-container-expand-left.uk-container-small,.uk-container-expand-right.uk-container-small{max-width:calc(50% + (900px / 2) - 40px)}.uk-container-expand-left.uk-container-large,.uk-container-expand-right.uk-container-large{max-width:calc(50% + (1400px / 2) - 40px)}.uk-container-expand-left.uk-container-xlarge,.uk-container-expand-right.uk-container-xlarge{max-width:calc(50% + (1600px / 2) - 40px)}}.uk-container-item-padding-remove-left,.uk-container-item-padding-remove-right{width:calc(100% + 15px)}.uk-container-item-padding-remove-left{margin-left:-15px}.uk-container-item-padding-remove-right{margin-right:-15px}@media (min-width: 640px){.uk-container-item-padding-remove-left,.uk-container-item-padding-remove-right{width:calc(100% + 30px)}.uk-container-item-padding-remove-left{margin-left:-30px}.uk-container-item-padding-remove-right{margin-right:-30px}}@media (min-width: 960px){.uk-container-item-padding-remove-left,.uk-container-item-padding-remove-right{width:calc(100% + 40px)}.uk-container-item-padding-remove-left{margin-left:-40px}.uk-container-item-padding-remove-right{margin-right:-40px}}.uk-tile{display:flow-root;position:relative;box-sizing:border-box;padding-left:15px;padding-right:15px;padding-top:40px;padding-bottom:40px}@media (min-width: 640px){.uk-tile{padding-left:30px;padding-right:30px}}@media (min-width: 960px){.uk-tile{padding-left:40px;padding-right:40px;padding-top:70px;padding-bottom:70px}}.uk-tile>:last-child{margin-bottom:0}.uk-tile-xsmall{padding-top:20px;padding-bottom:20px}.uk-tile-small{padding-top:40px;padding-bottom:40px}.uk-tile-large{padding-top:70px;padding-bottom:70px}@media (min-width: 960px){.uk-tile-large{padding-top:140px;padding-bottom:140px}}.uk-tile-xlarge{padding-top:140px;padding-bottom:140px}@media (min-width: 960px){.uk-tile-xlarge{padding-top:210px;padding-bottom:210px}}.uk-tile-default{background-color:#fff}.uk-tile-muted{background-color:#f8f8f8}.uk-tile-primary{background-color:#1e87f0}.uk-tile-secondary{background-color:#222}.uk-card{position:relative;box-sizing:border-box;transition:box-shadow 0.1s ease-in-out}.uk-card-body{display:flow-root;padding:30px 30px}.uk-card-header{display:flow-root;padding:15px 30px}.uk-card-footer{display:flow-root;padding:15px 30px}@media (min-width: 1200px){.uk-card-body{padding:40px 40px}.uk-card-header{padding:20px 40px}.uk-card-footer{padding:20px 40px}}.uk-card-body>:last-child,.uk-card-header>:last-child,.uk-card-footer>:last-child{margin-bottom:0}.uk-card-title{font-size:1.5rem;line-height:1.4}.uk-card-badge{position:absolute;top:15px;right:15px;z-index:1;height:22px;padding:0 10px;background:#1e87f0;color:#fff;font-size:.875rem;display:flex;justify-content:center;align-items:center;line-height:0;border-radius:2px;text-transform:uppercase}.uk-card-badge:first-child+*{margin-top:0}.uk-card-hover:not(.uk-card-default):not(.uk-card-primary):not(.uk-card-secondary):hover{background-color:#fff;box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-card-default{background-color:#fff;color:#666;box-shadow:0 5px 15px rgba(0,0,0,0.08)}.uk-card-default .uk-card-title{color:#333}.uk-card-default.uk-card-hover:hover{background-color:#fff;box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-card-default .uk-card-header{border-bottom:1px solid #e5e5e5}.uk-card-default .uk-card-footer{border-top:1px solid #e5e5e5}.uk-card-primary{background-color:#1e87f0;color:#fff;box-shadow:0 5px 15px rgba(0,0,0,0.08)}.uk-card-primary .uk-card-title{color:#fff}.uk-card-primary.uk-card-hover:hover{background-color:#1e87f0;box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-card-secondary{background-color:#222;color:#fff;box-shadow:0 5px 15px rgba(0,0,0,0.08)}.uk-card-secondary .uk-card-title{color:#fff}.uk-card-secondary.uk-card-hover:hover{background-color:#222;box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-card-small.uk-card-body,.uk-card-small .uk-card-body{padding:20px 20px}.uk-card-small .uk-card-header{padding:13px 20px}.uk-card-small .uk-card-footer{padding:13px 20px}@media (min-width: 1200px){.uk-card-large.uk-card-body,.uk-card-large .uk-card-body{padding:70px 70px}.uk-card-large .uk-card-header{padding:35px 70px}.uk-card-large .uk-card-footer{padding:35px 70px}}.uk-card-body>.uk-nav-default{margin-left:-30px;margin-right:-30px}.uk-card-body>.uk-nav-default:only-child{margin-top:-15px;margin-bottom:-15px}.uk-card-body>.uk-nav-default>li>a,.uk-card-body>.uk-nav-default .uk-nav-header,.uk-card-body>.uk-nav-default .uk-nav-divider{padding-left:30px;padding-right:30px}.uk-card-body>.uk-nav-default .uk-nav-sub{padding-left:45px}@media (min-width: 1200px){.uk-card-body>.uk-nav-default{margin-left:-40px;margin-right:-40px}.uk-card-body>.uk-nav-default:only-child{margin-top:-25px;margin-bottom:-25px}.uk-card-body>.uk-nav-default>li>a,.uk-card-body>.uk-nav-default .uk-nav-header,.uk-card-body>.uk-nav-default .uk-nav-divider{padding-left:40px;padding-right:40px}.uk-card-body>.uk-nav-default .uk-nav-sub{padding-left:55px}}.uk-card-small>.uk-nav-default{margin-left:-20px;margin-right:-20px}.uk-card-small>.uk-nav-default:only-child{margin-top:-5px;margin-bottom:-5px}.uk-card-small>.uk-nav-default>li>a,.uk-card-small>.uk-nav-default .uk-nav-header,.uk-card-small>.uk-nav-default .uk-nav-divider{padding-left:20px;padding-right:20px}.uk-card-small>.uk-nav-default .uk-nav-sub{padding-left:35px}@media (min-width: 1200px){.uk-card-large>.uk-nav-default{margin:0}.uk-card-large>.uk-nav-default:only-child{margin:0}.uk-card-large>.uk-nav-default>li>a,.uk-card-large>.uk-nav-default .uk-nav-header,.uk-card-large>.uk-nav-default .uk-nav-divider{padding-left:0;padding-right:0}.uk-card-large>.uk-nav-default .uk-nav-sub{padding-left:15px}}.uk-close{color:#999;transition:0.1s ease-in-out;transition-property:color, opacity}.uk-close:hover{color:#666}.uk-spinner>*{animation:uk-spinner-rotate 1.4s linear infinite}@keyframes uk-spinner-rotate{0%{transform:rotate(0deg)}100%{transform:rotate(270deg)}}.uk-spinner>*>*{stroke-dasharray:88px;stroke-dashoffset:0;transform-origin:center;animation:uk-spinner-dash 1.4s ease-in-out infinite;stroke-width:1;stroke-linecap:round}@keyframes uk-spinner-dash{0%{stroke-dashoffset:88px}50%{stroke-dashoffset:22px;transform:rotate(135deg)}100%{stroke-dashoffset:88px;transform:rotate(450deg)}}.uk-totop{padding:5px;color:#999;transition:color 0.1s ease-in-out}.uk-totop:hover{color:#666}.uk-totop:active{color:#333}.uk-marker{padding:5px;background:#222;color:#fff;border-radius:500px}.uk-marker:hover{color:#fff}.uk-alert{position:relative;margin-bottom:20px;padding:15px 29px 15px 15px;background:#f8f8f8;color:#666}*+.uk-alert{margin-top:20px}.uk-alert>:last-child{margin-bottom:0}.uk-alert-close{position:absolute;top:20px;right:15px;color:inherit;opacity:.4}.uk-alert-close:first-child+*{margin-top:0}.uk-alert-close:hover{color:inherit;opacity:.8}.uk-alert-primary{background:#d8eafc;color:#1e87f0}.uk-alert-success{background:#edfbf6;color:#32d296}.uk-alert-warning{background:#fef5ee;color:#faa05a}.uk-alert-danger{background:#fef4f6;color:#f0506e}.uk-alert h1,.uk-alert h2,.uk-alert h3,.uk-alert h4,.uk-alert h5,.uk-alert h6{color:inherit}.uk-alert a:not([class]){color:inherit;text-decoration:underline}.uk-alert a:not([class]):hover{color:inherit;text-decoration:underline}.uk-placeholder{margin-bottom:20px;padding:30px 30px;background:rgba(0,0,0,0);border:1px dashed #e5e5e5}*+.uk-placeholder{margin-top:20px}.uk-placeholder>:last-child{margin-bottom:0}.uk-badge{box-sizing:border-box;min-width:18px;height:18px;padding:0 5px;border-radius:500px;vertical-align:middle;background:#1e87f0;color:#fff !important;font-size:11px;display:inline-flex;justify-content:center;align-items:center;line-height:0}.uk-badge:hover{text-decoration:none}.uk-label{display:inline-block;padding:0 10px;background:#1e87f0;line-height:1.5;font-size:.875rem;color:#fff;vertical-align:middle;white-space:nowrap;border-radius:2px;text-transform:uppercase}.uk-label-success{background-color:#32d296;color:#fff}.uk-label-warning{background-color:#faa05a;color:#fff}.uk-label-danger{background-color:#f0506e;color:#fff}.uk-overlay{padding:30px 30px}.uk-overlay>:last-child{margin-bottom:0}.uk-overlay-default{background:rgba(255,255,255,0.8)}.uk-overlay-primary{background:rgba(34,34,34,0.8)}.uk-article{display:flow-root}.uk-article>:last-child{margin-bottom:0}.uk-article+.uk-article{margin-top:70px}.uk-article-title{font-size:2.23125rem;line-height:1.2}@media (min-width: 960px){.uk-article-title{font-size:2.625rem}}.uk-article-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-article-meta a{color:#999}.uk-article-meta a:hover{color:#666;text-decoration:none}.uk-comment-body{display:flow-root;overflow-wrap:break-word;word-wrap:break-word}.uk-comment-header{display:flow-root;margin-bottom:20px}.uk-comment-body>:last-child,.uk-comment-header>:last-child{margin-bottom:0}.uk-comment-title{font-size:1.25rem;line-height:1.4}.uk-comment-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-comment-list{padding:0;list-style:none}.uk-comment-list>:nth-child(n+2){margin-top:70px}.uk-comment-list .uk-comment~ul{margin:70px 0 0 0;padding-left:30px;list-style:none}@media (min-width: 960px){.uk-comment-list .uk-comment~ul{padding-left:100px}}.uk-comment-list .uk-comment~ul>:nth-child(n+2){margin-top:70px}.uk-comment-primary{padding:30px;background-color:#f8f8f8}.uk-search{display:inline-block;position:relative;max-width:100%;margin:0}.uk-search-input::-webkit-search-cancel-button,.uk-search-input::-webkit-search-decoration{-webkit-appearance:none}.uk-search-input::-moz-placeholder{opacity:1}.uk-search-input{box-sizing:border-box;margin:0;border-radius:0;font:inherit;overflow:visible;-webkit-appearance:none;vertical-align:middle;width:100%;border:none;color:#666}.uk-search-input:focus{outline:none}.uk-search-input::placeholder{color:#999}.uk-search .uk-search-icon{position:absolute;top:0;bottom:0;left:0;display:inline-flex;justify-content:center;align-items:center;color:#999}.uk-search .uk-search-icon:hover{color:#999}.uk-search .uk-search-icon:not(a):not(button):not(input){pointer-events:none}.uk-search .uk-search-icon-flip{right:0;left:auto}.uk-search-default{width:240px}.uk-search-default .uk-search-input{height:40px;padding-left:10px;padding-right:10px;background:rgba(0,0,0,0);border:1px solid #e5e5e5}.uk-search-default .uk-search-input:focus{background-color:rgba(0,0,0,0);border-color:#1e87f0}.uk-search-default .uk-search-icon{width:40px}.uk-search-default .uk-search-icon:not(.uk-search-icon-flip)~.uk-search-input{padding-left:40px}.uk-search-default .uk-search-icon-flip~.uk-search-input{padding-right:40px}.uk-search-navbar{width:400px}.uk-search-navbar .uk-search-input{height:40px;background:rgba(0,0,0,0);font-size:1.5rem}.uk-search-navbar .uk-search-icon{width:40px}.uk-search-navbar .uk-search-icon:not(.uk-search-icon-flip)~.uk-search-input{padding-left:40px}.uk-search-navbar .uk-search-icon-flip~.uk-search-input{padding-right:40px}.uk-search-large{width:500px}.uk-search-large .uk-search-input{height:80px;background:rgba(0,0,0,0);font-size:2.625rem}.uk-search-large .uk-search-icon{width:80px}.uk-search-large .uk-search-icon:not(.uk-search-icon-flip)~.uk-search-input{padding-left:80px}.uk-search-large .uk-search-icon-flip~.uk-search-input{padding-right:80px}.uk-search-toggle{color:#999}.uk-search-toggle:hover{color:#666}.uk-accordion{padding:0;list-style:none}.uk-accordion>:nth-child(n+2){margin-top:20px}.uk-accordion-title{display:block;font-size:1.25rem;line-height:1.4;color:#333;overflow:hidden}.uk-accordion-title::before{content:"";width:1.4em;height:1.4em;margin-left:10px;float:right;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%}.uk-open>.uk-accordion-title::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-accordion-title:hover{color:#666;text-decoration:none}.uk-accordion-content{display:flow-root;margin-top:20px}.uk-accordion-content>:last-child{margin-bottom:0}.uk-drop{display:none;position:absolute;z-index:1020;--uk-position-offset: 20px;--uk-position-viewport-offset: 15px;box-sizing:border-box;width:300px}.uk-drop.uk-open{display:block}.uk-drop-stack .uk-drop-grid>*{width:100% !important}.uk-dropdown{display:none;position:absolute;z-index:1020;--uk-position-offset: 10px;--uk-position-viewport-offset: 15px;box-sizing:border-box;min-width:200px;padding:25px;background:#fff;color:#666;box-shadow:0 5px 12px rgba(0,0,0,0.15)}.uk-dropdown.uk-open{display:block}.uk-dropdown>:last-child{margin-bottom:0}.uk-dropdown-large{padding:40px}.uk-dropdown-nav{font-size:.875rem}.uk-dropdown-nav>li>a{color:#999}.uk-dropdown-nav>li>a:hover,.uk-dropdown-nav>li.uk-active>a{color:#666}.uk-dropdown-nav .uk-nav-subtitle{font-size:12px}.uk-dropdown-nav .uk-nav-header{color:#333}.uk-dropdown-nav .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-dropdown-nav .uk-nav-sub a{color:#999}.uk-dropdown-nav .uk-nav-sub a:hover,.uk-dropdown-nav .uk-nav-sub li.uk-active>a{color:#666}.uk-dropdown-stack .uk-dropdown-grid>*{width:100% !important}.uk-dropbar{--uk-position-offset: 0;--uk-position-shift-offset: 0;--uk-position-viewport-offset: 0;display:none;position:absolute;z-index:1020;box-sizing:border-box;padding:25px 15px 25px 15px;background:#fff;color:#666}.uk-dropbar.uk-open{display:block}.uk-dropbar>:last-child{margin-bottom:0}@media (min-width: 640px){.uk-dropbar{padding-left:30px;padding-right:30px}}@media (min-width: 960px){.uk-dropbar{padding-left:40px;padding-right:40px}}.uk-dropbar-large{padding-top:40px;padding-bottom:40px}.uk-dropbar-top{box-shadow:0 12px 7px -6px rgba(0,0,0,0.05)}.uk-dropbar-bottom{box-shadow:0 -12px 7px -6px rgba(0,0,0,0.05)}.uk-dropbar-left{box-shadow:12px 0 7px -6px rgba(0,0,0,0.05)}.uk-dropbar-right{box-shadow:-12px 0 7px -6px rgba(0,0,0,0.05)}.uk-modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:15px 15px;background:rgba(0,0,0,0.6);opacity:0;transition:opacity 0.15s linear}@media (min-width: 640px){.uk-modal{padding:50px 30px}}@media (min-width: 960px){.uk-modal{padding-left:40px;padding-right:40px}}.uk-modal.uk-open{opacity:1}.uk-modal-page{overflow:hidden}.uk-modal-dialog{position:relative;box-sizing:border-box;margin:0 auto;width:600px;max-width:100% !important;background:#fff;opacity:0;transform:translateY(-100px);transition:0.3s linear;transition-property:opacity, transform}.uk-open>.uk-modal-dialog{opacity:1;transform:translateY(0)}.uk-modal-container .uk-modal-dialog{width:1200px}.uk-modal-full{padding:0;background:none}.uk-modal-full .uk-modal-dialog{margin:0;width:100%;max-width:100%;transform:translateY(0)}.uk-modal-body{display:flow-root;padding:20px 20px}.uk-modal-header{display:flow-root;padding:10px 20px;background:#fff;border-bottom:1px solid #e5e5e5}.uk-modal-footer{display:flow-root;padding:10px 20px;background:#fff;border-top:1px solid #e5e5e5}@media (min-width: 640px){.uk-modal-body{padding:30px 30px}.uk-modal-header{padding:15px 30px}.uk-modal-footer{padding:15px 30px}}.uk-modal-body>:last-child,.uk-modal-header>:last-child,.uk-modal-footer>:last-child{margin-bottom:0}.uk-modal-title{font-size:2rem;line-height:1.3}[class*='uk-modal-close-']{position:absolute;z-index:1010;top:10px;right:10px;padding:5px}[class*='uk-modal-close-']:first-child+*{margin-top:0}.uk-modal-close-outside{top:0;right:-5px;transform:translate(0, -100%);color:#fff}.uk-modal-close-outside:hover{color:#fff}@media (min-width: 960px){.uk-modal-close-outside{right:0;transform:translate(100%, -100%)}}.uk-modal-close-full{top:0;right:0;padding:20px;background:#fff}.uk-slideshow{-webkit-tap-highlight-color:transparent}.uk-slideshow-items{position:relative;z-index:0;margin:0;padding:0;list-style:none;overflow:hidden;-webkit-touch-callout:none;touch-action:pan-y}.uk-slideshow-items>*{position:absolute;top:0;left:0;right:0;bottom:0;overflow:hidden;will-change:transform, opacity}.uk-slideshow-items>:not(.uk-active){display:none}.uk-slider{-webkit-tap-highlight-color:transparent}.uk-slider-container{overflow:hidden}.uk-slider-container-offset{margin:-11px -25px -39px -25px;padding:11px 25px 39px 25px}.uk-slider-items{will-change:transform;position:relative;touch-action:pan-y}.uk-slider-items:not(.uk-grid){display:flex;margin:0;padding:0;list-style:none;-webkit-touch-callout:none}.uk-slider-items.uk-grid{flex-wrap:nowrap}.uk-slider-items>*{flex:none;max-width:100%;position:relative}.uk-sticky{position:relative;box-sizing:border-box}.uk-sticky-fixed{z-index:980;margin:0 !important;-webkit-backface-visibility:hidden;backface-visibility:hidden}.uk-sticky[class*='uk-animation-']{animation-duration:.2s}.uk-sticky.uk-animation-reverse{animation-duration:.2s}.uk-sticky-placeholder{pointer-events:none}.uk-offcanvas{display:none;position:fixed;top:0;bottom:0;left:0;z-index:1000}.uk-offcanvas-flip .uk-offcanvas{right:0;left:auto}.uk-offcanvas-bar{position:absolute;top:0;bottom:0;left:-270px;box-sizing:border-box;width:270px;padding:20px 20px;background:#222;overflow-y:auto;-webkit-overflow-scrolling:touch}@media (min-width: 640px){.uk-offcanvas-bar{left:-350px;width:350px;padding:30px 30px}}.uk-offcanvas-flip .uk-offcanvas-bar{left:auto;right:-270px}@media (min-width: 640px){.uk-offcanvas-flip .uk-offcanvas-bar{right:-350px}}.uk-open>.uk-offcanvas-bar{left:0}.uk-offcanvas-flip .uk-open>.uk-offcanvas-bar{left:auto;right:0}.uk-offcanvas-bar-animation{transition:left 0.3s ease-out}.uk-offcanvas-flip .uk-offcanvas-bar-animation{transition-property:right}.uk-offcanvas-reveal{position:absolute;top:0;bottom:0;left:0;width:0;overflow:hidden;transition:width 0.3s ease-out}.uk-offcanvas-reveal .uk-offcanvas-bar{left:0}.uk-offcanvas-flip .uk-offcanvas-reveal .uk-offcanvas-bar{left:auto;right:0}.uk-open>.uk-offcanvas-reveal{width:270px}@media (min-width: 640px){.uk-open>.uk-offcanvas-reveal{width:350px}}.uk-offcanvas-flip .uk-offcanvas-reveal{right:0;left:auto}.uk-offcanvas-close{position:absolute;z-index:1000;top:5px;right:5px;padding:5px}@media (min-width: 640px){.uk-offcanvas-close{top:10px;right:10px}}.uk-offcanvas-close:first-child+*{margin-top:0}.uk-offcanvas-overlay{width:100vw;touch-action:none}.uk-offcanvas-overlay::before{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(0,0,0,0.1);opacity:0;transition:opacity 0.15s linear}.uk-offcanvas-overlay.uk-open::before{opacity:1}.uk-offcanvas-page,.uk-offcanvas-container{overflow-x:hidden}.uk-offcanvas-container{position:relative;left:0;transition:left 0.3s ease-out;box-sizing:border-box;width:100%}.uk-offcanvas-container-animation:not(.uk-offcanvas-flip){left:270px}.uk-offcanvas-flip.uk-offcanvas-container-animation{left:-270px}@media (min-width: 640px){.uk-offcanvas-container-animation:not(.uk-offcanvas-flip){left:350px}.uk-offcanvas-flip.uk-offcanvas-container-animation{left:-350px}}.uk-switcher{margin:0;padding:0;list-style:none}.uk-switcher>:not(.uk-active){display:none}.uk-switcher>*>:last-child{margin-bottom:0}.uk-leader{overflow:hidden}.uk-leader-fill::after{display:inline-block;margin-left:15px;width:0;content:attr(data-fill);white-space:nowrap}.uk-leader-fill.uk-leader-hide::after{display:none}:root{--uk-leader-fill-content: .}.uk-notification{position:fixed;top:10px;left:10px;z-index:1040;box-sizing:border-box;width:350px}.uk-notification-top-right,.uk-notification-bottom-right{left:auto;right:10px}.uk-notification-top-center,.uk-notification-bottom-center{left:50%;margin-left:-175px}.uk-notification-bottom-left,.uk-notification-bottom-right,.uk-notification-bottom-center{top:auto;bottom:10px}@media (max-width: 639px){.uk-notification{left:10px;right:10px;width:auto;margin:0}}.uk-notification-message{position:relative;padding:15px;background:#f8f8f8;color:#666;font-size:1.25rem;line-height:1.4;cursor:pointer}*+.uk-notification-message{margin-top:10px}.uk-notification-close{display:none;position:absolute;top:20px;right:15px}.uk-notification-message:hover .uk-notification-close{display:block}.uk-notification-message-primary{color:#1e87f0}.uk-notification-message-success{color:#32d296}.uk-notification-message-warning{color:#faa05a}.uk-notification-message-danger{color:#f0506e}.uk-tooltip{display:none;position:absolute;z-index:1030;--uk-position-offset: 10px;--uk-position-viewport-offset: 10;top:0;box-sizing:border-box;max-width:200px;padding:3px 6px;background:#666;border-radius:2px;color:#fff;font-size:12px}.uk-tooltip.uk-active{display:block}.uk-sortable{position:relative}.uk-sortable>:last-child{margin-bottom:0}.uk-sortable-drag{position:fixed !important;z-index:1050 !important;pointer-events:none}.uk-sortable-placeholder{opacity:0;pointer-events:none}.uk-sortable-empty{min-height:50px}.uk-sortable-handle:hover{cursor:move}.uk-countdown-number{font-variant-numeric:tabular-nums;font-size:2rem;line-height:.8}@media (min-width: 640px){.uk-countdown-number{font-size:4rem}}@media (min-width: 960px){.uk-countdown-number{font-size:6rem}}.uk-countdown-separator{font-size:1rem;line-height:1.6}@media (min-width: 640px){.uk-countdown-separator{font-size:2rem}}@media (min-width: 960px){.uk-countdown-separator{font-size:3rem}}.uk-grid{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none}.uk-grid>*{margin:0}.uk-grid>*>:last-child{margin-bottom:0}.uk-grid{margin-left:-30px}.uk-grid>*{padding-left:30px}.uk-grid+.uk-grid,.uk-grid>.uk-grid-margin,*+.uk-grid-margin{margin-top:30px}@media (min-width: 1200px){.uk-grid{margin-left:-40px}.uk-grid>*{padding-left:40px}.uk-grid+.uk-grid,.uk-grid>.uk-grid-margin,*+.uk-grid-margin{margin-top:40px}}.uk-grid-small,.uk-grid-column-small{margin-left:-15px}.uk-grid-small>*,.uk-grid-column-small>*{padding-left:15px}.uk-grid+.uk-grid-small,.uk-grid+.uk-grid-row-small,.uk-grid-small>.uk-grid-margin,.uk-grid-row-small>.uk-grid-margin,*+.uk-grid-margin-small{margin-top:15px}.uk-grid-medium,.uk-grid-column-medium{margin-left:-30px}.uk-grid-medium>*,.uk-grid-column-medium>*{padding-left:30px}.uk-grid+.uk-grid-medium,.uk-grid+.uk-grid-row-medium,.uk-grid-medium>.uk-grid-margin,.uk-grid-row-medium>.uk-grid-margin,*+.uk-grid-margin-medium{margin-top:30px}.uk-grid-large,.uk-grid-column-large{margin-left:-40px}.uk-grid-large>*,.uk-grid-column-large>*{padding-left:40px}.uk-grid+.uk-grid-large,.uk-grid+.uk-grid-row-large,.uk-grid-large>.uk-grid-margin,.uk-grid-row-large>.uk-grid-margin,*+.uk-grid-margin-large{margin-top:40px}@media (min-width: 1200px){.uk-grid-large,.uk-grid-column-large{margin-left:-70px}.uk-grid-large>*,.uk-grid-column-large>*{padding-left:70px}.uk-grid+.uk-grid-large,.uk-grid+.uk-grid-row-large,.uk-grid-large>.uk-grid-margin,.uk-grid-row-large>.uk-grid-margin,*+.uk-grid-margin-large{margin-top:70px}}.uk-grid-collapse,.uk-grid-column-collapse{margin-left:0}.uk-grid-collapse>*,.uk-grid-column-collapse>*{padding-left:0}.uk-grid+.uk-grid-collapse,.uk-grid+.uk-grid-row-collapse,.uk-grid-collapse>.uk-grid-margin,.uk-grid-row-collapse>.uk-grid-margin{margin-top:0}.uk-grid-divider>*{position:relative}.uk-grid-divider>:not(.uk-first-column)::before{content:"";position:absolute;top:0;bottom:0;border-left:1px solid #e5e5e5}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{content:"";position:absolute;left:0;right:0;border-top:1px solid #e5e5e5}.uk-grid-divider{margin-left:-60px}.uk-grid-divider>*{padding-left:60px}.uk-grid-divider>:not(.uk-first-column)::before{left:30px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin{margin-top:60px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{top:-30px;left:60px}@media (min-width: 1200px){.uk-grid-divider{margin-left:-80px}.uk-grid-divider>*{padding-left:80px}.uk-grid-divider>:not(.uk-first-column)::before{left:40px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin{margin-top:80px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{top:-40px;left:80px}}.uk-grid-divider.uk-grid-small,.uk-grid-divider.uk-grid-column-small{margin-left:-30px}.uk-grid-divider.uk-grid-small>*,.uk-grid-divider.uk-grid-column-small>*{padding-left:30px}.uk-grid-divider.uk-grid-small>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-column-small>:not(.uk-first-column)::before{left:15px}.uk-grid-divider.uk-grid-small.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-small.uk-grid-stack>.uk-grid-margin{margin-top:30px}.uk-grid-divider.uk-grid-small.uk-grid-stack>.uk-grid-margin::before{top:-15px;left:30px}.uk-grid-divider.uk-grid-row-small.uk-grid-stack>.uk-grid-margin::before{top:-15px}.uk-grid-divider.uk-grid-column-small.uk-grid-stack>.uk-grid-margin::before{left:30px}.uk-grid-divider.uk-grid-medium,.uk-grid-divider.uk-grid-column-medium{margin-left:-60px}.uk-grid-divider.uk-grid-medium>*,.uk-grid-divider.uk-grid-column-medium>*{padding-left:60px}.uk-grid-divider.uk-grid-medium>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-column-medium>:not(.uk-first-column)::before{left:30px}.uk-grid-divider.uk-grid-medium.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-medium.uk-grid-stack>.uk-grid-margin{margin-top:60px}.uk-grid-divider.uk-grid-medium.uk-grid-stack>.uk-grid-margin::before{top:-30px;left:60px}.uk-grid-divider.uk-grid-row-medium.uk-grid-stack>.uk-grid-margin::before{top:-30px}.uk-grid-divider.uk-grid-column-medium.uk-grid-stack>.uk-grid-margin::before{left:60px}.uk-grid-divider.uk-grid-large,.uk-grid-divider.uk-grid-column-large{margin-left:-80px}.uk-grid-divider.uk-grid-large>*,.uk-grid-divider.uk-grid-column-large>*{padding-left:80px}.uk-grid-divider.uk-grid-large>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-column-large>:not(.uk-first-column)::before{left:40px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin{margin-top:80px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin::before{top:-40px;left:80px}.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin::before{top:-40px}.uk-grid-divider.uk-grid-column-large.uk-grid-stack>.uk-grid-margin::before{left:80px}@media (min-width: 1200px){.uk-grid-divider.uk-grid-large,.uk-grid-divider.uk-grid-column-large{margin-left:-140px}.uk-grid-divider.uk-grid-large>*,.uk-grid-divider.uk-grid-column-large>*{padding-left:140px}.uk-grid-divider.uk-grid-large>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-column-large>:not(.uk-first-column)::before{left:70px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin{margin-top:140px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin::before{top:-70px;left:140px}.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin::before{top:-70px}.uk-grid-divider.uk-grid-column-large.uk-grid-stack>.uk-grid-margin::before{left:140px}}.uk-grid-match>*,.uk-grid-item-match{display:flex;flex-wrap:wrap}.uk-grid-match>*>:not([class*='uk-width']),.uk-grid-item-match>:not([class*='uk-width']){box-sizing:border-box;width:100%;flex:auto}.uk-nav,.uk-nav ul{margin:0;padding:0;list-style:none}.uk-nav li>a{display:flex;align-items:center;column-gap:0.25em;text-decoration:none}.uk-nav>li>a{padding:5px 0}ul.uk-nav-sub{padding:5px 0 5px 15px}.uk-nav-sub ul{padding-left:15px}.uk-nav-sub a{padding:2px 0}.uk-nav-parent-icon{margin-left:auto}.uk-nav>li>a[aria-expanded="true"] .uk-nav-parent-icon{transform:rotate(180deg)}.uk-nav-header{padding:5px 0;text-transform:uppercase;font-size:.875rem}.uk-nav-header:not(:first-child){margin-top:20px}.uk-nav .uk-nav-divider{margin:5px 0}.uk-nav-default{font-size:.875rem;line-height:1.5}.uk-nav-default>li>a{color:#999}.uk-nav-default>li>a:hover{color:#666}.uk-nav-default>li.uk-active>a{color:#333}.uk-nav-default .uk-nav-subtitle{font-size:12px}.uk-nav-default .uk-nav-header{color:#333}.uk-nav-default .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-default .uk-nav-sub{font-size:.875rem;line-height:1.5}.uk-nav-default .uk-nav-sub a{color:#999}.uk-nav-default .uk-nav-sub a:hover{color:#666}.uk-nav-default .uk-nav-sub li.uk-active>a{color:#333}.uk-nav-primary{font-size:1.5rem;line-height:1.5}.uk-nav-primary>li>a{color:#999}.uk-nav-primary>li>a:hover{color:#666}.uk-nav-primary>li.uk-active>a{color:#333}.uk-nav-primary .uk-nav-subtitle{font-size:1.25rem}.uk-nav-primary .uk-nav-header{color:#333}.uk-nav-primary .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-primary .uk-nav-sub{font-size:1.25rem;line-height:1.5}.uk-nav-primary .uk-nav-sub a{color:#999}.uk-nav-primary .uk-nav-sub a:hover{color:#666}.uk-nav-primary .uk-nav-sub li.uk-active>a{color:#333}.uk-nav-secondary{font-size:16px;line-height:1.5}.uk-nav-secondary>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider){margin-top:0}.uk-nav-secondary>li>a{color:#333;padding:10px 10px}.uk-nav-secondary>li>a:hover{color:#333;background-color:#f8f8f8}.uk-nav-secondary>li.uk-active>a{color:#333;background-color:#f8f8f8}.uk-nav-secondary .uk-nav-subtitle{font-size:.875rem;color:#999}.uk-nav-secondary>li>a:hover .uk-nav-subtitle{color:#666}.uk-nav-secondary>li.uk-active>a .uk-nav-subtitle{color:#333}.uk-nav-secondary .uk-nav-header{color:#333}.uk-nav-secondary .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-secondary .uk-nav-sub{font-size:.875rem;line-height:1.5}.uk-nav-secondary .uk-nav-sub a{color:#999}.uk-nav-secondary .uk-nav-sub a:hover{color:#666}.uk-nav-secondary .uk-nav-sub li.uk-active>a{color:#333}.uk-nav-center{text-align:center}.uk-nav-center li>a{justify-content:center}.uk-nav-center .uk-nav-sub,.uk-nav-center .uk-nav-sub ul{padding-left:0}.uk-nav-center .uk-nav-parent-icon{margin-left:4px}.uk-nav.uk-nav-divider>:not(.uk-nav-header,.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider){margin-top:5px;padding-top:5px;border-top:1px solid #e5e5e5}.uk-navbar{display:flex;position:relative}.uk-navbar-container:not(.uk-navbar-transparent){background:#f8f8f8}.uk-navbar-left,.uk-navbar-right,[class*='uk-navbar-center']{display:flex;gap:30px;align-items:center}.uk-navbar-right{margin-left:auto}.uk-navbar-center:only-child{margin-left:auto;margin-right:auto;position:relative}.uk-navbar-center:not(:only-child){position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:max-content;box-sizing:border-box;z-index:990}.uk-navbar-center-left,.uk-navbar-center-right{position:absolute;top:0}.uk-navbar-center-left{right:calc(100% + 30px)}.uk-navbar-center-right{left:calc(100% + 30px)}[class*='uk-navbar-center-']{width:max-content;box-sizing:border-box}.uk-navbar-nav{display:flex;gap:30px;margin:0;padding:0;list-style:none}.uk-navbar-left,.uk-navbar-right,.uk-navbar-center:only-child{flex-wrap:wrap}.uk-navbar-nav>li>a,.uk-navbar-item,.uk-navbar-toggle{display:flex;justify-content:center;align-items:center;column-gap:0.25em;box-sizing:border-box;min-height:80px;font-size:.875rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";text-decoration:none}.uk-navbar-nav>li>a{padding:0 0;color:#999;text-transform:uppercase;transition:0.1s ease-in-out;transition-property:color, background-color}.uk-navbar-nav>li:hover>a,.uk-navbar-nav>li>a[aria-expanded="true"]{color:#666}.uk-navbar-nav>li>a:active{color:#333}.uk-navbar-nav>li.uk-active>a{color:#333}.uk-navbar-parent-icon{margin-left:4px}.uk-navbar-nav>li>a[aria-expanded="true"] .uk-navbar-parent-icon{transform:rotate(180deg)}.uk-navbar-item{padding:0 0;color:#666}.uk-navbar-item>:last-child{margin-bottom:0}.uk-navbar-toggle{padding:0 0;color:#999}.uk-navbar-toggle:hover,.uk-navbar-toggle[aria-expanded="true"]{color:#666;text-decoration:none}.uk-navbar-subtitle{font-size:.875rem}.uk-navbar-justify .uk-navbar-left,.uk-navbar-justify .uk-navbar-right,.uk-navbar-justify .uk-navbar-nav,.uk-navbar-justify .uk-navbar-nav>li,.uk-navbar-justify .uk-navbar-item,.uk-navbar-justify .uk-navbar-toggle{flex-grow:1}.uk-navbar-dropdown{display:none;position:absolute;z-index:1020;--uk-position-offset: 15px;--uk-position-shift-offset: 0;--uk-position-viewport-offset: 15px;box-sizing:border-box;width:200px;padding:25px;background:#fff;color:#666;box-shadow:0 5px 12px rgba(0,0,0,0.15)}.uk-navbar-dropdown.uk-open{display:block}.uk-navbar-dropdown>:last-child{margin-bottom:0}.uk-navbar-dropdown-grid{margin-left:-30px}.uk-navbar-dropdown-grid>*{padding-left:30px}.uk-navbar-dropdown-grid>.uk-grid-margin{margin-top:30px}.uk-navbar-dropdown-stack .uk-navbar-dropdown-grid>*{width:100% !important}.uk-navbar-dropdown-width-2:not(.uk-navbar-dropdown-stack){width:400px}.uk-navbar-dropdown-width-3:not(.uk-navbar-dropdown-stack){width:600px}.uk-navbar-dropdown-width-4:not(.uk-navbar-dropdown-stack){width:800px}.uk-navbar-dropdown-width-5:not(.uk-navbar-dropdown-stack){width:1000px}.uk-navbar-dropdown-large{--uk-position-shift-offset: 0;padding:40px}.uk-navbar-dropdown-dropbar{width:auto;background:transparent;padding:25px 0 25px 0;--uk-position-offset: 0;--uk-position-shift-offset: 0;--uk-position-viewport-offset: 15px;box-shadow:none}@media (min-width: 640px){.uk-navbar-dropdown-dropbar{--uk-position-viewport-offset: 30px}}@media (min-width: 960px){.uk-navbar-dropdown-dropbar{--uk-position-viewport-offset: 40px}}.uk-navbar-dropdown-dropbar-large{--uk-position-shift-offset: 0;padding-top:40px;padding-bottom:40px}.uk-navbar-dropdown-nav{font-size:.875rem}.uk-navbar-dropdown-nav>li>a{color:#999}.uk-navbar-dropdown-nav>li>a:hover{color:#666}.uk-navbar-dropdown-nav>li.uk-active>a{color:#333}.uk-navbar-dropdown-nav .uk-nav-subtitle{font-size:12px}.uk-navbar-dropdown-nav .uk-nav-header{color:#333}.uk-navbar-dropdown-nav .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-navbar-dropdown-nav .uk-nav-sub a{color:#999}.uk-navbar-dropdown-nav .uk-nav-sub a:hover{color:#666}.uk-navbar-dropdown-nav .uk-nav-sub li.uk-active>a{color:#333}.uk-navbar-dropbar{display:block !important;z-index:980;padding:0;left:0;right:0}.uk-subnav{display:flex;flex-wrap:wrap;align-items:center;margin-left:-20px;padding:0;list-style:none}.uk-subnav>*{flex:none;padding-left:20px;position:relative}.uk-subnav>*>:first-child{display:flex;align-items:center;column-gap:0.25em;color:#999;font-size:.875rem;text-transform:uppercase;transition:0.1s ease-in-out;transition-property:color, background-color}.uk-subnav>*>a:hover{color:#666;text-decoration:none}.uk-subnav>.uk-active>a{color:#333}.uk-subnav-divider{margin-left:-41px}.uk-subnav-divider>*{display:flex;align-items:center}.uk-subnav-divider>::before{content:"";height:1.5em;margin-left:0px;margin-right:20px;border-left:1px solid transparent}.uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before{border-left-color:#e5e5e5}.uk-subnav-pill>*>:first-child{padding:5px 10px;background:rgba(0,0,0,0);color:#999}.uk-subnav-pill>*>a:hover{background-color:#f8f8f8;color:#666}.uk-subnav-pill>*>a:active{background-color:#f8f8f8;color:#666}.uk-subnav-pill>.uk-active>a{background-color:#1e87f0;color:#fff}.uk-subnav>.uk-disabled>a{color:#999}.uk-breadcrumb{padding:0;list-style:none}.uk-breadcrumb>*{display:contents}.uk-breadcrumb>*>*{font-size:.875rem;color:#999}.uk-breadcrumb>*>:hover{color:#666;text-decoration:none}.uk-breadcrumb>:last-child>span,.uk-breadcrumb>:last-child>a:not([href]){color:#666}.uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before{content:"/";display:inline-block;margin:0 20px 0 calc(20px - 4px);font-size:.875rem;color:#999}.uk-pagination{display:flex;flex-wrap:wrap;margin-left:0;padding:0;list-style:none}.uk-pagination>*{flex:none;padding-left:0;position:relative}.uk-pagination>*>*{display:block;padding:5px 10px;color:#999;transition:color 0.1s ease-in-out}.uk-pagination>*>:hover{color:#666;text-decoration:none}.uk-pagination>.uk-active>*{color:#666}.uk-pagination>.uk-disabled>*{color:#999}.uk-tab{display:flex;flex-wrap:wrap;margin-left:-20px;padding:0;list-style:none;position:relative}.uk-tab::before{content:"";position:absolute;bottom:0;left:20px;right:0;border-bottom:1px solid #e5e5e5}.uk-tab>*{flex:none;padding-left:20px;position:relative}.uk-tab>*>a{display:flex;align-items:center;column-gap:0.25em;justify-content:center;padding:5px 10px;color:#999;border-bottom:1px solid transparent;font-size:.875rem;text-transform:uppercase;transition:color 0.1s ease-in-out}.uk-tab>*>a:hover{color:#666;text-decoration:none}.uk-tab>.uk-active>a{color:#333;border-color:#1e87f0}.uk-tab>.uk-disabled>a{color:#999}.uk-tab-bottom::before{top:0;bottom:auto}.uk-tab-bottom>*>a{border-top:1px solid transparent;border-bottom:none}.uk-tab-left,.uk-tab-right{flex-direction:column;margin-left:0}.uk-tab-left>*,.uk-tab-right>*{padding-left:0}.uk-tab-left::before{top:0;bottom:0;left:auto;right:0;border-left:1px solid #e5e5e5;border-bottom:none}.uk-tab-right::before{top:0;bottom:0;left:0;right:auto;border-left:1px solid #e5e5e5;border-bottom:none}.uk-tab-left>*>a{justify-content:left;border-right:1px solid transparent;border-bottom:none}.uk-tab-right>*>a{justify-content:left;border-left:1px solid transparent;border-bottom:none}.uk-tab .uk-dropdown{margin-left:30px}.uk-slidenav{padding:5px 10px;color:rgba(102,102,102,0.5);transition:color 0.1s ease-in-out}.uk-slidenav:hover{color:rgba(102,102,102,0.9)}.uk-slidenav:active{color:rgba(102,102,102,0.5)}.uk-slidenav-large{padding:10px 10px}.uk-slidenav-container{display:flex}.uk-dotnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-12px}.uk-dotnav>*{flex:none;padding-left:12px}.uk-dotnav>*>*{display:block;box-sizing:border-box;width:10px;height:10px;border-radius:50%;background:rgba(0,0,0,0);text-indent:100%;overflow:hidden;white-space:nowrap;border:1px solid rgba(102,102,102,0.4);transition:0.2s ease-in-out;transition-property:background-color, border-color}.uk-dotnav>*>:hover{background-color:rgba(102,102,102,0.6);border-color:rgba(0,0,0,0)}.uk-dotnav>*>:active{background-color:rgba(102,102,102,0.2);border-color:rgba(0,0,0,0)}.uk-dotnav>.uk-active>*{background-color:rgba(102,102,102,0.6);border-color:rgba(0,0,0,0)}.uk-dotnav-vertical{flex-direction:column;margin-left:0;margin-top:-12px}.uk-dotnav-vertical>*{padding-left:0;padding-top:12px}.uk-thumbnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-15px}.uk-thumbnav>*{padding-left:15px}.uk-thumbnav>*>*{display:inline-block;position:relative}.uk-thumbnav>*>*::after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(255,255,255,0.4);transition:background-color 0.1s ease-in-out}.uk-thumbnav>*>:hover::after{background-color:rgba(0,0,0,0)}.uk-thumbnav>.uk-active>*::after{background-color:rgba(0,0,0,0)}.uk-thumbnav-vertical{flex-direction:column;margin-left:0;margin-top:-15px}.uk-thumbnav-vertical>*{padding-left:0;padding-top:15px}.uk-iconnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-10px}.uk-iconnav>*{padding-left:10px}.uk-iconnav>*>a{display:flex;align-items:center;column-gap:0.25em;line-height:0;color:#999;text-decoration:none;font-size:.875rem;transition:0.1s ease-in-out;transition-property:color, background-color}.uk-iconnav>*>a:hover{color:#666}.uk-iconnav>.uk-active>a{color:#666}.uk-iconnav-vertical{flex-direction:column;margin-left:0;margin-top:-10px}.uk-iconnav-vertical>*{padding-left:0;padding-top:10px}.uk-lightbox{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;background:#000;opacity:0;transition:opacity 0.15s linear;touch-action:pinch-zoom}.uk-lightbox.uk-open{display:block;opacity:1}.uk-lightbox :focus{outline-color:rgba(255,255,255,0.7)}.uk-lightbox :focus-visible{outline-color:rgba(255,255,255,0.7)}.uk-lightbox-page{overflow:hidden}.uk-lightbox-items>*{position:absolute;top:0;right:0;bottom:0;left:0;display:none;justify-content:center;align-items:center;color:rgba(255,255,255,0.7);will-change:transform, opacity}.uk-lightbox-items>*>*{max-width:100vw;max-height:100vh}.uk-lightbox-items>*>:not(iframe){width:auto;height:auto}.uk-lightbox-items>.uk-active{display:flex}.uk-lightbox-toolbar{padding:10px 10px;background:rgba(0,0,0,0.3);color:rgba(255,255,255,0.7)}.uk-lightbox-toolbar>*{color:rgba(255,255,255,0.7)}.uk-lightbox-toolbar-icon{padding:5px;color:rgba(255,255,255,0.7)}.uk-lightbox-toolbar-icon:hover{color:#fff}.uk-lightbox-button{box-sizing:border-box;width:50px;height:50px;background:rgba(0,0,0,0.3);color:rgba(255,255,255,0.7);display:inline-flex;justify-content:center;align-items:center}.uk-lightbox-button:hover{color:#fff}.uk-lightbox-caption:empty{display:none}.uk-lightbox-iframe{width:80%;height:80%}[class*='uk-animation-']{animation:.5s ease-out both}.uk-animation-fade{animation-name:uk-fade;animation-duration:.8s;animation-timing-function:linear}.uk-animation-scale-up{animation-name:uk-fade, uk-scale-up}.uk-animation-scale-down{animation-name:uk-fade, uk-scale-down}.uk-animation-slide-top{animation-name:uk-fade, uk-slide-top}.uk-animation-slide-bottom{animation-name:uk-fade, uk-slide-bottom}.uk-animation-slide-left{animation-name:uk-fade, uk-slide-left}.uk-animation-slide-right{animation-name:uk-fade, uk-slide-right}.uk-animation-slide-top-small{animation-name:uk-fade, uk-slide-top-small}.uk-animation-slide-bottom-small{animation-name:uk-fade, uk-slide-bottom-small}.uk-animation-slide-left-small{animation-name:uk-fade, uk-slide-left-small}.uk-animation-slide-right-small{animation-name:uk-fade, uk-slide-right-small}.uk-animation-slide-top-medium{animation-name:uk-fade, uk-slide-top-medium}.uk-animation-slide-bottom-medium{animation-name:uk-fade, uk-slide-bottom-medium}.uk-animation-slide-left-medium{animation-name:uk-fade, uk-slide-left-medium}.uk-animation-slide-right-medium{animation-name:uk-fade, uk-slide-right-medium}.uk-animation-kenburns{animation-name:uk-kenburns;animation-duration:15s}.uk-animation-shake{animation-name:uk-shake}.uk-animation-stroke{animation-name:uk-stroke;animation-duration:2s;stroke-dasharray:var(--uk-animation-stroke)}.uk-animation-reverse{animation-direction:reverse;animation-timing-function:ease-in}.uk-animation-fast{animation-duration:.1s}.uk-animation-toggle:not(:hover):not(:focus) [class*='uk-animation-']{animation-name:none}@keyframes uk-fade{0%{opacity:0}100%{opacity:1}}@keyframes uk-scale-up{0%{transform:scale(0.9)}100%{transform:scale(1)}}@keyframes uk-scale-down{0%{transform:scale(1.1)}100%{transform:scale(1)}}@keyframes uk-slide-top{0%{transform:translateY(-100%)}100%{transform:translateY(0)}}@keyframes uk-slide-bottom{0%{transform:translateY(100%)}100%{transform:translateY(0)}}@keyframes uk-slide-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes uk-slide-right{0%{transform:translateX(100%)}100%{transform:translateX(0)}}@keyframes uk-slide-top-small{0%{transform:translateY(-10px)}100%{transform:translateY(0)}}@keyframes uk-slide-bottom-small{0%{transform:translateY(10px)}100%{transform:translateY(0)}}@keyframes uk-slide-left-small{0%{transform:translateX(-10px)}100%{transform:translateX(0)}}@keyframes uk-slide-right-small{0%{transform:translateX(10px)}100%{transform:translateX(0)}}@keyframes uk-slide-top-medium{0%{transform:translateY(-50px)}100%{transform:translateY(0)}}@keyframes uk-slide-bottom-medium{0%{transform:translateY(50px)}100%{transform:translateY(0)}}@keyframes uk-slide-left-medium{0%{transform:translateX(-50px)}100%{transform:translateX(0)}}@keyframes uk-slide-right-medium{0%{transform:translateX(50px)}100%{transform:translateX(0)}}@keyframes uk-kenburns{0%{transform:scale(1)}100%{transform:scale(1.2)}}@keyframes uk-shake{0%,100%{transform:translateX(0)}10%{transform:translateX(-9px)}20%{transform:translateX(8px)}30%{transform:translateX(-7px)}40%{transform:translateX(6px)}50%{transform:translateX(-5px)}60%{transform:translateX(4px)}70%{transform:translateX(-3px)}80%{transform:translateX(2px)}90%{transform:translateX(-1px)}}@keyframes uk-stroke{0%{stroke-dashoffset:var(--uk-animation-stroke)}100%{stroke-dashoffset:0}}[class*='uk-child-width']>*{box-sizing:border-box;width:100%}.uk-child-width-1-2>*{width:50%}.uk-child-width-1-3>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4>*{width:25%}.uk-child-width-1-5>*{width:20%}.uk-child-width-1-6>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto>*{width:auto}.uk-child-width-expand>:not([class*='uk-width']){flex:1;min-width:1px}@media (min-width: 640px){.uk-child-width-1-1\@s>*{width:100%}.uk-child-width-1-2\@s>*{width:50%}.uk-child-width-1-3\@s>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@s>*{width:25%}.uk-child-width-1-5\@s>*{width:20%}.uk-child-width-1-6\@s>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@s>*{width:auto}.uk-child-width-expand\@s>:not([class*='uk-width']){flex:1;min-width:1px}}@media (min-width: 960px){.uk-child-width-1-1\@m>*{width:100%}.uk-child-width-1-2\@m>*{width:50%}.uk-child-width-1-3\@m>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@m>*{width:25%}.uk-child-width-1-5\@m>*{width:20%}.uk-child-width-1-6\@m>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@m>*{width:auto}.uk-child-width-expand\@m>:not([class*='uk-width']){flex:1;min-width:1px}}@media (min-width: 1200px){.uk-child-width-1-1\@l>*{width:100%}.uk-child-width-1-2\@l>*{width:50%}.uk-child-width-1-3\@l>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@l>*{width:25%}.uk-child-width-1-5\@l>*{width:20%}.uk-child-width-1-6\@l>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@l>*{width:auto}.uk-child-width-expand\@l>:not([class*='uk-width']){flex:1;min-width:1px}}@media (min-width: 1600px){.uk-child-width-1-1\@xl>*{width:100%}.uk-child-width-1-2\@xl>*{width:50%}.uk-child-width-1-3\@xl>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@xl>*{width:25%}.uk-child-width-1-5\@xl>*{width:20%}.uk-child-width-1-6\@xl>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@xl>*{width:auto}.uk-child-width-expand\@xl>:not([class*='uk-width']){flex:1;min-width:1px}}[class*='uk-width']{box-sizing:border-box;width:100%;max-width:100%}.uk-width-1-2{width:50%}.uk-width-1-3{width:calc(100% * 1 / 3.001)}.uk-width-2-3{width:calc(100% * 2 / 3.001)}.uk-width-1-4{width:25%}.uk-width-3-4{width:75%}.uk-width-1-5{width:20%}.uk-width-2-5{width:40%}.uk-width-3-5{width:60%}.uk-width-4-5{width:80%}.uk-width-1-6{width:calc(100% * 1 / 6.001)}.uk-width-5-6{width:calc(100% * 5 / 6.001)}.uk-width-small{width:150px}.uk-width-medium{width:300px}.uk-width-large{width:450px}.uk-width-xlarge{width:600px}.uk-width-2xlarge{width:750px}.uk-width-auto{width:auto}.uk-width-expand{flex:1;min-width:1px}@media (min-width: 640px){.uk-width-1-1\@s{width:100%}.uk-width-1-2\@s{width:50%}.uk-width-1-3\@s{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@s{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@s{width:25%}.uk-width-3-4\@s{width:75%}.uk-width-1-5\@s{width:20%}.uk-width-2-5\@s{width:40%}.uk-width-3-5\@s{width:60%}.uk-width-4-5\@s{width:80%}.uk-width-1-6\@s{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@s{width:calc(100% * 5 / 6.001)}.uk-width-small\@s{width:150px}.uk-width-medium\@s{width:300px}.uk-width-large\@s{width:450px}.uk-width-xlarge\@s{width:600px}.uk-width-2xlarge\@s{width:750px}.uk-width-auto\@s{width:auto}.uk-width-expand\@s{flex:1;min-width:1px}}@media (min-width: 960px){.uk-width-1-1\@m{width:100%}.uk-width-1-2\@m{width:50%}.uk-width-1-3\@m{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@m{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@m{width:25%}.uk-width-3-4\@m{width:75%}.uk-width-1-5\@m{width:20%}.uk-width-2-5\@m{width:40%}.uk-width-3-5\@m{width:60%}.uk-width-4-5\@m{width:80%}.uk-width-1-6\@m{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@m{width:calc(100% * 5 / 6.001)}.uk-width-small\@m{width:150px}.uk-width-medium\@m{width:300px}.uk-width-large\@m{width:450px}.uk-width-xlarge\@m{width:600px}.uk-width-2xlarge\@m{width:750px}.uk-width-auto\@m{width:auto}.uk-width-expand\@m{flex:1;min-width:1px}}@media (min-width: 1200px){.uk-width-1-1\@l{width:100%}.uk-width-1-2\@l{width:50%}.uk-width-1-3\@l{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@l{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@l{width:25%}.uk-width-3-4\@l{width:75%}.uk-width-1-5\@l{width:20%}.uk-width-2-5\@l{width:40%}.uk-width-3-5\@l{width:60%}.uk-width-4-5\@l{width:80%}.uk-width-1-6\@l{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@l{width:calc(100% * 5 / 6.001)}.uk-width-small\@l{width:150px}.uk-width-medium\@l{width:300px}.uk-width-large\@l{width:450px}.uk-width-xlarge\@l{width:600px}.uk-width-2xlarge\@l{width:750px}.uk-width-auto\@l{width:auto}.uk-width-expand\@l{flex:1;min-width:1px}}@media (min-width: 1600px){.uk-width-1-1\@xl{width:100%}.uk-width-1-2\@xl{width:50%}.uk-width-1-3\@xl{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@xl{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@xl{width:25%}.uk-width-3-4\@xl{width:75%}.uk-width-1-5\@xl{width:20%}.uk-width-2-5\@xl{width:40%}.uk-width-3-5\@xl{width:60%}.uk-width-4-5\@xl{width:80%}.uk-width-1-6\@xl{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@xl{width:calc(100% * 5 / 6.001)}.uk-width-small\@xl{width:150px}.uk-width-medium\@xl{width:300px}.uk-width-large\@xl{width:450px}.uk-width-xlarge\@xl{width:600px}.uk-width-2xlarge\@xl{width:750px}.uk-width-auto\@xl{width:auto}.uk-width-expand\@xl{flex:1;min-width:1px}}.uk-width-max-content{width:max-content}.uk-width-min-content{width:min-content}[class*='uk-height']{box-sizing:border-box}.uk-height-1-1{height:100%}.uk-height-viewport{min-height:100vh}.uk-height-viewport-2{min-height:200vh}.uk-height-viewport-3{min-height:300vh}.uk-height-viewport-4{min-height:400vh}.uk-height-small{height:150px}.uk-height-medium{height:300px}.uk-height-large{height:450px}.uk-height-max-small{max-height:150px}.uk-height-max-medium{max-height:300px}.uk-height-max-large{max-height:450px}.uk-text-lead{font-size:1.5rem;line-height:1.5;color:#333}.uk-text-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-text-meta a{color:#999}.uk-text-meta a:hover{color:#666;text-decoration:none}.uk-text-small{font-size:.875rem;line-height:1.5}.uk-text-large{font-size:1.5rem;line-height:1.5}.uk-text-default{font-size:16px;line-height:1.5}.uk-text-light{font-weight:300}.uk-text-normal{font-weight:400}.uk-text-bold{font-weight:700}.uk-text-lighter{font-weight:lighter}.uk-text-bolder{font-weight:bolder}.uk-text-italic{font-style:italic}.uk-text-capitalize{text-transform:capitalize !important}.uk-text-uppercase{text-transform:uppercase !important}.uk-text-lowercase{text-transform:lowercase !important}.uk-text-decoration-none{text-decoration:none !important}.uk-text-muted{color:#999 !important}.uk-text-emphasis{color:#333 !important}.uk-text-primary{color:#1e87f0 !important}.uk-text-secondary{color:#222 !important}.uk-text-success{color:#32d296 !important}.uk-text-warning{color:#faa05a !important}.uk-text-danger{color:#f0506e !important}.uk-text-background{-webkit-background-clip:text;color:transparent !important;display:inline-block;background-color:#1e87f0}.uk-text-left{text-align:left !important}.uk-text-right{text-align:right !important}.uk-text-center{text-align:center !important}.uk-text-justify{text-align:justify !important}@media (min-width: 640px){.uk-text-left\@s{text-align:left !important}.uk-text-right\@s{text-align:right !important}.uk-text-center\@s{text-align:center !important}}@media (min-width: 960px){.uk-text-left\@m{text-align:left !important}.uk-text-right\@m{text-align:right !important}.uk-text-center\@m{text-align:center !important}}@media (min-width: 1200px){.uk-text-left\@l{text-align:left !important}.uk-text-right\@l{text-align:right !important}.uk-text-center\@l{text-align:center !important}}@media (min-width: 1600px){.uk-text-left\@xl{text-align:left !important}.uk-text-right\@xl{text-align:right !important}.uk-text-center\@xl{text-align:center !important}}.uk-text-top{vertical-align:top !important}.uk-text-middle{vertical-align:middle !important}.uk-text-bottom{vertical-align:bottom !important}.uk-text-baseline{vertical-align:baseline !important}.uk-text-nowrap{white-space:nowrap}.uk-text-truncate{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}th.uk-text-truncate,td.uk-text-truncate{max-width:0}.uk-text-break{overflow-wrap:break-word}th.uk-text-break,td.uk-text-break{word-break:break-word}[class*='uk-column-']{column-gap:30px}@media (min-width: 1200px){[class*='uk-column-']{column-gap:40px}}[class*='uk-column-'] img{transform:translate3d(0, 0, 0)}.uk-column-divider{column-rule:1px solid #e5e5e5;column-gap:60px}@media (min-width: 1200px){.uk-column-divider{column-gap:80px}}.uk-column-1-2{column-count:2}.uk-column-1-3{column-count:3}.uk-column-1-4{column-count:4}.uk-column-1-5{column-count:5}.uk-column-1-6{column-count:6}@media (min-width: 640px){.uk-column-1-2\@s{column-count:2}.uk-column-1-3\@s{column-count:3}.uk-column-1-4\@s{column-count:4}.uk-column-1-5\@s{column-count:5}.uk-column-1-6\@s{column-count:6}}@media (min-width: 960px){.uk-column-1-2\@m{column-count:2}.uk-column-1-3\@m{column-count:3}.uk-column-1-4\@m{column-count:4}.uk-column-1-5\@m{column-count:5}.uk-column-1-6\@m{column-count:6}}@media (min-width: 1200px){.uk-column-1-2\@l{column-count:2}.uk-column-1-3\@l{column-count:3}.uk-column-1-4\@l{column-count:4}.uk-column-1-5\@l{column-count:5}.uk-column-1-6\@l{column-count:6}}@media (min-width: 1600px){.uk-column-1-2\@xl{column-count:2}.uk-column-1-3\@xl{column-count:3}.uk-column-1-4\@xl{column-count:4}.uk-column-1-5\@xl{column-count:5}.uk-column-1-6\@xl{column-count:6}}.uk-column-span{column-span:all}[uk-cover],[data-uk-cover]{max-width:none;position:absolute;left:50%;top:50%;--uk-position-translate-x: -50%;--uk-position-translate-y: -50%;transform:translate(var(--uk-position-translate-x), var(--uk-position-translate-y))}iframe[uk-cover],iframe[data-uk-cover]{pointer-events:none}.uk-cover-container{overflow:hidden;position:relative}.uk-background-default{background-color:#fff}.uk-background-muted{background-color:#f8f8f8}.uk-background-primary{background-color:#1e87f0}.uk-background-secondary{background-color:#222}.uk-background-cover,.uk-background-contain,.uk-background-width-1-1,.uk-background-height-1-1{background-position:50% 50%;background-repeat:no-repeat}.uk-background-cover{background-size:cover}.uk-background-contain{background-size:contain}.uk-background-width-1-1{background-size:100%}.uk-background-height-1-1{background-size:auto 100%}.uk-background-top-left{background-position:0 0}.uk-background-top-center{background-position:50% 0}.uk-background-top-right{background-position:100% 0}.uk-background-center-left{background-position:0 50%}.uk-background-center-center{background-position:50% 50%}.uk-background-center-right{background-position:100% 50%}.uk-background-bottom-left{background-position:0 100%}.uk-background-bottom-center{background-position:50% 100%}.uk-background-bottom-right{background-position:100% 100%}.uk-background-norepeat{background-repeat:no-repeat}.uk-background-fixed{background-attachment:fixed;backface-visibility:hidden}@media (pointer: coarse){.uk-background-fixed{background-attachment:scroll}}@media (max-width: 639px){.uk-background-image\@s{background-image:none !important}}@media (max-width: 959px){.uk-background-image\@m{background-image:none !important}}@media (max-width: 1199px){.uk-background-image\@l{background-image:none !important}}@media (max-width: 1599px){.uk-background-image\@xl{background-image:none !important}}.uk-background-blend-multiply{background-blend-mode:multiply}.uk-background-blend-screen{background-blend-mode:screen}.uk-background-blend-overlay{background-blend-mode:overlay}.uk-background-blend-darken{background-blend-mode:darken}.uk-background-blend-lighten{background-blend-mode:lighten}.uk-background-blend-color-dodge{background-blend-mode:color-dodge}.uk-background-blend-color-burn{background-blend-mode:color-burn}.uk-background-blend-hard-light{background-blend-mode:hard-light}.uk-background-blend-soft-light{background-blend-mode:soft-light}.uk-background-blend-difference{background-blend-mode:difference}.uk-background-blend-exclusion{background-blend-mode:exclusion}.uk-background-blend-hue{background-blend-mode:hue}.uk-background-blend-saturation{background-blend-mode:saturation}.uk-background-blend-color{background-blend-mode:color}.uk-background-blend-luminosity{background-blend-mode:luminosity}[class*='uk-align']{display:block;margin-bottom:30px}*+[class*='uk-align']{margin-top:30px}.uk-align-center{margin-left:auto;margin-right:auto}.uk-align-left{margin-top:0;margin-right:30px;float:left}.uk-align-right{margin-top:0;margin-left:30px;float:right}@media (min-width: 640px){.uk-align-left\@s{margin-top:0;margin-right:30px;float:left}.uk-align-right\@s{margin-top:0;margin-left:30px;float:right}}@media (min-width: 960px){.uk-align-left\@m{margin-top:0;margin-right:30px;float:left}.uk-align-right\@m{margin-top:0;margin-left:30px;float:right}}@media (min-width: 1200px){.uk-align-left\@l{margin-top:0;float:left}.uk-align-right\@l{margin-top:0;float:right}.uk-align-left,.uk-align-left\@s,.uk-align-left\@m,.uk-align-left\@l{margin-right:40px}.uk-align-right,.uk-align-right\@s,.uk-align-right\@m,.uk-align-right\@l{margin-left:40px}}@media (min-width: 1600px){.uk-align-left\@xl{margin-top:0;margin-right:40px;float:left}.uk-align-right\@xl{margin-top:0;margin-left:40px;float:right}}.uk-svg,.uk-svg:not(.uk-preserve) [fill*='#']:not(.uk-preserve){fill:currentcolor}.uk-svg:not(.uk-preserve) [stroke*='#']:not(.uk-preserve){stroke:currentcolor}.uk-svg{transform:translate(0, 0)}.uk-panel{display:flow-root;position:relative;box-sizing:border-box}.uk-panel>:last-child{margin-bottom:0}.uk-panel-scrollable{height:170px;padding:10px;border:1px solid #e5e5e5;overflow:auto;-webkit-overflow-scrolling:touch;resize:both}.uk-clearfix::before{content:"";display:table-cell}.uk-clearfix::after{content:"";display:table;clear:both}.uk-float-left{float:left}.uk-float-right{float:right}[class*='uk-float-']{max-width:100%}.uk-overflow-hidden{overflow:hidden}.uk-overflow-auto{overflow:auto;-webkit-overflow-scrolling:touch}.uk-overflow-auto>:last-child{margin-bottom:0}.uk-box-sizing-content{box-sizing:content-box}.uk-box-sizing-border{box-sizing:border-box}.uk-resize{resize:both}.uk-resize-horizontal{resize:horizontal}.uk-resize-vertical{resize:vertical}.uk-display-block{display:block !important}.uk-display-inline{display:inline !important}.uk-display-inline-block{display:inline-block !important}[class*='uk-inline']{display:inline-block;position:relative;max-width:100%;vertical-align:middle;-webkit-backface-visibility:hidden}.uk-inline-clip{overflow:hidden}.uk-preserve-width,.uk-preserve-width canvas,.uk-preserve-width img,.uk-preserve-width svg,.uk-preserve-width video{max-width:none}.uk-responsive-width,.uk-responsive-height{box-sizing:border-box}.uk-responsive-width{max-width:100% !important;height:auto}.uk-responsive-height{max-height:100%;width:auto;max-width:none}[uk-responsive],[data-uk-responsive]{max-width:100%}.uk-object-cover{object-fit:cover}.uk-object-contain{object-fit:contain}.uk-object-fill{object-fit:fill}.uk-object-none{object-fit:none}.uk-object-scale-down{object-fit:scale-down}.uk-object-top-left{object-position:0 0}.uk-object-top-center{object-position:50% 0}.uk-object-top-right{object-position:100% 0}.uk-object-center-left{object-position:0 50%}.uk-object-center-center{object-position:50% 50%}.uk-object-center-right{object-position:100% 50%}.uk-object-bottom-left{object-position:0 100%}.uk-object-bottom-center{object-position:50% 100%}.uk-object-bottom-right{object-position:100% 100%}.uk-border-circle{border-radius:50%}.uk-border-pill{border-radius:500px}.uk-border-rounded{border-radius:5px}.uk-inline-clip[class*='uk-border-']{-webkit-transform:translateZ(0)}.uk-box-shadow-small{box-shadow:0 2px 8px rgba(0,0,0,0.08)}.uk-box-shadow-medium{box-shadow:0 5px 15px rgba(0,0,0,0.08)}.uk-box-shadow-large{box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-box-shadow-xlarge{box-shadow:0 28px 50px rgba(0,0,0,0.16)}[class*='uk-box-shadow-hover']{transition:box-shadow .1s ease-in-out}.uk-box-shadow-hover-small:hover{box-shadow:0 2px 8px rgba(0,0,0,0.08)}.uk-box-shadow-hover-medium:hover{box-shadow:0 5px 15px rgba(0,0,0,0.08)}.uk-box-shadow-hover-large:hover{box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-box-shadow-hover-xlarge:hover{box-shadow:0 28px 50px rgba(0,0,0,0.16)}@supports (filter: blur(0)){.uk-box-shadow-bottom{display:inline-block;position:relative;z-index:0;max-width:100%;vertical-align:middle}.uk-box-shadow-bottom::after{content:"";position:absolute;bottom:-30px;left:0;right:0;z-index:-1;height:30px;border-radius:100%;background:#444;filter:blur(20px);will-change:filter}}.uk-dropcap::first-letter,.uk-dropcap>p:first-of-type::first-letter{display:block;margin-right:10px;float:left;font-size:4.5em;line-height:1;margin-bottom:-2px}@-moz-document url-prefix(){.uk-dropcap::first-letter,.uk-dropcap>p:first-of-type::first-letter{margin-top:1.1%}}.uk-logo{font-size:1.5rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";color:#333;text-decoration:none}:where(.uk-logo){display:inline-block;vertical-align:middle}.uk-logo:hover{color:#333;text-decoration:none}.uk-logo :where(img, svg, video){display:block}.uk-logo-inverse{display:none}.uk-disabled{pointer-events:none}.uk-drag,.uk-drag *{cursor:move}.uk-drag iframe{pointer-events:none}.uk-dragover{box-shadow:0 0 20px rgba(100,100,100,0.3)}.uk-blend-multiply{mix-blend-mode:multiply}.uk-blend-screen{mix-blend-mode:screen}.uk-blend-overlay{mix-blend-mode:overlay}.uk-blend-darken{mix-blend-mode:darken}.uk-blend-lighten{mix-blend-mode:lighten}.uk-blend-color-dodge{mix-blend-mode:color-dodge}.uk-blend-color-burn{mix-blend-mode:color-burn}.uk-blend-hard-light{mix-blend-mode:hard-light}.uk-blend-soft-light{mix-blend-mode:soft-light}.uk-blend-difference{mix-blend-mode:difference}.uk-blend-exclusion{mix-blend-mode:exclusion}.uk-blend-hue{mix-blend-mode:hue}.uk-blend-saturation{mix-blend-mode:saturation}.uk-blend-color{mix-blend-mode:color}.uk-blend-luminosity{mix-blend-mode:luminosity}.uk-transform-center{transform:translate(-50%, -50%)}.uk-transform-origin-top-left{transform-origin:0 0}.uk-transform-origin-top-center{transform-origin:50% 0}.uk-transform-origin-top-right{transform-origin:100% 0}.uk-transform-origin-center-left{transform-origin:0 50%}.uk-transform-origin-center-right{transform-origin:100% 50%}.uk-transform-origin-bottom-left{transform-origin:0 100%}.uk-transform-origin-bottom-center{transform-origin:50% 100%}.uk-transform-origin-bottom-right{transform-origin:100% 100%}.uk-flex{display:flex}.uk-flex-inline{display:inline-flex}.uk-flex-left{justify-content:flex-start}.uk-flex-center{justify-content:center}.uk-flex-right{justify-content:flex-end}.uk-flex-between{justify-content:space-between}.uk-flex-around{justify-content:space-around}@media (min-width: 640px){.uk-flex-left\@s{justify-content:flex-start}.uk-flex-center\@s{justify-content:center}.uk-flex-right\@s{justify-content:flex-end}.uk-flex-between\@s{justify-content:space-between}.uk-flex-around\@s{justify-content:space-around}}@media (min-width: 960px){.uk-flex-left\@m{justify-content:flex-start}.uk-flex-center\@m{justify-content:center}.uk-flex-right\@m{justify-content:flex-end}.uk-flex-between\@m{justify-content:space-between}.uk-flex-around\@m{justify-content:space-around}}@media (min-width: 1200px){.uk-flex-left\@l{justify-content:flex-start}.uk-flex-center\@l{justify-content:center}.uk-flex-right\@l{justify-content:flex-end}.uk-flex-between\@l{justify-content:space-between}.uk-flex-around\@l{justify-content:space-around}}@media (min-width: 1600px){.uk-flex-left\@xl{justify-content:flex-start}.uk-flex-center\@xl{justify-content:center}.uk-flex-right\@xl{justify-content:flex-end}.uk-flex-between\@xl{justify-content:space-between}.uk-flex-around\@xl{justify-content:space-around}}.uk-flex-stretch{align-items:stretch}.uk-flex-top{align-items:flex-start}.uk-flex-middle{align-items:center}.uk-flex-bottom{align-items:flex-end}.uk-flex-row{flex-direction:row}.uk-flex-row-reverse{flex-direction:row-reverse}.uk-flex-column{flex-direction:column}.uk-flex-column-reverse{flex-direction:column-reverse}.uk-flex-nowrap{flex-wrap:nowrap}.uk-flex-wrap{flex-wrap:wrap}.uk-flex-wrap-reverse{flex-wrap:wrap-reverse}.uk-flex-wrap-stretch{align-content:stretch}.uk-flex-wrap-top{align-content:flex-start}.uk-flex-wrap-middle{align-content:center}.uk-flex-wrap-bottom{align-content:flex-end}.uk-flex-wrap-between{align-content:space-between}.uk-flex-wrap-around{align-content:space-around}.uk-flex-first{order:-1}.uk-flex-last{order:99}@media (min-width: 640px){.uk-flex-first\@s{order:-1}.uk-flex-last\@s{order:99}}@media (min-width: 960px){.uk-flex-first\@m{order:-1}.uk-flex-last\@m{order:99}}@media (min-width: 1200px){.uk-flex-first\@l{order:-1}.uk-flex-last\@l{order:99}}@media (min-width: 1600px){.uk-flex-first\@xl{order:-1}.uk-flex-last\@xl{order:99}}.uk-flex-none{flex:none}.uk-flex-auto{flex:auto}.uk-flex-1{flex:1}.uk-margin{margin-bottom:20px}*+.uk-margin{margin-top:20px !important}.uk-margin-top{margin-top:20px !important}.uk-margin-bottom{margin-bottom:20px !important}.uk-margin-left{margin-left:20px !important}.uk-margin-right{margin-right:20px !important}.uk-margin-small{margin-bottom:10px}*+.uk-margin-small{margin-top:10px !important}.uk-margin-small-top{margin-top:10px !important}.uk-margin-small-bottom{margin-bottom:10px !important}.uk-margin-small-left{margin-left:10px !important}.uk-margin-small-right{margin-right:10px !important}.uk-margin-medium{margin-bottom:40px}*+.uk-margin-medium{margin-top:40px !important}.uk-margin-medium-top{margin-top:40px !important}.uk-margin-medium-bottom{margin-bottom:40px !important}.uk-margin-medium-left{margin-left:40px !important}.uk-margin-medium-right{margin-right:40px !important}.uk-margin-large{margin-bottom:40px}*+.uk-margin-large{margin-top:40px !important}.uk-margin-large-top{margin-top:40px !important}.uk-margin-large-bottom{margin-bottom:40px !important}.uk-margin-large-left{margin-left:40px !important}.uk-margin-large-right{margin-right:40px !important}@media (min-width: 1200px){.uk-margin-large{margin-bottom:70px}*+.uk-margin-large{margin-top:70px !important}.uk-margin-large-top{margin-top:70px !important}.uk-margin-large-bottom{margin-bottom:70px !important}.uk-margin-large-left{margin-left:70px !important}.uk-margin-large-right{margin-right:70px !important}}.uk-margin-xlarge{margin-bottom:70px}*+.uk-margin-xlarge{margin-top:70px !important}.uk-margin-xlarge-top{margin-top:70px !important}.uk-margin-xlarge-bottom{margin-bottom:70px !important}.uk-margin-xlarge-left{margin-left:70px !important}.uk-margin-xlarge-right{margin-right:70px !important}@media (min-width: 1200px){.uk-margin-xlarge{margin-bottom:140px}*+.uk-margin-xlarge{margin-top:140px !important}.uk-margin-xlarge-top{margin-top:140px !important}.uk-margin-xlarge-bottom{margin-bottom:140px !important}.uk-margin-xlarge-left{margin-left:140px !important}.uk-margin-xlarge-right{margin-right:140px !important}}.uk-margin-auto{margin-left:auto !important;margin-right:auto !important}.uk-margin-auto-top{margin-top:auto !important}.uk-margin-auto-bottom{margin-bottom:auto !important}.uk-margin-auto-left{margin-left:auto !important}.uk-margin-auto-right{margin-right:auto !important}.uk-margin-auto-vertical{margin-top:auto !important;margin-bottom:auto !important}@media (min-width: 640px){.uk-margin-auto\@s{margin-left:auto !important;margin-right:auto !important}.uk-margin-auto-left\@s{margin-left:auto !important}.uk-margin-auto-right\@s{margin-right:auto !important}}@media (min-width: 960px){.uk-margin-auto\@m{margin-left:auto !important;margin-right:auto !important}.uk-margin-auto-left\@m{margin-left:auto !important}.uk-margin-auto-right\@m{margin-right:auto !important}}@media (min-width: 1200px){.uk-margin-auto\@l{margin-left:auto !important;margin-right:auto !important}.uk-margin-auto-left\@l{margin-left:auto !important}.uk-margin-auto-right\@l{margin-right:auto !important}}@media (min-width: 1600px){.uk-margin-auto\@xl{margin-left:auto !important;margin-right:auto !important}.uk-margin-auto-left\@xl{margin-left:auto !important}.uk-margin-auto-right\@xl{margin-right:auto !important}}.uk-margin-remove{margin:0 !important}.uk-margin-remove-top{margin-top:0 !important}.uk-margin-remove-bottom{margin-bottom:0 !important}.uk-margin-remove-left{margin-left:0 !important}.uk-margin-remove-right{margin-right:0 !important}.uk-margin-remove-vertical{margin-top:0 !important;margin-bottom:0 !important}.uk-margin-remove-adjacent+*,.uk-margin-remove-first-child>:first-child{margin-top:0 !important}.uk-margin-remove-last-child>:last-child{margin-bottom:0 !important}@media (min-width: 640px){.uk-margin-remove-left\@s{margin-left:0 !important}.uk-margin-remove-right\@s{margin-right:0 !important}}@media (min-width: 960px){.uk-margin-remove-left\@m{margin-left:0 !important}.uk-margin-remove-right\@m{margin-right:0 !important}}@media (min-width: 1200px){.uk-margin-remove-left\@l{margin-left:0 !important}.uk-margin-remove-right\@l{margin-right:0 !important}}@media (min-width: 1600px){.uk-margin-remove-left\@xl{margin-left:0 !important}.uk-margin-remove-right\@xl{margin-right:0 !important}}.uk-padding{padding:30px}@media (min-width: 1200px){.uk-padding{padding:40px}}.uk-padding-small{padding:15px}.uk-padding-large{padding:40px}@media (min-width: 1200px){.uk-padding-large{padding:70px}}.uk-padding-remove{padding:0 !important}.uk-padding-remove-top{padding-top:0 !important}.uk-padding-remove-bottom{padding-bottom:0 !important}.uk-padding-remove-left{padding-left:0 !important}.uk-padding-remove-right{padding-right:0 !important}.uk-padding-remove-vertical{padding-top:0 !important;padding-bottom:0 !important}.uk-padding-remove-horizontal{padding-left:0 !important;padding-right:0 !important}:root{--uk-position-margin-offset: 0px}[class*='uk-position-top'],[class*='uk-position-bottom'],[class*='uk-position-left'],[class*='uk-position-right'],[class*='uk-position-center']{position:absolute !important;max-width:calc(100% - (var(--uk-position-margin-offset) * 2));box-sizing:border-box}.uk-position-top{top:0;left:0;right:0}.uk-position-bottom{bottom:0;left:0;right:0}.uk-position-left{top:0;bottom:0;left:0}.uk-position-right{top:0;bottom:0;right:0}.uk-position-top-left{top:0;left:0}.uk-position-top-right{top:0;right:0}.uk-position-bottom-left{bottom:0;left:0}.uk-position-bottom-right{bottom:0;right:0}.uk-position-center{top:calc(50% - var(--uk-position-margin-offset));left:calc(50% - var(--uk-position-margin-offset));--uk-position-translate-x: -50%;--uk-position-translate-y: -50%;transform:translate(var(--uk-position-translate-x), var(--uk-position-translate-y));width:max-content}[class*='uk-position-center-left'],[class*='uk-position-center-right']{top:calc(50% - var(--uk-position-margin-offset));--uk-position-translate-y: -50%;transform:translate(0, var(--uk-position-translate-y))}.uk-position-center-left{left:0}.uk-position-center-right{right:0}.uk-position-center-left-out{right:100%;width:max-content}.uk-position-center-right-out{left:100%;width:max-content}.uk-position-top-center,.uk-position-bottom-center{left:calc(50% - var(--uk-position-margin-offset));--uk-position-translate-x: -50%;transform:translate(var(--uk-position-translate-x), 0);width:max-content}.uk-position-top-center{top:0}.uk-position-bottom-center{bottom:0}.uk-position-cover{position:absolute;top:0;bottom:0;left:0;right:0}.uk-position-small{margin:15px;--uk-position-margin-offset: 15px}.uk-position-medium{margin:30px;--uk-position-margin-offset: 30px}.uk-position-large{margin:30px;--uk-position-margin-offset: 30px}@media (min-width: 1200px){.uk-position-large{margin:50px;--uk-position-margin-offset: 50px}}.uk-position-relative{position:relative !important}.uk-position-absolute{position:absolute !important}.uk-position-fixed{position:fixed !important}.uk-position-sticky{position:sticky !important}.uk-position-z-index{z-index:1}.uk-position-z-index-zero{z-index:0}.uk-position-z-index-negative{z-index:-1}:where(.uk-transition-fade),:where([class*='uk-transition-scale']),:where([class*='uk-transition-slide']){--uk-position-translate-x: 0;--uk-position-translate-y: 0}.uk-transition-fade,[class*='uk-transition-scale'],[class*='uk-transition-slide']{--uk-translate-x: 0;--uk-translate-y: 0;--uk-scale-x: 1;--uk-scale-y: 1;transform:translate(var(--uk-position-translate-x), var(--uk-position-translate-y)) translate(var(--uk-translate-x), var(--uk-translate-y)) scale(var(--uk-scale-x), var(--uk-scale-y));transition:.3s ease-out;transition-property:opacity, transform, filter;opacity:0}.uk-transition-toggle:hover .uk-transition-fade,.uk-transition-toggle:focus .uk-transition-fade,.uk-transition-toggle .uk-transition-fade:focus-within,.uk-transition-active.uk-active .uk-transition-fade{opacity:1}[class*='uk-transition-scale']{-webkit-backface-visibility:hidden}.uk-transition-scale-up{--uk-scale-x: 1;--uk-scale-y: 1}.uk-transition-scale-down{--uk-scale-x: 1.03;--uk-scale-y: 1.03}.uk-transition-toggle:hover .uk-transition-scale-up,.uk-transition-toggle:focus .uk-transition-scale-up,.uk-transition-toggle .uk-transition-scale-up:focus-within,.uk-transition-active.uk-active .uk-transition-scale-up{--uk-scale-x: 1.03;--uk-scale-y: 1.03;opacity:1}.uk-transition-toggle:hover .uk-transition-scale-down,.uk-transition-toggle:focus .uk-transition-scale-down,.uk-transition-toggle .uk-transition-scale-down:focus-within,.uk-transition-active.uk-active .uk-transition-scale-down{--uk-scale-x: 1;--uk-scale-y: 1;opacity:1}.uk-transition-slide-top{--uk-translate-y: -100%}.uk-transition-slide-bottom{--uk-translate-y: 100%}.uk-transition-slide-left{--uk-translate-x: -100%}.uk-transition-slide-right{--uk-translate-x: 100%}.uk-transition-slide-top-small{--uk-translate-y: calc(-1 * 10px)}.uk-transition-slide-bottom-small{--uk-translate-y: 10px}.uk-transition-slide-left-small{--uk-translate-x: calc(-1 * 10px)}.uk-transition-slide-right-small{--uk-translate-x: 10px}.uk-transition-slide-top-medium{--uk-translate-y: calc(-1 * 50px)}.uk-transition-slide-bottom-medium{--uk-translate-y: 50px}.uk-transition-slide-left-medium{--uk-translate-x: calc(-1 * 50px)}.uk-transition-slide-right-medium{--uk-translate-x: 50px}.uk-transition-toggle:hover [class*='uk-transition-slide'],.uk-transition-toggle:focus [class*='uk-transition-slide'],.uk-transition-toggle [class*='uk-transition-slide']:focus-within,.uk-transition-active.uk-active [class*='uk-transition-slide']{--uk-translate-x: 0;--uk-translate-y: 0;opacity:1}.uk-transition-opaque{opacity:1}.uk-transition-slow{transition-duration:.7s}[hidden],.uk-hidden{display:none !important}@media (min-width: 640px){.uk-hidden\@s{display:none !important}}@media (min-width: 960px){.uk-hidden\@m{display:none !important}}@media (min-width: 1200px){.uk-hidden\@l{display:none !important}}@media (min-width: 1600px){.uk-hidden\@xl{display:none !important}}@media (max-width: 639px){.uk-visible\@s{display:none !important}}@media (max-width: 959px){.uk-visible\@m{display:none !important}}@media (max-width: 1199px){.uk-visible\@l{display:none !important}}@media (max-width: 1599px){.uk-visible\@xl{display:none !important}}.uk-invisible{visibility:hidden !important}.uk-visible-toggle:not(:hover):not(:focus) .uk-hidden-hover:not(:focus-within){position:absolute !important;width:0 !important;height:0 !important;padding:0 !important;margin:0 !important;overflow:hidden !important}.uk-visible-toggle:not(:hover):not(:focus) .uk-invisible-hover:not(:focus-within){opacity:0 !important}@media (hover: none){.uk-hidden-touch{display:none !important}}@media (hover){.uk-hidden-notouch{display:none !important}}.uk-light,.uk-section-primary:not(.uk-preserve-color),.uk-section-secondary:not(.uk-preserve-color),.uk-tile-primary:not(.uk-preserve-color),.uk-tile-secondary:not(.uk-preserve-color),.uk-card-primary.uk-card-body,.uk-card-primary>:not([class*='uk-card-media']),.uk-card-secondary.uk-card-body,.uk-card-secondary>:not([class*='uk-card-media']),.uk-overlay-primary,.uk-offcanvas-bar{color:rgba(255,255,255,0.7)}.uk-light a,.uk-section-primary:not(.uk-preserve-color) a,.uk-section-secondary:not(.uk-preserve-color) a,.uk-tile-primary:not(.uk-preserve-color) a,.uk-tile-secondary:not(.uk-preserve-color) a,.uk-card-primary.uk-card-body a,.uk-card-primary>:not([class*='uk-card-media']) a,.uk-card-secondary.uk-card-body a,.uk-card-secondary>:not([class*='uk-card-media']) a,.uk-overlay-primary a,.uk-offcanvas-bar a,.uk-light .uk-link,.uk-section-primary:not(.uk-preserve-color) .uk-link,.uk-section-secondary:not(.uk-preserve-color) .uk-link,.uk-tile-primary:not(.uk-preserve-color) .uk-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-link,.uk-card-primary.uk-card-body .uk-link,.uk-card-primary>:not([class*='uk-card-media']) .uk-link,.uk-card-secondary.uk-card-body .uk-link,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link,.uk-overlay-primary .uk-link,.uk-offcanvas-bar .uk-link{color:#fff}.uk-light a:hover,.uk-section-primary:not(.uk-preserve-color) a:hover,.uk-section-secondary:not(.uk-preserve-color) a:hover,.uk-tile-primary:not(.uk-preserve-color) a:hover,.uk-tile-secondary:not(.uk-preserve-color) a:hover,.uk-card-primary.uk-card-body a:hover,.uk-card-primary>:not([class*='uk-card-media']) a:hover,.uk-card-secondary.uk-card-body a:hover,.uk-card-secondary>:not([class*='uk-card-media']) a:hover,.uk-overlay-primary a:hover,.uk-offcanvas-bar a:hover,.uk-light .uk-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link:hover,.uk-card-primary.uk-card-body .uk-link:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-link:hover,.uk-card-secondary.uk-card-body .uk-link:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link:hover,.uk-overlay-primary .uk-link:hover,.uk-offcanvas-bar .uk-link:hover,.uk-light .uk-link-toggle:hover .uk-link,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-toggle:hover .uk-link,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-toggle:hover .uk-link,.uk-overlay-primary .uk-link-toggle:hover .uk-link,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link{color:#fff}.uk-light :not(pre)>code,.uk-section-primary:not(.uk-preserve-color) :not(pre)>code,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>code,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>code,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>code,.uk-card-primary.uk-card-body :not(pre)>code,.uk-card-primary>:not([class*='uk-card-media']) :not(pre)>code,.uk-card-secondary.uk-card-body :not(pre)>code,.uk-card-secondary>:not([class*='uk-card-media']) :not(pre)>code,.uk-overlay-primary :not(pre)>code,.uk-offcanvas-bar :not(pre)>code,.uk-light :not(pre)>kbd,.uk-section-primary:not(.uk-preserve-color) :not(pre)>kbd,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>kbd,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>kbd,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>kbd,.uk-card-primary.uk-card-body :not(pre)>kbd,.uk-card-primary>:not([class*='uk-card-media']) :not(pre)>kbd,.uk-card-secondary.uk-card-body :not(pre)>kbd,.uk-card-secondary>:not([class*='uk-card-media']) :not(pre)>kbd,.uk-overlay-primary :not(pre)>kbd,.uk-offcanvas-bar :not(pre)>kbd,.uk-light :not(pre)>samp,.uk-section-primary:not(.uk-preserve-color) :not(pre)>samp,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>samp,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>samp,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>samp,.uk-card-primary.uk-card-body :not(pre)>samp,.uk-card-primary>:not([class*='uk-card-media']) :not(pre)>samp,.uk-card-secondary.uk-card-body :not(pre)>samp,.uk-card-secondary>:not([class*='uk-card-media']) :not(pre)>samp,.uk-overlay-primary :not(pre)>samp,.uk-offcanvas-bar :not(pre)>samp{color:rgba(255,255,255,0.7);background:rgba(255,255,255,0.1)}.uk-light em,.uk-section-primary:not(.uk-preserve-color) em,.uk-section-secondary:not(.uk-preserve-color) em,.uk-tile-primary:not(.uk-preserve-color) em,.uk-tile-secondary:not(.uk-preserve-color) em,.uk-card-primary.uk-card-body em,.uk-card-primary>:not([class*='uk-card-media']) em,.uk-card-secondary.uk-card-body em,.uk-card-secondary>:not([class*='uk-card-media']) em,.uk-overlay-primary em,.uk-offcanvas-bar em{color:#fff}.uk-light h1,.uk-section-primary:not(.uk-preserve-color) h1,.uk-section-secondary:not(.uk-preserve-color) h1,.uk-tile-primary:not(.uk-preserve-color) h1,.uk-tile-secondary:not(.uk-preserve-color) h1,.uk-card-primary.uk-card-body h1,.uk-card-primary>:not([class*='uk-card-media']) h1,.uk-card-secondary.uk-card-body h1,.uk-card-secondary>:not([class*='uk-card-media']) h1,.uk-overlay-primary h1,.uk-offcanvas-bar h1,.uk-light .uk-h1,.uk-section-primary:not(.uk-preserve-color) .uk-h1,.uk-section-secondary:not(.uk-preserve-color) .uk-h1,.uk-tile-primary:not(.uk-preserve-color) .uk-h1,.uk-tile-secondary:not(.uk-preserve-color) .uk-h1,.uk-card-primary.uk-card-body .uk-h1,.uk-card-primary>:not([class*='uk-card-media']) .uk-h1,.uk-card-secondary.uk-card-body .uk-h1,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h1,.uk-overlay-primary .uk-h1,.uk-offcanvas-bar .uk-h1,.uk-light h2,.uk-section-primary:not(.uk-preserve-color) h2,.uk-section-secondary:not(.uk-preserve-color) h2,.uk-tile-primary:not(.uk-preserve-color) h2,.uk-tile-secondary:not(.uk-preserve-color) h2,.uk-card-primary.uk-card-body h2,.uk-card-primary>:not([class*='uk-card-media']) h2,.uk-card-secondary.uk-card-body h2,.uk-card-secondary>:not([class*='uk-card-media']) h2,.uk-overlay-primary h2,.uk-offcanvas-bar h2,.uk-light .uk-h2,.uk-light .markdown h1,.markdown .uk-light h1,.uk-section-primary:not(.uk-preserve-color) .uk-h2,.uk-section-primary:not(.uk-preserve-color) .markdown h1,.markdown .uk-section-primary:not(.uk-preserve-color) h1,.uk-section-secondary:not(.uk-preserve-color) .uk-h2,.uk-section-secondary:not(.uk-preserve-color) .markdown h1,.markdown .uk-section-secondary:not(.uk-preserve-color) h1,.uk-tile-primary:not(.uk-preserve-color) .uk-h2,.uk-tile-primary:not(.uk-preserve-color) .markdown h1,.markdown .uk-tile-primary:not(.uk-preserve-color) h1,.uk-tile-secondary:not(.uk-preserve-color) .uk-h2,.uk-tile-secondary:not(.uk-preserve-color) .markdown h1,.markdown .uk-tile-secondary:not(.uk-preserve-color) h1,.uk-card-primary.uk-card-body .uk-h2,.uk-card-primary.uk-card-body .markdown h1,.markdown .uk-card-primary.uk-card-body h1,.uk-card-primary>:not([class*='uk-card-media']) .uk-h2,.uk-card-primary>:not([class*='uk-card-media']) .markdown h1,.markdown .uk-card-primary>:not([class*='uk-card-media']) h1,.uk-card-secondary.uk-card-body .uk-h2,.uk-card-secondary.uk-card-body .markdown h1,.markdown .uk-card-secondary.uk-card-body h1,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h2,.uk-card-secondary>:not([class*='uk-card-media']) .markdown h1,.markdown .uk-card-secondary>:not([class*='uk-card-media']) h1,.uk-overlay-primary .uk-h2,.uk-overlay-primary .markdown h1,.markdown .uk-overlay-primary h1,.uk-offcanvas-bar .uk-h2,.uk-offcanvas-bar .markdown h1,.markdown .uk-offcanvas-bar h1,.uk-light h3,.uk-section-primary:not(.uk-preserve-color) h3,.uk-section-secondary:not(.uk-preserve-color) h3,.uk-tile-primary:not(.uk-preserve-color) h3,.uk-tile-secondary:not(.uk-preserve-color) h3,.uk-card-primary.uk-card-body h3,.uk-card-primary>:not([class*='uk-card-media']) h3,.uk-card-secondary.uk-card-body h3,.uk-card-secondary>:not([class*='uk-card-media']) h3,.uk-overlay-primary h3,.uk-offcanvas-bar h3,.uk-light .uk-h3,.uk-light .markdown h2,.markdown .uk-light h2,.uk-section-primary:not(.uk-preserve-color) .uk-h3,.uk-section-primary:not(.uk-preserve-color) .markdown h2,.markdown .uk-section-primary:not(.uk-preserve-color) h2,.uk-section-secondary:not(.uk-preserve-color) .uk-h3,.uk-section-secondary:not(.uk-preserve-color) .markdown h2,.markdown .uk-section-secondary:not(.uk-preserve-color) h2,.uk-tile-primary:not(.uk-preserve-color) .uk-h3,.uk-tile-primary:not(.uk-preserve-color) .markdown h2,.markdown .uk-tile-primary:not(.uk-preserve-color) h2,.uk-tile-secondary:not(.uk-preserve-color) .uk-h3,.uk-tile-secondary:not(.uk-preserve-color) .markdown h2,.markdown .uk-tile-secondary:not(.uk-preserve-color) h2,.uk-card-primary.uk-card-body .uk-h3,.uk-card-primary.uk-card-body .markdown h2,.markdown .uk-card-primary.uk-card-body h2,.uk-card-primary>:not([class*='uk-card-media']) .uk-h3,.uk-card-primary>:not([class*='uk-card-media']) .markdown h2,.markdown .uk-card-primary>:not([class*='uk-card-media']) h2,.uk-card-secondary.uk-card-body .uk-h3,.uk-card-secondary.uk-card-body .markdown h2,.markdown .uk-card-secondary.uk-card-body h2,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h3,.uk-card-secondary>:not([class*='uk-card-media']) .markdown h2,.markdown .uk-card-secondary>:not([class*='uk-card-media']) h2,.uk-overlay-primary .uk-h3,.uk-overlay-primary .markdown h2,.markdown .uk-overlay-primary h2,.uk-offcanvas-bar .uk-h3,.uk-offcanvas-bar .markdown h2,.markdown .uk-offcanvas-bar h2,.uk-light h4,.uk-section-primary:not(.uk-preserve-color) h4,.uk-section-secondary:not(.uk-preserve-color) h4,.uk-tile-primary:not(.uk-preserve-color) h4,.uk-tile-secondary:not(.uk-preserve-color) h4,.uk-card-primary.uk-card-body h4,.uk-card-primary>:not([class*='uk-card-media']) h4,.uk-card-secondary.uk-card-body h4,.uk-card-secondary>:not([class*='uk-card-media']) h4,.uk-overlay-primary h4,.uk-offcanvas-bar h4,.uk-light .uk-h4,.uk-light .markdown h3,.markdown .uk-light h3,.uk-section-primary:not(.uk-preserve-color) .uk-h4,.uk-section-primary:not(.uk-preserve-color) .markdown h3,.markdown .uk-section-primary:not(.uk-preserve-color) h3,.uk-section-secondary:not(.uk-preserve-color) .uk-h4,.uk-section-secondary:not(.uk-preserve-color) .markdown h3,.markdown .uk-section-secondary:not(.uk-preserve-color) h3,.uk-tile-primary:not(.uk-preserve-color) .uk-h4,.uk-tile-primary:not(.uk-preserve-color) .markdown h3,.markdown .uk-tile-primary:not(.uk-preserve-color) h3,.uk-tile-secondary:not(.uk-preserve-color) .uk-h4,.uk-tile-secondary:not(.uk-preserve-color) .markdown h3,.markdown .uk-tile-secondary:not(.uk-preserve-color) h3,.uk-card-primary.uk-card-body .uk-h4,.uk-card-primary.uk-card-body .markdown h3,.markdown .uk-card-primary.uk-card-body h3,.uk-card-primary>:not([class*='uk-card-media']) .uk-h4,.uk-card-primary>:not([class*='uk-card-media']) .markdown h3,.markdown .uk-card-primary>:not([class*='uk-card-media']) h3,.uk-card-secondary.uk-card-body .uk-h4,.uk-card-secondary.uk-card-body .markdown h3,.markdown .uk-card-secondary.uk-card-body h3,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h4,.uk-card-secondary>:not([class*='uk-card-media']) .markdown h3,.markdown .uk-card-secondary>:not([class*='uk-card-media']) h3,.uk-overlay-primary .uk-h4,.uk-overlay-primary .markdown h3,.markdown .uk-overlay-primary h3,.uk-offcanvas-bar .uk-h4,.uk-offcanvas-bar .markdown h3,.markdown .uk-offcanvas-bar h3,.uk-light h5,.uk-section-primary:not(.uk-preserve-color) h5,.uk-section-secondary:not(.uk-preserve-color) h5,.uk-tile-primary:not(.uk-preserve-color) h5,.uk-tile-secondary:not(.uk-preserve-color) h5,.uk-card-primary.uk-card-body h5,.uk-card-primary>:not([class*='uk-card-media']) h5,.uk-card-secondary.uk-card-body h5,.uk-card-secondary>:not([class*='uk-card-media']) h5,.uk-overlay-primary h5,.uk-offcanvas-bar h5,.uk-light .uk-h5,.uk-section-primary:not(.uk-preserve-color) .uk-h5,.uk-section-secondary:not(.uk-preserve-color) .uk-h5,.uk-tile-primary:not(.uk-preserve-color) .uk-h5,.uk-tile-secondary:not(.uk-preserve-color) .uk-h5,.uk-card-primary.uk-card-body .uk-h5,.uk-card-primary>:not([class*='uk-card-media']) .uk-h5,.uk-card-secondary.uk-card-body .uk-h5,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h5,.uk-overlay-primary .uk-h5,.uk-offcanvas-bar .uk-h5,.uk-light h6,.uk-section-primary:not(.uk-preserve-color) h6,.uk-section-secondary:not(.uk-preserve-color) h6,.uk-tile-primary:not(.uk-preserve-color) h6,.uk-tile-secondary:not(.uk-preserve-color) h6,.uk-card-primary.uk-card-body h6,.uk-card-primary>:not([class*='uk-card-media']) h6,.uk-card-secondary.uk-card-body h6,.uk-card-secondary>:not([class*='uk-card-media']) h6,.uk-overlay-primary h6,.uk-offcanvas-bar h6,.uk-light .uk-h6,.uk-section-primary:not(.uk-preserve-color) .uk-h6,.uk-section-secondary:not(.uk-preserve-color) .uk-h6,.uk-tile-primary:not(.uk-preserve-color) .uk-h6,.uk-tile-secondary:not(.uk-preserve-color) .uk-h6,.uk-card-primary.uk-card-body .uk-h6,.uk-card-primary>:not([class*='uk-card-media']) .uk-h6,.uk-card-secondary.uk-card-body .uk-h6,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h6,.uk-overlay-primary .uk-h6,.uk-offcanvas-bar .uk-h6,.uk-light .uk-heading-small,.uk-section-primary:not(.uk-preserve-color) .uk-heading-small,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-small,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-small,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-small,.uk-card-primary.uk-card-body .uk-heading-small,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-small,.uk-card-secondary.uk-card-body .uk-heading-small,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-small,.uk-overlay-primary .uk-heading-small,.uk-offcanvas-bar .uk-heading-small,.uk-light .uk-heading-medium,.uk-section-primary:not(.uk-preserve-color) .uk-heading-medium,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-medium,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-medium,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-medium,.uk-card-primary.uk-card-body .uk-heading-medium,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-medium,.uk-card-secondary.uk-card-body .uk-heading-medium,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-medium,.uk-overlay-primary .uk-heading-medium,.uk-offcanvas-bar .uk-heading-medium,.uk-light .uk-heading-large,.uk-section-primary:not(.uk-preserve-color) .uk-heading-large,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-large,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-large,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-large,.uk-card-primary.uk-card-body .uk-heading-large,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-large,.uk-card-secondary.uk-card-body .uk-heading-large,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-large,.uk-overlay-primary .uk-heading-large,.uk-offcanvas-bar .uk-heading-large,.uk-light .uk-heading-xlarge,.uk-section-primary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-card-primary.uk-card-body .uk-heading-xlarge,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-xlarge,.uk-card-secondary.uk-card-body .uk-heading-xlarge,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-xlarge,.uk-overlay-primary .uk-heading-xlarge,.uk-offcanvas-bar .uk-heading-xlarge,.uk-light .uk-heading-2xlarge,.uk-section-primary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-card-primary.uk-card-body .uk-heading-2xlarge,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-2xlarge,.uk-card-secondary.uk-card-body .uk-heading-2xlarge,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-2xlarge,.uk-overlay-primary .uk-heading-2xlarge,.uk-offcanvas-bar .uk-heading-2xlarge{color:#fff}.uk-light blockquote,.uk-section-primary:not(.uk-preserve-color) blockquote,.uk-section-secondary:not(.uk-preserve-color) blockquote,.uk-tile-primary:not(.uk-preserve-color) blockquote,.uk-tile-secondary:not(.uk-preserve-color) blockquote,.uk-card-primary.uk-card-body blockquote,.uk-card-primary>:not([class*='uk-card-media']) blockquote,.uk-card-secondary.uk-card-body blockquote,.uk-card-secondary>:not([class*='uk-card-media']) blockquote,.uk-overlay-primary blockquote,.uk-offcanvas-bar blockquote{color:#fff}.uk-light blockquote footer,.uk-section-primary:not(.uk-preserve-color) blockquote footer,.uk-section-secondary:not(.uk-preserve-color) blockquote footer,.uk-tile-primary:not(.uk-preserve-color) blockquote footer,.uk-tile-secondary:not(.uk-preserve-color) blockquote footer,.uk-card-primary.uk-card-body blockquote footer,.uk-card-primary>:not([class*='uk-card-media']) blockquote footer,.uk-card-secondary.uk-card-body blockquote footer,.uk-card-secondary>:not([class*='uk-card-media']) blockquote footer,.uk-overlay-primary blockquote footer,.uk-offcanvas-bar blockquote footer{color:rgba(255,255,255,0.7)}.uk-light hr,.uk-section-primary:not(.uk-preserve-color) hr,.uk-section-secondary:not(.uk-preserve-color) hr,.uk-tile-primary:not(.uk-preserve-color) hr,.uk-tile-secondary:not(.uk-preserve-color) hr,.uk-card-primary.uk-card-body hr,.uk-card-primary>:not([class*='uk-card-media']) hr,.uk-card-secondary.uk-card-body hr,.uk-card-secondary>:not([class*='uk-card-media']) hr,.uk-overlay-primary hr,.uk-offcanvas-bar hr,.uk-light .uk-hr,.uk-section-primary:not(.uk-preserve-color) .uk-hr,.uk-section-secondary:not(.uk-preserve-color) .uk-hr,.uk-tile-primary:not(.uk-preserve-color) .uk-hr,.uk-tile-secondary:not(.uk-preserve-color) .uk-hr,.uk-card-primary.uk-card-body .uk-hr,.uk-card-primary>:not([class*='uk-card-media']) .uk-hr,.uk-card-secondary.uk-card-body .uk-hr,.uk-card-secondary>:not([class*='uk-card-media']) .uk-hr,.uk-overlay-primary .uk-hr,.uk-offcanvas-bar .uk-hr{border-top-color:rgba(255,255,255,0.2)}.uk-light :focus,.uk-section-primary:not(.uk-preserve-color) :focus,.uk-section-secondary:not(.uk-preserve-color) :focus,.uk-tile-primary:not(.uk-preserve-color) :focus,.uk-tile-secondary:not(.uk-preserve-color) :focus,.uk-card-primary.uk-card-body :focus,.uk-card-primary>:not([class*='uk-card-media']) :focus,.uk-card-secondary.uk-card-body :focus,.uk-card-secondary>:not([class*='uk-card-media']) :focus,.uk-overlay-primary :focus,.uk-offcanvas-bar :focus{outline-color:#fff}.uk-light :focus-visible,.uk-section-primary:not(.uk-preserve-color) :focus-visible,.uk-section-secondary:not(.uk-preserve-color) :focus-visible,.uk-tile-primary:not(.uk-preserve-color) :focus-visible,.uk-tile-secondary:not(.uk-preserve-color) :focus-visible,.uk-card-primary.uk-card-body :focus-visible,.uk-card-primary>:not([class*='uk-card-media']) :focus-visible,.uk-card-secondary.uk-card-body :focus-visible,.uk-card-secondary>:not([class*='uk-card-media']) :focus-visible,.uk-overlay-primary :focus-visible,.uk-offcanvas-bar :focus-visible{outline-color:#fff}.uk-light a.uk-link-muted,.uk-section-primary:not(.uk-preserve-color) a.uk-link-muted,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-muted,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-muted,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-muted,.uk-card-primary.uk-card-body a.uk-link-muted,.uk-card-primary>:not([class*='uk-card-media']) a.uk-link-muted,.uk-card-secondary.uk-card-body a.uk-link-muted,.uk-card-secondary>:not([class*='uk-card-media']) a.uk-link-muted,.uk-overlay-primary a.uk-link-muted,.uk-offcanvas-bar a.uk-link-muted,.uk-light .uk-link-muted a,.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a,.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a,.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a,.uk-card-primary.uk-card-body .uk-link-muted a,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-muted a,.uk-card-secondary.uk-card-body .uk-link-muted a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-muted a,.uk-overlay-primary .uk-link-muted a,.uk-offcanvas-bar .uk-link-muted a{color:rgba(255,255,255,0.5)}.uk-light a.uk-link-muted:hover,.uk-section-primary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-card-primary.uk-card-body a.uk-link-muted:hover,.uk-card-primary>:not([class*='uk-card-media']) a.uk-link-muted:hover,.uk-card-secondary.uk-card-body a.uk-link-muted:hover,.uk-card-secondary>:not([class*='uk-card-media']) a.uk-link-muted:hover,.uk-overlay-primary a.uk-link-muted:hover,.uk-offcanvas-bar a.uk-link-muted:hover,.uk-light .uk-link-muted a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-card-primary.uk-card-body .uk-link-muted a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-muted a:hover,.uk-card-secondary.uk-card-body .uk-link-muted a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-muted a:hover,.uk-overlay-primary .uk-link-muted a:hover,.uk-offcanvas-bar .uk-link-muted a:hover,.uk-light .uk-link-toggle:hover .uk-link-muted,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-muted,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-toggle:hover .uk-link-muted,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-muted,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-toggle:hover .uk-link-muted,.uk-overlay-primary .uk-link-toggle:hover .uk-link-muted,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-muted{color:rgba(255,255,255,0.7)}.uk-light a.uk-link-text:hover,.uk-section-primary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-card-primary.uk-card-body a.uk-link-text:hover,.uk-card-primary>:not([class*='uk-card-media']) a.uk-link-text:hover,.uk-card-secondary.uk-card-body a.uk-link-text:hover,.uk-card-secondary>:not([class*='uk-card-media']) a.uk-link-text:hover,.uk-overlay-primary a.uk-link-text:hover,.uk-offcanvas-bar a.uk-link-text:hover,.uk-light .uk-link-text a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-card-primary.uk-card-body .uk-link-text a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-text a:hover,.uk-card-secondary.uk-card-body .uk-link-text a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-text a:hover,.uk-overlay-primary .uk-link-text a:hover,.uk-offcanvas-bar .uk-link-text a:hover,.uk-light .uk-link-toggle:hover .uk-link-text,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-text,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-toggle:hover .uk-link-text,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-text,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-toggle:hover .uk-link-text,.uk-overlay-primary .uk-link-toggle:hover .uk-link-text,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-text{color:rgba(255,255,255,0.5)}.uk-light a.uk-link-heading:hover,.uk-section-primary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-card-primary.uk-card-body a.uk-link-heading:hover,.uk-card-primary>:not([class*='uk-card-media']) a.uk-link-heading:hover,.uk-card-secondary.uk-card-body a.uk-link-heading:hover,.uk-card-secondary>:not([class*='uk-card-media']) a.uk-link-heading:hover,.uk-overlay-primary a.uk-link-heading:hover,.uk-offcanvas-bar a.uk-link-heading:hover,.uk-light .uk-link-heading a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-card-primary.uk-card-body .uk-link-heading a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-heading a:hover,.uk-card-secondary.uk-card-body .uk-link-heading a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-heading a:hover,.uk-overlay-primary .uk-link-heading a:hover,.uk-offcanvas-bar .uk-link-heading a:hover,.uk-light .uk-link-toggle:hover .uk-link-heading,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-heading,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-toggle:hover .uk-link-heading,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-heading,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-toggle:hover .uk-link-heading,.uk-overlay-primary .uk-link-toggle:hover .uk-link-heading,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-heading{color:#fff}.uk-light .uk-heading-divider,.uk-section-primary:not(.uk-preserve-color) .uk-heading-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-divider,.uk-card-primary.uk-card-body .uk-heading-divider,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-divider,.uk-card-secondary.uk-card-body .uk-heading-divider,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-divider,.uk-overlay-primary .uk-heading-divider,.uk-offcanvas-bar .uk-heading-divider{border-bottom-color:rgba(255,255,255,0.2)}.uk-light .uk-heading-bullet::before,.uk-section-primary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-card-primary.uk-card-body .uk-heading-bullet::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-bullet::before,.uk-card-secondary.uk-card-body .uk-heading-bullet::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-bullet::before,.uk-overlay-primary .uk-heading-bullet::before,.uk-offcanvas-bar .uk-heading-bullet::before{border-left-color:rgba(255,255,255,0.2)}.uk-light .uk-heading-line>::before,.uk-section-primary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-card-primary.uk-card-body .uk-heading-line>::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-line>::before,.uk-card-secondary.uk-card-body .uk-heading-line>::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-line>::before,.uk-overlay-primary .uk-heading-line>::before,.uk-offcanvas-bar .uk-heading-line>::before,.uk-light .uk-heading-line>::after,.uk-section-primary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-card-primary.uk-card-body .uk-heading-line>::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-line>::after,.uk-card-secondary.uk-card-body .uk-heading-line>::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-line>::after,.uk-overlay-primary .uk-heading-line>::after,.uk-offcanvas-bar .uk-heading-line>::after{border-bottom-color:rgba(255,255,255,0.2)}.uk-light .uk-divider-icon,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon,.uk-card-primary.uk-card-body .uk-divider-icon,.uk-card-primary>:not([class*='uk-card-media']) .uk-divider-icon,.uk-card-secondary.uk-card-body .uk-divider-icon,.uk-card-secondary>:not([class*='uk-card-media']) .uk-divider-icon,.uk-overlay-primary .uk-divider-icon,.uk-offcanvas-bar .uk-divider-icon{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22rgba(255,255,255,0.2)%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-light .uk-divider-icon::before,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-card-primary.uk-card-body .uk-divider-icon::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-divider-icon::before,.uk-card-secondary.uk-card-body .uk-divider-icon::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-divider-icon::before,.uk-overlay-primary .uk-divider-icon::before,.uk-offcanvas-bar .uk-divider-icon::before,.uk-light .uk-divider-icon::after,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-card-primary.uk-card-body .uk-divider-icon::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-divider-icon::after,.uk-card-secondary.uk-card-body .uk-divider-icon::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-divider-icon::after,.uk-overlay-primary .uk-divider-icon::after,.uk-offcanvas-bar .uk-divider-icon::after{border-bottom-color:rgba(255,255,255,0.2)}.uk-light .uk-divider-small::after,.uk-section-primary:not(.uk-preserve-color) .uk-divider-small::after,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-small::after,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-small::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-small::after,.uk-card-primary.uk-card-body .uk-divider-small::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-divider-small::after,.uk-card-secondary.uk-card-body .uk-divider-small::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-divider-small::after,.uk-overlay-primary .uk-divider-small::after,.uk-offcanvas-bar .uk-divider-small::after{border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-divider-vertical,.uk-section-primary:not(.uk-preserve-color) .uk-divider-vertical,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-vertical,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-vertical,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-vertical,.uk-card-primary.uk-card-body .uk-divider-vertical,.uk-card-primary>:not([class*='uk-card-media']) .uk-divider-vertical,.uk-card-secondary.uk-card-body .uk-divider-vertical,.uk-card-secondary>:not([class*='uk-card-media']) .uk-divider-vertical,.uk-overlay-primary .uk-divider-vertical,.uk-offcanvas-bar .uk-divider-vertical{border-left-color:rgba(255,255,255,0.2)}.uk-light .uk-list-muted>::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-muted>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-muted>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-muted>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-muted>::before,.uk-card-primary.uk-card-body .uk-list-muted>::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-list-muted>::before,.uk-card-secondary.uk-card-body .uk-list-muted>::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-muted>::before,.uk-overlay-primary .uk-list-muted>::before,.uk-offcanvas-bar .uk-list-muted>::before{color:rgba(255,255,255,0.5) !important}.uk-light .uk-list-emphasis>::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-emphasis>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-emphasis>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-emphasis>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-emphasis>::before,.uk-card-primary.uk-card-body .uk-list-emphasis>::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-list-emphasis>::before,.uk-card-secondary.uk-card-body .uk-list-emphasis>::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-emphasis>::before,.uk-overlay-primary .uk-list-emphasis>::before,.uk-offcanvas-bar .uk-list-emphasis>::before{color:#fff !important}.uk-light .uk-list-primary>::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-primary>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-primary>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-primary>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-primary>::before,.uk-card-primary.uk-card-body .uk-list-primary>::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-list-primary>::before,.uk-card-secondary.uk-card-body .uk-list-primary>::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-primary>::before,.uk-overlay-primary .uk-list-primary>::before,.uk-offcanvas-bar .uk-list-primary>::before{color:#fff !important}.uk-light .uk-list-secondary>::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-secondary>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-secondary>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-secondary>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-secondary>::before,.uk-card-primary.uk-card-body .uk-list-secondary>::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-list-secondary>::before,.uk-card-secondary.uk-card-body .uk-list-secondary>::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-secondary>::before,.uk-overlay-primary .uk-list-secondary>::before,.uk-offcanvas-bar .uk-list-secondary>::before{color:#fff !important}.uk-light .uk-list-bullet>::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-bullet>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-bullet>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-bullet>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-bullet>::before,.uk-card-primary.uk-card-body .uk-list-bullet>::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-list-bullet>::before,.uk-card-secondary.uk-card-body .uk-list-bullet>::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-bullet>::before,.uk-overlay-primary .uk-list-bullet>::before,.uk-offcanvas-bar .uk-list-bullet>::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22rgba(255,255,255,0.7)%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-list-divider>:nth-child(n+2),.uk-section-primary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2),.uk-section-secondary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2),.uk-tile-primary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2),.uk-card-primary.uk-card-body .uk-list-divider>:nth-child(n+2),.uk-card-primary>:not([class*='uk-card-media']) .uk-list-divider>:nth-child(n+2),.uk-card-secondary.uk-card-body .uk-list-divider>:nth-child(n+2),.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-divider>:nth-child(n+2),.uk-overlay-primary .uk-list-divider>:nth-child(n+2),.uk-offcanvas-bar .uk-list-divider>:nth-child(n+2){border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-list-striped>*:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-list-striped>*:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped>*:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped>*:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped>*:nth-of-type(odd),.uk-card-primary.uk-card-body .uk-list-striped>*:nth-of-type(odd),.uk-card-primary>:not([class*='uk-card-media']) .uk-list-striped>*:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-list-striped>*:nth-of-type(odd),.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-striped>*:nth-of-type(odd),.uk-overlay-primary .uk-list-striped>*:nth-of-type(odd),.uk-offcanvas-bar .uk-list-striped>*:nth-of-type(odd){border-top-color:rgba(255,255,255,0.2);border-bottom-color:rgba(255,255,255,0.2)}.uk-light .uk-list-striped>:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-card-primary.uk-card-body .uk-list-striped>:nth-of-type(odd),.uk-card-primary>:not([class*='uk-card-media']) .uk-list-striped>:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-list-striped>:nth-of-type(odd),.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-striped>:nth-of-type(odd),.uk-overlay-primary .uk-list-striped>:nth-of-type(odd),.uk-offcanvas-bar .uk-list-striped>:nth-of-type(odd){background-color:rgba(255,255,255,0.1)}.uk-light .uk-icon-link,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link,.uk-card-primary.uk-card-body .uk-icon-link,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-link,.uk-card-secondary.uk-card-body .uk-icon-link,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-link,.uk-overlay-primary .uk-icon-link,.uk-offcanvas-bar .uk-icon-link{color:rgba(255,255,255,0.5)}.uk-light .uk-icon-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-card-primary.uk-card-body .uk-icon-link:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-link:hover,.uk-card-secondary.uk-card-body .uk-icon-link:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-link:hover,.uk-overlay-primary .uk-icon-link:hover,.uk-offcanvas-bar .uk-icon-link:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-icon-link:active,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:active,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:active,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:active,.uk-card-primary.uk-card-body .uk-icon-link:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-link:active,.uk-card-secondary.uk-card-body .uk-icon-link:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-link:active,.uk-overlay-primary .uk-icon-link:active,.uk-offcanvas-bar .uk-icon-link:active,.uk-light .uk-active>.uk-icon-link,.uk-section-primary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-section-secondary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-tile-primary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-card-primary.uk-card-body .uk-active>.uk-icon-link,.uk-card-primary>:not([class*='uk-card-media']) .uk-active>.uk-icon-link,.uk-card-secondary.uk-card-body .uk-active>.uk-icon-link,.uk-card-secondary>:not([class*='uk-card-media']) .uk-active>.uk-icon-link,.uk-overlay-primary .uk-active>.uk-icon-link,.uk-offcanvas-bar .uk-active>.uk-icon-link{color:rgba(255,255,255,0.7)}.uk-light .uk-icon-button,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button,.uk-card-primary.uk-card-body .uk-icon-button,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-button,.uk-card-secondary.uk-card-body .uk-icon-button,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-button,.uk-overlay-primary .uk-icon-button,.uk-offcanvas-bar .uk-icon-button{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.5)}.uk-light .uk-icon-button:hover,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-card-primary.uk-card-body .uk-icon-button:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-button:hover,.uk-card-secondary.uk-card-body .uk-icon-button:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-button:hover,.uk-overlay-primary .uk-icon-button:hover,.uk-offcanvas-bar .uk-icon-button:hover{background-color:rgba(255,255,255,0.15);color:rgba(255,255,255,0.7)}.uk-light .uk-icon-button:active,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:active,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:active,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:active,.uk-card-primary.uk-card-body .uk-icon-button:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-button:active,.uk-card-secondary.uk-card-body .uk-icon-button:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-button:active,.uk-overlay-primary .uk-icon-button:active,.uk-offcanvas-bar .uk-icon-button:active{background-color:rgba(255,255,255,0.2);color:rgba(255,255,255,0.7)}.uk-light .uk-input,.uk-section-primary:not(.uk-preserve-color) .uk-input,.uk-section-secondary:not(.uk-preserve-color) .uk-input,.uk-tile-primary:not(.uk-preserve-color) .uk-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-input,.uk-card-primary.uk-card-body .uk-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-input,.uk-card-secondary.uk-card-body .uk-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input,.uk-overlay-primary .uk-input,.uk-offcanvas-bar .uk-input,.uk-light .uk-select,.uk-section-primary:not(.uk-preserve-color) .uk-select,.uk-section-secondary:not(.uk-preserve-color) .uk-select,.uk-tile-primary:not(.uk-preserve-color) .uk-select,.uk-tile-secondary:not(.uk-preserve-color) .uk-select,.uk-card-primary.uk-card-body .uk-select,.uk-card-primary>:not([class*='uk-card-media']) .uk-select,.uk-card-secondary.uk-card-body .uk-select,.uk-card-secondary>:not([class*='uk-card-media']) .uk-select,.uk-overlay-primary .uk-select,.uk-offcanvas-bar .uk-select,.uk-light .uk-textarea,.uk-section-primary:not(.uk-preserve-color) .uk-textarea,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea,.uk-card-primary.uk-card-body .uk-textarea,.uk-card-primary>:not([class*='uk-card-media']) .uk-textarea,.uk-card-secondary.uk-card-body .uk-textarea,.uk-card-secondary>:not([class*='uk-card-media']) .uk-textarea,.uk-overlay-primary .uk-textarea,.uk-offcanvas-bar .uk-textarea{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.7);background-clip:padding-box;border-color:rgba(255,255,255,0.2)}.uk-light .uk-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-input:focus,.uk-card-primary.uk-card-body .uk-input:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-input:focus,.uk-card-secondary.uk-card-body .uk-input:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input:focus,.uk-overlay-primary .uk-input:focus,.uk-offcanvas-bar .uk-input:focus,.uk-light .uk-select:focus,.uk-section-primary:not(.uk-preserve-color) .uk-select:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-select:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-select:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-select:focus,.uk-card-primary.uk-card-body .uk-select:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-select:focus,.uk-card-secondary.uk-card-body .uk-select:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-select:focus,.uk-overlay-primary .uk-select:focus,.uk-offcanvas-bar .uk-select:focus,.uk-light .uk-textarea:focus,.uk-section-primary:not(.uk-preserve-color) .uk-textarea:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea:focus,.uk-card-primary.uk-card-body .uk-textarea:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-textarea:focus,.uk-card-secondary.uk-card-body .uk-textarea:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-textarea:focus,.uk-overlay-primary .uk-textarea:focus,.uk-offcanvas-bar .uk-textarea:focus{background-color:rgba(255,255,255,0.15);color:rgba(255,255,255,0.7);border-color:rgba(255,255,255,0.7)}.uk-light .uk-input::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-input::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-input::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-input::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-input::placeholder,.uk-card-primary.uk-card-body .uk-input::placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-input::placeholder,.uk-card-secondary.uk-card-body .uk-input::placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input::placeholder,.uk-overlay-primary .uk-input::placeholder,.uk-offcanvas-bar .uk-input::placeholder{color:rgba(255,255,255,0.5)}.uk-light .uk-textarea::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-card-primary.uk-card-body .uk-textarea::placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-textarea::placeholder,.uk-card-secondary.uk-card-body .uk-textarea::placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-textarea::placeholder,.uk-overlay-primary .uk-textarea::placeholder,.uk-offcanvas-bar .uk-textarea::placeholder{color:rgba(255,255,255,0.5)}.uk-light .uk-select:not([multiple]):not([size]),.uk-section-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-section-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-tile-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-tile-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-card-primary.uk-card-body .uk-select:not([multiple]):not([size]),.uk-card-primary>:not([class*='uk-card-media']) .uk-select:not([multiple]):not([size]),.uk-card-secondary.uk-card-body .uk-select:not([multiple]):not([size]),.uk-card-secondary>:not([class*='uk-card-media']) .uk-select:not([multiple]):not([size]),.uk-overlay-primary .uk-select:not([multiple]):not([size]),.uk-offcanvas-bar .uk-select:not([multiple]):not([size]){background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba(255,255,255,0.7)%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba(255,255,255,0.7)%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-light .uk-input[list]:hover,.uk-section-primary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-card-primary.uk-card-body .uk-input[list]:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-input[list]:hover,.uk-card-secondary.uk-card-body .uk-input[list]:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input[list]:hover,.uk-overlay-primary .uk-input[list]:hover,.uk-offcanvas-bar .uk-input[list]:hover,.uk-light .uk-input[list]:focus,.uk-section-primary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-card-primary.uk-card-body .uk-input[list]:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-input[list]:focus,.uk-card-secondary.uk-card-body .uk-input[list]:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input[list]:focus,.uk-overlay-primary .uk-input[list]:focus,.uk-offcanvas-bar .uk-input[list]:focus{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba(255,255,255,0.7)%22%20points%3D%2212%2012%208%206%2016%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-light .uk-radio,.uk-section-primary:not(.uk-preserve-color) .uk-radio,.uk-section-secondary:not(.uk-preserve-color) .uk-radio,.uk-tile-primary:not(.uk-preserve-color) .uk-radio,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio,.uk-card-primary.uk-card-body .uk-radio,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio,.uk-card-secondary.uk-card-body .uk-radio,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio,.uk-overlay-primary .uk-radio,.uk-offcanvas-bar .uk-radio,.uk-light .uk-checkbox,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox,.uk-card-primary.uk-card-body .uk-checkbox,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox,.uk-card-secondary.uk-card-body .uk-checkbox,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox,.uk-overlay-primary .uk-checkbox,.uk-offcanvas-bar .uk-checkbox{background-color:rgba(255,255,255,0.1);border-color:rgba(255,255,255,0.2)}.uk-light .uk-radio:focus,.uk-section-primary:not(.uk-preserve-color) .uk-radio:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:focus,.uk-card-primary.uk-card-body .uk-radio:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio:focus,.uk-card-secondary.uk-card-body .uk-radio:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio:focus,.uk-overlay-primary .uk-radio:focus,.uk-offcanvas-bar .uk-radio:focus,.uk-light .uk-checkbox:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-card-primary.uk-card-body .uk-checkbox:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:focus,.uk-card-secondary.uk-card-body .uk-checkbox:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:focus,.uk-overlay-primary .uk-checkbox:focus,.uk-offcanvas-bar .uk-checkbox:focus{background-color:rgba(255,255,255,0.15);border-color:rgba(255,255,255,0.7)}.uk-light .uk-radio:checked,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-card-primary.uk-card-body .uk-radio:checked,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio:checked,.uk-card-secondary.uk-card-body .uk-radio:checked,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio:checked,.uk-overlay-primary .uk-radio:checked,.uk-offcanvas-bar .uk-radio:checked,.uk-light .uk-checkbox:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-card-primary.uk-card-body .uk-checkbox:checked,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:checked,.uk-card-secondary.uk-card-body .uk-checkbox:checked,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:checked,.uk-overlay-primary .uk-checkbox:checked,.uk-offcanvas-bar .uk-checkbox:checked,.uk-light .uk-checkbox:indeterminate,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate,.uk-overlay-primary .uk-checkbox:indeterminate,.uk-offcanvas-bar .uk-checkbox:indeterminate{background-color:#fff;border-color:rgba(255,255,255,0.7)}.uk-light .uk-radio:checked:focus,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-card-primary.uk-card-body .uk-radio:checked:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio:checked:focus,.uk-card-secondary.uk-card-body .uk-radio:checked:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio:checked:focus,.uk-overlay-primary .uk-radio:checked:focus,.uk-offcanvas-bar .uk-radio:checked:focus,.uk-light .uk-checkbox:checked:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-card-primary.uk-card-body .uk-checkbox:checked:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:checked:focus,.uk-card-secondary.uk-card-body .uk-checkbox:checked:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:checked:focus,.uk-overlay-primary .uk-checkbox:checked:focus,.uk-offcanvas-bar .uk-checkbox:checked:focus,.uk-light .uk-checkbox:indeterminate:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate:focus,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate:focus,.uk-overlay-primary .uk-checkbox:indeterminate:focus,.uk-offcanvas-bar .uk-checkbox:indeterminate:focus{background-color:#fff}.uk-light .uk-radio:checked,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-card-primary.uk-card-body .uk-radio:checked,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio:checked,.uk-card-secondary.uk-card-body .uk-radio:checked,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio:checked,.uk-overlay-primary .uk-radio:checked,.uk-offcanvas-bar .uk-radio:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23666%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-checkbox:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-card-primary.uk-card-body .uk-checkbox:checked,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:checked,.uk-card-secondary.uk-card-body .uk-checkbox:checked,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:checked,.uk-overlay-primary .uk-checkbox:checked,.uk-offcanvas-bar .uk-checkbox:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-light .uk-checkbox:indeterminate,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate,.uk-overlay-primary .uk-checkbox:indeterminate,.uk-offcanvas-bar .uk-checkbox:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-form-label,.uk-section-primary:not(.uk-preserve-color) .uk-form-label,.uk-section-secondary:not(.uk-preserve-color) .uk-form-label,.uk-tile-primary:not(.uk-preserve-color) .uk-form-label,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-label,.uk-card-primary.uk-card-body .uk-form-label,.uk-card-primary>:not([class*='uk-card-media']) .uk-form-label,.uk-card-secondary.uk-card-body .uk-form-label,.uk-card-secondary>:not([class*='uk-card-media']) .uk-form-label,.uk-overlay-primary .uk-form-label,.uk-offcanvas-bar .uk-form-label{color:#fff}.uk-light .uk-form-icon,.uk-section-primary:not(.uk-preserve-color) .uk-form-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-form-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-form-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-icon,.uk-card-primary.uk-card-body .uk-form-icon,.uk-card-primary>:not([class*='uk-card-media']) .uk-form-icon,.uk-card-secondary.uk-card-body .uk-form-icon,.uk-card-secondary>:not([class*='uk-card-media']) .uk-form-icon,.uk-overlay-primary .uk-form-icon,.uk-offcanvas-bar .uk-form-icon{color:rgba(255,255,255,0.5)}.uk-light .uk-form-icon:hover,.uk-section-primary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-card-primary.uk-card-body .uk-form-icon:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-form-icon:hover,.uk-card-secondary.uk-card-body .uk-form-icon:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-form-icon:hover,.uk-overlay-primary .uk-form-icon:hover,.uk-offcanvas-bar .uk-form-icon:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-button-default,.uk-section-primary:not(.uk-preserve-color) .uk-button-default,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default,.uk-card-primary.uk-card-body .uk-button-default,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default,.uk-card-secondary.uk-card-body .uk-button-default,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default,.uk-overlay-primary .uk-button-default,.uk-offcanvas-bar .uk-button-default{background-color:rgba(0,0,0,0);color:#fff;border-color:rgba(255,255,255,0.7)}.uk-light .uk-button-default:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:hover,.uk-card-primary.uk-card-body .uk-button-default:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default:hover,.uk-card-secondary.uk-card-body .uk-button-default:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default:hover,.uk-overlay-primary .uk-button-default:hover,.uk-offcanvas-bar .uk-button-default:hover{background-color:rgba(0,0,0,0);color:#fff;border-color:#fff}.uk-light .uk-button-default:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:active,.uk-card-primary.uk-card-body .uk-button-default:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default:active,.uk-card-secondary.uk-card-body .uk-button-default:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default:active,.uk-overlay-primary .uk-button-default:active,.uk-offcanvas-bar .uk-button-default:active,.uk-light .uk-button-default.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-card-primary.uk-card-body .uk-button-default.uk-active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default.uk-active,.uk-card-secondary.uk-card-body .uk-button-default.uk-active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default.uk-active,.uk-overlay-primary .uk-button-default.uk-active,.uk-offcanvas-bar .uk-button-default.uk-active{background-color:rgba(0,0,0,0);color:#fff;border-color:#fff}.uk-light .uk-button-primary,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary,.uk-card-primary.uk-card-body .uk-button-primary,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary,.uk-card-secondary.uk-card-body .uk-button-primary,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary,.uk-overlay-primary .uk-button-primary,.uk-offcanvas-bar .uk-button-primary{background-color:#fff;color:#666}.uk-light .uk-button-primary:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-card-primary.uk-card-body .uk-button-primary:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary:hover,.uk-card-secondary.uk-card-body .uk-button-primary:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary:hover,.uk-overlay-primary .uk-button-primary:hover,.uk-offcanvas-bar .uk-button-primary:hover{background-color:#f2f2f2;color:#666}.uk-light .uk-button-primary:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:active,.uk-card-primary.uk-card-body .uk-button-primary:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary:active,.uk-card-secondary.uk-card-body .uk-button-primary:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary:active,.uk-overlay-primary .uk-button-primary:active,.uk-offcanvas-bar .uk-button-primary:active,.uk-light .uk-button-primary.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-card-primary.uk-card-body .uk-button-primary.uk-active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary.uk-active,.uk-card-secondary.uk-card-body .uk-button-primary.uk-active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary.uk-active,.uk-overlay-primary .uk-button-primary.uk-active,.uk-offcanvas-bar .uk-button-primary.uk-active{background-color:#e6e6e6;color:#666}.uk-light .uk-button-secondary,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary,.uk-card-primary.uk-card-body .uk-button-secondary,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary,.uk-card-secondary.uk-card-body .uk-button-secondary,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary,.uk-overlay-primary .uk-button-secondary,.uk-offcanvas-bar .uk-button-secondary{background-color:#fff;color:#666}.uk-light .uk-button-secondary:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-card-primary.uk-card-body .uk-button-secondary:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary:hover,.uk-card-secondary.uk-card-body .uk-button-secondary:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary:hover,.uk-overlay-primary .uk-button-secondary:hover,.uk-offcanvas-bar .uk-button-secondary:hover{background-color:#f2f2f2;color:#666}.uk-light .uk-button-secondary:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-card-primary.uk-card-body .uk-button-secondary:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary:active,.uk-card-secondary.uk-card-body .uk-button-secondary:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary:active,.uk-overlay-primary .uk-button-secondary:active,.uk-offcanvas-bar .uk-button-secondary:active,.uk-light .uk-button-secondary.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-card-primary.uk-card-body .uk-button-secondary.uk-active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary.uk-active,.uk-card-secondary.uk-card-body .uk-button-secondary.uk-active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary.uk-active,.uk-overlay-primary .uk-button-secondary.uk-active,.uk-offcanvas-bar .uk-button-secondary.uk-active{background-color:#e6e6e6;color:#666}.uk-light .uk-button-text,.uk-section-primary:not(.uk-preserve-color) .uk-button-text,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text,.uk-card-primary.uk-card-body .uk-button-text,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text,.uk-card-secondary.uk-card-body .uk-button-text,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text,.uk-overlay-primary .uk-button-text,.uk-offcanvas-bar .uk-button-text{color:#fff}.uk-light .uk-button-text::before,.uk-section-primary:not(.uk-preserve-color) .uk-button-text::before,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text::before,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text::before,.uk-card-primary.uk-card-body .uk-button-text::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text::before,.uk-card-secondary.uk-card-body .uk-button-text::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text::before,.uk-overlay-primary .uk-button-text::before,.uk-offcanvas-bar .uk-button-text::before{border-bottom-color:#fff}.uk-light .uk-button-text:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:hover,.uk-card-primary.uk-card-body .uk-button-text:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text:hover,.uk-card-secondary.uk-card-body .uk-button-text:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text:hover,.uk-overlay-primary .uk-button-text:hover,.uk-offcanvas-bar .uk-button-text:hover{color:#fff}.uk-light .uk-button-text:disabled,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-card-primary.uk-card-body .uk-button-text:disabled,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text:disabled,.uk-card-secondary.uk-card-body .uk-button-text:disabled,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text:disabled,.uk-overlay-primary .uk-button-text:disabled,.uk-offcanvas-bar .uk-button-text:disabled{color:rgba(255,255,255,0.5)}.uk-light .uk-button-link,.uk-section-primary:not(.uk-preserve-color) .uk-button-link,.uk-section-secondary:not(.uk-preserve-color) .uk-button-link,.uk-tile-primary:not(.uk-preserve-color) .uk-button-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link,.uk-card-primary.uk-card-body .uk-button-link,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-link,.uk-card-secondary.uk-card-body .uk-button-link,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-link,.uk-overlay-primary .uk-button-link,.uk-offcanvas-bar .uk-button-link{color:#fff}.uk-light .uk-button-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link:hover,.uk-card-primary.uk-card-body .uk-button-link:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-link:hover,.uk-card-secondary.uk-card-body .uk-button-link:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-link:hover,.uk-overlay-primary .uk-button-link:hover,.uk-offcanvas-bar .uk-button-link:hover{color:rgba(255,255,255,0.5)}.uk-light .uk-grid-divider>:not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-primary.uk-card-body .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-grid-divider>:not(.uk-first-column)::before,.uk-overlay-primary .uk-grid-divider>:not(.uk-first-column)::before,.uk-offcanvas-bar .uk-grid-divider>:not(.uk-first-column)::before{border-left-color:rgba(255,255,255,0.2)}.uk-light .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-primary.uk-card-body .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-secondary.uk-card-body .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-overlay-primary .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-offcanvas-bar .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-close,.uk-section-primary:not(.uk-preserve-color) .uk-close,.uk-section-secondary:not(.uk-preserve-color) .uk-close,.uk-tile-primary:not(.uk-preserve-color) .uk-close,.uk-tile-secondary:not(.uk-preserve-color) .uk-close,.uk-card-primary.uk-card-body .uk-close,.uk-card-primary>:not([class*='uk-card-media']) .uk-close,.uk-card-secondary.uk-card-body .uk-close,.uk-card-secondary>:not([class*='uk-card-media']) .uk-close,.uk-overlay-primary .uk-close,.uk-offcanvas-bar .uk-close{color:rgba(255,255,255,0.5)}.uk-light .uk-close:hover,.uk-section-primary:not(.uk-preserve-color) .uk-close:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-close:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-close:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-close:hover,.uk-card-primary.uk-card-body .uk-close:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-close:hover,.uk-card-secondary.uk-card-body .uk-close:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-close:hover,.uk-overlay-primary .uk-close:hover,.uk-offcanvas-bar .uk-close:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-totop,.uk-section-primary:not(.uk-preserve-color) .uk-totop,.uk-section-secondary:not(.uk-preserve-color) .uk-totop,.uk-tile-primary:not(.uk-preserve-color) .uk-totop,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop,.uk-card-primary.uk-card-body .uk-totop,.uk-card-primary>:not([class*='uk-card-media']) .uk-totop,.uk-card-secondary.uk-card-body .uk-totop,.uk-card-secondary>:not([class*='uk-card-media']) .uk-totop,.uk-overlay-primary .uk-totop,.uk-offcanvas-bar .uk-totop{color:rgba(255,255,255,0.5)}.uk-light .uk-totop:hover,.uk-section-primary:not(.uk-preserve-color) .uk-totop:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:hover,.uk-card-primary.uk-card-body .uk-totop:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-totop:hover,.uk-card-secondary.uk-card-body .uk-totop:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-totop:hover,.uk-overlay-primary .uk-totop:hover,.uk-offcanvas-bar .uk-totop:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-totop:active,.uk-section-primary:not(.uk-preserve-color) .uk-totop:active,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:active,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:active,.uk-card-primary.uk-card-body .uk-totop:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-totop:active,.uk-card-secondary.uk-card-body .uk-totop:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-totop:active,.uk-overlay-primary .uk-totop:active,.uk-offcanvas-bar .uk-totop:active{color:#fff}.uk-light .uk-badge,.uk-section-primary:not(.uk-preserve-color) .uk-badge,.uk-section-secondary:not(.uk-preserve-color) .uk-badge,.uk-tile-primary:not(.uk-preserve-color) .uk-badge,.uk-tile-secondary:not(.uk-preserve-color) .uk-badge,.uk-card-primary.uk-card-body .uk-badge,.uk-card-primary>:not([class*='uk-card-media']) .uk-badge,.uk-card-secondary.uk-card-body .uk-badge,.uk-card-secondary>:not([class*='uk-card-media']) .uk-badge,.uk-overlay-primary .uk-badge,.uk-offcanvas-bar .uk-badge{background-color:#fff;color:#666 !important}.uk-light .uk-label,.uk-section-primary:not(.uk-preserve-color) .uk-label,.uk-section-secondary:not(.uk-preserve-color) .uk-label,.uk-tile-primary:not(.uk-preserve-color) .uk-label,.uk-tile-secondary:not(.uk-preserve-color) .uk-label,.uk-card-primary.uk-card-body .uk-label,.uk-card-primary>:not([class*='uk-card-media']) .uk-label,.uk-card-secondary.uk-card-body .uk-label,.uk-card-secondary>:not([class*='uk-card-media']) .uk-label,.uk-overlay-primary .uk-label,.uk-offcanvas-bar .uk-label{background-color:#fff;color:#666}.uk-light .uk-article-meta,.uk-section-primary:not(.uk-preserve-color) .uk-article-meta,.uk-section-secondary:not(.uk-preserve-color) .uk-article-meta,.uk-tile-primary:not(.uk-preserve-color) .uk-article-meta,.uk-tile-secondary:not(.uk-preserve-color) .uk-article-meta,.uk-card-primary.uk-card-body .uk-article-meta,.uk-card-primary>:not([class*='uk-card-media']) .uk-article-meta,.uk-card-secondary.uk-card-body .uk-article-meta,.uk-card-secondary>:not([class*='uk-card-media']) .uk-article-meta,.uk-overlay-primary .uk-article-meta,.uk-offcanvas-bar .uk-article-meta{color:rgba(255,255,255,0.5)}.uk-light .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input,.uk-card-primary.uk-card-body .uk-search-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-input,.uk-overlay-primary .uk-search-input,.uk-offcanvas-bar .uk-search-input{color:rgba(255,255,255,0.7)}.uk-light .uk-search-input::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-card-primary.uk-card-body .uk-search-input::placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-input::placeholder,.uk-card-secondary.uk-card-body .uk-search-input::placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-input::placeholder,.uk-overlay-primary .uk-search-input::placeholder,.uk-offcanvas-bar .uk-search-input::placeholder{color:rgba(255,255,255,0.5)}.uk-light .uk-search .uk-search-icon,.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-card-primary.uk-card-body .uk-search .uk-search-icon,.uk-card-primary>:not([class*='uk-card-media']) .uk-search .uk-search-icon,.uk-card-secondary.uk-card-body .uk-search .uk-search-icon,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search .uk-search-icon,.uk-overlay-primary .uk-search .uk-search-icon,.uk-offcanvas-bar .uk-search .uk-search-icon{color:rgba(255,255,255,0.5)}.uk-light .uk-search .uk-search-icon:hover,.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-card-primary.uk-card-body .uk-search .uk-search-icon:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-search .uk-search-icon:hover,.uk-card-secondary.uk-card-body .uk-search .uk-search-icon:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search .uk-search-icon:hover,.uk-overlay-primary .uk-search .uk-search-icon:hover,.uk-offcanvas-bar .uk-search .uk-search-icon:hover{color:rgba(255,255,255,0.5)}.uk-light .uk-search-default .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-card-primary.uk-card-body .uk-search-default .uk-search-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-default .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-default .uk-search-input,.uk-overlay-primary .uk-search-default .uk-search-input,.uk-offcanvas-bar .uk-search-default .uk-search-input{background-color:rgba(0,0,0,0);border-color:rgba(255,255,255,0.2)}.uk-light .uk-search-default .uk-search-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-card-primary.uk-card-body .uk-search-default .uk-search-input:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-default .uk-search-input:focus,.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-default .uk-search-input:focus,.uk-overlay-primary .uk-search-default .uk-search-input:focus,.uk-offcanvas-bar .uk-search-default .uk-search-input:focus{background-color:rgba(0,0,0,0.05)}.uk-light .uk-search-navbar .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-card-primary.uk-card-body .uk-search-navbar .uk-search-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-navbar .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-navbar .uk-search-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-navbar .uk-search-input,.uk-overlay-primary .uk-search-navbar .uk-search-input,.uk-offcanvas-bar .uk-search-navbar .uk-search-input{background-color:rgba(0,0,0,0)}.uk-light .uk-search-large .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-card-primary.uk-card-body .uk-search-large .uk-search-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-large .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-large .uk-search-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-large .uk-search-input,.uk-overlay-primary .uk-search-large .uk-search-input,.uk-offcanvas-bar .uk-search-large .uk-search-input{background-color:rgba(0,0,0,0)}.uk-light .uk-search-toggle,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle,.uk-card-primary.uk-card-body .uk-search-toggle,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-toggle,.uk-card-secondary.uk-card-body .uk-search-toggle,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-toggle,.uk-overlay-primary .uk-search-toggle,.uk-offcanvas-bar .uk-search-toggle{color:rgba(255,255,255,0.5)}.uk-light .uk-search-toggle:hover,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-card-primary.uk-card-body .uk-search-toggle:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-toggle:hover,.uk-card-secondary.uk-card-body .uk-search-toggle:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-toggle:hover,.uk-overlay-primary .uk-search-toggle:hover,.uk-offcanvas-bar .uk-search-toggle:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-default>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-card-primary.uk-card-body .uk-nav-default>li>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default>li>a,.uk-card-secondary.uk-card-body .uk-nav-default>li>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default>li>a,.uk-overlay-primary .uk-nav-default>li>a,.uk-offcanvas-bar .uk-nav-default>li>a{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-default>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-card-primary.uk-card-body .uk-nav-default>li>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-default>li>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default>li>a:hover,.uk-overlay-primary .uk-nav-default>li>a:hover,.uk-offcanvas-bar .uk-nav-default>li>a:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-default>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-default>li.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-default>li.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default>li.uk-active>a,.uk-overlay-primary .uk-nav-default>li.uk-active>a,.uk-offcanvas-bar .uk-nav-default>li.uk-active>a{color:#fff}.uk-light .uk-nav-default .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-header,.uk-overlay-primary .uk-nav-default .uk-nav-header,.uk-offcanvas-bar .uk-nav-default .uk-nav-header{color:#fff}.uk-light .uk-nav-default .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-divider,.uk-overlay-primary .uk-nav-default .uk-nav-divider,.uk-offcanvas-bar .uk-nav-default .uk-nav-divider{border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-nav-default .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a,.uk-overlay-primary .uk-nav-default .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-default .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-default .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-overlay-primary .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub li.uk-active>a{color:#fff}.uk-light .uk-nav-primary>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-card-primary.uk-card-body .uk-nav-primary>li>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary>li>a,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary>li>a,.uk-overlay-primary .uk-nav-primary>li>a,.uk-offcanvas-bar .uk-nav-primary>li>a{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-primary>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-card-primary.uk-card-body .uk-nav-primary>li>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary>li>a:hover,.uk-overlay-primary .uk-nav-primary>li>a:hover,.uk-offcanvas-bar .uk-nav-primary>li>a:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-primary>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-primary>li.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-primary>li.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary>li.uk-active>a,.uk-overlay-primary .uk-nav-primary>li.uk-active>a,.uk-offcanvas-bar .uk-nav-primary>li.uk-active>a{color:#fff}.uk-light .uk-nav-primary .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-header,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-header,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-header,.uk-overlay-primary .uk-nav-primary .uk-nav-header,.uk-offcanvas-bar .uk-nav-primary .uk-nav-header{color:#fff}.uk-light .uk-nav-primary .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-divider,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-divider,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-divider,.uk-overlay-primary .uk-nav-primary .uk-nav-divider,.uk-offcanvas-bar .uk-nav-primary .uk-nav-divider{border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-nav-primary .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-primary .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-overlay-primary .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub li.uk-active>a{color:#fff}.uk-light .uk-nav-secondary>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a,.uk-card-primary.uk-card-body .uk-nav-secondary>li>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-secondary>li>a,.uk-card-secondary.uk-card-body .uk-nav-secondary>li>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-secondary>li>a,.uk-overlay-primary .uk-nav-secondary>li>a,.uk-offcanvas-bar .uk-nav-secondary>li>a{color:#fff}.uk-light .uk-nav-secondary>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover,.uk-card-primary.uk-card-body .uk-nav-secondary>li>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-secondary>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-secondary>li>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-secondary>li>a:hover,.uk-overlay-primary .uk-nav-secondary>li>a:hover,.uk-offcanvas-bar .uk-nav-secondary>li>a:hover{color:#fff;background-color:rgba(255,255,255,0.1)}.uk-light .uk-nav-secondary>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-secondary>li.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-secondary>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-secondary>li.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-secondary>li.uk-active>a,.uk-overlay-primary .uk-nav-secondary>li.uk-active>a,.uk-offcanvas-bar .uk-nav-secondary>li.uk-active>a{color:#fff;background-color:rgba(255,255,255,0.1)}.uk-light .uk-nav-secondary .uk-nav-subtitle,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle,.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-subtitle,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-secondary .uk-nav-subtitle,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-subtitle,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-secondary .uk-nav-subtitle,.uk-overlay-primary .uk-nav-secondary .uk-nav-subtitle,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-subtitle{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-card-primary.uk-card-body .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-card-secondary.uk-card-body .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-overlay-primary .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-offcanvas-bar .uk-nav-secondary>li>a:hover .uk-nav-subtitle{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-card-primary.uk-card-body .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-card-secondary.uk-card-body .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-overlay-primary .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-offcanvas-bar .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle{color:#fff}.uk-light .uk-nav-secondary .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header,.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-header,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-secondary .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-header,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-secondary .uk-nav-header,.uk-overlay-primary .uk-nav-secondary .uk-nav-header,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-header{color:#fff}.uk-light .uk-nav-secondary .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider,.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-divider,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-secondary .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-divider,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-secondary .uk-nav-divider,.uk-overlay-primary .uk-nav-secondary .uk-nav-divider,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-divider{border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-nav-secondary .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a,.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-secondary .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-secondary .uk-nav-sub a,.uk-overlay-primary .uk-nav-secondary .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub a{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-secondary .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover,.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-secondary .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-secondary .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-secondary .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub a:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-overlay-primary .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub li.uk-active>a{color:#fff}.uk-light .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-section-primary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-section-secondary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-tile-primary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-tile-secondary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-card-primary.uk-card-body .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-card-primary>:not([class*='uk-card-media']) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-card-secondary.uk-card-body .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-overlay-primary .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-offcanvas-bar .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider){border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-navbar-nav>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a,.uk-overlay-primary .uk-navbar-nav>li>a,.uk-offcanvas-bar .uk-navbar-nav>li>a{color:rgba(255,255,255,0.5)}.uk-light .uk-navbar-nav>li:hover>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li:hover>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li:hover>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li:hover>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li:hover>a,.uk-overlay-primary .uk-navbar-nav>li:hover>a,.uk-offcanvas-bar .uk-navbar-nav>li:hover>a,.uk-light .uk-navbar-nav>li>a[aria-expanded="true"],.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded="true"],.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded="true"],.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded="true"],.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded="true"],.uk-card-primary.uk-card-body .uk-navbar-nav>li>a[aria-expanded="true"],.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a[aria-expanded="true"],.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a[aria-expanded="true"],.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a[aria-expanded="true"],.uk-overlay-primary .uk-navbar-nav>li>a[aria-expanded="true"],.uk-offcanvas-bar .uk-navbar-nav>li>a[aria-expanded="true"]{color:rgba(255,255,255,0.7)}.uk-light .uk-navbar-nav>li>a:active,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:active,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:active,.uk-overlay-primary .uk-navbar-nav>li>a:active,.uk-offcanvas-bar .uk-navbar-nav>li>a:active{color:#fff}.uk-light .uk-navbar-nav>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li.uk-active>a,.uk-overlay-primary .uk-navbar-nav>li.uk-active>a,.uk-offcanvas-bar .uk-navbar-nav>li.uk-active>a{color:#fff}.uk-light .uk-navbar-item,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-item,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-item,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-item,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-item,.uk-card-primary.uk-card-body .uk-navbar-item,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-item,.uk-card-secondary.uk-card-body .uk-navbar-item,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-item,.uk-overlay-primary .uk-navbar-item,.uk-offcanvas-bar .uk-navbar-item{color:rgba(255,255,255,0.7)}.uk-light .uk-navbar-toggle,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-card-primary.uk-card-body .uk-navbar-toggle,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-toggle,.uk-card-secondary.uk-card-body .uk-navbar-toggle,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-toggle,.uk-overlay-primary .uk-navbar-toggle,.uk-offcanvas-bar .uk-navbar-toggle{color:rgba(255,255,255,0.5)}.uk-light .uk-navbar-toggle:hover,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-card-primary.uk-card-body .uk-navbar-toggle:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-toggle:hover,.uk-card-secondary.uk-card-body .uk-navbar-toggle:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-toggle:hover,.uk-overlay-primary .uk-navbar-toggle:hover,.uk-offcanvas-bar .uk-navbar-toggle:hover,.uk-light .uk-navbar-toggle[aria-expanded="true"],.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded="true"],.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded="true"],.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded="true"],.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded="true"],.uk-card-primary.uk-card-body .uk-navbar-toggle[aria-expanded="true"],.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-toggle[aria-expanded="true"],.uk-card-secondary.uk-card-body .uk-navbar-toggle[aria-expanded="true"],.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-toggle[aria-expanded="true"],.uk-overlay-primary .uk-navbar-toggle[aria-expanded="true"],.uk-offcanvas-bar .uk-navbar-toggle[aria-expanded="true"]{color:rgba(255,255,255,0.7)}.uk-light .uk-subnav>*>:first-child,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-card-primary.uk-card-body .uk-subnav>*>:first-child,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>*>:first-child,.uk-card-secondary.uk-card-body .uk-subnav>*>:first-child,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>*>:first-child,.uk-overlay-primary .uk-subnav>*>:first-child,.uk-offcanvas-bar .uk-subnav>*>:first-child{color:rgba(255,255,255,0.5)}.uk-light .uk-subnav>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-card-primary.uk-card-body .uk-subnav>*>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>*>a:hover,.uk-card-secondary.uk-card-body .uk-subnav>*>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>*>a:hover,.uk-overlay-primary .uk-subnav>*>a:hover,.uk-offcanvas-bar .uk-subnav>*>a:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-subnav>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-card-primary.uk-card-body .uk-subnav>.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>.uk-active>a,.uk-card-secondary.uk-card-body .uk-subnav>.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>.uk-active>a,.uk-overlay-primary .uk-subnav>.uk-active>a,.uk-offcanvas-bar .uk-subnav>.uk-active>a{color:#fff}.uk-light .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary.uk-card-body .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-overlay-primary .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-offcanvas-bar .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before{border-left-color:rgba(255,255,255,0.2)}.uk-light .uk-subnav-pill>*>:first-child,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-card-primary.uk-card-body .uk-subnav-pill>*>:first-child,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>*>:first-child,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>:first-child,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>*>:first-child,.uk-overlay-primary .uk-subnav-pill>*>:first-child,.uk-offcanvas-bar .uk-subnav-pill>*>:first-child{background-color:rgba(0,0,0,0);color:rgba(255,255,255,0.5)}.uk-light .uk-subnav-pill>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:hover,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:hover,.uk-overlay-primary .uk-subnav-pill>*>a:hover,.uk-offcanvas-bar .uk-subnav-pill>*>a:hover{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.7)}.uk-light .uk-subnav-pill>*>a:active,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:active,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:active,.uk-overlay-primary .uk-subnav-pill>*>a:active,.uk-offcanvas-bar .uk-subnav-pill>*>a:active{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.7)}.uk-light .uk-subnav-pill>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-card-primary.uk-card-body .uk-subnav-pill>.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>.uk-active>a,.uk-card-secondary.uk-card-body .uk-subnav-pill>.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>.uk-active>a,.uk-overlay-primary .uk-subnav-pill>.uk-active>a,.uk-offcanvas-bar .uk-subnav-pill>.uk-active>a{background-color:#fff;color:#666}.uk-light .uk-subnav>.uk-disabled>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-card-primary.uk-card-body .uk-subnav>.uk-disabled>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>.uk-disabled>a,.uk-card-secondary.uk-card-body .uk-subnav>.uk-disabled>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>.uk-disabled>a,.uk-overlay-primary .uk-subnav>.uk-disabled>a,.uk-offcanvas-bar .uk-subnav>.uk-disabled>a{color:rgba(255,255,255,0.5)}.uk-light .uk-breadcrumb>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-card-primary.uk-card-body .uk-breadcrumb>*>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>*>*,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>*>*,.uk-overlay-primary .uk-breadcrumb>*>*,.uk-offcanvas-bar .uk-breadcrumb>*>*{color:rgba(255,255,255,0.5)}.uk-light .uk-breadcrumb>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-card-primary.uk-card-body .uk-breadcrumb>*>:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>*>:hover,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>*>:hover,.uk-overlay-primary .uk-breadcrumb>*>:hover,.uk-offcanvas-bar .uk-breadcrumb>*>:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-breadcrumb>:last-child>*,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-card-primary.uk-card-body .uk-breadcrumb>:last-child>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>:last-child>*,.uk-card-secondary.uk-card-body .uk-breadcrumb>:last-child>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>:last-child>*,.uk-overlay-primary .uk-breadcrumb>:last-child>*,.uk-offcanvas-bar .uk-breadcrumb>:last-child>*{color:rgba(255,255,255,0.7)}.uk-light .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary.uk-card-body .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-overlay-primary .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-offcanvas-bar .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before{color:rgba(255,255,255,0.5)}.uk-light .uk-pagination>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-card-primary.uk-card-body .uk-pagination>*>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>*>*,.uk-card-secondary.uk-card-body .uk-pagination>*>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>*>*,.uk-overlay-primary .uk-pagination>*>*,.uk-offcanvas-bar .uk-pagination>*>*{color:rgba(255,255,255,0.5)}.uk-light .uk-pagination>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-card-primary.uk-card-body .uk-pagination>*>:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>*>:hover,.uk-card-secondary.uk-card-body .uk-pagination>*>:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>*>:hover,.uk-overlay-primary .uk-pagination>*>:hover,.uk-offcanvas-bar .uk-pagination>*>:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-pagination>.uk-active>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-card-primary.uk-card-body .uk-pagination>.uk-active>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>.uk-active>*,.uk-card-secondary.uk-card-body .uk-pagination>.uk-active>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>.uk-active>*,.uk-overlay-primary .uk-pagination>.uk-active>*,.uk-offcanvas-bar .uk-pagination>.uk-active>*{color:rgba(255,255,255,0.7)}.uk-light .uk-pagination>.uk-disabled>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-card-primary.uk-card-body .uk-pagination>.uk-disabled>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>.uk-disabled>*,.uk-card-secondary.uk-card-body .uk-pagination>.uk-disabled>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>.uk-disabled>*,.uk-overlay-primary .uk-pagination>.uk-disabled>*,.uk-offcanvas-bar .uk-pagination>.uk-disabled>*{color:rgba(255,255,255,0.5)}.uk-light .uk-tab::before,.uk-section-primary:not(.uk-preserve-color) .uk-tab::before,.uk-section-secondary:not(.uk-preserve-color) .uk-tab::before,.uk-tile-primary:not(.uk-preserve-color) .uk-tab::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab::before,.uk-card-primary.uk-card-body .uk-tab::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab::before,.uk-card-secondary.uk-card-body .uk-tab::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab::before,.uk-overlay-primary .uk-tab::before,.uk-offcanvas-bar .uk-tab::before{border-color:rgba(255,255,255,0.2)}.uk-light .uk-tab>*>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a,.uk-card-primary.uk-card-body .uk-tab>*>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>*>a,.uk-card-secondary.uk-card-body .uk-tab>*>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>*>a,.uk-overlay-primary .uk-tab>*>a,.uk-offcanvas-bar .uk-tab>*>a{color:rgba(255,255,255,0.5)}.uk-light .uk-tab>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-card-primary.uk-card-body .uk-tab>*>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>*>a:hover,.uk-card-secondary.uk-card-body .uk-tab>*>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>*>a:hover,.uk-overlay-primary .uk-tab>*>a:hover,.uk-offcanvas-bar .uk-tab>*>a:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-tab>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-card-primary.uk-card-body .uk-tab>.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>.uk-active>a,.uk-card-secondary.uk-card-body .uk-tab>.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>.uk-active>a,.uk-overlay-primary .uk-tab>.uk-active>a,.uk-offcanvas-bar .uk-tab>.uk-active>a{color:#fff;border-color:#fff}.uk-light .uk-tab>.uk-disabled>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-card-primary.uk-card-body .uk-tab>.uk-disabled>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>.uk-disabled>a,.uk-card-secondary.uk-card-body .uk-tab>.uk-disabled>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>.uk-disabled>a,.uk-overlay-primary .uk-tab>.uk-disabled>a,.uk-offcanvas-bar .uk-tab>.uk-disabled>a{color:rgba(255,255,255,0.5)}.uk-light .uk-slidenav,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav,.uk-card-primary.uk-card-body .uk-slidenav,.uk-card-primary>:not([class*='uk-card-media']) .uk-slidenav,.uk-card-secondary.uk-card-body .uk-slidenav,.uk-card-secondary>:not([class*='uk-card-media']) .uk-slidenav,.uk-overlay-primary .uk-slidenav,.uk-offcanvas-bar .uk-slidenav{color:rgba(255,255,255,0.7)}.uk-light .uk-slidenav:hover,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-card-primary.uk-card-body .uk-slidenav:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-slidenav:hover,.uk-card-secondary.uk-card-body .uk-slidenav:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-slidenav:hover,.uk-overlay-primary .uk-slidenav:hover,.uk-offcanvas-bar .uk-slidenav:hover{color:rgba(255,255,255,0.95)}.uk-light .uk-slidenav:active,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:active,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:active,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:active,.uk-card-primary.uk-card-body .uk-slidenav:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-slidenav:active,.uk-card-secondary.uk-card-body .uk-slidenav:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-slidenav:active,.uk-overlay-primary .uk-slidenav:active,.uk-offcanvas-bar .uk-slidenav:active{color:rgba(255,255,255,0.7)}.uk-light .uk-dotnav>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-card-primary.uk-card-body .uk-dotnav>*>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>*>*,.uk-card-secondary.uk-card-body .uk-dotnav>*>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>*>*,.uk-overlay-primary .uk-dotnav>*>*,.uk-offcanvas-bar .uk-dotnav>*>*{background-color:rgba(0,0,0,0);border-color:rgba(255,255,255,0.9)}.uk-light .uk-dotnav>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-card-primary.uk-card-body .uk-dotnav>*>:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>*>:hover,.uk-card-secondary.uk-card-body .uk-dotnav>*>:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>*>:hover,.uk-overlay-primary .uk-dotnav>*>:hover,.uk-offcanvas-bar .uk-dotnav>*>:hover{background-color:rgba(255,255,255,0.9);border-color:transparent}.uk-light .uk-dotnav>*>:active,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-card-primary.uk-card-body .uk-dotnav>*>:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>*>:active,.uk-card-secondary.uk-card-body .uk-dotnav>*>:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>*>:active,.uk-overlay-primary .uk-dotnav>*>:active,.uk-offcanvas-bar .uk-dotnav>*>:active{background-color:rgba(255,255,255,0.5);border-color:transparent}.uk-light .uk-dotnav>.uk-active>*,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-card-primary.uk-card-body .uk-dotnav>.uk-active>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>.uk-active>*,.uk-card-secondary.uk-card-body .uk-dotnav>.uk-active>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>.uk-active>*,.uk-overlay-primary .uk-dotnav>.uk-active>*,.uk-offcanvas-bar .uk-dotnav>.uk-active>*{background-color:rgba(255,255,255,0.9);border-color:transparent}.uk-light .uk-accordion-title::before,.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-card-primary.uk-card-body .uk-accordion-title::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-accordion-title::before,.uk-card-secondary.uk-card-body .uk-accordion-title::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-accordion-title::before,.uk-overlay-primary .uk-accordion-title::before,.uk-offcanvas-bar .uk-accordion-title::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,0.7)%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,0.7)%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-open>.uk-accordion-title::before,.uk-section-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-section-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-tile-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-card-primary.uk-card-body .uk-open>.uk-accordion-title::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-open>.uk-accordion-title::before,.uk-card-secondary.uk-card-body .uk-open>.uk-accordion-title::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-open>.uk-accordion-title::before,.uk-overlay-primary .uk-open>.uk-accordion-title::before,.uk-offcanvas-bar .uk-open>.uk-accordion-title::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,0.7)%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-iconnav>*>a,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-card-primary.uk-card-body .uk-iconnav>*>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-iconnav>*>a,.uk-card-secondary.uk-card-body .uk-iconnav>*>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-iconnav>*>a,.uk-overlay-primary .uk-iconnav>*>a,.uk-offcanvas-bar .uk-iconnav>*>a{color:rgba(255,255,255,0.5)}.uk-light .uk-iconnav>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-card-primary.uk-card-body .uk-iconnav>*>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-iconnav>*>a:hover,.uk-card-secondary.uk-card-body .uk-iconnav>*>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-iconnav>*>a:hover,.uk-overlay-primary .uk-iconnav>*>a:hover,.uk-offcanvas-bar .uk-iconnav>*>a:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-iconnav>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-card-primary.uk-card-body .uk-iconnav>.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-iconnav>.uk-active>a,.uk-card-secondary.uk-card-body .uk-iconnav>.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-iconnav>.uk-active>a,.uk-overlay-primary .uk-iconnav>.uk-active>a,.uk-offcanvas-bar .uk-iconnav>.uk-active>a{color:rgba(255,255,255,0.7)}.uk-light .uk-text-lead,.uk-section-primary:not(.uk-preserve-color) .uk-text-lead,.uk-section-secondary:not(.uk-preserve-color) .uk-text-lead,.uk-tile-primary:not(.uk-preserve-color) .uk-text-lead,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-lead,.uk-card-primary.uk-card-body .uk-text-lead,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-lead,.uk-card-secondary.uk-card-body .uk-text-lead,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-lead,.uk-overlay-primary .uk-text-lead,.uk-offcanvas-bar .uk-text-lead{color:rgba(255,255,255,0.7)}.uk-light .uk-text-meta,.uk-section-primary:not(.uk-preserve-color) .uk-text-meta,.uk-section-secondary:not(.uk-preserve-color) .uk-text-meta,.uk-tile-primary:not(.uk-preserve-color) .uk-text-meta,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-meta,.uk-card-primary.uk-card-body .uk-text-meta,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-meta,.uk-card-secondary.uk-card-body .uk-text-meta,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-meta,.uk-overlay-primary .uk-text-meta,.uk-offcanvas-bar .uk-text-meta{color:rgba(255,255,255,0.5)}.uk-light .uk-text-muted,.uk-section-primary:not(.uk-preserve-color) .uk-text-muted,.uk-section-secondary:not(.uk-preserve-color) .uk-text-muted,.uk-tile-primary:not(.uk-preserve-color) .uk-text-muted,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-muted,.uk-card-primary.uk-card-body .uk-text-muted,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-muted,.uk-card-secondary.uk-card-body .uk-text-muted,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-muted,.uk-overlay-primary .uk-text-muted,.uk-offcanvas-bar .uk-text-muted{color:rgba(255,255,255,0.5) !important}.uk-light .uk-text-emphasis,.uk-section-primary:not(.uk-preserve-color) .uk-text-emphasis,.uk-section-secondary:not(.uk-preserve-color) .uk-text-emphasis,.uk-tile-primary:not(.uk-preserve-color) .uk-text-emphasis,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-emphasis,.uk-card-primary.uk-card-body .uk-text-emphasis,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-emphasis,.uk-card-secondary.uk-card-body .uk-text-emphasis,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-emphasis,.uk-overlay-primary .uk-text-emphasis,.uk-offcanvas-bar .uk-text-emphasis{color:#fff !important}.uk-light .uk-text-primary,.uk-section-primary:not(.uk-preserve-color) .uk-text-primary,.uk-section-secondary:not(.uk-preserve-color) .uk-text-primary,.uk-tile-primary:not(.uk-preserve-color) .uk-text-primary,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-primary,.uk-card-primary.uk-card-body .uk-text-primary,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-primary,.uk-card-secondary.uk-card-body .uk-text-primary,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-primary,.uk-overlay-primary .uk-text-primary,.uk-offcanvas-bar .uk-text-primary{color:#fff !important}.uk-light .uk-text-secondary,.uk-section-primary:not(.uk-preserve-color) .uk-text-secondary,.uk-section-secondary:not(.uk-preserve-color) .uk-text-secondary,.uk-tile-primary:not(.uk-preserve-color) .uk-text-secondary,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-secondary,.uk-card-primary.uk-card-body .uk-text-secondary,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-secondary,.uk-card-secondary.uk-card-body .uk-text-secondary,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-secondary,.uk-overlay-primary .uk-text-secondary,.uk-offcanvas-bar .uk-text-secondary{color:#fff !important}.uk-light .uk-column-divider,.uk-section-primary:not(.uk-preserve-color) .uk-column-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-column-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-column-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-column-divider,.uk-card-primary.uk-card-body .uk-column-divider,.uk-card-primary>:not([class*='uk-card-media']) .uk-column-divider,.uk-card-secondary.uk-card-body .uk-column-divider,.uk-card-secondary>:not([class*='uk-card-media']) .uk-column-divider,.uk-overlay-primary .uk-column-divider,.uk-offcanvas-bar .uk-column-divider{column-rule-color:rgba(255,255,255,0.2)}.uk-light .uk-logo,.uk-section-primary:not(.uk-preserve-color) .uk-logo,.uk-section-secondary:not(.uk-preserve-color) .uk-logo,.uk-tile-primary:not(.uk-preserve-color) .uk-logo,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo,.uk-card-primary.uk-card-body .uk-logo,.uk-card-primary>:not([class*='uk-card-media']) .uk-logo,.uk-card-secondary.uk-card-body .uk-logo,.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo,.uk-overlay-primary .uk-logo,.uk-offcanvas-bar .uk-logo{color:#fff}.uk-light .uk-logo:hover,.uk-section-primary:not(.uk-preserve-color) .uk-logo:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-logo:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-logo:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo:hover,.uk-card-primary.uk-card-body .uk-logo:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-logo:hover,.uk-card-secondary.uk-card-body .uk-logo:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo:hover,.uk-overlay-primary .uk-logo:hover,.uk-offcanvas-bar .uk-logo:hover{color:#fff}.uk-light .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-section-primary:not(.uk-preserve-color) .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-section-secondary:not(.uk-preserve-color) .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-tile-primary:not(.uk-preserve-color) .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-tile-secondary:not(.uk-preserve-color) .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-card-primary.uk-card-body .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-card-primary>:not([class*='uk-card-media']) .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-card-secondary.uk-card-body .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-overlay-primary .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-offcanvas-bar .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-light .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-section-primary:not(.uk-preserve-color) .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-section-secondary:not(.uk-preserve-color) .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-tile-primary:not(.uk-preserve-color) .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-tile-secondary:not(.uk-preserve-color) .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-card-primary.uk-card-body .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-card-primary>:not([class*='uk-card-media']) .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-card-secondary.uk-card-body .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-overlay-primary .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-offcanvas-bar .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type){display:none}.uk-light .uk-logo-inverse,.uk-section-primary:not(.uk-preserve-color) .uk-logo-inverse,.uk-section-secondary:not(.uk-preserve-color) .uk-logo-inverse,.uk-tile-primary:not(.uk-preserve-color) .uk-logo-inverse,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo-inverse,.uk-card-primary.uk-card-body .uk-logo-inverse,.uk-card-primary>:not([class*='uk-card-media']) .uk-logo-inverse,.uk-card-secondary.uk-card-body .uk-logo-inverse,.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo-inverse,.uk-overlay-primary .uk-logo-inverse,.uk-offcanvas-bar .uk-logo-inverse{display:block}@media print{*,*::before,*::after{background:transparent !important;color:black !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}*{font-family:'Roboto', sans-serif}.markdown h1{color:#404040}.markdown h2{color:#404040}.markdown h3{color:#404040} diff --git a/branch/rkdarst--registration/workshops/discipline-online.png b/branch/rkdarst--registration/workshops/discipline-online.png new file mode 100644 index 000000000..dac295cd5 Binary files /dev/null and b/branch/rkdarst--registration/workshops/discipline-online.png differ diff --git a/branch/rkdarst--registration/workshops/disciplines_positions.png b/branch/rkdarst--registration/workshops/disciplines_positions.png new file mode 100644 index 000000000..83df85b0a Binary files /dev/null and b/branch/rkdarst--registration/workshops/disciplines_positions.png differ diff --git a/branch/rkdarst--registration/workshops/full-workshops.json b/branch/rkdarst--registration/workshops/full-workshops.json new file mode 100644 index 000000000..5494582d5 --- /dev/null +++ b/branch/rkdarst--registration/workshops/full-workshops.json @@ -0,0 +1,1000 @@ +{ + "events": [ + { + "name": "Full online workshop (6 half-days)", + "website": "https://coderefinery.github.io/2022-09-20-workshop/", + "start_date": "2022-09-20", + "end_date": "2022-09-29", + "host": [ + "Radovan Bast", + "Matias Jääskeläinen", + "Richard Darst" + ], + "instructors": [ + "Sabry Razick", + "Samantha Wittke", + "Dhanya Pushpadas", + "Thomas Pfau", + "Radovan Bast", + "Hande Celikkanat", + "Johan Hellsvik", + "Thor Wikfeldt", + "Jarno Rantaharju", + "Matteo Tomasini", + "Richard Darst" + ], + "expert_helpers": [ + "Diana Iusan", + "Thor Wikfeldt", + "Johan Hellsvik", + "Stephan Smuts", + "Juho Lehtonen", + "Dhanya Pushpadas" + ], + "helpers": [ + "Björn Claremar", + "Philip Gjedde", + "Juho Lehtonen", + "Bjørn Lindi", + "Giordano Lipari", + "Dhanya Pushpadas", + "Stephanie van de Sandt", + "Meron Vermaas", + "Aleksandra Wilczynska", + "Ruslan Zhuravchak", + "Kaveh Karimi" + ], + "num_participants": { + "FI": 76, + "SE": 52, + "NO": 50, + "ES": 12, + "DK": 7, + "NL": 34, + "IN": 4, + "IE": 3, + "CH": 3, + "UK": 3, + "IT": 3, + "FR": 2, + "US": 2, + "TT": 1, + "SG": 1, + "CN": 1, + "TH": 1, + "GR": 1, + "IR": 1, + "TR": 1, + "BR": 1, + "ID": 1, + "DE": 1, + "CA": 1, + "total": 262 + }, + "twitch_viewers": { + "smallest_viewers_max": 97, + "largest_viewers_max": 157 + }, + "zoom_participants": { + "min": 25, + "max": 59 + } + }, + { + "name": "Full online workshop (6 half-days)", + "website": "https://coderefinery.github.io/2022-03-22-workshop/", + "start_date": "2022-03-22", + "end_date": "2022-03-31", + "host": [ + "Radovan Bast", + "Richard Darst", + "Enrico Glerean" + ], + "instructors": [ + "Radovan Bast", + "Richard Darst", + "Luca Ferranti", + "Johan Hellsvik", + "Diana Iusan", + "Jarno Rantaharju", + "Sabry Razick", + "Thor Wikfeldt", + "Samantha Wittke" + ], + "expert_helpers": [ + "Enrico Glerean", + "Bjørn Lindi" + ], + "helpers": [ + "Niket Agrawal", + "Inigo Aldazabal", + "Heather Andrews", + "Thomas Arildsen", + "Lora Armstrong", + "Susan Branchett", + "Romain Caneill", + "Abel Carreras", + "Björn Claremar", + "Juan Sebastian Diaz Boada", + "Marco Foscato", + "Manuel Garcia Alvarez", + "Niharika Gauraha", + "Agneta Ghose", + "Toby Hodges", + "Maurits Kok", + "Bjørn Lindi", + "Jose Carlos Llanusa", + "Pedro Ojeda", + "Dhanya Pushpadas", + "Stephan Smuts", + "Ingrid Strandberg", + "Aleksandra Wilczynska" + ], + "num_participants": { + "AT": 1, + "BD": 1, + "BR": 1, + "DK": 14, + "FI": 54, + "FR": 1, + "DE": 6, + "HU": 1, + "IN": 2, + "IT": 2, + "MM": 1, + "NL": 55, + "NG": 1, + "NO": 87, + "PK": 1, + "ES": 16, + "SE": 46, + "CH": 1, + "UK": 3, + "US": 3, + "total": 297 + }, + "twitch_viewers": { + "smallest_viewers_max": 144, + "largest_viewers_max": 215 + } + }, + { + "name": "Full online workshop (6 half-days)", + "website": "https://coderefinery.github.io/2021-05-10-workshop/", + "start_date": "2021-05-10", + "end_date": "2021-05-20", + "host": [ + "Richard Darst" + ], + "instructors": [ + "Radovan Bast", + "Anne Fouilloux", + "Johan Hellsvik", + "Diana Iusan", + "Juho Lehtonen", + "Sabry Razick", + "Thor Wikfeldt", + "Samantha Wittke" + ], + "expert_helpers": [ + "Richard Darst", + "Max R. Eckardt", + "Patric Holmvall", + "Anni Järvenpää", + "Stefan Negru", + "Jarno Rantaharju", + "Marijn van Vliet" + ], + "helpers": [ + "Niket Agrawal", + "Octavian Andrei", + "Thomas Arildsen", + "Flavio Calvo", + "Ted Hsuan Yun Chen", + "Luca Ferranti", + "Marco Foscato", + "Manuel Garcia Alvarez", + "Luc Girod", + "Shashank Shekhar Harivyasi", + "Patric Holmvall", + "Sunniva Indrehus", + "Stig Rune Jensen", + "Matúš Kalaš", + "Alberto Lazzarotto", + "Lesetja Lekoloane", + "Pavlin Mitev", + "Devaraju Narayanappa", + "Fabricio Oliveira", + "Massimo Pizzol", + "Evgeny Posenitskiy", + "Ankita Priya", + "Annajiat Alim Rasel", + "Aili Sarre", + "Jannetta Steyn", + "Ingrid Strandberg", + "Naoe Tatara", + "Will Usher" + ], + "num_participants": { + "SE" : 21, + "NO" : 43, + "FI" : 24, + "DK" : 12, + "NL" : 16, + "BD" : 1, + "FR" : 1, + "IN" : 1, + "IT" : 3, + "SL" : 1, + "ZA" : 3, + "CH" : 0, + "UK" : 2, + "total": 128 + } + }, + { + "name": "Online", + "website": "https://coderefinery.github.io/2020-11-17-online/", + "start_date": "2020-11-17", + "end_date": "2020-11-26", + "host": [ + "Naoe Tatara" + ], + "instructors": [ + "Radovan Bast", + "Anne Fouilloux", + "Matus Kalas", + "Pavlin Mitev", + "Sabry Razick", + "Thor Wikfeldt" + ], + "expert_helpers": [ + "Richard Darst", + "Max R. Eckardt", + "Juho Lehtonen", + "Emiliano Molinaro", + "Stefan Negru", + "Samantha Wittke" + ], + "helpers": [ + "Octavian Andrei", + "Raphaela Heil", + "Johan Hellsvik", + "Patric Holmvall", + "Diana Iusan", + "Matthew Morris", + "Athanasios Protopapas", + "Annajiat Alim Rasel", + "Anthony Scemama", + "Ingrid Strandberg" + ], + "num_participants": { + "NO": 26, + "SE": 27, + "FI": 3, + "FR": 4, + "PL": 2, + "IN": 1, + "DE": 4, + "BE": 1, + "BD": 1, + "ES": 3, + "CH": 1, + "US": 2, + "UK": 2, + "total": 77 + } + }, + { + "name": "Online", + "website": "https://coderefinery.github.io/2020-10-20-online/", + "start_date": "2020-10-20", + "end_date": "2020-10-29", + "host": [ + "Richard Darst", + "Naoe Tatara", + "Radovan Bast" + ], + "instructors": [ + "Radovan Bast", + "Richard Darst", + "Johan Hidding", + "Jarno Rantaharju", + "Sabry Razick", + "Marijn van Vliet", + "Jens Wehner", + "Thor Wikfeldt" + ], + "expert_helpers": [ + "Enrico Glerean", + "Juho Lehtonen", + "Samantha Wittke" + ], + "helpers": [ + "Niket Agrawal", + "Susan Branchett", + "Simoneta Caño de Las Heras", + "Amir Ebrahimi Fard", + "Johan Hidding", + "Jakob Sauer Jørgensen", + "Maurits Kok", + "Raul Ortiz Merino", + "Ingrid Strandberg", + "Evelien Van Dijk", + "Jens Wehner" + ], + "num_participants": { + "DK": 11, + "FI": 22, + "MA": 1, + "NL": 43, + "NO": 4, + "SE": 19, + "total": 100 + } + }, + { + "name": "Online (Mega-CodeRefinery)", + "website": "https://coderefinery.github.io/2020-05-25-online/", + "start_date": "2020-05-25", + "end_date": "2020-06-04", + "host": [ + "Naoe Tatara" + ], + "instructors": [ + "Radovan Bast", + "Anne Fouilloux", + "Bjørn Lindi", + "Thor Wikfeldt", + "Stefan Negru", + "Richard Darst" + ], + "expert_helpers": [ + "Enrico Glerean", + "Jarno Rantaharju", + "Juho Lehtonen", + "Sabry Razick" + ], + "helpers": [ + "Daniel Holmberg", + "Ebrahim Afyounian", + "Erika Yashiro", + "Francesco Tabaro", + "Joakim Löfgren", + "Kerstin Lenk", + "Lauri Neuvonen", + "Luis Amezcua", + "Mikael Djurfeldt", + "Mikko Heikkilä", + "Pengfei Xu", + "Preethy Nair", + "Raphaela Heil", + "Rohit Goswami", + "Samantha Wittke", + "Sebastian Schmidt", + "Tomi Häkkinen", + "Tuomas Rossi", + "Ygor Morais Jaques" + ], + "num_participants": { + "DK": 2, + "FI": 75, + "IS": 1, + "NP": 1, + "NO": 16, + "SE": 5, + "UK": 1, + "US": 1, + "total": 102 + } + }, + { + "name": "Trondheim", + "start_date": "2020-02-25", + "end_date": "2020-02-27", + "instructors": [ + "Anne Fouilloux", + "Bjørn Lindi", + "Nico Reissmann" + ], + "helpers": [ + "Radek Lonka" + ], + "num_participants": { + "NO": 26, + "SE": 1, + "PL": 1, + "total": 28 + }, + "location": { + "lat": 63.41921, + "lon": 10.402319 + } + }, + { + "name": "Espoo", + "start_date": "2019-12-10", + "end_date": "2019-12-12", + "instructors": [ + "Radovan Bast", + "Richard Darst", + "Enrico Glerean", + "Juho Lehtonen", + "João M. da Silva", + "Jarno Rantaharju" + ], + "helpers": [ + "Marijn Van Vliet", + "Anni Järvenpää", + "Shreyas Deshpande" + ], + "num_participants": { + "FI": 30, + "total": 30 + }, + "location": { + "lat": 60.18708, + "lon": 24.82909 + } + }, + { + "name": "Lille", + "start_date": "2019-11-25", + "end_date": "2019-12-05", + "instructors": [ + "Radovan Bast" + ], + "num_participants": { + "FR": 28, + "total": 28 + }, + "location": { + "lat": 50.61141, + "lon": 3.14053 + } + }, + { + "name": "Stockholm", + "start_date": "2019-11-19", + "end_date": "2019-11-21", + "instructors": [ + "Thor Wikfeldt", + "Radovan Bast", + "Anne Fouilloux" + ], + "helpers": [ + "Dmytro Kryvokhyzha", + "Carolina Robustini", + "Ashwin Vishnu" + ], + "num_participants": { + "SE": 28, + "total": 28 + }, + "location": { + "lat": 59.35002, + "lon": 18.02398 + } + }, + { + "name": "Trondheim", + "start_date": "2019-10-22", + "end_date": "2019-10-24", + "instructors": [ + "Thor Wikfeldt", + "Radovan Bast", + "Bjørn Lindi" + ], + "helpers": [ + "Nico Reissmann", + "Radek Lonka" + ], + "num_participants": { + "NO": 20, + "total": 20 + }, + "location": { + "lat": 63.41594, + "lon": 10.40656 + } + }, + { + "name": "Aalborg", + "start_date": "2019-06-11", + "end_date": "2019-06-13", + "instructors": [ + "Max Roald Eckardt", + "Radovan Bast", + "Sabry Razick" + ], + "helpers": [ + "Thomas Arildsen", + "Vang Que Le", + "Tobias Lindstrøm Jensen", + "Emiliano Molinaro", + "Lucy Whalley" + ], + "num_participants": { + "DK": 18, + "US": 1, + "UK": 1, + "total": 20 + }, + "location": { + "lat": 57.01398, + "lon": 9.98891 + } + }, + { + "name": "Oslo", + "start_date": "2019-06-03", + "end_date": "2019-06-05", + "instructors": [ + "Radovan Bast", + "Sabry Razick", + "Anne Fouilloux", + "Stefan Negru" + ], + "helpers": [ + "Jean Iaquinta" + ], + "num_participants": { + "NO": 18, + "DK": 1, + "SE": 1, + "total": 20 + }, + "location": { + "lat": 59.94347, + "lon": 10.718161 + } + }, + { + "name": "Helsinki", + "start_date": "2019-05-27", + "end_date": "2019-05-29", + "instructors": [ + "Richard Darst", + "Juho Lehtonen", + "João M. da Silva", + "Stefan Negru" + ], + "helpers": [ + "Manana Koberidze", + "Enrico Glerean" + ], + "num_participants": { + "FI": 26, + "SE": 1, + "total": 27 + }, + "location": { + "lat": 60.20444, + "lon": 24.96171 + } + }, + { + "name": "Gothenburg", + "start_date": "2019-05-21", + "end_date": "2019-05-23", + "instructors": [ + "Max Roald Eckardt", + "Anne Fouilloux", + "Bjørn Lindi", + "Thor Wikfeldt" + ], + "helpers": [ + "Leif Wigge", + "Tuomas Rossi", + "Mikael Öhman" + ], + "num_participants": { + "SE": 25, + "total": 25 + }, + "location": { + "lat": 57.708870, + "lon": 11.974560 + } + }, + { + "name": "Tartu", + "start_date": "2019-04-02", + "end_date": "2019-04-04", + "instructors": [ + "Bjørn Lindi", + "João M. da Silva", + "Radovan Bast", + "Sabry Razick" + ], + "helpers": [ + "Dmytro Fishman", + "Ivan Kuzmin", + "Mikhail Papkov" + ], + "num_participants": { + "EE": 25, + "DE": 1, + "total": 26 + }, + "location": { + "lat": 58.370850, + "lon": 26.714720 + } + }, + { + "name": "Stockholm", + "start_date": "2019-03-25", + "end_date": "2019-03-27", + "instructors": [ + "Radovan Bast", + "Thor Wikfeldt", + "Juho Lehtonen" + ], + "helpers": [ + "Tor Kjellsson Lindblom" + ], + "num_participants": { + "SE": 28, + "DE": 2, + "total": 30 + }, + "location": { + "lat": 59.34819, + "lon": 18.07489 + } + }, + { + "name": "Espoo", + "start_date": "2018-12-11", + "end_date": "2018-12-13", + "instructors": [ + "Stefan Negru", + "Juho Lehtonen", + "Radovan Bast", + "Richard Darst" + ], + "helpers": [ + "João M. da Silva", + "Pradeep Eranti" + ], + "num_participants": { + "FI": 31, + "DK": 1, + "UK": 1, + "total": 33 + }, + "location": { + "lat": 60.18708, + "lon": 24.82909 + } + }, + { + "name": "Uppsala", + "start_date": "2018-12-03", + "end_date": "2018-12-05", + "instructors": [ + "Thor Wikfeldt", + "Radovan Bast", + "Max Schön" + ], + "helpers": [ + "Hadrien Gourlé" + ], + "num_participants": { + "SE": 30, + "NO": 1, + "total": 31 + }, + "location": { + "lat": 59.8434075, + "lon": 17.641331 + } + }, + { + "name": "Kiruna", + "start_date": "2018-11-21", + "end_date": "2018-11-23", + "instructors": [ + "Thor Wikfeldt", + "Max Roald Eckardt", + "Sabry Razick", + "Radovan Bast" + ], + "num_participants": { + "SE": 36, + "NO": 1, + "CH": 1, + "total": 38 + }, + "location": { + "lat": 67.850, + "lon": 20.2166667 + } + }, + { + "name": "Reykjavik", + "start_date": "2018-08-21", + "end_date": "2018-08-23", + "instructors": [ + "Thor Wikfeldt", + "Bjørn Lindi", + "Radovan Bast" + ], + "num_participants": { + "IS": 22, + "SE": 3, + "CH": 1, + "total": 26 + }, + "location": { + "lat": 64.1396, + "lon": -21.9519 + } + }, + { + "name": "Oslo", + "start_date": "2018-06-12", + "end_date": "2018-06-14", + "instructors": [ + "Sabry Razick", + "Sri Harsha Vathsavayi", + "Richard Darst" + ], + "helpers": [ + "Anne Fouilloux" + ], + "num_participants": { + "NO": 38, + "DE": 1, + "SE": 3, + "total": 42 + }, + "location": { + "lat": 59.94347, + "lon": 10.718161 + } + }, + { + "name": "Espoo", + "start_date": "2018-05-29", + "end_date": "2018-05-31", + "instructors": [ + "Jyry Suvilehto", + "Sri Harsha Vathsavayi", + "Richard Darst" + ], + "num_participants": { + "FI": 48, + "total": 48 + }, + "location": { + "lat": 60.18708, + "lon": 24.82909 + } + }, + { + "name": "Lund", + "start_date": "2018-05-15", + "end_date": "2018-05-17", + "instructors": [ + "Radovan Bast", + "Sabry Razick", + "Thor Wikfeldt" + ], + "num_participants": { + "SE": 30, + "DK": 1, + "total": 31 + }, + "location": { + "lat": 55.715043, + "lon": 13.212401 + } + }, + { + "name": "Turku", + "start_date": "2018-03-20", + "end_date": "2018-03-22", + "instructors": [ + "Jyry Suvilehto", + "Radovan Bast", + "Sri Harsha Vathsavayi" + ], + "helpers": [ + "Zubair Maalick" + ], + "num_participants": { + "FI": 22, + "SE": 1, + "total": 23 + }, + "location": { + "lat": 60.4493, + "lon": 22.2952 + } + }, + { + "name": "Trondheim", + "start_date": "2018-02-27", + "end_date": "2018-03-01", + "instructors": [ + "Bjørn Lindi", + "Radovan Bast", + "Thor Wikfeldt" + ], + "num_participants": { + "NO": 20, + "SE": 1, + "DK": 1, + "total": 22 + }, + "location": { + "lat": 63.4208, + "lon": 10.3928 + } + }, + { + "name": "Espoo", + "start_date": "2017-12-14", + "end_date": "2017-12-16", + "instructors": [ + "Bjørn Lindi", + "Jyry Suvilehto", + "N. D.", + "Radovan Bast", + "Sri Harsha Vathsavayi", + "Seija Sirkiä" + ], + "helpers": [ + "Janne Blomqvist", + "Richard Darst", + "Mika Jalava", + "Harshit Agrawal", + "Vesa Vahermaa" + ], + "num_participants": { + "FI": 40, + "total": 40 + }, + "location": { + "lat": 60.18708, + "lon": 24.82909 + } + }, + { + "name": "Linköping", + "start_date": "2017-11-07", + "end_date": "2017-11-09", + "instructors": [ + "Radovan Bast", + "Thor Wikfeldt", + "Sabry Razick" + ], + "helpers": [ + "Peter Kjellström" + ], + "num_participants": { + "NO": 1, + "SE": 21, + "total": 22 + }, + "location": { + "lat": 58.3978, + "lon": 15.5760 + } + }, + { + "name": "Aarhus", + "start_date": "2017-10-24", + "end_date": "2017-10-26", + "instructors": [ + "Bjørn Lindi", + "Radovan Bast", + "Thor Wikfeldt", + "Sabry Razick" + ], + "helpers": [ + "Dan Mønster" + ], + "num_participants": { + "DK": 24, + "SE": 3, + "total": 27 + }, + "location": { + "lat": 56.1681, + "lon": 10.2030 + } + }, + { + "name": "Tromsø", + "start_date": "2017-06-19", + "end_date": "2017-06-21", + "instructors": [ + "Bjørn Lindi", + "Radovan Bast", + "Thor Wikfeldt", + "Jyry Suvilehto" + ], + "num_participants": { + "BE": 1, + "SE": 1, + "NO": 21, + "total": 23 + }, + "location": { + "lat": 69.68137, + "lon": 18.97228 + } + }, + { + "name": "Copenhagen", + "start_date": "2017-05-09", + "end_date": "2017-05-11", + "instructors": [ + "Sri Harsha Vathsavayi", + "N. D.", + "Radovan Bast", + "Jyry Suvilehto" + ], + "num_participants": { + "SE": 3, + "NL": 1, + "DK": 19, + "total": 23 + }, + "location": { + "lat": 55.78626, + "lon": 12.523 + } + }, + { + "name": "Stockholm", + "start_date": "2017-02-20", + "end_date": "2017-02-22", + "instructors": [ + "Sabry Razick", + "N. D.", + "Radovan Bast", + "Thor Wikfeldt", + "Bjørn Lindi" + ], + "helpers": [ + "Cristian Cira" + ], + "num_participants": { + "SE": 34, + "total": 34 + }, + "location": { + "lat": 59.34819, + "lon": 18.07489 + } + }, + { + "name": "Espoo", + "start_date": "2016-12-14", + "end_date": "2016-12-16", + "instructors": [ + "Jyry Suvilehto", + "N. D.", + "Pinja Koskinen", + "Radovan Bast", + "Thor Wikfeldt" + ], + "helpers": [ + "Sri Harsha Vathsavayi", + "Heikki Lehväslaiho" + ], + "num_participants": { + "FI": 25, + "total": 25 + }, + "location": { + "lat": 60.17833, + "lon": 24.83303 + } + } + ] +} diff --git a/branch/rkdarst--registration/workshops/heatmap-online.png b/branch/rkdarst--registration/workshops/heatmap-online.png new file mode 100644 index 000000000..1231fc079 Binary files /dev/null and b/branch/rkdarst--registration/workshops/heatmap-online.png differ diff --git a/branch/rkdarst--registration/workshops/heatmap_yesno.png b/branch/rkdarst--registration/workshops/heatmap_yesno.png new file mode 100644 index 000000000..2a142de2a Binary files /dev/null and b/branch/rkdarst--registration/workshops/heatmap_yesno.png differ diff --git a/branch/rkdarst--registration/workshops/impact/index.html b/branch/rkdarst--registration/workshops/impact/index.html new file mode 100644 index 000000000..cf7347365 --- /dev/null +++ b/branch/rkdarst--registration/workshops/impact/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/branch/rkdarst--registration/workshops/index.html b/branch/rkdarst--registration/workshops/index.html new file mode 100644 index 000000000..d38421134 --- /dev/null +++ b/branch/rkdarst--registration/workshops/index.html @@ -0,0 +1,429 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/workshops/instructor-training.json b/branch/rkdarst--registration/workshops/instructor-training.json new file mode 100644 index 000000000..db31f5216 --- /dev/null +++ b/branch/rkdarst--registration/workshops/instructor-training.json @@ -0,0 +1,79 @@ +{ + "events": [ + { + "name": "Online (with FocusCoE)", + "website": "https://coderefinery.github.io/2020-11-02-instructor-training/", + "start_date": "2020-11-02", + "end_date": "2020-11-09", + "instructors": [ + "Radovan Bast", + "Richard Darst", + "Anne Fouilloux", + "Sabry Razick" + ], + "helpers": [ + "Jarno Rantaharju" + ], + "num_participants": { + "total": 14 + } + }, + { + "name": "Online (with TU Delft)", + "website": "https://coderefinery.github.io/2020-06-24-instructor-training/", + "start_date": "2020-06-24", + "end_date": "2020-06-25", + "instructors": [ + "Radovan Bast", + "Richard Darst", + "Anne Fouilloux" + ], + "helpers": [ + "Thor Wikfeldt", + "Paula Martinez Lavanchy" + ], + "num_participants": { + "NO": 1, + "FI": 1, + "NL": 21, + "total": 23 + } + }, + { + "name": "Stockholm", + "start_date": "2019-11-04", + "end_date": "2019-11-05", + "organizers": [ + "Thor Wikfeldt", + "Anne Fouilloux", + "Radovan Bast" + ], + "instructors": [ + "Thor Wikfeldt", + "Anne Fouilloux", + "Radovan Bast", + "Radovan Bast", + "Richard Darst" + ], + "helpers": [ + "Juho Lehtonen", + "Sabry Razick", + "Jarno Rantaharju", + "João M. da Silva", + "Max Roald Eckardt", + "Naoe Tatara", + "Emiliano Molinaro", + "Bjørn Lindi" + ], + "num_participants": { + "NO": 8, + "DK": 2, + "FI": 2, + "UK": 1, + "EE": 2, + "SE": 15, + "total": 30 + } + } + ] +} diff --git a/branch/rkdarst--registration/workshops/other.json b/branch/rkdarst--registration/workshops/other.json new file mode 100644 index 000000000..fbd00c461 --- /dev/null +++ b/branch/rkdarst--registration/workshops/other.json @@ -0,0 +1,620 @@ +{ + "events": [ + { + "name": "CarpentryCon 2022: Online teaching strategies from CodeRefinery", + "website": "https://hackmd.io/@coderefinery/carpentrycon-2022-attendee", + "start_date": "2022-08-03", + "end_date": "2022-08-03", + "Organizer": [ + "Radovan Bast", + "Richard Darst" + ], + "instructors": [ + "Radovan Bast", + "Richard Darst", + "Luca Ferranti", + "Samantha Wittke" + ], + "num_participants": { + "total": 15 + } + }, + { + "name": "Community teaching mini-workshop", + "website": "https://hackmd.io/@coderefinery/community-teaching-2022-summer", + "start_date": "2022-06-21", + "end_date": "2022-06-21", + "Organizer": [ + "Radovan Bast", + "Richard Darst" + ], + "instructors": [ + "Radovan Bast", + "Richard Darst", + "Diana Iusan", + "Johan Hellsvik" + ], + "helpers": [], + "num_participants": { + "DK": 2, + "ES": 1, + "SE": 5, + "NO": 7, + "FI": 5, + "LT": 1, + "LV": 1, + "total": 22 + } + }, + { + "name": "Git workshop with Compex Systems Modelling group at UiT", + "start_date": "2022-02-16", + "end_date": "2022-02-23", + "Organizer": [ + "Radovan Bast" + ], + "instructors": [ + "Radovan Bast" + ], + "helpers": [], + "num_participants": { + "NO": 19, + "total": 19 + } + }, + { + "name": "Python for Scientific Computing", + "website": "https://scicomp.aalto.fi/training/scip/python-for-scicomp/", + "start_date": "2021-10-25", + "end_date": "2021-10-28", + "Organizer": [ + "Richard Darst", + "Enrico Glerean" + ], + "instructors": [ + "Radovan Bast", + "Richard Darst", + "Enrico Glerean", + "Johan Hellsvik", + "Diana Iusan", + "Pavlin Mitev", + "Thomas Pfau", + "Dhanya Pushpadas", + "Jarno Rantaharju", + "Sabry Razick", + "Simo Tuomisto", + "Marijn van Vliet", + "Samantha Wittke" + ], + "helpers": [] + }, + { + "name": "CodeRefinery workshop with focus on Git and GitLab for Metacenter", + "website": "https://coderefinery.github.io/2021-03-25-online/", + "start_date": "2021-03-25", + "end_date": "2021-04-08", + "host": [ + "Sabry Razick", + "Radovan Bast" + ], + "instructors": [ + "Sabry Razick", + "Radovan Bast" + ], + "helpers": [], + "num_participants": { + "NO": 15, + "total": 15 + } + }, + { + "name": "Online CodeRefinery Hackathon on Software Testing", + "website": "https://coderefinery.github.io/2021-03-17-testing-hackathon/", + "start_date": "2021-03-17", + "end_date": "2021-03-24", + "host": [ + "Naoe Tatara", + "Thor Wikfeldt" + ], + "mentors": [ + "Anne Fouilloux", + "Diana Iusan", + "Johan Hellsvik", + "Mark Abraham", + "Qiang Li", + "Radovan Bast", + "Richard Darst", + "Roberto Di Remigio", + "Samantha Wittke", + "Thor Wikfeldt" + ], + "helpers": [ + "Naoe Tatara" + ], + "num_participants": { + "NO": 6, + "FI": 4, + "SE": 16, + "DK": 3, + "ZA": 4, + "total": 33 + } + }, + { + "name": "Online CodeRefinery Workshop on Software Testing", + "website": "https://coderefinery.github.io/2021-03-17-testing-hackathon/", + "start_date": "2021-03-17", + "end_date": "2021-03-17", + "host": [ + "Naoe Tatara", + "Thor Wikfeldt" + ], + "instructors": [ + "Diana Iusan", + "Johan Hellsvik", + "Mark Abraham", + "Thor Wikfeldt" + ], + "helpers": [ + "Qiang Li", + "Radovan Bast", + "Roberto Di Remigio", + "Samantha Wittke", + "Naoe Tatara" + ], + "num_participants": { + "NO": 14, + "FI": 7, + "SE": 31, + "DK": 5, + "IE": 1, + "NL": 2, + "UK": 1, + "FR": 2, + "TN": 1, + "ZA": 5, + "total": 69 + } + }, + { + "name": "Introduction to Shell, Computing resources for researchers, and HPC Kickstart (Aalto University and University of Oslo) (online)", + "website": "https://coderefinery.github.io/2021-01-29-linux-online/", + "start_date": "2021-01-29", + "end_date": "2021-01-29", + "instructors": [ + "Richard Darst", + "Enrico Glerean", + "Anne Fouilloux", + "Sabry Razick" + ], + "helpers": [ + "Marijn van Vliet", + "Jarno Rantaharju", + "Naoe Tatara" + ], + "num_participants": { + "NO": 59, + "FI": 71, + "total": 130 + } + }, + { + "name": "Introduction to Conda for (Data) Scientists (online)", + "website": "https://coderefinery.github.io/2021-01-08-coderefinery-online/", + "start_date": "2021-01-08", + "end_date": "2021-01-08", + "instructors": [ + "Anne Fouilloux", + "Samantha Wittke" + ], + "helpers": [ + "Niket Agrawal", + "Octavian Andrei", + "Radovan Bast", + "Emiliano Gelati", + "Tomasz Kopec", + "Emilia Lipponen", + "Lex Nederbragt", + "Hui Tang", + "Sabry Razick", + "Naoe Tatara" + ], + "num_participants": { + "NO": 39, + "FI": 5, + "NL": 2, + "SE": 1, + "IN": 1, + "total": 48 + } + }, + { + "name": "Collaborative version control with Git (online)", + "website": "https://coderefinery.github.io/2020-12-10-online/", + "start_date": "2020-12-10", + "end_date": "2020-12-11", + "instructors": [ + "Anne Fouilloux", + "Radovan Bast" + ], + "helpers": [ + "Sabry Razick" + ], + "num_participants": { + "NO": 15, + "total": 15 + } + }, + { + "name": "Version control (Karlstad/online)", + "website": "https://wikfeldt.github.io/2020-09-22-karlstad/", + "start_date": "2020-09-22", + "end_date": "2020-09-23", + "instructors": [ + "Raphaela Heil", + "Thor Wikfeldt", + "Pavlin Mitev" + ], + "helpers": [ + "Diana Iusan" + ], + "num_participants": { + "SE": 11, + "CN": 1, + "total": 12 + } + }, + { + "name": "Python for Scientific Computing (online)", + "website": "https://scicomp.aalto.fi/training/scip/python-for-scicomp/", + "start_date": "2020-09-14", + "end_date": "2020-09-23", + "host": [ + "Naoe Tatara" + ], + "instructors": [ + "Anne Fouilloux", + "Richard Darst", + "Samantha Wittke", + "Thor Wikfeldt", + "Radovan Bast" + ], + "num_participants": { + "FI": 41, + "NO": 24, + "SE": 3, + "total": 68 + } + }, + { + "name": "GitHub without command line (Tampere/online)", + "start_date": "2020-08-13", + "end_date": "2020-08-13", + "instructors": [ + "Radovan Bast", + "Richard Darst" + ], + "helpers": [ + "Kerstin Lenk", + "Narayan Puthanmadam Subramaniyam" + ], + "num_participants": { + "FI": 16, + "total": 16 + }, + "location": { + "lat": 61.49512, + "lon": 23.77887 + } + }, + { + "name": "Workshop for those familiar with Git (online)", + "website": "https://coderefinery.github.io/2020-05-18-online/", + "start_date": "2020-05-18", + "end_date": "2020-05-20", + "host": [ + "Naoe Tatara" + ], + "instructors": [ + "Radovan Bast", + "Bjørn Lindi", + "Sabry Razick", + "Thor Wikfeldt" + ], + "helpers": [ + "Richard Darst", + "Max Roald Eckardt", + "Juho Lehtonen", + "Pavlin Mitev" + ], + "num_participants": { + "SE": 20, + "NO": 2, + "FI": 1, + "DE": 2, + "unknown": 2, + "total": 27 + } + }, + { + "name": "Collaborative Git (online)", + "website": "https://coderefinery.github.io/2020-05-06-online/", + "start_date": "2020-05-06", + "end_date": "2020-05-06", + "instructors": [ + "Anne Fouilloux", + "Bjørn Lindi", + "Thor Wikfeldt", + "Stefan Negru" + ], + "helpers": [ + "Radovan Bast", + "Richard Darst", + "Juho Lehtonen", + "Sabry Razick" + ], + "num_participants": { + "SE": 25, + "NO": 5, + "DK": 4, + "FI": 3, + "total": 37 + } + }, + { + "name": "GitHub without command line (online)", + "start_date": "2020-04-15", + "end_date": "2020-04-22", + "instructors": [ + "Radovan Bast" + ], + "num_participants": { + "NO": 10, + "total": 10 + } + }, + { + "name": "Introduction to Git (online)", + "website": "https://coderefinery.github.io/2020-04-07-online/", + "start_date": "2020-04-07", + "end_date": "2020-04-08", + "instructors": [ + "Anne Fouilloux", + "Radovan Bast", + "Thor Wikfeldt", + "Richard Darst" + ], + "helpers": [ + "Flavio Calvo", + "João M. da Silva", + "Pedro Ojeda May", + "Pavlin Mitev", + "Hasti Narimanzadeh" + ], + "num_participants": { + "SE": 19, + "FI": 1, + "DE": 2, + "total": 22 + } + }, + { + "name": "Best Software Practices for the Norwegian Earth System Model (Oslo/Bergen/Online)", + "start_date": "2020-02-05", + "end_date": "2020-02-05", + "instructors": [ + "Anne Fouilloux" + ], + "num_participants": { + "NO": 30, + "total": 30 + } + }, + { + "name": "Social coding and open software (Oslo)", + "website": "https://www.ub.uio.no/english/courses-events/events/all-libraries/2020/research-bazaar/social-coding.html", + "start_date": "2020-01-09", + "end_date": "2020-01-09", + "instructors": [ + "Anne Fouilloux" + ], + "num_participants": { + "NO": 21, + "total": 21 + }, + "location": { + "lat": 59.91712, + "lon": 10.73719 + } + }, + { + "name": "Hackathon (Stockholm)", + "start_date": "2019-11-06", + "end_date": "2019-11-07", + "organizers": [ + "Thor Wikfeldt", + "Anne Fouilloux", + "Radovan Bast" + ], + "speakers": [ + "Rosa Lönneborg", + "Richard Darst", + "Anne Fouilloux", + "Radovan Bast" + ], + "num_participants": { + "NO": 8, + "FI": 3, + "DK": 1, + "UK": 1, + "EE": 1, + "SE": 4, + "total": 18 + }, + "location": { + "lat": 59.34781, + "lon": 18.07257 + } + }, + { + "name": "Reproducibility workshop (Stockholm)", + "start_date": "2019-09-09", + "end_date": "2019-09-12", + "instructors": [ + "Thor Wikfeldt", + "Will Usher" + ], + "num_participants": { + "SE": 12, + "total": 12 + }, + "location": { + "lat": 59.34847, + "lon": 18.0729 + } + }, + { + "name": "Python for Dynamics and Evolution of Earth and Planets (Oslo)", + "website": "https://annefou.github.io/2019-04-01-deep/", + "start_date": "2019-04-01", + "end_date": "2019-04-05", + "instructors": [ + "Nils Charles Prieur", + "Anne Fouilloux" + ], + "num_participants": { + "NO": 12, + "total": 12 + }, + "location": { + "lat": 59.94347, + "lon": 10.718161 + } + }, + { + "name": "Mixed Arts with CodeRefinery & Software Carpentry (Copenhagen)", + "website": "https://kln-courses.github.io/mixed-arts/", + "start_date": "2019-03-05", + "end_date": "2019-03-05", + "instructors": [ + "Annika Rockenberger", + "Max Roald Eckardt" + ], + "num_participants": { + "DK": 40, + "total": 40 + }, + "location": { + "lat": 55.66293, + "lon": 12.59031 + } + }, + { + "name": "Git in practice (Oslo)", + "website": "https://uio-carpentry.github.io/2019-02-27-git/", + "start_date": "2019-02-27", + "end_date": "2019-02-27", + "instructors": [ + "Sabry Razick", + "Anne Fouilloux" + ], + "helpers": [ + "Annika Rockenberger " + ], + "num_participants": { + "NO": 18, + "total": 18 + }, + "location": { + "lat": 59.939637, + "lon": 10.723291 + } + }, + { + "name": "Git workshop (Umeå)", + "start_date": "2017-10-16", + "end_date": "2017-10-16", + "instructors": [ + "Radovan Bast", + "Jyry Suvilehto", + "Thor Wikfeldt" + ], + "num_participants": { + "SE": 21, + "total": 21 + }, + "location": { + "lat": 63.8191, + "lon": 20.31 + } + }, + { + "name": "Workshop: Interfacing Fortran, C, C++, and Python (Manchester)", + "website": "https://rse.ac.uk/conf2017/workshop-and-tutorial-abstracts/#mixed-martial-arts-with-coderefinery", + "start_date": "2017-09-08", + "end_date": "2017-09-08", + "instructors": [ + "Radovan Bast" + ], + "num_participants": { + "total": 15 + }, + "location": { + "lat": 53.47724, + "lon": -2.25475 + } + }, + { + "name": "Workshop: Mixed Martial Arts with CodeRefinery (Umeå)", + "website": "http://neic2017.nordforsk.org/workshops/coderefinery/", + "start_date": "2017-05-29", + "end_date": "2017-05-29", + "instructors": [ + "Bjørn Lindi", + "Radovan Bast" + ], + "num_participants": { + "total": 15 + }, + "location": { + "lat": 63.8267, + "lon": 20.2665 + } + }, + { + "name": "CodeRefinery get-together (Stockholm)", + "start_date": "2017-05-19", + "end_date": "2017-05-19", + "organizers": [ + "Radovan Bast", + "Thor Wikfeldt" + ], + "speakers": [ + "Mark Abraham", + "Mikael Leetmaa" + ], + "num_participants": { + "SE": 15, + "total": 15 + }, + "location": { + "lat": 59.34819, + "lon": 18.07489 + } + }, + { + "name": "CodeRefinery seminar (Oslo)", + "website": "https://www.uio.no/english/services/it/research/events/coderefinery-2017-april.html", + "start_date": "2017-04-06", + "end_date": "2017-04-06", + "num_participants": { + "NO": 15, + "total": 15 + }, + "location": { + "lat": 59.94347, + "lon": 10.718161 + } + } + ] +} diff --git a/branch/rkdarst--registration/workshops/past/index.html b/branch/rkdarst--registration/workshops/past/index.html new file mode 100644 index 000000000..2f3671374 --- /dev/null +++ b/branch/rkdarst--registration/workshops/past/index.html @@ -0,0 +1,2451 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +

Past workshops and events

+ +
+
+

(locations "in the ocean" represent online events)

+
+ + + +
+
+

Standard CodeRefinery workshops

+ + + +
    + + + + +
  • + + Full online workshop (6 half-days) + +
    + +   + + + Sep 20 + - + Sep 29, 2022 + + +   + (262 participants) + +
    +
  • + + + + + +
  • + + Full online workshop (6 half-days) + +
    + +   + + + Mar 22 + - + Mar 31, 2022 + + +   + (297 participants) + +
    +
  • + + + + + +
  • + + Full online workshop (6 half-days) + +
    + +   + + + May 10 + - + May 20, 2021 + + +   + (128 participants) + +
    +
  • + + + + + +
  • + + Online + +
    + +   + + + Nov 17 + - + Nov 26, 2020 + + +   + (77 participants) + +
    +
  • + + + + + +
  • + + Online + +
    + +   + + + Oct 20 + - + Oct 29, 2020 + + +   + (100 participants) + +
    +
  • + + + + + +
  • + + Online (Mega-CodeRefinery) + +
    + +   + + + May 25 + - + Jun 4, 2020 + + +   + (102 participants) + +
    +
  • + + + + + +
  • + + Trondheim + +
    + +   + + + Feb 25 + - + Feb 27, 2020 + + +   + (28 participants) + +
    +
  • + + + + + +
  • + + Espoo + +
    + +   + + + Dec 10 + - + Dec 12, 2019 + + +   + (30 participants) + +
    +
  • + + + + + +
  • + + Lille + +
    + +   + + + Nov 25 + - + Dec 5, 2019 + + +   + (28 participants) + +
    +
  • + + + + + +
  • + + Stockholm + +
    + +   + + + Nov 19 + - + Nov 21, 2019 + + +   + (28 participants) + +
    +
  • + + + + + +
  • + + Trondheim + +
    + +   + + + Oct 22 + - + Oct 24, 2019 + + +   + (20 participants) + +
    +
  • + + + + + +
  • + + Aalborg + +
    + +   + + + Jun 11 + - + Jun 13, 2019 + + +   + (20 participants) + +
    +
  • + + + + + +
  • + + Oslo + +
    + +   + + + Jun 3 + - + Jun 5, 2019 + + +   + (20 participants) + +
    +
  • + + + + + +
  • + + Helsinki + +
    + +   + + + May 27 + - + May 29, 2019 + + +   + (27 participants) + +
    +
  • + + + + + +
  • + + Gothenburg + +
    + +   + + + May 21 + - + May 23, 2019 + + +   + (25 participants) + +
    +
  • + + + + + +
  • + + Tartu + +
    + +   + + + Apr 2 + - + Apr 4, 2019 + + +   + (26 participants) + +
    +
  • + + + + + +
  • + + Stockholm + +
    + +   + + + Mar 25 + - + Mar 27, 2019 + + +   + (30 participants) + +
    +
  • + + + + + +
  • + + Espoo + +
    + +   + + + Dec 11 + - + Dec 13, 2018 + + +   + (33 participants) + +
    +
  • + + + + + +
  • + + Uppsala + +
    + +   + + + Dec 3 + - + Dec 5, 2018 + + +   + (31 participants) + +
    +
  • + + + + + +
  • + + Kiruna + +
    + +   + + + Nov 21 + - + Nov 23, 2018 + + +   + (38 participants) + +
    +
  • + + + + + +
  • + + Reykjavik + +
    + +   + + + Aug 21 + - + Aug 23, 2018 + + +   + (26 participants) + +
    +
  • + + + + + +
  • + + Oslo + +
    + +   + + + Jun 12 + - + Jun 14, 2018 + + +   + (42 participants) + +
    +
  • + + + + + +
  • + + Espoo + +
    + +   + + + May 29 + - + May 31, 2018 + + +   + (48 participants) + +
    +
  • + + + + + +
  • + + Lund + +
    + +   + + + May 15 + - + May 17, 2018 + + +   + (31 participants) + +
    +
  • + + + + + +
  • + + Turku + +
    + +   + + + Mar 20 + - + Mar 22, 2018 + + +   + (23 participants) + +
    +
  • + + + + + +
  • + + Trondheim + +
    + +   + + + Feb 27 + - + Mar 1, 2018 + + +   + (22 participants) + +
    +
  • + + + + + +
  • + + Espoo + +
    + +   + + + Dec 14 + - + Dec 16, 2017 + + +   + (40 participants) + +
    +
  • + + + + + +
  • + + Linköping + +
    + +   + + + Nov 7 + - + Nov 9, 2017 + + +   + (22 participants) + +
    +
  • + + + + + +
  • + + Aarhus + +
    + +   + + + Oct 24 + - + Oct 26, 2017 + + +   + (27 participants) + +
    +
  • + + + + + +
  • + + Tromsø + +
    + +   + + + Jun 19 + - + Jun 21, 2017 + + +   + (23 participants) + +
    +
  • + + + + + +
  • + + Copenhagen + +
    + +   + + + May 9 + - + May 11, 2017 + + +   + (23 participants) + +
    +
  • + + + + + +
  • + + Stockholm + +
    + +   + + + Feb 20 + - + Feb 22, 2017 + + +   + (34 participants) + +
    +
  • + + + + + +
  • + + Espoo + +
    + +   + + + Dec 14 + - + Dec 16, 2016 + + +   + (25 participants) + +
    +
  • + + +
+ + +

Open house events

+ +
+ +
+

Instructor training events

+ + + +
    + + + + +
  • + + Online (with FocusCoE) + +
    + +   + + + Nov 2 + - + Nov 9, 2020 + + +   + (14 participants) + +
    +
  • + + + + + +
  • + + Online (with TU Delft) + +
    + +   + + + Jun 24 + - + Jun 25, 2020 + + +   + (23 participants) + +
    +
  • + + + + + +
  • + + Stockholm + +
    + +   + + + Nov 4 + - + Nov 5, 2019 + + +   + (30 participants) + +
    +
  • + + +
+ + +

Shorter workshops and other events

+ + + + + +
+
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/workshops/position-online.png b/branch/rkdarst--registration/workshops/position-online.png new file mode 100644 index 000000000..86e87a3c7 Binary files /dev/null and b/branch/rkdarst--registration/workshops/position-online.png differ diff --git a/branch/rkdarst--registration/workshops/request/index.html b/branch/rkdarst--registration/workshops/request/index.html new file mode 100644 index 000000000..feb6f714e --- /dev/null +++ b/branch/rkdarst--registration/workshops/request/index.html @@ -0,0 +1,469 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + +

Request a workshop

+

Join an existing workshop

+

Requesting a workshop is so 2019, isn't it? At least for us it is. +As of 2022, most of our workshops are online. This isn't just because +of Covid-19 still, but we have found that online innovations such as +co-teaching, HackMD, livestreaming, and more contributors allows us to +deliver a better quality program (and that's even before we get to the +broader audience). Various institutions run in-person breakout rooms +and exercise sessions for the courses, too.

+

So, our most common recommendation for the classic 6-day CodeRefinery +workshops is to join one of the online courses with your own +registration and local breakout rooms (in-person or online). The most +important part of our current model is teams with exercise leaders, +and this model allows anyone to join as long as they can find these +local leaders.

+

Private workshops requests

+

If you would like to request a private workshop, please get in +touch. As of 2022, with our updated funding +situation, CodeRefinery is more of a decentralized organization and we +may not have dedicated staff to offer workshops. +Thus, you would be expected to help with the teaching and organization some.

+

During this transition period, it's best to join the CodeRefniery +chat and discuss there - we are +re-inventing as we speak. It's good to ask if you are interested, +even if we can't do it yet - this shows demand and helps with future +funding!

+

Since CodeRefinery still has Nordic roots, that is our main audience. +Workshops have been requested by both organizations and individual +research groups. Price might be free (e.g. a staff member at a +national computing center can provide the workshop) or some other +CodeRefinery partner might be able to name a price.

+

Other workshops

+

CodeRefinery is now more than one workshop curriculum, but a platform +for sharing a wide variety of workshops. These are more ad-hoc based +on interest from partners. Many of them can be joined as described in +the first section of this page.

+

These workshops have ranged as broadly as "HPC Kickstart" to "Python +for Scientific Computing".

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/workshops/statistics/index.html b/branch/rkdarst--registration/workshops/statistics/index.html new file mode 100644 index 000000000..7c262c410 --- /dev/null +++ b/branch/rkdarst--registration/workshops/statistics/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/branch/rkdarst--registration/workshops/upcoming/index.html b/branch/rkdarst--registration/workshops/upcoming/index.html new file mode 100644 index 000000000..74422bae4 --- /dev/null +++ b/branch/rkdarst--registration/workshops/upcoming/index.html @@ -0,0 +1,460 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + +

Upcoming workshops and events

+

Workshop dates for 2022

+ + +

Past workshops and events

+

On this page we list all our past workshops and events.

+

How to be informed about future events

+

We don't want you to miss a workshop or event. The best +way to stay informed is to join our newsletter +(we are working on reviving it and will post updates there soon).

+

You can also subscribe to our RSS feed.

+

Upcoming workshops from partner organizations

+
+ +

Partners are invited to send a pull +request +to list your workshop/event here.

+
+ +

Privacy policy

+

Our privacy policy +documents what registration data we store, where, and why.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/branch/rkdarst--registration/workshops/yes-no-questions-online.png b/branch/rkdarst--registration/workshops/yes-no-questions-online.png new file mode 100644 index 000000000..ec07e86ba Binary files /dev/null and b/branch/rkdarst--registration/workshops/yes-no-questions-online.png differ diff --git a/calendars/index.html b/calendars/index.html new file mode 100644 index 000000000..c10fb42a2 --- /dev/null +++ b/calendars/index.html @@ -0,0 +1,899 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + + +
+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/img/favicon.ico b/img/favicon.ico new file mode 100644 index 000000000..a2df0fb66 Binary files /dev/null and b/img/favicon.ico differ diff --git a/index.html b/index.html new file mode 100644 index 000000000..6bcf22adb --- /dev/null +++ b/index.html @@ -0,0 +1,1316 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +
+
+ + CodeRefinery logo + +
+
+ +

Training and e-Infrastructure for Research Software Development

+

We teach all the essential tools which are usually skipped in academic +education so everyone can make full use of software, computing, and +data. We don't just give courses, but we are a training network that you +can join to share the effort and bring better courses to your +community.

+

Our standard workshop is well known in Nordic +academic circles and our engaging online teaching +style is considered best-in-class even +compared to in-person teaching. CodeRefinery aims to operate as a +community project with support from academic organizations.

+

View our vision of the future of +teaching (or read +it).

+ +
+
+ + +
+

News

+
    +
  • Our September workshop just finished. We will soon share our lessons learned and the plan forward.
  • +
  • We are thinking 12-14 and 19-21 March, 2024, for our next workshop. +But the format may be changed and dates adjusted to fit the new +format.
  • +
  • Our last workshop was Tue-Thu, September 19-21 and 26-28 (6 +half-days, +online) - you +can continue to browsed and self-studied.
  • +
+ +
+ + +
+

CodeRefinery provides

+
    +
  • For organizations: an opportunity to pool competence +and offer more training and development opportunities than +they could individually. A place to share best teaching practices +and other skills.
  • +
  • For volunteers and the team: a community around teaching +and opportunity for skill development, both in pedagogy and +practical skills.
  • +
  • For learners: a welcoming and useful environment for +learning many necessary practical skills that may otherwise +not be explicitly taught. This can be through courses, +hackathons, and the like.
  • +
+ +
+ +
+
+

Newsletter

+ +

+ This is a low traffic newsletter about our events and updates: One email every 1 or 2 months + (archives). +

+ +
+ +
+
+ +
+
+ +
+
+ +
+ +
+ +
+

Become part of the team

+ +

+ Come and join our team. Let us create something amazing together! + + Let us create something amazing together! +

+ +
+ Tasks/roadmap + Join as individual + As staff + As organization +
+ +
+
+ +
+
+

Feedback and testimonials

+ +
+
    + + +

    I'm more conscious about the way I write programs and organize their 'organic' +growth. I try to modularize more and write proper tests. I also use git more +extensive to keep track about my different development branches +

    + +

    The main thing I got out of the workshop is that I'm now extensively using the +issue-tracking systems on GitHub and GitLab. Also on one of my major projects +we have moved towards having shorter lived feature branches and using merge +requests for more frequent merges and less code divergence. I also started +using GitLab's issues system more frequently. It made it easier for people in +my lab to report bugs, and easier for me to keep track of them +

    + +

    My code became much more 'sustainable' in the sense for others to +read/use/modify it. In detail the most significant is improved use of git +(forking workflow) and more strict 'purity' of functions. Use of PyCharm +increased speed of development +

    + +

    I take more time to think about long term solutions than 'quick fixes' even if +it's short of time. Another aspect is that I try to make the code reproducible +in the sense of documentation, code readability, clear log files, etc, both for +helping myself and my collaborators +

    + +

    My code is better documented, and I use version control much more. I have also +started writing more unit tests +

    + +

    I write my codes now in such a way that the person who will be taking over my +job would have less time figuring out what is going on. The emphasis of writing +modular codes in the workshop was very helpful for me and for the people using +my code +

    + +

    For me the most important thing was to learn to use git better. Now I make +frequent commented commits so it is far easier to see what I actually did for +me and others too +

    + +

    This was an extremely useful workshop. Thank you very much! I wish I had known +this stuff already as a grad student 10+ years ago. It is now easier to +collaborate with co-developers and easier to keep things in order and +structured +

    + +

    Constantly making sure my code is as accessible as possible to ensure future me +and others can understand and use it, i.e. writing explanatory comments +everywhere no matter how simple the code may be. +

    + +

    Increased confidence. Sense of community (extremely valuable during the +pandemic times). The value of volunteering. +

    + +

    I'm significantly more confident in navigating and creating versions and +branches in git and on GitHub. +

    + +

    It was a great experience, it just did sum up all the necessary tools and step +to build more sustainable code. That saved me A LOT of time trying to figuring +out everything by myself!! :) +

    + +

    I am an experienced developer and instructor and attended the workshop mainly +to help out. It did not change much for me in terms of the course content. +However, the course was am absolutely great experience for me in terms of +seeing how to conduct a massive online course with live participation. The +HackMD "backchannel" and breakout rooms with helpers are features I now +incorporate in teaching at my own university. +

    + +

    Think much more before starting a coding project and overall better structure: +coding with a structure in mind (making modules, simplifying), using a +structured approach to coding (knowing which tools, which steps, doing reviews, +etc.), etc. +

    + +

    I have a much broader understanding of these tools and why they are important. +I regularly use the tutorials and movies to help teach new incoming students in +between CodeRefinery workshops. +

    + +

    The project team has a common understanding of why and how to track code +versions and collaborate on processing scripts +

    + +

    More focus on that results and papers should be reproducible, ideally even for +referees. +

    + +
+
+ +

+ More feedback and testimonials can be found in + this GitHub repository. +

+ +
+
+ +
+
+

Latest blog posts

+ + + + +

+ All our blog posts are summarized in the + blog post overview page. +

+ +
+ +
+

Mastodon

+ +

+ We are at @coderefinery@fosstodon.org + (joining hints). + On Twitter, we are @coderefine (without the -ry). +

+ + + +
+
+ +
+
+
+ + + picture of a classroom + +

Training opportunities

+

+ We offer training opportunities to researchers from Nordic + research groups (but we aim to expand beyond Nordics) to learn + basic-to-advanced research computing skills and become confident + in using state-of-the-art tools and practices from modern + collaborative software engineering. +

+ More ›

+
+
+ +
+
+ + + wordcloud + +

Lesson materials

+

+ We develop and maintain training material on software best + practices for researchers that already write code. Our material + addresses all academic disciplines and tries to be as programming + language-independent as possible. +

+ More ›

+
+
+ +
+
+ + + terminal screen output + +

Code Repository Hosting

+

+ Our code repository hosting service is open and free for all + researchers based in Nordic universities and research institutes + and their collaborators. +

+ More ›

+
+
+ +
+
+ + ResearchSoftwareHour logo + +

Research Software Hour

+

+ Online stream/show about scientific computing and research + software. It is designed to provide the skills typically picked up + via informal networks: we explore and discuss tools and how we + program and compute. +

+ More ›

+
+
+
+ + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/index/description/index.html b/index/description/index.html new file mode 100644 index 000000000..4a90d0e77 --- /dev/null +++ b/index/description/index.html @@ -0,0 +1,901 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + +

Training and e-Infrastructure for Research Software Development

+

We teach all the essential tools which are usually skipped in academic +education so everyone can make full use of software, computing, and +data. We don't just give courses, but we are a training network that you +can join to share the effort and bring better courses to your +community.

+

Our standard workshop is well known in Nordic +academic circles and our engaging online teaching +style is considered best-in-class even +compared to in-person teaching. CodeRefinery aims to operate as a +community project with support from academic organizations.

+

View our vision of the future of +teaching (or read +it).

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/index/index.html b/index/index.html new file mode 100644 index 000000000..da97e47a7 --- /dev/null +++ b/index/index.html @@ -0,0 +1,885 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/index/news/index.html b/index/news/index.html new file mode 100644 index 000000000..f0aecd375 --- /dev/null +++ b/index/news/index.html @@ -0,0 +1,898 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + +

News

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/index/provides/index.html b/index/provides/index.html new file mode 100644 index 000000000..71539af4c --- /dev/null +++ b/index/provides/index.html @@ -0,0 +1,901 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + +

CodeRefinery provides

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/join/chat/index.html b/join/chat/index.html new file mode 100644 index 000000000..1c33db293 --- /dev/null +++ b/join/chat/index.html @@ -0,0 +1,904 @@ + + + + Chat with us - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Chat with us + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Chat with us

+ + + +

We use Zulip to discuss within our team and community.

+

You don't need an invite to join our Zulip +chat - simply sign up and join.

+

This is the place where we discuss lesson development, plan events, share +lessons learned and new tools and tricks, and where we ask and answer questions +about computing and programming. No question is too simple. Drop by and ask and +talk with us! You can listen in, follow certain threads, participate, and +influence. Learn how CodeRefinery uses +it.

+

We are supported by Zulip

+Zulip logo +

Zulip is an open-source modern team chat app designed to keep both live and +asynchronous conversations organized. We very much appreciate their support by +hosting our chat for free.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/join/community-teaching-training/index.html b/join/community-teaching-training/index.html new file mode 100644 index 000000000..6cb2b1021 --- /dev/null +++ b/join/community-teaching-training/index.html @@ -0,0 +1,928 @@ + + + + Community teaching training - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Community teaching training + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Community teaching training

+ + + +

Want to learn about the CodeRefinery teaching +style? Want to be able to run your own +workshop as a livestream and invite others to attend. Want to join +forces to make teaching more open, accessible, and available? Attend +our community teaching training.

+

Our community teaching training recognizes that in the connected +era, teaching doesn't have to be a solitary or small team affair. +CodeRefinery's workshops are done as a broad team with many diverse +roles, and this allows us to reach a huge number of people.

+ +

Courses are offered as we need to (contact us if you want one), +usually around once a year - but really, right now we onboard most +people to our style by working together.

+

"Community teaching training" is much more broad and doesn't duplicate +the Carpentries instructor +training - attending both +is useful.

+

See also

+

The material can be found at Community teaching +training.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/join/index.html b/join/index.html new file mode 100644 index 000000000..7c84d1b35 --- /dev/null +++ b/join/index.html @@ -0,0 +1,959 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Why and how to join

+ + +
+ +
+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/join/individuals/index.html b/join/individuals/index.html new file mode 100644 index 000000000..74b89dc0a --- /dev/null +++ b/join/individuals/index.html @@ -0,0 +1,950 @@ + + + + For individuals - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - For individuals + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

For individuals

+ + + +

As individuals, there are plenty of ways to join CodeRefinery, regardless of +what you do now. Also see what professional staff +supporting a local community and organizations can +do.

+

For any of these, you can get started by joining a +meeting and say hi, or join our +chat and introduce yourself in +the "#new members" stream. Or contact anyone you know for a recommendation on +how to get involved - we aren't that formal yet. If you've been sent this page +as a "help out at this workshop", that will tell you who to contact.

+
+
+

As a learner

+

Anyone may attend our workshops, and this is a great way to get started. If +you want to do more than just attend, join our chat and give feedback during +the workshop.

+

As a team leader

+

Even during your first workshop, you could register as an exercise leader and +help a team of others. This is actually not that hard, and you aren't expected +to know everything, instead you focus on keeping a good flow and welcoming +environment. There are other expert helpers to help you. If you are +comfortable enough with the pre-requisites, aren't too scared by error +messages, and can call for help when you need it, then you can do it! We have +some basic on-boarding +training for you!

+

Maybe you want to bring all the rest of your research group as your team?

+

As a co-instructor or expert helper

+

We don't teach alone, and thus it's remarkably easy to get started as an +instructor! In fact, we almost recommend it as a starting point, since it's +good to have a co-instructor who understands the difficulty of doing and +learning the topics. Joining as co-instructor means that you will be in touch +with other instructors. It is great learning and a necessary step to call +yourself "CodeRefinery instructor".

+

If teaching isn't for you, you can help by supporting learners and team leaders +during a workshop. If you like reading about how we work, see the roles +overview for all the +varying responsibilities in a workshop (surely there is something for you +there).

+
+
+

Lesson contributions

+

We would love to see more contributions to our lessons. We are a normal open +source project on GitHub, and you can contribute via issues, pull requests, or +by discussing in our chat. You are +welcome to reuse our lessons as well.

+

A good starting point is to either open a topic on our +chat or to open an issue on one of the +lesson repositories in our GitHub +organization where you can describe what you +would like to change to collect feedback and possibly also contributors.

+

No contribution is too small and ideas for changes are very often very good +ideas and we would love to work with you on making our lessons better and more +modular and even more relevant.

+

Help out the CodeRefinery project itself

+

As an open project, there are always things to do to keep us running! We're +especially interested in people who know how to grow a community, do better +communications, or manage many events better than we do now. On this +page we list the many tasks where you can join and contribute.

+
+
+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/join/meetings/index.html b/join/meetings/index.html new file mode 100644 index 000000000..268974822 --- /dev/null +++ b/join/meetings/index.html @@ -0,0 +1,937 @@ + + + + CodeRefinery meetings - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery meetings + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

CodeRefinery meetings

+ + + +

Team & Community meetings

+

Every Monday at 14 CET/CEST.

+

We welcome everyone interested in CodeRefinery to join our weekly meetings. +This is the place to drop by if you have questions or would like to get +involved but don't know where to start.

+ +

Scope

+ +

Archive of past community calls

+ +

Archive of past staff meetings

+

These were meetings about administrative tasks such as generation of reports +and deliverables, involving paid staff. In Autumn 2021, with the end of phase +2 of the project, we dropped the distinction between "staff" and "non-staff" +and dropped the separation between staff meetings and community calls and +started to focus on community calls.

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/join/organizations/index.html b/join/organizations/index.html new file mode 100644 index 000000000..e3574e233 --- /dev/null +++ b/join/organizations/index.html @@ -0,0 +1,935 @@ + + + + For organizations - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - For organizations + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

For organizations

+ + + +

CodeRefinery is a collaboration between different organizations (most +are universities or research computing infrastructure providers), and +your organization can join!

+
+
+

Provide CodeRefinery workshops to your community

+

Joining as an organization isn't that different than what is +described on the staff page, but you can do so even +more systematically and take part in decision-making about what +workshops we offer and when.

+

Do your own teaching better

+

Do you need to teach and reach a broader audience? Do you put on your own +workshops? Join CodeRefinery, learn our teaching +strategies, and let's +improve our events together. Plenty of technical staff (who aren't primarily +teachers) need to teach as part of their jobs, and this is the kind of +community that CodeRefinery provides.

+

Open up your workshops to the CodeRefinery community

+

You might offer some of your own workshops to be live-streamed to a +wide audience, and we can help you to develop the workshop and do the +streaming - including finding many expert co-instructors to help with +the writing and teaching. This exchange of teaching also leads to +lots of other technical skill exchange, which is excellent for your +staff skills as well.

+
+
+

Joining CodeRefinery as a partner/sponsor

+

In the future, there will be some way to officially join CodeRefinery +as a sponsor, but that will come when it's time. For now, if +you express interest, you can join almost immediately and help figure +out the way we will work later. Currently, you could consider +yourself a partner if (criteria are subject to change):

+
    +
  • You have at least one staff member who has a significant interest in +teaching intermediate-level practical skills in scientific computing.
  • +
  • You have some staff who follows and is interested in contributing to +CodeRefinery meetings + activities.
  • +
  • You help out with CodeRefinery workshops in +proportion to your resources, possibly offering some of yours to a +wider audience.
  • +
  • You open a pull request adding yourself to the partners +page.
  • +
+
+
+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/join/staff/index.html b/join/staff/index.html new file mode 100644 index 000000000..716c5d18f --- /dev/null +++ b/join/staff/index.html @@ -0,0 +1,921 @@ + + + + For staff - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - For staff + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

For staff

+ + + +

If you work at an organization that supports computational research, +join us! Don't forget you can do everything on the for +individuals page as part of your job, and +your whole organization could join.

+
+
+

Run your own breakout rooms and/or provide local support

+

Go one step beyond simple advertising: organize your local community, organize +people into teams (if desired), set up in-person on online spaces to watch the +course and do the exercises together.

+

We can support you however possible, for example more chat support, training +team leaders, and you can join our planning meetings. Read more about local +advertisement and breakout +rooms.

+

For any of these, you can get started by join a meeting +and say hi, or join our chat +and introduce yourself in the "#new members" stream. Or contact anyone you +know for a recommendation on how to get involved - we aren't that formal yet.

+
+
+ +

Letting your local audience know about our events is a simple way to +provide a high-impact training opportunity to your community with +little work on your side. Many of our workshops are online and +live-streamed, so anyone can attend.

+

Request in-person workshops

+

This is currently somewhat on hiatus, since our online workshops work +so well, but you could request your +own workshop.

+
+
+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/join/zulip-icon-circle.svg b/join/zulip-icon-circle.svg new file mode 100644 index 000000000..72466de7f --- /dev/null +++ b/join/zulip-icon-circle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/lessons/contributing/index.html b/lessons/contributing/index.html new file mode 100644 index 000000000..cce05baa9 --- /dev/null +++ b/lessons/contributing/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/lessons/core/index.html b/lessons/core/index.html new file mode 100644 index 000000000..52292d995 --- /dev/null +++ b/lessons/core/index.html @@ -0,0 +1,968 @@ + + + + Core CodeRefinery lessons - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Core CodeRefinery lessons + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Core CodeRefinery lessons

+ + + +

These are the lessons which are included in the "standard" CodeRefinery +workshop, and what we believe that every computational scientist (even those +with very small amounts of computation) should know. But there is more: Also +see all of our online lessons.

+ +

Self-study workshop

+

Want to study this material yourself? No problem! The CodeRefinery +teaching style tries to make this accessible to you. All the +lessons above are designed to be self-sufficient for self-study. We +also have video recordings and archived "parallel chat Q&A" (which can +go into other both basic and advanced questions) which may +optionally be useful for other teaching styles.

+

The following are the video recordings + parallel chat of the 2022 +September workshop:

+ +

For self-study purposes, you may need the installation +instructions. Note +that you may want to see what is necessary for each lesson, before +going and installing everything there.

+

Support in self-study is very important. There are several +options:

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/lessons/from-coderefinery/index.html b/lessons/from-coderefinery/index.html new file mode 100644 index 000000000..e6bfa6ff5 --- /dev/null +++ b/lessons/from-coderefinery/index.html @@ -0,0 +1,1014 @@ + + + + All CodeRefinery lessons - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - All CodeRefinery lessons + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

All CodeRefinery lessons

+ + + +

This is not a strict division, but lessons can be classified as to what is +initially useful to yourself, to your group, and to the whole community. +Lessons marked with (*) are core lessons and part of a +regular 6 half-day workshop.

+

For yourself and larger

+ +

For your group and larger

+ +

For the community

+ +

Instructor training and manuals

+ +

Special topics

+ +

Video recordings

+

A number of video recordings of CodeRefinery lessons and workshops and +Research Software Hour sessions can be +found on our YouTube +channel.

+

Installation guides

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/lessons/index.html b/lessons/index.html new file mode 100644 index 000000000..9b987c59a --- /dev/null +++ b/lessons/index.html @@ -0,0 +1,933 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

CodeRefinery lessons

+ + +
+ +
+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/lessons/other/index.html b/lessons/other/index.html new file mode 100644 index 000000000..f8611474f --- /dev/null +++ b/lessons/other/index.html @@ -0,0 +1,1003 @@ + + + + Other lessons - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Other lessons + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Other lessons

+ + + +

Other lessons by our partners

+

You can expect these to be open-source, reusable, in a git repository, and with +a community you can join and give contributions to:

+ +

Lessons we contributed to as instructors or helpers

+ +

Other lessons we recommend

+ +

Interesting organisations and projects to follow

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/lessons/reusing/index.html b/lessons/reusing/index.html new file mode 100644 index 000000000..7c382aec8 --- /dev/null +++ b/lessons/reusing/index.html @@ -0,0 +1,930 @@ + + + + Reusing/teaching our lessons - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Reusing/teaching our lessons + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Reusing/teaching our lessons

+ + + +

All of our material is open source and reuse is encouraged. In +general, we only recommend similarly open-source, reusable lessons. +Check the license from each repository in case of questions (most +CodeRefinery-developed lessons use CC BY +4.0).

+

Teaching these lessons independently is encouraged, just make sure the +distinction between the "CodeRefinery" project and your workshop is +clear. For example, give your own name to the workshop but say +"(CodeRefinery lessons)".

+

Our lessons are designed to be generic, (mostly) stand-alone, and +re-used in place without forking so that anyone can use them and +they can fit into different types of programs. We welcome +contributions which make the lessons more reusable - send changes +using standard open-source practices (you know, what we teach in +CodeRefinery and all).

+

Please let us know if the material is helpful - it is important for us to +know whether this material has impact outside of our workshops. Some +courses/workshops we know of are listed below but we would like to list more.

+

Derivative work based on our material

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/open-house/blog-posts/index.html b/open-house/blog-posts/index.html new file mode 100644 index 000000000..0c24415b1 --- /dev/null +++ b/open-house/blog-posts/index.html @@ -0,0 +1,919 @@ + + + + Work on blog posts - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Work on blog posts + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + April 24, 2020 + +
+ + coderefinery open house logo + +
+

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.

+

Tentative list of articles:

+
    +
  • Online lessons, what we're working on, how we'll be delivering online workshops
  • +
  • Merge vs rebase
  • +
  • Nordic-RSE conference
  • +
  • NordicHPC tools
  • +
+

Anyone who would like to contribute to these articles or suggests new +topics is welcome to join!

+

We will collect notes in a shared +document. +Please note that this document will be archived in our Open House +event repository.

+

We first meet online at 9:00 am (UTC+1) via video (connection link +will be shared in our shared +document and then work on +the instructor training material. During the day, we will coordinate +the work through our Zulip chat +with possibilities to further discuss via video if necessary.

+

We conclude the day around 4:00 pm (UTC+1) by writing a short +/summary in our shared +document.

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/open-house/coderefinery_openhouse.jpg b/open-house/coderefinery_openhouse.jpg new file mode 100644 index 000000000..ad5d89dee Binary files /dev/null and b/open-house/coderefinery_openhouse.jpg differ diff --git a/open-house/coderefinery_openhouse.png b/open-house/coderefinery_openhouse.png new file mode 100644 index 000000000..9c830b2e8 Binary files /dev/null and b/open-house/coderefinery_openhouse.png differ diff --git a/open-house/credit/index.html b/open-house/credit/index.html new file mode 100644 index 000000000..f931a2569 --- /dev/null +++ b/open-house/credit/index.html @@ -0,0 +1,907 @@ + + + + Making lessons citable and giving credits for contributors - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Making lessons citable and giving credits for contributors + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + October 02, 2020 + +
+ + coderefinery open house logo + +
+

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.

+

Anyone interested is welcome to contribute to discussion on how to realize these in practice!

+

We will collect notes in a shared +document. +Please note that this document will be archived in our Open House +event repository.

+

We first meet online at 9:00 am (CEST) / 10:00 am (EEST) via video (connection link +will be shared in our shared document. +If we decide on working individually during the day, we will coordinate +the work through our Zulip chat +with possibilities to further discuss via video if necessary.

+

We conclude the day around 12:00 pm (UTC+1).

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/open-house/index.html b/open-house/index.html new file mode 100644 index 000000000..d79870ce0 --- /dev/null +++ b/open-house/index.html @@ -0,0 +1,940 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/open-house/instructor-training-material/index.html b/open-house/instructor-training-material/index.html new file mode 100644 index 000000000..c6b436823 --- /dev/null +++ b/open-house/instructor-training-material/index.html @@ -0,0 +1,920 @@ + + + + Work on instructor training material - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Work on instructor training material + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + March 24, 2020 + +
+ + coderefinery open house logo + +
+

CodeRefinery is organizing a one day online "open house" dedicated to +work together on revising and +improving our instructor training +material. +Issues are filed +here, +notes from the first workshop can be in the shared +document, and we +are taking what each of us wants to work on. Input for the further +improvement are also very welcome.

+

Anyone who would like to contribute to the instructor training +material, or learn how to contribute to any CodeRefinery lesson in +general, is welcome!

+

We will collect nodes in a shared +document. +Please note that this document will be archived in our Open House +event repository.

+

We first meet online at 9:00 am (UTC+1) via video (connection link +will be shared in our shared +document and +then work on the instructor training material. During the day, we will +coordinate the work through our Zulip +chat with possibilities to +further discuss via video if necessary.

+

We conclude the day around 4:00 pm (UTC+1) by writing a short +blog/summary in our shared +document.

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/open-house/newsletter/index.html b/open-house/newsletter/index.html new file mode 100644 index 000000000..554f349d5 --- /dev/null +++ b/open-house/newsletter/index.html @@ -0,0 +1,920 @@ + + + + Writing newsletter articles and blog posts - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Writing newsletter articles and blog posts + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + August 24, 2020 + +
+ + coderefinery open house logo + +
+

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.

+

Tentative list of articles:

+
    +
  • Future mega-CR
  • +
  • Update on citable lessons and credit/visibility for instructor and helpers
  • +
  • Update on sustainability efforts?
  • +
  • Manuals : how they can be used for your lessons
  • +
  • git-pr
  • +
+

Anyone who would like to contribute to these articles or suggests new +topics is welcome to join!

+

We will collect notes in a shared +document. +Please note that this document will be archived in our Open House +event repository.

+

We first meet online at 9:00 am (CEST) / 10:00 am (EEST) via video (connection link +will be shared in our shared +document and then work on +the instructor training material. During the day, we will coordinate +the work through our Zulip chat +with possibilities to further discuss via video if necessary.

+

We conclude the day around 4:00 pm (UTC+1) by writing a short +/summary in our shared +document.

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/open-house/online-teaching/index.html b/open-house/online-teaching/index.html new file mode 100644 index 000000000..53edc1e86 --- /dev/null +++ b/open-house/online-teaching/index.html @@ -0,0 +1,900 @@ + + + + Preparing for online teaching - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Preparing for online teaching + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + March 20, 2020 + +
+ + coderefinery open house logo + +
+

We will meet on video (9:00 am, UTC+1) +and chat and discuss techniques, +solutions, and tricks for online teaching and collect our notes in a shared +document.

+

Anyone who would like to contribute or learn is most welcome!

+

We will conclude the day around 4:00 pm (UTC+1) by writing a short blog/summary +in our shared document.

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/open-house/training-material/index.html b/open-house/training-material/index.html new file mode 100644 index 000000000..8b7fec8da --- /dev/null +++ b/open-house/training-material/index.html @@ -0,0 +1,909 @@ + + + + Collaborative work on the training material - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Collaborative work on the training material + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + December 13, 2019 + +
+ + coderefinery open house logo + +
+

Welcome to the first CodeRefinery Open House!

+

The idea behind this event is to bring together people who are interesting in +contributing to the CodeRefinery training +material.

+

Anyone who would like to contribute, learn how to contribute to the +CodeRefinery training material is very welcome to join.

+

We will collect nodes in a shared document. +Please note that this document will be archived in our +Open House event repository.

+

We first meet online at 9:00 am (UTC+1) via video (connection link will be +shared in our shared document) and +then work on CodeRefinery training material. During the day, we will coordinate +the work through our Zulip chat with +possibilities to further discuss via video if necessary.

+

We conclude the day around 4:00pm (UTC+1) by writing a short blog/summary in +our shared document.

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/open-house/website/index.html b/open-house/website/index.html new file mode 100644 index 000000000..01805d6d2 --- /dev/null +++ b/open-house/website/index.html @@ -0,0 +1,913 @@ + + + + Collaborative work on the website - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Collaborative work on the website + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + February 11, 2020 + +
+ + coderefinery open house logo + +
+

Welcome to the second CodeRefinery Open House!

+

Following up on our successful first CodeRefinery Open House, we will have our +second online Open house!

+

The idea behind this event is to work together on revising and improving +coderefinery.org. Issues are +filed and we are +taking what each of us wants to work on. Input for the further improvement are +very welcome!

+

Anyone who would like to contribute, or learn how to contribute to +coderefinery.org is very welcome to join.

+

We will collect nodes in a shared document. +Please note that this document will be archived in our +Open House event repository.

+

We first meet online at 9:00 am (UTC+1) via video (connection link will be +shared in our shared document) and +then work on CodeRefinery training material. During the day, we will coordinate +the work through our Zulip chat with +possibilities to further discuss via video if necessary.

+

We conclude the day around 4:00pm (UTC+1) by writing a short blog/summary in +our shared document.

+ +
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/organization/contact/index.html b/organization/contact/index.html new file mode 100644 index 000000000..1a41594a8 --- /dev/null +++ b/organization/contact/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/organization/contributors/index.html b/organization/contributors/index.html new file mode 100644 index 000000000..78a6e9f86 --- /dev/null +++ b/organization/contributors/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/organization/get-involved/index.html b/organization/get-involved/index.html new file mode 100644 index 000000000..cce05baa9 --- /dev/null +++ b/organization/get-involved/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/organization/how-to-help/index.html b/organization/how-to-help/index.html new file mode 100644 index 000000000..cce05baa9 --- /dev/null +++ b/organization/how-to-help/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/organization/meetings/index.html b/organization/meetings/index.html new file mode 100644 index 000000000..c0a6afe8f --- /dev/null +++ b/organization/meetings/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/organization/partners/index.html b/organization/partners/index.html new file mode 100644 index 000000000..8f13fea77 --- /dev/null +++ b/organization/partners/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/privacy-policy/index.html b/privacy-policy/index.html new file mode 100644 index 000000000..f536e5515 --- /dev/null +++ b/privacy-policy/index.html @@ -0,0 +1,1075 @@ + + + + CodeRefinery privacy policy - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - CodeRefinery privacy policy + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

CodeRefinery privacy policy

+ + + +

Update, 13th March 2023

+

We may use anonymous web analytics on our webpages and lessons. This +is not identifiable, does not have client-side identifiers, and can't +re-identify people between visits (or even for single visits) any more +than normal web browsing can. Because this is (by design) not +identifiable, this should not need to be mentioned here, but we are +for completeness. (The technical implementation is +plausible.io, self-hosted by a CodeRefinery +partner).

+

Update, 12th October 2021

+

In short:

+ +

On the 1st October 2021, it was announced that CodeRefinery will receive +partial financial support by NeIC for the next 3 years (CodeRefinery +Sustainability Phase, CodeRefinery SP, see +https://neic.no/news/2021/10/01/2021-open-call-results/). The next phase of +the CodeRefinery project is mainly consisting of in-kind contributions by +diverse partner organizations. In this new phase, we need to renew our privacy +policy, but we need some time before the new privacy policy is set.

+

We will continue using our online community spaces and the current +owners/administrators will remain until new roles are set in the CodeRefinery +SP.

+

Previously we have written that "Stored names and email addresses of users +will be removed with the end of this project (2021-10-31)". However, we need +to keep participation data from 2020 and 2021 workshops at least until the end +of 2022 since we often get asked for participation certificates long after the +workshop is concluded. Therefore, we will keep information of the +participants who are qualified to certificates (either as learner, helper, +expert helper, or team lead) in the currently used platform, Indico, +managed by NeIC. The currently participating staff who is also committed to be +a part of the CodeRefinery SP have access to the information.

+

We continue using the newsletter in the new phase but +we may switch to other services but in this case we would notify all +subscribers about deletion of their contact information and invite them to +re-register to the new services that we may migrate to. If a user wants to +unsubscribe before that, they are welcome to do so anytime.

+
+

This Privacy Policy covers person identifiable information that may be +provided to CodeRefinery. Your data only comes from what you decide to provide +to us by understanding privacy policy of the platforms we are using for +different purposes as shown below. Changes to this Privacy Policy will be +posted on this page. Any changes will only apply to information collected +after the posted date of any such change. Additionally, information may be +provided to governmental bodies and other entities as required by law.

+

Definitions

+ +

What information do we obtain and why?

+

We obtain user data including person identifiable information in the following manner for each purpose:

+ +

Information you provide in our Online community spaces are visible and +accessible according to each service's privacy policy. Please note that your +information may be visible to other users in the Online community spaces than +CodeRefinery team members. We use your information within each Online +community space for communication purpose in a reasonable and respectful +manner. We will not use your person identifiable information provided in our +Online community spaces for other purposes than communication with you and +within the community. When we archive a note taken in +HackMD during a workshop, we will delete all the +person identifiable information of users.

+

We obtain the following data anonymously and voluntarily from users.

+ +

We use anonymous web analytics on some of our websites and lesson +pages. These are done without client-side IDs or storing identifiable +information on either the client or server side.

+

Who has access to the personally identifiable information?

+ +

Where we store the data

+ +

How long we store the data

+ +

Anonymity and right to be forgotten

+ +

Questions/concerns?

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/processed_images/classroom.79bbc72a78aecc7b.png b/processed_images/classroom.79bbc72a78aecc7b.png new file mode 100644 index 000000000..02564e797 Binary files /dev/null and b/processed_images/classroom.79bbc72a78aecc7b.png differ diff --git a/processed_images/coderefinery.9da32dbc0a0d3d31.png b/processed_images/coderefinery.9da32dbc0a0d3d31.png new file mode 100644 index 000000000..e938d2185 Binary files /dev/null and b/processed_images/coderefinery.9da32dbc0a0d3d31.png differ diff --git a/processed_images/coderefinery_openhouse.6a2b083d3437b72f.png b/processed_images/coderefinery_openhouse.6a2b083d3437b72f.png new file mode 100644 index 000000000..d96185a47 Binary files /dev/null and b/processed_images/coderefinery_openhouse.6a2b083d3437b72f.png differ diff --git a/processed_images/terminal.77eae35442d20777.png b/processed_images/terminal.77eae35442d20777.png new file mode 100644 index 000000000..479880911 Binary files /dev/null and b/processed_images/terminal.77eae35442d20777.png differ diff --git a/processed_images/wordcloud.d92bee814d2c09a7.png b/processed_images/wordcloud.d92bee814d2c09a7.png new file mode 100644 index 000000000..3c49b3f8c Binary files /dev/null and b/processed_images/wordcloud.d92bee814d2c09a7.png differ diff --git a/registration/index.html b/registration/index.html new file mode 100644 index 000000000..7b006f2ed --- /dev/null +++ b/registration/index.html @@ -0,0 +1,912 @@ + + + + Registration procedure - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Registration procedure + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Registration procedure

+ + + +

Confirmation email

+

After filling out the registration form you will receive an automatic +confirmation email but please note that your registration is only tentative +until we confirm it with another (human-written) email which should happen +typically within a week.

+

Waiting list

+

We maintain a waiting list for seats but this is currently not automatic so we +need this short time buffer to manually confirm participants and inform those who +are on the waiting list.

+

First come, first serve

+

The seats are assigned on a first come first serve basis but we need to also +make sure that registered participants are affiliated with a Nordic academic +institution since the course is free for participants and financed by the +Nordic e-Infrastructure Collaboration (unless this is an event outside of Nordics +funded by a different organization).

+

Cancellation

+

We ask confirmed participants who are not able to participate at the course +they have signed up for, to inform us as soon as possible so that people on the +waiting list can take the vacant seat.

+

Questions?

+

If you have any questions about your registration status, please write to +support@coderefinery.org.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/repository/index.html b/repository/index.html new file mode 100644 index 000000000..e0f34ab95 --- /dev/null +++ b/repository/index.html @@ -0,0 +1,989 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + +
+

Code repository hosting for Nordic research software

+
    +
  • Over 330 active users, 225 groups, with over 460 active projects.
  • +
  • The service is hosted at https://source.coderefinery.org.
  • +
  • The is currently run from and the data is stored on servers at the +Danish e-Infrastructure Cooperation (DeiC). DeiC is part of the Nordic +e-Infrastructure collaboration funding this project.
  • +
  • To inform us about issues, please contact support@coderefinery.org.
  • +
  • We announce service breaks through messages displayed once you log into the +platform but we try to announce them well in advance and to keep them very +short.
  • +
  • This service is for collaborating on code and scripts. It is not designed to be +a data sharing or data archive service. There are other services for data +sharing and archival. In doubt please ask support@coderefinery.org.
  • +
  • We are currently funded until 2025. We are actively working on +securing long-term funding for this service. The goal is to create a service +for many years to come. If we do not manage to secure long-term funding, we +will notify users well in advance and assist in migrating repository and data.
  • +
  • The entire file system is backed up every day. The schedule is 1/month full +backup, 3 out of 4 weeks differential backup, 1/day incremental backup. We +reserve the right to reduce the number of days backed up if space becomes an +issue.
  • +
+
+

Why use this service, rather than a service like GitHub or BitBucket?

+

The service we provide is a GitLab instance which targets persons and groups who:

+ +

GitHub, Bitbucket, +GitLab.com, and similar services are popular code +repository hosting services. If you already use them, please continue to do +so! They allow hosting public repositories and to some extent also private +repositories. They may offer higher visibility and discoverability than the +instance offered by our project.

+

Who can use this service?

+

Students, researchers, and staff affiliated with a Nordic academic institution. +If you are not sure whether you can use the system, please contact +support@coderefinery.org. +  +Your collaborators outside the Nordics can join your projects but cannot create new projects. +Ask them to register and then you can add them to your projects or groups as collaborators. +No need to ask us or inform us in order to add external collaborators.

+

You need to be first enabled before you can create projects and groups

+

Newly signed-in users need to first be enabled before they can create projects and groups. +This is to prevent abuse.

+

Please follow these steps:

+ +

How about federated access such as Feide or HAKA or eduGAIN or Kalmar2?

+

We support sign in with eduGAIN. Otherwise you need a specific user account +for this instance. We recommend creating an account with the email address your +identity federation gives you, as this will make it easier to enable other +federated access providers seamlessly. + 

+

Is there a data limit per project?

+

Currently no limit is enforced but we recommend less than 100 MB per project. +This should really be for code and not for persistent storage of data. If you +use more, we may contact you. If you need more, please contact us and motivate +why you need more and we will see what we can do about it. If you have a good +motivation, you will probably get a larger soft limit.

+

Can I serve GitLab pages?

+

Yes! GitLab pages now serve via *.pages.coderefinery.org. +Currently only HTTP. TLS is in the works.

+

Does the service include shared continuous integration runners?

+

No, shared runners are not part of the offering but you can connect +your own CI runners to your projects for automated tests and builds.

+

SSH key fingerprints

+

Public key fingerprints can be used to validate a connection to a remote server.

+

These are the public key fingerprints for source.coderefinery.org (in hexadecimal format):

+
MD5:b8:c9:43:24:33:96:ba:5d:88:84:73:81:38:ac:e6:0f (RSA)
+MD5:21:dc:4e:ef:4f:1c:44:f8:d8:5e:3a:30:15:32:e3:4c (ECDSA)
+MD5:57:3f:dd:7e:52:5a:83:ec:68:7e:c9:58:d3:f2:21:c4 (ED25519)
+
+

These are the SHA256 hashes:

+
SHA256:dQ6iP+E6PZ2Ureynaw1eGKqRLJ5RtL4C7qUJlNSvLW8 (RSA)
+SHA256:dtWo53mvtXVv3NxZf44kpRIfvJ8edcEqv7HFEltPpa4 (ECDSA)
+SHA256:6vV2a0zfcMuls1KkGlzbrJPQP5yC+z5v+2pKtGMNx8Y (ED25519)
+
+

How to check these without logging in:

+
$ ssh-keyscan source.coderefinery.org | ssh-keygen -E md5 -lf -
+$ ssh-keyscan source.coderefinery.org | ssh-keygen -lf -
+
+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/robots.txt b/robots.txt new file mode 100644 index 000000000..71c44faeb --- /dev/null +++ b/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Disallow: +Allow: / +Sitemap: https://coderefinery.org/sitemap.xml diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 000000000..32e2c477c --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,270 @@ + + + + https://coderefinery.org/ + + + https://coderefinery.org/about/ + + + https://coderefinery.org/about/code-of-conduct/ + + + https://coderefinery.org/about/contact/ + + + https://coderefinery.org/about/contributors/ + + + https://coderefinery.org/about/funding/ + + + https://coderefinery.org/about/history/ + + + https://coderefinery.org/about/impact/ + + + https://coderefinery.org/about/newsletter/ + + + https://coderefinery.org/about/partners/ + + + https://coderefinery.org/about/presentations/ + + + https://coderefinery.org/about/project/ + + + https://coderefinery.org/about/reports/ + + + https://coderefinery.org/about/statistics/ + + + https://coderefinery.org/blog/ + + + https://coderefinery.org/blog/2020/04/14/first-online-workshop/ + 2020-04-14 + + + https://coderefinery.org/blog/2020/04/24/nordic-rse-conference/ + 2020-04-24 + + + https://coderefinery.org/blog/2020/04/24/online-workshops-update/ + 2020-04-24 + + + https://coderefinery.org/blog/2020/04/24/rebase-vs-merge/ + 2020-04-24 + + + https://coderefinery.org/blog/2020/04/24/rsh/ + 2020-04-24 + + + https://coderefinery.org/blog/2020/04/27/nordichpc-tools/ + 2020-04-27 + + + https://coderefinery.org/blog/2020/07/31/mega-coderefinery/ + 2020-07-31 + + + https://coderefinery.org/blog/2020/09/29/git-pr/ + 2020-09-29 + + + https://coderefinery.org/blog/2020/11/13/carpentry-community-discussion-nordic/ + 2020-11-13 + + + https://coderefinery.org/blog/2021/09/01/bi-weekly-community-calls/ + 2021-09-01 + + + https://coderefinery.org/blog/2021/11/20/phase-2-lessons-learned/ + 2021-11-20 + + + https://coderefinery.org/blog/2021/11/21/towards-citable-lessons/ + 2021-11-21 + + + https://coderefinery.org/blog/2021/11/25/lessons-learned-may-2021/ + 2021-11-25 + + + https://coderefinery.org/blog/2022/05/04/improving-workshop-registration/ + 2022-05-04 + + + https://coderefinery.org/blog/2022/05/18/measuring-impact/ + 2022-05-18 + + + https://coderefinery.org/blog/2022/10/17/future-of-teaching/ + 2022-10-17 + + + https://coderefinery.org/blog/2022/10/21/python-for-scicomp/ + 2022-10-21 + + + https://coderefinery.org/blog/2022/10/24/parallel-chat/ + 2022-10-24 + + + https://coderefinery.org/blog/2022/10/31/co-teaching/ + 2022-10-31 + + + https://coderefinery.org/blog/2022/11/07/reverse-hybrid/ + 2022-11-07 + + + https://coderefinery.org/blog/2022/11/08/lessons-learned-Sep-2022/ + 2022-11-08 + + + https://coderefinery.org/blog/2022/11/08/mastodon/ + 2022-11-08 + + + https://coderefinery.org/blog/2022/11/14/livestreaming-courses/ + 2022-11-14 + + + https://coderefinery.org/blog/2022/11/21/video-publishing/ + 2022-11-08 + + + https://coderefinery.org/blog/2022/11/28/teams/ + 2022-11-28 + + + https://coderefinery.org/blog/2023/02/14/march-workshop/ + 2023-02-14 + + + https://coderefinery.org/blog/2023/04/12/lessons-learned-mar-2023/ + 2023-04-12 + + + https://coderefinery.org/blog/2023/06/25/planning-sep-workshop/ + 2023-06-25 + + + https://coderefinery.org/calendars/ + + + https://coderefinery.org/index/ + + + https://coderefinery.org/index/description/ + + + https://coderefinery.org/index/news/ + + + https://coderefinery.org/index/provides/ + + + https://coderefinery.org/join/ + + + https://coderefinery.org/join/chat/ + + + https://coderefinery.org/join/community-teaching-training/ + + + https://coderefinery.org/join/individuals/ + + + https://coderefinery.org/join/meetings/ + + + https://coderefinery.org/join/organizations/ + + + https://coderefinery.org/join/staff/ + + + https://coderefinery.org/lessons/ + + + https://coderefinery.org/lessons/core/ + + + https://coderefinery.org/lessons/from-coderefinery/ + + + https://coderefinery.org/lessons/other/ + + + https://coderefinery.org/lessons/reusing/ + + + https://coderefinery.org/open-house/ + + + https://coderefinery.org/open-house/blog-posts/ + 2020-04-24 + + + https://coderefinery.org/open-house/credit/ + 2020-10-02 + + + https://coderefinery.org/open-house/instructor-training-material/ + 2020-03-24 + + + https://coderefinery.org/open-house/newsletter/ + 2020-08-24 + + + https://coderefinery.org/open-house/online-teaching/ + 2020-03-20 + + + https://coderefinery.org/open-house/training-material/ + 2019-12-13 + + + https://coderefinery.org/open-house/website/ + 2020-02-11 + + + https://coderefinery.org/privacy-policy/ + + + https://coderefinery.org/registration/ + + + https://coderefinery.org/repository/ + + + https://coderefinery.org/tasks/ + + + https://coderefinery.org/workshops/ + + + https://coderefinery.org/workshops/past/ + + + https://coderefinery.org/workshops/request/ + + + https://coderefinery.org/workshops/teaching-style/ + + + https://coderefinery.org/workshops/upcoming/ + 2023-04-24 + + diff --git a/style.css b/style.css new file mode 100644 index 000000000..5d6be117f --- /dev/null +++ b/style.css @@ -0,0 +1 @@ +@import url("https://fonts.googleapis.com/css2?family=Roboto&display=swap");html{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:16px;font-weight:normal;line-height:1.5;-webkit-text-size-adjust:100%;background:#fff;color:#666}body{margin:0}a,.uk-link{color:#36d;text-decoration:none;cursor:pointer}a:hover,.uk-link:hover,.uk-link-toggle:hover .uk-link{color:#0f6ecd;text-decoration:underline}abbr[title]{text-decoration:underline dotted;-webkit-text-decoration-style:dotted}b,strong{font-weight:bolder}:not(pre)>code,:not(pre)>kbd,:not(pre)>samp{font-family:Consolas,monaco,monospace;font-size:.875rem;color:#c09;white-space:nowrap;padding:2px 6px;background:#f8f8f8}em{color:#f0506e}ins{background:#ffd;color:#666;text-decoration:none}mark{background:#ffd;color:#666}q{font-style:italic}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}audio,canvas,iframe,img,svg,video{vertical-align:middle}canvas,img,svg,video{max-width:100%;height:auto;box-sizing:border-box}img:not([src]){visibility:hidden;min-width:1px}iframe{border:0}p,ul,ol,dl,pre,address,fieldset,figure{margin:0 0 20px 0}*+p,*+ul,*+ol,*+dl,*+pre,*+address,*+fieldset,*+figure{margin-top:20px}h1,.uk-h1,h2,.uk-h2,.markdown h1,h3,.uk-h3,.markdown h2,h4,.uk-h4,.markdown h3,h5,.uk-h5,h6,.uk-h6,.uk-heading-small,.uk-heading-medium,.uk-heading-large,.uk-heading-xlarge,.uk-heading-2xlarge,.uk-heading-3xlarge{margin:0 0 20px 0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-weight:normal;color:#333;text-transform:none}*+h1,*+.uk-h1,*+h2,*+.uk-h2,.markdown *+h1,*+h3,*+.uk-h3,.markdown *+h2,*+h4,*+.uk-h4,.markdown *+h3,*+h5,*+.uk-h5,*+h6,*+.uk-h6,*+.uk-heading-small,*+.uk-heading-medium,*+.uk-heading-large,*+.uk-heading-xlarge,*+.uk-heading-2xlarge,*+.uk-heading-3xlarge{margin-top:40px}h1,.uk-h1{font-size:2.23125rem;line-height:1.2}h2,.uk-h2,.markdown h1{font-size:1.7rem;line-height:1.3}h3,.uk-h3,.markdown h2{font-size:1.5rem;line-height:1.4}h4,.uk-h4,.markdown h3{font-size:1.25rem;line-height:1.4}h5,.uk-h5{font-size:16px;line-height:1.4}h6,.uk-h6{font-size:.875rem;line-height:1.4}@media (min-width: 960px){h1,.uk-h1{font-size:2.625rem}h2,.uk-h2,.markdown h1{font-size:2rem}}ul,ol{padding-left:30px}ul>li>ul,ul>li>ol,ol>li>ol,ol>li>ul{margin:0}dt{font-weight:bold}dd{margin-left:0}hr,.uk-hr{overflow:visible;text-align:inherit;margin:0 0 20px 0;border:0;border-top:1px solid #e5e5e5}*+hr,*+.uk-hr{margin-top:20px}address{font-style:normal}blockquote{margin:0 0 20px 0;font-size:1.25rem;line-height:1.5;font-style:italic;color:#333}*+blockquote{margin-top:20px}blockquote p:last-of-type{margin-bottom:0}blockquote footer{margin-top:10px;font-size:.875rem;line-height:1.5;color:#666}blockquote footer::before{content:"— "}pre{font:.875rem / 1.5 Consolas,monaco,monospace;color:#666;-moz-tab-size:4;tab-size:4;overflow:auto;padding:10px;border:1px solid #e5e5e5;border-radius:3px;background:#fff}pre code{font-family:Consolas,monaco,monospace}:focus{outline:none}:focus-visible{outline:2px dotted #333}::selection{background:#39f;color:#fff;text-shadow:none}details,main{display:block}summary{display:list-item}template{display:none}:root{--uk-breakpoint-s: 640px;--uk-breakpoint-m: 960px;--uk-breakpoint-l: 1200px;--uk-breakpoint-xl: 1600px}a.uk-link-muted,.uk-link-muted a,.uk-link-toggle .uk-link-muted{color:#999}a.uk-link-muted:hover,.uk-link-muted a:hover,.uk-link-toggle:hover .uk-link-muted{color:#666}a.uk-link-text,.uk-link-text a,.uk-link-toggle .uk-link-text{color:inherit}a.uk-link-text:hover,.uk-link-text a:hover,.uk-link-toggle:hover .uk-link-text{color:#999}a.uk-link-heading,.uk-link-heading a,.uk-link-toggle .uk-link-heading{color:inherit}a.uk-link-heading:hover,.uk-link-heading a:hover,.uk-link-toggle:hover .uk-link-heading{color:#36c;text-decoration:none}a.uk-link-reset,.uk-link-reset a{color:inherit !important;text-decoration:none !important}.uk-link-toggle{color:inherit !important;text-decoration:none !important}.uk-heading-small{font-size:2.6rem;line-height:1.2}.uk-heading-medium{font-size:2.8875rem;line-height:1.1}.uk-heading-large{font-size:3.4rem;line-height:1.1}.uk-heading-xlarge{font-size:4rem;line-height:1}.uk-heading-2xlarge{font-size:6rem;line-height:1}.uk-heading-3xlarge{font-size:8rem;line-height:1}@media (min-width: 960px){.uk-heading-small{font-size:3.25rem}.uk-heading-medium{font-size:3.5rem}.uk-heading-large{font-size:4rem}.uk-heading-xlarge{font-size:6rem}.uk-heading-2xlarge{font-size:8rem}.uk-heading-3xlarge{font-size:11rem}}@media (min-width: 1200px){.uk-heading-medium{font-size:4rem}.uk-heading-large{font-size:6rem}.uk-heading-xlarge{font-size:8rem}.uk-heading-2xlarge{font-size:11rem}.uk-heading-3xlarge{font-size:15rem}}.uk-heading-divider{padding-bottom:calc(5px + 0.1em);border-bottom:calc(0.2px + 0.05em) solid #e5e5e5}.uk-heading-bullet{position:relative}.uk-heading-bullet::before{content:"";display:inline-block;position:relative;top:calc(-0.1 * 1em);vertical-align:middle;height:calc(4px + 0.7em);margin-right:calc(5px + 0.2em);border-left:calc(5px + 0.1em) solid #e5e5e5}.uk-heading-line{overflow:hidden}.uk-heading-line>*{display:inline-block;position:relative}.uk-heading-line>::before,.uk-heading-line>::after{content:"";position:absolute;top:calc(50% - (calc(0.2px + 0.05em) / 2));width:2000px;border-bottom:calc(0.2px + 0.05em) solid #e5e5e5}.uk-heading-line>::before{right:100%;margin-right:calc(5px + 0.3em)}.uk-heading-line>::after{left:100%;margin-left:calc(5px + 0.3em)}[class*=uk-divider]{border:none;margin-bottom:20px}*+[class*=uk-divider]{margin-top:20px}.uk-divider-icon{position:relative;height:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22%23e5e5e5%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");background-repeat:no-repeat;background-position:50% 50%}.uk-divider-icon::before,.uk-divider-icon::after{content:"";position:absolute;top:50%;max-width:calc(50% - (50px / 2));border-bottom:1px solid #e5e5e5}.uk-divider-icon::before{right:calc(50% + (50px / 2));width:100%}.uk-divider-icon::after{left:calc(50% + (50px / 2));width:100%}.uk-divider-small{line-height:0}.uk-divider-small::after{content:"";display:inline-block;width:100px;max-width:100%;border-top:1px solid #e5e5e5;vertical-align:top}.uk-divider-vertical{width:max-content;height:100px;margin-left:auto;margin-right:auto;border-left:1px solid #e5e5e5}.uk-list,.markdown ul{padding:0;list-style:none}.uk-list>*,.markdown ul>*{break-inside:avoid-column}.uk-list>*>:last-child,.markdown ul>*>:last-child{margin-bottom:0}.uk-list>:nth-child(n+2),.markdown ul>:nth-child(n+2),.uk-list>*>ul,.markdown ul>*>ul{margin-top:10px}.uk-list-disc>*,.uk-list-circle>*,.uk-list-square>*,.markdown ul>*,.uk-list-decimal>*,.uk-list-hyphen>*{padding-left:30px}.uk-list-decimal{counter-reset:decimal}.uk-list-decimal>*{counter-increment:decimal}.uk-list-disc>::before,.uk-list-circle>::before,.uk-list-square>::before,.markdown ul>::before,.uk-list-decimal>::before,.uk-list-hyphen>::before{content:"";position:relative;left:-30px;width:30px;height:1.5em;margin-bottom:-1.5em;display:list-item;list-style-position:inside;text-align:right}.uk-list-disc>::before{list-style-type:disc}.uk-list-circle>::before{list-style-type:circle}.uk-list-square>::before,.markdown ul>::before{list-style-type:square}.uk-list-decimal>::before{content:counter(decimal, decimal) " . "}.uk-list-hyphen>::before{content:"–  "}.uk-list-muted>::before{color:#999 !important}.uk-list-emphasis>::before{color:#333 !important}.uk-list-primary>::before{color:#36c !important}.uk-list-secondary>::before{color:#936 !important}.uk-list-bullet>*{padding-left:30px}.uk-list-bullet>::before{content:"";display:list-item;position:relative;left:-30px;width:30px;height:1.5em;margin-bottom:-1.5em;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23666%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%}.uk-list-divider>:nth-child(n+2){margin-top:10px;padding-top:10px;border-top:1px solid #e5e5e5}.uk-list-striped>*{padding:10px 10px}.uk-list-striped>*:nth-of-type(odd){border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5}.uk-list-striped>:nth-of-type(odd){background:#f8f8f8}.uk-list-striped>:nth-child(n+2){margin-top:0}.uk-list-large>:nth-child(n+2),.uk-list-large>*>ul{margin-top:20px}.uk-list-collapse>:nth-child(n+2),.uk-list-collapse>*>ul{margin-top:0}.uk-list-large.uk-list-divider>:nth-child(n+2){margin-top:20px;padding-top:20px}.uk-list-collapse.uk-list-divider>:nth-child(n+2){margin-top:0;padding-top:0}.uk-list-large.uk-list-striped>*{padding:20px 10px}.uk-list-collapse.uk-list-striped>*{padding-top:0;padding-bottom:0}.uk-list-large.uk-list-striped>:nth-child(n+2),.uk-list-collapse.uk-list-striped>:nth-child(n+2){margin-top:0}.uk-description-list>dt{color:#333;font-size:.875rem;font-weight:normal;text-transform:uppercase}.uk-description-list>dt:nth-child(n+2){margin-top:20px}.uk-description-list-divider>dt:nth-child(n+2){margin-top:20px;padding-top:20px;border-top:1px solid #e5e5e5}.uk-table{border-collapse:collapse;border-spacing:0;width:100%;margin-bottom:20px}*+.uk-table{margin-top:20px}.uk-table th{padding:16px 12px;text-align:left;vertical-align:bottom;font-size:.875rem;font-weight:normal;color:#666;text-transform:uppercase}.uk-table td{padding:16px 12px;vertical-align:top}.uk-table td>:last-child{margin-bottom:0}.uk-table tfoot{font-size:.875rem}.uk-table caption{font-size:.875rem;text-align:left;color:#999}.uk-table-middle,.uk-table-middle td{vertical-align:middle !important}.uk-table-divider>tr:not(:first-child),.uk-table-divider>:not(:first-child)>tr,.uk-table-divider>:first-child>tr:not(:first-child){border-top:1px solid #e5e5e5}.uk-table-striped>tr:nth-of-type(odd),.uk-table-striped tbody tr:nth-of-type(odd){background:#f8f8f8;border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5}.uk-table-hover>tr:hover,.uk-table-hover tbody tr:hover{background:#ffd}.uk-table>tr.uk-active,.uk-table tbody tr.uk-active{background:#ffd}.uk-table-small th,.uk-table-small td{padding:10px 12px}.uk-table-large th,.uk-table-large td{padding:22px 12px}.uk-table-justify th:first-child,.uk-table-justify td:first-child{padding-left:0}.uk-table-justify th:last-child,.uk-table-justify td:last-child{padding-right:0}.uk-table-shrink{width:1px}.uk-table-expand{min-width:150px}.uk-table-link{padding:0 !important}.uk-table-link>a{display:block;padding:16px 12px}.uk-table-small .uk-table-link>a{padding:10px 12px}@media (max-width: 959px){.uk-table-responsive,.uk-table-responsive tbody,.uk-table-responsive th,.uk-table-responsive td,.uk-table-responsive tr{display:block}.uk-table-responsive thead{display:none}.uk-table-responsive th,.uk-table-responsive td{width:auto !important;max-width:none !important;min-width:0 !important;overflow:visible !important;white-space:normal !important}.uk-table-responsive th:not(:first-child):not(.uk-table-link),.uk-table-responsive td:not(:first-child):not(.uk-table-link),.uk-table-responsive .uk-table-link:not(:first-child)>a{padding-top:5px !important}.uk-table-responsive th:not(:last-child):not(.uk-table-link),.uk-table-responsive td:not(:last-child):not(.uk-table-link),.uk-table-responsive .uk-table-link:not(:last-child)>a{padding-bottom:5px !important}.uk-table-justify.uk-table-responsive th,.uk-table-justify.uk-table-responsive td{padding-left:0;padding-right:0}}.uk-table tbody tr{transition:background-color .1s linear}.uk-table-striped>tr:nth-of-type(even):last-child,.uk-table-striped tbody tr:nth-of-type(even):last-child{border-bottom:1px solid #e5e5e5}.uk-icon{margin:0;border:none;border-radius:0;overflow:visible;font:inherit;color:inherit;text-transform:none;padding:0;background-color:rgba(0,0,0,0);display:inline-block;fill:currentcolor;line-height:0}button.uk-icon:not(:disabled){cursor:pointer}.uk-icon::-moz-focus-inner{border:0;padding:0}.uk-icon:not(.uk-preserve) [fill*="#"]:not(.uk-preserve){fill:currentcolor}.uk-icon:not(.uk-preserve) [stroke*="#"]:not(.uk-preserve){stroke:currentcolor}.uk-icon>*{transform:translate(0, 0)}.uk-icon-image{width:20px;height:20px;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;vertical-align:middle;object-fit:scale-down;max-width:none}.uk-icon-link{color:#999;text-decoration:none !important}.uk-icon-link:hover{color:#666}.uk-icon-link:active,.uk-active>.uk-icon-link{color:#595959}.uk-icon-button{box-sizing:border-box;width:36px;height:36px;border-radius:500px;background:#f8f8f8;color:#999;vertical-align:middle;display:inline-flex;justify-content:center;align-items:center;transition:.1s ease-in-out;transition-property:color,background-color}.uk-icon-button:hover{background-color:#ebebeb;color:#666}.uk-icon-button:active,.uk-active>.uk-icon-button{background-color:#dfdfdf;color:#666}.uk-range{-webkit-appearance:none;box-sizing:border-box;margin:0;vertical-align:middle;max-width:100%;width:100%;background:rgba(0,0,0,0)}.uk-range:focus{outline:none}.uk-range::-moz-focus-outer{border:none}.uk-range:not(:disabled)::-webkit-slider-thumb{cursor:pointer}.uk-range:not(:disabled)::-moz-range-thumb{cursor:pointer}.uk-range::-webkit-slider-runnable-track{height:3px;background:#ebebeb;border-radius:500px}.uk-range:focus::-webkit-slider-runnable-track,.uk-range:active::-webkit-slider-runnable-track{background:#dfdfdf}.uk-range::-moz-range-track{height:3px;background:#ebebeb;border-radius:500px}.uk-range:focus::-moz-range-track{background:#dfdfdf}.uk-range::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-7px;height:15px;width:15px;border-radius:500px;background:#fff;border:1px solid #ccc}.uk-range::-moz-range-thumb{border:none;height:15px;width:15px;margin-top:-7px;border-radius:500px;background:#fff;border:1px solid #ccc}.uk-input,.uk-select,.uk-textarea,.uk-radio,.uk-checkbox{box-sizing:border-box;margin:0;border-radius:0;font:inherit}.uk-input{overflow:visible}.uk-select{text-transform:none}.uk-select optgroup{font:inherit;font-weight:bold}.uk-textarea{overflow:auto}.uk-input[type=search]::-webkit-search-cancel-button,.uk-input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.uk-input[type=number]::-webkit-inner-spin-button,.uk-input[type=number]::-webkit-outer-spin-button{height:auto}.uk-input::-moz-placeholder,.uk-textarea::-moz-placeholder{opacity:1}.uk-radio:not(:disabled),.uk-checkbox:not(:disabled){cursor:pointer}.uk-fieldset{border:none;margin:0;padding:0;min-width:0}.uk-input,.uk-textarea{-webkit-appearance:none}.uk-input,.uk-select,.uk-textarea{max-width:100%;width:100%;border:0 none;padding:0 10px;background:#fff;color:#666;border:1px solid #e5e5e5;transition:.2s ease-in-out;transition-property:color,background-color,border}.uk-input,.uk-select:not([multiple]):not([size]){height:40px;vertical-align:middle;display:inline-block}.uk-input:not(input),.uk-select:not(select){line-height:38px}.uk-select[multiple],.uk-select[size],.uk-textarea{padding-top:6px;padding-bottom:6px;vertical-align:top}.uk-select[multiple],.uk-select[size]{resize:vertical}.uk-input:focus,.uk-select:focus,.uk-textarea:focus{outline:none;background-color:#fff;color:#666;border-color:#36c}.uk-input:disabled,.uk-select:disabled,.uk-textarea:disabled{background-color:#f8f8f8;color:#999;border-color:#e5e5e5}.uk-input::placeholder{color:#999}.uk-textarea::placeholder{color:#999}.uk-form-small{font-size:.875rem}.uk-form-small:not(textarea):not([multiple]):not([size]){height:30px;padding-left:8px;padding-right:8px}textarea.uk-form-small,[multiple].uk-form-small,[size].uk-form-small{padding:5px 8px}.uk-form-small:not(select):not(input):not(textarea){line-height:28px}.uk-form-large{font-size:1.25rem}.uk-form-large:not(textarea):not([multiple]):not([size]){height:55px;padding-left:12px;padding-right:12px}textarea.uk-form-large,[multiple].uk-form-large,[size].uk-form-large{padding:7px 12px}.uk-form-large:not(select):not(input):not(textarea){line-height:53px}.uk-form-danger,.uk-form-danger:focus{color:#f0506e;border-color:#f0506e}.uk-form-success,.uk-form-success:focus{color:#32d296;border-color:#32d296}.uk-form-blank{background:none;border-color:rgba(0,0,0,0)}.uk-form-blank:focus{border-color:#e5e5e5;border-style:solid}input.uk-form-width-xsmall{width:50px}select.uk-form-width-xsmall{width:75px}.uk-form-width-small{width:130px}.uk-form-width-medium{width:200px}.uk-form-width-large{width:500px}.uk-select:not([multiple]):not([size]){-webkit-appearance:none;-moz-appearance:none;padding-right:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");background-repeat:no-repeat;background-position:100% 50%}.uk-select:not([multiple]):not([size]) option{color:#666}.uk-select:not([multiple]):not([size]):disabled{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-input[list]{padding-right:20px;background-repeat:no-repeat;background-position:100% 50%}.uk-input[list]:hover,.uk-input[list]:focus{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2012%208%206%2016%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-input[list]::-webkit-calendar-picker-indicator{display:none !important}.uk-radio,.uk-checkbox{display:inline-block;height:16px;width:16px;overflow:hidden;margin-top:-4px;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;background-color:rgba(0,0,0,0);background-repeat:no-repeat;background-position:50% 50%;border:1px solid #ccc;transition:.2s ease-in-out;transition-property:background-color,border}.uk-radio{border-radius:50%}.uk-radio:focus,.uk-checkbox:focus{background-color:rgba(0,0,0,0);outline:none;border-color:#36c}.uk-radio:checked,.uk-checkbox:checked,.uk-checkbox:indeterminate{background-color:#36c;border-color:rgba(0,0,0,0)}.uk-radio:checked:focus,.uk-checkbox:checked:focus,.uk-checkbox:indeterminate:focus{background-color:#2952a3}.uk-radio:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23fff%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23fff%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-checkbox:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23fff%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-radio:disabled,.uk-checkbox:disabled{background-color:#f8f8f8;border-color:#e5e5e5}.uk-radio:disabled:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23999%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:disabled:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-checkbox:disabled:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23999%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-legend{width:100%;color:inherit;padding:0;font-size:1.5rem;line-height:1.4}.uk-form-custom{display:inline-block;position:relative;max-width:100%;vertical-align:middle}.uk-form-custom select,.uk-form-custom input[type=file]{position:absolute;top:0;z-index:1;width:100%;height:100%;left:0;-webkit-appearance:none;opacity:0;cursor:pointer}.uk-form-custom input[type=file]{font-size:500px;overflow:hidden}.uk-form-label{color:#333;font-size:.875rem}.uk-form-stacked .uk-form-label{display:block;margin-bottom:5px}@media (max-width: 959px){.uk-form-horizontal .uk-form-label{display:block;margin-bottom:5px}}@media (min-width: 960px){.uk-form-horizontal .uk-form-label{width:200px;margin-top:7px;float:left}.uk-form-horizontal .uk-form-controls{margin-left:215px}.uk-form-horizontal .uk-form-controls-text{padding-top:7px}}.uk-form-icon{position:absolute;top:0;bottom:0;left:0;width:40px;display:inline-flex;justify-content:center;align-items:center;color:#999}.uk-form-icon:hover{color:#666}.uk-form-icon:not(a):not(button):not(input){pointer-events:none}.uk-form-icon:not(.uk-form-icon-flip)~.uk-input{padding-left:40px !important}.uk-form-icon-flip{right:0;left:auto}.uk-form-icon-flip~.uk-input{padding-right:40px !important}.uk-button{margin:0;border:none;overflow:visible;font:inherit;color:inherit;text-transform:none;-webkit-appearance:none;border-radius:0;display:inline-block;box-sizing:border-box;padding:0 30px;vertical-align:middle;font-size:.875rem;line-height:38px;text-align:center;text-decoration:none;text-transform:uppercase;transition:.1s ease-in-out;transition-property:color,background-color,border-color}.uk-button:not(:disabled){cursor:pointer}.uk-button::-moz-focus-inner{border:0;padding:0}.uk-button:hover{text-decoration:none}.uk-button-default{background-color:rgba(0,0,0,0);color:#333;border:1px solid #e5e5e5}.uk-button-default:hover{background-color:rgba(0,0,0,0);color:#333;border-color:#b2b2b2}.uk-button-default:active,.uk-button-default.uk-active{background-color:rgba(0,0,0,0);color:#333;border-color:#999}.uk-button-primary{background-color:#36c;color:#fff;border:1px solid rgba(0,0,0,0)}.uk-button-primary:hover{background-color:#2e5cb8;color:#fff}.uk-button-primary:active,.uk-button-primary.uk-active{background-color:#2952a3;color:#fff}.uk-button-secondary{background-color:#936;color:#fff;border:1px solid rgba(0,0,0,0)}.uk-button-secondary:hover{background-color:#862d59;color:#fff}.uk-button-secondary:active,.uk-button-secondary.uk-active{background-color:#73264d;color:#fff}.uk-button-danger{background-color:#f0506e;color:#fff;border:1px solid rgba(0,0,0,0)}.uk-button-danger:hover{background-color:#ee395b;color:#fff}.uk-button-danger:active,.uk-button-danger.uk-active{background-color:#ec2147;color:#fff}.uk-button-default:disabled,.uk-button-primary:disabled,.uk-button-secondary:disabled,.uk-button-danger:disabled{background-color:rgba(0,0,0,0);color:#999;border-color:#e5e5e5}.uk-button-small{padding:0 15px;line-height:28px;font-size:.875rem}.uk-button-large{padding:0 40px;line-height:53px;font-size:.875rem}.uk-button-text{padding:0;line-height:1.5;background:none;color:#333;position:relative}.uk-button-text::before{content:"";position:absolute;bottom:0;left:0;right:100%;border-bottom:1px solid currentColor;transition:right .3s ease-out}.uk-button-text:hover{color:#333}.uk-button-text:hover::before{right:0}.uk-button-text:disabled{color:#999}.uk-button-text:disabled::before{display:none}.uk-button-link{padding:0;line-height:1.5;background:none;color:#333}.uk-button-link:hover{color:#999;text-decoration:none}.uk-button-link:disabled{color:#999;text-decoration:none}.uk-button-group{display:inline-flex;vertical-align:middle;position:relative}.uk-button-group>.uk-button:nth-child(n+2),.uk-button-group>div:nth-child(n+2) .uk-button{margin-left:-1px}.uk-button-group .uk-button:hover,.uk-button-group .uk-button:focus,.uk-button-group .uk-button:active,.uk-button-group .uk-button.uk-active{position:relative;z-index:1}.uk-progress{vertical-align:baseline;display:block;width:100%;border:0;background-color:#f8f8f8;margin-bottom:20px;height:15px;border-radius:500px;overflow:hidden}*+.uk-progress{margin-top:20px}.uk-progress::-webkit-progress-bar{background-color:rgba(0,0,0,0)}.uk-progress::-webkit-progress-value{background-color:#36c;transition:width .6s ease}.uk-progress::-moz-progress-bar{background-color:#36c;transition:width .6s ease}.uk-section{display:flow-root;box-sizing:border-box;padding-top:40px;padding-bottom:40px}@media (min-width: 960px){.uk-section{padding-top:70px;padding-bottom:70px}}.uk-section>:last-child{margin-bottom:0}.uk-section-xsmall{padding-top:20px;padding-bottom:20px}.uk-section-small{padding-top:40px;padding-bottom:40px}.uk-section-large{padding-top:70px;padding-bottom:70px}@media (min-width: 960px){.uk-section-large{padding-top:140px;padding-bottom:140px}}.uk-section-xlarge{padding-top:140px;padding-bottom:140px}@media (min-width: 960px){.uk-section-xlarge{padding-top:210px;padding-bottom:210px}}.uk-section-default{background:#fff;--uk-navbar-color: dark}.uk-section-muted{background:#f8f8f8;--uk-navbar-color: dark}.uk-section-primary{background:#36c;--uk-navbar-color: light}.uk-section-secondary{background:#936;--uk-navbar-color: light}.uk-container{display:flow-root;box-sizing:content-box;max-width:1200px;margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}@media (min-width: 640px){.uk-container{padding-left:30px;padding-right:30px}}@media (min-width: 960px){.uk-container{padding-left:40px;padding-right:40px}}.uk-container>:last-child{margin-bottom:0}.uk-container .uk-container{padding-left:0;padding-right:0}.uk-container-xsmall{max-width:750px}.uk-container-small{max-width:900px}.uk-container-large{max-width:1400px}.uk-container-xlarge{max-width:1600px}.uk-container-expand{max-width:none}.uk-container-expand-left{margin-left:0}.uk-container-expand-right{margin-right:0}@media (min-width: 640px){.uk-container-expand-left.uk-container-xsmall,.uk-container-expand-right.uk-container-xsmall{max-width:calc(50% + (750px / 2) - 30px)}.uk-container-expand-left.uk-container-small,.uk-container-expand-right.uk-container-small{max-width:calc(50% + (900px / 2) - 30px)}}@media (min-width: 960px){.uk-container-expand-left,.uk-container-expand-right{max-width:calc(50% + (1200px / 2) - 40px)}.uk-container-expand-left.uk-container-xsmall,.uk-container-expand-right.uk-container-xsmall{max-width:calc(50% + (750px / 2) - 40px)}.uk-container-expand-left.uk-container-small,.uk-container-expand-right.uk-container-small{max-width:calc(50% + (900px / 2) - 40px)}.uk-container-expand-left.uk-container-large,.uk-container-expand-right.uk-container-large{max-width:calc(50% + (1400px / 2) - 40px)}.uk-container-expand-left.uk-container-xlarge,.uk-container-expand-right.uk-container-xlarge{max-width:calc(50% + (1600px / 2) - 40px)}}.uk-container-item-padding-remove-left,.uk-container-item-padding-remove-right{width:calc(100% + 15px)}.uk-container-item-padding-remove-left{margin-left:-15px}.uk-container-item-padding-remove-right{margin-right:-15px}@media (min-width: 640px){.uk-container-item-padding-remove-left,.uk-container-item-padding-remove-right{width:calc(100% + 30px)}.uk-container-item-padding-remove-left{margin-left:-30px}.uk-container-item-padding-remove-right{margin-right:-30px}}@media (min-width: 960px){.uk-container-item-padding-remove-left,.uk-container-item-padding-remove-right{width:calc(100% + 40px)}.uk-container-item-padding-remove-left{margin-left:-40px}.uk-container-item-padding-remove-right{margin-right:-40px}}.uk-tile{display:flow-root;position:relative;box-sizing:border-box;padding-left:15px;padding-right:15px;padding-top:40px;padding-bottom:40px}@media (min-width: 640px){.uk-tile{padding-left:30px;padding-right:30px}}@media (min-width: 960px){.uk-tile{padding-left:40px;padding-right:40px;padding-top:70px;padding-bottom:70px}}.uk-tile>:last-child{margin-bottom:0}.uk-tile-xsmall{padding-top:20px;padding-bottom:20px}.uk-tile-small{padding-top:40px;padding-bottom:40px}.uk-tile-large{padding-top:70px;padding-bottom:70px}@media (min-width: 960px){.uk-tile-large{padding-top:140px;padding-bottom:140px}}.uk-tile-xlarge{padding-top:140px;padding-bottom:140px}@media (min-width: 960px){.uk-tile-xlarge{padding-top:210px;padding-bottom:210px}}.uk-tile-default{background-color:#fff}.uk-tile-muted{background-color:#f8f8f8}.uk-tile-primary{background-color:#36c}.uk-tile-secondary{background-color:#936}.uk-card{position:relative;box-sizing:border-box;transition:box-shadow .1s ease-in-out}.uk-card-body{display:flow-root;padding:30px 30px}.uk-card-header{display:flow-root;padding:15px 30px}.uk-card-footer{display:flow-root;padding:15px 30px}@media (min-width: 1200px){.uk-card-body{padding:40px 40px}.uk-card-header{padding:20px 40px}.uk-card-footer{padding:20px 40px}}.uk-card-body>:last-child,.uk-card-header>:last-child,.uk-card-footer>:last-child{margin-bottom:0}.uk-card-title{font-size:1.5rem;line-height:1.4}.uk-card-badge{position:absolute;top:15px;right:15px;z-index:1;height:22px;padding:0 10px;background:#36c;color:#fff;font-size:.875rem;display:flex;justify-content:center;align-items:center;line-height:0;border-radius:2px;text-transform:uppercase}.uk-card-badge:first-child+*{margin-top:0}.uk-card-hover:not(.uk-card-default):not(.uk-card-primary):not(.uk-card-secondary):hover{background-color:#fff;box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-card-default{background-color:#fff;color:#666;box-shadow:0 5px 15px rgba(0,0,0,.08)}.uk-card-default .uk-card-title{color:#333}.uk-card-default.uk-card-hover:hover{background-color:#fff;box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-card-default .uk-card-header{border-bottom:1px solid #e5e5e5}.uk-card-default .uk-card-footer{border-top:1px solid #e5e5e5}.uk-card-primary{background-color:#36c;color:#fff;box-shadow:0 5px 15px rgba(0,0,0,.08)}.uk-card-primary .uk-card-title{color:#fff}.uk-card-primary.uk-card-hover:hover{background-color:#36c;box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-card-secondary{background-color:#936;color:#fff;box-shadow:0 5px 15px rgba(0,0,0,.08)}.uk-card-secondary .uk-card-title{color:#fff}.uk-card-secondary.uk-card-hover:hover{background-color:#936;box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-card-small.uk-card-body,.uk-card-small .uk-card-body{padding:20px 20px}.uk-card-small .uk-card-header{padding:13px 20px}.uk-card-small .uk-card-footer{padding:13px 20px}@media (min-width: 1200px){.uk-card-large.uk-card-body,.uk-card-large .uk-card-body{padding:70px 70px}.uk-card-large .uk-card-header{padding:35px 70px}.uk-card-large .uk-card-footer{padding:35px 70px}}.uk-card-body>.uk-nav-default{margin-left:-30px;margin-right:-30px}.uk-card-body>.uk-nav-default:only-child{margin-top:-15px;margin-bottom:-15px}.uk-card-body>.uk-nav-default>li>a,.uk-card-body>.uk-nav-default .uk-nav-header,.uk-card-body>.uk-nav-default .uk-nav-divider{padding-left:30px;padding-right:30px}.uk-card-body>.uk-nav-default .uk-nav-sub{padding-left:45px}@media (min-width: 1200px){.uk-card-body>.uk-nav-default{margin-left:-40px;margin-right:-40px}.uk-card-body>.uk-nav-default:only-child{margin-top:-25px;margin-bottom:-25px}.uk-card-body>.uk-nav-default>li>a,.uk-card-body>.uk-nav-default .uk-nav-header,.uk-card-body>.uk-nav-default .uk-nav-divider{padding-left:40px;padding-right:40px}.uk-card-body>.uk-nav-default .uk-nav-sub{padding-left:55px}}.uk-card-small>.uk-nav-default{margin-left:-20px;margin-right:-20px}.uk-card-small>.uk-nav-default:only-child{margin-top:-5px;margin-bottom:-5px}.uk-card-small>.uk-nav-default>li>a,.uk-card-small>.uk-nav-default .uk-nav-header,.uk-card-small>.uk-nav-default .uk-nav-divider{padding-left:20px;padding-right:20px}.uk-card-small>.uk-nav-default .uk-nav-sub{padding-left:35px}@media (min-width: 1200px){.uk-card-large>.uk-nav-default{margin:0}.uk-card-large>.uk-nav-default:only-child{margin:0}.uk-card-large>.uk-nav-default>li>a,.uk-card-large>.uk-nav-default .uk-nav-header,.uk-card-large>.uk-nav-default .uk-nav-divider{padding-left:0;padding-right:0}.uk-card-large>.uk-nav-default .uk-nav-sub{padding-left:15px}}.uk-close{color:#999;transition:.1s ease-in-out;transition-property:color,opacity}.uk-close:hover{color:#666}.uk-spinner>*{animation:uk-spinner-rotate 1.4s linear infinite}@keyframes uk-spinner-rotate{0%{transform:rotate(0deg)}100%{transform:rotate(270deg)}}.uk-spinner>*>*{stroke-dasharray:88px;stroke-dashoffset:0;transform-origin:center;animation:uk-spinner-dash 1.4s ease-in-out infinite;stroke-width:1;stroke-linecap:round}@keyframes uk-spinner-dash{0%{stroke-dashoffset:88px}50%{stroke-dashoffset:22px;transform:rotate(135deg)}100%{stroke-dashoffset:88px;transform:rotate(450deg)}}.uk-totop{padding:5px;color:#999;transition:color .1s ease-in-out}.uk-totop:hover{color:#666}.uk-totop:active{color:#333}.uk-marker{padding:5px;background:#936;color:#fff;border-radius:500px}.uk-marker:hover{color:#fff}.uk-alert{position:relative;margin-bottom:20px;padding:15px 29px 15px 15px;background:#f8f8f8;color:#666}*+.uk-alert{margin-top:20px}.uk-alert>:last-child{margin-bottom:0}.uk-alert-close{position:absolute;top:20px;right:15px;color:inherit;opacity:.4}.uk-alert-close:first-child+*{margin-top:0}.uk-alert-close:hover{color:inherit;opacity:.8}.uk-alert-primary{background:#d6e0f5;color:#36c}.uk-alert-success{background:#edfbf6;color:#32d296}.uk-alert-warning{background:#fef5ee;color:#faa05a}.uk-alert-danger{background:#fef4f6;color:#f0506e}.uk-alert h1,.uk-alert h2,.uk-alert h3,.uk-alert h4,.uk-alert h5,.uk-alert h6{color:inherit}.uk-alert a:not([class]){color:inherit;text-decoration:underline}.uk-alert a:not([class]):hover{color:inherit;text-decoration:underline}.uk-placeholder{margin-bottom:20px;padding:30px 30px;background:rgba(0,0,0,0);border:1px dashed #e5e5e5}*+.uk-placeholder{margin-top:20px}.uk-placeholder>:last-child{margin-bottom:0}.uk-badge{box-sizing:border-box;min-width:18px;height:18px;padding:0 5px;border-radius:500px;vertical-align:middle;background:#36c;color:#fff !important;font-size:11px;display:inline-flex;justify-content:center;align-items:center;line-height:0}.uk-badge:hover{text-decoration:none}.uk-label{display:inline-block;padding:0 10px;background:#36c;line-height:1.5;font-size:.875rem;color:#fff;vertical-align:middle;white-space:nowrap;border-radius:2px;text-transform:uppercase}.uk-label-success{background-color:#32d296;color:#fff}.uk-label-warning{background-color:#faa05a;color:#fff}.uk-label-danger{background-color:#f0506e;color:#fff}.uk-overlay{padding:30px 30px}.uk-overlay>:last-child{margin-bottom:0}.uk-overlay-default{background:rgba(255,255,255,.8)}.uk-overlay-primary{background:rgba(153,51,102,.8)}.uk-article{display:flow-root}.uk-article>:last-child{margin-bottom:0}.uk-article+.uk-article{margin-top:70px}.uk-article-title{font-size:2.23125rem;line-height:1.2}@media (min-width: 960px){.uk-article-title{font-size:2.625rem}}.uk-article-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-article-meta a{color:#999}.uk-article-meta a:hover{color:#666;text-decoration:none}.uk-comment-body{display:flow-root;overflow-wrap:break-word;word-wrap:break-word}.uk-comment-header{display:flow-root;margin-bottom:20px}.uk-comment-body>:last-child,.uk-comment-header>:last-child{margin-bottom:0}.uk-comment-title{font-size:1.25rem;line-height:1.4}.uk-comment-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-comment-list{padding:0;list-style:none}.uk-comment-list>:nth-child(n+2){margin-top:70px}.uk-comment-list .uk-comment~ul{margin:70px 0 0 0;padding-left:30px;list-style:none}@media (min-width: 960px){.uk-comment-list .uk-comment~ul{padding-left:100px}}.uk-comment-list .uk-comment~ul>:nth-child(n+2){margin-top:70px}.uk-comment-primary{padding:30px;background-color:#f8f8f8}.uk-search{display:inline-block;position:relative;max-width:100%;margin:0}.uk-search-input::-webkit-search-cancel-button,.uk-search-input::-webkit-search-decoration{-webkit-appearance:none}.uk-search-input::-moz-placeholder{opacity:1}.uk-search-input{box-sizing:border-box;margin:0;border-radius:0;font:inherit;overflow:visible;-webkit-appearance:none;vertical-align:middle;width:100%;border:none;color:#666}.uk-search-input:focus{outline:none}.uk-search-input::placeholder{color:#999}.uk-search .uk-search-icon{position:absolute;top:0;bottom:0;left:0;display:inline-flex;justify-content:center;align-items:center;color:#999}.uk-search .uk-search-icon:hover{color:#999}.uk-search .uk-search-icon:not(a):not(button):not(input){pointer-events:none}.uk-search .uk-search-icon-flip{right:0;left:auto}.uk-search-default{width:240px}.uk-search-default .uk-search-input{height:40px;padding-left:10px;padding-right:10px;background:rgba(0,0,0,0);border:1px solid #e5e5e5}.uk-search-default .uk-search-input:focus{background-color:rgba(0,0,0,0);border-color:#36c}.uk-search-default .uk-search-icon{width:40px}.uk-search-default .uk-search-icon:not(.uk-search-icon-flip)~.uk-search-input{padding-left:40px}.uk-search-default .uk-search-icon-flip~.uk-search-input{padding-right:40px}.uk-search-navbar{width:400px}.uk-search-navbar .uk-search-input{height:40px;background:rgba(0,0,0,0);font-size:1.5rem}.uk-search-navbar .uk-search-icon{width:40px}.uk-search-navbar .uk-search-icon:not(.uk-search-icon-flip)~.uk-search-input{padding-left:40px}.uk-search-navbar .uk-search-icon-flip~.uk-search-input{padding-right:40px}.uk-search-large{width:500px}.uk-search-large .uk-search-input{height:80px;background:rgba(0,0,0,0);font-size:2.625rem}.uk-search-large .uk-search-icon{width:80px}.uk-search-large .uk-search-icon:not(.uk-search-icon-flip)~.uk-search-input{padding-left:80px}.uk-search-large .uk-search-icon-flip~.uk-search-input{padding-right:80px}.uk-search-toggle{color:#999}.uk-search-toggle:hover{color:#666}.uk-accordion{padding:0;list-style:none}.uk-accordion>:nth-child(n+2){margin-top:20px}.uk-accordion-title{display:block;font-size:1.25rem;line-height:1.4;color:#333;overflow:hidden}.uk-accordion-title::before{content:"";width:1.4em;height:1.4em;margin-left:10px;float:right;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%}.uk-open>.uk-accordion-title::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-accordion-title:hover{color:#666;text-decoration:none}.uk-accordion-content{display:flow-root;margin-top:20px}.uk-accordion-content>:last-child{margin-bottom:0}.uk-drop{display:none;position:absolute;z-index:1020;--uk-position-offset: 20px;--uk-position-viewport-offset: 15px;box-sizing:border-box;width:300px}.uk-drop.uk-open{display:block}.uk-drop-stack .uk-drop-grid>*{width:100% !important}.uk-drop-parent-icon{margin-left:.25em;transition:transform .3s ease-out}[aria-expanded=true]>.uk-drop-parent-icon{transform:rotateX(180deg)}.uk-dropbar{--uk-position-offset: 0;--uk-position-shift-offset: 0;--uk-position-viewport-offset: 0;width:auto;padding:25px 15px 25px 15px;background:#fff;color:#666}.uk-dropbar>:last-child{margin-bottom:0}@media (min-width: 640px){.uk-dropbar{padding-left:30px;padding-right:30px}}@media (min-width: 960px){.uk-dropbar{padding-left:40px;padding-right:40px}}.uk-dropbar :focus-visible{outline-color:#333 !important}.uk-dropbar-large{padding-top:40px;padding-bottom:40px}.uk-dropbar-top{box-shadow:0 12px 7px -6px rgba(0,0,0,.05)}.uk-dropbar-bottom{box-shadow:0 -12px 7px -6px rgba(0,0,0,.05)}.uk-dropbar-left{box-shadow:12px 0 7px -6px rgba(0,0,0,.05)}.uk-dropbar-right{box-shadow:-12px 0 7px -6px rgba(0,0,0,.05)}.uk-dropnav-dropbar{position:absolute;z-index:980;padding:0;left:0;right:0}.uk-modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;overflow-y:auto;padding:15px 15px;background:rgba(0,0,0,.6);opacity:0;transition:opacity .15s linear}@media (min-width: 640px){.uk-modal{padding:50px 30px}}@media (min-width: 960px){.uk-modal{padding-left:40px;padding-right:40px}}.uk-modal.uk-open{opacity:1}.uk-modal-page{overflow:hidden}.uk-modal-dialog{position:relative;box-sizing:border-box;margin:0 auto;width:600px;max-width:100% !important;background:#fff;opacity:0;transform:translateY(-100px);transition:.3s linear;transition-property:opacity,transform}.uk-open>.uk-modal-dialog{opacity:1;transform:translateY(0)}.uk-modal-container .uk-modal-dialog{width:1200px}.uk-modal-full{padding:0;background:none}.uk-modal-full .uk-modal-dialog{margin:0;width:100%;max-width:100%;transform:translateY(0)}.uk-modal-body{display:flow-root;padding:20px 20px}.uk-modal-header{display:flow-root;padding:10px 20px;background:#fff;border-bottom:1px solid #e5e5e5}.uk-modal-footer{display:flow-root;padding:10px 20px;background:#fff;border-top:1px solid #e5e5e5}@media (min-width: 640px){.uk-modal-body{padding:30px 30px}.uk-modal-header{padding:15px 30px}.uk-modal-footer{padding:15px 30px}}.uk-modal-body>:last-child,.uk-modal-header>:last-child,.uk-modal-footer>:last-child{margin-bottom:0}.uk-modal-title{font-size:2rem;line-height:1.3}[class*=uk-modal-close-]{position:absolute;z-index:1010;top:10px;right:10px;padding:5px}[class*=uk-modal-close-]:first-child+*{margin-top:0}.uk-modal-close-outside{top:0;right:-5px;transform:translate(0, -100%);color:#fff}.uk-modal-close-outside:hover{color:#fff}@media (min-width: 960px){.uk-modal-close-outside{right:0;transform:translate(100%, -100%)}}.uk-modal-close-full{top:0;right:0;padding:10px;background:#fff}@media (min-width: 960px){.uk-modal-close-full{padding:20px}}.uk-slideshow{-webkit-tap-highlight-color:rgba(0,0,0,0)}.uk-slideshow-items{position:relative;z-index:0;margin:0;padding:0;list-style:none;overflow:hidden;-webkit-touch-callout:none;touch-action:pan-y}.uk-slideshow-items>*{position:absolute;top:0;left:0;right:0;bottom:0;overflow:hidden;will-change:transform,opacity}.uk-slideshow-items>:not(.uk-active){display:none}.uk-slider{-webkit-tap-highlight-color:rgba(0,0,0,0)}.uk-slider-container{overflow:hidden;overflow:clip}.uk-slider-container-offset{margin:-11px -25px -39px -25px;padding:11px 25px 39px 25px}.uk-slider-items{will-change:transform;position:relative;touch-action:pan-y}.uk-slider-items:not(.uk-grid){display:flex;margin:0;padding:0;list-style:none;-webkit-touch-callout:none}.uk-slider-items.uk-grid{flex-wrap:nowrap}.uk-slider-items>*{flex:none;box-sizing:border-box;max-width:100%;position:relative}.uk-sticky{position:relative;z-index:980;box-sizing:border-box}.uk-sticky-fixed{margin:0 !important;-webkit-backface-visibility:hidden;backface-visibility:hidden}.uk-sticky[class*=uk-animation-]{animation-duration:.2s}.uk-sticky.uk-animation-reverse{animation-duration:.2s}.uk-sticky-placeholder{pointer-events:none}.uk-offcanvas{display:none;position:fixed;top:0;bottom:0;left:0;z-index:1000}.uk-offcanvas-flip .uk-offcanvas{right:0;left:auto}.uk-offcanvas-bar{position:absolute;top:0;bottom:0;left:-270px;box-sizing:border-box;width:270px;padding:20px 20px;background:#936;overflow-y:auto}@media (min-width: 640px){.uk-offcanvas-bar{left:-350px;width:350px;padding:30px 30px}}.uk-offcanvas-flip .uk-offcanvas-bar{left:auto;right:-270px}@media (min-width: 640px){.uk-offcanvas-flip .uk-offcanvas-bar{right:-350px}}.uk-open>.uk-offcanvas-bar{left:0}.uk-offcanvas-flip .uk-open>.uk-offcanvas-bar{left:auto;right:0}.uk-offcanvas-bar-animation{transition:left .3s ease-out}.uk-offcanvas-flip .uk-offcanvas-bar-animation{transition-property:right}.uk-offcanvas-reveal{position:absolute;top:0;bottom:0;left:0;width:0;overflow:hidden;transition:width .3s ease-out}.uk-offcanvas-reveal .uk-offcanvas-bar{left:0}.uk-offcanvas-flip .uk-offcanvas-reveal .uk-offcanvas-bar{left:auto;right:0}.uk-open>.uk-offcanvas-reveal{width:270px}@media (min-width: 640px){.uk-open>.uk-offcanvas-reveal{width:350px}}.uk-offcanvas-flip .uk-offcanvas-reveal{right:0;left:auto}.uk-offcanvas-close{position:absolute;z-index:1000;top:5px;right:5px;padding:5px}@media (min-width: 640px){.uk-offcanvas-close{top:10px;right:10px}}.uk-offcanvas-close:first-child+*{margin-top:0}.uk-offcanvas-overlay{width:100vw;touch-action:none}.uk-offcanvas-overlay::before{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(0,0,0,.1);opacity:0;transition:opacity .15s linear}.uk-offcanvas-overlay.uk-open::before{opacity:1}.uk-offcanvas-page,.uk-offcanvas-container{overflow-x:hidden;overflow-x:clip}.uk-offcanvas-container{position:relative;left:0;transition:left .3s ease-out;box-sizing:border-box;width:100%}:not(.uk-offcanvas-flip).uk-offcanvas-container-animation{left:270px}.uk-offcanvas-flip.uk-offcanvas-container-animation{left:-270px}@media (min-width: 640px){:not(.uk-offcanvas-flip).uk-offcanvas-container-animation{left:350px}.uk-offcanvas-flip.uk-offcanvas-container-animation{left:-350px}}.uk-switcher{margin:0;padding:0;list-style:none}.uk-switcher>:not(.uk-active){display:none}.uk-switcher>*>:last-child{margin-bottom:0}.uk-leader{overflow:hidden}.uk-leader-fill::after{display:inline-block;margin-left:15px;width:0;content:attr(data-fill);white-space:nowrap}.uk-leader-fill.uk-leader-hide::after{display:none}:root{--uk-leader-fill-content: .}.uk-notification{position:fixed;top:10px;left:10px;z-index:1040;box-sizing:border-box;width:350px}.uk-notification-top-right,.uk-notification-bottom-right{left:auto;right:10px}.uk-notification-top-center,.uk-notification-bottom-center{left:50%;margin-left:-175px}.uk-notification-bottom-left,.uk-notification-bottom-right,.uk-notification-bottom-center{top:auto;bottom:10px}@media (max-width: 639px){.uk-notification{left:10px;right:10px;width:auto;margin:0}}.uk-notification-message{position:relative;padding:15px;background:#f8f8f8;color:#666;font-size:1.25rem;line-height:1.4;cursor:pointer}*+.uk-notification-message{margin-top:10px}.uk-notification-close{display:none;position:absolute;top:20px;right:15px}.uk-notification-message:hover .uk-notification-close{display:block}.uk-notification-message-primary{color:#36c}.uk-notification-message-success{color:#32d296}.uk-notification-message-warning{color:#faa05a}.uk-notification-message-danger{color:#f0506e}.uk-tooltip{display:none;position:absolute;z-index:1030;--uk-position-offset: 10px;--uk-position-viewport-offset: 10;top:0;box-sizing:border-box;max-width:200px;padding:3px 6px;background:#666;border-radius:2px;color:#fff;font-size:12px}.uk-tooltip.uk-active{display:block}.uk-sortable{position:relative}.uk-sortable>:last-child{margin-bottom:0}.uk-sortable-drag{position:fixed !important;z-index:1050 !important;pointer-events:none}.uk-sortable-placeholder{opacity:0;pointer-events:none}.uk-sortable-empty{min-height:50px}.uk-sortable-handle:hover{cursor:move}.uk-countdown-number{font-variant-numeric:tabular-nums;font-size:2rem;line-height:.8}@media (min-width: 640px){.uk-countdown-number{font-size:4rem}}@media (min-width: 960px){.uk-countdown-number{font-size:6rem}}.uk-countdown-separator{font-size:1rem;line-height:1.6}@media (min-width: 640px){.uk-countdown-separator{font-size:2rem}}@media (min-width: 960px){.uk-countdown-separator{font-size:3rem}}.uk-grid{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none}.uk-grid>*{margin:0}.uk-grid>*>:last-child{margin-bottom:0}.uk-grid{margin-left:-30px}.uk-grid>*{padding-left:30px}.uk-grid+.uk-grid,.uk-grid>.uk-grid-margin,*+.uk-grid-margin{margin-top:30px}@media (min-width: 1200px){.uk-grid{margin-left:-40px}.uk-grid>*{padding-left:40px}.uk-grid+.uk-grid,.uk-grid>.uk-grid-margin,*+.uk-grid-margin{margin-top:40px}}.uk-grid-small,.uk-grid-column-small{margin-left:-15px}.uk-grid-small>*,.uk-grid-column-small>*{padding-left:15px}.uk-grid+.uk-grid-small,.uk-grid+.uk-grid-row-small,.uk-grid-small>.uk-grid-margin,.uk-grid-row-small>.uk-grid-margin,*+.uk-grid-margin-small{margin-top:15px}.uk-grid-medium,.uk-grid-column-medium{margin-left:-30px}.uk-grid-medium>*,.uk-grid-column-medium>*{padding-left:30px}.uk-grid+.uk-grid-medium,.uk-grid+.uk-grid-row-medium,.uk-grid-medium>.uk-grid-margin,.uk-grid-row-medium>.uk-grid-margin,*+.uk-grid-margin-medium{margin-top:30px}.uk-grid-large,.uk-grid-column-large{margin-left:-40px}.uk-grid-large>*,.uk-grid-column-large>*{padding-left:40px}.uk-grid+.uk-grid-large,.uk-grid+.uk-grid-row-large,.uk-grid-large>.uk-grid-margin,.uk-grid-row-large>.uk-grid-margin,*+.uk-grid-margin-large{margin-top:40px}@media (min-width: 1200px){.uk-grid-large,.uk-grid-column-large{margin-left:-70px}.uk-grid-large>*,.uk-grid-column-large>*{padding-left:70px}.uk-grid+.uk-grid-large,.uk-grid+.uk-grid-row-large,.uk-grid-large>.uk-grid-margin,.uk-grid-row-large>.uk-grid-margin,*+.uk-grid-margin-large{margin-top:70px}}.uk-grid-collapse,.uk-grid-column-collapse{margin-left:0}.uk-grid-collapse>*,.uk-grid-column-collapse>*{padding-left:0}.uk-grid+.uk-grid-collapse,.uk-grid+.uk-grid-row-collapse,.uk-grid-collapse>.uk-grid-margin,.uk-grid-row-collapse>.uk-grid-margin{margin-top:0}.uk-grid-divider>*{position:relative}.uk-grid-divider>:not(.uk-first-column)::before{content:"";position:absolute;top:0;bottom:0;border-left:1px solid #e5e5e5}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{content:"";position:absolute;left:0;right:0;border-top:1px solid #e5e5e5}.uk-grid-divider{margin-left:-60px}.uk-grid-divider>*{padding-left:60px}.uk-grid-divider>:not(.uk-first-column)::before{left:30px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin{margin-top:60px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{top:-30px;left:60px}@media (min-width: 1200px){.uk-grid-divider{margin-left:-80px}.uk-grid-divider>*{padding-left:80px}.uk-grid-divider>:not(.uk-first-column)::before{left:40px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin{margin-top:80px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{top:-40px;left:80px}}.uk-grid-divider.uk-grid-small,.uk-grid-divider.uk-grid-column-small{margin-left:-30px}.uk-grid-divider.uk-grid-small>*,.uk-grid-divider.uk-grid-column-small>*{padding-left:30px}.uk-grid-divider.uk-grid-small>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-column-small>:not(.uk-first-column)::before{left:15px}.uk-grid-divider.uk-grid-small.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-small.uk-grid-stack>.uk-grid-margin{margin-top:30px}.uk-grid-divider.uk-grid-small.uk-grid-stack>.uk-grid-margin::before{top:-15px;left:30px}.uk-grid-divider.uk-grid-row-small.uk-grid-stack>.uk-grid-margin::before{top:-15px}.uk-grid-divider.uk-grid-column-small.uk-grid-stack>.uk-grid-margin::before{left:30px}.uk-grid-divider.uk-grid-medium,.uk-grid-divider.uk-grid-column-medium{margin-left:-60px}.uk-grid-divider.uk-grid-medium>*,.uk-grid-divider.uk-grid-column-medium>*{padding-left:60px}.uk-grid-divider.uk-grid-medium>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-column-medium>:not(.uk-first-column)::before{left:30px}.uk-grid-divider.uk-grid-medium.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-medium.uk-grid-stack>.uk-grid-margin{margin-top:60px}.uk-grid-divider.uk-grid-medium.uk-grid-stack>.uk-grid-margin::before{top:-30px;left:60px}.uk-grid-divider.uk-grid-row-medium.uk-grid-stack>.uk-grid-margin::before{top:-30px}.uk-grid-divider.uk-grid-column-medium.uk-grid-stack>.uk-grid-margin::before{left:60px}.uk-grid-divider.uk-grid-large,.uk-grid-divider.uk-grid-column-large{margin-left:-80px}.uk-grid-divider.uk-grid-large>*,.uk-grid-divider.uk-grid-column-large>*{padding-left:80px}.uk-grid-divider.uk-grid-large>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-column-large>:not(.uk-first-column)::before{left:40px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin{margin-top:80px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin::before{top:-40px;left:80px}.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin::before{top:-40px}.uk-grid-divider.uk-grid-column-large.uk-grid-stack>.uk-grid-margin::before{left:80px}@media (min-width: 1200px){.uk-grid-divider.uk-grid-large,.uk-grid-divider.uk-grid-column-large{margin-left:-140px}.uk-grid-divider.uk-grid-large>*,.uk-grid-divider.uk-grid-column-large>*{padding-left:140px}.uk-grid-divider.uk-grid-large>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-column-large>:not(.uk-first-column)::before{left:70px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin{margin-top:140px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin::before{top:-70px;left:140px}.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin::before{top:-70px}.uk-grid-divider.uk-grid-column-large.uk-grid-stack>.uk-grid-margin::before{left:140px}}.uk-grid-match>*,.uk-grid-item-match{display:flex;flex-wrap:wrap}.uk-grid-match>*>:not([class*=uk-width]),.uk-grid-item-match>:not([class*=uk-width]){box-sizing:border-box;width:100%;flex:auto}.uk-nav,.uk-nav ul{margin:0;padding:0;list-style:none}.uk-nav li>a{display:flex;align-items:center;column-gap:.25em;text-decoration:none}.uk-nav>li>a{padding:5px 0}ul.uk-nav-sub{padding:5px 0 5px 15px}.uk-nav-sub ul{padding-left:15px}.uk-nav-sub a{padding:2px 0}.uk-nav-parent-icon{margin-left:auto;transition:transform .3s ease-out}.uk-nav>li.uk-open>a .uk-nav-parent-icon{transform:rotateX(180deg)}.uk-nav-header{padding:5px 0;text-transform:uppercase;font-size:.875rem}.uk-nav-header:not(:first-child){margin-top:20px}.uk-nav .uk-nav-divider{margin:5px 0}.uk-nav-default{font-size:.875rem;line-height:1.5}.uk-nav-default>li>a{color:#999}.uk-nav-default>li>a:hover{color:#666}.uk-nav-default>li.uk-active>a{color:#333}.uk-nav-default .uk-nav-subtitle{font-size:12px}.uk-nav-default .uk-nav-header{color:#333}.uk-nav-default .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-default .uk-nav-sub{font-size:.875rem;line-height:1.5}.uk-nav-default .uk-nav-sub a{color:#999}.uk-nav-default .uk-nav-sub a:hover{color:#666}.uk-nav-default .uk-nav-sub li.uk-active>a{color:#333}.uk-nav-primary{font-size:1.5rem;line-height:1.5}.uk-nav-primary>li>a{color:#999}.uk-nav-primary>li>a:hover{color:#666}.uk-nav-primary>li.uk-active>a{color:#333}.uk-nav-primary .uk-nav-subtitle{font-size:1.25rem}.uk-nav-primary .uk-nav-header{color:#333}.uk-nav-primary .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-primary .uk-nav-sub{font-size:1.25rem;line-height:1.5}.uk-nav-primary .uk-nav-sub a{color:#999}.uk-nav-primary .uk-nav-sub a:hover{color:#666}.uk-nav-primary .uk-nav-sub li.uk-active>a{color:#333}.uk-nav-secondary{font-size:16px;line-height:1.5}.uk-nav-secondary>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider){margin-top:0}.uk-nav-secondary>li>a{color:#333;padding:10px 10px}.uk-nav-secondary>li>a:hover{color:#333;background-color:#f8f8f8}.uk-nav-secondary>li.uk-active>a{color:#333;background-color:#f8f8f8}.uk-nav-secondary .uk-nav-subtitle{font-size:.875rem;color:#999}.uk-nav-secondary>li>a:hover .uk-nav-subtitle{color:#666}.uk-nav-secondary>li.uk-active>a .uk-nav-subtitle{color:#333}.uk-nav-secondary .uk-nav-header{color:#333}.uk-nav-secondary .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-secondary .uk-nav-sub{font-size:.875rem;line-height:1.5}.uk-nav-secondary .uk-nav-sub a{color:#999}.uk-nav-secondary .uk-nav-sub a:hover{color:#666}.uk-nav-secondary .uk-nav-sub li.uk-active>a{color:#333}.uk-nav-center{text-align:center}.uk-nav-center li>a{justify-content:center}.uk-nav-center .uk-nav-sub,.uk-nav-center .uk-nav-sub ul{padding-left:0}.uk-nav-center .uk-nav-parent-icon{margin-left:.25em}.uk-nav.uk-nav-divider>:not(.uk-nav-header,.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider){margin-top:5px;padding-top:5px;border-top:1px solid #e5e5e5}.uk-navbar{display:flex;position:relative;--uk-navbar-dropbar-behind-color: dark}.uk-navbar-container:not(.uk-navbar-transparent){background:#f8f8f8}.uk-navbar-left,.uk-navbar-right,[class*=uk-navbar-center]{display:flex;gap:15px;align-items:center}.uk-navbar-right{margin-left:auto}.uk-navbar-center:only-child{margin-left:auto;margin-right:auto;position:relative}.uk-navbar-center:not(:only-child){position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:max-content;box-sizing:border-box;z-index:990}.uk-navbar-center-left,.uk-navbar-center-right{position:absolute;top:0}.uk-navbar-center-left{right:calc(100% + 15px)}.uk-navbar-center-right{left:calc(100% + 15px)}[class*=uk-navbar-center-]{width:max-content;box-sizing:border-box}.uk-navbar-nav{display:flex;gap:15px;margin:0;padding:0;list-style:none}.uk-navbar-left,.uk-navbar-right,.uk-navbar-center:only-child{flex-wrap:wrap}.uk-navbar-nav>li>a,.uk-navbar-item,.uk-navbar-toggle{display:flex;justify-content:center;align-items:center;column-gap:.25em;box-sizing:border-box;min-height:80px;font-size:.875rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";text-decoration:none}.uk-navbar-nav>li>a{padding:0 0;color:#36d;text-transform:uppercase;transition:.1s ease-in-out;transition-property:color,background-color}.uk-navbar-nav>li:hover>a,.uk-navbar-nav>li>a[aria-expanded=true]{color:#c09}.uk-navbar-nav>li>a:active{color:#333}.uk-navbar-nav>li.uk-active>a{color:#333}.uk-navbar-parent-icon{margin-left:4px;transition:transform .3s ease-out}.uk-navbar-nav>li>a[aria-expanded=true] .uk-navbar-parent-icon{transform:rotateX(180deg)}.uk-navbar-item{padding:0 0;color:#666}.uk-navbar-item>:last-child{margin-bottom:0}.uk-navbar-toggle{padding:0 0;color:#999}.uk-navbar-toggle:hover,.uk-navbar-toggle[aria-expanded=true]{color:#666;text-decoration:none}.uk-navbar-subtitle{font-size:.875rem}.uk-navbar-justify .uk-navbar-left,.uk-navbar-justify .uk-navbar-right,.uk-navbar-justify .uk-navbar-nav,.uk-navbar-justify .uk-navbar-nav>li,.uk-navbar-justify .uk-navbar-item,.uk-navbar-justify .uk-navbar-toggle{flex-grow:1}.uk-navbar-dropdown{--uk-position-offset: 15px;--uk-position-shift-offset: 0;--uk-position-viewport-offset: 15px;width:200px;padding:25px;background:#fff;color:#666;box-shadow:0 5px 12px rgba(0,0,0,.15)}.uk-navbar-dropdown>:last-child{margin-bottom:0}.uk-navbar-dropdown :focus-visible{outline-color:#333 !important}.uk-navbar-dropdown .uk-drop-grid{margin-left:-30px}.uk-navbar-dropdown .uk-drop-grid>*{padding-left:30px}.uk-navbar-dropdown .uk-drop-grid>.uk-grid-margin{margin-top:30px}.uk-navbar-dropdown-width-2:not(.uk-drop-stack){width:400px}.uk-navbar-dropdown-width-3:not(.uk-drop-stack){width:600px}.uk-navbar-dropdown-width-4:not(.uk-drop-stack){width:800px}.uk-navbar-dropdown-width-5:not(.uk-drop-stack){width:1000px}.uk-navbar-dropdown-large{--uk-position-shift-offset: 0;padding:40px}.uk-navbar-dropdown-dropbar{width:auto;background:rgba(0,0,0,0);padding:25px 0 25px 0;--uk-position-offset: 0;--uk-position-shift-offset: 0;--uk-position-viewport-offset: 15px;box-shadow:none}@media (min-width: 640px){.uk-navbar-dropdown-dropbar{--uk-position-viewport-offset: 30px}}@media (min-width: 960px){.uk-navbar-dropdown-dropbar{--uk-position-viewport-offset: 40px}}.uk-navbar-dropdown-dropbar-large{--uk-position-shift-offset: 0;padding-top:40px;padding-bottom:40px}.uk-navbar-dropdown-nav{font-size:.875rem}.uk-navbar-dropdown-nav>li>a{color:#999}.uk-navbar-dropdown-nav>li>a:hover{color:#666}.uk-navbar-dropdown-nav>li.uk-active>a{color:#333}.uk-navbar-dropdown-nav .uk-nav-subtitle{font-size:12px}.uk-navbar-dropdown-nav .uk-nav-header{color:#333}.uk-navbar-dropdown-nav .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-navbar-dropdown-nav .uk-nav-sub a{color:#999}.uk-navbar-dropdown-nav .uk-nav-sub a:hover{color:#666}.uk-navbar-dropdown-nav .uk-nav-sub li.uk-active>a{color:#333}.uk-navbar-container{transition:.1s ease-in-out;transition-property:background-color}@media (min-width: 960px){.uk-navbar-left,.uk-navbar-right,[class*=uk-navbar-center]{gap:30px}.uk-navbar-center-left{right:calc(100% + 30px)}.uk-navbar-center-right{left:calc(100% + 30px)}}@media (min-width: 960px){.uk-navbar-nav{gap:30px}}.uk-subnav{display:flex;flex-wrap:wrap;align-items:center;margin-left:-20px;padding:0;list-style:none}.uk-subnav>*{flex:none;padding-left:20px;position:relative}.uk-subnav>*>:first-child{display:flex;align-items:center;column-gap:.25em;color:#999;font-size:.875rem;text-transform:uppercase;transition:.1s ease-in-out;transition-property:color,background-color}.uk-subnav>*>a:hover{color:#666;text-decoration:none}.uk-subnav>.uk-active>a{color:#333}.uk-subnav-divider{margin-left:-41px}.uk-subnav-divider>*{display:flex;align-items:center}.uk-subnav-divider>::before{content:"";height:1.5em;margin-left:0px;margin-right:20px;border-left:1px solid rgba(0,0,0,0)}.uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before{border-left-color:#e5e5e5}.uk-subnav-pill>*>:first-child{padding:5px 10px;background:rgba(0,0,0,0);color:#999}.uk-subnav-pill>*>a:hover{background-color:#f8f8f8;color:#666}.uk-subnav-pill>*>a:active{background-color:#f8f8f8;color:#666}.uk-subnav-pill>.uk-active>a{background-color:#36c;color:#fff}.uk-subnav>.uk-disabled>a{color:#999}.uk-breadcrumb{padding:0;list-style:none}.uk-breadcrumb>*{display:contents}.uk-breadcrumb>*>*{font-size:.875rem;color:#999}.uk-breadcrumb>*>:hover{color:#666;text-decoration:none}.uk-breadcrumb>:last-child>span,.uk-breadcrumb>:last-child>a:not([href]){color:#666}.uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before{content:"/";display:inline-block;margin:0 20px 0 calc(20px - 4px);font-size:.875rem;color:#999}.uk-pagination{display:flex;flex-wrap:wrap;align-items:center;margin-left:0;padding:0;list-style:none}.uk-pagination>*{flex:none;padding-left:0;position:relative}.uk-pagination>*>*{display:flex;align-items:center;column-gap:.25em;padding:5px 10px;color:#999;transition:color .1s ease-in-out}.uk-pagination>*>:hover{color:#666;text-decoration:none}.uk-pagination>.uk-active>*{color:#666}.uk-pagination>.uk-disabled>*{color:#999}.uk-tab{display:flex;flex-wrap:wrap;margin-left:-20px;padding:0;list-style:none;position:relative}.uk-tab::before{content:"";position:absolute;bottom:0;left:20px;right:0;border-bottom:1px solid #e5e5e5}.uk-tab>*{flex:none;padding-left:20px;position:relative}.uk-tab>*>a{display:flex;align-items:center;column-gap:.25em;justify-content:center;padding:5px 10px;color:#999;border-bottom:1px solid rgba(0,0,0,0);font-size:.875rem;text-transform:uppercase;transition:color .1s ease-in-out}.uk-tab>*>a:hover{color:#666;text-decoration:none}.uk-tab>.uk-active>a{color:#333;border-color:#36c}.uk-tab>.uk-disabled>a{color:#999}.uk-tab-bottom::before{top:0;bottom:auto}.uk-tab-bottom>*>a{border-top:1px solid rgba(0,0,0,0);border-bottom:none}.uk-tab-left,.uk-tab-right{flex-direction:column;margin-left:0}.uk-tab-left>*,.uk-tab-right>*{padding-left:0}.uk-tab-left::before{top:0;bottom:0;left:auto;right:0;border-left:1px solid #e5e5e5;border-bottom:none}.uk-tab-right::before{top:0;bottom:0;left:0;right:auto;border-left:1px solid #e5e5e5;border-bottom:none}.uk-tab-left>*>a{justify-content:left;border-right:1px solid rgba(0,0,0,0);border-bottom:none}.uk-tab-right>*>a{justify-content:left;border-left:1px solid rgba(0,0,0,0);border-bottom:none}.uk-tab .uk-dropdown{margin-left:30px}.uk-slidenav{padding:5px 10px;color:rgba(102,102,102,.5);transition:color .1s ease-in-out}.uk-slidenav:hover{color:rgba(102,102,102,.9)}.uk-slidenav:active{color:rgba(102,102,102,.5)}.uk-slidenav-large{padding:10px 10px}.uk-slidenav-container{display:flex}.uk-dotnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-12px}.uk-dotnav>*{flex:none;padding-left:12px}.uk-dotnav>*>*{display:block;box-sizing:border-box;width:10px;height:10px;border-radius:50%;background:rgba(0,0,0,0);text-indent:100%;overflow:hidden;white-space:nowrap;border:1px solid rgba(102,102,102,.4);transition:.2s ease-in-out;transition-property:background-color,border-color}.uk-dotnav>*>:hover{background-color:rgba(102,102,102,.6);border-color:rgba(0,0,0,0)}.uk-dotnav>*>:active{background-color:rgba(102,102,102,.2);border-color:rgba(0,0,0,0)}.uk-dotnav>.uk-active>*{background-color:rgba(102,102,102,.6);border-color:rgba(0,0,0,0)}.uk-dotnav-vertical{flex-direction:column;margin-left:0;margin-top:-12px}.uk-dotnav-vertical>*{padding-left:0;padding-top:12px}.uk-thumbnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-15px}.uk-thumbnav>*{padding-left:15px}.uk-thumbnav>*>*{display:inline-block;position:relative}.uk-thumbnav>*>*::after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-image:linear-gradient(180deg, rgba(255,255,255,0), rgba(255,255,255,.4));transition:opacity .1s ease-in-out}.uk-thumbnav>*>:hover::after{opacity:0}.uk-thumbnav>.uk-active>*::after{opacity:0}.uk-thumbnav-vertical{flex-direction:column;margin-left:0;margin-top:-15px}.uk-thumbnav-vertical>*{padding-left:0;padding-top:15px}.uk-iconnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-10px}.uk-iconnav>*{padding-left:10px}.uk-iconnav>*>a{display:flex;align-items:center;column-gap:.25em;line-height:0;color:#36d;text-decoration:none;font-size:.875rem;transition:.1s ease-in-out;transition-property:color,background-color}.uk-iconnav>*>a:hover{color:#c09}.uk-iconnav>.uk-active>a{color:#666}.uk-iconnav-vertical{flex-direction:column;margin-left:0;margin-top:-10px}.uk-iconnav-vertical>*{padding-left:0;padding-top:10px}.uk-dropdown{--uk-position-offset: 10px;--uk-position-viewport-offset: 15px;width:auto;min-width:200px;padding:25px;background:#fff;color:#666;box-shadow:0 5px 12px rgba(0,0,0,.15)}.uk-dropdown>:last-child{margin-bottom:0}.uk-dropdown :focus-visible{outline-color:#333 !important}.uk-dropdown-large{padding:40px}.uk-dropdown-dropbar{width:auto;background:rgba(0,0,0,0);padding:5px 0 25px 0;--uk-position-viewport-offset: 15px;box-shadow:none}@media (min-width: 640px){.uk-dropdown-dropbar{--uk-position-viewport-offset: 30px}}@media (min-width: 960px){.uk-dropdown-dropbar{--uk-position-viewport-offset: 40px}}.uk-dropdown-dropbar-large{padding-top:40px;padding-bottom:40px}.uk-dropdown-nav{font-size:.875rem}.uk-dropdown-nav>li>a{color:#999}.uk-dropdown-nav>li>a:hover,.uk-dropdown-nav>li.uk-active>a{color:#666}.uk-dropdown-nav .uk-nav-subtitle{font-size:12px}.uk-dropdown-nav .uk-nav-header{color:#333}.uk-dropdown-nav .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-dropdown-nav .uk-nav-sub a{color:#999}.uk-dropdown-nav .uk-nav-sub a:hover,.uk-dropdown-nav .uk-nav-sub li.uk-active>a{color:#666}.uk-lightbox{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;background:#000;opacity:0;transition:opacity .15s linear;touch-action:pinch-zoom}.uk-lightbox.uk-open{display:block;opacity:1}.uk-lightbox :focus-visible{outline-color:rgba(255,255,255,.7)}.uk-lightbox-page{overflow:hidden}.uk-lightbox-items>*{position:absolute;top:0;right:0;bottom:0;left:0;display:none;justify-content:center;align-items:center;color:rgba(255,255,255,.7);will-change:transform,opacity}.uk-lightbox-items>*>*{max-width:100vw;max-height:100vh}.uk-lightbox-items>*>:not(iframe){width:auto;height:auto}.uk-lightbox-items>.uk-active{display:flex}.uk-lightbox-toolbar{padding:10px 10px;background:rgba(0,0,0,.3);color:rgba(255,255,255,.7)}.uk-lightbox-toolbar>*{color:rgba(255,255,255,.7)}.uk-lightbox-toolbar-icon{padding:5px;color:rgba(255,255,255,.7)}.uk-lightbox-toolbar-icon:hover{color:#fff}.uk-lightbox-button{box-sizing:border-box;width:50px;height:50px;background:rgba(0,0,0,.3);color:rgba(255,255,255,.7);display:inline-flex;justify-content:center;align-items:center}.uk-lightbox-button:hover{color:#fff}.uk-lightbox-caption:empty{display:none}.uk-lightbox-iframe{width:80%;height:80%}[class*=uk-animation-]{animation:.5s ease-out both}.uk-animation-fade{animation-name:uk-fade;animation-duration:.8s;animation-timing-function:linear}.uk-animation-scale-up{animation-name:uk-fade,uk-scale-up}.uk-animation-scale-down{animation-name:uk-fade,uk-scale-down}.uk-animation-slide-top{animation-name:uk-fade,uk-slide-top}.uk-animation-slide-bottom{animation-name:uk-fade,uk-slide-bottom}.uk-animation-slide-left{animation-name:uk-fade,uk-slide-left}.uk-animation-slide-right{animation-name:uk-fade,uk-slide-right}.uk-animation-slide-top-small{animation-name:uk-fade,uk-slide-top-small}.uk-animation-slide-bottom-small{animation-name:uk-fade,uk-slide-bottom-small}.uk-animation-slide-left-small{animation-name:uk-fade,uk-slide-left-small}.uk-animation-slide-right-small{animation-name:uk-fade,uk-slide-right-small}.uk-animation-slide-top-medium{animation-name:uk-fade,uk-slide-top-medium}.uk-animation-slide-bottom-medium{animation-name:uk-fade,uk-slide-bottom-medium}.uk-animation-slide-left-medium{animation-name:uk-fade,uk-slide-left-medium}.uk-animation-slide-right-medium{animation-name:uk-fade,uk-slide-right-medium}.uk-animation-kenburns{animation-name:uk-kenburns;animation-duration:15s}.uk-animation-shake{animation-name:uk-shake}.uk-animation-stroke{animation-name:uk-stroke;animation-duration:2s;stroke-dasharray:var(--uk-animation-stroke)}.uk-animation-reverse{animation-direction:reverse;animation-timing-function:ease-in}.uk-animation-fast{animation-duration:.1s}.uk-animation-toggle:not(:hover):not(:focus) [class*=uk-animation-]{animation-name:none}@keyframes uk-fade{0%{opacity:0}100%{opacity:1}}@keyframes uk-scale-up{0%{transform:scale(.9)}100%{transform:scale(1)}}@keyframes uk-scale-down{0%{transform:scale(1.1)}100%{transform:scale(1)}}@keyframes uk-slide-top{0%{transform:translateY(-100%)}100%{transform:translateY(0)}}@keyframes uk-slide-bottom{0%{transform:translateY(100%)}100%{transform:translateY(0)}}@keyframes uk-slide-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes uk-slide-right{0%{transform:translateX(100%)}100%{transform:translateX(0)}}@keyframes uk-slide-top-small{0%{transform:translateY(-10px)}100%{transform:translateY(0)}}@keyframes uk-slide-bottom-small{0%{transform:translateY(10px)}100%{transform:translateY(0)}}@keyframes uk-slide-left-small{0%{transform:translateX(-10px)}100%{transform:translateX(0)}}@keyframes uk-slide-right-small{0%{transform:translateX(10px)}100%{transform:translateX(0)}}@keyframes uk-slide-top-medium{0%{transform:translateY(-50px)}100%{transform:translateY(0)}}@keyframes uk-slide-bottom-medium{0%{transform:translateY(50px)}100%{transform:translateY(0)}}@keyframes uk-slide-left-medium{0%{transform:translateX(-50px)}100%{transform:translateX(0)}}@keyframes uk-slide-right-medium{0%{transform:translateX(50px)}100%{transform:translateX(0)}}@keyframes uk-kenburns{0%{transform:scale(1)}100%{transform:scale(1.2)}}@keyframes uk-shake{0%, 100%{transform:translateX(0)}10%{transform:translateX(-9px)}20%{transform:translateX(8px)}30%{transform:translateX(-7px)}40%{transform:translateX(6px)}50%{transform:translateX(-5px)}60%{transform:translateX(4px)}70%{transform:translateX(-3px)}80%{transform:translateX(2px)}90%{transform:translateX(-1px)}}@keyframes uk-stroke{0%{stroke-dashoffset:var(--uk-animation-stroke)}100%{stroke-dashoffset:0}}[class*=uk-child-width]>*{box-sizing:border-box;width:100%}.uk-child-width-1-2>*{width:50%}.uk-child-width-1-3>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4>*{width:25%}.uk-child-width-1-5>*{width:20%}.uk-child-width-1-6>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto>*{width:auto}.uk-child-width-expand>:not([class*=uk-width]){flex:1;min-width:1px}@media (min-width: 640px){.uk-child-width-1-1\@s>*{width:100%}.uk-child-width-1-2\@s>*{width:50%}.uk-child-width-1-3\@s>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@s>*{width:25%}.uk-child-width-1-5\@s>*{width:20%}.uk-child-width-1-6\@s>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@s>*{width:auto}.uk-child-width-expand\@s>:not([class*=uk-width]){flex:1;min-width:1px}}@media (min-width: 960px){.uk-child-width-1-1\@m>*{width:100%}.uk-child-width-1-2\@m>*{width:50%}.uk-child-width-1-3\@m>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@m>*{width:25%}.uk-child-width-1-5\@m>*{width:20%}.uk-child-width-1-6\@m>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@m>*{width:auto}.uk-child-width-expand\@m>:not([class*=uk-width]){flex:1;min-width:1px}}@media (min-width: 1200px){.uk-child-width-1-1\@l>*{width:100%}.uk-child-width-1-2\@l>*{width:50%}.uk-child-width-1-3\@l>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@l>*{width:25%}.uk-child-width-1-5\@l>*{width:20%}.uk-child-width-1-6\@l>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@l>*{width:auto}.uk-child-width-expand\@l>:not([class*=uk-width]){flex:1;min-width:1px}}@media (min-width: 1600px){.uk-child-width-1-1\@xl>*{width:100%}.uk-child-width-1-2\@xl>*{width:50%}.uk-child-width-1-3\@xl>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@xl>*{width:25%}.uk-child-width-1-5\@xl>*{width:20%}.uk-child-width-1-6\@xl>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@xl>*{width:auto}.uk-child-width-expand\@xl>:not([class*=uk-width]){flex:1;min-width:1px}}[class*=uk-width]{box-sizing:border-box;width:100%;max-width:100%}.uk-width-1-2{width:50%}.uk-width-1-3{width:calc(100% * 1 / 3.001)}.uk-width-2-3{width:calc(100% * 2 / 3.001)}.uk-width-1-4{width:25%}.uk-width-3-4{width:75%}.uk-width-1-5{width:20%}.uk-width-2-5{width:40%}.uk-width-3-5{width:60%}.uk-width-4-5{width:80%}.uk-width-1-6{width:calc(100% * 1 / 6.001)}.uk-width-5-6{width:calc(100% * 5 / 6.001)}.uk-width-small{width:150px}.uk-width-medium{width:300px}.uk-width-large{width:450px}.uk-width-xlarge{width:600px}.uk-width-2xlarge{width:750px}.uk-width-auto{width:auto}.uk-width-expand{flex:1;min-width:1px}@media (min-width: 640px){.uk-width-1-1\@s{width:100%}.uk-width-1-2\@s{width:50%}.uk-width-1-3\@s{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@s{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@s{width:25%}.uk-width-3-4\@s{width:75%}.uk-width-1-5\@s{width:20%}.uk-width-2-5\@s{width:40%}.uk-width-3-5\@s{width:60%}.uk-width-4-5\@s{width:80%}.uk-width-1-6\@s{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@s{width:calc(100% * 5 / 6.001)}.uk-width-small\@s{width:150px}.uk-width-medium\@s{width:300px}.uk-width-large\@s{width:450px}.uk-width-xlarge\@s{width:600px}.uk-width-2xlarge\@s{width:750px}.uk-width-auto\@s{width:auto}.uk-width-expand\@s{flex:1;min-width:1px}}@media (min-width: 960px){.uk-width-1-1\@m{width:100%}.uk-width-1-2\@m{width:50%}.uk-width-1-3\@m{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@m{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@m{width:25%}.uk-width-3-4\@m{width:75%}.uk-width-1-5\@m{width:20%}.uk-width-2-5\@m{width:40%}.uk-width-3-5\@m{width:60%}.uk-width-4-5\@m{width:80%}.uk-width-1-6\@m{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@m{width:calc(100% * 5 / 6.001)}.uk-width-small\@m{width:150px}.uk-width-medium\@m{width:300px}.uk-width-large\@m{width:450px}.uk-width-xlarge\@m{width:600px}.uk-width-2xlarge\@m{width:750px}.uk-width-auto\@m{width:auto}.uk-width-expand\@m{flex:1;min-width:1px}}@media (min-width: 1200px){.uk-width-1-1\@l{width:100%}.uk-width-1-2\@l{width:50%}.uk-width-1-3\@l{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@l{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@l{width:25%}.uk-width-3-4\@l{width:75%}.uk-width-1-5\@l{width:20%}.uk-width-2-5\@l{width:40%}.uk-width-3-5\@l{width:60%}.uk-width-4-5\@l{width:80%}.uk-width-1-6\@l{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@l{width:calc(100% * 5 / 6.001)}.uk-width-small\@l{width:150px}.uk-width-medium\@l{width:300px}.uk-width-large\@l{width:450px}.uk-width-xlarge\@l{width:600px}.uk-width-2xlarge\@l{width:750px}.uk-width-auto\@l{width:auto}.uk-width-expand\@l{flex:1;min-width:1px}}@media (min-width: 1600px){.uk-width-1-1\@xl{width:100%}.uk-width-1-2\@xl{width:50%}.uk-width-1-3\@xl{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@xl{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@xl{width:25%}.uk-width-3-4\@xl{width:75%}.uk-width-1-5\@xl{width:20%}.uk-width-2-5\@xl{width:40%}.uk-width-3-5\@xl{width:60%}.uk-width-4-5\@xl{width:80%}.uk-width-1-6\@xl{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@xl{width:calc(100% * 5 / 6.001)}.uk-width-small\@xl{width:150px}.uk-width-medium\@xl{width:300px}.uk-width-large\@xl{width:450px}.uk-width-xlarge\@xl{width:600px}.uk-width-2xlarge\@xl{width:750px}.uk-width-auto\@xl{width:auto}.uk-width-expand\@xl{flex:1;min-width:1px}}.uk-width-max-content{width:max-content}.uk-width-min-content{width:min-content}[class*=uk-height]{box-sizing:border-box}.uk-height-1-1{height:100%}.uk-height-viewport{min-height:100vh}.uk-height-viewport-2{min-height:200vh}.uk-height-viewport-3{min-height:300vh}.uk-height-viewport-4{min-height:400vh}.uk-height-small{height:150px}.uk-height-medium{height:300px}.uk-height-large{height:450px}.uk-height-max-small{max-height:150px}.uk-height-max-medium{max-height:300px}.uk-height-max-large{max-height:450px}.uk-text-lead{font-size:1.5rem;line-height:1.5;color:#333}.uk-text-meta{font-size:.875rem;line-height:1.4;color:#666}.uk-text-meta>a{color:#666}.uk-text-meta>a:hover{color:#666;text-decoration:none}.uk-text-small{font-size:.875rem;line-height:1.5}.uk-text-large{font-size:1.5rem;line-height:1.5}.uk-text-default{font-size:16px;line-height:1.5}.uk-text-light{font-weight:300}.uk-text-normal{font-weight:400}.uk-text-bold{font-weight:700}.uk-text-lighter{font-weight:lighter}.uk-text-bolder{font-weight:bolder}.uk-text-italic{font-style:italic}.uk-text-capitalize{text-transform:capitalize !important}.uk-text-uppercase{text-transform:uppercase !important}.uk-text-lowercase{text-transform:lowercase !important}.uk-text-decoration-none{text-decoration:none !important}.uk-text-muted{color:#999 !important}.uk-text-emphasis{color:#333 !important}.uk-text-primary{color:#36c !important}.uk-text-secondary{color:#936 !important}.uk-text-success{color:#32d296 !important}.uk-text-warning{color:#faa05a !important}.uk-text-danger{color:#f0506e !important}.uk-text-background{-webkit-background-clip:text;color:rgba(0,0,0,0) !important;display:inline-block;background-color:#36c;background-image:linear-gradient(90deg, #36c 0%, spin(#36c, 40%) 100%)}.uk-text-left{text-align:left !important}.uk-text-right{text-align:right !important}.uk-text-center{text-align:center !important}.uk-text-justify{text-align:justify !important}@media (min-width: 640px){.uk-text-left\@s{text-align:left !important}.uk-text-right\@s{text-align:right !important}.uk-text-center\@s{text-align:center !important}}@media (min-width: 960px){.uk-text-left\@m{text-align:left !important}.uk-text-right\@m{text-align:right !important}.uk-text-center\@m{text-align:center !important}}@media (min-width: 1200px){.uk-text-left\@l{text-align:left !important}.uk-text-right\@l{text-align:right !important}.uk-text-center\@l{text-align:center !important}}@media (min-width: 1600px){.uk-text-left\@xl{text-align:left !important}.uk-text-right\@xl{text-align:right !important}.uk-text-center\@xl{text-align:center !important}}.uk-text-top{vertical-align:top !important}.uk-text-middle{vertical-align:middle !important}.uk-text-bottom{vertical-align:bottom !important}.uk-text-baseline{vertical-align:baseline !important}.uk-text-nowrap{white-space:nowrap}.uk-text-truncate{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}th.uk-text-truncate,td.uk-text-truncate{max-width:0}.uk-text-break{overflow-wrap:break-word}th.uk-text-break,td.uk-text-break{word-break:break-word}[class*=uk-column-]{column-gap:30px}@media (min-width: 1200px){[class*=uk-column-]{column-gap:40px}}[class*=uk-column-] img{transform:translate3d(0, 0, 0)}.uk-column-divider{column-rule:1px solid #e5e5e5;column-gap:60px}@media (min-width: 1200px){.uk-column-divider{column-gap:80px}}.uk-column-1-2{column-count:2}.uk-column-1-3{column-count:3}.uk-column-1-4{column-count:4}.uk-column-1-5{column-count:5}.uk-column-1-6{column-count:6}@media (min-width: 640px){.uk-column-1-2\@s{column-count:2}.uk-column-1-3\@s{column-count:3}.uk-column-1-4\@s{column-count:4}.uk-column-1-5\@s{column-count:5}.uk-column-1-6\@s{column-count:6}}@media (min-width: 960px){.uk-column-1-2\@m{column-count:2}.uk-column-1-3\@m{column-count:3}.uk-column-1-4\@m{column-count:4}.uk-column-1-5\@m{column-count:5}.uk-column-1-6\@m{column-count:6}}@media (min-width: 1200px){.uk-column-1-2\@l{column-count:2}.uk-column-1-3\@l{column-count:3}.uk-column-1-4\@l{column-count:4}.uk-column-1-5\@l{column-count:5}.uk-column-1-6\@l{column-count:6}}@media (min-width: 1600px){.uk-column-1-2\@xl{column-count:2}.uk-column-1-3\@xl{column-count:3}.uk-column-1-4\@xl{column-count:4}.uk-column-1-5\@xl{column-count:5}.uk-column-1-6\@xl{column-count:6}}.uk-column-span{column-span:all}[uk-cover]:where(canvas,iframe,svg),[data-uk-cover]:where(canvas,iframe,svg){max-width:none;position:absolute;left:50%;top:50%;--uk-position-translate-x: -50%;--uk-position-translate-y: -50%;transform:translate(var(--uk-position-translate-x), var(--uk-position-translate-y))}iframe[uk-cover],iframe[data-uk-cover]{pointer-events:none}[uk-cover]:where(img,video),[data-uk-cover]:where(img,video){position:absolute;top:0;left:0;width:100%;height:100%;box-sizing:border-box;object-fit:cover;object-position:center}.uk-cover-container{overflow:hidden;position:relative}.uk-background-default{background-color:#fff}.uk-background-muted{background-color:#f8f8f8}.uk-background-primary{background-color:#36c}.uk-background-secondary{background-color:#936}.uk-background-cover,.uk-background-contain,.uk-background-width-1-1,.uk-background-height-1-1{background-position:50% 50%;background-repeat:no-repeat}.uk-background-cover{background-size:cover}.uk-background-contain{background-size:contain}.uk-background-width-1-1{background-size:100%}.uk-background-height-1-1{background-size:auto 100%}.uk-background-top-left{background-position:0 0}.uk-background-top-center{background-position:50% 0}.uk-background-top-right{background-position:100% 0}.uk-background-center-left{background-position:0 50%}.uk-background-center-center{background-position:50% 50%}.uk-background-center-right{background-position:100% 50%}.uk-background-bottom-left{background-position:0 100%}.uk-background-bottom-center{background-position:50% 100%}.uk-background-bottom-right{background-position:100% 100%}.uk-background-norepeat{background-repeat:no-repeat}.uk-background-fixed{background-attachment:fixed;backface-visibility:hidden}@media (pointer: coarse){.uk-background-fixed{background-attachment:scroll}}@media (max-width: 639px){.uk-background-image\@s{background-image:none !important}}@media (max-width: 959px){.uk-background-image\@m{background-image:none !important}}@media (max-width: 1199px){.uk-background-image\@l{background-image:none !important}}@media (max-width: 1599px){.uk-background-image\@xl{background-image:none !important}}.uk-background-blend-multiply{background-blend-mode:multiply}.uk-background-blend-screen{background-blend-mode:screen}.uk-background-blend-overlay{background-blend-mode:overlay}.uk-background-blend-darken{background-blend-mode:darken}.uk-background-blend-lighten{background-blend-mode:lighten}.uk-background-blend-color-dodge{background-blend-mode:color-dodge}.uk-background-blend-color-burn{background-blend-mode:color-burn}.uk-background-blend-hard-light{background-blend-mode:hard-light}.uk-background-blend-soft-light{background-blend-mode:soft-light}.uk-background-blend-difference{background-blend-mode:difference}.uk-background-blend-exclusion{background-blend-mode:exclusion}.uk-background-blend-hue{background-blend-mode:hue}.uk-background-blend-saturation{background-blend-mode:saturation}.uk-background-blend-color{background-blend-mode:color}.uk-background-blend-luminosity{background-blend-mode:luminosity}[class*=uk-align]{display:block;margin-bottom:30px}*+[class*=uk-align]{margin-top:30px}.uk-align-center{margin-left:auto;margin-right:auto}.uk-align-left{margin-top:0;margin-right:30px;float:left}.uk-align-right{margin-top:0;margin-left:30px;float:right}@media (min-width: 640px){.uk-align-left\@s{margin-top:0;margin-right:30px;float:left}.uk-align-right\@s{margin-top:0;margin-left:30px;float:right}}@media (min-width: 960px){.uk-align-left\@m{margin-top:0;margin-right:30px;float:left}.uk-align-right\@m{margin-top:0;margin-left:30px;float:right}}@media (min-width: 1200px){.uk-align-left\@l{margin-top:0;float:left}.uk-align-right\@l{margin-top:0;float:right}.uk-align-left,.uk-align-left\@s,.uk-align-left\@m,.uk-align-left\@l{margin-right:40px}.uk-align-right,.uk-align-right\@s,.uk-align-right\@m,.uk-align-right\@l{margin-left:40px}}@media (min-width: 1600px){.uk-align-left\@xl{margin-top:0;margin-right:40px;float:left}.uk-align-right\@xl{margin-top:0;margin-left:40px;float:right}}.uk-svg,.uk-svg:not(.uk-preserve) [fill*="#"]:not(.uk-preserve){fill:currentcolor}.uk-svg:not(.uk-preserve) [stroke*="#"]:not(.uk-preserve){stroke:currentcolor}.uk-svg{transform:translate(0, 0)}.uk-panel{display:flow-root;position:relative;box-sizing:border-box}.uk-panel>:last-child{margin-bottom:0}.uk-panel-scrollable{height:170px;padding:10px;border:1px solid #e5e5e5;overflow:auto;resize:both}.uk-clearfix::before{content:"";display:table-cell}.uk-clearfix::after{content:"";display:table;clear:both}.uk-float-left{float:left}.uk-float-right{float:right}[class*=uk-float-]{max-width:100%}.uk-overflow-hidden{overflow:hidden}.uk-overflow-auto{overflow:auto}.uk-overflow-auto>:last-child{margin-bottom:0}.uk-box-sizing-content{box-sizing:content-box}.uk-box-sizing-border{box-sizing:border-box}.uk-resize{resize:both}.uk-resize-horizontal{resize:horizontal}.uk-resize-vertical{resize:vertical}.uk-display-block{display:block !important}.uk-display-inline{display:inline !important}.uk-display-inline-block{display:inline-block !important}[class*=uk-inline]{display:inline-block;position:relative;max-width:100%;vertical-align:middle;-webkit-backface-visibility:hidden}.uk-inline-clip{overflow:hidden}.uk-preserve-width,.uk-preserve-width canvas,.uk-preserve-width img,.uk-preserve-width svg,.uk-preserve-width video{max-width:none}.uk-responsive-width,.uk-responsive-height{box-sizing:border-box}.uk-responsive-width{max-width:100% !important;height:auto}.uk-responsive-height{max-height:100%;width:auto;max-width:none}[uk-responsive],[data-uk-responsive]{max-width:100%}.uk-object-cover{object-fit:cover}.uk-object-contain{object-fit:contain}.uk-object-fill{object-fit:fill}.uk-object-none{object-fit:none}.uk-object-scale-down{object-fit:scale-down}.uk-object-top-left{object-position:0 0}.uk-object-top-center{object-position:50% 0}.uk-object-top-right{object-position:100% 0}.uk-object-center-left{object-position:0 50%}.uk-object-center-center{object-position:50% 50%}.uk-object-center-right{object-position:100% 50%}.uk-object-bottom-left{object-position:0 100%}.uk-object-bottom-center{object-position:50% 100%}.uk-object-bottom-right{object-position:100% 100%}.uk-border-circle{border-radius:50%}.uk-border-pill{border-radius:500px}.uk-border-rounded{border-radius:5px}.uk-inline-clip[class*=uk-border-]{-webkit-transform:translateZ(0)}.uk-box-shadow-small{box-shadow:0 2px 8px rgba(0,0,0,.08)}.uk-box-shadow-medium{box-shadow:0 5px 15px rgba(0,0,0,.08)}.uk-box-shadow-large{box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-box-shadow-xlarge{box-shadow:0 28px 50px rgba(0,0,0,.16)}[class*=uk-box-shadow-hover]{transition:box-shadow .1s ease-in-out}.uk-box-shadow-hover-small:hover{box-shadow:0 2px 8px rgba(0,0,0,.08)}.uk-box-shadow-hover-medium:hover{box-shadow:0 5px 15px rgba(0,0,0,.08)}.uk-box-shadow-hover-large:hover{box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-box-shadow-hover-xlarge:hover{box-shadow:0 28px 50px rgba(0,0,0,.16)}@supports (filter: blur(0)){.uk-box-shadow-bottom{display:inline-block;position:relative;z-index:0;max-width:100%;vertical-align:middle}.uk-box-shadow-bottom::after{content:"";position:absolute;bottom:-30px;left:0;right:0;z-index:-1;height:30px;border-radius:100%;background:#444;filter:blur(20px);will-change:filter}}.uk-dropcap::first-letter,.uk-dropcap>p:first-of-type::first-letter{display:block;margin-right:10px;float:left;font-size:4.5em;line-height:1;margin-bottom:-2px}@-moz-document url-prefix(){.uk-dropcap::first-letter,.uk-dropcap>p:first-of-type::first-letter{margin-top:1.1%}}.uk-logo{font-size:1.5rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";color:#333;text-decoration:none}:where(.uk-logo){display:inline-block;vertical-align:middle}.uk-logo:hover{color:#333;text-decoration:none}.uk-logo :where(img,svg,video){display:block}.uk-logo-inverse{display:none}.uk-disabled{pointer-events:none}.uk-drag,.uk-drag *{cursor:move}.uk-drag iframe{pointer-events:none}.uk-dragover{box-shadow:0 0 20px rgba(100,100,100,.3)}.uk-blend-multiply{mix-blend-mode:multiply}.uk-blend-screen{mix-blend-mode:screen}.uk-blend-overlay{mix-blend-mode:overlay}.uk-blend-darken{mix-blend-mode:darken}.uk-blend-lighten{mix-blend-mode:lighten}.uk-blend-color-dodge{mix-blend-mode:color-dodge}.uk-blend-color-burn{mix-blend-mode:color-burn}.uk-blend-hard-light{mix-blend-mode:hard-light}.uk-blend-soft-light{mix-blend-mode:soft-light}.uk-blend-difference{mix-blend-mode:difference}.uk-blend-exclusion{mix-blend-mode:exclusion}.uk-blend-hue{mix-blend-mode:hue}.uk-blend-saturation{mix-blend-mode:saturation}.uk-blend-color{mix-blend-mode:color}.uk-blend-luminosity{mix-blend-mode:luminosity}.uk-transform-center{transform:translate(-50%, -50%)}.uk-transform-origin-top-left{transform-origin:0 0}.uk-transform-origin-top-center{transform-origin:50% 0}.uk-transform-origin-top-right{transform-origin:100% 0}.uk-transform-origin-center-left{transform-origin:0 50%}.uk-transform-origin-center-right{transform-origin:100% 50%}.uk-transform-origin-bottom-left{transform-origin:0 100%}.uk-transform-origin-bottom-center{transform-origin:50% 100%}.uk-transform-origin-bottom-right{transform-origin:100% 100%}.uk-flex{display:flex}.uk-flex-inline{display:inline-flex}.uk-flex-left{justify-content:flex-start}.uk-flex-center{justify-content:center}.uk-flex-right{justify-content:flex-end}.uk-flex-between{justify-content:space-between}.uk-flex-around{justify-content:space-around}@media (min-width: 640px){.uk-flex-left\@s{justify-content:flex-start}.uk-flex-center\@s{justify-content:center}.uk-flex-right\@s{justify-content:flex-end}.uk-flex-between\@s{justify-content:space-between}.uk-flex-around\@s{justify-content:space-around}}@media (min-width: 960px){.uk-flex-left\@m{justify-content:flex-start}.uk-flex-center\@m{justify-content:center}.uk-flex-right\@m{justify-content:flex-end}.uk-flex-between\@m{justify-content:space-between}.uk-flex-around\@m{justify-content:space-around}}@media (min-width: 1200px){.uk-flex-left\@l{justify-content:flex-start}.uk-flex-center\@l{justify-content:center}.uk-flex-right\@l{justify-content:flex-end}.uk-flex-between\@l{justify-content:space-between}.uk-flex-around\@l{justify-content:space-around}}@media (min-width: 1600px){.uk-flex-left\@xl{justify-content:flex-start}.uk-flex-center\@xl{justify-content:center}.uk-flex-right\@xl{justify-content:flex-end}.uk-flex-between\@xl{justify-content:space-between}.uk-flex-around\@xl{justify-content:space-around}}.uk-flex-stretch{align-items:stretch}.uk-flex-top{align-items:flex-start}.uk-flex-middle{align-items:center}.uk-flex-bottom{align-items:flex-end}.uk-flex-row{flex-direction:row}.uk-flex-row-reverse{flex-direction:row-reverse}.uk-flex-column{flex-direction:column}.uk-flex-column-reverse{flex-direction:column-reverse}.uk-flex-nowrap{flex-wrap:nowrap}.uk-flex-wrap{flex-wrap:wrap}.uk-flex-wrap-reverse{flex-wrap:wrap-reverse}.uk-flex-wrap-stretch{align-content:stretch}.uk-flex-wrap-top{align-content:flex-start}.uk-flex-wrap-middle{align-content:center}.uk-flex-wrap-bottom{align-content:flex-end}.uk-flex-wrap-between{align-content:space-between}.uk-flex-wrap-around{align-content:space-around}.uk-flex-first{order:-1}.uk-flex-last{order:99}@media (min-width: 640px){.uk-flex-first\@s{order:-1}.uk-flex-last\@s{order:99}}@media (min-width: 960px){.uk-flex-first\@m{order:-1}.uk-flex-last\@m{order:99}}@media (min-width: 1200px){.uk-flex-first\@l{order:-1}.uk-flex-last\@l{order:99}}@media (min-width: 1600px){.uk-flex-first\@xl{order:-1}.uk-flex-last\@xl{order:99}}.uk-flex-none{flex:none}.uk-flex-auto{flex:auto}.uk-flex-1{flex:1}.uk-margin{margin-bottom:20px}*+.uk-margin{margin-top:20px !important}.uk-margin-top{margin-top:20px !important}.uk-margin-bottom{margin-bottom:20px !important}.uk-margin-left{margin-left:20px !important}.uk-margin-right{margin-right:20px !important}.uk-margin-small{margin-bottom:10px}*+.uk-margin-small{margin-top:10px !important}.uk-margin-small-top{margin-top:10px !important}.uk-margin-small-bottom{margin-bottom:10px !important}.uk-margin-small-left{margin-left:10px !important}.uk-margin-small-right{margin-right:10px !important}.uk-margin-medium{margin-bottom:40px}*+.uk-margin-medium{margin-top:40px !important}.uk-margin-medium-top{margin-top:40px !important}.uk-margin-medium-bottom{margin-bottom:40px !important}.uk-margin-medium-left{margin-left:40px !important}.uk-margin-medium-right{margin-right:40px !important}.uk-margin-large{margin-bottom:40px}*+.uk-margin-large{margin-top:40px !important}.uk-margin-large-top{margin-top:40px !important}.uk-margin-large-bottom{margin-bottom:40px !important}.uk-margin-large-left{margin-left:40px !important}.uk-margin-large-right{margin-right:40px !important}@media (min-width: 1200px){.uk-margin-large{margin-bottom:70px}*+.uk-margin-large{margin-top:70px !important}.uk-margin-large-top{margin-top:70px !important}.uk-margin-large-bottom{margin-bottom:70px !important}.uk-margin-large-left{margin-left:70px !important}.uk-margin-large-right{margin-right:70px !important}}.uk-margin-xlarge{margin-bottom:70px}*+.uk-margin-xlarge{margin-top:70px !important}.uk-margin-xlarge-top{margin-top:70px !important}.uk-margin-xlarge-bottom{margin-bottom:70px !important}.uk-margin-xlarge-left{margin-left:70px !important}.uk-margin-xlarge-right{margin-right:70px !important}@media (min-width: 1200px){.uk-margin-xlarge{margin-bottom:140px}*+.uk-margin-xlarge{margin-top:140px !important}.uk-margin-xlarge-top{margin-top:140px !important}.uk-margin-xlarge-bottom{margin-bottom:140px !important}.uk-margin-xlarge-left{margin-left:140px !important}.uk-margin-xlarge-right{margin-right:140px !important}}.uk-margin-auto{margin-left:auto !important;margin-right:auto !important}.uk-margin-auto-top{margin-top:auto !important}.uk-margin-auto-bottom{margin-bottom:auto !important}.uk-margin-auto-left{margin-left:auto !important}.uk-margin-auto-right{margin-right:auto !important}.uk-margin-auto-vertical{margin-top:auto !important;margin-bottom:auto !important}@media (min-width: 640px){.uk-margin-auto\@s{margin-left:auto !important;margin-right:auto !important}.uk-margin-auto-left\@s{margin-left:auto !important}.uk-margin-auto-right\@s{margin-right:auto !important}}@media (min-width: 960px){.uk-margin-auto\@m{margin-left:auto !important;margin-right:auto !important}.uk-margin-auto-left\@m{margin-left:auto !important}.uk-margin-auto-right\@m{margin-right:auto !important}}@media (min-width: 1200px){.uk-margin-auto\@l{margin-left:auto !important;margin-right:auto !important}.uk-margin-auto-left\@l{margin-left:auto !important}.uk-margin-auto-right\@l{margin-right:auto !important}}@media (min-width: 1600px){.uk-margin-auto\@xl{margin-left:auto !important;margin-right:auto !important}.uk-margin-auto-left\@xl{margin-left:auto !important}.uk-margin-auto-right\@xl{margin-right:auto !important}}.uk-margin-remove{margin:0 !important}.uk-margin-remove-top{margin-top:0 !important}.uk-margin-remove-bottom{margin-bottom:0 !important}.uk-margin-remove-left{margin-left:0 !important}.uk-margin-remove-right{margin-right:0 !important}.uk-margin-remove-vertical{margin-top:0 !important;margin-bottom:0 !important}.uk-margin-remove-adjacent+*,.uk-margin-remove-first-child>:first-child{margin-top:0 !important}.uk-margin-remove-last-child>:last-child{margin-bottom:0 !important}@media (min-width: 640px){.uk-margin-remove-left\@s{margin-left:0 !important}.uk-margin-remove-right\@s{margin-right:0 !important}}@media (min-width: 960px){.uk-margin-remove-left\@m{margin-left:0 !important}.uk-margin-remove-right\@m{margin-right:0 !important}}@media (min-width: 1200px){.uk-margin-remove-left\@l{margin-left:0 !important}.uk-margin-remove-right\@l{margin-right:0 !important}}@media (min-width: 1600px){.uk-margin-remove-left\@xl{margin-left:0 !important}.uk-margin-remove-right\@xl{margin-right:0 !important}}.uk-padding{padding:30px}@media (min-width: 1200px){.uk-padding{padding:40px}}.uk-padding-small{padding:15px}.uk-padding-large{padding:40px}@media (min-width: 1200px){.uk-padding-large{padding:70px}}.uk-padding-remove{padding:0 !important}.uk-padding-remove-top{padding-top:0 !important}.uk-padding-remove-bottom{padding-bottom:0 !important}.uk-padding-remove-left{padding-left:0 !important}.uk-padding-remove-right{padding-right:0 !important}.uk-padding-remove-vertical{padding-top:0 !important;padding-bottom:0 !important}.uk-padding-remove-horizontal{padding-left:0 !important;padding-right:0 !important}:root{--uk-position-margin-offset: 0px}[class*=uk-position-top],[class*=uk-position-bottom],[class*=uk-position-left],[class*=uk-position-right],[class*=uk-position-center]{position:absolute !important;max-width:calc(100% - (var(--uk-position-margin-offset) * 2));box-sizing:border-box}.uk-position-top{top:0;left:0;right:0}.uk-position-bottom{bottom:0;left:0;right:0}.uk-position-left{top:0;bottom:0;left:0}.uk-position-right{top:0;bottom:0;right:0}.uk-position-top-left{top:0;left:0}.uk-position-top-right{top:0;right:0}.uk-position-bottom-left{bottom:0;left:0}.uk-position-bottom-right{bottom:0;right:0}.uk-position-center{top:calc(50% - var(--uk-position-margin-offset));left:calc(50% - var(--uk-position-margin-offset));--uk-position-translate-x: -50%;--uk-position-translate-y: -50%;transform:translate(var(--uk-position-translate-x), var(--uk-position-translate-y));width:max-content}[class*=uk-position-center-left],[class*=uk-position-center-right]{top:calc(50% - var(--uk-position-margin-offset));--uk-position-translate-y: -50%;transform:translate(0, var(--uk-position-translate-y))}.uk-position-center-left{left:0}.uk-position-center-right{right:0}.uk-position-center-left-out{right:100%;width:max-content}.uk-position-center-right-out{left:100%;width:max-content}.uk-position-top-center,.uk-position-bottom-center{left:calc(50% - var(--uk-position-margin-offset));--uk-position-translate-x: -50%;transform:translate(var(--uk-position-translate-x), 0);width:max-content}.uk-position-top-center{top:0}.uk-position-bottom-center{bottom:0}.uk-position-cover{position:absolute;top:0;bottom:0;left:0;right:0}.uk-position-small{margin:15px;--uk-position-margin-offset: 15px}.uk-position-medium{margin:30px;--uk-position-margin-offset: 30px}.uk-position-large{margin:30px;--uk-position-margin-offset: 30px}@media (min-width: 1200px){.uk-position-large{margin:50px;--uk-position-margin-offset: 50px}}.uk-position-relative{position:relative !important}.uk-position-absolute{position:absolute !important}.uk-position-fixed{position:fixed !important}.uk-position-sticky{position:sticky !important}.uk-position-z-index{z-index:1}.uk-position-z-index-zero{z-index:0}.uk-position-z-index-negative{z-index:-1}.uk-position-z-index-high{z-index:990}:where(.uk-transition-fade),:where([class*=uk-transition-scale]),:where([class*=uk-transition-slide]){--uk-position-translate-x: 0;--uk-position-translate-y: 0}.uk-transition-fade,[class*=uk-transition-scale],[class*=uk-transition-slide]{--uk-translate-x: 0;--uk-translate-y: 0;--uk-scale-x: 1;--uk-scale-y: 1;transform:translate(var(--uk-position-translate-x), var(--uk-position-translate-y)) translate(var(--uk-translate-x), var(--uk-translate-y)) scale(var(--uk-scale-x), var(--uk-scale-y));transition:.3s ease-out;transition-property:opacity,transform,filter;opacity:0}.uk-transition-toggle:hover .uk-transition-fade,.uk-transition-toggle:focus .uk-transition-fade,.uk-transition-toggle .uk-transition-fade:focus-within,.uk-transition-active.uk-active .uk-transition-fade{opacity:1}[class*=uk-transition-scale]{-webkit-backface-visibility:hidden}.uk-transition-scale-up{--uk-scale-x: 1;--uk-scale-y: 1}.uk-transition-scale-down{--uk-scale-x: 1.03;--uk-scale-y: 1.03}.uk-transition-toggle:hover .uk-transition-scale-up,.uk-transition-toggle:focus .uk-transition-scale-up,.uk-transition-toggle .uk-transition-scale-up:focus-within,.uk-transition-active.uk-active .uk-transition-scale-up{--uk-scale-x: 1.03;--uk-scale-y: 1.03;opacity:1}.uk-transition-toggle:hover .uk-transition-scale-down,.uk-transition-toggle:focus .uk-transition-scale-down,.uk-transition-toggle .uk-transition-scale-down:focus-within,.uk-transition-active.uk-active .uk-transition-scale-down{--uk-scale-x: 1;--uk-scale-y: 1;opacity:1}.uk-transition-slide-top{--uk-translate-y: -100%}.uk-transition-slide-bottom{--uk-translate-y: 100%}.uk-transition-slide-left{--uk-translate-x: -100%}.uk-transition-slide-right{--uk-translate-x: 100%}.uk-transition-slide-top-small{--uk-translate-y: calc(-1 * 10px)}.uk-transition-slide-bottom-small{--uk-translate-y: 10px}.uk-transition-slide-left-small{--uk-translate-x: calc(-1 * 10px)}.uk-transition-slide-right-small{--uk-translate-x: 10px}.uk-transition-slide-top-medium{--uk-translate-y: calc(-1 * 50px)}.uk-transition-slide-bottom-medium{--uk-translate-y: 50px}.uk-transition-slide-left-medium{--uk-translate-x: calc(-1 * 50px)}.uk-transition-slide-right-medium{--uk-translate-x: 50px}.uk-transition-toggle:hover [class*=uk-transition-slide],.uk-transition-toggle:focus [class*=uk-transition-slide],.uk-transition-toggle [class*=uk-transition-slide]:focus-within,.uk-transition-active.uk-active [class*=uk-transition-slide]{--uk-translate-x: 0;--uk-translate-y: 0;opacity:1}.uk-transition-opaque{opacity:1}.uk-transition-slow{transition-duration:.7s}.uk-transition-disable,.uk-transition-disable *{transition:none !important}[hidden],.uk-hidden{display:none !important}@media (min-width: 640px){.uk-hidden\@s{display:none !important}}@media (min-width: 960px){.uk-hidden\@m{display:none !important}}@media (min-width: 1200px){.uk-hidden\@l{display:none !important}}@media (min-width: 1600px){.uk-hidden\@xl{display:none !important}}@media (max-width: 639px){.uk-visible\@s{display:none !important}}@media (max-width: 959px){.uk-visible\@m{display:none !important}}@media (max-width: 1199px){.uk-visible\@l{display:none !important}}@media (max-width: 1599px){.uk-visible\@xl{display:none !important}}.uk-invisible{visibility:hidden !important}.uk-hidden-visually:not(:focus):not(:active):not(:focus-within),.uk-visible-toggle:not(:hover):not(:focus) .uk-hidden-hover:not(:focus-within){position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;border:0 !important;margin:0 !important;overflow:hidden !important;clip-path:inset(50%) !important;white-space:nowrap !important}.uk-visible-toggle:not(:hover):not(:focus) .uk-invisible-hover:not(:focus-within){opacity:0 !important}@media (hover: none){.uk-hidden-touch{display:none !important}}@media (hover){.uk-hidden-notouch{display:none !important}}.uk-light,.uk-section-primary:not(.uk-preserve-color),.uk-section-secondary:not(.uk-preserve-color),.uk-tile-primary:not(.uk-preserve-color),.uk-tile-secondary:not(.uk-preserve-color),.uk-card-primary.uk-card-body,.uk-card-primary>:not([class*=uk-card-media]),.uk-card-secondary.uk-card-body,.uk-card-secondary>:not([class*=uk-card-media]),.uk-overlay-primary,.uk-offcanvas-bar{color:rgba(255,255,255,.7)}.uk-light .uk-accordion-title::before,.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-card-primary.uk-card-body .uk-accordion-title::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-accordion-title::before,.uk-card-secondary.uk-card-body .uk-accordion-title::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-accordion-title::before,.uk-overlay-primary .uk-accordion-title::before,.uk-offcanvas-bar .uk-accordion-title::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,.7)%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,.7)%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-open>.uk-accordion-title::before,.uk-section-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-section-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-tile-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-card-primary.uk-card-body .uk-open>.uk-accordion-title::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-open>.uk-accordion-title::before,.uk-card-secondary.uk-card-body .uk-open>.uk-accordion-title::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-open>.uk-accordion-title::before,.uk-overlay-primary .uk-open>.uk-accordion-title::before,.uk-offcanvas-bar .uk-open>.uk-accordion-title::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,.7)%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-article-meta,.uk-section-primary:not(.uk-preserve-color) .uk-article-meta,.uk-section-secondary:not(.uk-preserve-color) .uk-article-meta,.uk-tile-primary:not(.uk-preserve-color) .uk-article-meta,.uk-tile-secondary:not(.uk-preserve-color) .uk-article-meta,.uk-card-primary.uk-card-body .uk-article-meta,.uk-card-primary>:not([class*=uk-card-media]) .uk-article-meta,.uk-card-secondary.uk-card-body .uk-article-meta,.uk-card-secondary>:not([class*=uk-card-media]) .uk-article-meta,.uk-overlay-primary .uk-article-meta,.uk-offcanvas-bar .uk-article-meta{color:rgba(255,255,255,.5)}.uk-light .uk-badge,.uk-section-primary:not(.uk-preserve-color) .uk-badge,.uk-section-secondary:not(.uk-preserve-color) .uk-badge,.uk-tile-primary:not(.uk-preserve-color) .uk-badge,.uk-tile-secondary:not(.uk-preserve-color) .uk-badge,.uk-card-primary.uk-card-body .uk-badge,.uk-card-primary>:not([class*=uk-card-media]) .uk-badge,.uk-card-secondary.uk-card-body .uk-badge,.uk-card-secondary>:not([class*=uk-card-media]) .uk-badge,.uk-overlay-primary .uk-badge,.uk-offcanvas-bar .uk-badge{background-color:#fff;color:#666 !important}.uk-light a,.uk-light .uk-link,.uk-section-primary:not(.uk-preserve-color) a,.uk-section-primary:not(.uk-preserve-color) .uk-link,.uk-section-secondary:not(.uk-preserve-color) a,.uk-section-secondary:not(.uk-preserve-color) .uk-link,.uk-tile-primary:not(.uk-preserve-color) a,.uk-tile-primary:not(.uk-preserve-color) .uk-link,.uk-tile-secondary:not(.uk-preserve-color) a,.uk-tile-secondary:not(.uk-preserve-color) .uk-link,.uk-card-primary.uk-card-body a,.uk-card-primary.uk-card-body .uk-link,.uk-card-primary>:not([class*=uk-card-media]) a,.uk-card-primary>:not([class*=uk-card-media]) .uk-link,.uk-card-secondary.uk-card-body a,.uk-card-secondary.uk-card-body .uk-link,.uk-card-secondary>:not([class*=uk-card-media]) a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link,.uk-overlay-primary a,.uk-overlay-primary .uk-link,.uk-offcanvas-bar a,.uk-offcanvas-bar .uk-link{color:#fff}.uk-light a:hover,.uk-light .uk-link:hover,.uk-light .uk-link-toggle:hover .uk-link,.uk-section-primary:not(.uk-preserve-color) a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-section-secondary:not(.uk-preserve-color) a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-tile-primary:not(.uk-preserve-color) a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-tile-secondary:not(.uk-preserve-color) a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-card-primary.uk-card-body a:hover,.uk-card-primary.uk-card-body .uk-link:hover,.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link,.uk-card-primary>:not([class*=uk-card-media]) a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link,.uk-card-secondary.uk-card-body a:hover,.uk-card-secondary.uk-card-body .uk-link:hover,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link,.uk-card-secondary>:not([class*=uk-card-media]) a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link,.uk-overlay-primary a:hover,.uk-overlay-primary .uk-link:hover,.uk-overlay-primary .uk-link-toggle:hover .uk-link,.uk-offcanvas-bar a:hover,.uk-offcanvas-bar .uk-link:hover,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link{color:#fff}.uk-light :not(pre)>code,.uk-light :not(pre)>kbd,.uk-light :not(pre)>samp,.uk-section-primary:not(.uk-preserve-color) :not(pre)>code,.uk-section-primary:not(.uk-preserve-color) :not(pre)>kbd,.uk-section-primary:not(.uk-preserve-color) :not(pre)>samp,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>code,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>kbd,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>samp,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>code,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>kbd,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>samp,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>code,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>kbd,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>samp,.uk-card-primary.uk-card-body :not(pre)>code,.uk-card-primary.uk-card-body :not(pre)>kbd,.uk-card-primary.uk-card-body :not(pre)>samp,.uk-card-primary>:not([class*=uk-card-media]) :not(pre)>code,.uk-card-primary>:not([class*=uk-card-media]) :not(pre)>kbd,.uk-card-primary>:not([class*=uk-card-media]) :not(pre)>samp,.uk-card-secondary.uk-card-body :not(pre)>code,.uk-card-secondary.uk-card-body :not(pre)>kbd,.uk-card-secondary.uk-card-body :not(pre)>samp,.uk-card-secondary>:not([class*=uk-card-media]) :not(pre)>code,.uk-card-secondary>:not([class*=uk-card-media]) :not(pre)>kbd,.uk-card-secondary>:not([class*=uk-card-media]) :not(pre)>samp,.uk-overlay-primary :not(pre)>code,.uk-overlay-primary :not(pre)>kbd,.uk-overlay-primary :not(pre)>samp,.uk-offcanvas-bar :not(pre)>code,.uk-offcanvas-bar :not(pre)>kbd,.uk-offcanvas-bar :not(pre)>samp{color:rgba(255,255,255,.7);background-color:rgba(255,255,255,.1)}.uk-light em,.uk-section-primary:not(.uk-preserve-color) em,.uk-section-secondary:not(.uk-preserve-color) em,.uk-tile-primary:not(.uk-preserve-color) em,.uk-tile-secondary:not(.uk-preserve-color) em,.uk-card-primary.uk-card-body em,.uk-card-primary>:not([class*=uk-card-media]) em,.uk-card-secondary.uk-card-body em,.uk-card-secondary>:not([class*=uk-card-media]) em,.uk-overlay-primary em,.uk-offcanvas-bar em{color:#fff}.uk-light h1,.uk-section-primary:not(.uk-preserve-color) h1,.uk-section-secondary:not(.uk-preserve-color) h1,.uk-tile-primary:not(.uk-preserve-color) h1,.uk-tile-secondary:not(.uk-preserve-color) h1,.uk-card-primary.uk-card-body h1,.uk-card-primary>:not([class*=uk-card-media]) h1,.uk-card-secondary.uk-card-body h1,.uk-card-secondary>:not([class*=uk-card-media]) h1,.uk-overlay-primary h1,.uk-offcanvas-bar h1,.uk-light .uk-h1,.uk-section-primary:not(.uk-preserve-color) .uk-h1,.uk-section-secondary:not(.uk-preserve-color) .uk-h1,.uk-tile-primary:not(.uk-preserve-color) .uk-h1,.uk-tile-secondary:not(.uk-preserve-color) .uk-h1,.uk-card-primary.uk-card-body .uk-h1,.uk-card-primary>:not([class*=uk-card-media]) .uk-h1,.uk-card-secondary.uk-card-body .uk-h1,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h1,.uk-overlay-primary .uk-h1,.uk-offcanvas-bar .uk-h1,.uk-light h2,.uk-section-primary:not(.uk-preserve-color) h2,.uk-section-secondary:not(.uk-preserve-color) h2,.uk-tile-primary:not(.uk-preserve-color) h2,.uk-tile-secondary:not(.uk-preserve-color) h2,.uk-card-primary.uk-card-body h2,.uk-card-primary>:not([class*=uk-card-media]) h2,.uk-card-secondary.uk-card-body h2,.uk-card-secondary>:not([class*=uk-card-media]) h2,.uk-overlay-primary h2,.uk-offcanvas-bar h2,.uk-light .uk-h2,.uk-light .markdown h1,.markdown .uk-light h1,.uk-section-primary:not(.uk-preserve-color) .uk-h2,.uk-section-primary:not(.uk-preserve-color) .markdown h1,.markdown .uk-section-primary:not(.uk-preserve-color) h1,.uk-section-secondary:not(.uk-preserve-color) .uk-h2,.uk-section-secondary:not(.uk-preserve-color) .markdown h1,.markdown .uk-section-secondary:not(.uk-preserve-color) h1,.uk-tile-primary:not(.uk-preserve-color) .uk-h2,.uk-tile-primary:not(.uk-preserve-color) .markdown h1,.markdown .uk-tile-primary:not(.uk-preserve-color) h1,.uk-tile-secondary:not(.uk-preserve-color) .uk-h2,.uk-tile-secondary:not(.uk-preserve-color) .markdown h1,.markdown .uk-tile-secondary:not(.uk-preserve-color) h1,.uk-card-primary.uk-card-body .uk-h2,.uk-card-primary.uk-card-body .markdown h1,.markdown .uk-card-primary.uk-card-body h1,.uk-card-primary>:not([class*=uk-card-media]) .uk-h2,.uk-card-primary>:not([class*=uk-card-media]) .markdown h1,.markdown .uk-card-primary>:not([class*=uk-card-media]) h1,.uk-card-secondary.uk-card-body .uk-h2,.uk-card-secondary.uk-card-body .markdown h1,.markdown .uk-card-secondary.uk-card-body h1,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h2,.uk-card-secondary>:not([class*=uk-card-media]) .markdown h1,.markdown .uk-card-secondary>:not([class*=uk-card-media]) h1,.uk-overlay-primary .uk-h2,.uk-overlay-primary .markdown h1,.markdown .uk-overlay-primary h1,.uk-offcanvas-bar .uk-h2,.uk-offcanvas-bar .markdown h1,.markdown .uk-offcanvas-bar h1,.uk-light h3,.uk-section-primary:not(.uk-preserve-color) h3,.uk-section-secondary:not(.uk-preserve-color) h3,.uk-tile-primary:not(.uk-preserve-color) h3,.uk-tile-secondary:not(.uk-preserve-color) h3,.uk-card-primary.uk-card-body h3,.uk-card-primary>:not([class*=uk-card-media]) h3,.uk-card-secondary.uk-card-body h3,.uk-card-secondary>:not([class*=uk-card-media]) h3,.uk-overlay-primary h3,.uk-offcanvas-bar h3,.uk-light .uk-h3,.uk-light .markdown h2,.markdown .uk-light h2,.uk-section-primary:not(.uk-preserve-color) .uk-h3,.uk-section-primary:not(.uk-preserve-color) .markdown h2,.markdown .uk-section-primary:not(.uk-preserve-color) h2,.uk-section-secondary:not(.uk-preserve-color) .uk-h3,.uk-section-secondary:not(.uk-preserve-color) .markdown h2,.markdown .uk-section-secondary:not(.uk-preserve-color) h2,.uk-tile-primary:not(.uk-preserve-color) .uk-h3,.uk-tile-primary:not(.uk-preserve-color) .markdown h2,.markdown .uk-tile-primary:not(.uk-preserve-color) h2,.uk-tile-secondary:not(.uk-preserve-color) .uk-h3,.uk-tile-secondary:not(.uk-preserve-color) .markdown h2,.markdown .uk-tile-secondary:not(.uk-preserve-color) h2,.uk-card-primary.uk-card-body .uk-h3,.uk-card-primary.uk-card-body .markdown h2,.markdown .uk-card-primary.uk-card-body h2,.uk-card-primary>:not([class*=uk-card-media]) .uk-h3,.uk-card-primary>:not([class*=uk-card-media]) .markdown h2,.markdown .uk-card-primary>:not([class*=uk-card-media]) h2,.uk-card-secondary.uk-card-body .uk-h3,.uk-card-secondary.uk-card-body .markdown h2,.markdown .uk-card-secondary.uk-card-body h2,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h3,.uk-card-secondary>:not([class*=uk-card-media]) .markdown h2,.markdown .uk-card-secondary>:not([class*=uk-card-media]) h2,.uk-overlay-primary .uk-h3,.uk-overlay-primary .markdown h2,.markdown .uk-overlay-primary h2,.uk-offcanvas-bar .uk-h3,.uk-offcanvas-bar .markdown h2,.markdown .uk-offcanvas-bar h2,.uk-light h4,.uk-section-primary:not(.uk-preserve-color) h4,.uk-section-secondary:not(.uk-preserve-color) h4,.uk-tile-primary:not(.uk-preserve-color) h4,.uk-tile-secondary:not(.uk-preserve-color) h4,.uk-card-primary.uk-card-body h4,.uk-card-primary>:not([class*=uk-card-media]) h4,.uk-card-secondary.uk-card-body h4,.uk-card-secondary>:not([class*=uk-card-media]) h4,.uk-overlay-primary h4,.uk-offcanvas-bar h4,.uk-light .uk-h4,.uk-light .markdown h3,.markdown .uk-light h3,.uk-section-primary:not(.uk-preserve-color) .uk-h4,.uk-section-primary:not(.uk-preserve-color) .markdown h3,.markdown .uk-section-primary:not(.uk-preserve-color) h3,.uk-section-secondary:not(.uk-preserve-color) .uk-h4,.uk-section-secondary:not(.uk-preserve-color) .markdown h3,.markdown .uk-section-secondary:not(.uk-preserve-color) h3,.uk-tile-primary:not(.uk-preserve-color) .uk-h4,.uk-tile-primary:not(.uk-preserve-color) .markdown h3,.markdown .uk-tile-primary:not(.uk-preserve-color) h3,.uk-tile-secondary:not(.uk-preserve-color) .uk-h4,.uk-tile-secondary:not(.uk-preserve-color) .markdown h3,.markdown .uk-tile-secondary:not(.uk-preserve-color) h3,.uk-card-primary.uk-card-body .uk-h4,.uk-card-primary.uk-card-body .markdown h3,.markdown .uk-card-primary.uk-card-body h3,.uk-card-primary>:not([class*=uk-card-media]) .uk-h4,.uk-card-primary>:not([class*=uk-card-media]) .markdown h3,.markdown .uk-card-primary>:not([class*=uk-card-media]) h3,.uk-card-secondary.uk-card-body .uk-h4,.uk-card-secondary.uk-card-body .markdown h3,.markdown .uk-card-secondary.uk-card-body h3,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h4,.uk-card-secondary>:not([class*=uk-card-media]) .markdown h3,.markdown .uk-card-secondary>:not([class*=uk-card-media]) h3,.uk-overlay-primary .uk-h4,.uk-overlay-primary .markdown h3,.markdown .uk-overlay-primary h3,.uk-offcanvas-bar .uk-h4,.uk-offcanvas-bar .markdown h3,.markdown .uk-offcanvas-bar h3,.uk-light h5,.uk-section-primary:not(.uk-preserve-color) h5,.uk-section-secondary:not(.uk-preserve-color) h5,.uk-tile-primary:not(.uk-preserve-color) h5,.uk-tile-secondary:not(.uk-preserve-color) h5,.uk-card-primary.uk-card-body h5,.uk-card-primary>:not([class*=uk-card-media]) h5,.uk-card-secondary.uk-card-body h5,.uk-card-secondary>:not([class*=uk-card-media]) h5,.uk-overlay-primary h5,.uk-offcanvas-bar h5,.uk-light .uk-h5,.uk-section-primary:not(.uk-preserve-color) .uk-h5,.uk-section-secondary:not(.uk-preserve-color) .uk-h5,.uk-tile-primary:not(.uk-preserve-color) .uk-h5,.uk-tile-secondary:not(.uk-preserve-color) .uk-h5,.uk-card-primary.uk-card-body .uk-h5,.uk-card-primary>:not([class*=uk-card-media]) .uk-h5,.uk-card-secondary.uk-card-body .uk-h5,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h5,.uk-overlay-primary .uk-h5,.uk-offcanvas-bar .uk-h5,.uk-light h6,.uk-section-primary:not(.uk-preserve-color) h6,.uk-section-secondary:not(.uk-preserve-color) h6,.uk-tile-primary:not(.uk-preserve-color) h6,.uk-tile-secondary:not(.uk-preserve-color) h6,.uk-card-primary.uk-card-body h6,.uk-card-primary>:not([class*=uk-card-media]) h6,.uk-card-secondary.uk-card-body h6,.uk-card-secondary>:not([class*=uk-card-media]) h6,.uk-overlay-primary h6,.uk-offcanvas-bar h6,.uk-light .uk-h6,.uk-section-primary:not(.uk-preserve-color) .uk-h6,.uk-section-secondary:not(.uk-preserve-color) .uk-h6,.uk-tile-primary:not(.uk-preserve-color) .uk-h6,.uk-tile-secondary:not(.uk-preserve-color) .uk-h6,.uk-card-primary.uk-card-body .uk-h6,.uk-card-primary>:not([class*=uk-card-media]) .uk-h6,.uk-card-secondary.uk-card-body .uk-h6,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h6,.uk-overlay-primary .uk-h6,.uk-offcanvas-bar .uk-h6,.uk-light .uk-heading-small,.uk-section-primary:not(.uk-preserve-color) .uk-heading-small,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-small,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-small,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-small,.uk-card-primary.uk-card-body .uk-heading-small,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-small,.uk-card-secondary.uk-card-body .uk-heading-small,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-small,.uk-overlay-primary .uk-heading-small,.uk-offcanvas-bar .uk-heading-small,.uk-light .uk-heading-medium,.uk-section-primary:not(.uk-preserve-color) .uk-heading-medium,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-medium,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-medium,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-medium,.uk-card-primary.uk-card-body .uk-heading-medium,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-medium,.uk-card-secondary.uk-card-body .uk-heading-medium,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-medium,.uk-overlay-primary .uk-heading-medium,.uk-offcanvas-bar .uk-heading-medium,.uk-light .uk-heading-large,.uk-section-primary:not(.uk-preserve-color) .uk-heading-large,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-large,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-large,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-large,.uk-card-primary.uk-card-body .uk-heading-large,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-large,.uk-card-secondary.uk-card-body .uk-heading-large,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-large,.uk-overlay-primary .uk-heading-large,.uk-offcanvas-bar .uk-heading-large,.uk-light .uk-heading-xlarge,.uk-section-primary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-card-primary.uk-card-body .uk-heading-xlarge,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-xlarge,.uk-card-secondary.uk-card-body .uk-heading-xlarge,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-xlarge,.uk-overlay-primary .uk-heading-xlarge,.uk-offcanvas-bar .uk-heading-xlarge,.uk-light .uk-heading-2xlarge,.uk-section-primary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-card-primary.uk-card-body .uk-heading-2xlarge,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-2xlarge,.uk-card-secondary.uk-card-body .uk-heading-2xlarge,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-2xlarge,.uk-overlay-primary .uk-heading-2xlarge,.uk-offcanvas-bar .uk-heading-2xlarge,.uk-light .uk-heading-3xlarge,.uk-section-primary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-card-primary.uk-card-body .uk-heading-3xlarge,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-3xlarge,.uk-card-secondary.uk-card-body .uk-heading-3xlarge,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-3xlarge,.uk-overlay-primary .uk-heading-3xlarge,.uk-offcanvas-bar .uk-heading-3xlarge,.uk-section-primary:not(.uk-preserve-color) h1,.uk-section-primary:not(.uk-preserve-color) .uk-h1,.uk-section-primary:not(.uk-preserve-color) h2,.uk-section-primary:not(.uk-preserve-color) .uk-h2,.uk-section-primary:not(.uk-preserve-color) .markdown h1,.markdown .uk-section-primary:not(.uk-preserve-color) h1,.uk-section-primary:not(.uk-preserve-color) h3,.uk-section-primary:not(.uk-preserve-color) .uk-h3,.uk-section-primary:not(.uk-preserve-color) .markdown h2,.markdown .uk-section-primary:not(.uk-preserve-color) h2,.uk-section-primary:not(.uk-preserve-color) h4,.uk-section-primary:not(.uk-preserve-color) .uk-h4,.uk-section-primary:not(.uk-preserve-color) .markdown h3,.markdown .uk-section-primary:not(.uk-preserve-color) h3,.uk-section-primary:not(.uk-preserve-color) h5,.uk-section-primary:not(.uk-preserve-color) .uk-h5,.uk-section-primary:not(.uk-preserve-color) h6,.uk-section-primary:not(.uk-preserve-color) .uk-h6,.uk-section-primary:not(.uk-preserve-color) .uk-heading-small,.uk-section-primary:not(.uk-preserve-color) .uk-heading-medium,.uk-section-primary:not(.uk-preserve-color) .uk-heading-large,.uk-section-primary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-section-primary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-section-primary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-section-secondary:not(.uk-preserve-color) h1,.uk-section-secondary:not(.uk-preserve-color) .uk-h1,.uk-section-secondary:not(.uk-preserve-color) h2,.uk-section-secondary:not(.uk-preserve-color) .uk-h2,.uk-section-secondary:not(.uk-preserve-color) .markdown h1,.markdown .uk-section-secondary:not(.uk-preserve-color) h1,.uk-section-secondary:not(.uk-preserve-color) h3,.uk-section-secondary:not(.uk-preserve-color) .uk-h3,.uk-section-secondary:not(.uk-preserve-color) .markdown h2,.markdown .uk-section-secondary:not(.uk-preserve-color) h2,.uk-section-secondary:not(.uk-preserve-color) h4,.uk-section-secondary:not(.uk-preserve-color) .uk-h4,.uk-section-secondary:not(.uk-preserve-color) .markdown h3,.markdown .uk-section-secondary:not(.uk-preserve-color) h3,.uk-section-secondary:not(.uk-preserve-color) h5,.uk-section-secondary:not(.uk-preserve-color) .uk-h5,.uk-section-secondary:not(.uk-preserve-color) h6,.uk-section-secondary:not(.uk-preserve-color) .uk-h6,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-small,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-medium,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-large,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-tile-primary:not(.uk-preserve-color) h1,.uk-tile-primary:not(.uk-preserve-color) .uk-h1,.uk-tile-primary:not(.uk-preserve-color) h2,.uk-tile-primary:not(.uk-preserve-color) .uk-h2,.uk-tile-primary:not(.uk-preserve-color) .markdown h1,.markdown .uk-tile-primary:not(.uk-preserve-color) h1,.uk-tile-primary:not(.uk-preserve-color) h3,.uk-tile-primary:not(.uk-preserve-color) .uk-h3,.uk-tile-primary:not(.uk-preserve-color) .markdown h2,.markdown .uk-tile-primary:not(.uk-preserve-color) h2,.uk-tile-primary:not(.uk-preserve-color) h4,.uk-tile-primary:not(.uk-preserve-color) .uk-h4,.uk-tile-primary:not(.uk-preserve-color) .markdown h3,.markdown .uk-tile-primary:not(.uk-preserve-color) h3,.uk-tile-primary:not(.uk-preserve-color) h5,.uk-tile-primary:not(.uk-preserve-color) .uk-h5,.uk-tile-primary:not(.uk-preserve-color) h6,.uk-tile-primary:not(.uk-preserve-color) .uk-h6,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-small,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-medium,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-large,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-tile-secondary:not(.uk-preserve-color) h1,.uk-tile-secondary:not(.uk-preserve-color) .uk-h1,.uk-tile-secondary:not(.uk-preserve-color) h2,.uk-tile-secondary:not(.uk-preserve-color) .uk-h2,.uk-tile-secondary:not(.uk-preserve-color) .markdown h1,.markdown .uk-tile-secondary:not(.uk-preserve-color) h1,.uk-tile-secondary:not(.uk-preserve-color) h3,.uk-tile-secondary:not(.uk-preserve-color) .uk-h3,.uk-tile-secondary:not(.uk-preserve-color) .markdown h2,.markdown .uk-tile-secondary:not(.uk-preserve-color) h2,.uk-tile-secondary:not(.uk-preserve-color) h4,.uk-tile-secondary:not(.uk-preserve-color) .uk-h4,.uk-tile-secondary:not(.uk-preserve-color) .markdown h3,.markdown .uk-tile-secondary:not(.uk-preserve-color) h3,.uk-tile-secondary:not(.uk-preserve-color) h5,.uk-tile-secondary:not(.uk-preserve-color) .uk-h5,.uk-tile-secondary:not(.uk-preserve-color) h6,.uk-tile-secondary:not(.uk-preserve-color) .uk-h6,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-small,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-medium,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-large,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-card-primary.uk-card-body h1,.uk-card-primary.uk-card-body .uk-h1,.uk-card-primary.uk-card-body h2,.uk-card-primary.uk-card-body .uk-h2,.uk-card-primary.uk-card-body .markdown h1,.markdown .uk-card-primary.uk-card-body h1,.uk-card-primary.uk-card-body h3,.uk-card-primary.uk-card-body .uk-h3,.uk-card-primary.uk-card-body .markdown h2,.markdown .uk-card-primary.uk-card-body h2,.uk-card-primary.uk-card-body h4,.uk-card-primary.uk-card-body .uk-h4,.uk-card-primary.uk-card-body .markdown h3,.markdown .uk-card-primary.uk-card-body h3,.uk-card-primary.uk-card-body h5,.uk-card-primary.uk-card-body .uk-h5,.uk-card-primary.uk-card-body h6,.uk-card-primary.uk-card-body .uk-h6,.uk-card-primary.uk-card-body .uk-heading-small,.uk-card-primary.uk-card-body .uk-heading-medium,.uk-card-primary.uk-card-body .uk-heading-large,.uk-card-primary.uk-card-body .uk-heading-xlarge,.uk-card-primary.uk-card-body .uk-heading-2xlarge,.uk-card-primary.uk-card-body .uk-heading-3xlarge,.uk-card-primary>:not([class*=uk-card-media]) h1,.uk-card-primary>:not([class*=uk-card-media]) .uk-h1,.uk-card-primary>:not([class*=uk-card-media]) h2,.uk-card-primary>:not([class*=uk-card-media]) .uk-h2,.uk-card-primary>:not([class*=uk-card-media]) .markdown h1,.markdown .uk-card-primary>:not([class*=uk-card-media]) h1,.uk-card-primary>:not([class*=uk-card-media]) h3,.uk-card-primary>:not([class*=uk-card-media]) .uk-h3,.uk-card-primary>:not([class*=uk-card-media]) .markdown h2,.markdown .uk-card-primary>:not([class*=uk-card-media]) h2,.uk-card-primary>:not([class*=uk-card-media]) h4,.uk-card-primary>:not([class*=uk-card-media]) .uk-h4,.uk-card-primary>:not([class*=uk-card-media]) .markdown h3,.markdown .uk-card-primary>:not([class*=uk-card-media]) h3,.uk-card-primary>:not([class*=uk-card-media]) h5,.uk-card-primary>:not([class*=uk-card-media]) .uk-h5,.uk-card-primary>:not([class*=uk-card-media]) h6,.uk-card-primary>:not([class*=uk-card-media]) .uk-h6,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-small,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-medium,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-large,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-xlarge,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-2xlarge,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-3xlarge,.uk-card-secondary.uk-card-body h1,.uk-card-secondary.uk-card-body .uk-h1,.uk-card-secondary.uk-card-body h2,.uk-card-secondary.uk-card-body .uk-h2,.uk-card-secondary.uk-card-body .markdown h1,.markdown .uk-card-secondary.uk-card-body h1,.uk-card-secondary.uk-card-body h3,.uk-card-secondary.uk-card-body .uk-h3,.uk-card-secondary.uk-card-body .markdown h2,.markdown .uk-card-secondary.uk-card-body h2,.uk-card-secondary.uk-card-body h4,.uk-card-secondary.uk-card-body .uk-h4,.uk-card-secondary.uk-card-body .markdown h3,.markdown .uk-card-secondary.uk-card-body h3,.uk-card-secondary.uk-card-body h5,.uk-card-secondary.uk-card-body .uk-h5,.uk-card-secondary.uk-card-body h6,.uk-card-secondary.uk-card-body .uk-h6,.uk-card-secondary.uk-card-body .uk-heading-small,.uk-card-secondary.uk-card-body .uk-heading-medium,.uk-card-secondary.uk-card-body .uk-heading-large,.uk-card-secondary.uk-card-body .uk-heading-xlarge,.uk-card-secondary.uk-card-body .uk-heading-2xlarge,.uk-card-secondary.uk-card-body .uk-heading-3xlarge,.uk-card-secondary>:not([class*=uk-card-media]) h1,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h1,.uk-card-secondary>:not([class*=uk-card-media]) h2,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h2,.uk-card-secondary>:not([class*=uk-card-media]) .markdown h1,.markdown .uk-card-secondary>:not([class*=uk-card-media]) h1,.uk-card-secondary>:not([class*=uk-card-media]) h3,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h3,.uk-card-secondary>:not([class*=uk-card-media]) .markdown h2,.markdown .uk-card-secondary>:not([class*=uk-card-media]) h2,.uk-card-secondary>:not([class*=uk-card-media]) h4,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h4,.uk-card-secondary>:not([class*=uk-card-media]) .markdown h3,.markdown .uk-card-secondary>:not([class*=uk-card-media]) h3,.uk-card-secondary>:not([class*=uk-card-media]) h5,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h5,.uk-card-secondary>:not([class*=uk-card-media]) h6,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h6,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-small,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-medium,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-large,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-xlarge,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-2xlarge,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-3xlarge,.uk-overlay-primary h1,.uk-overlay-primary .uk-h1,.uk-overlay-primary h2,.uk-overlay-primary .uk-h2,.uk-overlay-primary .markdown h1,.markdown .uk-overlay-primary h1,.uk-overlay-primary h3,.uk-overlay-primary .uk-h3,.uk-overlay-primary .markdown h2,.markdown .uk-overlay-primary h2,.uk-overlay-primary h4,.uk-overlay-primary .uk-h4,.uk-overlay-primary .markdown h3,.markdown .uk-overlay-primary h3,.uk-overlay-primary h5,.uk-overlay-primary .uk-h5,.uk-overlay-primary h6,.uk-overlay-primary .uk-h6,.uk-overlay-primary .uk-heading-small,.uk-overlay-primary .uk-heading-medium,.uk-overlay-primary .uk-heading-large,.uk-overlay-primary .uk-heading-xlarge,.uk-overlay-primary .uk-heading-2xlarge,.uk-overlay-primary .uk-heading-3xlarge,.uk-offcanvas-bar h1,.uk-offcanvas-bar .uk-h1,.uk-offcanvas-bar h2,.uk-offcanvas-bar .uk-h2,.uk-offcanvas-bar .markdown h1,.markdown .uk-offcanvas-bar h1,.uk-offcanvas-bar h3,.uk-offcanvas-bar .uk-h3,.uk-offcanvas-bar .markdown h2,.markdown .uk-offcanvas-bar h2,.uk-offcanvas-bar h4,.uk-offcanvas-bar .uk-h4,.uk-offcanvas-bar .markdown h3,.markdown .uk-offcanvas-bar h3,.uk-offcanvas-bar h5,.uk-offcanvas-bar .uk-h5,.uk-offcanvas-bar h6,.uk-offcanvas-bar .uk-h6,.uk-offcanvas-bar .uk-heading-small,.uk-offcanvas-bar .uk-heading-medium,.uk-offcanvas-bar .uk-heading-large,.uk-offcanvas-bar .uk-heading-xlarge,.uk-offcanvas-bar .uk-heading-2xlarge,.uk-offcanvas-bar .uk-heading-3xlarge{color:#fff}.uk-light blockquote,.uk-section-primary:not(.uk-preserve-color) blockquote,.uk-section-secondary:not(.uk-preserve-color) blockquote,.uk-tile-primary:not(.uk-preserve-color) blockquote,.uk-tile-secondary:not(.uk-preserve-color) blockquote,.uk-card-primary.uk-card-body blockquote,.uk-card-primary>:not([class*=uk-card-media]) blockquote,.uk-card-secondary.uk-card-body blockquote,.uk-card-secondary>:not([class*=uk-card-media]) blockquote,.uk-overlay-primary blockquote,.uk-offcanvas-bar blockquote{color:#fff}.uk-light blockquote footer,.uk-section-primary:not(.uk-preserve-color) blockquote footer,.uk-section-secondary:not(.uk-preserve-color) blockquote footer,.uk-tile-primary:not(.uk-preserve-color) blockquote footer,.uk-tile-secondary:not(.uk-preserve-color) blockquote footer,.uk-card-primary.uk-card-body blockquote footer,.uk-card-primary>:not([class*=uk-card-media]) blockquote footer,.uk-card-secondary.uk-card-body blockquote footer,.uk-card-secondary>:not([class*=uk-card-media]) blockquote footer,.uk-overlay-primary blockquote footer,.uk-offcanvas-bar blockquote footer{color:rgba(255,255,255,.7)}.uk-light hr,.uk-light .uk-hr,.uk-section-primary:not(.uk-preserve-color) hr,.uk-section-primary:not(.uk-preserve-color) .uk-hr,.uk-section-secondary:not(.uk-preserve-color) hr,.uk-section-secondary:not(.uk-preserve-color) .uk-hr,.uk-tile-primary:not(.uk-preserve-color) hr,.uk-tile-primary:not(.uk-preserve-color) .uk-hr,.uk-tile-secondary:not(.uk-preserve-color) hr,.uk-tile-secondary:not(.uk-preserve-color) .uk-hr,.uk-card-primary.uk-card-body hr,.uk-card-primary.uk-card-body .uk-hr,.uk-card-primary>:not([class*=uk-card-media]) hr,.uk-card-primary>:not([class*=uk-card-media]) .uk-hr,.uk-card-secondary.uk-card-body hr,.uk-card-secondary.uk-card-body .uk-hr,.uk-card-secondary>:not([class*=uk-card-media]) hr,.uk-card-secondary>:not([class*=uk-card-media]) .uk-hr,.uk-overlay-primary hr,.uk-overlay-primary .uk-hr,.uk-offcanvas-bar hr,.uk-offcanvas-bar .uk-hr{border-top-color:rgba(255,255,255,.2)}.uk-light :focus-visible,.uk-section-primary:not(.uk-preserve-color) :focus-visible,.uk-section-secondary:not(.uk-preserve-color) :focus-visible,.uk-tile-primary:not(.uk-preserve-color) :focus-visible,.uk-tile-secondary:not(.uk-preserve-color) :focus-visible,.uk-card-primary.uk-card-body :focus-visible,.uk-card-primary>:not([class*=uk-card-media]) :focus-visible,.uk-card-secondary.uk-card-body :focus-visible,.uk-card-secondary>:not([class*=uk-card-media]) :focus-visible,.uk-overlay-primary :focus-visible,.uk-offcanvas-bar :focus-visible{outline-color:#fff}.uk-light .uk-breadcrumb>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-card-primary.uk-card-body .uk-breadcrumb>*>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-breadcrumb>*>*,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-breadcrumb>*>*,.uk-overlay-primary .uk-breadcrumb>*>*,.uk-offcanvas-bar .uk-breadcrumb>*>*{color:rgba(255,255,255,.5)}.uk-light .uk-breadcrumb>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-card-primary.uk-card-body .uk-breadcrumb>*>:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-breadcrumb>*>:hover,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-breadcrumb>*>:hover,.uk-overlay-primary .uk-breadcrumb>*>:hover,.uk-offcanvas-bar .uk-breadcrumb>*>:hover{color:rgba(255,255,255,.7)}.uk-light .uk-breadcrumb>:last-child>*,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-card-primary.uk-card-body .uk-breadcrumb>:last-child>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-breadcrumb>:last-child>*,.uk-card-secondary.uk-card-body .uk-breadcrumb>:last-child>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-breadcrumb>:last-child>*,.uk-overlay-primary .uk-breadcrumb>:last-child>*,.uk-offcanvas-bar .uk-breadcrumb>:last-child>*{color:rgba(255,255,255,.7)}.uk-light .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary.uk-card-body .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-overlay-primary .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-offcanvas-bar .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before{color:rgba(255,255,255,.5)}.uk-light .uk-button-default,.uk-section-primary:not(.uk-preserve-color) .uk-button-default,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default,.uk-card-primary.uk-card-body .uk-button-default,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-default,.uk-card-secondary.uk-card-body .uk-button-default,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-default,.uk-overlay-primary .uk-button-default,.uk-offcanvas-bar .uk-button-default{background-color:rgba(0,0,0,0);color:#fff;border-color:rgba(255,255,255,.7)}.uk-light .uk-button-default:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:hover,.uk-card-primary.uk-card-body .uk-button-default:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-default:hover,.uk-card-secondary.uk-card-body .uk-button-default:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-default:hover,.uk-overlay-primary .uk-button-default:hover,.uk-offcanvas-bar .uk-button-default:hover{background-color:rgba(0,0,0,0);color:#fff;border-color:#fff}.uk-light .uk-button-default:active,.uk-light .uk-button-default.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-card-primary.uk-card-body .uk-button-default:active,.uk-card-primary.uk-card-body .uk-button-default.uk-active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-default:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-default.uk-active,.uk-card-secondary.uk-card-body .uk-button-default:active,.uk-card-secondary.uk-card-body .uk-button-default.uk-active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-default:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-default.uk-active,.uk-overlay-primary .uk-button-default:active,.uk-overlay-primary .uk-button-default.uk-active,.uk-offcanvas-bar .uk-button-default:active,.uk-offcanvas-bar .uk-button-default.uk-active{background-color:rgba(0,0,0,0);color:#fff;border-color:#fff}.uk-light .uk-button-primary,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary,.uk-card-primary.uk-card-body .uk-button-primary,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-primary,.uk-card-secondary.uk-card-body .uk-button-primary,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-primary,.uk-overlay-primary .uk-button-primary,.uk-offcanvas-bar .uk-button-primary{background-color:#fff;color:#666}.uk-light .uk-button-primary:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-card-primary.uk-card-body .uk-button-primary:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-primary:hover,.uk-card-secondary.uk-card-body .uk-button-primary:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-primary:hover,.uk-overlay-primary .uk-button-primary:hover,.uk-offcanvas-bar .uk-button-primary:hover{background-color:#f2f2f2;color:#666}.uk-light .uk-button-primary:active,.uk-light .uk-button-primary.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-card-primary.uk-card-body .uk-button-primary:active,.uk-card-primary.uk-card-body .uk-button-primary.uk-active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-primary:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-primary.uk-active,.uk-card-secondary.uk-card-body .uk-button-primary:active,.uk-card-secondary.uk-card-body .uk-button-primary.uk-active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-primary:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-primary.uk-active,.uk-overlay-primary .uk-button-primary:active,.uk-overlay-primary .uk-button-primary.uk-active,.uk-offcanvas-bar .uk-button-primary:active,.uk-offcanvas-bar .uk-button-primary.uk-active{background-color:#e6e6e6;color:#666}.uk-light .uk-button-secondary,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary,.uk-card-primary.uk-card-body .uk-button-secondary,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-secondary,.uk-card-secondary.uk-card-body .uk-button-secondary,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-secondary,.uk-overlay-primary .uk-button-secondary,.uk-offcanvas-bar .uk-button-secondary{background-color:#fff;color:#666}.uk-light .uk-button-secondary:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-card-primary.uk-card-body .uk-button-secondary:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-secondary:hover,.uk-card-secondary.uk-card-body .uk-button-secondary:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-secondary:hover,.uk-overlay-primary .uk-button-secondary:hover,.uk-offcanvas-bar .uk-button-secondary:hover{background-color:#f2f2f2;color:#666}.uk-light .uk-button-secondary:active,.uk-light .uk-button-secondary.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-card-primary.uk-card-body .uk-button-secondary:active,.uk-card-primary.uk-card-body .uk-button-secondary.uk-active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-secondary:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-secondary.uk-active,.uk-card-secondary.uk-card-body .uk-button-secondary:active,.uk-card-secondary.uk-card-body .uk-button-secondary.uk-active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-secondary:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-secondary.uk-active,.uk-overlay-primary .uk-button-secondary:active,.uk-overlay-primary .uk-button-secondary.uk-active,.uk-offcanvas-bar .uk-button-secondary:active,.uk-offcanvas-bar .uk-button-secondary.uk-active{background-color:#e6e6e6;color:#666}.uk-light .uk-button-text,.uk-section-primary:not(.uk-preserve-color) .uk-button-text,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text,.uk-card-primary.uk-card-body .uk-button-text,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-text,.uk-card-secondary.uk-card-body .uk-button-text,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-text,.uk-overlay-primary .uk-button-text,.uk-offcanvas-bar .uk-button-text{color:#fff}.uk-light .uk-button-text::before,.uk-section-primary:not(.uk-preserve-color) .uk-button-text::before,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text::before,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text::before,.uk-card-primary.uk-card-body .uk-button-text::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-text::before,.uk-card-secondary.uk-card-body .uk-button-text::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-text::before,.uk-overlay-primary .uk-button-text::before,.uk-offcanvas-bar .uk-button-text::before{border-bottom-color:#fff}.uk-light .uk-button-text:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:hover,.uk-card-primary.uk-card-body .uk-button-text:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-text:hover,.uk-card-secondary.uk-card-body .uk-button-text:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-text:hover,.uk-overlay-primary .uk-button-text:hover,.uk-offcanvas-bar .uk-button-text:hover{color:#fff}.uk-light .uk-button-text:disabled,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-card-primary.uk-card-body .uk-button-text:disabled,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-text:disabled,.uk-card-secondary.uk-card-body .uk-button-text:disabled,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-text:disabled,.uk-overlay-primary .uk-button-text:disabled,.uk-offcanvas-bar .uk-button-text:disabled{color:rgba(255,255,255,.5)}.uk-light .uk-button-link,.uk-section-primary:not(.uk-preserve-color) .uk-button-link,.uk-section-secondary:not(.uk-preserve-color) .uk-button-link,.uk-tile-primary:not(.uk-preserve-color) .uk-button-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link,.uk-card-primary.uk-card-body .uk-button-link,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-link,.uk-card-secondary.uk-card-body .uk-button-link,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-link,.uk-overlay-primary .uk-button-link,.uk-offcanvas-bar .uk-button-link{color:#fff}.uk-light .uk-button-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link:hover,.uk-card-primary.uk-card-body .uk-button-link:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-link:hover,.uk-card-secondary.uk-card-body .uk-button-link:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-link:hover,.uk-overlay-primary .uk-button-link:hover,.uk-offcanvas-bar .uk-button-link:hover{color:rgba(255,255,255,.5)}.uk-light.uk-card-badge,.uk-section-primary:not(.uk-preserve-color).uk-card-badge,.uk-section-secondary:not(.uk-preserve-color).uk-card-badge,.uk-tile-primary:not(.uk-preserve-color).uk-card-badge,.uk-tile-secondary:not(.uk-preserve-color).uk-card-badge,.uk-card-primary.uk-card-body.uk-card-badge,.uk-card-primary>:not([class*=uk-card-media]).uk-card-badge,.uk-card-secondary.uk-card-body.uk-card-badge,.uk-card-secondary>:not([class*=uk-card-media]).uk-card-badge,.uk-overlay-primary.uk-card-badge,.uk-offcanvas-bar.uk-card-badge{background-color:#fff;color:#666}.uk-light .uk-close,.uk-section-primary:not(.uk-preserve-color) .uk-close,.uk-section-secondary:not(.uk-preserve-color) .uk-close,.uk-tile-primary:not(.uk-preserve-color) .uk-close,.uk-tile-secondary:not(.uk-preserve-color) .uk-close,.uk-card-primary.uk-card-body .uk-close,.uk-card-primary>:not([class*=uk-card-media]) .uk-close,.uk-card-secondary.uk-card-body .uk-close,.uk-card-secondary>:not([class*=uk-card-media]) .uk-close,.uk-overlay-primary .uk-close,.uk-offcanvas-bar .uk-close{color:rgba(255,255,255,.5)}.uk-light .uk-close:hover,.uk-section-primary:not(.uk-preserve-color) .uk-close:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-close:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-close:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-close:hover,.uk-card-primary.uk-card-body .uk-close:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-close:hover,.uk-card-secondary.uk-card-body .uk-close:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-close:hover,.uk-overlay-primary .uk-close:hover,.uk-offcanvas-bar .uk-close:hover{color:rgba(255,255,255,.7)}.uk-light .uk-column-divider,.uk-section-primary:not(.uk-preserve-color) .uk-column-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-column-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-column-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-column-divider,.uk-card-primary.uk-card-body .uk-column-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-column-divider,.uk-card-secondary.uk-card-body .uk-column-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-column-divider,.uk-overlay-primary .uk-column-divider,.uk-offcanvas-bar .uk-column-divider{column-rule-color:rgba(255,255,255,.2)}.uk-light .uk-divider-icon,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon,.uk-card-primary.uk-card-body .uk-divider-icon,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-icon,.uk-card-secondary.uk-card-body .uk-divider-icon,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-icon,.uk-overlay-primary .uk-divider-icon,.uk-offcanvas-bar .uk-divider-icon{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22rgba(255,255,255,.2)%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-light .uk-divider-icon::before,.uk-light .uk-divider-icon::after,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-card-primary.uk-card-body .uk-divider-icon::before,.uk-card-primary.uk-card-body .uk-divider-icon::after,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-icon::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-icon::after,.uk-card-secondary.uk-card-body .uk-divider-icon::before,.uk-card-secondary.uk-card-body .uk-divider-icon::after,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-icon::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-icon::after,.uk-overlay-primary .uk-divider-icon::before,.uk-overlay-primary .uk-divider-icon::after,.uk-offcanvas-bar .uk-divider-icon::before,.uk-offcanvas-bar .uk-divider-icon::after{border-bottom-color:rgba(255,255,255,.2)}.uk-light .uk-divider-small::after,.uk-section-primary:not(.uk-preserve-color) .uk-divider-small::after,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-small::after,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-small::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-small::after,.uk-card-primary.uk-card-body .uk-divider-small::after,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-small::after,.uk-card-secondary.uk-card-body .uk-divider-small::after,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-small::after,.uk-overlay-primary .uk-divider-small::after,.uk-offcanvas-bar .uk-divider-small::after{border-top-color:rgba(255,255,255,.2)}.uk-light .uk-divider-vertical,.uk-section-primary:not(.uk-preserve-color) .uk-divider-vertical,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-vertical,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-vertical,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-vertical,.uk-card-primary.uk-card-body .uk-divider-vertical,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-vertical,.uk-card-secondary.uk-card-body .uk-divider-vertical,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-vertical,.uk-overlay-primary .uk-divider-vertical,.uk-offcanvas-bar .uk-divider-vertical{border-left-color:rgba(255,255,255,.2)}.uk-light .uk-dotnav>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-card-primary.uk-card-body .uk-dotnav>*>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-dotnav>*>*,.uk-card-secondary.uk-card-body .uk-dotnav>*>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-dotnav>*>*,.uk-overlay-primary .uk-dotnav>*>*,.uk-offcanvas-bar .uk-dotnav>*>*{background-color:rgba(0,0,0,0);border-color:rgba(255,255,255,.9)}.uk-light .uk-dotnav>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-card-primary.uk-card-body .uk-dotnav>*>:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-dotnav>*>:hover,.uk-card-secondary.uk-card-body .uk-dotnav>*>:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-dotnav>*>:hover,.uk-overlay-primary .uk-dotnav>*>:hover,.uk-offcanvas-bar .uk-dotnav>*>:hover{background-color:rgba(255,255,255,.9);border-color:rgba(0,0,0,0)}.uk-light .uk-dotnav>*>:active,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-card-primary.uk-card-body .uk-dotnav>*>:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-dotnav>*>:active,.uk-card-secondary.uk-card-body .uk-dotnav>*>:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-dotnav>*>:active,.uk-overlay-primary .uk-dotnav>*>:active,.uk-offcanvas-bar .uk-dotnav>*>:active{background-color:rgba(255,255,255,.5);border-color:rgba(0,0,0,0)}.uk-light .uk-dotnav>.uk-active>*,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-card-primary.uk-card-body .uk-dotnav>.uk-active>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-dotnav>.uk-active>*,.uk-card-secondary.uk-card-body .uk-dotnav>.uk-active>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-dotnav>.uk-active>*,.uk-overlay-primary .uk-dotnav>.uk-active>*,.uk-offcanvas-bar .uk-dotnav>.uk-active>*{background-color:rgba(255,255,255,.9);border-color:rgba(0,0,0,0)}.uk-light .uk-input,.uk-light .uk-select,.uk-light .uk-textarea,.uk-section-primary:not(.uk-preserve-color) .uk-input,.uk-section-primary:not(.uk-preserve-color) .uk-select,.uk-section-primary:not(.uk-preserve-color) .uk-textarea,.uk-section-secondary:not(.uk-preserve-color) .uk-input,.uk-section-secondary:not(.uk-preserve-color) .uk-select,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea,.uk-tile-primary:not(.uk-preserve-color) .uk-input,.uk-tile-primary:not(.uk-preserve-color) .uk-select,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea,.uk-tile-secondary:not(.uk-preserve-color) .uk-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-select,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea,.uk-card-primary.uk-card-body .uk-input,.uk-card-primary.uk-card-body .uk-select,.uk-card-primary.uk-card-body .uk-textarea,.uk-card-primary>:not([class*=uk-card-media]) .uk-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-select,.uk-card-primary>:not([class*=uk-card-media]) .uk-textarea,.uk-card-secondary.uk-card-body .uk-input,.uk-card-secondary.uk-card-body .uk-select,.uk-card-secondary.uk-card-body .uk-textarea,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-select,.uk-card-secondary>:not([class*=uk-card-media]) .uk-textarea,.uk-overlay-primary .uk-input,.uk-overlay-primary .uk-select,.uk-overlay-primary .uk-textarea,.uk-offcanvas-bar .uk-input,.uk-offcanvas-bar .uk-select,.uk-offcanvas-bar .uk-textarea{background-color:rgba(255,255,255,.1);color:rgba(255,255,255,.7);background-clip:padding-box;border-color:rgba(255,255,255,.2)}.uk-light .uk-input:focus,.uk-light .uk-select:focus,.uk-light .uk-textarea:focus,.uk-section-primary:not(.uk-preserve-color) .uk-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-select:focus,.uk-section-primary:not(.uk-preserve-color) .uk-textarea:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-select:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-select:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-select:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea:focus,.uk-card-primary.uk-card-body .uk-input:focus,.uk-card-primary.uk-card-body .uk-select:focus,.uk-card-primary.uk-card-body .uk-textarea:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-input:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-select:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-textarea:focus,.uk-card-secondary.uk-card-body .uk-input:focus,.uk-card-secondary.uk-card-body .uk-select:focus,.uk-card-secondary.uk-card-body .uk-textarea:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-select:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-textarea:focus,.uk-overlay-primary .uk-input:focus,.uk-overlay-primary .uk-select:focus,.uk-overlay-primary .uk-textarea:focus,.uk-offcanvas-bar .uk-input:focus,.uk-offcanvas-bar .uk-select:focus,.uk-offcanvas-bar .uk-textarea:focus{background-color:rgba(255,255,255,.15);color:rgba(255,255,255,.7);border-color:rgba(255,255,255,.7)}.uk-light .uk-input::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-input::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-input::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-input::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-input::placeholder,.uk-card-primary.uk-card-body .uk-input::placeholder,.uk-card-primary>:not([class*=uk-card-media]) .uk-input::placeholder,.uk-card-secondary.uk-card-body .uk-input::placeholder,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input::placeholder,.uk-overlay-primary .uk-input::placeholder,.uk-offcanvas-bar .uk-input::placeholder{color:rgba(255,255,255,.5)}.uk-light .uk-textarea::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-card-primary.uk-card-body .uk-textarea::placeholder,.uk-card-primary>:not([class*=uk-card-media]) .uk-textarea::placeholder,.uk-card-secondary.uk-card-body .uk-textarea::placeholder,.uk-card-secondary>:not([class*=uk-card-media]) .uk-textarea::placeholder,.uk-overlay-primary .uk-textarea::placeholder,.uk-offcanvas-bar .uk-textarea::placeholder{color:rgba(255,255,255,.5)}.uk-light .uk-select:not([multiple]):not([size]),.uk-section-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-section-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-tile-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-tile-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-card-primary.uk-card-body .uk-select:not([multiple]):not([size]),.uk-card-primary>:not([class*=uk-card-media]) .uk-select:not([multiple]):not([size]),.uk-card-secondary.uk-card-body .uk-select:not([multiple]):not([size]),.uk-card-secondary>:not([class*=uk-card-media]) .uk-select:not([multiple]):not([size]),.uk-overlay-primary .uk-select:not([multiple]):not([size]),.uk-offcanvas-bar .uk-select:not([multiple]):not([size]){background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba(255,255,255,.7)%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba(255,255,255,.7)%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-light .uk-input[list]:hover,.uk-light .uk-input[list]:focus,.uk-section-primary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-section-primary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-card-primary.uk-card-body .uk-input[list]:hover,.uk-card-primary.uk-card-body .uk-input[list]:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-input[list]:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-input[list]:focus,.uk-card-secondary.uk-card-body .uk-input[list]:hover,.uk-card-secondary.uk-card-body .uk-input[list]:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input[list]:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input[list]:focus,.uk-overlay-primary .uk-input[list]:hover,.uk-overlay-primary .uk-input[list]:focus,.uk-offcanvas-bar .uk-input[list]:hover,.uk-offcanvas-bar .uk-input[list]:focus{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba(255,255,255,.7)%22%20points%3D%2212%2012%208%206%2016%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-light .uk-radio,.uk-light .uk-checkbox,.uk-section-primary:not(.uk-preserve-color) .uk-radio,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox,.uk-section-secondary:not(.uk-preserve-color) .uk-radio,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox,.uk-tile-primary:not(.uk-preserve-color) .uk-radio,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox,.uk-card-primary.uk-card-body .uk-radio,.uk-card-primary.uk-card-body .uk-checkbox,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox,.uk-card-secondary.uk-card-body .uk-radio,.uk-card-secondary.uk-card-body .uk-checkbox,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox,.uk-overlay-primary .uk-radio,.uk-overlay-primary .uk-checkbox,.uk-offcanvas-bar .uk-radio,.uk-offcanvas-bar .uk-checkbox{background-color:rgba(255,255,255,.1);border-color:rgba(255,255,255,.2)}.uk-light .uk-radio:focus,.uk-light .uk-checkbox:focus,.uk-section-primary:not(.uk-preserve-color) .uk-radio:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-card-primary.uk-card-body .uk-radio:focus,.uk-card-primary.uk-card-body .uk-checkbox:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:focus,.uk-card-secondary.uk-card-body .uk-radio:focus,.uk-card-secondary.uk-card-body .uk-checkbox:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:focus,.uk-overlay-primary .uk-radio:focus,.uk-overlay-primary .uk-checkbox:focus,.uk-offcanvas-bar .uk-radio:focus,.uk-offcanvas-bar .uk-checkbox:focus{background-color:rgba(255,255,255,.15);border-color:rgba(255,255,255,.7)}.uk-light .uk-radio:checked,.uk-light .uk-checkbox:checked,.uk-light .uk-checkbox:indeterminate,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-card-primary.uk-card-body .uk-radio:checked,.uk-card-primary.uk-card-body .uk-checkbox:checked,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio:checked,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:checked,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate,.uk-card-secondary.uk-card-body .uk-radio:checked,.uk-card-secondary.uk-card-body .uk-checkbox:checked,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio:checked,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:checked,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate,.uk-overlay-primary .uk-radio:checked,.uk-overlay-primary .uk-checkbox:checked,.uk-overlay-primary .uk-checkbox:indeterminate,.uk-offcanvas-bar .uk-radio:checked,.uk-offcanvas-bar .uk-checkbox:checked,.uk-offcanvas-bar .uk-checkbox:indeterminate{background-color:#fff;border-color:#fff}.uk-light .uk-radio:checked:focus,.uk-light .uk-checkbox:checked:focus,.uk-light .uk-checkbox:indeterminate:focus,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-card-primary.uk-card-body .uk-radio:checked:focus,.uk-card-primary.uk-card-body .uk-checkbox:checked:focus,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio:checked:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:checked:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate:focus,.uk-card-secondary.uk-card-body .uk-radio:checked:focus,.uk-card-secondary.uk-card-body .uk-checkbox:checked:focus,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio:checked:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:checked:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate:focus,.uk-overlay-primary .uk-radio:checked:focus,.uk-overlay-primary .uk-checkbox:checked:focus,.uk-overlay-primary .uk-checkbox:indeterminate:focus,.uk-offcanvas-bar .uk-radio:checked:focus,.uk-offcanvas-bar .uk-checkbox:checked:focus,.uk-offcanvas-bar .uk-checkbox:indeterminate:focus{background-color:#fff}.uk-light .uk-radio:checked,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-card-primary.uk-card-body .uk-radio:checked,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio:checked,.uk-card-secondary.uk-card-body .uk-radio:checked,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio:checked,.uk-overlay-primary .uk-radio:checked,.uk-offcanvas-bar .uk-radio:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23666%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-checkbox:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-card-primary.uk-card-body .uk-checkbox:checked,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:checked,.uk-card-secondary.uk-card-body .uk-checkbox:checked,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:checked,.uk-overlay-primary .uk-checkbox:checked,.uk-offcanvas-bar .uk-checkbox:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-light .uk-checkbox:indeterminate,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate,.uk-overlay-primary .uk-checkbox:indeterminate,.uk-offcanvas-bar .uk-checkbox:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-form-label,.uk-section-primary:not(.uk-preserve-color) .uk-form-label,.uk-section-secondary:not(.uk-preserve-color) .uk-form-label,.uk-tile-primary:not(.uk-preserve-color) .uk-form-label,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-label,.uk-card-primary.uk-card-body .uk-form-label,.uk-card-primary>:not([class*=uk-card-media]) .uk-form-label,.uk-card-secondary.uk-card-body .uk-form-label,.uk-card-secondary>:not([class*=uk-card-media]) .uk-form-label,.uk-overlay-primary .uk-form-label,.uk-offcanvas-bar .uk-form-label{color:#fff}.uk-light .uk-form-icon,.uk-section-primary:not(.uk-preserve-color) .uk-form-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-form-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-form-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-icon,.uk-card-primary.uk-card-body .uk-form-icon,.uk-card-primary>:not([class*=uk-card-media]) .uk-form-icon,.uk-card-secondary.uk-card-body .uk-form-icon,.uk-card-secondary>:not([class*=uk-card-media]) .uk-form-icon,.uk-overlay-primary .uk-form-icon,.uk-offcanvas-bar .uk-form-icon{color:rgba(255,255,255,.5)}.uk-light .uk-form-icon:hover,.uk-section-primary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-card-primary.uk-card-body .uk-form-icon:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-form-icon:hover,.uk-card-secondary.uk-card-body .uk-form-icon:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-form-icon:hover,.uk-overlay-primary .uk-form-icon:hover,.uk-offcanvas-bar .uk-form-icon:hover{color:rgba(255,255,255,.7)}.uk-light .uk-grid-divider>:not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-primary.uk-card-body .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-grid-divider>:not(.uk-first-column)::before,.uk-overlay-primary .uk-grid-divider>:not(.uk-first-column)::before,.uk-offcanvas-bar .uk-grid-divider>:not(.uk-first-column)::before{border-left-color:rgba(255,255,255,.2)}.uk-light .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-primary.uk-card-body .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-secondary.uk-card-body .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-overlay-primary .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-offcanvas-bar .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{border-top-color:rgba(255,255,255,.2)}.uk-light .uk-heading-divider,.uk-section-primary:not(.uk-preserve-color) .uk-heading-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-divider,.uk-card-primary.uk-card-body .uk-heading-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-divider,.uk-card-secondary.uk-card-body .uk-heading-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-divider,.uk-overlay-primary .uk-heading-divider,.uk-offcanvas-bar .uk-heading-divider{border-bottom-color:rgba(255,255,255,.2)}.uk-light .uk-heading-bullet::before,.uk-section-primary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-card-primary.uk-card-body .uk-heading-bullet::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-bullet::before,.uk-card-secondary.uk-card-body .uk-heading-bullet::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-bullet::before,.uk-overlay-primary .uk-heading-bullet::before,.uk-offcanvas-bar .uk-heading-bullet::before{border-left-color:rgba(255,255,255,.2)}.uk-light .uk-heading-line>::before,.uk-light .uk-heading-line>::after,.uk-section-primary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-section-primary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-card-primary.uk-card-body .uk-heading-line>::before,.uk-card-primary.uk-card-body .uk-heading-line>::after,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-line>::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-line>::after,.uk-card-secondary.uk-card-body .uk-heading-line>::before,.uk-card-secondary.uk-card-body .uk-heading-line>::after,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-line>::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-line>::after,.uk-overlay-primary .uk-heading-line>::before,.uk-overlay-primary .uk-heading-line>::after,.uk-offcanvas-bar .uk-heading-line>::before,.uk-offcanvas-bar .uk-heading-line>::after{border-bottom-color:rgba(255,255,255,.2)}.uk-light .uk-icon-link,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link,.uk-card-primary.uk-card-body .uk-icon-link,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-link,.uk-card-secondary.uk-card-body .uk-icon-link,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-link,.uk-overlay-primary .uk-icon-link,.uk-offcanvas-bar .uk-icon-link{color:rgba(255,255,255,.5)}.uk-light .uk-icon-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-card-primary.uk-card-body .uk-icon-link:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-link:hover,.uk-card-secondary.uk-card-body .uk-icon-link:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-link:hover,.uk-overlay-primary .uk-icon-link:hover,.uk-offcanvas-bar .uk-icon-link:hover{color:rgba(255,255,255,.7)}.uk-light .uk-icon-link:active,.uk-light .uk-active>.uk-icon-link,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:active,.uk-section-primary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:active,.uk-section-secondary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:active,.uk-tile-primary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-card-primary.uk-card-body .uk-icon-link:active,.uk-card-primary.uk-card-body .uk-active>.uk-icon-link,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-link:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-active>.uk-icon-link,.uk-card-secondary.uk-card-body .uk-icon-link:active,.uk-card-secondary.uk-card-body .uk-active>.uk-icon-link,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-link:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-active>.uk-icon-link,.uk-overlay-primary .uk-icon-link:active,.uk-overlay-primary .uk-active>.uk-icon-link,.uk-offcanvas-bar .uk-icon-link:active,.uk-offcanvas-bar .uk-active>.uk-icon-link{color:rgba(255,255,255,.7)}.uk-light .uk-icon-button,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button,.uk-card-primary.uk-card-body .uk-icon-button,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-button,.uk-card-secondary.uk-card-body .uk-icon-button,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-button,.uk-overlay-primary .uk-icon-button,.uk-offcanvas-bar .uk-icon-button{background-color:rgba(255,255,255,.1);color:rgba(255,255,255,.5)}.uk-light .uk-icon-button:hover,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-card-primary.uk-card-body .uk-icon-button:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-button:hover,.uk-card-secondary.uk-card-body .uk-icon-button:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-button:hover,.uk-overlay-primary .uk-icon-button:hover,.uk-offcanvas-bar .uk-icon-button:hover{background-color:rgba(255,255,255,.15);color:rgba(255,255,255,.7)}.uk-light .uk-icon-button:active,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:active,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:active,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:active,.uk-card-primary.uk-card-body .uk-icon-button:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-button:active,.uk-card-secondary.uk-card-body .uk-icon-button:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-button:active,.uk-overlay-primary .uk-icon-button:active,.uk-offcanvas-bar .uk-icon-button:active{background-color:rgba(255,255,255,.2);color:rgba(255,255,255,.7)}.uk-light .uk-iconnav>*>a,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-card-primary.uk-card-body .uk-iconnav>*>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-iconnav>*>a,.uk-card-secondary.uk-card-body .uk-iconnav>*>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-iconnav>*>a,.uk-overlay-primary .uk-iconnav>*>a,.uk-offcanvas-bar .uk-iconnav>*>a{color:rgba(255,255,255,.5)}.uk-light .uk-iconnav>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-card-primary.uk-card-body .uk-iconnav>*>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-iconnav>*>a:hover,.uk-card-secondary.uk-card-body .uk-iconnav>*>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-iconnav>*>a:hover,.uk-overlay-primary .uk-iconnav>*>a:hover,.uk-offcanvas-bar .uk-iconnav>*>a:hover{color:rgba(255,255,255,.7)}.uk-light .uk-iconnav>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-card-primary.uk-card-body .uk-iconnav>.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-iconnav>.uk-active>a,.uk-card-secondary.uk-card-body .uk-iconnav>.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-iconnav>.uk-active>a,.uk-overlay-primary .uk-iconnav>.uk-active>a,.uk-offcanvas-bar .uk-iconnav>.uk-active>a{color:rgba(255,255,255,.7)}.uk-light .uk-label,.uk-section-primary:not(.uk-preserve-color) .uk-label,.uk-section-secondary:not(.uk-preserve-color) .uk-label,.uk-tile-primary:not(.uk-preserve-color) .uk-label,.uk-tile-secondary:not(.uk-preserve-color) .uk-label,.uk-card-primary.uk-card-body .uk-label,.uk-card-primary>:not([class*=uk-card-media]) .uk-label,.uk-card-secondary.uk-card-body .uk-label,.uk-card-secondary>:not([class*=uk-card-media]) .uk-label,.uk-overlay-primary .uk-label,.uk-offcanvas-bar .uk-label{background-color:#fff;color:#666}.uk-light a.uk-link-muted,.uk-light .uk-link-muted a,.uk-section-primary:not(.uk-preserve-color) a.uk-link-muted,.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-muted,.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-muted,.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-muted,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a,.uk-card-primary.uk-card-body a.uk-link-muted,.uk-card-primary.uk-card-body .uk-link-muted a,.uk-card-primary>:not([class*=uk-card-media]) a.uk-link-muted,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-muted a,.uk-card-secondary.uk-card-body a.uk-link-muted,.uk-card-secondary.uk-card-body .uk-link-muted a,.uk-card-secondary>:not([class*=uk-card-media]) a.uk-link-muted,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-muted a,.uk-overlay-primary a.uk-link-muted,.uk-overlay-primary .uk-link-muted a,.uk-offcanvas-bar a.uk-link-muted,.uk-offcanvas-bar .uk-link-muted a{color:rgba(255,255,255,.5)}.uk-light a.uk-link-muted:hover,.uk-light .uk-link-muted a:hover,.uk-light .uk-link-toggle:hover .uk-link-muted,.uk-section-primary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-card-primary.uk-card-body a.uk-link-muted:hover,.uk-card-primary.uk-card-body .uk-link-muted a:hover,.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-muted,.uk-card-primary>:not([class*=uk-card-media]) a.uk-link-muted:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-muted a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-muted,.uk-card-secondary.uk-card-body a.uk-link-muted:hover,.uk-card-secondary.uk-card-body .uk-link-muted a:hover,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-muted,.uk-card-secondary>:not([class*=uk-card-media]) a.uk-link-muted:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-muted a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-muted,.uk-overlay-primary a.uk-link-muted:hover,.uk-overlay-primary .uk-link-muted a:hover,.uk-overlay-primary .uk-link-toggle:hover .uk-link-muted,.uk-offcanvas-bar a.uk-link-muted:hover,.uk-offcanvas-bar .uk-link-muted a:hover,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-muted{color:rgba(255,255,255,.7)}.uk-light a.uk-link-text:hover,.uk-light .uk-link-text a:hover,.uk-light .uk-link-toggle:hover .uk-link-text,.uk-section-primary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-card-primary.uk-card-body a.uk-link-text:hover,.uk-card-primary.uk-card-body .uk-link-text a:hover,.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-text,.uk-card-primary>:not([class*=uk-card-media]) a.uk-link-text:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-text a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-text,.uk-card-secondary.uk-card-body a.uk-link-text:hover,.uk-card-secondary.uk-card-body .uk-link-text a:hover,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-text,.uk-card-secondary>:not([class*=uk-card-media]) a.uk-link-text:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-text a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-text,.uk-overlay-primary a.uk-link-text:hover,.uk-overlay-primary .uk-link-text a:hover,.uk-overlay-primary .uk-link-toggle:hover .uk-link-text,.uk-offcanvas-bar a.uk-link-text:hover,.uk-offcanvas-bar .uk-link-text a:hover,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-text{color:rgba(255,255,255,.5)}.uk-light a.uk-link-heading:hover,.uk-light .uk-link-heading a:hover,.uk-light .uk-link-toggle:hover .uk-link-heading,.uk-section-primary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-card-primary.uk-card-body a.uk-link-heading:hover,.uk-card-primary.uk-card-body .uk-link-heading a:hover,.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-heading,.uk-card-primary>:not([class*=uk-card-media]) a.uk-link-heading:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-heading a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-heading,.uk-card-secondary.uk-card-body a.uk-link-heading:hover,.uk-card-secondary.uk-card-body .uk-link-heading a:hover,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-heading,.uk-card-secondary>:not([class*=uk-card-media]) a.uk-link-heading:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-heading a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-heading,.uk-overlay-primary a.uk-link-heading:hover,.uk-overlay-primary .uk-link-heading a:hover,.uk-overlay-primary .uk-link-toggle:hover .uk-link-heading,.uk-offcanvas-bar a.uk-link-heading:hover,.uk-offcanvas-bar .uk-link-heading a:hover,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-heading{color:#fff}.uk-light .uk-list-muted>::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-muted>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-muted>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-muted>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-muted>::before,.uk-card-primary.uk-card-body .uk-list-muted>::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-muted>::before,.uk-card-secondary.uk-card-body .uk-list-muted>::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-muted>::before,.uk-overlay-primary .uk-list-muted>::before,.uk-offcanvas-bar .uk-list-muted>::before{color:rgba(255,255,255,.5) !important}.uk-light .uk-list-emphasis>::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-emphasis>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-emphasis>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-emphasis>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-emphasis>::before,.uk-card-primary.uk-card-body .uk-list-emphasis>::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-emphasis>::before,.uk-card-secondary.uk-card-body .uk-list-emphasis>::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-emphasis>::before,.uk-overlay-primary .uk-list-emphasis>::before,.uk-offcanvas-bar .uk-list-emphasis>::before{color:#fff !important}.uk-light .uk-list-primary>::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-primary>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-primary>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-primary>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-primary>::before,.uk-card-primary.uk-card-body .uk-list-primary>::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-primary>::before,.uk-card-secondary.uk-card-body .uk-list-primary>::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-primary>::before,.uk-overlay-primary .uk-list-primary>::before,.uk-offcanvas-bar .uk-list-primary>::before{color:#fff !important}.uk-light .uk-list-secondary>::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-secondary>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-secondary>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-secondary>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-secondary>::before,.uk-card-primary.uk-card-body .uk-list-secondary>::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-secondary>::before,.uk-card-secondary.uk-card-body .uk-list-secondary>::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-secondary>::before,.uk-overlay-primary .uk-list-secondary>::before,.uk-offcanvas-bar .uk-list-secondary>::before{color:#fff !important}.uk-light .uk-list-bullet>::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-bullet>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-bullet>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-bullet>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-bullet>::before,.uk-card-primary.uk-card-body .uk-list-bullet>::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-bullet>::before,.uk-card-secondary.uk-card-body .uk-list-bullet>::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-bullet>::before,.uk-overlay-primary .uk-list-bullet>::before,.uk-offcanvas-bar .uk-list-bullet>::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22rgba(255,255,255,.7)%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-list-divider>:nth-child(n+2),.uk-section-primary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2),.uk-section-secondary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2),.uk-tile-primary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2),.uk-card-primary.uk-card-body .uk-list-divider>:nth-child(n+2),.uk-card-primary>:not([class*=uk-card-media]) .uk-list-divider>:nth-child(n+2),.uk-card-secondary.uk-card-body .uk-list-divider>:nth-child(n+2),.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-divider>:nth-child(n+2),.uk-overlay-primary .uk-list-divider>:nth-child(n+2),.uk-offcanvas-bar .uk-list-divider>:nth-child(n+2){border-top-color:rgba(255,255,255,.2)}.uk-light .uk-list-striped>*:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-list-striped>*:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped>*:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped>*:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped>*:nth-of-type(odd),.uk-card-primary.uk-card-body .uk-list-striped>*:nth-of-type(odd),.uk-card-primary>:not([class*=uk-card-media]) .uk-list-striped>*:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-list-striped>*:nth-of-type(odd),.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-striped>*:nth-of-type(odd),.uk-overlay-primary .uk-list-striped>*:nth-of-type(odd),.uk-offcanvas-bar .uk-list-striped>*:nth-of-type(odd){border-top-color:rgba(255,255,255,.2);border-bottom-color:rgba(255,255,255,.2)}.uk-light .uk-list-striped>:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-card-primary.uk-card-body .uk-list-striped>:nth-of-type(odd),.uk-card-primary>:not([class*=uk-card-media]) .uk-list-striped>:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-list-striped>:nth-of-type(odd),.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-striped>:nth-of-type(odd),.uk-overlay-primary .uk-list-striped>:nth-of-type(odd),.uk-offcanvas-bar .uk-list-striped>:nth-of-type(odd){background-color:rgba(255,255,255,.1)}.uk-light .uk-marker,.uk-section-primary:not(.uk-preserve-color) .uk-marker,.uk-section-secondary:not(.uk-preserve-color) .uk-marker,.uk-tile-primary:not(.uk-preserve-color) .uk-marker,.uk-tile-secondary:not(.uk-preserve-color) .uk-marker,.uk-card-primary.uk-card-body .uk-marker,.uk-card-primary>:not([class*=uk-card-media]) .uk-marker,.uk-card-secondary.uk-card-body .uk-marker,.uk-card-secondary>:not([class*=uk-card-media]) .uk-marker,.uk-overlay-primary .uk-marker,.uk-offcanvas-bar .uk-marker{background:#f8f8f8;color:#666}.uk-light .uk-marker:hover,.uk-section-primary:not(.uk-preserve-color) .uk-marker:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-marker:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-marker:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-marker:hover,.uk-card-primary.uk-card-body .uk-marker:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-marker:hover,.uk-card-secondary.uk-card-body .uk-marker:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-marker:hover,.uk-overlay-primary .uk-marker:hover,.uk-offcanvas-bar .uk-marker:hover{color:#666}.uk-light .uk-nav-default>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-card-primary.uk-card-body .uk-nav-default>li>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default>li>a,.uk-card-secondary.uk-card-body .uk-nav-default>li>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default>li>a,.uk-overlay-primary .uk-nav-default>li>a,.uk-offcanvas-bar .uk-nav-default>li>a{color:rgba(255,255,255,.5)}.uk-light .uk-nav-default>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-card-primary.uk-card-body .uk-nav-default>li>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-default>li>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default>li>a:hover,.uk-overlay-primary .uk-nav-default>li>a:hover,.uk-offcanvas-bar .uk-nav-default>li>a:hover{color:rgba(255,255,255,.7)}.uk-light .uk-nav-default>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-default>li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-default>li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default>li.uk-active>a,.uk-overlay-primary .uk-nav-default>li.uk-active>a,.uk-offcanvas-bar .uk-nav-default>li.uk-active>a{color:#fff}.uk-light .uk-nav-default .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-header,.uk-overlay-primary .uk-nav-default .uk-nav-header,.uk-offcanvas-bar .uk-nav-default .uk-nav-header{color:#fff}.uk-light .uk-nav-default .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-divider,.uk-overlay-primary .uk-nav-default .uk-nav-divider,.uk-offcanvas-bar .uk-nav-default .uk-nav-divider{border-top-color:rgba(255,255,255,.2)}.uk-light .uk-nav-default .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub a,.uk-overlay-primary .uk-nav-default .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a{color:rgba(255,255,255,.5)}.uk-light .uk-nav-default .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-default .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a:hover{color:rgba(255,255,255,.7)}.uk-light .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-overlay-primary .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub li.uk-active>a{color:#fff}.uk-light .uk-nav-primary>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-card-primary.uk-card-body .uk-nav-primary>li>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary>li>a,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary>li>a,.uk-overlay-primary .uk-nav-primary>li>a,.uk-offcanvas-bar .uk-nav-primary>li>a{color:rgba(255,255,255,.5)}.uk-light .uk-nav-primary>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-card-primary.uk-card-body .uk-nav-primary>li>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary>li>a:hover,.uk-overlay-primary .uk-nav-primary>li>a:hover,.uk-offcanvas-bar .uk-nav-primary>li>a:hover{color:rgba(255,255,255,.7)}.uk-light .uk-nav-primary>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-primary>li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-primary>li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary>li.uk-active>a,.uk-overlay-primary .uk-nav-primary>li.uk-active>a,.uk-offcanvas-bar .uk-nav-primary>li.uk-active>a{color:#fff}.uk-light .uk-nav-primary .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-header,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-header,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-header,.uk-overlay-primary .uk-nav-primary .uk-nav-header,.uk-offcanvas-bar .uk-nav-primary .uk-nav-header{color:#fff}.uk-light .uk-nav-primary .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-divider,.uk-overlay-primary .uk-nav-primary .uk-nav-divider,.uk-offcanvas-bar .uk-nav-primary .uk-nav-divider{border-top-color:rgba(255,255,255,.2)}.uk-light .uk-nav-primary .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub a,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a{color:rgba(255,255,255,.5)}.uk-light .uk-nav-primary .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a:hover{color:rgba(255,255,255,.7)}.uk-light .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-overlay-primary .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub li.uk-active>a{color:#fff}.uk-light .uk-nav-secondary>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a,.uk-card-primary.uk-card-body .uk-nav-secondary>li>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a,.uk-card-secondary.uk-card-body .uk-nav-secondary>li>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a,.uk-overlay-primary .uk-nav-secondary>li>a,.uk-offcanvas-bar .uk-nav-secondary>li>a{color:#fff}.uk-light .uk-nav-secondary>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover,.uk-card-primary.uk-card-body .uk-nav-secondary>li>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-secondary>li>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a:hover,.uk-overlay-primary .uk-nav-secondary>li>a:hover,.uk-offcanvas-bar .uk-nav-secondary>li>a:hover{color:#fff;background-color:rgba(255,255,255,.1)}.uk-light .uk-nav-secondary>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-secondary>li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-secondary>li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary>li.uk-active>a,.uk-overlay-primary .uk-nav-secondary>li.uk-active>a,.uk-offcanvas-bar .uk-nav-secondary>li.uk-active>a{color:#fff;background-color:rgba(255,255,255,.1)}.uk-light .uk-nav-secondary .uk-nav-subtitle,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle,.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-subtitle,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-subtitle,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-subtitle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-subtitle,.uk-overlay-primary .uk-nav-secondary .uk-nav-subtitle,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-subtitle{color:rgba(255,255,255,.5)}.uk-light .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-card-primary.uk-card-body .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-card-secondary.uk-card-body .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-overlay-primary .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-offcanvas-bar .uk-nav-secondary>li>a:hover .uk-nav-subtitle{color:rgba(255,255,255,.7)}.uk-light .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-card-primary.uk-card-body .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-card-secondary.uk-card-body .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-overlay-primary .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-offcanvas-bar .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle{color:#fff}.uk-light .uk-nav-secondary .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header,.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-header,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-header,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-header,.uk-overlay-primary .uk-nav-secondary .uk-nav-header,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-header{color:#fff}.uk-light .uk-nav-secondary .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider,.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-divider,.uk-overlay-primary .uk-nav-secondary .uk-nav-divider,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-divider{border-top-color:rgba(255,255,255,.2)}.uk-light .uk-nav-secondary .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a,.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub a,.uk-overlay-primary .uk-nav-secondary .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub a{color:rgba(255,255,255,.5)}.uk-light .uk-nav-secondary .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover,.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-secondary .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub a:hover{color:rgba(255,255,255,.7)}.uk-light .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-overlay-primary .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub li.uk-active>a{color:#fff}.uk-light .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-section-primary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-section-secondary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-tile-primary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-tile-secondary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-card-primary.uk-card-body .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-card-primary>:not([class*=uk-card-media]) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-card-secondary.uk-card-body .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-overlay-primary .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-offcanvas-bar .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider){border-top-color:rgba(255,255,255,.2)}.uk-light .uk-navbar-nav>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a,.uk-overlay-primary .uk-navbar-nav>li>a,.uk-offcanvas-bar .uk-navbar-nav>li>a{color:rgba(255,255,255,.5)}.uk-light .uk-navbar-nav>li:hover>a,.uk-light .uk-navbar-nav>li>a[aria-expanded=true],.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded=true],.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded=true],.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded=true],.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded=true],.uk-card-primary.uk-card-body .uk-navbar-nav>li:hover>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a[aria-expanded=true],.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li:hover>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a[aria-expanded=true],.uk-card-secondary.uk-card-body .uk-navbar-nav>li:hover>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a[aria-expanded=true],.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li:hover>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a[aria-expanded=true],.uk-overlay-primary .uk-navbar-nav>li:hover>a,.uk-overlay-primary .uk-navbar-nav>li>a[aria-expanded=true],.uk-offcanvas-bar .uk-navbar-nav>li:hover>a,.uk-offcanvas-bar .uk-navbar-nav>li>a[aria-expanded=true]{color:rgba(255,255,255,.7)}.uk-light .uk-navbar-nav>li>a:active,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a:active,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a:active,.uk-overlay-primary .uk-navbar-nav>li>a:active,.uk-offcanvas-bar .uk-navbar-nav>li>a:active{color:#fff}.uk-light .uk-navbar-nav>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li.uk-active>a,.uk-overlay-primary .uk-navbar-nav>li.uk-active>a,.uk-offcanvas-bar .uk-navbar-nav>li.uk-active>a{color:#fff}.uk-light .uk-navbar-item,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-item,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-item,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-item,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-item,.uk-card-primary.uk-card-body .uk-navbar-item,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-item,.uk-card-secondary.uk-card-body .uk-navbar-item,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-item,.uk-overlay-primary .uk-navbar-item,.uk-offcanvas-bar .uk-navbar-item{color:rgba(255,255,255,.7)}.uk-light .uk-navbar-toggle,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-card-primary.uk-card-body .uk-navbar-toggle,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-toggle,.uk-card-secondary.uk-card-body .uk-navbar-toggle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-toggle,.uk-overlay-primary .uk-navbar-toggle,.uk-offcanvas-bar .uk-navbar-toggle{color:rgba(255,255,255,.5)}.uk-light .uk-navbar-toggle:hover,.uk-light .uk-navbar-toggle[aria-expanded=true],.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded=true],.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded=true],.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded=true],.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded=true],.uk-card-primary.uk-card-body .uk-navbar-toggle:hover,.uk-card-primary.uk-card-body .uk-navbar-toggle[aria-expanded=true],.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-toggle:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-toggle[aria-expanded=true],.uk-card-secondary.uk-card-body .uk-navbar-toggle:hover,.uk-card-secondary.uk-card-body .uk-navbar-toggle[aria-expanded=true],.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-toggle:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-toggle[aria-expanded=true],.uk-overlay-primary .uk-navbar-toggle:hover,.uk-overlay-primary .uk-navbar-toggle[aria-expanded=true],.uk-offcanvas-bar .uk-navbar-toggle:hover,.uk-offcanvas-bar .uk-navbar-toggle[aria-expanded=true]{color:rgba(255,255,255,.7)}.uk-light .uk-pagination>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-card-primary.uk-card-body .uk-pagination>*>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-pagination>*>*,.uk-card-secondary.uk-card-body .uk-pagination>*>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-pagination>*>*,.uk-overlay-primary .uk-pagination>*>*,.uk-offcanvas-bar .uk-pagination>*>*{color:rgba(255,255,255,.5)}.uk-light .uk-pagination>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-card-primary.uk-card-body .uk-pagination>*>:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-pagination>*>:hover,.uk-card-secondary.uk-card-body .uk-pagination>*>:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-pagination>*>:hover,.uk-overlay-primary .uk-pagination>*>:hover,.uk-offcanvas-bar .uk-pagination>*>:hover{color:rgba(255,255,255,.7)}.uk-light .uk-pagination>.uk-active>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-card-primary.uk-card-body .uk-pagination>.uk-active>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-pagination>.uk-active>*,.uk-card-secondary.uk-card-body .uk-pagination>.uk-active>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-pagination>.uk-active>*,.uk-overlay-primary .uk-pagination>.uk-active>*,.uk-offcanvas-bar .uk-pagination>.uk-active>*{color:rgba(255,255,255,.7)}.uk-light .uk-pagination>.uk-disabled>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-card-primary.uk-card-body .uk-pagination>.uk-disabled>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-pagination>.uk-disabled>*,.uk-card-secondary.uk-card-body .uk-pagination>.uk-disabled>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-pagination>.uk-disabled>*,.uk-overlay-primary .uk-pagination>.uk-disabled>*,.uk-offcanvas-bar .uk-pagination>.uk-disabled>*{color:rgba(255,255,255,.5)}.uk-light .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input,.uk-card-primary.uk-card-body .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-input,.uk-overlay-primary .uk-search-input,.uk-offcanvas-bar .uk-search-input{color:rgba(255,255,255,.7)}.uk-light .uk-search-input::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-card-primary.uk-card-body .uk-search-input::placeholder,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-input::placeholder,.uk-card-secondary.uk-card-body .uk-search-input::placeholder,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-input::placeholder,.uk-overlay-primary .uk-search-input::placeholder,.uk-offcanvas-bar .uk-search-input::placeholder{color:rgba(255,255,255,.5)}.uk-light .uk-search .uk-search-icon,.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-card-primary.uk-card-body .uk-search .uk-search-icon,.uk-card-primary>:not([class*=uk-card-media]) .uk-search .uk-search-icon,.uk-card-secondary.uk-card-body .uk-search .uk-search-icon,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search .uk-search-icon,.uk-overlay-primary .uk-search .uk-search-icon,.uk-offcanvas-bar .uk-search .uk-search-icon{color:rgba(255,255,255,.5)}.uk-light .uk-search .uk-search-icon:hover,.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-card-primary.uk-card-body .uk-search .uk-search-icon:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-search .uk-search-icon:hover,.uk-card-secondary.uk-card-body .uk-search .uk-search-icon:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search .uk-search-icon:hover,.uk-overlay-primary .uk-search .uk-search-icon:hover,.uk-offcanvas-bar .uk-search .uk-search-icon:hover{color:rgba(255,255,255,.5)}.uk-light .uk-search-default .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-card-primary.uk-card-body .uk-search-default .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-default .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-default .uk-search-input,.uk-overlay-primary .uk-search-default .uk-search-input,.uk-offcanvas-bar .uk-search-default .uk-search-input{background-color:rgba(0,0,0,0);border-color:rgba(255,255,255,.2)}.uk-light .uk-search-default .uk-search-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-card-primary.uk-card-body .uk-search-default .uk-search-input:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-default .uk-search-input:focus,.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-default .uk-search-input:focus,.uk-overlay-primary .uk-search-default .uk-search-input:focus,.uk-offcanvas-bar .uk-search-default .uk-search-input:focus{background-color:rgba(0,0,0,.05)}.uk-light .uk-search-navbar .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-card-primary.uk-card-body .uk-search-navbar .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-navbar .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-navbar .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-navbar .uk-search-input,.uk-overlay-primary .uk-search-navbar .uk-search-input,.uk-offcanvas-bar .uk-search-navbar .uk-search-input{background-color:rgba(0,0,0,0)}.uk-light .uk-search-large .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-card-primary.uk-card-body .uk-search-large .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-large .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-large .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-large .uk-search-input,.uk-overlay-primary .uk-search-large .uk-search-input,.uk-offcanvas-bar .uk-search-large .uk-search-input{background-color:rgba(0,0,0,0)}.uk-light .uk-search-toggle,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle,.uk-card-primary.uk-card-body .uk-search-toggle,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-toggle,.uk-card-secondary.uk-card-body .uk-search-toggle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-toggle,.uk-overlay-primary .uk-search-toggle,.uk-offcanvas-bar .uk-search-toggle{color:rgba(255,255,255,.5)}.uk-light .uk-search-toggle:hover,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-card-primary.uk-card-body .uk-search-toggle:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-toggle:hover,.uk-card-secondary.uk-card-body .uk-search-toggle:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-toggle:hover,.uk-overlay-primary .uk-search-toggle:hover,.uk-offcanvas-bar .uk-search-toggle:hover{color:rgba(255,255,255,.7)}.uk-light .uk-slidenav,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav,.uk-card-primary.uk-card-body .uk-slidenav,.uk-card-primary>:not([class*=uk-card-media]) .uk-slidenav,.uk-card-secondary.uk-card-body .uk-slidenav,.uk-card-secondary>:not([class*=uk-card-media]) .uk-slidenav,.uk-overlay-primary .uk-slidenav,.uk-offcanvas-bar .uk-slidenav{color:rgba(255,255,255,.7)}.uk-light .uk-slidenav:hover,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-card-primary.uk-card-body .uk-slidenav:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-slidenav:hover,.uk-card-secondary.uk-card-body .uk-slidenav:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-slidenav:hover,.uk-overlay-primary .uk-slidenav:hover,.uk-offcanvas-bar .uk-slidenav:hover{color:rgba(255,255,255,.95)}.uk-light .uk-slidenav:active,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:active,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:active,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:active,.uk-card-primary.uk-card-body .uk-slidenav:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-slidenav:active,.uk-card-secondary.uk-card-body .uk-slidenav:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-slidenav:active,.uk-overlay-primary .uk-slidenav:active,.uk-offcanvas-bar .uk-slidenav:active{color:rgba(255,255,255,.7)}.uk-light .uk-subnav>*>:first-child,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-card-primary.uk-card-body .uk-subnav>*>:first-child,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav>*>:first-child,.uk-card-secondary.uk-card-body .uk-subnav>*>:first-child,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav>*>:first-child,.uk-overlay-primary .uk-subnav>*>:first-child,.uk-offcanvas-bar .uk-subnav>*>:first-child{color:rgba(255,255,255,.5)}.uk-light .uk-subnav>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-card-primary.uk-card-body .uk-subnav>*>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav>*>a:hover,.uk-card-secondary.uk-card-body .uk-subnav>*>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav>*>a:hover,.uk-overlay-primary .uk-subnav>*>a:hover,.uk-offcanvas-bar .uk-subnav>*>a:hover{color:rgba(255,255,255,.7)}.uk-light .uk-subnav>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-card-primary.uk-card-body .uk-subnav>.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav>.uk-active>a,.uk-card-secondary.uk-card-body .uk-subnav>.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav>.uk-active>a,.uk-overlay-primary .uk-subnav>.uk-active>a,.uk-offcanvas-bar .uk-subnav>.uk-active>a{color:#fff}.uk-light .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary.uk-card-body .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-overlay-primary .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-offcanvas-bar .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before{border-left-color:rgba(255,255,255,.2)}.uk-light .uk-subnav-pill>*>:first-child,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-card-primary.uk-card-body .uk-subnav-pill>*>:first-child,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-pill>*>:first-child,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>:first-child,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-pill>*>:first-child,.uk-overlay-primary .uk-subnav-pill>*>:first-child,.uk-offcanvas-bar .uk-subnav-pill>*>:first-child{background-color:rgba(0,0,0,0);color:rgba(255,255,255,.5)}.uk-light .uk-subnav-pill>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-pill>*>a:hover,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-pill>*>a:hover,.uk-overlay-primary .uk-subnav-pill>*>a:hover,.uk-offcanvas-bar .uk-subnav-pill>*>a:hover{background-color:rgba(255,255,255,.1);color:rgba(255,255,255,.7)}.uk-light .uk-subnav-pill>*>a:active,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-pill>*>a:active,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-pill>*>a:active,.uk-overlay-primary .uk-subnav-pill>*>a:active,.uk-offcanvas-bar .uk-subnav-pill>*>a:active{background-color:rgba(255,255,255,.1);color:rgba(255,255,255,.7)}.uk-light .uk-subnav-pill>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-card-primary.uk-card-body .uk-subnav-pill>.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-pill>.uk-active>a,.uk-card-secondary.uk-card-body .uk-subnav-pill>.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-pill>.uk-active>a,.uk-overlay-primary .uk-subnav-pill>.uk-active>a,.uk-offcanvas-bar .uk-subnav-pill>.uk-active>a{background-color:#fff;color:#666}.uk-light .uk-subnav>.uk-disabled>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-card-primary.uk-card-body .uk-subnav>.uk-disabled>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav>.uk-disabled>a,.uk-card-secondary.uk-card-body .uk-subnav>.uk-disabled>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav>.uk-disabled>a,.uk-overlay-primary .uk-subnav>.uk-disabled>a,.uk-offcanvas-bar .uk-subnav>.uk-disabled>a{color:rgba(255,255,255,.5)}.uk-light .uk-tab::before,.uk-section-primary:not(.uk-preserve-color) .uk-tab::before,.uk-section-secondary:not(.uk-preserve-color) .uk-tab::before,.uk-tile-primary:not(.uk-preserve-color) .uk-tab::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab::before,.uk-card-primary.uk-card-body .uk-tab::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab::before,.uk-card-secondary.uk-card-body .uk-tab::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab::before,.uk-overlay-primary .uk-tab::before,.uk-offcanvas-bar .uk-tab::before{border-color:rgba(255,255,255,.2)}.uk-light .uk-tab>*>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a,.uk-card-primary.uk-card-body .uk-tab>*>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab>*>a,.uk-card-secondary.uk-card-body .uk-tab>*>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab>*>a,.uk-overlay-primary .uk-tab>*>a,.uk-offcanvas-bar .uk-tab>*>a{color:rgba(255,255,255,.5)}.uk-light .uk-tab>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-card-primary.uk-card-body .uk-tab>*>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab>*>a:hover,.uk-card-secondary.uk-card-body .uk-tab>*>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab>*>a:hover,.uk-overlay-primary .uk-tab>*>a:hover,.uk-offcanvas-bar .uk-tab>*>a:hover{color:rgba(255,255,255,.7)}.uk-light .uk-tab>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-card-primary.uk-card-body .uk-tab>.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab>.uk-active>a,.uk-card-secondary.uk-card-body .uk-tab>.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab>.uk-active>a,.uk-overlay-primary .uk-tab>.uk-active>a,.uk-offcanvas-bar .uk-tab>.uk-active>a{color:#fff;border-color:#fff}.uk-light .uk-tab>.uk-disabled>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-card-primary.uk-card-body .uk-tab>.uk-disabled>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab>.uk-disabled>a,.uk-card-secondary.uk-card-body .uk-tab>.uk-disabled>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab>.uk-disabled>a,.uk-overlay-primary .uk-tab>.uk-disabled>a,.uk-offcanvas-bar .uk-tab>.uk-disabled>a{color:rgba(255,255,255,.5)}.uk-light .uk-table-striped>tr:nth-of-type(even):last-child,.uk-light .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-section-primary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(even):last-child,.uk-section-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(even):last-child,.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(even):last-child,.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(even):last-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-card-primary.uk-card-body .uk-table-striped>tr:nth-of-type(even):last-child,.uk-card-primary.uk-card-body .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-card-primary>:not([class*=uk-card-media]) .uk-table-striped>tr:nth-of-type(even):last-child,.uk-card-primary>:not([class*=uk-card-media]) .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-card-secondary.uk-card-body .uk-table-striped>tr:nth-of-type(even):last-child,.uk-card-secondary.uk-card-body .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-striped>tr:nth-of-type(even):last-child,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-overlay-primary .uk-table-striped>tr:nth-of-type(even):last-child,.uk-overlay-primary .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-offcanvas-bar .uk-table-striped>tr:nth-of-type(even):last-child,.uk-offcanvas-bar .uk-table-striped tbody tr:nth-of-type(even):last-child{border-bottom-color:rgba(255,255,255,.2)}.uk-light .uk-text-lead,.uk-section-primary:not(.uk-preserve-color) .uk-text-lead,.uk-section-secondary:not(.uk-preserve-color) .uk-text-lead,.uk-tile-primary:not(.uk-preserve-color) .uk-text-lead,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-lead,.uk-card-primary.uk-card-body .uk-text-lead,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-lead,.uk-card-secondary.uk-card-body .uk-text-lead,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-lead,.uk-overlay-primary .uk-text-lead,.uk-offcanvas-bar .uk-text-lead{color:rgba(255,255,255,.7)}.uk-light .uk-text-meta,.uk-section-primary:not(.uk-preserve-color) .uk-text-meta,.uk-section-secondary:not(.uk-preserve-color) .uk-text-meta,.uk-tile-primary:not(.uk-preserve-color) .uk-text-meta,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-meta,.uk-card-primary.uk-card-body .uk-text-meta,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-meta,.uk-card-secondary.uk-card-body .uk-text-meta,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-meta,.uk-overlay-primary .uk-text-meta,.uk-offcanvas-bar .uk-text-meta{color:rgba(255,255,255,.5)}.uk-light .uk-text-muted,.uk-section-primary:not(.uk-preserve-color) .uk-text-muted,.uk-section-secondary:not(.uk-preserve-color) .uk-text-muted,.uk-tile-primary:not(.uk-preserve-color) .uk-text-muted,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-muted,.uk-card-primary.uk-card-body .uk-text-muted,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-muted,.uk-card-secondary.uk-card-body .uk-text-muted,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-muted,.uk-overlay-primary .uk-text-muted,.uk-offcanvas-bar .uk-text-muted{color:rgba(255,255,255,.5) !important}.uk-light .uk-text-emphasis,.uk-section-primary:not(.uk-preserve-color) .uk-text-emphasis,.uk-section-secondary:not(.uk-preserve-color) .uk-text-emphasis,.uk-tile-primary:not(.uk-preserve-color) .uk-text-emphasis,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-emphasis,.uk-card-primary.uk-card-body .uk-text-emphasis,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-emphasis,.uk-card-secondary.uk-card-body .uk-text-emphasis,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-emphasis,.uk-overlay-primary .uk-text-emphasis,.uk-offcanvas-bar .uk-text-emphasis{color:#fff !important}.uk-light .uk-text-primary,.uk-section-primary:not(.uk-preserve-color) .uk-text-primary,.uk-section-secondary:not(.uk-preserve-color) .uk-text-primary,.uk-tile-primary:not(.uk-preserve-color) .uk-text-primary,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-primary,.uk-card-primary.uk-card-body .uk-text-primary,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-primary,.uk-card-secondary.uk-card-body .uk-text-primary,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-primary,.uk-overlay-primary .uk-text-primary,.uk-offcanvas-bar .uk-text-primary{color:#fff !important}.uk-light .uk-text-secondary,.uk-section-primary:not(.uk-preserve-color) .uk-text-secondary,.uk-section-secondary:not(.uk-preserve-color) .uk-text-secondary,.uk-tile-primary:not(.uk-preserve-color) .uk-text-secondary,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-secondary,.uk-card-primary.uk-card-body .uk-text-secondary,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-secondary,.uk-card-secondary.uk-card-body .uk-text-secondary,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-secondary,.uk-overlay-primary .uk-text-secondary,.uk-offcanvas-bar .uk-text-secondary{color:#fff !important}.uk-light .uk-thumbnav>*>*::after,.uk-section-primary:not(.uk-preserve-color) .uk-thumbnav>*>*::after,.uk-section-secondary:not(.uk-preserve-color) .uk-thumbnav>*>*::after,.uk-tile-primary:not(.uk-preserve-color) .uk-thumbnav>*>*::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-thumbnav>*>*::after,.uk-card-primary.uk-card-body .uk-thumbnav>*>*::after,.uk-card-primary>:not([class*=uk-card-media]) .uk-thumbnav>*>*::after,.uk-card-secondary.uk-card-body .uk-thumbnav>*>*::after,.uk-card-secondary>:not([class*=uk-card-media]) .uk-thumbnav>*>*::after,.uk-overlay-primary .uk-thumbnav>*>*::after,.uk-offcanvas-bar .uk-thumbnav>*>*::after{background-image:linear-gradient(180deg, rgba(0,0,0,0), rgba(0,0,0,.4))}.uk-light .uk-totop,.uk-section-primary:not(.uk-preserve-color) .uk-totop,.uk-section-secondary:not(.uk-preserve-color) .uk-totop,.uk-tile-primary:not(.uk-preserve-color) .uk-totop,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop,.uk-card-primary.uk-card-body .uk-totop,.uk-card-primary>:not([class*=uk-card-media]) .uk-totop,.uk-card-secondary.uk-card-body .uk-totop,.uk-card-secondary>:not([class*=uk-card-media]) .uk-totop,.uk-overlay-primary .uk-totop,.uk-offcanvas-bar .uk-totop{color:rgba(255,255,255,.5)}.uk-light .uk-totop:hover,.uk-section-primary:not(.uk-preserve-color) .uk-totop:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:hover,.uk-card-primary.uk-card-body .uk-totop:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-totop:hover,.uk-card-secondary.uk-card-body .uk-totop:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-totop:hover,.uk-overlay-primary .uk-totop:hover,.uk-offcanvas-bar .uk-totop:hover{color:rgba(255,255,255,.7)}.uk-light .uk-totop:active,.uk-section-primary:not(.uk-preserve-color) .uk-totop:active,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:active,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:active,.uk-card-primary.uk-card-body .uk-totop:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-totop:active,.uk-card-secondary.uk-card-body .uk-totop:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-totop:active,.uk-overlay-primary .uk-totop:active,.uk-offcanvas-bar .uk-totop:active{color:#fff}.uk-light .uk-logo,.uk-section-primary:not(.uk-preserve-color) .uk-logo,.uk-section-secondary:not(.uk-preserve-color) .uk-logo,.uk-tile-primary:not(.uk-preserve-color) .uk-logo,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo,.uk-card-primary.uk-card-body .uk-logo,.uk-card-primary>:not([class*=uk-card-media]) .uk-logo,.uk-card-secondary.uk-card-body .uk-logo,.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo,.uk-overlay-primary .uk-logo,.uk-offcanvas-bar .uk-logo{color:#fff}.uk-light .uk-logo:hover,.uk-section-primary:not(.uk-preserve-color) .uk-logo:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-logo:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-logo:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo:hover,.uk-card-primary.uk-card-body .uk-logo:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-logo:hover,.uk-card-secondary.uk-card-body .uk-logo:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo:hover,.uk-overlay-primary .uk-logo:hover,.uk-offcanvas-bar .uk-logo:hover{color:#fff}.uk-light .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-light .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-section-primary:not(.uk-preserve-color) .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-section-primary:not(.uk-preserve-color) .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-section-secondary:not(.uk-preserve-color) .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-section-secondary:not(.uk-preserve-color) .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-tile-primary:not(.uk-preserve-color) .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-tile-primary:not(.uk-preserve-color) .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-tile-secondary:not(.uk-preserve-color) .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-tile-secondary:not(.uk-preserve-color) .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-card-primary.uk-card-body .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-card-primary.uk-card-body .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-card-primary>:not([class*=uk-card-media]) .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-card-primary>:not([class*=uk-card-media]) .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-card-secondary.uk-card-body .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-card-secondary.uk-card-body .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-overlay-primary .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-overlay-primary .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type),.uk-offcanvas-bar .uk-logo>picture:not(:only-of-type)>:not(.uk-logo-inverse),.uk-offcanvas-bar .uk-logo>:not(picture):not(.uk-logo-inverse):not(:only-of-type){display:none}.uk-light .uk-logo-inverse,.uk-section-primary:not(.uk-preserve-color) .uk-logo-inverse,.uk-section-secondary:not(.uk-preserve-color) .uk-logo-inverse,.uk-tile-primary:not(.uk-preserve-color) .uk-logo-inverse,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo-inverse,.uk-card-primary.uk-card-body .uk-logo-inverse,.uk-card-primary>:not([class*=uk-card-media]) .uk-logo-inverse,.uk-card-secondary.uk-card-body .uk-logo-inverse,.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo-inverse,.uk-overlay-primary .uk-logo-inverse,.uk-offcanvas-bar .uk-logo-inverse{display:block}.uk-light .uk-accordion-title::before,.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-card-primary.uk-card-body .uk-accordion-title::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-accordion-title::before,.uk-card-secondary.uk-card-body .uk-accordion-title::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-accordion-title::before,.uk-overlay-primary .uk-accordion-title::before,.uk-offcanvas-bar .uk-accordion-title::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,.7)%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,.7)%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-open>.uk-accordion-title::before,.uk-section-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-section-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-tile-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-card-primary.uk-card-body .uk-open>.uk-accordion-title::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-open>.uk-accordion-title::before,.uk-card-secondary.uk-card-body .uk-open>.uk-accordion-title::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-open>.uk-accordion-title::before,.uk-overlay-primary .uk-open>.uk-accordion-title::before,.uk-offcanvas-bar .uk-open>.uk-accordion-title::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,.7)%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-table-striped>tr:nth-of-type(even):last-child,.uk-light .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-section-primary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(even):last-child,.uk-section-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(even):last-child,.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(even):last-child,.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(even):last-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-card-primary.uk-card-body .uk-table-striped>tr:nth-of-type(even):last-child,.uk-card-primary.uk-card-body .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-card-primary>:not([class*=uk-card-media]) .uk-table-striped>tr:nth-of-type(even):last-child,.uk-card-primary>:not([class*=uk-card-media]) .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-card-secondary.uk-card-body .uk-table-striped>tr:nth-of-type(even):last-child,.uk-card-secondary.uk-card-body .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-striped>tr:nth-of-type(even):last-child,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-overlay-primary .uk-table-striped>tr:nth-of-type(even):last-child,.uk-overlay-primary .uk-table-striped tbody tr:nth-of-type(even):last-child,.uk-offcanvas-bar .uk-table-striped>tr:nth-of-type(even):last-child,.uk-offcanvas-bar .uk-table-striped tbody tr:nth-of-type(even):last-child{border-bottom-color:rgba(255,255,255,.2)}@media print{*,*::before,*::after{background:rgba(0,0,0,0) !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}*{font-family:"Roboto",sans-serif}.markdown h1{color:#404040}.markdown h2{color:#404040}.markdown h3{color:#404040} \ No newline at end of file diff --git a/tasks/index.html b/tasks/index.html new file mode 100644 index 000000000..706113a92 --- /dev/null +++ b/tasks/index.html @@ -0,0 +1,1050 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + + + +
+

Tasks and roadmap

+

This page exists to make it easier to help and easier to see what project +members are working on and what tasks they prioritize.

+

We wanted to move this from our heads and from our notebooks and make this +visible and accessible for everybody who wants to help and be involved.

+

If somebody has 1 hour +time per week or month and would like to help out, it should be easy to find +a meaningful task and to get the necessary context and contact. Bigger +tasks are too big for volunteers but we still find it useful to communicate +what we work on or would like to work on if we had more time, so that volunteer +individuals and organizations can stay informed.

+
+

In each category we try to sort tasks by priority from most urgent to least +urgent.

+
+
+

Good first issues if you have 1 hour

+ +

Issues which are easy for somebody with a bit of overview

+ +

Tasks where we struggle and can use help

+
    +
  • +

    Create a governance charter for a non-profit organization which could be the +follow-up organization for CodeRefinery.

    +
  • +
  • +

    Outreach, newsletter, social media. You can help us with blogs, drafting +newsletter, engaging in relevant social media posts.

    +
  • +
  • +

    Event management. We have many folks who like to develop lessons or teach or +help but who do not +enjoy the event management part of it. But perhaps you do? You could help +us reaching many more people.

    +
  • +
+
+
+

If you have 1 day

+
    +
  • +

    Short video which explains how to join a workshop.

    +
  • +
  • +

    Teaser video which in 3 minutes explains what the project is about.

    +
  • +
  • +

    Teaser slide deck (5 slides?) which explains what the project is about and +how organizations can get on board.

    +
  • +
  • +

    Make one of our lessons citable starting from +https://coderefinery.org/blog/2021/11/21/towards-citable-lessons/. Use a +CITATION.cff file and from that one generate the .zenodo.json file and +deploy to Zenodo. Document how to do this for all other lessons. Contact JH +or RB if you want to join this task.

    +
  • +
  • +

    Take an issue from +our install instructions.

    +
  • +
  • +

    Take a lesson issue which looks +interesting and easy to you from one of our +lessons. Ask on chat +or mention @bast if you want more context about any of these.

    +
  • +
  • +

    Draft and execute a post-workshop survey for 2021-2023 workshops starting +from https://github.com/coderefinery/post-workshop-survey.

    +
  • +
  • +

    Draft a blog post about the tools we use based on a nice chat thread (GitHub +issue).

    +
  • +
+

Tasks for multiple days

+
    +
  • +

    Create a survey and collect testimonials from +GitLab users. Contact RB.

    +
  • +
  • +

    Prepare a financing plan from the GitLab +service. Contact RB.

    +
  • +
+
+
+
+

Recently finished

+ + + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/workshops/discipline-online.png b/workshops/discipline-online.png new file mode 100644 index 000000000..dac295cd5 Binary files /dev/null and b/workshops/discipline-online.png differ diff --git a/workshops/disciplines_positions.png b/workshops/disciplines_positions.png new file mode 100644 index 000000000..83df85b0a Binary files /dev/null and b/workshops/disciplines_positions.png differ diff --git a/workshops/full-workshops.yml b/workshops/full-workshops.yml new file mode 100644 index 000000000..219a84209 --- /dev/null +++ b/workshops/full-workshops.yml @@ -0,0 +1,894 @@ +events: + - name: Full online workshop (6 half-days) + website: https://coderefinery.github.io/2023-09-19-workshop/ + start_date: "2023-09-19" + end_date: "2023-09-28" + host: + - Radovan Bast + - Richard Darst + - Enrico Glerean + - Matias Jääskeläinen + instructors: + - Radovan Bast + - Richard Darst + - Enrico Glerean + - Johan Hellsvik + - Matias Jääskeläinen + - Thomas Pfau + - Dhanya Pushpadas + - Jarno Rantaharju + - Samantha Wittke + expert_helpers: + - Diana Iusan + - Enrico Glerean + - Teemu Ruokolainen + num_participants: + NO: 103 + FI: 100 + SE: 31 + NL: 19 + IN: 16 + FR: 12 + GE: 11 + IT: 9 + UK: 5 + US: 5 + PO: 5 + SP: 5 + total: 360 + twitch_viewers: + smallest_viewers_max: 145 + largest_viewers_max: 54 + - name: Full online workshop (6 half-days) + website: https://coderefinery.github.io/2023-03-21-workshop/ + start_date: "2023-03-21" + end_date: "2023-03-30" + host: + - Radovan Bast + - Richard Darst + - Enrico Glerean + - Matias Jääskeläinen + - Dhanya Pushpadas + - Samantha Wittke + instructors: + - Radovan Bast + - Johan Hellsvik + - Diana Iusan + - Matias Jääskeläinen + - Bjørn Lindi + - Thomas Pfau + - Dhanya Pushpadas + - Teemu Ruokolainen + expert_helpers: + - Jarno Rantaharju + - Stephan Smuts + num_participants: + FI: 178 + SE: 87 + NO: 43 + ES: 24 + DK: 19 + NL: 58 + DE: 27 + ZA: 15 + IT: 9 + total: 493 + twitch_viewers: + smallest_viewers_max: 216 + largest_viewers_max: 112 + - name: Uppsala + website: https://coderefinery.github.io/2023-05-09-uppsala/ + start_date: "2023-05-09" + end_date: "2023-05-11" + instructors: + - Diana Iusan + - Thor Wikfeldt + - Johan Hellsvik + - Pavlin Mitev + - Björn Claremar + expert_helpers: + - Anastasiia Andriievska + - Qiang Li + num_participants: + SE: 15 + total: 15 + location: + lat: 59.8434075 + lon: 17.641331 + - name: Full online workshop (6 half-days) + website: https://coderefinery.github.io/2022-09-20-workshop/ + start_date: "2022-09-20" + end_date: "2022-09-29" + host: + - Radovan Bast + - Matias Jääskeläinen + - Richard Darst + instructors: + - Sabry Razick + - Samantha Wittke + - Dhanya Pushpadas + - Thomas Pfau + - Radovan Bast + - Hande Celikkanat + - Johan Hellsvik + - Thor Wikfeldt + - Jarno Rantaharju + - Matteo Tomasini + - Richard Darst + expert_helpers: + - Diana Iusan + - Thor Wikfeldt + - Johan Hellsvik + - Stephan Smuts + - Juho Lehtonen + - Dhanya Pushpadas + helpers: + - Björn Claremar + - Philip Gjedde + - Juho Lehtonen + - Bjørn Lindi + - Giordano Lipari + - Dhanya Pushpadas + - Stephanie van de Sandt + - Meron Vermaas + - Aleksandra Wilczynska + - Ruslan Zhuravchak + - Kaveh Karimi + num_participants: + FI: 76 + SE: 52 + NO: 50 + ES: 12 + DK: 7 + NL: 34 + IN: 4 + IE: 3 + CH: 3 + UK: 3 + IT: 3 + FR: 2 + US: 2 + TT: 1 + SG: 1 + CN: 1 + TH: 1 + GR: 1 + IR: 1 + TR: 1 + BR: 1 + ID: 1 + DE: 1 + CA: 1 + total: 262 + twitch_viewers: + smallest_viewers_max: 97 + largest_viewers_max: 157 + zoom_participants: + min: 25 + max: 59 + - name: Full online workshop (6 half-days) + website: https://coderefinery.github.io/2022-03-22-workshop/ + start_date: "2022-03-22" + end_date: "2022-03-31" + host: + - Radovan Bast + - Richard Darst + - Enrico Glerean + instructors: + - Radovan Bast + - Richard Darst + - Luca Ferranti + - Johan Hellsvik + - Diana Iusan + - Jarno Rantaharju + - Sabry Razick + - Thor Wikfeldt + - Samantha Wittke + expert_helpers: + - Enrico Glerean + - Bjørn Lindi + helpers: + - Niket Agrawal + - Inigo Aldazabal + - Heather Andrews + - Thomas Arildsen + - Lora Armstrong + - Susan Branchett + - Romain Caneill + - Abel Carreras + - Björn Claremar + - Juan Sebastian Diaz Boada + - Marco Foscato + - Manuel Garcia Alvarez + - Niharika Gauraha + - Agneta Ghose + - Toby Hodges + - Maurits Kok + - Bjørn Lindi + - Jose Carlos Llanusa + - Pedro Ojeda + - Dhanya Pushpadas + - Stephan Smuts + - Ingrid Strandberg + - Aleksandra Wilczynska + num_participants: + AT: 1 + BD: 1 + BR: 1 + DK: 14 + FI: 54 + FR: 1 + DE: 6 + HU: 1 + IN: 2 + IT: 2 + MM: 1 + NL: 55 + NG: 1 + NO: 87 + PK: 1 + ES: 16 + SE: 46 + CH: 1 + UK: 3 + US: 3 + total: 297 + twitch_viewers: + smallest_viewers_max: 144 + largest_viewers_max: 215 + - name: Full online workshop (6 half-days) + website: https://coderefinery.github.io/2021-05-10-workshop/ + start_date: "2021-05-10" + end_date: "2021-05-20" + host: + - Richard Darst + instructors: + - Radovan Bast + - Anne Fouilloux + - Johan Hellsvik + - Diana Iusan + - Juho Lehtonen + - Sabry Razick + - Thor Wikfeldt + - Samantha Wittke + expert_helpers: + - Richard Darst + - Max R. Eckardt + - Patric Holmvall + - Anni Järvenpää + - Stefan Negru + - Jarno Rantaharju + - Marijn van Vliet + helpers: + - Niket Agrawal + - Octavian Andrei + - Thomas Arildsen + - Flavio Calvo + - Ted Hsuan Yun Chen + - Luca Ferranti + - Marco Foscato + - Manuel Garcia Alvarez + - Luc Girod + - Shashank Shekhar Harivyasi + - Patric Holmvall + - Sunniva Indrehus + - Stig Rune Jensen + - Matúš Kalaš + - Alberto Lazzarotto + - Lesetja Lekoloane + - Pavlin Mitev + - Devaraju Narayanappa + - Fabricio Oliveira + - Massimo Pizzol + - Evgeny Posenitskiy + - Ankita Priya + - Annajiat Alim Rasel + - Aili Sarre + - Jannetta Steyn + - Ingrid Strandberg + - Naoe Tatara + - Will Usher + num_participants: + SE: 21 + NO: 43 + FI: 24 + DK: 12 + NL: 16 + BD: 1 + FR: 1 + IN: 1 + IT: 3 + SL: 1 + ZA: 3 + CH: 0 + UK: 2 + total: 128 + - name: Online + website: https://coderefinery.github.io/2020-11-17-online/ + start_date: "2020-11-17" + end_date: "2020-11-26" + host: + - Naoe Tatara + instructors: + - Radovan Bast + - Anne Fouilloux + - Matus Kalas + - Pavlin Mitev + - Sabry Razick + - Thor Wikfeldt + expert_helpers: + - Richard Darst + - Max R. Eckardt + - Juho Lehtonen + - Emiliano Molinaro + - Stefan Negru + - Samantha Wittke + helpers: + - Octavian Andrei + - Raphaela Heil + - Johan Hellsvik + - Patric Holmvall + - Diana Iusan + - Matthew Morris + - Athanasios Protopapas + - Annajiat Alim Rasel + - Anthony Scemama + - Ingrid Strandberg + num_participants: + NO: 26 + SE: 27 + FI: 3 + FR: 4 + PL: 2 + IN: 1 + DE: 4 + BE: 1 + BD: 1 + ES: 3 + CH: 1 + US: 2 + UK: 2 + total: 77 + - name: Online + website: https://coderefinery.github.io/2020-10-20-online/ + start_date: "2020-10-20" + end_date: "2020-10-29" + host: + - Richard Darst + - Naoe Tatara + - Radovan Bast + instructors: + - Radovan Bast + - Richard Darst + - Johan Hidding + - Jarno Rantaharju + - Sabry Razick + - Marijn van Vliet + - Jens Wehner + - Thor Wikfeldt + expert_helpers: + - Enrico Glerean + - Juho Lehtonen + - Samantha Wittke + helpers: + - Niket Agrawal + - Susan Branchett + - Simoneta Caño de Las Heras + - Amir Ebrahimi Fard + - Johan Hidding + - Jakob Sauer Jørgensen + - Maurits Kok + - Raul Ortiz Merino + - Ingrid Strandberg + - Evelien Van Dijk + - Jens Wehner + num_participants: + DK: 11 + FI: 22 + MA: 1 + NL: 43 + NO: 4 + SE: 19 + total: 100 + - name: Online (Mega-CodeRefinery) + website: https://coderefinery.github.io/2020-05-25-online/ + start_date: "2020-05-25" + end_date: "2020-06-04" + host: + - Naoe Tatara + instructors: + - Radovan Bast + - Anne Fouilloux + - Bjørn Lindi + - Thor Wikfeldt + - Stefan Negru + - Richard Darst + expert_helpers: + - Enrico Glerean + - Jarno Rantaharju + - Juho Lehtonen + - Sabry Razick + helpers: + - Daniel Holmberg + - Ebrahim Afyounian + - Erika Yashiro + - Francesco Tabaro + - Joakim Löfgren + - Kerstin Lenk + - Lauri Neuvonen + - Luis Amezcua + - Mikael Djurfeldt + - Mikko Heikkilä + - Pengfei Xu + - Preethy Nair + - Raphaela Heil + - Rohit Goswami + - Samantha Wittke + - Sebastian Schmidt + - Tomi Häkkinen + - Tuomas Rossi + - Ygor Morais Jaques + num_participants: + DK: 2 + FI: 75 + IS: 1 + NP: 1 + NO: 16 + SE: 5 + UK: 1 + US: 1 + total: 102 + - name: Trondheim + start_date: "2020-02-25" + end_date: "2020-02-27" + instructors: + - Anne Fouilloux + - Bjørn Lindi + - Nico Reissmann + helpers: + - Radek Lonka + num_participants: + NO: 26 + SE: 1 + PL: 1 + total: 28 + location: + lat: 63.41921 + lon: 10.402319 + - name: Espoo + start_date: "2019-12-10" + end_date: "2019-12-12" + instructors: + - Radovan Bast + - Richard Darst + - Enrico Glerean + - Juho Lehtonen + - João M. da Silva + - Jarno Rantaharju + helpers: + - Marijn Van Vliet + - Anni Järvenpää + - Shreyas Deshpande + num_participants: + FI: 30 + total: 30 + location: + lat: 60.18708 + lon: 24.82909 + - name: Lille + start_date: "2019-11-25" + end_date: "2019-12-05" + instructors: + - Radovan Bast + num_participants: + FR: 28 + total: 28 + location: + lat: 50.61141 + lon: 3.14053 + - name: Stockholm + start_date: "2019-11-19" + end_date: "2019-11-21" + instructors: + - Thor Wikfeldt + - Radovan Bast + - Anne Fouilloux + helpers: + - Dmytro Kryvokhyzha + - Carolina Robustini + - Ashwin Vishnu + num_participants: + SE: 28 + total: 28 + location: + lat: 59.35002 + lon: 18.02398 + - name: Trondheim + start_date: "2019-10-22" + end_date: "2019-10-24" + instructors: + - Thor Wikfeldt + - Radovan Bast + - Bjørn Lindi + helpers: + - Nico Reissmann + - Radek Lonka + num_participants: + NO: 20 + total: 20 + location: + lat: 63.41594 + lon: 10.40656 + - name: Aalborg + start_date: "2019-06-11" + end_date: "2019-06-13" + instructors: + - Max Roald Eckardt + - Radovan Bast + - Sabry Razick + helpers: + - Thomas Arildsen + - Vang Que Le + - Tobias Lindstrøm Jensen + - Emiliano Molinaro + - Lucy Whalley + num_participants: + DK: 18 + US: 1 + UK: 1 + total: 20 + location: + lat: 57.01398 + lon: 9.98891 + - name: Oslo + start_date: "2019-06-03" + end_date: "2019-06-05" + instructors: + - Radovan Bast + - Sabry Razick + - Anne Fouilloux + - Stefan Negru + helpers: + - Jean Iaquinta + num_participants: + NO: 18 + DK: 1 + SE: 1 + total: 20 + location: + lat: 59.94347 + lon: 10.718161 + - name: Helsinki + start_date: "2019-05-27" + end_date: "2019-05-29" + instructors: + - Richard Darst + - Juho Lehtonen + - João M. da Silva + - Stefan Negru + helpers: + - Manana Koberidze + - Enrico Glerean + num_participants: + FI: 26 + SE: 1 + total: 27 + location: + lat: 60.20444 + lon: 24.96171 + - name: Gothenburg + start_date: "2019-05-21" + end_date: "2019-05-23" + instructors: + - Max Roald Eckardt + - Anne Fouilloux + - Bjørn Lindi + - Thor Wikfeldt + helpers: + - Leif Wigge + - Tuomas Rossi + - Mikael Öhman + num_participants: + SE: 25 + total: 25 + location: + lat: 57.70887 + lon: 11.97456 + - name: Tartu + start_date: "2019-04-02" + end_date: "2019-04-04" + instructors: + - Bjørn Lindi + - João M. da Silva + - Radovan Bast + - Sabry Razick + helpers: + - Dmytro Fishman + - Ivan Kuzmin + - Mikhail Papkov + num_participants: + EE: 25 + DE: 1 + total: 26 + location: + lat: 58.37085 + lon: 26.71472 + - name: Stockholm + start_date: "2019-03-25" + end_date: "2019-03-27" + instructors: + - Radovan Bast + - Thor Wikfeldt + - Juho Lehtonen + helpers: + - Tor Kjellsson Lindblom + num_participants: + SE: 28 + DE: 2 + total: 30 + location: + lat: 59.34819 + lon: 18.07489 + - name: Espoo + start_date: "2018-12-11" + end_date: "2018-12-13" + instructors: + - Stefan Negru + - Juho Lehtonen + - Radovan Bast + - Richard Darst + helpers: + - João M. da Silva + - Pradeep Eranti + num_participants: + FI: 31 + DK: 1 + UK: 1 + total: 33 + location: + lat: 60.18708 + lon: 24.82909 + - name: Uppsala + start_date: "2018-12-03" + end_date: "2018-12-05" + instructors: + - Thor Wikfeldt + - Radovan Bast + - Max Schön + helpers: + - Hadrien Gourlé + num_participants: + SE: 30 + NO: 1 + total: 31 + location: + lat: 59.8434075 + lon: 17.641331 + - name: Kiruna + start_date: "2018-11-21" + end_date: "2018-11-23" + instructors: + - Thor Wikfeldt + - Max Roald Eckardt + - Sabry Razick + - Radovan Bast + num_participants: + SE: 36 + NO: 1 + CH: 1 + total: 38 + location: + lat: 67.85 + lon: 20.2166667 + - name: Reykjavik + start_date: "2018-08-21" + end_date: "2018-08-23" + instructors: + - Thor Wikfeldt + - Bjørn Lindi + - Radovan Bast + num_participants: + IS: 22 + SE: 3 + CH: 1 + total: 26 + location: + lat: 64.1396 + lon: -21.9519 + - name: Oslo + start_date: "2018-06-12" + end_date: "2018-06-14" + instructors: + - Sabry Razick + - Sri Harsha Vathsavayi + - Richard Darst + helpers: + - Anne Fouilloux + num_participants: + NO: 38 + DE: 1 + SE: 3 + total: 42 + location: + lat: 59.94347 + lon: 10.718161 + - name: Espoo + start_date: "2018-05-29" + end_date: "2018-05-31" + instructors: + - Jyry Suvilehto + - Sri Harsha Vathsavayi + - Richard Darst + num_participants: + FI: 48 + total: 48 + location: + lat: 60.18708 + lon: 24.82909 + - name: Lund + start_date: "2018-05-15" + end_date: "2018-05-17" + instructors: + - Radovan Bast + - Sabry Razick + - Thor Wikfeldt + num_participants: + SE: 30 + DK: 1 + total: 31 + location: + lat: 55.715043 + lon: 13.212401 + - name: Turku + start_date: "2018-03-20" + end_date: "2018-03-22" + instructors: + - Jyry Suvilehto + - Radovan Bast + - Sri Harsha Vathsavayi + helpers: + - Zubair Maalick + num_participants: + FI: 22 + SE: 1 + total: 23 + location: + lat: 60.4493 + lon: 22.2952 + - name: Trondheim + start_date: "2018-02-27" + end_date: "2018-03-01" + instructors: + - Bjørn Lindi + - Radovan Bast + - Thor Wikfeldt + num_participants: + NO: 20 + SE: 1 + DK: 1 + total: 22 + location: + lat: 63.4208 + lon: 10.3928 + - name: Espoo + start_date: "2017-12-14" + end_date: "2017-12-16" + instructors: + - Bjørn Lindi + - Jyry Suvilehto + - N. D. + - Radovan Bast + - Sri Harsha Vathsavayi + - Seija Sirkiä + helpers: + - Janne Blomqvist + - Richard Darst + - Mika Jalava + - Harshit Agrawal + - Vesa Vahermaa + num_participants: + FI: 40 + total: 40 + location: + lat: 60.18708 + lon: 24.82909 + - name: Linköping + start_date: "2017-11-07" + end_date: "2017-11-09" + instructors: + - Radovan Bast + - Thor Wikfeldt + - Sabry Razick + helpers: + - Peter Kjellström + num_participants: + NO: 1 + SE: 21 + total: 22 + location: + lat: 58.3978 + lon: 15.576 + - name: Aarhus + start_date: "2017-10-24" + end_date: "2017-10-26" + instructors: + - Bjørn Lindi + - Radovan Bast + - Thor Wikfeldt + - Sabry Razick + helpers: + - Dan Mønster + num_participants: + DK: 24 + SE: 3 + total: 27 + location: + lat: 56.1681 + lon: 10.203 + - name: Tromsø + start_date: "2017-06-19" + end_date: "2017-06-21" + instructors: + - Bjørn Lindi + - Radovan Bast + - Thor Wikfeldt + - Jyry Suvilehto + num_participants: + BE: 1 + SE: 1 + NO: 21 + total: 23 + location: + lat: 69.68137 + lon: 18.97228 + - name: Copenhagen + start_date: "2017-05-09" + end_date: "2017-05-11" + instructors: + - Sri Harsha Vathsavayi + - N. D. + - Radovan Bast + - Jyry Suvilehto + num_participants: + SE: 3 + NL: 1 + DK: 19 + total: 23 + location: + lat: 55.78626 + lon: 12.523 + - name: Stockholm + start_date: "2017-02-20" + end_date: "2017-02-22" + instructors: + - Sabry Razick + - N. D. + - Radovan Bast + - Thor Wikfeldt + - Bjørn Lindi + helpers: + - Cristian Cira + num_participants: + SE: 34 + total: 34 + location: + lat: 59.34819 + lon: 18.07489 + - name: Espoo + start_date: "2016-12-14" + end_date: "2016-12-16" + instructors: + - Jyry Suvilehto + - N. D. + - Pinja Koskinen + - Radovan Bast + - Thor Wikfeldt + helpers: + - Sri Harsha Vathsavayi + - Heikki Lehväslaiho + num_participants: + FI: 25 + total: 25 + location: + lat: 60.17833 + lon: 24.83303 diff --git a/workshops/heatmap-online.png b/workshops/heatmap-online.png new file mode 100644 index 000000000..1231fc079 Binary files /dev/null and b/workshops/heatmap-online.png differ diff --git a/workshops/heatmap_yesno.png b/workshops/heatmap_yesno.png new file mode 100644 index 000000000..2a142de2a Binary files /dev/null and b/workshops/heatmap_yesno.png differ diff --git a/workshops/impact/index.html b/workshops/impact/index.html new file mode 100644 index 000000000..cf7347365 --- /dev/null +++ b/workshops/impact/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/workshops/index.html b/workshops/index.html new file mode 100644 index 000000000..230bf7b1a --- /dev/null +++ b/workshops/index.html @@ -0,0 +1,937 @@ + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Workshops and events

+ + +
+ +
+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/workshops/instructor-training.yml b/workshops/instructor-training.yml new file mode 100644 index 000000000..bdbfec9af --- /dev/null +++ b/workshops/instructor-training.yml @@ -0,0 +1,60 @@ +events: + - name: Online (with FocusCoE) + website: https://coderefinery.github.io/2020-11-02-instructor-training/ + start_date: "2020-11-02" + end_date: "2020-11-09" + instructors: + - Radovan Bast + - Richard Darst + - Anne Fouilloux + - Sabry Razick + helpers: + - Jarno Rantaharju + num_participants: + total: 14 + - name: Online (with TU Delft) + website: https://coderefinery.github.io/2020-06-24-instructor-training/ + start_date: "2020-06-24" + end_date: "2020-06-25" + instructors: + - Radovan Bast + - Richard Darst + - Anne Fouilloux + helpers: + - Thor Wikfeldt + - Paula Martinez Lavanchy + num_participants: + NO: 1 + FI: 1 + NL: 21 + total: 23 + - name: Stockholm + start_date: "2019-11-04" + end_date: "2019-11-05" + organizers: + - Thor Wikfeldt + - Anne Fouilloux + - Radovan Bast + instructors: + - Thor Wikfeldt + - Anne Fouilloux + - Radovan Bast + - Radovan Bast + - Richard Darst + helpers: + - Juho Lehtonen + - Sabry Razick + - Jarno Rantaharju + - João M. da Silva + - Max Roald Eckardt + - Naoe Tatara + - Emiliano Molinaro + - Bjørn Lindi + num_participants: + NO: 8 + DK: 2 + FI: 2 + UK: 1 + EE: 2 + SE: 15 + total: 30 diff --git a/workshops/other.yml b/workshops/other.yml new file mode 100644 index 000000000..c88562694 --- /dev/null +++ b/workshops/other.yml @@ -0,0 +1,469 @@ +events: + - name: 'CarpentryCon 2022: Online teaching strategies from CodeRefinery' + website: https://hackmd.io/@coderefinery/carpentrycon-2022-attendee + start_date: "2022-08-03" + end_date: "2022-08-03" + Organizer: + - Radovan Bast + - Richard Darst + instructors: + - Radovan Bast + - Richard Darst + - Luca Ferranti + - Samantha Wittke + num_participants: + total: 15 + - name: Community teaching mini-workshop + website: https://hackmd.io/@coderefinery/community-teaching-2022-summer + start_date: "2022-06-21" + end_date: "2022-06-21" + Organizer: + - Radovan Bast + - Richard Darst + instructors: + - Radovan Bast + - Richard Darst + - Diana Iusan + - Johan Hellsvik + helpers: [] + num_participants: + DK: 2 + ES: 1 + SE: 5 + NO: 7 + FI: 5 + LT: 1 + LV: 1 + total: 22 + - name: Git workshop with Compex Systems Modelling group at UiT + start_date: "2022-02-16" + end_date: "2022-02-23" + Organizer: + - Radovan Bast + instructors: + - Radovan Bast + helpers: [] + num_participants: + NO: 19 + total: 19 + - name: Python for Scientific Computing + website: https://scicomp.aalto.fi/training/scip/python-for-scicomp/ + start_date: "2021-10-25" + end_date: "2021-10-28" + Organizer: + - Richard Darst + - Enrico Glerean + instructors: + - Radovan Bast + - Richard Darst + - Enrico Glerean + - Johan Hellsvik + - Diana Iusan + - Pavlin Mitev + - Thomas Pfau + - Dhanya Pushpadas + - Jarno Rantaharju + - Sabry Razick + - Simo Tuomisto + - Marijn van Vliet + - Samantha Wittke + helpers: [] + - name: CodeRefinery workshop with focus on Git and GitLab for Metacenter + website: https://coderefinery.github.io/2021-03-25-online/ + start_date: "2021-03-25" + end_date: "2021-04-08" + host: + - Sabry Razick + - Radovan Bast + instructors: + - Sabry Razick + - Radovan Bast + helpers: [] + num_participants: + NO: 15 + total: 15 + - name: Online CodeRefinery Hackathon on Software Testing + website: https://coderefinery.github.io/2021-03-17-testing-hackathon/ + start_date: "2021-03-17" + end_date: "2021-03-24" + host: + - Naoe Tatara + - Thor Wikfeldt + mentors: + - Anne Fouilloux + - Diana Iusan + - Johan Hellsvik + - Mark Abraham + - Qiang Li + - Radovan Bast + - Richard Darst + - Roberto Di Remigio + - Samantha Wittke + - Thor Wikfeldt + helpers: + - Naoe Tatara + num_participants: + NO: 6 + FI: 4 + SE: 16 + DK: 3 + ZA: 4 + total: 33 + - name: Online CodeRefinery Workshop on Software Testing + website: https://coderefinery.github.io/2021-03-17-testing-hackathon/ + start_date: "2021-03-17" + end_date: "2021-03-17" + host: + - Naoe Tatara + - Thor Wikfeldt + instructors: + - Diana Iusan + - Johan Hellsvik + - Mark Abraham + - Thor Wikfeldt + helpers: + - Qiang Li + - Radovan Bast + - Roberto Di Remigio + - Samantha Wittke + - Naoe Tatara + num_participants: + NO: 14 + FI: 7 + SE: 31 + DK: 5 + IE: 1 + NL: 2 + UK: 1 + FR: 2 + TN: 1 + ZA: 5 + total: 69 + - name: Introduction to Shell, Computing resources for researchers, and HPC Kickstart (Aalto University and University of Oslo) (online) + website: https://coderefinery.github.io/2021-01-29-linux-online/ + start_date: "2021-01-29" + end_date: "2021-01-29" + instructors: + - Richard Darst + - Enrico Glerean + - Anne Fouilloux + - Sabry Razick + helpers: + - Marijn van Vliet + - Jarno Rantaharju + - Naoe Tatara + num_participants: + NO: 59 + FI: 71 + total: 130 + - name: Introduction to Conda for (Data) Scientists (online) + website: https://coderefinery.github.io/2021-01-08-coderefinery-online/ + start_date: "2021-01-08" + end_date: "2021-01-08" + instructors: + - Anne Fouilloux + - Samantha Wittke + helpers: + - Niket Agrawal + - Octavian Andrei + - Radovan Bast + - Emiliano Gelati + - Tomasz Kopec + - Emilia Lipponen + - Lex Nederbragt + - Hui Tang + - Sabry Razick + - Naoe Tatara + num_participants: + NO: 39 + FI: 5 + NL: 2 + SE: 1 + IN: 1 + total: 48 + - name: Collaborative version control with Git (online) + website: https://coderefinery.github.io/2020-12-10-online/ + start_date: "2020-12-10" + end_date: "2020-12-11" + instructors: + - Anne Fouilloux + - Radovan Bast + helpers: + - Sabry Razick + num_participants: + NO: 15 + total: 15 + - name: Version control (Karlstad/online) + website: https://wikfeldt.github.io/2020-09-22-karlstad/ + start_date: "2020-09-22" + end_date: "2020-09-23" + instructors: + - Raphaela Heil + - Thor Wikfeldt + - Pavlin Mitev + helpers: + - Diana Iusan + num_participants: + SE: 11 + CN: 1 + total: 12 + - name: Python for Scientific Computing (online) + website: https://scicomp.aalto.fi/training/scip/python-for-scicomp/ + start_date: "2020-09-14" + end_date: "2020-09-23" + host: + - Naoe Tatara + instructors: + - Anne Fouilloux + - Richard Darst + - Samantha Wittke + - Thor Wikfeldt + - Radovan Bast + num_participants: + FI: 41 + NO: 24 + SE: 3 + total: 68 + - name: GitHub without command line (Tampere/online) + start_date: "2020-08-13" + end_date: "2020-08-13" + instructors: + - Radovan Bast + - Richard Darst + helpers: + - Kerstin Lenk + - Narayan Puthanmadam Subramaniyam + num_participants: + FI: 16 + total: 16 + location: + lat: 61.49512 + lon: 23.77887 + - name: Workshop for those familiar with Git (online) + website: https://coderefinery.github.io/2020-05-18-online/ + start_date: "2020-05-18" + end_date: "2020-05-20" + host: + - Naoe Tatara + instructors: + - Radovan Bast + - Bjørn Lindi + - Sabry Razick + - Thor Wikfeldt + helpers: + - Richard Darst + - Max Roald Eckardt + - Juho Lehtonen + - Pavlin Mitev + num_participants: + SE: 20 + NO: 2 + FI: 1 + DE: 2 + unknown: 2 + total: 27 + - name: Collaborative Git (online) + website: https://coderefinery.github.io/2020-05-06-online/ + start_date: "2020-05-06" + end_date: "2020-05-06" + instructors: + - Anne Fouilloux + - Bjørn Lindi + - Thor Wikfeldt + - Stefan Negru + helpers: + - Radovan Bast + - Richard Darst + - Juho Lehtonen + - Sabry Razick + num_participants: + SE: 25 + NO: 5 + DK: 4 + FI: 3 + total: 37 + - name: GitHub without command line (online) + start_date: "2020-04-15" + end_date: "2020-04-22" + instructors: + - Radovan Bast + num_participants: + NO: 10 + total: 10 + - name: Introduction to Git (online) + website: https://coderefinery.github.io/2020-04-07-online/ + start_date: "2020-04-07" + end_date: "2020-04-08" + instructors: + - Anne Fouilloux + - Radovan Bast + - Thor Wikfeldt + - Richard Darst + helpers: + - Flavio Calvo + - João M. da Silva + - Pedro Ojeda May + - Pavlin Mitev + - Hasti Narimanzadeh + num_participants: + SE: 19 + FI: 1 + DE: 2 + total: 22 + - name: Best Software Practices for the Norwegian Earth System Model (Oslo/Bergen/Online) + start_date: "2020-02-05" + end_date: "2020-02-05" + instructors: + - Anne Fouilloux + num_participants: + NO: 30 + total: 30 + - name: Social coding and open software (Oslo) + website: https://www.ub.uio.no/english/courses-events/events/all-libraries/2020/research-bazaar/social-coding.html + start_date: "2020-01-09" + end_date: "2020-01-09" + instructors: + - Anne Fouilloux + num_participants: + NO: 21 + total: 21 + location: + lat: 59.91712 + lon: 10.73719 + - name: Hackathon (Stockholm) + start_date: "2019-11-06" + end_date: "2019-11-07" + organizers: + - Thor Wikfeldt + - Anne Fouilloux + - Radovan Bast + speakers: + - Rosa Lönneborg + - Richard Darst + - Anne Fouilloux + - Radovan Bast + num_participants: + NO: 8 + FI: 3 + DK: 1 + UK: 1 + EE: 1 + SE: 4 + total: 18 + location: + lat: 59.34781 + lon: 18.07257 + - name: Reproducibility workshop (Stockholm) + start_date: "2019-09-09" + end_date: "2019-09-12" + instructors: + - Thor Wikfeldt + - Will Usher + num_participants: + SE: 12 + total: 12 + location: + lat: 59.34847 + lon: 18.0729 + - name: Python for Dynamics and Evolution of Earth and Planets (Oslo) + website: https://annefou.github.io/2019-04-01-deep/ + start_date: "2019-04-01" + end_date: "2019-04-05" + instructors: + - Nils Charles Prieur + - Anne Fouilloux + num_participants: + NO: 12 + total: 12 + location: + lat: 59.94347 + lon: 10.718161 + - name: Mixed Arts with CodeRefinery & Software Carpentry (Copenhagen) + website: https://kln-courses.github.io/mixed-arts/ + start_date: "2019-03-05" + end_date: "2019-03-05" + instructors: + - Annika Rockenberger + - Max Roald Eckardt + num_participants: + DK: 40 + total: 40 + location: + lat: 55.66293 + lon: 12.59031 + - name: Git in practice (Oslo) + website: https://uio-carpentry.github.io/2019-02-27-git/ + start_date: "2019-02-27" + end_date: "2019-02-27" + instructors: + - Sabry Razick + - Anne Fouilloux + helpers: + - 'Annika Rockenberger ' + num_participants: + NO: 18 + total: 18 + location: + lat: 59.939637 + lon: 10.723291 + - name: Git workshop (Umeå) + start_date: "2017-10-16" + end_date: "2017-10-16" + instructors: + - Radovan Bast + - Jyry Suvilehto + - Thor Wikfeldt + num_participants: + SE: 21 + total: 21 + location: + lat: 63.8191 + lon: 20.31 + - name: 'Workshop: Interfacing Fortran, C, C++, and Python (Manchester)' + website: https://rse.ac.uk/conf2017/workshop-and-tutorial-abstracts/#mixed-martial-arts-with-coderefinery + start_date: "2017-09-08" + end_date: "2017-09-08" + instructors: + - Radovan Bast + num_participants: + total: 15 + location: + lat: 53.47724 + lon: -2.25475 + - name: 'Workshop: Mixed Martial Arts with CodeRefinery (Umeå)' + website: http://neic2017.nordforsk.org/workshops/coderefinery/ + start_date: "2017-05-29" + end_date: "2017-05-29" + instructors: + - Bjørn Lindi + - Radovan Bast + num_participants: + total: 15 + location: + lat: 63.8267 + lon: 20.2665 + - name: CodeRefinery get-together (Stockholm) + start_date: "2017-05-19" + end_date: "2017-05-19" + organizers: + - Radovan Bast + - Thor Wikfeldt + speakers: + - Mark Abraham + - Mikael Leetmaa + num_participants: + SE: 15 + total: 15 + location: + lat: 59.34819 + lon: 18.07489 + - name: CodeRefinery seminar (Oslo) + website: https://www.uio.no/english/services/it/research/events/coderefinery-2017-april.html + start_date: "2017-04-06" + end_date: "2017-04-06" + num_participants: + NO: 15 + total: 15 + location: + lat: 59.94347 + lon: 10.718161 diff --git a/workshops/past/index.html b/workshops/past/index.html new file mode 100644 index 000000000..d3b2b3e42 --- /dev/null +++ b/workshops/past/index.html @@ -0,0 +1,3008 @@ + + + + Past workshops and events - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Past workshops and events + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ +

Past workshops and events

+

This page lists the standard core CodeRefinery +workshop as well as other teaching events by the +CodeRefinery team. Before March 2020, we focused on small/medium +in-person workshops at sites around the Nordics. After that, we +focused on online teaching, and by the time in-person restrictions +were over, the CodeRefinery teaching +style was so well developed that we +are continuing online with in-person workshops as requested.

+ + +
+
+

(locations "in the ocean" represent online events)

+
+ + + +
+
+

Standard CodeRefinery workshops

+ + + +
    + + + + +
  • + + Full online workshop (6 half-days) + +
    + +   + + + Sep 19 + - + Sep 28, 2023 + + +   + (360 participants) + +
    +
  • + + + + + +
  • + + Full online workshop (6 half-days) + +
    + +   + + + Mar 21 + - + Mar 30, 2023 + + +   + (493 participants) + +
    +
  • + + + + + +
  • + + Uppsala + +
    + +   + + + May 9 + - + May 11, 2023 + + +   + (15 participants) + +
    +
  • + + + + + +
  • + + Full online workshop (6 half-days) + +
    + +   + + + Sep 20 + - + Sep 29, 2022 + + +   + (262 participants) + +
    +
  • + + + + + +
  • + + Full online workshop (6 half-days) + +
    + +   + + + Mar 22 + - + Mar 31, 2022 + + +   + (297 participants) + +
    +
  • + + + + + +
  • + + Full online workshop (6 half-days) + +
    + +   + + + May 10 + - + May 20, 2021 + + +   + (128 participants) + +
    +
  • + + + + + +
  • + + Online + +
    + +   + + + Nov 17 + - + Nov 26, 2020 + + +   + (77 participants) + +
    +
  • + + + + + +
  • + + Online + +
    + +   + + + Oct 20 + - + Oct 29, 2020 + + +   + (100 participants) + +
    +
  • + + + + + +
  • + + Online (Mega-CodeRefinery) + +
    + +   + + + May 25 + - + Jun 4, 2020 + + +   + (102 participants) + +
    +
  • + + + + + +
  • + + Trondheim + +
    + +   + + + Feb 25 + - + Feb 27, 2020 + + +   + (28 participants) + +
    +
  • + + + + + +
  • + + Espoo + +
    + +   + + + Dec 10 + - + Dec 12, 2019 + + +   + (30 participants) + +
    +
  • + + + + + +
  • + + Lille + +
    + +   + + + Nov 25 + - + Dec 5, 2019 + + +   + (28 participants) + +
    +
  • + + + + + +
  • + + Stockholm + +
    + +   + + + Nov 19 + - + Nov 21, 2019 + + +   + (28 participants) + +
    +
  • + + + + + +
  • + + Trondheim + +
    + +   + + + Oct 22 + - + Oct 24, 2019 + + +   + (20 participants) + +
    +
  • + + + + + +
  • + + Aalborg + +
    + +   + + + Jun 11 + - + Jun 13, 2019 + + +   + (20 participants) + +
    +
  • + + + + + +
  • + + Oslo + +
    + +   + + + Jun 3 + - + Jun 5, 2019 + + +   + (20 participants) + +
    +
  • + + + + + +
  • + + Helsinki + +
    + +   + + + May 27 + - + May 29, 2019 + + +   + (27 participants) + +
    +
  • + + + + + +
  • + + Gothenburg + +
    + +   + + + May 21 + - + May 23, 2019 + + +   + (25 participants) + +
    +
  • + + + + + +
  • + + Tartu + +
    + +   + + + Apr 2 + - + Apr 4, 2019 + + +   + (26 participants) + +
    +
  • + + + + + +
  • + + Stockholm + +
    + +   + + + Mar 25 + - + Mar 27, 2019 + + +   + (30 participants) + +
    +
  • + + + + + +
  • + + Espoo + +
    + +   + + + Dec 11 + - + Dec 13, 2018 + + +   + (33 participants) + +
    +
  • + + + + + +
  • + + Uppsala + +
    + +   + + + Dec 3 + - + Dec 5, 2018 + + +   + (31 participants) + +
    +
  • + + + + + +
  • + + Kiruna + +
    + +   + + + Nov 21 + - + Nov 23, 2018 + + +   + (38 participants) + +
    +
  • + + + + + +
  • + + Reykjavik + +
    + +   + + + Aug 21 + - + Aug 23, 2018 + + +   + (26 participants) + +
    +
  • + + + + + +
  • + + Oslo + +
    + +   + + + Jun 12 + - + Jun 14, 2018 + + +   + (42 participants) + +
    +
  • + + + + + +
  • + + Espoo + +
    + +   + + + May 29 + - + May 31, 2018 + + +   + (48 participants) + +
    +
  • + + + + + +
  • + + Lund + +
    + +   + + + May 15 + - + May 17, 2018 + + +   + (31 participants) + +
    +
  • + + + + + +
  • + + Turku + +
    + +   + + + Mar 20 + - + Mar 22, 2018 + + +   + (23 participants) + +
    +
  • + + + + + +
  • + + Trondheim + +
    + +   + + + Feb 27 + - + Mar 1, 2018 + + +   + (22 participants) + +
    +
  • + + + + + +
  • + + Espoo + +
    + +   + + + Dec 14 + - + Dec 16, 2017 + + +   + (40 participants) + +
    +
  • + + + + + +
  • + + Linköping + +
    + +   + + + Nov 7 + - + Nov 9, 2017 + + +   + (22 participants) + +
    +
  • + + + + + +
  • + + Aarhus + +
    + +   + + + Oct 24 + - + Oct 26, 2017 + + +   + (27 participants) + +
    +
  • + + + + + +
  • + + Tromsø + +
    + +   + + + Jun 19 + - + Jun 21, 2017 + + +   + (23 participants) + +
    +
  • + + + + + +
  • + + Copenhagen + +
    + +   + + + May 9 + - + May 11, 2017 + + +   + (23 participants) + +
    +
  • + + + + + +
  • + + Stockholm + +
    + +   + + + Feb 20 + - + Feb 22, 2017 + + +   + (34 participants) + +
    +
  • + + + + + +
  • + + Espoo + +
    + +   + + + Dec 14 + - + Dec 16, 2016 + + +   + (25 participants) + +
    +
  • + + +
+ + +

Open house events

+ +
+ +
+

Instructor training events

+ + + +
    + + + + +
  • + + Online (with FocusCoE) + +
    + +   + + + Nov 2 + - + Nov 9, 2020 + + +   + (14 participants) + +
    +
  • + + + + + +
  • + + Online (with TU Delft) + +
    + +   + + + Jun 24 + - + Jun 25, 2020 + + +   + (23 participants) + +
    +
  • + + + + + +
  • + + Stockholm + +
    + +   + + + Nov 4 + - + Nov 5, 2019 + + +   + (30 participants) + +
    +
  • + + +
+ + +

Shorter workshops and other events

+ + + + + +
+
+ +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/workshops/position-online.png b/workshops/position-online.png new file mode 100644 index 000000000..86e87a3c7 Binary files /dev/null and b/workshops/position-online.png differ diff --git a/workshops/request/index.html b/workshops/request/index.html new file mode 100644 index 000000000..4ec87f20d --- /dev/null +++ b/workshops/request/index.html @@ -0,0 +1,925 @@ + + + + Request a workshop - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Request a workshop + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Request a workshop

+ + + +

Join an existing workshop

+

Requesting a workshop is so 2019, isn't it? At least for us it is, +since anyone can attend any workshop. As of 2022, most of our +workshops are online and anyone may join, no matter where you are. +This isn't just because of Covid-19, but we have found that our +teaching style provides such a +high-quality program that few people show up in-person when there is +that opportunity. Join as a partner and +you can provide in-person exercise sessions and support to your local +audience.

+

Run your own workshop

+

You are welcome to re-use our materials for your own workshops. +Please don't call it a "CodeRefinery" workshop, but you can say it +uses CodeRefinery materials. (e.g. call it "Software development for +researchers (CodeRefinery)"). The policy of our name usage may change +later. You can read more about reusing our +lessons - in short, please do so (you can reuse +them right where they are), and send us improvements to support reuse.

+

Local / custom workshops requests

+

If you would like to request a private workshop, please get in +touch. As of 2022, with our updated funding +situation, CodeRefinery is more of a decentralized organization and we +may not have dedicated staff to offer workshops, but we still like to +make that possible wherever we can. Thus, you would be expected to +help with the teaching and organization some.

+

During this transition period, it's best to join the CodeRefniery +chat and discuss there - things +may change fast. It's good to ask if you are interested, even if we +can't do it yet - this shows demand and helps with future funding!

+

Since CodeRefinery still has Nordic roots, that is our main audience. +Workshops have been requested by both organizations and individual +research groups. Price might be free (e.g. a staff member at a +national computing center can provide the workshop) or some other +CodeRefinery partner might be able to name a price. We have supported +workshops even outside of the Nordics.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/workshops/statistics/index.html b/workshops/statistics/index.html new file mode 100644 index 000000000..7c262c410 --- /dev/null +++ b/workshops/statistics/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/workshops/teaching-style/index.html b/workshops/teaching-style/index.html new file mode 100644 index 000000000..e8f48b593 --- /dev/null +++ b/workshops/teaching-style/index.html @@ -0,0 +1,970 @@ + + + + The CodeRefinery teaching style - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - The CodeRefinery teaching style + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

The CodeRefinery teaching style

+ + + +
+

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!

+

[Feedback, online Scientific Computing kickstart, June 2021]

+
+

In-person workshops are taught in the Carpentries style. Our lessons +would fit in a Carpentries workshop, and we welcome such collaboration +or even joining the Carpentries.

+

In March 2020, CodeRefinery moved online like many others. While at +first, we taught the same way as everyone else did, we were bold +enough to go farther and eventually found something special.

+

Co-teaching

+

Listening to one person is usually monotonous, even if they are an +above-average speaker. Speakers usually try to create engagement by +having the audience speak as well, but quite often the audience is too +quiet, or a few audience members dominate.

+

Instead, we do co-teaching: two instructors teach as a discussion +between them. For example, at certain times, one may assume the role +of the explainer and one the role of the one doing the demos. A +conversation is much more engaging than a lecture, and in addition, +this greatly reduces the preparation effort, since the team can fill +in any gaps together.

+

Parallel chat

+

Asking for questions by voice rarely gets many. Even when it does, a +few people often dominate. Using a standard chat in an online course +scrolls too fast and many questions get lost.

+

Parallel chat is basically "google doc" but for questions. +Questions and comments are always added to the bottom, and answers +come as needed. We have many helpers around to answer all the +questions, the point that learners sometimes complain about +information overload. Many others have tried to do something similar, +but our implementation seems to be the best.

+

Livestreaming

+

With the above developments, we don't actually need all the learners +in one "meeting". Instead, we can run the course as a livestream, and +then we can literally reach everyone who might want to attend. +Personal data for registering isn't even needed (but we do take +registrations for access to the parallel chat and other support).

+

Videos

+

Once the course is a livestream, it is trivial to release videos of +the course - there is no privacy risk, since there are no audience in +the livestream production room. These videos aren't just released, +but the streaming site provides immediate access to them, so that +learners can immediately review or catch up with things they missed. +This extra flexibility helps many more people make the most of the course.

+

Reverse hybrid

+

Just because a course is online doesn't mean that people can't +interact in-person: many do, by watching the course together in +their own space (where people can be more comfortable). Many +partner organizations run in-person breakout rooms where professional +support is provided. We call this reverse hybrid.

+

Teams

+

The best interaction is in small groups - this is the benefit of +in-person, isn't it? We support learners in forming these teams and +training team leaders for them, in addition to providing expert +helpers for additional support. These teams could meet in-person (see +"reverse hybrid" above), or online.

+

Open collaboration

+

At the scale we can reach above, we have a new level of openness. Not +only are the lesson materials open, but our very partnership in +putting on the courses is open. We often organize courses in +partnership with several organizations, with co-instructors and +helpers coming from all around. In addition to providing a higher +quality workshop for learners, this provides a more engaging and +education experience for the staff putting on the events.

+

Open collaboration allows us the resources to do all the things above.

+

Accessibility to more learning styles

+

Put together, we don't just reach more people, but we actually are +able to teach to many more learning styles. Whether you are a quiet +person and would rather ask questions anonymously (without taking time +from someone else), need to attend from your own spaces, need more +time to review after the teaching period, or more, we can do better +than most.

+

Read more

+

Our techniques and tools are as open as our teaching. Read more in +the community teaching +training or read technical +descriptions in our manuals.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/workshops/upcoming/index.html b/workshops/upcoming/index.html new file mode 100644 index 000000000..6a0d0d69b --- /dev/null +++ b/workshops/upcoming/index.html @@ -0,0 +1,915 @@ + + + + Upcoming workshops and events - CodeRefinery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CodeRefinery - Upcoming workshops and events + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+ + +
+ + +

Upcoming workshops and events

+ + + +

Core CodeRefinery Workshops

+ +

We don't want you to miss a workshop or event. The best +way to stay informed is to join our newsletter +(we are working on reviving it and will post updates there soon). +You can also subscribe to our RSS feed.

+

Past workshops and events

+ +

Upcoming workshops from partner organizations

+

Partners are invited to send a pull +request +to list your workshop/event here.

+ +

Privacy policy

+

Our privacy policy +documents what registration data we store, where, and why.

+ + + +
+ +
+ +
+ +
+

Funding

+

+ CodeRefinery is a project within the + Nordic e-Infrastructure Collaboration (NeIC). + NeIC is an organisational unit under NordForsk. +

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+ + +
+ + + + + diff --git a/workshops/yes-no-questions-online.png b/workshops/yes-no-questions-online.png new file mode 100644 index 000000000..ec07e86ba Binary files /dev/null and b/workshops/yes-no-questions-online.png differ