├── .mdlrc ├── docs ├── logo │ ├── sse-logo-80x80.png │ ├── sse-logo-200x200.png │ ├── sse-logo-400x400.png │ └── sse-logo.svg ├── place-and-time.md ├── index.md ├── staff.md ├── course-information.md └── course-content.md ├── .github └── workflows │ ├── markdownlint.yml │ ├── publish-homepage.yml │ └── linkchecker.yml ├── .mdl.rb ├── mkdocs.yml └── README.md /.mdlrc: -------------------------------------------------------------------------------- 1 | # Load style file (ruby script) 2 | style '.mdl.rb' -------------------------------------------------------------------------------- /docs/logo/sse-logo-80x80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Simulation-Software-Engineering/homepage/HEAD/docs/logo/sse-logo-80x80.png -------------------------------------------------------------------------------- /docs/logo/sse-logo-200x200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Simulation-Software-Engineering/homepage/HEAD/docs/logo/sse-logo-200x200.png -------------------------------------------------------------------------------- /docs/logo/sse-logo-400x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Simulation-Software-Engineering/homepage/HEAD/docs/logo/sse-logo-400x400.png -------------------------------------------------------------------------------- /.github/workflows/markdownlint.yml: -------------------------------------------------------------------------------- 1 | name: markdownlint 2 | on: [pull_request, push] 3 | jobs: 4 | mdl: 5 | runs-on: ubuntu-latest 6 | steps: 7 | - name: Check out code 8 | uses: actions/checkout@v2 9 | - name: Run mdl 10 | uses: actionshub/markdownlint@main 11 | -------------------------------------------------------------------------------- /.github/workflows/publish-homepage.yml: -------------------------------------------------------------------------------- 1 | name: publish-homepage 2 | on: 3 | push: 4 | branches: 5 | - master 6 | - main 7 | workflow_dispatch: 8 | jobs: 9 | deploy: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v2 13 | - uses: actions/setup-python@v2 14 | with: 15 | python-version: 3.x 16 | - run: pip install mkdocs-material 17 | - run: mkdocs gh-deploy --force 18 | -------------------------------------------------------------------------------- /.github/workflows/linkchecker.yml: -------------------------------------------------------------------------------- 1 | name: Link checker 2 | 3 | on: 4 | push: 5 | branches: [ '*' ] 6 | pull_request: 7 | branches: [ '*' ] 8 | 9 | jobs: 10 | build: 11 | 12 | runs-on: ubuntu-latest 13 | 14 | steps: 15 | - uses: actions/checkout@v4 16 | - name: Set up Ruby 17 | uses: ruby/setup-ruby@v1 18 | with: 19 | ruby-version: '3.3' # Not needed with a `.ruby-version` or `.tool-versions` 20 | bundler-cache: true # runs 'bundle install' and caches installed gems automatically 21 | - name: Check links 22 | #FIXME Need to allow duplicates (same links on the same page) 23 | run: | 24 | gem install awesome_bot 25 | awesome_bot docs/*.md README.md --allow-dupe 26 | -------------------------------------------------------------------------------- /.mdl.rb: -------------------------------------------------------------------------------- 1 | # Enable all rules by default 2 | all 3 | 4 | # Extend line length for text. 5 | # This will complain for overly wide tables and code blocks. 6 | rule 'MD013', :line_length => 99999 7 | 8 | # Allow first header to not be a top level header 9 | # since top-level is set by metadata 10 | exclude_rule 'MD002' 11 | # First line in file does not have to be a top level header 12 | # since top-level is set by metadata 13 | exclude_rule 'MD041' 14 | # Allow multiple consecutive blank lines 15 | exclude_rule 'MD012' 16 | # Allow raw HTML to include videos, for example. 17 | exclude_rule 'MD033' 18 | # Allow code blocks without a language specified 19 | exclude_rule 'MD040' 20 | 21 | # Nested lists should be indented with four spaces. 22 | # Modification: Question marks should be allowed 23 | rule 'MD026', :punctuation => '.,;:!' 24 | 25 | # Ordered lists must have prefix that increases in order 26 | rule 'MD029', :style => :ordered -------------------------------------------------------------------------------- /docs/place-and-time.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: Place and time 4 | description: >- 5 | Time table and lecture hall 6 | --- 7 | 8 | ## Lecture hall 9 | 10 | Lectures take place in [V47.05](https://campus.uni-stuttgart.de/cusonline/ris.ris?corg=254696&pQuellGeogrBTypNr=5&pZielGeogrBTypNr=5&pZielGeogrBerNr=6010009&pRaumNr=6998&pActionFlag=A&pShowEinzelraum=J), Pfaffenwaldring 47, ground floor. 11 | Labs take place in [0.108](https://campus.uni-stuttgart.de/cusonline/ris.ris?corg=14&pQuellGeogrBTypNr=5&pZielGeogrBTypNr=5&pZielGeogrBerNr=6050009&pRaumNr=7040&pActionFlag=A&pShowEinzelraum=J), Universitätsstrasse 38, ground floor. 12 | We plan to do the complete course **on site**. As the course is heavy on interactive labs, a hybrid mode seems not very suitable. Please contact us if you can only join online nonetheless. If needed, we will find a solution. 13 | 14 | ## Time 15 | 16 | Lectures and lab work are both on Wednesdays: 17 | 18 | * 09:45–11:15 19 | * 15:45–17:15 20 | 21 | There is not strict distinction between both slots. It depends on the topic and the week. Normally, we do a more lecture-style session in the morning and a more lab-style session in the afternoon. 22 | 23 | ## Time table 24 | 25 | You can find a detailed [time table on GitHub](https://github.com/Simulation-Software-Engineering/Lecture-Material/blob/main/timetable.md). 26 | -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | # Simulation Software Engineering 2 | 3 | Welcome to the homepage of the course "Simulation Software Engineering" at the University of Stuttgart. 4 | You find general information about the course under [course information](course-information.md) and in the video below. 5 | 6 |
7 | 8 |
9 | 10 | Some quotes from previous evaluations: 11 | 12 | - *I wished I had such a lecture already during my Bachelor's program.* 13 | - *I like that we've seen so many different topics that are relevant for each project you work on.* 14 | - *High practical relevance also beyond simulation science.* 15 | - *I especially liked the fact that the lectures are always connected with real examples, such as the connections with the open-source project preCICE.* 16 | 17 | More details on the [course content](course-content) and the [place and time](place-and-time.md). 18 | If you have any questions or suggestions, please contact the [instructors](staff.md). 19 | 20 | Next course in winter term 2025/26 (see also [C@MPUS](https://campus.uni-stuttgart.de/cusonline/ee/ui/ca2/app/desktop/#/slc.tm.cp/student/courses/443297)). 21 | -------------------------------------------------------------------------------- /mkdocs.yml: -------------------------------------------------------------------------------- 1 | site_name: Simulation Software Engineering 2 | site_url: https://simulation-software-engineering.github.io/homepage/ 3 | site_author: Alexander Jaust and Benjamin Uekermann 4 | site_description: >- 5 | TBD 6 | 7 | nav: 8 | - Simulation Software Engineering: index.md 9 | - Course information: course-information.md 10 | - Course content: course-content.md 11 | - Place and time: place-and-time.md 12 | - Staff/Contact: staff.md 13 | 14 | # Point to repository name and set base branch to main 15 | repo_name: Simulation-Software-Engineering/homepage 16 | repo_url: https://github.com/Simulation-Software-Engineering/homepage 17 | edit_uri: edit/main/docs/ 18 | 19 | theme: 20 | name: material 21 | # icon: 22 | # logo: Simulation-Software-Engineering/homepage 23 | # repo: fontawesome/brands/git-alt 24 | # palette: 25 | # primary: blue 26 | # accent: blue 27 | palette: 28 | - scheme: default 29 | toggle: 30 | icon: material/toggle-switch-off-outline 31 | name: Switch to dark mode 32 | - scheme: slate 33 | toggle: 34 | icon: material/toggle-switch 35 | name: Switch to light mode 36 | features: 37 | - navigation.tabs 38 | 39 | logo: logo/sse-logo-200x200.png 40 | 41 | extra: 42 | social: 43 | - icon: fontawesome/brands/github 44 | link: https://github.com/ajaust 45 | - icon: fontawesome/brands/github 46 | link: https://github.com/uekerman 47 | 48 | 49 | markdown_extensions: 50 | - admonition 51 | - codehilite 52 | - pymdownx.superfences 53 | -------------------------------------------------------------------------------- /docs/staff.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: Staff 4 | description: >- 5 | Staff responsible for the course 6 | --- 7 | 8 | # Staff/contact 9 | 10 | ## Lecturers 11 | 12 | | Name | Institute | Contact | 13 | |----- | --------- | ------- | 14 | | [Benjamin Uekermann](https://www.ipvs.uni-stuttgart.de/institute/team/Uekermann-00001/), [GitHub](https://github.com/uekerman) | [Usability and Sustainability of Simulation Software](https://www.ipvs.uni-stuttgart.de/departments/us3/) | [benjamin.uekermann@ipvs.uni-stuttgart.de](mailto:benjamin.uekermann@ipvs.uni-stuttgart.de) | 15 | | [Ishaan Desai](https://www.ipvs.uni-stuttgart.de/institute/team/Desai/), [GitHub](https://github.com/IshaanDesai) | [Usability and Sustainability of Simulation Software](https://www.ipvs.uni-stuttgart.de/departments/us3/) | [ishaan.desai@ipvs.uni-stuttgart.de](mailto:ishaan.desai@ipvs.uni-stuttgart.de) | 16 | | [Gerasimos Chourdakis](https://www.ipvs.uni-stuttgart.de/institute/team/Chourdakis/), [GitHub](https://github.com/MakisH) | [Simulation of Large Systems](https://www.ipvs.uni-stuttgart.de/departments/sgs/) | [gerasimos.chourdakis@ipvs.uni-stuttgart.de](mailto:gerasimos.chourdakis@ipvs.uni-stuttgart.de) | 17 | | [Frédéric Simonis](https://www.ipvs.uni-stuttgart.de/institute/team/Simonis/), [GitHub](https://github.com/fsimonis) | [Usability and Sustainability of Simulation Software](https://www.ipvs.uni-stuttgart.de/departments/us3/) | [frederic.simonis@ipvs.uni-stuttgart.de](mailto:frederic.simonis@ipvs.uni-stuttgart.de) | 18 | 19 | ## Previous lecturers 20 | 21 | The course would have not been possible without ... 22 | 23 | | Name | Institute | Contact | 24 | |----- | --------- | ------- | 25 | | [Alexander Jaust](https://www.ipvs.uni-stuttgart.de/de/institut/team/Jaust-00001/), [Github](https://github.com/ajaust) | [Simulation of Large Systems](https://www.ipvs.uni-stuttgart.de/departments/sgs/) | [alexander.jaust@ipvs.uni-stuttgart.de](mailto:alexander.jaust@ipvs.uni-stuttgart.de) | 26 | -------------------------------------------------------------------------------- /docs/logo/sse-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 91 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Homepage for lecture "Simulation Software Engineering" 2 | 3 |  4 |  5 |  6 | 7 | This repository contains the content of for the homepage of the "Simulation Software Engineering" lecture at the University of Stuttgart (Germany). The homepage is built on [mkdocs](https://www.mkdocs.org), the ["Material for MkDocs" theme](https://squidfunk.github.io/mkdocs-material/), and corresponding plugins. 8 | 9 | 10 | ## Structure of the repository 11 | 12 | - `mkdocs.yml`: MkDocs configuration file 13 | - `docs/`: The directory contains the Markdown files for the different pages of the homepage. 14 | - `.github/workflows/publish-homepage.yml`: Definition file of GitHub action which builds the homepage on every successfull push to master. It can also be triggered manually. 15 | - `.github/workflows/markdownlint.yml`: Definition file of GitHub action which checks the markdown files for proper formatting using [markdownlint](https://github.com/markdownlint/markdownlint/). More information is given below. 16 | - `README.md`: The Readme file you are currently reading 17 | 18 | ## Build homepage 19 | 20 | ### Dependencies 21 | 22 | - [Python 3](https://www.python.org/) 23 | - [MkDocs](https://www.mkdocs.org) 24 | - [Material for MkDocs theme](https://squidfunk.github.io/mkdocs-material/) 25 | - [Pygments](https://pygments.org/) 26 | - [Python Markdown Extensions](https://facelessuser.github.io/pymdown-extensions/) 27 | 28 | The tools used are all based on Python 3 so the easiest way to install the theme and all dependencies is to use [pip](https://pypi.org/project/pip/). Running 29 | 30 | ```bash 31 | pip install mkdocs-material 32 | ``` 33 | 34 | will install MkDocs, the theme, and the plugins. 35 | 36 | Alternative ways of building the homepage using MkDocs and Material for MkDocs are described in the [documentation of the theme](https://squidfunk.github.io/mkdocs-material/getting-started/). 37 | 38 | ### Building the homepage locally 39 | 40 | After installing all dependencies change into this directory (the directory containing the file named `mkdocs.yml`) and run `mkdocs serve`. This will start a local webserver on `127.0.0.1:8000`. Type in this address in a browser to see the local version of the homepage. While `mkdocs serve` is running it will monitor the files for changes and rebuild the homepage as needed. 41 | 42 | ## Linting 43 | 44 | The markdown files can be checked using [markdownlint](https://github.com/markdownlint/markdownlint/). Once the linter is installed one can run it locally from the root of this repository using 45 | 46 | ```bash 47 | mdl docs/ 48 | ``` 49 | 50 | It will automatically read the markdownlint configuration of this repository. The linter is configured in the files `.mdl.rb` and `.mdlrc`. The majority of the configuration is done in `.mdl.rb`. 51 | 52 | ## Link checking 53 | 54 | We currently check links via [awesome_bot](https://github.com/dkhamsing/awesome_bot). If you want to run the checks locally, you must install the `awesome_bot` gem and then run the following command from the root of the repository: 55 | 56 | ```bash 57 | awesome_bot docs/*.md README.md --allow-dupe 58 | ``` 59 | -------------------------------------------------------------------------------- /docs/course-information.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: Course information 4 | description: >- 5 | Course policies and information. 6 | --- 7 | 8 | ## Research Software Engineering 9 | 10 | Software is an integral part of nowadays research. A [UK survey in 2014](https://zenodo.org/records/1183562) found that 7 out of 10 researchers could not conduct research without software. However, research software engineering (RSE) does not yet get the necessary attention in research and in teaching. All this applies to simulation software in particular. 11 | 12 | Read more: 13 | 14 | - Association of German Research Software Engineers: [de-RSE](https://de-rse.org/en/) 15 | - [Position paper of de-RSE](https://f1000research.com/articles/9-295/v2) 16 | 17 | ## Idea of the course 18 | 19 | The course is about simulation software. More precisely, we discuss the software tools used to ensure good software engineering for open-source simulation software such as FEniCS, PETSc, TRILINOS, DuMuX, preCICE, or SU2. This is not a course focused on programming and programming paradigms, but on the techniques and the corresponding tools. Some examples are version control (Git, GitHub, GitLab), virtualization/containerization (Docker), continuous integration (GitHub Actions, GitLab CI), or documentation (Jekyll, mkdocs, sphinx). We study these concepts and tools in lectures and (almost) weekly lab assignments. 20 | In parallel, you work on an individual challenge, where you apply the learned concepts and tools with the ultimate goal to contribute to a large-scale community simulation software package. 21 | [Read more on the course content](course-content.md). 22 | 23 | ## Target audience 24 | 25 | This course is aimed at master-level students from Computer Science, Simulation Technology and related fields, but is also open to PhD students or anyone else interested. We expect you to have some knowledge in software development, basic tools and programming. However, we also give you extra information or point to additional resources if you have the feeling you need to catch up with some topic. 26 | 27 | *An example*: In the lecture, we shortly touch on [Git](https://git-scm.com/) 28 | 29 | - You are a Git expert? This is great. We try not to bore you. 30 | - You have used Git before, but you basically use the same 5 commands all the time? This is fine and a good foundation to start. 31 | - You had heard about Git some time in a lecture, but you have never used it? You are good to go with the examples in the lectures and the references presented there, but you probably have to catch up a bit. 32 | 33 | ## Resources 34 | 35 | All teaching resources are available (open-source) on [GitHub](https://github.com/Simulation-Software-Engineering/Lecture-Material) and through this homepage. 36 | 37 | We encourage **you** to help us extend these resources and fix mistakes. 38 | 39 | ## Exam 40 | 41 | The course has a so-called *"course accompanying examination"*. This means, there will be no single exam. Instead, we evaluate the students' performance on the individual challenge, on the weekly exercises, and on the overall engagement. Still, you will have to register for the *"exam"* on campus. **Point of no return**: Once you gave the first presentation (presumably early November), you have to register. 42 | 43 | ## Additional information for SimTech students 44 | 45 | You might also be interested in the course *Sustainable Development of Simulation Software* by Bernd Flemisch and Dennis Gläser, which is starting in summer term 2022. Their course has a stronger focus on software engineering patterns and project work in C++ for simulation software. Our course *Simulation Software Engineering* focuses more on the tools commonly used in the development of simulation software. The course of Flemisch/Gläser is **not** a prerequisite to follow our course on simulation software engineering and neither vice versa. We encourage you, however, to follow both courses if you are interested in the topic. 46 | 47 | ## Information for repository maintainers 48 | 49 | > This paragraph is meant for developers maintaining repositories to which students of the SSE course try to contribute. 50 | 51 | One of the learning goals of the SSE course is being able to contribute to existing large-scale research codes. One part of the course is to indeed contribute something small to such a code. As a maintainer of such a code, please treat the students as normal (experienced) external contributors. They learn in the SSE course how to follow contribution guidelines and other best practices. As a maintainer, you do not have to advise them as closely as you might do with your own students. Following your own contribution standards and code of conduct is sufficient. You can help the students by labeling suitable existing issues as *good first issues*. We, the [lecturers of the SSE course](staff.md), try to follow conversations of our students in issues or pull requests as closely as possible. You can always tag us on GitHub or directly reach out to us. Each year, we are giving the students a list of software projects as suggestions on where to contribute. If you ever want us to remove your project from this list, please let us know. 52 | -------------------------------------------------------------------------------- /docs/course-content.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: Course content 4 | description: >- 5 | Information about the course content 6 | --- 7 | 8 | ## Lecture and lab assignments 9 | 10 | The lecture and the accompanying lab assignments are organized in 7 chapters. 11 | 12 | ### 0. [Organization and Introduction to RSE](https://github.com/Simulation-Software-Engineering/Lecture-Material/blob/main/00_organization/README.md) 13 | 14 | - Lecture, lab organization, and the challenge 15 | - What is research software engineering and what is special about it? 16 | - Why do we need research software engineering? 17 | 18 | ### 1. [Version Control](https://github.com/Simulation-Software-Engineering/Lecture-Material/blob/main/01_version_control/README.md) 19 | 20 | - Refresh and organize students' existing knowledge on Git (learn how to learn more). 21 | - Explain difference between merge and rebase and when to use what. 22 | - Use Git workflows to organize research software development in a team. 23 | - Know about a few useful GitHub/GitLab standards and a few helpful tools. 24 | 25 | ### 2. [Virtualization and Containers](https://github.com/Simulation-Software-Engineering/Lecture-Material/blob/main/02_virtualization_and_containers/README.md) 26 | 27 | - Name differences between virtualization and containers and name use cases for each. 28 | - Create and modify virtual machines with VirtualBox and generate them with Vagrant. 29 | - Create and manage Docker containers. 30 | - Name containerization technologies beyond Docker and name their main differences. 31 | 32 | ### 3. [Building and Packaging](https://github.com/Simulation-Software-Engineering/Lecture-Material/blob/main/03_building_and_packaging/README.md) 33 | 34 | - Explain why software is packaged. 35 | - Create Python packages, publish on PyPI, and install with pip. 36 | - Understand the difference between static and dynamic libraries and common ways of installation on Linux. 37 | - Build C++ software and handle dependencies with Make and CMake. 38 | - Package C++ software with CPack and create Debian packages. 39 | - Create Spack packages, e.g., for high-performance computing systems with restricted access rights. 40 | 41 | ### 4. [Documentation](https://github.com/Simulation-Software-Engineering/Lecture-Material/blob/main/04_documentation/README.md) 42 | 43 | - Be aware that documentation is crucial in RSE. 44 | - Understand that there is a difference between documentation and good documentation. 45 | - Know the purpose and basic structure of several standard documentation building blocks (README, commit message, changelog, ...). 46 | - Read and write common lightweight markup languages and generate PDF files from them. 47 | - Know about the most important website generators and hosting options for research software documentation. 48 | 49 | ### 5. [Testing and Continuous Integration](https://github.com/Simulation-Software-Engineering/Lecture-Material/tree/main/05_testing_and_ci) 50 | 51 | - Justify the effort of developing testing infrastructure for simulation software. 52 | - Discern the concepts of unit testing, integration testing, and regression testing with the perspective of simulation software. 53 | - Work with the Python testing frameworks pytest and unittest. 54 | - Write simple tests for C++ toy codes with Boost.Test. 55 | - Know about general concepts of test frameworks such as fixtures and decorators. 56 | - Name and explain common workflows to automate in RSE. 57 | - Write basic automation scripts for GitHub Actions. 58 | - Read basic automation scripts for GitLab CI/CD and explain the necessary steps to host GitLab Runners yourself. 59 | - Use CTest to call tests from CMake. 60 | 61 | ### 6. [Miscellaneous](https://github.com/Simulation-Software-Engineering/Lecture-Material/tree/main/06_miscellaneous) 62 | 63 | - Know the basics about several other important things concerning research software engineering: FAIRness of research data and research software, FLOSS licenses, versioning schemes, repository layout standards, and more. 64 | 65 | ## The challenge 66 | 67 | Parallel to the weekly lab work, you work on an individual challenge, where you apply the learned concepts and tools with the ultimate goal to contribute to a large-scale community simulation software package. The challenge is structured in three parts, whereas each part is completed by a short presentation of the intermediate results in class: 68 | 69 | 1. You get acquainted with the basic functionality of a large-scale simulation software package (such as FEniCS, PETSc, TRILINOS, DuMuX, preCICE, or SU2) by studying tutorials and documentation (first third of the course) 70 | 2. You analyze the RSE infrastructure and the development cycle of the software package (second third of the course). 71 | 3. You contribute to the software package. The contribution can be small, but should not be trivial. Possible examples: Adding a new tutorial, extending the documentation, working on a "good first issue", adding support of a new package manager. Important is to properly go through all development steps if possible (contact community, open issue, open pull request, test, review, merge). 72 | 73 | We got amazing contributions when we did this lecture previously: 74 | 75 | ### Highlights from previous semesters 76 | 77 | - **Julius Herb** implemented several demos, including [one for the biharmonic equation](https://github.com/FEniCS/dolfinx/pull/2508) to the [finite element library FEniCSx](https://fenicsproject.org/). 78 | - **Felix Neubauer** implemented a [replay module](https://github.com/Logende/mesa-replay) for the [agent-based simulation framework MESA](https://mesa.readthedocs.io/latest/). 79 | - **Kim Kröner** [added user documentation](https://github.com/MakieOrg/Makie.jl/pull/1641) to the [Julia visualization toolbox Makie](https://makie.juliaplots.org/stable/). 80 | - **Larissa Brencher**, among other contributions, implemented a new [graph partitioning via the PT-Scotch package](https://git.iws.uni-stuttgart.de/dumux-repositories/dumux/-/merge_requests/3005) into the [porous media simulator DuMuX](https://dumux.org/). 81 | - **Sabri Bektas** [extended the OsmWebWizard](https://github.com/eclipse-sumo/sumo/issues/7585) of the [traffic simulation package SUMO](https://eclipse.dev/sumo/) to allow the user to distinguish between road types, minimizing the downloaded and rendered OpenStreetMap data. 82 | - **Jonathan Haag** [improved a tutorial](https://github.com/projectmesa/mesa/issues/1109) of the [agent-based modeling framework MESA](https://mesa.readthedocs.io/latest/). 83 | - **Max Hausch** [contributed in many different ways](https://github.com/mininet/mininet/pulls?q=is%3Apr+author%3Acheriimoya) to the [emulator for rapid prototyping of software defined networks Mininet](https://github.com/mininet/mininet) 84 | - **Nicolas Geldner**, among other contributions, [simplified geometric calculations](https://github.com/precice/precice/pull/1179) in the [coupling library preCICE](https://precice.org/). 85 | - **Vaishnavi Wani** [contributed a coupled thermoelastic solver](https://github.com/su2code/SU2/pull/2404) to the [computational fluid dynamics code SU2](https://su2code.github.io/) (see a related [tutorial](https://github.com/Vaish-W/Thermoelasticity)). 86 | 87 | Some quotes from students: 88 | 89 | - *All in all it was massive experience for me. I never contributed to an OpenSource project and while doing this challenge I learned a lot.* 90 | - *The communication with the developers was usually fast and they offered a lot of help and feedback regarding my work.* 91 | - *I found the whole experience fun, and I'm certain that I'm way more comfortable to contribute and engage in open source projects in the future.* 92 | --------------------------------------------------------------------------------