diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..a1e37e6 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,69 @@ +# Zola build workflow. + +# Prerequisites: +# - zola writes output to public/ +# - variables below set correctly +# +# Setting it up: +# It is a general limitation of gh-actions that they cannot make the very first +# deploy to gh-pages. It will seem to work, but not appear on the CDN to be +# online. You need to go to settings and set the gh-pages branch, then future +# deploys will work. See +# https://github.com/marketplace/actions/github-pages-action#%EF%B8%8F-first-deployment-with-github_token + +name: Build/deploy website + +env: + ZOLA_VERSION: "0.17.2" + MAIN_BRANCH: "main" + TARGET_BRANCH: "gh-pages" +# CNAME: "example.org" + +on: + push: + branches: + - main + pull_request: + branches: + - main + +permissions: + contents: write + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout repository and submodules + uses: actions/checkout@v4 + with: + submodules: recursive + - name: Install zola + run: | + set -x + wget -O - \ + "https://github.com/getzola/zola/releases/download/v${ZOLA_VERSION}/zola-v${ZOLA_VERSION}-x86_64-unknown-linux-gnu.tar.gz" \ + | sudo tar xzf - -C /usr/local/bin + - name: Generate HTML + run: zola build + # Add CNAME, either (first one used) + # - file in the root + # - the environment variable set above + - name: add CNAME + run: | + if [ -f CNAME ] ; then + mv CNAME public/ + echo "Copied CNAME from repository root" + exit 0 + fi + if [ -n ${{ env.CNAME }} ] ; then + echo -n ${{ env.CNAME }} > public/CNAME + echo "Used CNAME from the action workflow file" + fi + - name: Deploy to gh-pages + if: ${{ github.event_name == 'push' && github.ref == format('refs/heads/{0}', env.MAIN_BRANCH) }} + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./public + force_orphan: true diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..13e1d49 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*~ +public/ +static/processed_images/ diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..c88ea2d --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "uikit"] + path = uikit + url = git@github.com:uikit/uikit.git diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..da6ab6c --- /dev/null +++ b/LICENSE @@ -0,0 +1,396 @@ +Attribution 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution 4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution 4.0 International Public License ("Public License"). To the +extent this Public License may be interpreted as a contract, You are +granted the Licensed Rights in consideration of Your acceptance of +these terms and conditions, and the Licensor grants You such rights in +consideration of benefits the Licensor receives from making the +Licensed Material available under these terms and conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + d. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + e. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + f. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + g. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + h. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + i. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + j. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + k. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + 4. If You Share Adapted Material You produce, the Adapter's + License You apply must not prevent recipients of the Adapted + Material from complying with this Public License. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material; and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. + diff --git a/README.md b/README.md new file mode 100644 index 0000000..11d4868 --- /dev/null +++ b/README.md @@ -0,0 +1,54 @@ +# CodeRefinery workshop webpage + +This repository is a template to set up webpages for CodeRefinery +workshops. + + +## Quick reference + +- (here collect all essential links for planning) + + +## How to generate your workshop repository + +To use it, follow these instructions: +- Click the green "Use this template" button. +- Select owner of the new repository and repository name. The name should look like + `2019-10-16-workshop`. For in-person workshops we use + "year-month-date-place" (e.g. `2019-10-16-stockholm`). +- Click "Create repository from template". +- You will now be redirected to the new repository. +- On "Settings" enable "GitHub Pages" from `gh-pages` as "Source". +- Add the link to the generated pages on top right of the repository page at + "About" to make it easier to find. +- Link the workshop from . + + +### How to customize this template after you have created the repository + +- Adapt `config.toml`: + - adapt `base_url` (it should contain a trailing slash) + - adapt `title` + - adapt settings below `[extra]` +- Adapt schedule in `content/schedule.yaml`. Use times in UTC. The times and + dates are automatically displayed in the local time zone of the browser. + + +### How this template works + +This template is based on the [Zola](https://www.getzola.org/) static site engine. + +To install Zola, follow: +- https://www.getzola.org/documentation/getting-started/installation/ +- https://snapcraft.io/zola can be used for system that are not supported by default +- But you can also download the binary directly from [here](https://github.com/getzola/zola/releases) + +Check that Zola is installed with `$ zola --version`. + + +### Local preview + +``` +$ zola serve --open +``` +This will open in your default browser a rendered version of the template. diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..227f876 --- /dev/null +++ b/config.toml @@ -0,0 +1,62 @@ +# The URL the site will be built for + +# this variable has to be set but it is not used +# inside the templates (end in '/') +base_url = "https://coderefinery.github.io/template-workshop-webpage/" + +# When adapting the title, do not forget to also adjust base_url above +title = "Replace this title in config.toml" +description = "Free workshop on git, testing, documentation, and more in a workshop - for researchers and scientists." + +# Whether to automatically compile all Sass files in the sass directory +compile_sass = true + +# Whether to build a search index to be used later on by a JavaScript library +build_search_index = false + +[markdown] +# Whether to do syntax highlighting +# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola +highlight_code = true +highlight_theme = "cheerfully-light" + +# Whether external links are to be opened in a new tab +external_links_target_blank = true + +[extra] + +navigation = [ + { name = "About", target = "" }, + { name = "List of exercises", target = "exercises/" }, + { name = "Audience", target = "audience/" }, + { name = "Certificates", target = "certificates/" }, + { name = "How to join", target = "join/" }, + { name = "Requirements", target = "requirements/" }, + { name = "Q&A", target = "questions/" }, + { name = "Code of conduct", target = "code-of-conduct/" }, + { name = "Communication", target = "communication/" } +] + +twitter_image = "https://raw.githubusercontent.com/coderefinery/coderefinery-artwork/main/socialshare/socialshare-workshop.png" + +# plausible.io analytics +plausible = { src = "https://plausible.cs.aalto.fi/js/script.js", domain = "coderefinery.github.io", github_ref = "refs/heads/main" } + + +# you can place multiple logos like this +# the image file(s) need to be placed in content/logos +logos = [ +# { alt_text = "CodeRefinery logo", target_url = "https://coderefinery.org/", image = "coderefinery.png" }, + { alt_text = "CodeRefinery logo", target_url = "https://coderefinery.org/", image = "coderefinery.png" } +] + +# adapt this +registration_link = "https://example.org" +source_repo = "https://github.com/coderefinery/template-workshop-webpage" +how_to_join_video = "https://youtu.be/QUAZELOioUY" + +# uncomment as soon as registration opens +# registration_is_open = true + +# uncomment as soon as registration closes +# registration_is_closed = true diff --git a/content/_index.md b/content/_index.md new file mode 100644 index 0000000..acc36a3 --- /dev/null +++ b/content/_index.md @@ -0,0 +1,61 @@ ++++ +title = "Schedule" ++++ + +## Be a team leader + +Do you know some of the topics, but want to review them? +Do you wish your colleagues or friends would use these tools? +Why not [attend as a team leader](@/join.md)? +Gather some friends who want to learn the topics and follow the workshop together. +You don't need to be an expert: if you have been through CodeRefinery once or have some familiarity +with the topics, and you are confident to call an expert helper when needed, +then you have all it takes to lead a team to success, +or lead even more people and join as an organization (see below). + + +## Partners and local exercise groups + +Some partners offer local support, such as breakout rooms, to their local +teams. You can [become a partner](https://coderefinery.org/about/partners/) to +support your community! + +We collect here the exercise groups that we know: +- [**Aalto University**](https://scicomp.aalto.fi/): + - Local in-person exercise session and local support. + - Possibility of [credit points](@/certificates.md) to those in Finland. + + +## Instructors + +- ... + + +## Workshop organizers + +- ... + + +## On-boarding + +- ... + + +## Outreach + +- ... + + +## Recording and broadcasting + +- ... + + +## Local organizers + +- ... + + +## Collaborative notes editors + +- ... diff --git a/content/audience.md b/content/audience.md new file mode 100644 index 0000000..faf4594 --- /dev/null +++ b/content/audience.md @@ -0,0 +1,45 @@ ++++ +title = "Course goals and audience" ++++ + + +## Course goals + +In this course, you will become familiar with tools and best practices for +scientific software development. This course will not teach a programming +language, but we teach the tools you need to do programming well and avoid +common inefficiency traps. The tools we teach are practically a requirement for +any scientist who needs to write code. The main focus is on using +Git for efficiently writing and maintaining research software. + + +## Audience + +Do you identify with any of these below, then this course is for you: + +
+ +- You write scripts to process data. +- You change scripts written by your colleagues. +- You write code that is used in research by you or others. +- You wish you could re-run your own code after a few months. +- You wish you could reproduce your own results better. +- You wish you could automate your work better. +- You, or your group, can't share or reuse code. +- You want to become more efficient at your work overall, by using the + best possible tools. + +
+ +This course is not designed for "professional software engineers" or to make +you one. You can register with your friends/group as a team and you'll +work together in exercise rooms, and you'll be able to work together after the +course as well. + + +## What we will not teach + +This is not a course about a specific programming language or the Linux/Unix +terminal shell. We assume that you are somehow familiar with the programming +language that you use in your work and research. Most of the course applies to +any programming language. diff --git a/content/certificates.md b/content/certificates.md new file mode 100644 index 0000000..0cc9feb --- /dev/null +++ b/content/certificates.md @@ -0,0 +1,41 @@ ++++ +title = "Certificates and credits" ++++ + +## Certificates and credits + +It is possible to obtain a certificate from the course with a little extra +work. The certificate is equivalent to 1 ECTS and your study supervisor will +be able to register it as a credit in your university study credit system. +**Please make sure that your supervisor/study program accepts it**. + +Learners with a valid Aalto student number will automatically get the credit +registered in Aalto systems. Please note that this does not apply to +participants affiliated with TU Delft or other universities who have own +criteria for workshop certificates and credits. + +To obtain a certificate, you must be affiliated with a university, or similar +research organisation. We expect you to **follow the 6 days** of the course and +provide us with the following **three text documents sent from your university email**: + +1. A document that shows that you did the exercises during the course. *Note: if you are planning to delete the exercise repository from your GitHub projects, instead of sending links to your work you can send PDF screenshots e.g. by doing "print to PDF" with your browser.* + - Write one or more paragraphs about [Day 1 - Exercise 2](https://coderefinery.github.io/git-intro/commits/#exercise): provide the link to the forked repository on your GitHub account and show that you did new commits. If you did not use GitHub and if you used the command line, then provide the output of the command `git log --all` for the forked repository. Explain what you did. + - Write one or more paragraphs about [Day 2 - Exercise 3](https://coderefinery.github.io/git-intro/sharing/#exercise): provide the link to the new repository you have created on your GitHub account. If you did not use GitHub and if you used the command line, then provide the output of the command `git log --all` for the newly created repository. Explain what you did. + - Write one or more paragraphs about [Day 3 - Exercise 1](https://coderefinery.github.io/git-collaborative/same-repository/#exercise): provide the link to the pull request. Explain what you did. +2. Written answers to the following four questions submitted as a document (pdf + or word or txt). Evaluation criteria: we expect critical answers related to + the content of first 3 days with both pros and cons (when relevant): + - When should you work with branches? + - What is the difference between a `git clone` and a `git fork`? + - What is the difference between a fork and a branch? + - What advantages and disadvantages to code review can you imagine/list? +3. A personal reflection for each of the 6 days written as a document (pdf or + word or txt, one paragraph per day). To get started, you can try answering + the questions: "Why is this important? How can it improve my research work?" + However any other personal reflection is welcome. Evaluation criteria: we + expect reflections that are related to the content of each of the six days. + +During the workshop we will provide with contact addresses where you should +send these documents to. + +As this is a very simple homework, the use of generative AI (like ChatGPT) is not allowed. We also have access to ChatGPT and we know how to write prompts that can generate the answers to these homework, so it is very easy for us to check when AI was used. Submissions suspected of being generated by AI will be rejected. diff --git a/content/code-of-conduct.md b/content/code-of-conduct.md new file mode 100644 index 0000000..86d7873 --- /dev/null +++ b/content/code-of-conduct.md @@ -0,0 +1,8 @@ ++++ +title = "Code of conduct" ++++ + +## Code of conduct + +For our workshops and events we use the code of conduct published on our [project +website](https://coderefinery.org/about/code-of-conduct/). diff --git a/content/communication/2024-03-01-team-leaders-without-groups.md b/content/communication/2024-03-01-team-leaders-without-groups.md new file mode 100644 index 0000000..7bab306 --- /dev/null +++ b/content/communication/2024-03-01-team-leaders-without-groups.md @@ -0,0 +1,27 @@ ++++ +title = "2024-03-01 Practical info for team leaders without own groups" +[extra] +subject = "CodeRefinery workshop: practical info for team leaders" ++++ + +Dear all, + +You have indicated that you might want to help out as team leader but don't have a team yet. +Thank you for your interest in helping the CodeRefinery to become an educational experience for everyone! + +This time, we do not provide a central exercise Zoom for learners and team leaders without own groups. +However, you can still support the workshop and here are few options: + +- Be available for questions. During the workshop we will use a collaborative document for asynchronous Q&A, you can help by answering questions there and keeping things organized. +- Gather colleagues and organize a (virtual) room to watch the workshop stream together and discuss the exercises of week 1. You can also organize additional exercise or help sessions around the workshop. +- Advertise the workshop in your networks. Let us know if we can help by providing texts or so. + +In any case you are welcome to attend our team leader onboarding session, to get to know about the different options: +- Zoom link: (URL) +- Schedule: https://coderefinery.github.io/2024-03-12-workshop/#schedule + +If you have any questions, please write to me or support@coderefinery.org. + +Thank you, + +Radovan and the CodeRefinery team diff --git a/content/communication/2024-03-01-team-leaders.md b/content/communication/2024-03-01-team-leaders.md new file mode 100644 index 0000000..0262662 --- /dev/null +++ b/content/communication/2024-03-01-team-leaders.md @@ -0,0 +1,69 @@ ++++ +title = "2024-03-01 Practical info for team leaders and local organizers" +[extra] +subject = "CodeRefinery workshop: practical info for team leaders and local organizers" ++++ + +Dear all, + + +**Summary** + +Thanks for being a team leader/ local organizer! + +Please join one of our onboarding sessions about being a team leader: +- Zoom link: (URL) +- Schedule: https://coderefinery.github.io/2024-03-12-workshop/#schedule + +We are working on simplifying install instructions (please wait with those). + +We plan to send an email to all registrants next week Tuesday. + +The are currently reworking the Git lessons for week 1 to reflect more how people work with Git today. + + +**Thank you** + +First of all: Thanks so much for doing this! It's the teams and team leaders that make this workshop really work. We really appreciate! + + +**What to expect** + +Expect a dynamic, exciting first week with lots of hands-on activities. Week 2 will be calmer, as we try a new route, providing exercise walk-throughs on stream and leaving it up to groups and individuals to play around on their own time. We suggest to meet in teams for week 1. If your group prefers to go through week 2 exercises, then we recommend to schedule your own sessions for that. + + +**How to prepare to lead a team** + +Some hints on being a team leader + +Do you want to be active or to be around? + +- If active: You'll need to take the lead in discussions. You don't have to discuss the active material: you could make the discussions about your own work (our material will be there later anyway). +- If "be around": During exercise sessions and other times, you can ask how it's going and take questions there. If it's too quiet, ask someone to screen-share and everyone else to say what to do. + +Be kind and considerate to everyone. Not everyone has to learn or do the same things. Don't make people feel bad for not doing as much as others, it's only natural! + +Don't worry! Take the first day to see how it works and then adapt based on what your group would like. + +It can be very hard to get people to talk sometimes. You can try this: Ask someone to screen-share (or you can). The person screen-sharing doesn't figure out what to do, but others tell them what to do. You can even make any exercises group-based this way. + +If you meet in-person and have a large screen to share: Twitch stream on one half, Notes on the other half. + + +**Onboarding session** + +We provide 4 sessions for onboarding of team leaders next week. Please join one of them to learn about the workshop format and ask any questions you may have. The zoom link is the on top of the email. + + +**Materials to read** + +One-page summary with tips and tricks: https://coderefinery.github.io/manuals/team-leaders/ + + +**Questions?** + +If you have any questions, please write to support@coderefinery.org. + +Thank you, + +Radovan and the CodeRefinery team diff --git a/content/communication/2024-03-05-practical-info.md b/content/communication/2024-03-05-practical-info.md new file mode 100644 index 0000000..01da5b7 --- /dev/null +++ b/content/communication/2024-03-05-practical-info.md @@ -0,0 +1,40 @@ ++++ +title = "2024-03-05 Practical information one week before the workshop" +[extra] +subject = "[CodeRefinery workshop] practical information" ++++ + +Dear {first_name}, + +We are one week away from the CodeRefinery workshop. Exciting! + +Everybody, please install required software before the workshop (we made it a lot easier this time): +- https://coderefinery.github.io/installation/ +- We offer two install help sessions (today and in two days; Tue and Thu): (URL shared with registrants) +- Schedule in your time zone: https://coderefinery.github.io/2024-03-12-workshop/#schedule + +If you are a team leader or organize a local classroom, please come to one of our on-boarding sessions: +- https://coderefinery.github.io/2024-03-12-workshop/#schedule +- Zoom link for on-boarding sessions: (URL shared with registrants) + + +**For all workshop participants**, here are all relevant resources that you need to connect: + +You can follow the workshop lectures via Twitch in a web browser, no account needed: +- https://twitch.tv/coderefinery + +Please use this collaborative document to ask questions during the workshop: +- (URL shared with registrants) + +Schedule and lecture material: +- https://coderefinery.github.io/2024-03-12-workshop/#schedule +- Each day we will take a break for lunch, which we have done our best to schedule at a time that will work for most locations as we are across multiple time zones. +- We are still working on updating the Git lessons. This time we plan to work more in the browser and editor and less in the terminal. + + +If you have any questions, please write to support@coderefinery.org or reply to me. + + +Best regards, + +Radovan and the CodeRefinery team diff --git a/content/communication/2024-03-10-practical-info2.md b/content/communication/2024-03-10-practical-info2.md new file mode 100644 index 0000000..f2ae94a --- /dev/null +++ b/content/communication/2024-03-10-practical-info2.md @@ -0,0 +1,31 @@ ++++ +title = "2024-03-10 Practical information one day before the workshop" +[extra] +subject = "[CodeRefinery workshop] practical information" ++++ + +Dear {first_name}, + +The CodeRefinery workshop starts on Tuesday! + +We expect a dynamic and exciting workshop and very much look forward to it. +Below are all relevant resources that you need to connect. + +You can follow the workshop lectures via Twitch in a web browser, no account needed: +- https://twitch.tv/coderefinery + +Please use this collaborative document to ask questions during the workshop: +- (URL shared with registrants) + +Schedule and lecture material: +- https://coderefinery.github.io/2024-03-12-workshop/#schedule (in your local time zone) +- Each day we will take a break for lunch, which we have done our best to schedule at a time that will work for most locations as we are across multiple time zones. + +Please install required software before the workshop: +- https://coderefinery.github.io/installation/ + +If you have any questions, please write to support@coderefinery.org or reply to me. + +Best regards, + +Radovan and the CodeRefinery team diff --git a/content/communication/2024-03-12-exercise-preparation.md b/content/communication/2024-03-12-exercise-preparation.md new file mode 100644 index 0000000..17f9198 --- /dev/null +++ b/content/communication/2024-03-12-exercise-preparation.md @@ -0,0 +1,24 @@ ++++ +title = "2024-03-12 Exercise preparation for learners without own group" +[extra] +subject = "[CodeRefinery workshop] preparation for Thursday for leaners without own group" ++++ + +Dear {first_name}, + +This email is only relevant if you plan to participate in the CodeRefinery workshop this Thursday as individual learner and are not part of a team or a local exercise group. + +On Thursday we will all practice how to collaborate using Git/GitHub and one ambitious thing we will try is to collaborate with participants following via stream. + +If you would like to participate as individual learner in the collaborative exercises, please request access by opening an issue at https://github.com/cr-workshop-exercises/access-requests/issues/new/choose (There click "Get started" -> "Submit new issue") + +This way we will know your GitHub username and give you write access to exercise repositories. + +After we add you as collaborator, you will get an email from GitHub. +- Please accept the invitation +- Don't forget to "unwatch" both https://github.com/cr-workshop-exercises/centralized-workflow-exercise and https://github.com/cr-workshop-exercises/centralized-workflow-exercise-recorded to make sure you don't get too many emails during the exercise. +- To "unwatch", go to the repository and click the "Unwatch" button (top middle of the screen) and then select "Participating and @mentions". + +Best regards, + +Radovan and the CodeRefinery team diff --git a/content/communication/2024-03-18-week2-prep.md b/content/communication/2024-03-18-week2-prep.md new file mode 100644 index 0000000..ab4bbb6 --- /dev/null +++ b/content/communication/2024-03-18-week2-prep.md @@ -0,0 +1,36 @@ ++++ +title = "2024-03-18 Welcome to week 2" +[extra] +subject = "[CodeRefinery workshop] welcome to week 2" ++++ + +Dear {first_name}, + +Thank you for joining the workshop last week, and for all the wonderful questions we got from you! +For those who join us now for the second week only, welcome! +- All questions and answers are archived: https://coderefinery.github.io/2024-03-12-workshop/questions/ +- Video recordings are published: https://www.youtube.com/watch?v=9eUUd40HkYI&list=PLpLblYHCzJADIsbUhXSrC0qW5wDsH-F9U + +We hope you got some good practice and understanding on how to collaborate using Git/GitHub and our trial of collaborating with you from the stream worked out for you! If you have suggestions on how to improve our lessons, please open issues or send pull requests: +- https://github.com/coderefinery/git-intro +- https://github.com/coderefinery/git-collaborative + + +This week will be a little more diverse! + +We will take a peek into six topics that are all related to FAIR research software development: + +Tuesday will start with an overview of how all CodeRefinery lessons fit together under the umbrella of reproducible research and what steps you can take now already to make your research more reproducible. In the afternoon we will look into licenses, how they work and why you might want to care even when "only writing a small script for myself". + +Wednesday morning we look at different ways of how to document research code. From small projects with good README files to external documentation on Read the Docs. In the afternoon we will show some tips and tricks around Jupyter notebooks and how they can be used also outside of courses. + +Thursday we step a little deeper into software development practices by giving you an introduction into automated testing and how this could benefit you and your collaborators. The workshop ends with some live coding to showcase how to make code more reusable by caring about modularity. + +In contrast to week 1, there will not be any dedicated exercise times in week 2. Instead, instructors will demo things and discuss with you using the collaborative document. If you want, you can of course try to follow the demos or try to do them on your own time after the workshop. For this, you will need to install some tools which you can find at: https://coderefinery.github.io/installation/. + +We hope to see you again this week with the first session starting Tuesday at 9:00 CET (10 EET). We will start the stream 10 minutes earlier: https://coderefinery.github.io/2024-03-12-workshop/#schedule + + +Best regards, + +CodeRefinery team diff --git a/content/communication/_index.md b/content/communication/_index.md new file mode 100644 index 0000000..ad23961 --- /dev/null +++ b/content/communication/_index.md @@ -0,0 +1,17 @@ ++++ +title = "Communication with participants" +template = "emails.html" ++++ + +## Communication with participants + +Here we collect email texts which we have sent to participants. They are +hopefully useful for late registrations or future workshops. + +
+ +

+ If you registered late and cannot find the link to the Q&A document, can + you please contact us (bottom of page)? +

+
diff --git a/content/communication/announcement-long.md b/content/communication/announcement-long.md new file mode 100644 index 0000000..1c9567c --- /dev/null +++ b/content/communication/announcement-long.md @@ -0,0 +1,22 @@ ++++ +title = "Workshop announcement example (longer version)" +[extra] +subject = "CodeRefinery workshop announcement" ++++ + +Are you writing code and managing data for your research? Do you feel like +wasting too much time on manual work? Do you struggle to understand and reuse older code? + +Join +the CodeRefinery workshop, +**ADAPT DATES**, +for free and online. + +The workshop covers good coding practices, reproducible research principles, +and using Git for collaboration. It offers breakout room exercises with team +leaders, and you can register as a team or volunteer as a team leader. +But you can also follow on your own if you prefer. +In-person exercise sessions are available in some locations. + +Register and find more information at +**LINK TO WORKSHOP PAGE**. diff --git a/content/communication/announcement-short.md b/content/communication/announcement-short.md new file mode 100644 index 0000000..cf33255 --- /dev/null +++ b/content/communication/announcement-short.md @@ -0,0 +1,14 @@ ++++ +title = "Workshop announcement example (shorter version)" +[extra] +subject = "CodeRefinery workshop announcement" ++++ + +CodeRefinery invites everyone interested in improving their software practice +skills to join +the CodeRefinery workshop, +**ADAPT DATES**, +for free and online. + +Register and find more information at +**LINK TO WORKSHOP PAGE**. diff --git a/content/exercises.md b/content/exercises.md new file mode 100644 index 0000000..3a50594 --- /dev/null +++ b/content/exercises.md @@ -0,0 +1,32 @@ ++++ +title = "List of exercises" ++++ + +## List of exercises + +### Week 1 + +Day 1: +- [Copy and browse an existing project](https://coderefinery.github.io/git-intro/browsing/#exercise) +- [Committing changes](https://coderefinery.github.io/git-intro/commits/#exercise) +- [Merging changes and contributing to the project](https://coderefinery.github.io/git-intro/merging/#exercise) + +Day 2: +- [Cloning a Git repository and working locally](https://coderefinery.github.io/git-intro/local-workflow/#exercise) +- [Inspecting history](https://coderefinery.github.io/git-intro/archaeology/#exercise) +- [How to turn your project to a Git repo and share it](https://coderefinery.github.io/git-intro/sharing/#exercise) + +Day 3: +- [Collaborating within the same repository](https://coderefinery.github.io/git-collaborative/same-repository/#exercise) +- [Practicing code review](https://coderefinery.github.io/git-collaborative/code-review/#exercise) +- [How to contribute changes to repositories that belong to others](https://coderefinery.github.io/git-collaborative/forking-workflow/#exercise) + + +### Week 2 + +In week 2, the instructors will go through exercises on stream and invite +learners to participate with questions using the collaborative document. + +We will not switch between lectures and group exercise sessions in week 2. For +groups that wish to go through exercises on their own, we recommend to schedule +separate sessions for this. diff --git a/content/how-to-join.png b/content/how-to-join.png new file mode 100644 index 0000000..c5bd808 Binary files /dev/null and b/content/how-to-join.png differ diff --git a/content/join.md b/content/join.md new file mode 100644 index 0000000..9ab3edf --- /dev/null +++ b/content/join.md @@ -0,0 +1,133 @@ ++++ +title = "How to join" +template = "join.html" ++++ + +Anyone may watch the livestream (). +You are free to attend just those days or sessions you want. +Read more about [how to attend a livestream course](https://coderefinery.github.io/manuals/how-to-attend-stream/) or [watch the video on YouTube](https://youtu.be/QUAZELOioUY). +Some partners host own video- or in-person exercise rooms. + + +{{ div(attributes='class="uk-child-width-expand@m uk-margin-large-top" uk-grid') }} + +{{ div() }} + + +### Attend on your own + +The promise of the Internet is that we can reach everyone, so why +don't we? We teach on a Twitch livestream +([twitch.tv/coderefinery](https://twitch.tv/coderefinery)) so that +anyone may attend the workshop. With livestream attendance, you get: +- Access to all workshop content, text and video +- Lesson recordings released usually on the same day +- A channel for questions (if you register) +- To do exercises yourself, or in a self-organized group + + +### Attend with own team + +**We recommend that you form your own team and do exercises together in-person +or online.** Especially for week 1. We will support this as much as we can. + +You can arrange everything with your friends and colleagues: +- Agree where to meet +- Agree how to follow the workshop +- Maybe have some communications channel for your team +- We send all registrants all information about the workshop +- We don't need to know the details, but let us know if you have a team (for reporting purposes) + + +### Attend in a local partner's event + +Some of our partners arrange an on-site meetings where they follow the teaching +together and get in-person assistance. Feel free to suggest your educational +institute to [become a +partner](https://coderefinery.org/organization/partners/#joining-as-a-partner) +and/or arrange a local breakout room. + + +### Volunteer as team leader + +CodeRefinery's mission is to enable everyone to use the computational +tools they need for their work. We do this by teaching the most important +software development tools, which are often missed in other coursework. +This is a big task, but together with our volunteer team leaders, +we can do it. + +Volunteer to be an **team leader** at CodeRefinery, and you will: +- Mentor and provide positive encouragement for your team; guide them + through the workshop. +- Attend our quick team leader training (one hour, see schedule). +- Have your own team (breakout room of ~5) during the course. +- Help keep the team on track. You are the first line, but you don't + need to know everything. +- Call for other help when needed. We have the collaborative Q&A document for everyone. + +**Am I good enough to be a team leader?** If you are asking this +question, probably you are. If you have some familiarity with +Git, you can provide some initial advice on obvious error messages, +but the idea is that you are able to ask for advanced help when it's needed. + +**You don't have to be located in the Nordics**. We welcome volunteers from +institutions also outside the Nordics because volunteer team leaders help +us to reach more people. + +{{ enddiv() }} + +{{ div() }} + + +### Price and attendance priority policy + +The course is free of charge, funded by the [Nordic e-Infrastructure +Collaboration](https://neic.no/). The livestream can scale up to an arbitrary +number of viewers. The local partners usually use "first come - first +served"-principle + a waiting list. Some might also accept only members of +their own organisation. + + +### Accessibility + +We hope that everyone can attend and learn from this workshop, but we +aren't perfect. Our attempts are mentioned below, if you would like +to help or there is something else we can do, please get in touch. + +* Breakout rooms with team leaders gives a community atmosphere + and private help, even in a big course. +* Local partners can provide locally-relevant support, both short and + long term, without worrying about basic course mechanics. +* Our material is provided in many different formats: writing (lesson + websites), by presenting, videos, Q&A, and more. +* We record videos and post the notes so you can review at your own + pace later on. Videos completely preserve privacy (don't include + audience voice or video). +* Raw Twitch videos are available immediately - so you can immediately + review anything you didn't catch the first time. This greatly + reduces pressure from the course. +* We also try very hard to release YouTube videos by the same day, so + that they are useful for further-refined instant review (even if + they are not perfect). +* A collaborative document allows everybody to ask questions anonymously and + asynchronously, without worrying about interrupting others. (On the + other hand, there are many questions, so don't let it distract you + from the main flow). These notes are published for later review. +* Lesson websites and collaborative document use standard web technologies, so that + browser accessibility plugins can be used (for example: making the + font more accessible, check browser extensions). +* Twitch can be live-captioned using the Google Chrome browser. +* You can follow along without providing any personal data + (without registration to any services, though GitHub registration is + used for many exercises). +* We can share the course attendance with an unlimited number of + people. +* Local sessions with partners and limited global interaction makes + Code of Conduct monitoring much easier. +* We try to make our written material as accessible as possible, both + in content and form. This may not be perfect, but we welcome help + to make things better. + +{{ enddiv() }} + +{{ enddiv() }} diff --git a/content/links.md b/content/links.md new file mode 100644 index 0000000..c5b94b7 --- /dev/null +++ b/content/links.md @@ -0,0 +1,14 @@ ++++ ++++ + +### Summary of important links + +- Watch the stream at [https://twitch.tv/coderefinery](https://twitch.tv/coderefinery) (shareable) +- [Archive of past communication to participants](@/communication/_index.md) (shareable) +- Q&A of each day is archived on [this page](@/questions/_index.md) (shareable) +- Videos [on Twitch](https://www.twitch.tv/coderefinery/videos) for 7 days + and [on + YouTube](https://www.youtube.com/playlist?list=PLpLblYHCzJADIsbUhXSrC0qW5wDsH-F9U) later +- Install instructions: +- Lesson material is linked in the schedule below (shareable) +- Collaborative document for questions and notes (please register to receive it) diff --git a/content/logos/coderefinery.png b/content/logos/coderefinery.png new file mode 100644 index 0000000..96042a0 Binary files /dev/null and b/content/logos/coderefinery.png differ diff --git a/content/news.md b/content/news.md new file mode 100644 index 0000000..020b176 --- /dev/null +++ b/content/news.md @@ -0,0 +1,6 @@ ++++ ++++ + +### News + +- Here we will post latest news before/during the workshop diff --git a/content/questions/_index.md b/content/questions/_index.md new file mode 100644 index 0000000..3e6c0b4 --- /dev/null +++ b/content/questions/_index.md @@ -0,0 +1,14 @@ ++++ +title = "Questions, answers, and feedback" +template = "q-and-a.html" ++++ + +## Questions, answers, and feedback + +Here we will share during/after the workshop (anonymized) questions, answer, +and feedback from the collaborative notes. + +- As **workshop organizer**: Please make sure to not paste any personal information + in here. +- As **workshop participant**: Please avoid using personal information. +- As **instructor**: Use the notes from the last workshop when preparing your lessons and exercises. diff --git a/content/questions/day1.md b/content/questions/day1.md new file mode 100644 index 0000000..028dab7 --- /dev/null +++ b/content/questions/day1.md @@ -0,0 +1,7 @@ ++++ +template = "page-with-toc.html" +title = "Questions and notes from workshop day 1" ++++ + +This document is a placeholder and will be replaced by the actual questions and +notes. diff --git a/content/registration.md b/content/registration.md new file mode 100644 index 0000000..ce0fc37 --- /dev/null +++ b/content/registration.md @@ -0,0 +1,17 @@ ++++ ++++ + +**There is no deadline** and you are welcome to register and join even after +the event started. **You can attend just those days or sessions you want** but +please register anyway. + +**Should all in a team sign up? Or only one person?** We recommend that all +register so that they get all necessary information. + +**If you want to join as organization** to provide local helpers or in-person +sessions, please do! This usually takes the form of a "watching party" with +coordinated breaks for exercises. + +**Some organizations offer their own registration form**. In this case please +register with them and then you do not have to register here centrally as well. +We will then make sure that everybody gets all necessary information. diff --git a/content/requirements.md b/content/requirements.md new file mode 100644 index 0000000..fd7ebd6 --- /dev/null +++ b/content/requirements.md @@ -0,0 +1,67 @@ ++++ +title = "Prerequisites and software requirements" ++++ + +## Prerequisites + +- If you choose to participate using the command line, then you should be able + to navigate the file tree in a terminal session and edit + text files in the terminal. + [This Linux shell crash course](https://scicomp.aalto.fi/scicomp/shell/) + ([video](https://youtu.be/56p6xX0aToI)) + contains the essentials. +- We assume you already use some programming or scripting language but we do + not require knowing a particular programming language. We try to keep this + course independent of a specific programming language and relevant for all + languages (but it is a process and not all material is completely generic + yet). +- Read [how to attend a livestream course](https://coderefinery.github.io/manuals/how-to-attend-stream/). +- Printing [this Git + cheatsheet](https://aaltoscicomp.github.io/cheatsheets/git-the-way-you-need-it-cheatsheet.pdf) + would be helpful - it was made by us and we'll refer to it. + + +## Preparation (software installation) + +It takes a bit of time to install and configure the required software but with +500 or more participants it is not doable to debug these during the workshop +and we ask you to install and configure these **before you arrive at the +workshop** following the instructions and checklist on [this +page](https://coderefinery.github.io/installation/). + +Please **make sure that Git is configured**, and **verify the configuration** +([text instructions](https://coderefinery.github.io/installation/shell-and-git/), [video](https://www.youtube.com/watch?v=WdDTp8NeHBs&t=258s)). + +We offer install help sessions (see schedule). Please use one of these. It will +improve the workshop experience for you and others. + +We now also provide a [verification +script](https://coderefinery.github.io/installation/#overall-verification) +to help you check software and configuration with one command. + + +## Privacy and tools/online services + +In CodeRefinery, we try to teach you tools that we see being used in the +research world and tools we consider important. This sometimes leads to +situations where a tool that is commonly used is not the tool that is most open +or anonymous. + +We encourage everyone to install the software we suggest, to be +able to follow the course without additional issues. However, if you do not +want to use the software or services we suggest for any reason (we understand +that there are good reasons for doing so) you should be aware that the hands-on +aspects of the course are unlikely to apply as is. + +In any case, we suggest +following the instructors and fellow learners to learn about the suggested +software and its possible differences with your choice of tools. In many cases +there may even be a more open/ anonymous tool for the job, we hope you +understand that we can not offer support for every possible tool (everyone has +their preferences). Our decision for using the tools we suggest in this +workshop is based on what we think will be most useful for most of our +learners. Here we try to balance between usefulness and privacy and hope we are +doing a good job. If you are unsure about anything or do not agree with our +choice, feel free to contact us or contribute directly to our lesson material +to make it more inclusive while also being useful for the majority of our +learners. diff --git a/content/schedule.yaml b/content/schedule.yaml new file mode 100644 index 0000000..ee1ecc3 --- /dev/null +++ b/content/schedule.yaml @@ -0,0 +1,153 @@ +--- +# all times must be input in UTC, be careful about daylight saving +schedule: + - title: "Installation help and on-boarding" + date: "2024-03-05" + sessions: + - starts: 9:30 + ends: 10:30 + title: On-boarding for team leaders (option 1) + url: https://coderefinery.github.io/manuals/team-leaders/ + - starts: 11:00 + ends: 12:00 + title: On-boarding for team leaders (option 2) + url: https://coderefinery.github.io/manuals/team-leaders/ + - starts: 12:30 + ends: 14:00 + title: Installation help for everybody (option 1) + url: https://coderefinery.github.io/installation/ + - title: "Installation help and on-boarding (you don't need to attend all sessions, choose the one that is better for you)" + date: "2024-03-07" + sessions: + - starts: 9:30 + ends: 10:30 + title: On-boarding for team leaders (option 3) + url: https://coderefinery.github.io/manuals/team-leaders/ + - starts: 11:00 + ends: 12:00 + title: On-boarding for team leaders (option 4) + url: https://coderefinery.github.io/manuals/team-leaders/ + - starts: 12:30 + ends: 14:00 + title: Installation help for everybody (option 2) + url: https://coderefinery.github.io/installation/ + - title: "Day 1" + date: "2024-03-12" + sessions: + - starts: 8:00 + ends: 8:20 + title: Welcome and introduction + url: https://github.com/coderefinery/workshop-intro/blob/master/livestream.md + presenters: TBA + - starts: 8:20 + ends: 10:00 + title: Introduction to version control with Git - part 1/4 + subtitle: "Why we want to track versions and how to go back in time to a working version: [Motivation](https://coderefinery.github.io/git-intro/motivation/), [Browsing](https://coderefinery.github.io/git-intro/browsing/), [Commiting](https://coderefinery.github.io/git-intro/commits/)" + url: https://coderefinery.github.io/git-intro/ + presenters: TBA + - starts: 11:00 + ends: 12:30 + title: Introduction to version control with Git - part 2/4 + url: https://coderefinery.github.io/git-intro/ + presenters: TBA + subtitle: "[Merging](https://coderefinery.github.io/git-intro/merging/)" + - title: "Day 2" + date: "2024-03-13" + sessions: + - starts: 8:00 + ends: 10:00 + title: Introduction to version control with Git - part 3/4 + url: https://coderefinery.github.io/git-intro/ + presenters: TBA + subtitle: "[Day 2 intro](https://github.com/coderefinery/workshop-intro/blob/master/daily_intro.md), [Local work](https://coderefinery.github.io/git-intro/local-workflow/), [Inspecting history](https://coderefinery.github.io/git-intro/archaeology/)" + - starts: 11:00 + ends: 12:30 + title: Introduction to version control with Git - part 4/4 + url: https://coderefinery.github.io/git-intro/ + presenters: TBA + subtitle: "[Sharing work](https://coderefinery.github.io/git-intro/sharing/)" + - title: "Day 3" + date: "2024-03-14" + sessions: + - starts: 8:00 + ends: 10:00 + title: Collaborative distributed version control - part 1/2 + url: https://coderefinery.github.io/git-collaborative/ + presenters: TBA + subtitle: >- + [Day 3 + intro](https://github.com/coderefinery/workshop-intro/blob/master/daily_intro.md#welcome-to-day-3-of-the-coderefinery-workshop), + [Concepts](https://coderefinery.github.io/git-collaborative/concepts/), + [Same + repository](https://coderefinery.github.io/git-collaborative/same-repository/), + [Code + Review](https://coderefinery.github.io/git-collaborative/code-review/) + - starts: 11:00 + ends: 12:30 + title: Collaborative distributed version control - part 2/2 + url: https://coderefinery.github.io/git-collaborative/ + presenters: TBA + subtitle: >- + [Contributing to others](https://coderefinery.github.io/git-collaborative/forking-workflow/) + + - title: "Day 4" + date: "2024-03-19" + sessions: + - starts: 8:00 + ends: 10:00 + title: Reproducible research + subtitle: Preparing code to be usable by you and others in the future + url: https://coderefinery.github.io/reproducible-research/ + presenters: TBA + - starts: 11:00 + ends: 12:30 + title: Social coding and open software + subtitle: What can you do to get credit for your code and to allow reuse + url: https://coderefinery.github.io/social-coding/ + presenters: TBA + - title: "Day 5" + date: "2024-03-20" + sessions: + - starts: 8:00 + ends: 10:00 + title: How to document your research software + url: https://coderefinery.github.io/documentation/ + presenters: TBA + - starts: 11:00 + ends: 12:30 + title: Jupyter notebooks + subtitle: A tool to write and share executable notebooks and data visualization + url: https://coderefinery.github.io/jupyter/ + presenters: TBA + - title: "Day 6" + date: "2024-03-21" + sessions: + - starts: 8:00 + ends: 10:00 + title: Automated testing + subtitle: Preventing yourself and others from breaking your functioning code + url: https://coderefinery.github.io/testing/ + presenters: TBA + - starts: 11:00 + ends: 12:30 + title: Modular code development + subtitle: Making reusing parts of your code easier + url: https://coderefinery.github.io/modular-type-along/ + presenters: TBA + - starts: 12:30 + ends: 13:00 + title: "Concluding remarks, general Q&A, and where to go from here" + url: https://github.com/coderefinery/workshop-outro/blob/master/README.md + presenters: TBA + - title: "Optional: Bring your own code session" + date: "2024-03-26" + sessions: + - starts: 12:00 + ends: 14:00 + title: Bring your own code and discuss and ask; you can also join this session if you have not attended the workshop + - title: "Optional: Bring your own code session" + date: "2024-04-02" + sessions: + - starts: 11:00 + ends: 13:00 + title: Bring your own code and discuss and ask; you can also join this session if you have not attended the workshop diff --git a/sass/style.scss b/sass/style.scss new file mode 100644 index 0000000..0d85c07 --- /dev/null +++ b/sass/style.scss @@ -0,0 +1,52 @@ +// https://webaim.org/blog/wcag-2-0-and-link-colors/ +// https://github.com/uikit/uikit/blob/develop/src/scss/variables-theme.scss +$global-link-color: #3366dd; +$navbar-nav-item-color: #3366dd; +$navbar-nav-item-hover-color: #cc0099; +$iconnav-item-color: #3366dd; +$iconnav-item-hover-color: #cc0099; +$global-primary-background: #3366cc; +$global-secondary-background: #993366; +$base-code-color: #cc0099; +$text-meta-color: #666666; +$table-header-cell-color: #666666; + +// https://getuikit.com/docs/sass +@import "../uikit/src/scss/variables-theme.scss"; +@import "../uikit/src/scss/mixins-theme.scss"; +@import "../uikit/src/scss/uikit-theme.scss"; + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(Roboto.ttf) format('truetype'); +} + +* { + font-family: 'Roboto', sans-serif; +} + +.markdown ul { + @extend .uk-list; + @extend .uk-list-square; + +} + +$heading-color: #404040; + +.markdown h1 { + @extend .uk-h2; + color: $heading-color; +} + +.markdown h2 { + @extend .uk-h3; + color: $heading-color; +} + +.markdown h3 { + @extend .uk-h4; + color: $heading-color; +} diff --git a/static/Roboto.ttf b/static/Roboto.ttf new file mode 100644 index 0000000..3033308 Binary files /dev/null and b/static/Roboto.ttf differ diff --git a/static/img/favicon.ico b/static/img/favicon.ico new file mode 100644 index 0000000..a2df0fb Binary files /dev/null and b/static/img/favicon.ico differ diff --git a/templates/base.html b/templates/base.html new file mode 100644 index 0000000..4023d47 --- /dev/null +++ b/templates/base.html @@ -0,0 +1,61 @@ + + + + {% if page.title %}{{page.title}} - {% endif %}{{ config.title }} + + + + + + + + + + + + + + + {% block rss %} + + {% endblock %} + + {% include "twitter.html" %} + + {% if config.extra.search_engine_exclude %} + + + {% endif %} + + + + {% if config.extra.plausible and get_env(name="GITHUB_REF", default="") == config.extra.plausible['github_ref'] %} + + {% endif %} + + + + + +
+ + {% include "navigation.html" %} + +
+ {% block content %} + {% endblock content %} +
+ +
+
+ {% include "footer.html" %} +
+ +
+ + + + + diff --git a/templates/emails.html b/templates/emails.html new file mode 100644 index 0000000..899472a --- /dev/null +++ b/templates/emails.html @@ -0,0 +1,32 @@ +{% extends "base.html" %} + +{% block content %} + {% if section.content %} + {{ section.content | safe }} + {% endif %} + +

List of emails

+
    + {% for email in section.pages | sort(attribute="title") | reverse %} +
  • + {{ email.title }} +
  • + {% endfor %} +
+ + {% for email in section.pages | sort(attribute="title") | reverse %} +
+
+ {{ email.title }} +
+

+ Subject: {{ email.extra.subject }} +

+

+ + {{ email.content | safe }} + +

+
+ {% endfor %} +{% endblock content %} diff --git a/templates/footer.html b/templates/footer.html new file mode 100644 index 0000000..93f5342 --- /dev/null +++ b/templates/footer.html @@ -0,0 +1,48 @@ +
+ +
+

Funding

+

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

+
+ +
+

Privacy

+

+ Privacy policy +

+
+ +
+

Follow us

+ +
+ +
+

Contact

+

+ support@coderefinery.org +

+
+ +
+

Improve this page

+

+ Source code +

+
+ +
diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..813cae9 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,37 @@ +{% import "macros.html" as macros %} + +{% extends "base.html" %} + +{% block content %} +
+
+

{{ config.title }}

+
+
+
+ {% include "logos.html" %} +
+
+
+ +
+
+
+ {% include "news.html" %} +
+
+ {% include "links.html" %} +
+
+
+ +
+
+ {% include "registration.html" %} + {% include "schedule.html" %} +
+
+ {{ section.content | safe }} +
+
+{% endblock content %} diff --git a/templates/join.html b/templates/join.html new file mode 100644 index 0000000..aeb7019 --- /dev/null +++ b/templates/join.html @@ -0,0 +1,22 @@ +{% extends "base.html" %} + +{% block content %} +

{{ page.title }}

+ +
+
+ {% include "toc.html" %} +
+
+ {% set image = resize_image(path="how-to-join.png", width=600, op="fit_width") %} + infographics describing how individuals and organizations can join +
+
+ + {% if section.content %} + {{ section.content | safe }} + {% endif %} + {% if page.content %} + {{ page.content | safe }} + {% endif %} +{% endblock content %} diff --git a/templates/links.html b/templates/links.html new file mode 100644 index 0000000..5078367 --- /dev/null +++ b/templates/links.html @@ -0,0 +1,2 @@ +{% set portion = get_page(path="links.md") %} +{{ portion.content | safe }} diff --git a/templates/logos.html b/templates/logos.html new file mode 100644 index 0000000..628b534 --- /dev/null +++ b/templates/logos.html @@ -0,0 +1,6 @@ +{% for logo in config.extra.logos %} + {% set image = resize_image(path="logos/" ~ logo.image, width=150, op="fit_width") %} + + {{ logo.alt_text }} + +{% endfor %} diff --git a/templates/macros.html b/templates/macros.html new file mode 100644 index 0000000..a7ad27a --- /dev/null +++ b/templates/macros.html @@ -0,0 +1,53 @@ +{% macro timezone_offset(date, time) %} + +{% endmacro timezone_offset %} + +{% macro local_date(date, time) %} + +{% endmacro local_date %} + +{% macro local_time(date, time) %} + +{% endmacro local_time %} + +{% macro toc(page) %} + {% if page.toc %} +
    + {% for h1 in page.toc %} +
  • + {{ h1.title }} + {% if h1.children %} + + {% endif %} +
  • + {% endfor %} +
+ {% endif %} +{% endmacro toc %} diff --git a/templates/navigation-logic.html b/templates/navigation-logic.html new file mode 100644 index 0000000..34377f6 --- /dev/null +++ b/templates/navigation-logic.html @@ -0,0 +1,43 @@ +{% for item in config.extra.navigation %} +
  • + + {% set href = "#" %} + {% if item.target is defined %} + {% if item.target is starting_with("http") %} + {% set href = item.target %} + {% else %} + {% set href = get_url(path=item.target) %} + {% endif %} + {% endif %} + + {% set contains_dropdown = item.items is defined %} + + + {{ item.name }} + {% if contains_dropdown %} + + {% endif %} + + + {% if contains_dropdown %} + {% if not unroll %} +
    + {% endif %} + + {% if not unroll %} +
    + {% endif %} + {% endif %} + +
  • +{% endfor %} diff --git a/templates/navigation.html b/templates/navigation.html new file mode 100644 index 0000000..e199bda --- /dev/null +++ b/templates/navigation.html @@ -0,0 +1,18 @@ + + +
    +
    +
      + {% set unroll = true %} + {% include "navigation-logic.html" %} +
    +
    +
    diff --git a/templates/news.html b/templates/news.html new file mode 100644 index 0000000..253190a --- /dev/null +++ b/templates/news.html @@ -0,0 +1,2 @@ +{% set portion = get_page(path="news.md") %} +{{ portion.content | safe }} diff --git a/templates/page-with-toc.html b/templates/page-with-toc.html new file mode 100644 index 0000000..f146fe4 --- /dev/null +++ b/templates/page-with-toc.html @@ -0,0 +1,14 @@ +{% extends "base.html" %} + +{% block content %} +

    {{ page.title }}

    + + {% include "toc.html" %} + + {% if section.content %} + {{ section.content | safe }} + {% endif %} + {% if page.content %} + {{ page.content | safe }} + {% endif %} +{% endblock content %} diff --git a/templates/page.html b/templates/page.html new file mode 100644 index 0000000..c463d17 --- /dev/null +++ b/templates/page.html @@ -0,0 +1,10 @@ +{% extends "base.html" %} + +{% block content %} + {% if section.content %} + {{ section.content | safe }} + {% endif %} + {% if page.content %} + {{ page.content | safe }} + {% endif %} +{% endblock content %} diff --git a/templates/q-and-a.html b/templates/q-and-a.html new file mode 100644 index 0000000..bd51bd8 --- /dev/null +++ b/templates/q-and-a.html @@ -0,0 +1,17 @@ +{% extends "base.html" %} + +{% block content %} + {% if section.content %} + {{ section.content | safe }} + {% endif %} + +

    Daily notes

    + +
      + {% for page in section.pages | sort(attribute="title") %} +
    • + {{ page.title }} +
    • + {% endfor %} +
    +{% endblock content %} diff --git a/templates/registration.html b/templates/registration.html new file mode 100644 index 0000000..7c31227 --- /dev/null +++ b/templates/registration.html @@ -0,0 +1,27 @@ +

    Registration

    + +{% if config.extra.registration_is_open %} + + Register here + + {% if config.extra.how_to_join_video %} + + Video: How to join + + {% endif %} +{% endif %} + +{% if config.extra.registration_is_closed %} + +{% endif %} + +{% if not config.extra.registration_is_open and not config.extra.registration_is_closed %} + +{% endif %} + +{% set portion = get_page(path="registration.md") %} +{{ portion.content | safe }} diff --git a/templates/schedule.html b/templates/schedule.html new file mode 100644 index 0000000..023400a --- /dev/null +++ b/templates/schedule.html @@ -0,0 +1,65 @@ + + +

    Schedule

    + +
    + +

    + All times are displayed in the local timezone of your browser. + Detected timezone offset compared to UTC: {{ macros::timezone_offset(date='2023-03-20', time='09:00') }} +

    +
    + +
    + +

    + Breaks: 10 minutes every hour, between xx:50 and xx:10, but it is + difficult for us to indicate exactly when. +

    +
    + + + + {% set data = load_data(path="content/schedule.yaml") %} + {% for day in data.schedule %} + + + + + {% for session in day.sessions %} + + + + + {% endfor %} + {% endfor %} + +
    + +   +
    + {{ day.title }} +
    + {{ macros::local_date(date=day.date, time=session.ends) }}, + {{ macros::local_time(date=day.date, time=session.starts) }} + - + {{ macros::local_time(date=day.date, time=session.ends) }} + + {% if session.url %} + {{ session.title }} + {% else %} + {{ session.title }} + {% endif %} + {% if session.subtitle %} +
    + {{ session.subtitle | markdown(inline=true) | safe }} +
    + {% endif %} + {% if session.presenters %} +
    + Presenters: {{ session.presenters | markdown(inline=true) | safe }} +
    + {% endif %} +
    diff --git a/templates/section.html b/templates/section.html new file mode 100644 index 0000000..c463d17 --- /dev/null +++ b/templates/section.html @@ -0,0 +1,10 @@ +{% extends "base.html" %} + +{% block content %} + {% if section.content %} + {{ section.content | safe }} + {% endif %} + {% if page.content %} + {{ page.content | safe }} + {% endif %} +{% endblock content %} diff --git a/templates/shortcodes/div.html b/templates/shortcodes/div.html new file mode 100644 index 0000000..45a8409 --- /dev/null +++ b/templates/shortcodes/div.html @@ -0,0 +1 @@ +
    diff --git a/templates/shortcodes/enddiv.html b/templates/shortcodes/enddiv.html new file mode 100644 index 0000000..04f5b84 --- /dev/null +++ b/templates/shortcodes/enddiv.html @@ -0,0 +1 @@ +
    diff --git a/templates/toc.html b/templates/toc.html new file mode 100644 index 0000000..c706969 --- /dev/null +++ b/templates/toc.html @@ -0,0 +1,25 @@ +
      + {% for h1 in page.toc %} +
    • + {{ h1.title }} + {% if h1.children %} +
        + {% for h2 in h1.children %} +
      • + {{ h2.title }} + {% if h2.children %} + + {% endif %} +
      • + {% endfor %} +
      + {% endif %} +
    • + {% endfor %} +
    diff --git a/templates/twitter.html b/templates/twitter.html new file mode 100644 index 0000000..5464bf8 --- /dev/null +++ b/templates/twitter.html @@ -0,0 +1,26 @@ + {% if page.title %} + CodeRefinery - {{ page.title }} + + + + {% else %} + CodeRefinery + + + {% endif %} + + {% if page.description %} + + + + {% else %} + + + + {% endif %} + + {% if config.extra.twitter_image %} + + + + {% endif %} diff --git a/uikit b/uikit new file mode 160000 index 0000000..6ac30f5 --- /dev/null +++ b/uikit @@ -0,0 +1 @@ +Subproject commit 6ac30f5c89cb5e5781749fecd7e7250a942b5251 diff --git a/update-uikit.sh b/update-uikit.sh new file mode 100755 index 0000000..624768d --- /dev/null +++ b/update-uikit.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +# safe bash settings +set -euo pipefail + +cd uikit +git checkout main +git pull origin main + +latest_tag=$(git describe --tags --abbrev=0) + +cd .. +git add uikit + +old_version=$(grep -oP "uikit@(\d+\.\d+\.\d+)" templates/base.html | head -n 1) +new_version="uikit@${latest_tag#v}" + +sed -i "s/${old_version}/${new_version}/g" templates/base.html