1 Commits

Author SHA1 Message Date
Michael Weinold
249ef77cf9 initial commit 2025-10-09 09:43:27 +02:00
29 changed files with 138 additions and 2011 deletions

View File

@@ -1,4 +1 @@
.md-nav__source{display: none;}
.md-nav--primary > .md-nav__list > .md-nav__item > .md-nav__link {
font-weight: bold;
}
.md-nav__source{display: none;}

View File

@@ -2,9 +2,9 @@
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="120.88462mm"
height="58.783997mm"
viewBox="0 0 120.88462 58.783997"
width="742.83649mm"
height="60.834167mm"
viewBox="0 0 742.83649 60.834168"
version="1.1"
id="svg1"
inkscape:version="1.4.2 (ebf0e940, 2025-05-08)"
@@ -15,7 +15,7 @@
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
pagecolor="#cccccc"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
@@ -23,9 +23,9 @@
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="0.50404515"
inkscape:cx="243.03378"
inkscape:cy="323.38373"
inkscape:zoom="0.21690619"
inkscape:cx="1814.1483"
inkscape:cy="101.42634"
inkscape:window-width="1728"
inkscape:window-height="1051"
inkscape:window-x="0"
@@ -38,10 +38,32 @@
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-44.557691,-69.957854)">
transform="translate(-44.557691,-69.957835)">
<path
id="path1"
style="display:inline;fill:#ffffff;fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4.1;stroke-dasharray:1, 3;paint-order:stroke fill markers"
d="m 143.75216,69.957854 -36.61224,53.336266 -2.47737,-2.4107 19.84324,-29.129486 -7.44244,-10.58954 -18.361161,16.81758 -7.68377,-5.72523 -16.90026,14.417206 16.86305,14.35003 -1.62057,2.57141 -19.71197,-16.59485 -25.090978,21.74131 120.884619,-0.004 z m -9.22115,19.23758 19.98741,16.944696 -20.04012,16.7349 -1.62625,-2.36058 17.21703,-14.30611 -17.05942,-14.389816 z" />
style="display:inline;fill:#ffffff;fill-opacity:1;stroke-width:1.01744;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4.1;stroke-dasharray:1.01744, 3.05231;paint-order:stroke fill markers"
d="m 145.48191,69.957854 -37.25068,54.266336 -2.52057,-2.45274 20.18926,-29.637436 -7.57222,-10.7742 -18.681339,17.110844 -7.81776,-5.825066 -17.194967,14.668608 17.157108,14.60027 -1.648829,2.61625 -20.055708,-16.88423 -25.528514,22.12043 122.992609,-0.004 z m -9.38195,19.573045 20.33595,17.240171 -20.38957,17.02672 -1.65461,-2.40174 17.51726,-14.55558 -17.3569,-14.64074 z" />
<text
xml:space="preserve"
style="font-weight:300;font-size:82.1281px;line-height:0.9;font-family:'.ThonburiUIWatch';-inkscape-font-specification:'.ThonburiUIWatch Light';text-align:justify;letter-spacing:0.123192px;word-spacing:0px;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:5.82008;stroke-miterlimit:4.1"
x="186.10658"
y="129.74936"
id="text1"><tspan
sodipodi:role="line"
id="tspan1"
x="186.10658"
y="129.74936"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#ffffff;fill-opacity:1;stroke-width:5.82008">RSE</tspan></text>
<text
xml:space="preserve"
style="font-weight:300;font-size:80.7975px;line-height:0.9;font-family:'.ThonburiUIWatch';-inkscape-font-specification:'.ThonburiUIWatch Light';text-align:justify;letter-spacing:0.121196px;word-spacing:0px;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:5.72579;stroke-miterlimit:4.1"
x="374.38324"
y="128.78062"
id="text1-7"><tspan
sodipodi:role="line"
id="tspan1-9"
x="374.38324"
y="128.78062"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial;fill:#ffffff;fill-opacity:1;stroke-width:5.72579">Switzerland</tspan></text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@@ -1,54 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="198.72853mm"
height="9.429841mm"
viewBox="0 0 198.72853 9.429841"
version="1.1"
id="svg1"
inkscape:version="1.4.2 (ebf0e940, 2025-05-08)"
sodipodi:docname="better_software_better_research.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="1.1749187"
inkscape:cx="347.25806"
inkscape:cy="273.21038"
inkscape:window-width="1728"
inkscape:window-height="1051"
inkscape:window-x="1920"
inkscape:window-y="602"
inkscape:window-maximized="0"
inkscape:current-layer="layer1" />
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-5.6358131,-5.419887)">
<text
xml:space="preserve"
style="font-size:10.5244px;line-height:0.9;font-family:'Linux Libertine';-inkscape-font-specification:'Linux Libertine';text-align:justify;letter-spacing:-0.387488px;word-spacing:0px;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#0000ff;fill-opacity:0.15678;stroke-width:0.813624;stroke-linejoin:bevel;stroke-miterlimit:4.1;stroke-dasharray:1.62725, 0.813624;paint-order:stroke fill markers"
x="4.909647"
y="13.113213"
id="text1"><tspan
sodipodi:role="line"
id="tspan1"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Helvetica Neue';-inkscape-font-specification:'Helvetica Neue Bold';fill:#000000;fill-opacity:1;stroke-width:0.813624"
x="4.909647"
y="13.113213">BETTER SOFTWARE, BETTER RESEARCH</tspan></text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 352 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 841 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

View File

@@ -2,14 +2,23 @@
The research software engineering (RSE) community at the Paul Scherrer Institute (PSI) is a group of researchers and engineers who develop and maintain software to support scientific research. Our mission is to improve the quality, efficiency, and reproducibility of research software at PSI.
## Current Board Members
## People
### [Achim Gsell](https://www.psi.ch/en/lsm/people/achim-gsell)
**HPC System and Software Engineer at Paul Scherrer Institute**
Achim is a senior system engineer and software developer in the [HighPerformance Computing & Emerging Technologies group](https://www.psi.ch/en/awi/high-performance-computing-and-emerging-technologies-group) at PSI. He is in charge of the software deployment with [Pmodules](https://pmodules.gitpages.psi.ch) and a member of the [OPAL framework](https://amas.web.psi.ch/opal/Documentation/2024.1/) developer team.
!!! Expertise
HPC, CI/CD, Software Deployment
### [Elsa Germann](https://www.psi.ch/de/awi/people/elsa-sylvia-germann)
**HPC System Engineer at Paul Scherrer Institute**.
She was employed for the transition of Merlin from PSI local (Merlin6) to CSCS Alps (Merlin7). She is in charge of the deployment of the Spack instance at PSI [`spack-psi`](https://gitea.psi.ch/HPCE/spack-psi) and always happy to answer tickets about compilation problems.
!!! Expertise
HPC, Ansible, Spack, CI/CD
### [Michael Weinold](https://www.psi.ch/en/ta/people/michael-weinold)
@@ -23,11 +32,3 @@ He has developed the [`jetfuelburn`](https://jetfuelburn.readthedocs.io/en/lates
!!! Expertise
WebAssembly, Python, BLAS/LAPACK, Holoviz Panel, Jupyter, GitHub Actions, web apps, interactive dashboards
## Former Board Members
### [Elsa Germann](https://www.psi.ch/de/awi/people/elsa-sylvia-germann)
Elsa was employed for the transition of Merlin from PSI local (Merlin6) to CSCS Alps (Merlin7). She was in charge of the deployment of the Spack instance at PSI [`spack-psi`](https://gitea.psi.ch/HPCE/spack-psi) and was always happy to answer tickets about compilation problems.
!!! Expertise
HPC, Ansible, Spack, CI/CD

View File

@@ -0,0 +1,22 @@
---
draft: false
date: 2025-08-20
categories:
- events
---
# RSE Community Building Workshop in Bern
On July 15th, the RSE community at the Paul Scherrer Institute (PSI) held its first
kick-off event. The event was a great success, with over 40 participants from various
departments and research groups at PSI.
<div class="grid" markdown>
![Image title](_media/IMG_5721.jpeg)
![Image title](_media/IMG_5733.jpeg)
</div>
<!-- more -->

View File

@@ -1,37 +1,25 @@
# Events
!!! info
!!! note
The [website of the Swiss RSE community also lists events of local chapters](https://rse.swiss//#events).
Check it out for more research software engineering events in Switzerland!
## Recurring Events
| Date | Time | Event | Location | Calendar |
| ---- | ---- | ----- | -------- | -------- |
| 1st Tuesday/month | 11:00-11:45 <br> (followed by lunch) | RSE@PSI Jour Fixe | [????](https://pocket.psi.ch/psimap) | N/A |
## Upcoming Events
!!! info
**A regular seminar** for research software engineers takes place **on the first Tuesday of every month** from 11:00-11:45. See also upcoming events below.
| Date | Time | Event | Location | Link | Calendar |
| ---- | ---- | ----- | -------- | ---- | -------- |
| 03. Mar 2026 | 11:00-11:45 | [Elisabet Capón:<br>An Introduction to Renku](events/2026-03-03_capon.md) | [OHSA/E13](https://pocket.psi.ch/psimap) | N/A |
<!--
<div class="grid cards" markdown>
- ![text](./_static/media/rse_talk_gsell.png)
- ![text](./_static/media/rse_talk_capon.png)
</div>
-->
## Past Events
| Date | Time | Event | Location | Link | Calendar |
| ---- | ---- | ----- | -------- | ---- | -------- |
| 03. Feb 2026 | 11:00-11:45 | [Achim Gsell:<br>Coding Styles](events/2026-02-03/Coding_Styles.md) | [OHSA/E13](https://pocket.psi.ch/psimap) | N/A |
| 02. Dec 2025 | 11:00-11:45 | [Michael Weinold: Serverless and decentralised](events/2025-12-02_weinold.md) | [OHSA/E13](https://pocket.psi.ch/psimap) | N/A | N/A |
| 04. Nov 2025 | 11:00-11:45 | [Romain Sacchi: From scientific software to public tools](events/2025-11-04_sacchi.md) | [OHSA/E13](https://pocket.psi.ch/psimap) | N/A | N/A |
| 23. Oct 2025 | 10:00-11:00 | Technical Documentation with `mkdocs` and WASM | Zoom | [Recording of the Talk](https://rse.swiss/events/2025_10_23_technical_documentation_with_mkdocs_and_webassembly/) | N/A |
| 13. Aug 2025 | 16:00~18:00 | Rustling Club (beginner friendly) | [OVGA-200](https://pocket.psi.ch/psimap) | [Rust Interest Group Site](https://rs4rse.github.io) | N/A |
| 06. Aug 2025 | 16:00~18:00 | Rustling Club (beginner friendly) | [OVGA-200](https://pocket.psi.ch/psimap) | [Rust Interest Group Site](https://rs4rse.github.io) | N/A |
| 15. Jul 2025 | 15:00-16:30 | RSE@PSI Kick-Off Event | [PSI WBGB 019](https://pocket.psi.ch/psimap) | N/A | N/A |
| 15 July 2025 | 15:00-16:30 | RSE@PSI Kick-Off Event | [PSI WBGB 019](https://pocket.psi.ch/psimap) | N/A | N/A |
| 06. August 2025 | 16:00~18:00 | Rustling Club (beginner friendly) | [OVGA-200](https://pocket.psi.ch/psimap) | [Rust Interest Group Site](https://rs4rse.github.io) | N/A |
| 13. August 2025 | 16:00~18:00 | Rustling Club (beginner friendly) | [OVGA-200](https://pocket.psi.ch/psimap) | [Rust Interest Group Site](https://rs4rse.github.io) | N/A |

View File

@@ -1,7 +0,0 @@
# Romain Sacchi: From scientific software to public tools
**Presenter:** Romain Sacchi
**When:** 4. November 2025; 11:00-11:45am
**Where:** PSI OHSA/E13
Romain Sacchi is a senior scientist in the Laboratory for Energy Systems Analysis. His “carculator” tool allows users to calculate and compare the lifetime carbon emissions for various cars—electric, hybrid, gasoline, and more. Originally created to support scientific publications, a recent collaboration with Touring Club Switzerland has now made the tool available to a wider audience: anyone in Switzerland looking for a new car. Romain will share insights on how to transition scientific software into a successful public-facing tool.

View File

@@ -1,7 +0,0 @@
# Serverless and decentralized
**Presenter:** Michael Weinold
**When:** 2. December 2025; 11:00-11:45
**Where:** PSI OHSA/E13
Michael Weinold is a PhD student in the Laboratory for Energy Systems Analysis. Many of the software tools he has built can be used by students and researchers but hosting them on a managed server is also very costly. This is why he has ported the tools to run in a browser sandbox using the WebAssembly standard. No running cost and complex Python-based calculations directly in the browser. This can power user-friendly dashboard and web applications. Michael will share insights into how to set up tools in this new way.

View File

@@ -1,12 +0,0 @@
# Achim Gsell: Coding Styles
**Presenter:** Achim Gsell
**When:** 3. February 2026; 11:00-11:45am
**Where:** PSI OHSA/E13
Coding style matters in software development because most code is read far
more often than it is written—and usually by someone other than the original
author. A consistent style makes intent obvious and helps the developers in
writing better code.
[Link to slides](index.html)

View File

@@ -1,354 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>About Coding Styles and Standards</title>
<style>
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
h1, h2, h3 {
font-weight: 400;
margin-bottom: 0;
}
.remark-slide-content h1 { font-size: 3em; }
.remark-slide-content h2 { font-size: 2em; }
.remark-slide-content h3 { font-size: 1.6em; }
.footnote {
position: absolute;
bottom: 3em;
}
li p { line-height: 1.25em; }
.red { color: #fa0000; }
.large { font-size: 2em; }
a, a > code {
color: rgb(249, 38, 114);
text-decoration: none;
}
code {
background: none repeat scroll 0 0 #F8F8FF;
border: 1px solid #DEDEDE;
border-radius: 3px ;
padding: 0 0.2em;
}
.remark-code, .remark-inline-code { font-family: "Bitstream Vera Sans Mono", "Courier", monospace; }
.remark-code-line-highlighted { background-color: #373832; }
.pull-left {
float: left;
width: 47%;
}
.pull-right {
float: right;
width: 47%;
}
.pull-right ~ p {
clear: both;
}
#slideshow .slide .content code {
font-size: 0.8em;
}
#slideshow .slide .content pre code {
font-size: 0.9em;
padding: 15px;
}
.main-title, .title {
background: #272822;
color: #777872;
text-shadow: 0 0 20px #333;
}
.title h1, .title h2, .main-title h1, .main-title h2 {
color: #f3f3f3;
line-height: 0.8em;
}
/* Custom */
.remark-code {
display: block;
padding: 0.5em;
}
</style>
</head>
<body>
<textarea id="source">
# About Coding Styles and Standards
<img src="pexels-pixabay-270348.jpg" alt="code" style="width: 80%;">
Achim Gsell, High Performance Computing and Emerging Technologies
February, 3., 2026
---
## ToC
* [The tool I used to create the slides](#Tool)
* [Introduction](#introduction)
* [Why?](#why)
* [A few general rules (not only for coding)]()
* [Coding styles and standards for C/C++ and Python]()
* [Some general rules you should follow]()
* [Comments]()
* [Linux kernel coding style]()
* [Tools]()
* [Git]()
---
## <a id="Tool"></a>The tool I used to create the slides
* I don't like Powerpoint an Co!
* ASCII format.
* Similar workflows as with software can be used.
* For this slides: `markdown-to-slides`
* It's on [Github](https://github.com/partageit/markdown-to-slides).
---
## Introduction
* how I came across this topic and why I consider it important
* once I had to fix an issue in the token ring driver in the Linux kernel
* it was surprisingly easy to navigate through the kernel sources ...
* to read ...
* and to fix it.
* The coding style was very helpful in this regard.
* an experience at PSI
* a code developed by one (permanent) employee and PhD., Post-docs and and master students
* no coding style, no bugtracking, no code review
* the code was difficult to read, understand, maintained and extended.
---
## Why?
* You read code more often than you write code.
* In a team you should agree on some basic rules
* otherwise the code is dificult to read and understand.
* Good coding style helps you to write better code.
---
## A few general rules (not only for coding)
### Line length
```
" ... it is widely accepted that line lengths fall between 45 and
75 characters per line (cpl), though the ideal is 66 cpl ..."
```
```
"The experience of the reader can also be considered as a factor
when determining the count of characters within text lines. For
novice readers, text lines should contain between 34 and 60
characters, 45 being the optimal number. Texts for expert readers
could contain between 45 and 80 characters, with an optimal count
of 60 characters."
```
[Wikipedia](https://en.wikipedia.org/wiki/Line_length#:~:text=In%20typography%2C%20line%20length%20is,%22%2C%20%22We%22)
---
### White space
```
"White space significantly impacts readability by making content
more legible and easier to consume. Ample spacing between lines,
paragraphs, and sections helps readers distinguish between
different pieces of information, allowing their eyes to rest and
preventing fatigue. It also helps guide the reader's eye and
improves the flow of reading, leading to better comprehension.
Without appropriate white space, content can appear cluttered,
overwhelming, and difficult to read."
```
[Lenovo](https://www.lenovo.com/us/en/glossary/white-space/?orgRef=https%253A%252F%252Fwww.google.com%252F)
---
### Complexity
```
"Any intelligent fool can make things bigger and more complex. It
takes a bit of ingenuity and a lot of courage to move in the
opposite direction. "
```
Albert Einstein
=> Reduce things to the essentials and make them understandable.
---
### Don't re-invent the wheel
* Choose an existing coding style/standard and adapt it to your needs - if it is really necessary.
* Some simple rules can have a huge impact on code quality.
* Don't be dogmatic with concepts like early returns, goto's in C, ...
---
## Some styles and standards for C/C++
(See: [awesome C++](https://github.com/fffaraz/awesome-cpp)))
* Coding Standards
* [Cert C++](https://resources.sei.cmu.edu/downloads/secure-coding/assets/sei-cert-cpp-coding-standard-2016-v01.pdf)
* [Misra C++ 2008](https://www.cppdepend.com/misra-cpp)
* [Autosar C++ 2014](https://www.autosar.org/fileadmin/standards/R21-11/AP/AUTOSAR_RS_CPP14Guidelines.pdf)
* [F-35 Fighter Jet's C++ Coding Standards](https://www.stroustrup.com/JSF-AV-rules.pdf)
* Coding Style
* [C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines) - "Official" set of C++ guidelines, reviewed by the author of C++.
* [C++ Dos and Don'ts](http://www.chromium.org/developers/coding-style/cpp-dos-and-donts) - The Chromium Projects > For Developers > Coding Style > C++ Dos and Don'ts.
* [google-styleguide](https://github.com/google/styleguide) - Style guides for Google-originated open-source projects.
* [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html)
* [GNU Coding Standard](http://www.gnu.org/prep/standards/standards.html)
* [Linux kernel coding style](https://www.kernel.org/doc/Documentation/process/coding-style.rst)
* [LLVM Coding Standards](http://llvm.org/docs/CodingStandards.html)
---
## Python coding styles
* [PEP 8](https://peps.python.org/pep-0008)
* [Real Python](https://realpython.com/ref/best-practices/coding-style/$0)
* [Google](https://google.github.io/styleguide/pyguide.html)
---
## Some general rules you should follow
* Fewer rules are often better.
* Be consistent
* it's less important where to place spaces, parenteses, etc
* same for CamelCase or foo_bar
* Follow best practices for the language.
* Use descriptive names.
* A function should do one thing.
* Functions should be short.
* Complex functions should be even shorter.
---
## Comments
```
Generally, a comment is an annotation intended to make the code easier
for a programmer to understand often explaining an aspect that is
not readily apparent in the program (non-comment) code.
```
[Wikipedia](https://en.wikipedia.org/wiki/Comment_(computer_programming)
---
### Comments (Ccont.)
Rule 1: Comments should not duplicate the code.
Rule 2: Good comments do not excuse unclear code.
Rule 3: If you can't write a clear comment, there may be a problem with the code.
Rule 4: Comments should dispel confusion, not cause it.
Rule 5: Explain unidiomatic code in comments.
Rule 6: Provide links to the original source of copied code.
Rule 7: Include links to external references where they will be most helpful.
Rule 8: Add comments when fixing bugs.
Rule 9: Use comments to mark incomplete implementations.
Stackoverflow: [Best practices](https://stackoverflow.blog/2021/12/23/best-practices-for-writing-code-comments/)
---
## Linux kernel coding style
[Linux kernel coding style](https://www.kernel.org/doc/html/v4.10/process/coding-style.html)
* Linux: 8(!) spaces per level.
* Max line length: 80 chars.
* This limits the numer of levels - usually not more than 3 levels.
* You have to structure your code better.
* => use a function for a code block (even if they are called only
once)
```
if condition:
do_this()
else:
do_that()
```
* Forget the performance penalty of calling a function (there are exception).
* Use inline function with care (C/C++).
* More functions also (usually) means: less arguments per function => easier to read and understand.
---
## Examples Linux kernel
* [core socket implementation](https://github.com/torvalds/linux/blob/master/net/core/sock.c)
* [fsync() implementation in ext4 filesystem](https://github.com/torvalds/linux/blob/master/fs/ext4/fsync.c)
---
## Tools for static code analysis (C/C++)
(See: [awesome C++](https://github.com/fffaraz/awesome-cpp)))
* [Cppcheck](http://cppcheck.sourceforge.net/) - A tool for static C/C++ code analysis. - [source](https://github.com/danmar/cppcheck)
* [CppDepend](https://www.cppdepend.com/) - Simplifies managing a complex C/C++ code base by analyzing and visualizing code dependencies, by defining design rules, by doing impact analysis, and comparing different versions of the code.
* [cpplint](https://github.com/cpplint/cpplint) - A C++ style checker following Google's C++ style guide.
* [PVS-Studio](http://www.viva64.com/en/pvs-studio/) - A tool for bug detection in the source code of programs, written in C, C++ and C#.
* [cpp-dependencies](https://github.com/tomtom-international/cpp-dependencies) - Tool to check C++ #include dependencies (dependency graphs created in .dot format). [Apache]
* [include-what-you-use](https://github.com/include-what-you-use/include-what-you-use) - A tool for use with clang to analyze includes in C and C++ source files. [website](https://include-what-you-use.org/)
* [Infer](https://github.com/facebook/infer) - A static analyzer for Java, C and Objective-C. [BSD]
* [OCLint](http://oclint.org/) - A static source code analysis tool to improve quality and reduce defects for C, C++ and Objective-C. - [source](https://github.com/oclint/oclint)
* [Clang Static Analyzer](http://clang-analyzer.llvm.org/index.html) - A source code analysis tool that finds bugs in C, C++, and Objective-C programs.
* [Linticator](http://linticator.com) - Eclipse CDT integration of Pc-/FlexeLint.
* [IKOS](https://github.com/NASA-SW-VnV/ikos) - Static analyzer for C/C++ based on the theory of Abstract Interpretation. [NOSA 1.3]
* [OptView2](https://github.com/OfekShilon/optview2) - Inspect missed Clang optimizations.
* [Trunk](https://trunk.io) - Toolkit to check, test, merge, and monitor code.
## Coding Style Tools (C/C++)
* [Artistic Style](http://astyle.sourceforge.net/) - A tool to format C/C++/C#/Obj-C/Java code. Also known as astyle.
* [ClangFormat](http://clang.llvm.org/docs/ClangFormat.html) - A tool to format C/C++/Obj-C code.
* [Clang-Tidy](http://clang.llvm.org/extra/clang-tidy.html) - Clang-based C++ linter tool.
* [EditorConfig](https://editorconfig.org/) - EditorConfig helps maintain consistent coding styles across different editors and IDEs.
* [Uncrustify](https://github.com/uncrustify/uncrustify) - Code beautifier.
---
## Code Analysis (Python)
See [Awesome Python](https://github.com/vinta/awesome-python#readme)
- Code Analysis
- [code2flow](https://github.com/scottrogowski/code2flow) - Turn your Python and JavaScript code into DOT flowcharts.
- [prospector](https://github.com/PyCQA/prospector) - A tool to analyze Python code.
- [vulture](https://github.com/jendrikseipp/vulture) - A tool for finding and analyzing dead Python code.
- Code Linters
- [flake8](https://github.com/PyCQA/flake8) - A wrapper around `pycodestyle`, `pyflakes` and McCabe.
- [awesome-flake8-extensions](https://github.com/DmytroLitvinov/awesome-flake8-extensions)
- [pylint](https://github.com/pylint-dev/pylint) - A fully customizable source code analyzer.
- [ruff](https://github.com/astral-sh/ruff) - An extremely fast Python linter and code formatter.
- Code Formatters
- [black](https://github.com/psf/black) - The uncompromising Python code formatter.
- [isort](https://github.com/timothycrosley/isort) - A Python utility / library to sort imports.
- [yapf](https://github.com/google/yapf) - Yet another Python
code formatter from Google.
---
## Code Analysis (Python, cont.)
- Static Type Checkers, also see [awesome-python-typing](https://github.com/typeddjango/awesome-python-typing)
- [mypy](https://github.com/python/mypy) - Check variable types during compile time.
- [pyre-check](https://github.com/facebook/pyre-check) - Performant type checking.
- [ty](https://github.com/astral-sh/ty) - An extremely fast Python type checker and language server.
- [typeshed](https://github.com/python/typeshed) - Collection of library stubs for Python, with static types.
- Static Type Annotations Generators
- [monkeytype](https://github.com/Instagram/MonkeyType) - A system for Python that generates static type annotations by collecting runtime types.
- [pytype](https://github.com/google/pytype) - Pytype checks and infers types for Python code - without requiring type annotations.
---
## Git
* use Git hooks
* use pipelines to check code quality before merging
---
## Questions
</textarea>
<script src="remark-latest.min.js"></script>
<script>
var slideshow = remark.create();
</script>
<script></script>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB

File diff suppressed because one or more lines are too long

View File

@@ -1,9 +0,0 @@
# Elisabet Capón: Introduction to Renku
**Presenter:** Elisabet Capón
**When:** 3. March 2026; 11:00-11:45am
**Where:** PSI OHSA/E13
In this talk, Dr. Elisabet Capón will introduce Renku, a novel open-source platform designed to connect the ecosystem of data, code, and compute to empower researchers and collaborative communities. The platform mission is to enable the Swiss National Open Research Data (ORD) Strategy by supporting the accessibility and reuse of research data across Switzerland.
Renku connectes external Git repositories, data stores, and containerized compute environments to allow users to mix and match resources to suit their project setups. The talk outlines how Renku reduces technical friction for three key groups: researchers seeking unified workflows, educators managing computing courses, and organizers running seamless events.

View File

@@ -1,7 +0,0 @@
# An Introduction to Renko
**Presenter:** Elisabet Capón García
**When:** 3. March 2026; 11:00-11:45
**Where:** PSI OHSA/E13
[Elisabet Capón](https://www.datascience.ch/people/elisabet-capon-garcia) is a community manager at the Swiss Data Science Center (SDSC), where she focuses on fostering open research practices and supporting the [Renku open-source project](https://renkulab.io). Renku is a platform that enables researchers to create, share, and reproduce data science projects with ease, promoting collaboration and transparency in scientific research. She will provide an introduction to Renku, highlighting its features and benefits for research software engineering.

View File

@@ -1,15 +1,54 @@
# Research Software Engineering at PSI
Software is ubiquitous in modern research and its quality has a direct impact on the quality of research. The Research Software Engineering Community connects Research Software Engineers (RSEs), increases their visibility and works towards the recognition of their importance in science.
## Upcoming Events
Software is ubiquitous in modern research and its quality has a direct impact on the quality of research. The **Research Software Engineering (RSE)** Community connects Research Software Engineers (RSEs), increases their visibility and works towards the recognition of their importance in science.
## Current Events
| Date | Time | Event | Location | Link | Calendar |
| ---- | ---- | ----- | -------- | ---- | -------- |
| 03. Mar 2026 | 11:00-11:45 | [Elisabet Capón:<br>An Introduction to Renku](events/2026-03-03_capon.md) | OHSA/E13 | [Map](https://pocket.psi.ch/psimap) | N/A |
| 06. August 2025 | 16:00~18:00 | Rustling Club (beginner friendly) | [OVGA-200](https://pocket.psi.ch/psimap) | [Rust Interest Group Site](https://rs4rse.github.io) | N/A |
| 13. August 2025 | 16:00~18:00 | Rustling Club (beginner friendly) | [OVGA-200](https://pocket.psi.ch/psimap) | [Rust Interest Group Site](https://rs4rse.github.io) | N/A |
## Staying Informed
<div class="grid cards" markdown>
- :material-clock-fast:{ .lg .middle } __Set up in 5 minutes__
---
Install [`mkdocs-material`](#) with [`pip`](#) and get up
and running in minutes
[:octicons-arrow-right-24: Getting started](#)
- :fontawesome-brands-markdown:{ .lg .middle } __It's just Markdown__
---
Focus on your content and generate a responsive and searchable static site
[:octicons-arrow-right-24: Reference](#)
- :material-format-font:{ .lg .middle } __Made to measure__
---
Change the colors, fonts, language, icons, logo and more with a few lines
[:octicons-arrow-right-24: Customization](#)
- :material-scale-balance:{ .lg .middle } __Open Source, MIT__
---
Material for MkDocs is licensed under MIT and available on [GitHub]
[:octicons-arrow-right-24: License](#)
</div>
=== "📧 Mailing List"
!!! note
@@ -23,6 +62,11 @@ Software is ubiquitous in modern research and its quality has a direct impact on
=== "🌐 Swiss RSE Website"
!!! note
The [Swiss RSE website](https://rse.swiss) provides information about the community, events, and resources at other institutes in Switzerland.
The [Swiss RSE website](https://rse.swiss) provides information about the community, events, and resources at other institutes.
![text](./_static/media/better_software_better_research.svg)
<style>
.md-typeset h1,
.md-content__button {
display: none;
}
</style>

View File

@@ -1,4 +1,4 @@
# RSE in Switzerland
# Links
## Local Chapters

View File

@@ -1,113 +0,0 @@
# Surveys
## 2025
In 2025, we conducted a staff survey on the state of research software engineering at Paul Scherrer Institut (PSI). The survey was open in September and October 2025, and we received responses from over 50 research software engineers (RSEs) across all centers at PSI. On average, every respondent spent over half an hour on the survey. The results [are available through the ETH Research Collection](https://doi.org/10.3929/ethz-c-000790389) and can be downloaded below:
<div class="pdf-component" style="border: 1px solid #ccc; border-radius: 6px; overflow: hidden; font-family: sans-serif; margin-bottom: 20px; background-color: #f5f5f5;">
<div style="background-color: #333; color: white; padding: 10px 15px; display: flex; justify-content: space-between; align-items: center;">
<span style="font-weight: bold; font-size: 0.9em;">Document Viewer</span>
<a href="../_static/media/survey2025.pdf" download target="_blank" style="text-decoration: none; background-color: #e74c3c; color: white; padding: 6px 12px; border-radius: 4px; font-size: 0.85em; transition: background 0.2s;">
⬇ Download PDF
</a>
</div>
<div id="pdf-wrapper" style="position: relative; width: 100%; min-height: 200px; background-color: #525659;">
<canvas id="the-canvas" style="display: block; width: 100%; height: auto;"></canvas>
<div id="pdf-loading" style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: white;">Loading...</div>
</div>
<div style="background-color: #ddd; padding: 10px; display: flex; justify-content: center; align-items: center; gap: 15px;">
<button id="prev" style="cursor: pointer; padding: 5px 15px;">Previous</button>
<span style="font-size: 0.9em;">Page <span id="page_num">--</span> of <span id="page_count">--</span></span>
<button id="next" style="cursor: pointer; padding: 5px 15px;">Next</button>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.16.105/pdf.min.js"></script>
<script>
(function() {
var url = '../_static/media/survey2025.pdf'; // <--- CHECK PATH
var pdfjsLib = window['pdfjs-dist/build/pdf'];
pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.16.105/pdf.worker.min.js';
var pdfDoc = null,
pageNum = 1,
pageRendering = false,
pageNumPending = null,
scale = 2.0, // High res render, scaled down by CSS
canvas = document.getElementById('the-canvas'),
ctx = canvas.getContext('2d'),
loading = document.getElementById('pdf-loading');
function renderPage(num) {
pageRendering = true;
// Fetch page
pdfDoc.getPage(num).then(function(page) {
loading.style.display = 'none';
var viewport = page.getViewport({scale: scale});
canvas.height = viewport.height;
canvas.width = viewport.width;
// Render
var renderContext = {
canvasContext: ctx,
viewport: viewport
};
var renderTask = page.render(renderContext);
// Wait for render to finish
renderTask.promise.then(function() {
pageRendering = false;
if (pageNumPending !== null) {
renderPage(pageNumPending);
pageNumPending = null;
}
});
});
// Update page counters
document.getElementById('page_num').textContent = num;
}
function queueRenderPage(num) {
if (pageRendering) {
pageNumPending = num;
} else {
renderPage(num);
}
}
function onPrevPage() {
if (pageNum <= 1) { return; }
pageNum--;
queueRenderPage(pageNum);
}
document.getElementById('prev').addEventListener('click', onPrevPage);
function onNextPage() {
if (pageNum >= pdfDoc.numPages) { return; }
pageNum++;
queueRenderPage(pageNum);
}
document.getElementById('next').addEventListener('click', onNextPage);
// Initial Load
pdfjsLib.getDocument(url).promise.then(function(pdfDoc_) {
pdfDoc = pdfDoc_;
document.getElementById('page_count').textContent = pdfDoc.numPages;
renderPage(pageNum);
}).catch(function(err) {
console.error(err);
loading.textContent = "Error loading PDF.";
});
})();
</script>

View File

@@ -1,15 +1,12 @@
# https://www.mkdocs.org/user-guide/configuration/
site_name: RSE@PSI
site_name: Research Software Engineering
copyright: © Paul Scherrer Institute (PSI) | Content under CC0 License
nav:
- Home: 'index.md'
- Who we are:
- RSE@PSI: 'about.md'
- RSE@Switzerland: 'switzerland.md'
- What we do:
- Offers: 'offers.md'
- Events: 'events.md'
- Surveys: 'surveys.md'
- Homepage: 'index.md'
- About: 'about.md'
- Offers: 'offers.md'
- Events: 'events.md'
- Links: 'links.md'
- Blog: 'blog/index.md'
theme: # https://www.mkdocs.org/user-guide/choosing-your-theme/#readthedocs
name: material
@@ -45,7 +42,6 @@ plugins:
- autorefs
- include-markdown
- blog
- mkdocs-pdf
markdown_extensions:
- admonition
- pymdownx.superfences

View File

@@ -1,6 +1,5 @@
mkdocs
mkdocs-autorefs
mkdocs-material
pymdown-extensions
mkdocs-include-markdown-plugin
mkdocs-pdf
mkdocs==1.6.1
mkdocs-autorefs==1.4.2
mkdocs-material==9.6.14
pymdown-extensions==10.15
mkdocs-include-markdown-plugin==7.1.5