47 Commits

Author SHA1 Message Date
4a59c2f285 events on entry page updated
All checks were successful
RSE-PSI Website Scheduler / build-and-deploy (push) Successful in 41s
2026-03-27 16:26:00 +01:00
b57cc2e08e Git course agenda updated
All checks were successful
RSE-PSI Website Scheduler / build-and-deploy (push) Successful in 31s
2026-03-26 14:20:27 +01:00
d6b4f5d1f1 Git course agenda updated 2026-03-26 14:10:25 +01:00
bb394772a3 Update .gitea/workflows/mkdocs_build.yml 2026-03-26 11:08:23 +01:00
b87b1b9c43 Update .gitea/workflows/mkdocs_build.yml 2026-03-26 11:07:20 +01:00
04444b157e event date fixed 2026-03-26 10:54:27 +01:00
6c73ab25da event list updated 2026-03-26 10:52:10 +01:00
Michael Weinold
81569d0907 fixed linebreaks
All checks were successful
RSE-PSI Website Scheduler / checkout (push) Successful in 33s
2026-03-04 11:26:45 +01:00
fdf3e06715 Merge pull request 'added presentation viewers' (#9) from add_renku_material into main
Reviewed-on: #9
2026-03-04 11:24:37 +01:00
Michael Weinold
6852076bb2 added presentation viewers
All checks were successful
RSE-PSI Website Scheduler / checkout (pull_request) Successful in 32s
2026-03-04 11:24:05 +01:00
c7af276158 link to slides added
All checks were successful
RSE-PSI Website Scheduler / checkout (push) Successful in 32s
2026-02-04 15:18:13 +01:00
d0b15a78d3 JavaScript script added 2026-02-04 15:15:26 +01:00
5f5578320a file deleted 2026-02-04 15:03:47 +01:00
e2e4b81c12 Codings Style slides added 2026-02-04 15:02:54 +01:00
Michael Weinold
aca85a6885 moved event to past
All checks were successful
RSE-PSI Website Scheduler / checkout (push) Successful in 32s
2026-02-03 11:43:10 +01:00
Michael Weinold
fde753c991 added link
All checks were successful
RSE-PSI Website Scheduler / checkout (push) Successful in 32s
2026-02-02 15:30:14 +01:00
Michael Weinold
23a20b169c updated survey file 2026-02-02 15:27:56 +01:00
Michael Weinold
884a85fe73 renamed file 2026-02-02 15:26:49 +01:00
Michael Weinold
8390653095 initial commit 2026-02-02 15:24:27 +01:00
0283f0a605 updated
All checks were successful
RSE-PSI Website Scheduler / checkout (push) Successful in 30s
2026-01-21 16:53:54 +01:00
26293393d3 grid cards removed 2026-01-21 16:50:19 +01:00
0e0ceb116c comment out grid cards 2026-01-21 16:39:40 +01:00
9085671fd7 update of events 2026-01-21 11:38:45 +01:00
Michael Weinold
6844b84c5a vibe coded pdf viewer
All checks were successful
RSE-PSI Website Scheduler / checkout (push) Successful in 32s
2025-11-26 08:46:09 +01:00
Michael Weinold
59d32177af added survey page
All checks were successful
RSE-PSI Website Scheduler / checkout (push) Successful in 30s
2025-11-25 15:10:36 +01:00
a085e10d23 Merge pull request 'Updated Homepage and Events Pages' (#7) from rse_website_update into main
All checks were successful
RSE-PSI Website Scheduler / checkout (push) Successful in 30s
Reviewed-on: #7
Reviewed-by: germann_e <elsa.germann@psi.ch>
2025-11-11 16:14:55 +01:00
Michael Weinold
4bf8cb401e updated pages
All checks were successful
RSE-PSI Website Scheduler / checkout (pull_request) Successful in 31s
2025-11-04 16:17:34 +00:00
bb0aec385c RSE4ORD survey added again
All checks were successful
RSE-PSI Website Scheduler / checkout (push) Successful in 28s
2025-10-09 11:14:24 +02:00
af3bc95a56 Merge pull request 'Updated events (with posters) and homepage' (#6) from minor_improvements into main
Reviewed-on: #6
Reviewed-by: germann_e <elsa.germann@psi.ch>
2025-10-09 10:25:19 +02:00
Michael Weinold
3b0b97e618 updated events and homepage
All checks were successful
RSE-PSI Website Scheduler / checkout (pull_request) Successful in 28s
2025-10-09 10:01:48 +02:00
adef39bc92 Update docs/index.md
All checks were successful
RSE-PSI Website Scheduler / checkout (push) Successful in 28s
2025-10-08 13:20:48 +02:00
cb728998ff Update docs/index.md 2025-10-08 13:18:08 +02:00
889ddaae05 Update docs/index.md 2025-10-08 13:14:26 +02:00
2074216356 Update docs/index.md 2025-10-08 13:08:14 +02:00
a891771804 Update docs/events/2025-12-02 Serverless and decentralised.md 2025-10-08 13:00:56 +02:00
fa4b5ab115 Update docs/events/2025-11-04 From scientific software to public tools.md 2025-10-08 13:00:17 +02:00
0b54329f5a Update docs/events/2025-11-04 From scientific software to public tools.md 2025-10-08 12:59:24 +02:00
af2842f44a Update docs/events/2025-12-02 Serverless and decentralised.md 2025-10-08 12:57:02 +02:00
c1ffdfa943 Update docs/events/2025-11-04 From scientific software to public tools.md 2025-10-08 12:55:13 +02:00
b469d30ec0 Events updated 2025-10-08 12:52:19 +02:00
022920802b Events updated 2025-10-08 12:52:01 +02:00
5753392f2c Events updated 2025-10-08 12:50:57 +02:00
043c752664 events added 2025-10-08 11:35:47 +02:00
24e9358405 events added 2025-10-08 11:34:10 +02:00
6773e92f67 Update docs/index.md
All checks were successful
RSE-PSI Website Scheduler / checkout (push) Successful in 28s
2025-10-06 10:58:53 +02:00
a41ed74ad8 Update docs/events.md 2025-10-06 10:53:15 +02:00
da6849475e Update docs/index.md
All checks were successful
RSE-PSI Website Scheduler / checkout (push) Successful in 28s
2025-10-01 11:27:26 +02:00
30 changed files with 2253 additions and 38 deletions

View File

@@ -7,7 +7,8 @@ on:
- cron: "0 1 * * *" - cron: "0 1 * * *"
jobs: jobs:
checkout: build-and-deploy:
runs-on: ubuntu-latest-intranet
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4

View File

@@ -1 +1,159 @@
.md-nav__source{display: none;} .md-nav__source{display: none;}
.md-nav--primary > .md-nav__list > .md-nav__item > .md-nav__link {
font-weight: bold;
}
/* PDF Viewer Styles */
.pdf-viewer-container {
border: 1px solid #ccc;
border-radius: 6px;
overflow: hidden;
font-family: sans-serif;
margin-bottom: 20px;
background-color: #f5f5f5;
}
.pdf-viewer-header {
background-color: #333;
color: white;
padding: 10px 15px;
display: flex;
justify-content: space-between;
align-items: center;
}
.pdf-viewer-header .document-label {
font-weight: bold;
font-size: 0.9em;
}
.pdf-viewer-header .download-btn {
text-decoration: none;
background-color: #e74c3c;
color: white !important;
padding: 6px 12px;
border-radius: 4px;
font-size: 0.85em;
transition: background 0.2s;
}
.pdf-viewer-header .download-btn:hover {
background-color: #c0392b;
}
.pdf-viewer-content {
position: relative;
width: 100%;
min-height: 200px;
background-color: #525659;
}
.pdf-viewer-content canvas {
display: block;
width: 100%;
height: auto;
}
.pdf-viewer-loading {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: white;
}
.pdf-viewer-controls {
background-color: #ddd;
padding: 10px;
display: flex;
justify-content: center;
align-items: center;
gap: 15px;
}
.pdf-viewer-controls button {
cursor: pointer;
padding: 5px 15px;
border: 1px solid #999;
background: #eee;
border-radius: 3px;
}
.pdf-viewer-controls button:hover {
background: #fff;
}
.pdf-viewer-controls .page-info {
font-size: 0.9em;
}
/* HTML Viewer Styles */
.html-viewer-container {
border: 1px solid #ccc;
border-radius: 6px;
overflow: hidden;
font-family: sans-serif;
margin-bottom: 20px;
background-color: #f5f5f5;
}
.html-viewer-header {
background-color: #333;
color: white;
padding: 10px 15px;
display: flex;
justify-content: space-between;
align-items: center;
}
.html-viewer-header .document-label {
font-weight: bold;
font-size: 0.9em;
}
.html-viewer-header .open-btn {
text-decoration: none;
background-color: #3498db;
color: white !important;
padding: 6px 12px;
border-radius: 4px;
font-size: 0.85em;
transition: background 0.2s;
}
.html-viewer-header .open-btn:hover {
background-color: #2980b9;
}
.html-viewer-content {
position: relative;
width: 100%;
aspect-ratio: 16 / 9;
}
.html-viewer-content iframe {
width: 100%;
height: 100%;
border: none;
}
.html-viewer-controls {
background-color: #ddd;
padding: 10px;
display: flex;
justify-content: center;
align-items: center;
gap: 15px;
}
.html-viewer-controls button {
cursor: pointer;
padding: 5px 15px;
border: 1px solid #999;
background: #eee;
border-radius: 3px;
}
.html-viewer-controls button:hover {
background: #fff;
}

View File

@@ -0,0 +1,66 @@
/**
* Navigation controller for Remark.js presentations in iframes.
*
* Looks for elements with class 'html-viewer-container'.
*/
document$.subscribe(({ body }) => {
const containers = body.querySelectorAll('.html-viewer-container');
containers.forEach(container => {
const iframe = container.querySelector('iframe');
const prevBtn = container.querySelector('.prev-btn');
const nextBtn = container.querySelector('.next-btn');
const pageNumDisplay = container.querySelector('.page-num');
const pageCountDisplay = container.querySelector('.page-count');
if (!iframe || !prevBtn || !nextBtn) return;
function updatePageInfo() {
try {
if (iframe.contentWindow && iframe.contentWindow.slideshow) {
const slideshow = iframe.contentWindow.slideshow;
const currentIndex = slideshow.getCurrentSlideIndex() + 1;
const totalSlides = slideshow.getSlides().length;
if (pageNumDisplay) pageNumDisplay.textContent = currentIndex;
if (pageCountDisplay) pageCountDisplay.textContent = totalSlides;
}
} catch (e) {
// Silently fail if cross-origin or slideshow not yet loaded
}
}
prevBtn.addEventListener('click', () => {
try {
if (iframe.contentWindow && iframe.contentWindow.slideshow) {
iframe.contentWindow.slideshow.gotoPreviousSlide();
updatePageInfo();
} else {
iframe.contentWindow.dispatchEvent(new KeyboardEvent('keydown', { 'keyCode': 37 }));
}
} catch (e) {
console.error("Could not navigate slideshow:", e);
}
});
nextBtn.addEventListener('click', () => {
try {
if (iframe.contentWindow && iframe.contentWindow.slideshow) {
iframe.contentWindow.slideshow.gotoNextSlide();
updatePageInfo();
} else {
iframe.contentWindow.dispatchEvent(new KeyboardEvent('keydown', { 'keyCode': 39 }));
}
} catch (e) {
console.error("Could not navigate slideshow:", e);
}
});
// Update info when iframe loads
iframe.addEventListener('load', updatePageInfo);
// Periodically update in case the user navigates using the keyboard inside the iframe
setInterval(updatePageInfo, 500);
});
});

View File

@@ -0,0 +1,108 @@
/**
* Reusable PDF Viewer for MkDocs Material
*
* Uses PDF.js to render PDF files in a canvas.
* Looks for elements with class 'pdf-viewer-container' and a 'data-url' attribute.
*/
document$.subscribe(({ body }) => {
const containers = body.querySelectorAll('.pdf-viewer-container[data-url]');
if (containers.length === 0) return;
// Load PDF.js worker if not already loaded
if (window['pdfjs-dist/build/pdf'] && !window['pdfjs-dist/build/pdf'].GlobalWorkerOptions.workerSrc) {
window['pdfjs-dist/build/pdf'].GlobalWorkerOptions.workerSrc = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.16.105/pdf.worker.min.js';
}
containers.forEach(container => {
initPDFViewer(container);
});
});
function initPDFViewer(container) {
const url = container.getAttribute('data-url');
const canvas = container.querySelector('canvas');
const pageNumDisplay = container.querySelector('.page-num');
const pageCountDisplay = container.querySelector('.page-count');
const prevBtn = container.querySelector('.prev-btn');
const nextBtn = container.querySelector('.next-btn');
const loadingMsg = container.querySelector('.pdf-viewer-loading');
if (!canvas || !url) return;
let pdfDoc = null;
let pageNum = 1;
let pageRendering = false;
let pageNumPending = null;
const scale = 2.0;
const ctx = canvas.getContext('2d');
function renderPage(num) {
pageRendering = true;
pdfDoc.getPage(num).then(page => {
if (loadingMsg) loadingMsg.style.display = 'none';
const viewport = page.getViewport({ scale: scale });
canvas.height = viewport.height;
canvas.width = viewport.width;
const renderContext = {
canvasContext: ctx,
viewport: viewport
};
const renderTask = page.render(renderContext);
renderTask.promise.then(() => {
pageRendering = false;
if (pageNumPending !== null) {
renderPage(pageNumPending);
pageNumPending = null;
}
});
});
if (pageNumDisplay) pageNumDisplay.textContent = num;
}
function queueRenderPage(num) {
if (pageRendering) {
pageNumPending = num;
} else {
renderPage(num);
}
}
if (prevBtn) {
prevBtn.addEventListener('click', () => {
if (pageNum <= 1) return;
pageNum--;
queueRenderPage(pageNum);
});
}
if (nextBtn) {
nextBtn.addEventListener('click', () => {
if (pageNum >= pdfDoc.numPages) return;
pageNum++;
queueRenderPage(pageNum);
});
}
// Load the document
const pdfjsLib = window['pdfjs-dist/build/pdf'];
if (!pdfjsLib) {
console.error('PDF.js library not found');
return;
}
pdfjsLib.getDocument(url).promise.then(pdfDoc_ => {
pdfDoc = pdfDoc_;
if (pageCountDisplay) pageCountDisplay.textContent = pdfDoc.numPages;
renderPage(pageNum);
}).catch(err => {
console.error('Error loading PDF:', err);
if (loadingMsg) loadingMsg.textContent = "Error loading PDF.";
});
}

BIN
docs/_static/media/rse_talk_capon.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 352 KiB

821
docs/_static/media/rse_talk_capon.svg vendored Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 841 KiB

BIN
docs/_static/media/rse_talk_gsell.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

179
docs/_static/media/rse_talk_gsell.svg vendored Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 2.3 MiB

BIN
docs/_static/media/rse_talk_sacchi.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

185
docs/_static/media/rse_talk_sacchi.svg vendored Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 1.8 MiB

BIN
docs/_static/media/rse_talk_weinold.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

176
docs/_static/media/rse_talk_weinold.svg vendored Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 2.1 MiB

BIN
docs/_static/media/survey2025.pdf vendored Normal file

Binary file not shown.

View File

@@ -2,23 +2,14 @@
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. 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.
## People ## Current Board Members
### [Achim Gsell](https://www.psi.ch/en/lsm/people/achim-gsell) ### [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. 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 !!! 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) ### [Michael Weinold](https://www.psi.ch/en/ta/people/michael-weinold)
@@ -32,3 +23,11 @@ He has developed the [`jetfuelburn`](https://jetfuelburn.readthedocs.io/en/lates
!!! Expertise !!! Expertise
WebAssembly, Python, BLAS/LAPACK, Holoviz Panel, Jupyter, GitHub Actions, web apps, interactive dashboards 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

@@ -1,26 +1,42 @@
# Events # Events
!!! note !!! info
The [website of the Swiss RSE community also lists events of local chapters](https://rse.swiss//#events). 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! 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 ## 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 | | Date | Time | Event | Location | Link | Calendar |
| ---- | ---- | ----- | -------- | ---- | -------- | | ---- | ---- | ----- | -------- | ---- | -------- |
| 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 | | 14. Apr | 11:00-11:45 | [RSE Seminar, Alain Studer:<br>h5py + mpi4py](events/2026-04-14/Studer.md) | [OHSA/E13](https://pocket.psi.ch/psimap) | 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 | | 28. Apr | 11:00-12:00 | [Git course, Basil Bruhn:<br>Git setup (for newbies)](events/2026-04-28/Git-course.md) | [OFLG/402](https://pocket.psi.ch/psimap) | N/A |
| 12. May | 10:00-12:00 | [Git course, Basil Bruhn:<br>Git basics (for beginners)](events/2026-04-28/Git-course.md) | [OFLG/402](https://pocket.psi.ch/psimap) | N/A |
| 26. May | 10:00-12:00 | [Git course, Basil Bruhn:<br>Git advanced topics](events/2026-04-28/Git-course.md) | [OFLG/402](https://pocket.psi.ch/psimap) | N/A |
| 09. Jun | 10:00-12:00 | [Git course, Basil Bruhn:<br>Git CI/CD ](events/2026-04-28/Git-course.md) | [OFLG/402](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 ## Past Events
| Date | Time | Event | Location | Link | Calendar | | Date | Time | Event | Location | Link | Calendar |
| ---- | ---- | ----- | -------- | ---- | -------- | | ---- | ---- | ----- | -------- | ---- | -------- |
| 15 July 2025 | 15:00-16:30 | RSE@PSI Kick-Off Event | [PSI WBGB 019](https://pocket.psi.ch/psimap) | N/A | N/A | | 03. Mar 2026 | 11:00-11:45 | [Elisabet Capón:<br>An Introduction to Renku](events/2026-03-03/2026-03-03_capon.md) | [OHSA/E13](https://pocket.psi.ch/psimap) | N/A |
| 03. Feb 2026 | 11:00-11:45 | [Achim Gsell:<br>Coding Styles](events/2026-02-03/2026-02-03_gsell.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 |

View File

@@ -0,0 +1,7 @@
# 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

@@ -0,0 +1,7 @@
# 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

@@ -0,0 +1,29 @@
# 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.
<div class="html-viewer-container">
<div class="html-viewer-header">
<span class="document-label">Presentation Viewer</span>
<a href="../index.html" target="_blank" class="open-btn">
↗ Open in New Tab
</a>
</div>
<div class="html-viewer-content">
<iframe src="../index.html"></iframe>
</div>
<div class="html-viewer-controls">
<button class="prev-btn">Previous</button>
<span class="page-info">Slide <span class="page-num">--</span> of <span class="page-count">--</span></span>
<button class="next-btn">Next</button>
</div>
</div>

View File

@@ -0,0 +1,354 @@
<!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.

After

Width:  |  Height:  |  Size: 124 KiB

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,27 @@
# 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.
<div class="pdf-viewer-container" data-url="../2026-03-03_slides.pdf">
<div class="pdf-viewer-header">
<span class="document-label">Document Viewer</span>
<a href="../2026-03-03_slides.pdf" download target="_blank" class="download-btn">
⬇ Download PDF
</a>
</div>
<div class="pdf-viewer-content">
<canvas></canvas>
<div class="pdf-viewer-loading">Loading...</div>
</div>
<div class="pdf-viewer-controls">
<button class="prev-btn">Previous</button>
<span class="page-info">Page <span class="page-num">--</span> of <span class="page-count">--</span></span>
<button class="next-btn">Next</button>
</div>
</div>

Binary file not shown.

View File

@@ -0,0 +1,7 @@
# An Introduction to Renko
**Presenter:** Alain Studer
**When:** 14. April 2026; 11:00-11:45
**Where:** PSI OHSA/E13
Short presentation to demonstrate how h5py + mpi4py can be used to parallelize typical image processing tasks.

View File

@@ -0,0 +1,22 @@
# Git Course
1. **Git setup (for newbies); 28. April, 11am-12am**
- Access to Gitea or Github via SSH and HTTPS
- create and push first repo
2. **Git basics (for beginners); 12. May, 10am - 12am (coffee from 9:45am)**
- Basic commands (clone, pull, add, commit, push)
- origins
- branches (local, remote, tracking etc.)
3. **Git advanced topics; May, 26., 10am - 12am (coffee from 9:45am)**
- best practices for working in a team
- branch and merge strategies
- issues, pull requests and reviews
- hooks
4. **Git CI/CD; June, 9, 10am - 12am (coffee from 9:45am)**
- automatization with CI/CD
- write your own pipeline
- Linting/Building/Testing

View File

@@ -1,14 +1,16 @@
# Research Software Engineering at PSI # 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. 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.
## Current Events ## Upcoming Events
| Date | Time | Event | Location | Link | Calendar | | Date | Time | Event | Location | Link | Calendar |
| ---- | ---- | ----- | -------- | ---- | -------- | | ---- | ---- | ----- | -------- | ---- | -------- |
| 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 | | 14. Apr | 11:00-11:45 | [RSE Seminar, Alain Studer:<br>h5py + mpi4py](events/2026-04-14/Studer.md) | [OHSA/E13](https://pocket.psi.ch/psimap) | 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 | | 28. Apr | 11:00-12:00 | [Git course, Basil Bruhn:<br>Git setup (for newbies)](events/2026-04-28/Git-course.md) | [OFLG/402](https://pocket.psi.ch/psimap) | N/A |
| 12. May | 10:00-12:00 | [Git course, Basil Bruhn:<br>Git basics (for beginners)](events/2026-04-28/Git-course.md) | [OFLG/402](https://pocket.psi.ch/psimap) | N/A |
| 26. May | 10:00-12:00 | [Git course, Basil Bruhn:<br>Git advanced topics](events/2026-04-28/Git-course.md) | [OFLG/402](https://pocket.psi.ch/psimap) | N/A |
| 09. Jun | 10:00-12:00 | [Git course, Basil Bruhn:<br>Git CI/CD ](events/2026-04-28/Git-course.md) | [OFLG/402](https://pocket.psi.ch/psimap) | N/A |
## Staying Informed ## Staying Informed

25
docs/surveys.md Normal file
View File

@@ -0,0 +1,25 @@
# 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-viewer-container" data-url="../_static/media/survey2025.pdf">
<div class="pdf-viewer-header">
<span class="document-label">Document Viewer</span>
<a href="../_static/media/survey2025.pdf" download target="_blank" class="download-btn">
⬇ Download PDF
</a>
</div>
<div class="pdf-viewer-content">
<canvas></canvas>
<div class="pdf-viewer-loading">Loading...</div>
</div>
<div class="pdf-viewer-controls">
<button class="prev-btn">Previous</button>
<span class="page-info">Page <span class="page-num">--</span> of <span class="page-count">--</span></span>
<button class="next-btn">Next</button>
</div>
</div>

View File

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

View File

@@ -3,10 +3,13 @@ site_name: RSE@PSI
copyright: © Paul Scherrer Institute (PSI) | Content under CC0 License copyright: © Paul Scherrer Institute (PSI) | Content under CC0 License
nav: nav:
- Home: 'index.md' - Home: 'index.md'
- About: 'about.md' - Who we are:
- Offers: 'offers.md' - RSE@PSI: 'about.md'
- Events: 'events.md' - RSE@Switzerland: 'switzerland.md'
- Links: 'links.md' - What we do:
- Offers: 'offers.md'
- Events: 'events.md'
- Surveys: 'surveys.md'
- Blog: 'blog/index.md' - Blog: 'blog/index.md'
theme: # https://www.mkdocs.org/user-guide/choosing-your-theme/#readthedocs theme: # https://www.mkdocs.org/user-guide/choosing-your-theme/#readthedocs
name: material name: material
@@ -42,6 +45,7 @@ plugins:
- autorefs - autorefs
- include-markdown - include-markdown
- blog - blog
- mkdocs-pdf
markdown_extensions: markdown_extensions:
- admonition - admonition
- pymdownx.superfences - pymdownx.superfences
@@ -67,6 +71,9 @@ extra_javascript:
# unpkg is incredibly slow (17s to load the css file) # unpkg is incredibly slow (17s to load the css file)
- https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.9/katex.min.js - https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.9/katex.min.js
- https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.9/contrib/auto-render.min.js - https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.9/contrib/auto-render.min.js
- https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.16.105/pdf.min.js
- _javascripts/pdf-viewer.js
- _javascripts/html-viewer.js
extra_css: extra_css:
# https://cdnjs.com/libraries/KaTeX # https://cdnjs.com/libraries/KaTeX
# unpkg is incredibly slow (17s to load the css file) # unpkg is incredibly slow (17s to load the css file)

View File

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