From d642d8be98c8f8693b8145f1b0f526f311dd5653 Mon Sep 17 00:00:00 2001 From: Steffen Illium Date: Sat, 30 Aug 2025 17:36:29 +0200 Subject: [PATCH] same base for all, removed teaser image from top of articles removed boolean flag --- AGENTS.md | 13 +- content/projects/2018-02-01-innomi.mdx | 2 +- content/projects/2019-02-24-dw.mdx | 2 +- .../projects/2019-02-24-water-networks.mdx | 4 +- content/projects/2019-10-15-OpenMunich.mdx | 4 +- content/projects/2020-05-01-FIKS.mdx | 6 +- .../2023-10-15-server-administration.mdx | 7 +- ...18-11-01-learned-trajectory-annotation.mdx | 2 +- .../2019-07-05-deep-audio-baselines.mdx | 2 +- .../2020-03-01-soccer-team-vectors.mdx | 2 +- .../2020-05-01-3d-primitive-segmentation.mdx | 2 +- .../2020-06-01-peoc-ood-detection.mdx | 2 +- .../2020-10-25-surgical-mask-detection.mdx | 2 +- .../2021-03-01-anomalous-sound-features.mdx | 2 +- ...04-primate-vocalization-classification.mdx | 2 +- .../2021-03-05-audio-vision-transformer.mdx | 2 +- .../2021-03-06-tasked-self-replication.mdx | 2 +- .../research/2022-02-25-rnn-memory-limits.mdx | 2 +- .../2022-05-09-rl-anomaly-detection.mdx | 2 +- .../2022-08-01-extended-self-replication.mdx | 2 +- .../2022-12-01-organism-network-emergence.mdx | 2 +- .../2023-02-24-voronoi-data-augmentation.mdx | 2 +- ...-25-autoencoder-trajectory-compression.mdx | 2 +- .../2023-06-25-primate-subsegment-sorting.mdx | 2 +- .../2024-01-13-aquarium-marl-environment.mdx | 2 +- .../2024-10-27-mas-emergence-safety.mdx | 2 +- .../2018-02-15-computer_achitecture.mdx | 2 +- content/teaching/2018-10-15-IOT.mdx | 2 +- content/teaching/2018-10-30-Python.mdx | 2 +- content/teaching/2019-05-01-seminar-TIMS.mdx | 2 +- content/teaching/2022-10-15-android.mdx | 2 +- content/template.mdx.tmp | 2 +- src/app/blog/[slug]/page.tsx | 12 -- src/app/projects/[slug]/page.tsx | 22 ++-- src/app/research/[slug]/page.tsx | 82 +++--------- src/app/teaching/[slug]/page.tsx | 83 +++--------- src/components/Article.tsx | 118 ++++++++++++++++++ src/components/infobox.tsx | 5 +- src/components/mdx.tsx | 2 + src/components/project-article.tsx | 18 +-- 40 files changed, 207 insertions(+), 223 deletions(-) create mode 100644 src/components/Article.tsx diff --git a/AGENTS.md b/AGENTS.md index 520be200..a25a535a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -42,21 +42,16 @@ Each `.mdx` file must contain a YAML frontmatter block at the top. Here are the - `title` (string, required): The title of the post. - `tags` (string[], optional): A list of relevant tags. -- `teaser` (string, required): A short, one-sentence summary of the content. -- `header` (object, optional): Used to specify a header image. - - `teaser` (string): Path to the teaser image (e.g., `/figures/my-image.png`). -- `show_teaser` (boolean, optional): If `false`, the teaser image will not be displayed on the post's page. - +- `excerpt` (string, required): A short, one-sentence summary of the content. +- `teaser` (string): Path to the teaser image (e.g., `/figures/my-image.png`). **Example Frontmatter:** ```yaml --- title: "MAS Emergence Safety" tags: [multi-agent-systems, MARL, safety] -teaser: "Formalized MAS emergence misalignment; proposed safety mitigation strategies." -header: - teaser: "/figures/21_coins_teaser.png" -show_teaser: false +excerpt: "Formalized MAS emergence misalignment; proposed safety mitigation strategies." +teaser: "/figures/21_coins_teaser.png" --- ``` diff --git a/content/projects/2018-02-01-innomi.mdx b/content/projects/2018-02-01-innomi.mdx index dde68558..045e3cca 100644 --- a/content/projects/2018-02-01-innomi.mdx +++ b/content/projects/2018-02-01-innomi.mdx @@ -4,7 +4,7 @@ tags: [projects] excerpt: "Early-stage mobile/distributed tech transfer between academia and industry (Bavaria)." teaser: /images/projects/innomi.png icon: /images/projects/innomi.png -show_teaser: false + --- The InnoMi research initiative served as a vital bridge between academic research and industrial application within Bavaria. Funded by the state government and operating under the umbrella of the Zentrum Digitalisierung.Bayern, the project provided crucial resources and a collaborative framework. diff --git a/content/projects/2019-02-24-dw.mdx b/content/projects/2019-02-24-dw.mdx index a7642022..01851792 100644 --- a/content/projects/2019-02-24-dw.mdx +++ b/content/projects/2019-02-24-dw.mdx @@ -4,7 +4,7 @@ tags: [projects] excerpt: "Led online editorial team for DIGITALE WELT Magazin (2018-2023)." teaser: "/images/projects/dw.png" icon: "/images/projects/dw.png" -show_teaser: false + --- During my doctoral studies and research tenure at LMU Munich, I led the online editorial team for *DIGITALE WELT Magazin*. This role, supported by the [InnoMi project](/projects/innomi/), involved managing the publication's digital presence and strategic direction, aiming to effectively bridge scientific research and industry perspectives on digitalization trends. diff --git a/content/projects/2019-02-24-water-networks.mdx b/content/projects/2019-02-24-water-networks.mdx index 9f9101e7..68a67e80 100644 --- a/content/projects/2019-02-24-water-networks.mdx +++ b/content/projects/2019-02-24-water-networks.mdx @@ -6,6 +6,8 @@ teaser: "/images/projects/pipe_leak.png" icon: "/images/projects/pipe_leak.png" --- +In collaboration with Munich's municipal utility provider, Stadtwerke München (SWM), this project explored the feasibility of using acoustic monitoring for early leak detection in water pipe infrastructure. The primary goal was to develop machine learning models capable of identifying leak-indicating sound patterns within a real-world operational environment. + - **Project**: ErLoWa (Erkennung von Leckagen in Wasserleitungsnetzen) - **Partner**: [Stadtwerke München (SWM)](https://www.swm.de/) @@ -14,8 +16,6 @@ icon: "/images/projects/pipe_leak.png" - **Skills**: Acoustic Signal Processing, Deep Learning (CNNs), Anomaly Detection, Real-world Data Handling, Sensor Data Analysis -In collaboration with Munich's municipal utility provider, Stadtwerke München (SWM), this project explored the feasibility of using acoustic monitoring for early leak detection in water pipe infrastructure. The primary goal was to develop machine learning models capable of identifying leak-indicating sound patterns within a real-world operational environment. - The objective was to investigate and develop methods for the automated detection and localization of leaks in urban water distribution networks using acoustic sensor data. ## Methodology & Activities diff --git a/content/projects/2019-10-15-OpenMunich.mdx b/content/projects/2019-10-15-OpenMunich.mdx index ed5956b5..eca54321 100644 --- a/content/projects/2019-10-15-OpenMunich.mdx +++ b/content/projects/2019-10-15-OpenMunich.mdx @@ -6,6 +6,8 @@ teaser: "/images/projects/openmunich.png" icon: "/images/projects/openmunich.png" --- +Organized by the LMU Chair for Mobile and Distributed Systems in collaboration with industry partners Accenture and Red Hat, the OpenMunich conference series created a forum for professionals, researchers, and students to engage with the latest developments in the open-source ecosystem. + - **Role:** Lead Conference Organizer - **Event:** [OpenMunich Conference](https://openmunich.eu) @@ -15,8 +17,6 @@ icon: "/images/projects/openmunich.png" - **Skills:** Event Management, Stakeholder Coordination, Project Planning, Website Management -Organized by the LMU Chair for Mobile and Distributed Systems in collaboration with industry partners Accenture and Red Hat, the OpenMunich conference series created a forum for professionals, researchers, and students to engage with the latest developments in the open-source ecosystem. - As Lead Organizer for the 2018 and 2019 editions, I was responsible for the end-to-end planning and execution of the events. The conference offered a platform to showcase university research—covering topics from Machine Learning to Quantum Computing—alongside practical insights and technology demonstrations from our industry partners. ## Key Responsibilities diff --git a/content/projects/2020-05-01-FIKS.mdx b/content/projects/2020-05-01-FIKS.mdx index cca7e9e9..59d9c6ab 100644 --- a/content/projects/2020-05-01-FIKS.mdx +++ b/content/projects/2020-05-01-FIKS.mdx @@ -8,7 +8,8 @@ role: Researcher, Software Developer skills: Multi-Agent Reinforcement Learning (MARL), Emergence Analysis, AI Safety, Simulation Environment Design, Python, Gymnasium API, Software Engineering, Unity (Visualization), Industry Collaboration --- -{/* The InfoBox now contains ALL metadata, creating a clean sidebar. */} +In collaboration with Fraunhofer IKS, the AI-Fusion project addressed the critical challenge of understanding and ensuring safety in multi-agent reinforcement learning (MARL) systems. Emergence, defined as the arising of complex, often unpredictable, system-level dynamics from local interactions between agents and their environment, was a central focus due to its implications for system safety and reliability. The project's objective was to investigate the detection and mitigation of potentially unsafe emergent behaviors in complex systems composed of multiple interacting AI agents, particularly in scenarios involving heterogeneous agents (e.g., mixed-vendor autonomous systems). + {/* Section 2: Project Info */}

Overview

@@ -32,9 +33,6 @@ skills: Multi-Agent Reinforcement Learning (MARL), Emergence Analysis, AI Safety
-{/* All the main content now flows naturally in a single column. */} -In collaboration with Fraunhofer IKS, the AI-Fusion project addressed the critical challenge of understanding and ensuring safety in multi-agent reinforcement learning (MARL) systems. Emergence, defined as the arising of complex, often unpredictable, system-level dynamics from local interactions between agents and their environment, was a central focus due to its implications for system safety and reliability. The project's objective was to investigate the detection and mitigation of potentially unsafe emergent behaviors in complex systems composed of multiple interacting AI agents, particularly in scenarios involving heterogeneous agents (e.g., mixed-vendor autonomous systems). - To facilitate research into these phenomena, key contributions included the development of specialized simulation tools: **1. High-Performance MARL Simulation Environment:** diff --git a/content/projects/2023-10-15-server-administration.mdx b/content/projects/2023-10-15-server-administration.mdx index c3c37930..1d2bfb0c 100644 --- a/content/projects/2023-10-15-server-administration.mdx +++ b/content/projects/2023-10-15-server-administration.mdx @@ -6,6 +6,10 @@ teaser: "/images/projects/arch.png" icon: "/images/projects/arch.png" --- +During my tenure at the LMU Chair for Mobile and Distributed Systems, alongside my research activities, I assumed responsibility for the ongoing maintenance of the group's IT infrastructure. This encompassed Linux workstations, Windows Server-based hypervisors, Linux file servers (utilizing ZFS), and core network services. + +--- + - **Role**: System Administrator, DevOps Engineer, Network Administrator - **Affiliation**: Chair for Mobile and Distributed Systems, LMU Munich @@ -13,9 +17,6 @@ icon: "/images/projects/arch.png" - **Technologies**: Kubernetes (K3S), Ansible, Docker, CI/CD (GitLab CI, Argo CD), GitOps, Linux Server Administration, Traefik, WireGuard, ZFS, Longhorn, IaC -During my tenure at the LMU Chair for Mobile and Distributed Systems, alongside my research activities, I assumed responsibility for the ongoing maintenance of the group's IT infrastructure. This encompassed Linux workstations, Windows Server-based hypervisors, Linux file servers (utilizing ZFS), and core network services. - ---- ## Key Initiatives & Achievements diff --git a/content/research/2018-11-01-learned-trajectory-annotation.mdx b/content/research/2018-11-01-learned-trajectory-annotation.mdx index c71ca16f..c8fbe4e5 100644 --- a/content/research/2018-11-01-learned-trajectory-annotation.mdx +++ b/content/research/2018-11-01-learned-trajectory-annotation.mdx @@ -3,7 +3,7 @@ title: "Learned Trajectory Annotation" tags: [research, geoinformatics, machine-learning, unsupervised-learning, human-robot-interaction, autoencoder] excerpt: "Unsupervised autoencoder learns spatial context from trajectory data for annotation." teaser: "/figures/0_trajectory_reconstruction_teaser.png" -show_teaser: true + ---
diff --git a/content/research/2019-07-05-deep-audio-baselines.mdx b/content/research/2019-07-05-deep-audio-baselines.mdx index 90edfd1d..8cf485d7 100644 --- a/content/research/2019-07-05-deep-audio-baselines.mdx +++ b/content/research/2019-07-05-deep-audio-baselines.mdx @@ -4,7 +4,7 @@ tags: [research, deep-learning, audio-classification, paralinguistics, speech-an excerpt: "Deep learning audio baseline for Interspeech 2019 ComParE challenge." teaser: "/figures/3_deep_neural_baselines_teaser.jpg" icon: "/figures/3_deep_neural_baselines.jpg" -show_teaser: true + --- # Deep Audio Baselines diff --git a/content/research/2020-03-01-soccer-team-vectors.mdx b/content/research/2020-03-01-soccer-team-vectors.mdx index ade3af20..09e5dccf 100644 --- a/content/research/2020-03-01-soccer-team-vectors.mdx +++ b/content/research/2020-03-01-soccer-team-vectors.mdx @@ -3,7 +3,7 @@ title: "Soccer Team Vectors" tags: [machine-learning, representation-learning, sports-analytics, similarity-search] excerpt: "STEVE learns soccer team embeddings from match data for analysis." teaser: "/figures/2_steve_algo.jpg" -show_teaser: true + ---
diff --git a/content/research/2020-05-01-3d-primitive-segmentation.mdx b/content/research/2020-05-01-3d-primitive-segmentation.mdx index c75fc314..815b6201 100644 --- a/content/research/2020-05-01-3d-primitive-segmentation.mdx +++ b/content/research/2020-05-01-3d-primitive-segmentation.mdx @@ -3,7 +3,7 @@ title: "3D Primitive Segmentation" tags: [research, computer-vision, 3d-processing, point-clouds, segmentation, deep-learning, genetic-algorithms] excerpt: "Hybrid method segments/fits primitives in large 3D point clouds." teaser: "/figures/4_point_cloud_segmentation_teaser.jpg" -show_teaser: true + ---
diff --git a/content/research/2020-06-01-peoc-ood-detection.mdx b/content/research/2020-06-01-peoc-ood-detection.mdx index dedfe63b..808e5723 100644 --- a/content/research/2020-06-01-peoc-ood-detection.mdx +++ b/content/research/2020-06-01-peoc-ood-detection.mdx @@ -3,7 +3,7 @@ title: "PEOC OOD Detection" tags: [deep-reinforcement-learning, out-of-distribution-detection, safety, anomaly-detection] excerpt: "PEOC uses policy entropy for OOD detection in deep RL." teaser: "/figures/6_ood_pipeline.jpg" -show_teaser: true + --- diff --git a/content/research/2020-10-25-surgical-mask-detection.mdx b/content/research/2020-10-25-surgical-mask-detection.mdx index 83abb1de..bdbafb96 100644 --- a/content/research/2020-10-25-surgical-mask-detection.mdx +++ b/content/research/2020-10-25-surgical-mask-detection.mdx @@ -3,7 +3,7 @@ title: "Surgical-Mask Detection" tags: [research, audio-classification, deep-learning, data-augmentation, computer-vision, paralinguistics] excerpt: "CNN mask detection in speech using augmented spectrograms." teaser: "/figures/7_mask_models.jpg" -show_teaser: true + --- This study investigates the efficacy of various **data augmentation techniques** applied directly to **mel-spectrogram representations** of audio data for improving classification performance. The specific task addressed is the detection of surgical mask usage based on human speech signals, a relevant problem in paralinguistics and audio analysis. diff --git a/content/research/2021-03-01-anomalous-sound-features.mdx b/content/research/2021-03-01-anomalous-sound-features.mdx index 9fc0854a..577aeba4 100644 --- a/content/research/2021-03-01-anomalous-sound-features.mdx +++ b/content/research/2021-03-01-anomalous-sound-features.mdx @@ -3,7 +3,7 @@ title: "Anomalous Sound Features" tags: [research, anomaly-detection, audio-classification, deep-learning, transfer-learning, feature-extraction] excerpt: "Pretrained networks extract features for anomalous industrial sound detection." teaser: "/figures/8_anomalous_sound_teaser.jpg" -show_teaser: true + ---
diff --git a/content/research/2021-03-04-primate-vocalization-classification.mdx b/content/research/2021-03-04-primate-vocalization-classification.mdx index e0c590ba..c156a9f0 100644 --- a/content/research/2021-03-04-primate-vocalization-classification.mdx +++ b/content/research/2021-03-04-primate-vocalization-classification.mdx @@ -4,7 +4,7 @@ tags: [research, deep-learning, audio-classification, bioacoustics, conservation excerpt: "Deep BiLSTM classifies primate vocalizations for acoustic wildlife monitoring." teaser: /figures/11_recurrent_primate_workflow.jpg icon: /figures/11_recurrent_primate_workflow.jpg -show_teaser: true + --- # Primate Vocalization Classification diff --git a/content/research/2021-03-05-audio-vision-transformer.mdx b/content/research/2021-03-05-audio-vision-transformer.mdx index 3557bc4d..12c5d71d 100644 --- a/content/research/2021-03-05-audio-vision-transformer.mdx +++ b/content/research/2021-03-05-audio-vision-transformer.mdx @@ -3,7 +3,7 @@ title: "Audio Vision Transformer" tags: [research, deep-learning, audio-classification, computer-vision, attention-mechanisms, transformers] excerpt: "Vision Transformer on spectrograms for audio classification, with data augmentation." teaser: /figures/12_vision_transformer_teaser.jpg -show_teaser: true + --- This research explores the application of the **Vision Transformer (ViT)** architecture, originally designed for image processing, to the domain of audio classification by operating on **mel-spectrogram representations**. The ViT's attention mechanisms offer a potentially powerful alternative to convolutional approaches for capturing relevant patterns in spectrogram data. diff --git a/content/research/2021-03-06-tasked-self-replication.mdx b/content/research/2021-03-06-tasked-self-replication.mdx index a3c86a59..b968d6ff 100644 --- a/content/research/2021-03-06-tasked-self-replication.mdx +++ b/content/research/2021-03-06-tasked-self-replication.mdx @@ -3,7 +3,7 @@ title: "Tasked Self-Replication" tags: [research, artificial-life, complex-systems, neural-networks, self-organization, multi-task-learning] excerpt: "Self-replicating networks perform tasks, exploring stabilization in artificial chemistry." teaser: "/figures/13_sr_teaser.jpg" -show_teaser: true + --- Building upon the concept of self-replicating neural networks, this research explores the integration of **auxiliary functional goals** alongside the primary objective of self-replication. The aim is to create networks that can not only reproduce their own weights but also perform useful computations or interact meaningfully with an environment simultaneously. diff --git a/content/research/2022-02-25-rnn-memory-limits.mdx b/content/research/2022-02-25-rnn-memory-limits.mdx index 7ac55cbc..62a361f5 100644 --- a/content/research/2022-02-25-rnn-memory-limits.mdx +++ b/content/research/2022-02-25-rnn-memory-limits.mdx @@ -3,7 +3,7 @@ title: "RNN Memory Limits" tags: [research, deep-learning, recurrent-neural-networks, sequence-modeling, theoretical-ml] excerpt: "Investigated memory limits of RNNs in recalling uncorrelated sequences." teaser: "/figures/22_rnn_limits.png" -show_teaser: true + --- Recurrent Neural Networks (RNNs), including variants like Long Short-Term Memory (LSTM) and Gated Recurrent Units (GRU), are designed with the intent to capture temporal dependencies within sequential data. Their internal mechanisms allow information from previous time steps to influence current processing. diff --git a/content/research/2022-05-09-rl-anomaly-detection.mdx b/content/research/2022-05-09-rl-anomaly-detection.mdx index b409b3dd..dfd21b22 100644 --- a/content/research/2022-05-09-rl-anomaly-detection.mdx +++ b/content/research/2022-05-09-rl-anomaly-detection.mdx @@ -3,7 +3,7 @@ title: "RL Anomaly Detection" tags: [research, reinforcement-learning, anomaly-detection, safety, lifelong-learning, generalization] excerpt: "Perspective on anomaly detection challenges and future in reinforcement learning." teaser: "/figures/14_ad_rl_teaser.jpg" -show_teaser: true + --- Anomaly Detection (AD) is crucial for the safe deployment of Reinforcement Learning (RL) agents, especially in safety-critical applications where encountering unexpected or out-of-distribution situations can lead to catastrophic failures. This work provides a perspective on the state and future directions of AD research specifically tailored for the complexities inherent in RL. diff --git a/content/research/2022-08-01-extended-self-replication.mdx b/content/research/2022-08-01-extended-self-replication.mdx index 61c88789..e30c2e97 100644 --- a/content/research/2022-08-01-extended-self-replication.mdx +++ b/content/research/2022-08-01-extended-self-replication.mdx @@ -3,7 +3,7 @@ title: "Extended Self-Replication" tags: [artificial-life, complex-systems, neural-networks, self-organization, dynamical-systems] excerpt: "Journal extension: self-replication, noise robustness, emergence, dynamical system analysis." teaser: "/figures/15_sr_journal_teaser.jpg" -show_teaser: true + --- # Extended Self-Replication diff --git a/content/research/2022-12-01-organism-network-emergence.mdx b/content/research/2022-12-01-organism-network-emergence.mdx index b8569046..19fdb05c 100644 --- a/content/research/2022-12-01-organism-network-emergence.mdx +++ b/content/research/2022-12-01-organism-network-emergence.mdx @@ -3,7 +3,7 @@ title: "Organism Network Emergence" tags: [artificial-life, complex-systems, neural-networks, self-organization, emergent-computation] excerpt: "Self-replicating networks collaborate forming higher-level Organism Networks with emergent functionalities." teaser: "/figures/16_on_teaser.jpg" -show_teaser: true + --- This research investigates the transition from simple self-replication to higher levels of organization by exploring how populations of basic, self-replicating neural network units can form **"Organism Networks" (ONs)** through **collaboration and emergent differentiation**. Moving beyond the replication of individual networks, the focus shifts to the collective dynamics and functional capabilities that arise when these units interact within a shared environment (akin to an "artificial chemistry"). diff --git a/content/research/2023-02-24-voronoi-data-augmentation.mdx b/content/research/2023-02-24-voronoi-data-augmentation.mdx index ddbe52cf..4721f687 100644 --- a/content/research/2023-02-24-voronoi-data-augmentation.mdx +++ b/content/research/2023-02-24-voronoi-data-augmentation.mdx @@ -3,7 +3,7 @@ title: "Voronoi Data Augmentation" tags: [research, data-augmentation, computer-vision, deep-learning, convolutional-neural-networks] excerpt: "VoronoiPatches improves CNN robustness via non-linear recombination augmentation." teaser: "/figures/17_vp_teaser.jpg" -show_teaser: true + --- Data augmentation is essential for improving the performance and generalization of Convolutional Neural Networks (CNNs), especially when training data is limited. This research introduces **VoronoiPatches (VP)**, a novel data augmentation algorithm based on the principle of **non-linear recombination** of image information. diff --git a/content/research/2023-02-25-autoencoder-trajectory-compression.mdx b/content/research/2023-02-25-autoencoder-trajectory-compression.mdx index 2d1b0f30..77772416 100644 --- a/content/research/2023-02-25-autoencoder-trajectory-compression.mdx +++ b/content/research/2023-02-25-autoencoder-trajectory-compression.mdx @@ -3,7 +3,7 @@ title: "Autoencoder Trajectory Compression" tags: [research, deep-learning, recurrent-neural-networks, trajectory-analysis, data-compression, geoinformatics] excerpt: "LSTM autoencoder better DP for trajectory compression (Fréchet/DTW)." teaser: /figures/23_trajectory_model.png -show_teaser: true + --- The proliferation of location-aware mobile devices generates vast amounts of GPS trajectory data, necessitating efficient storage solutions. While various compression techniques aim to reduce data volume, preserving essential spatio-temporal information remains crucial. diff --git a/content/research/2023-06-25-primate-subsegment-sorting.mdx b/content/research/2023-06-25-primate-subsegment-sorting.mdx index d36e64c3..74b3a40b 100644 --- a/content/research/2023-06-25-primate-subsegment-sorting.mdx +++ b/content/research/2023-06-25-primate-subsegment-sorting.mdx @@ -3,7 +3,7 @@ title: "Primate Subsegment Sorting" tags: [bioacoustics, audio-classification, deep-learning, data-labeling, signal-processing] excerpt: "Binary subsegment presorting improves noisy primate sound classification." teaser: /figures/19_binary_primates_teaser.jpg -show_teaser: false + ---
diff --git a/content/research/2024-01-13-aquarium-marl-environment.mdx b/content/research/2024-01-13-aquarium-marl-environment.mdx index 68a2354a..1624b550 100644 --- a/content/research/2024-01-13-aquarium-marl-environment.mdx +++ b/content/research/2024-01-13-aquarium-marl-environment.mdx @@ -3,7 +3,7 @@ title: "Aquarium MARL Environment" tags: [multi-agent-reinforcement-learning, MARL, simulation, emergence, complex-systems] excerpt: "Aquarium: Open-source MARL environment for predator-prey studies." teaser: /figures/20_aquarium.png -show_teaser: true + --- The study of complex interactions using Multi-Agent Reinforcement Learning (MARL), particularly **predator-prey dynamics**, often requires specialized simulation environments. To streamline research and avoid redundant development efforts, we introduce **Aquarium**: a versatile, open-source MARL environment specifically designed for investigating predator-prey scenarios and related **emergent behaviors**. diff --git a/content/research/2024-10-27-mas-emergence-safety.mdx b/content/research/2024-10-27-mas-emergence-safety.mdx index affb2179..4467f7bc 100644 --- a/content/research/2024-10-27-mas-emergence-safety.mdx +++ b/content/research/2024-10-27-mas-emergence-safety.mdx @@ -3,7 +3,7 @@ title: "MAS Emergence Safety" tags: [multi-agent-systems, MARL, safety, emergence, system-specification] excerpt: "Formalized MAS emergence misalignment; proposed safety mitigation strategies." teaser: "/figures/21_coins_teaser.png" -show_teaser: false + --- Multi-Agent Systems (MAS), particularly those employing decentralized decision-making based on local information (common in MARL), can exhibit **emergent effects**. These phenomena, arising from complex interactions, range from minor behavioral quirks to potentially catastrophic system failures, posing significant **safety challenges**. diff --git a/content/teaching/2018-02-15-computer_achitecture.mdx b/content/teaching/2018-02-15-computer_achitecture.mdx index 06335556..c6c11f60 100644 --- a/content/teaching/2018-02-15-computer_achitecture.mdx +++ b/content/teaching/2018-02-15-computer_achitecture.mdx @@ -4,7 +4,7 @@ tags: [teaching, computer architecture, LMU, coordination] excerpt: "Served as a Teaching Assistant and Tutorial Coordinator for the LMU Computer Architecture course, managing tutors and curriculum for over 600 students." teaser: "/images/teaching/computer_gear.png" icon: "/images/teaching/computer_gear.png" -show_teaser: false + --- diff --git a/content/teaching/2018-10-15-IOT.mdx b/content/teaching/2018-10-15-IOT.mdx index 985a07ea..54503f2e 100644 --- a/content/teaching/2018-10-15-IOT.mdx +++ b/content/teaching/2018-10-15-IOT.mdx @@ -4,7 +4,7 @@ tags: [teaching, iot, mqtt, python, influxdb, distributed-systems, practical-cou excerpt: "Designed and taught an IoT practical exercise using MQTT and Python for approximately 200 students." teaser: "/images/teaching/server.png" icon: "/images/teaching/server.png" -show_teaser: false + --- diff --git a/content/teaching/2018-10-30-Python.mdx b/content/teaching/2018-10-30-Python.mdx index b38f1863..b9febd3f 100644 --- a/content/teaching/2018-10-30-Python.mdx +++ b/content/teaching/2018-10-30-Python.mdx @@ -4,7 +4,7 @@ tags: [teaching, python, programming, introductory-course, curriculum-developmen excerpt: "Co-developed/taught intensive introductory Python course for 200 students." teaser: /images/teaching/py.png icon: /images/teaching/py.png -show_teaser: false + --- In preparation for the practical exercises within the [Internet of Things (IoT) lecture series](/teaching/IOT), we identified the need for foundational programming skills among the student cohort. Consequently, during the Winter Semester 2018/19, I **co-developed and co-taught** an intensive introductory course focused on the **[Python programming language](https://www.python.org/)**. diff --git a/content/teaching/2019-05-01-seminar-TIMS.mdx b/content/teaching/2019-05-01-seminar-TIMS.mdx index c450205b..8a2e18b1 100644 --- a/content/teaching/2019-05-01-seminar-TIMS.mdx +++ b/content/teaching/2019-05-01-seminar-TIMS.mdx @@ -4,7 +4,7 @@ tags: [teaching, supervision, mentoring, research, academic writing] excerpt: "Supervised student research, writing, and presentation skills in Mobile/Distributed Systems, ML, and Quantum Computing." teaser: "/images/teaching/thesis.png" icon: "/images/teaching/thesis.png" -show_teaser: false + --- diff --git a/content/teaching/2022-10-15-android.mdx b/content/teaching/2022-10-15-android.mdx index 50e15c80..d0c7ae59 100644 --- a/content/teaching/2022-10-15-android.mdx +++ b/content/teaching/2022-10-15-android.mdx @@ -4,7 +4,7 @@ tags: [teaching, android, java, kotlin, mobile-development, app-development, agi excerpt: "Supervised MSP: teams built Android apps (Java/Kotlin) using agile." teaser: "/images/teaching/android.png" icon: "/images/teaching/android.png" -show_teaser: true + --- diff --git a/content/template.mdx.tmp b/content/template.mdx.tmp index aac47b99..336d85c3 100644 --- a/content/template.mdx.tmp +++ b/content/template.mdx.tmp @@ -3,7 +3,7 @@ title: "Your Post Title Here" tags: [tag1, tag2, optional-tag] excerpt: "A concise, one-sentence summary of your content." teaser: "/figures/your-teaser-image.png" # Optional: Path to a teaser image -show_teaser: true # Optional: Set to false to hide the teaser image on the post page + # Optional: Set to false to hide the teaser image on the post page --- # Introduction to Your Topic diff --git a/src/app/blog/[slug]/page.tsx b/src/app/blog/[slug]/page.tsx index b4df7890..babb431b 100644 --- a/src/app/blog/[slug]/page.tsx +++ b/src/app/blog/[slug]/page.tsx @@ -55,18 +55,6 @@ export default async function BlogPage({ params }: { params: { slug: string } })
)} - - {post.frontmatter.show_teaser && post.frontmatter.teaser && ( -
- {`${post.frontmatter.title} -
- )} diff --git a/src/app/projects/[slug]/page.tsx b/src/app/projects/[slug]/page.tsx index 3c8c3929..173a43bd 100644 --- a/src/app/projects/[slug]/page.tsx +++ b/src/app/projects/[slug]/page.tsx @@ -1,12 +1,8 @@ -import { getPostBySlug, getPostSlugs, getPostFrontmatter } from '@/lib/mdx'; // Assume getPostFrontmatter exists +import { getPostBySlug, getPostSlugs } from '@/lib/mdx'; import { notFound } from 'next/navigation'; import { DATA } from '@/data/resume'; import { getPublicationsData } from '@/lib/publications'; -import { ProjectArticle } from '@/components/project-article'; - -// Helper function to get frontmatter for a slug (you may need to create this in lib/mdx.ts) -// It's a lighter version of getPostBySlug that only parses frontmatter. -// If you don't have it, we can just use getPostBySlug, it's just slightly less performant. +import { Article } from '@/components/Article'; // <-- Use the new component export async function generateStaticParams() { const slugs = getPostSlugs('projects'); @@ -23,28 +19,24 @@ export async function generateMetadata({ params }: { params: { slug: string } }) } export default async function ProjectPage({ params }: { params: { slug: string } }) { - const { slug } = params; - const post = await getPostBySlug('projects', slug); + const post = await getPostBySlug('projects', params.slug); const publications = getPublicationsData(); if (!post) { notFound(); } - // --- Logic for Previous/Next Navigation --- - const allSlugs = getPostSlugs('projects'); // Or get them from your DATA file if they are ordered there - const currentIndex = allSlugs.findIndex((s) => s === slug); - + // --- Navigation Logic --- + const allSlugs = getPostSlugs('projects'); + const currentIndex = allSlugs.findIndex((s) => s === params.slug); const prevSlug = currentIndex > 0 ? allSlugs[currentIndex - 1] : null; const nextSlug = currentIndex < allSlugs.length - 1 ? allSlugs[currentIndex + 1] : null; - const prevPost = prevSlug ? await getPostBySlug('projects', prevSlug) : null; const nextPost = nextSlug ? await getPostBySlug('projects', nextSlug) : null; - const navigation = { prev: prevPost ? { slug: prevSlug, title: prevPost.frontmatter.title } : null, next: nextPost ? { slug: nextSlug, title: nextPost.frontmatter.title } : null, }; - return ; + return
; } \ No newline at end of file diff --git a/src/app/research/[slug]/page.tsx b/src/app/research/[slug]/page.tsx index 33907d30..636268eb 100644 --- a/src/app/research/[slug]/page.tsx +++ b/src/app/research/[slug]/page.tsx @@ -1,12 +1,8 @@ import { getPostBySlug, getPostSlugs } from '@/lib/mdx'; -import { CitationProvider } from '@/context/citation-context'; -import { ReferencesContainer } from '@/components/references-container'; import { notFound } from 'next/navigation'; -import Image from 'next/image'; import { DATA } from '@/data/resume'; import { getPublicationsData } from '@/lib/publications'; -import { CustomMDX } from '@/components/custom-mdx'; -import Link from 'next/link'; +import { Article } from '@/components/Article'; // <-- Use the new component export async function generateStaticParams() { const slugs = getPostSlugs('research'); @@ -15,9 +11,7 @@ export async function generateStaticParams() { export async function generateMetadata({ params }: { params: { slug: string } }) { const post = await getPostBySlug('research', params.slug); - if (!post) { - return {}; - } + if (!post) { return {}; } return { title: post.frontmatter.title, description: post.frontmatter.description || DATA.description, @@ -29,64 +23,20 @@ export default async function ResearchPage({ params }: { params: { slug: string const publications = getPublicationsData(); if (!post) { - return notFound(); + notFound(); } - return ( - -
-
-
-

- {post.frontmatter.title} -

- {post.frontmatter.excerpt && ( -

{post.frontmatter.excerpt}

- )} - {post.frontmatter.icon && ( -
- {`${post.frontmatter.title} -
- )} -
+ // --- Navigation Logic --- + const allSlugs = getPostSlugs('research'); + const currentIndex = allSlugs.findIndex((s) => s === params.slug); + const prevSlug = currentIndex > 0 ? allSlugs[currentIndex - 1] : null; + const nextSlug = currentIndex < allSlugs.length - 1 ? allSlugs[currentIndex + 1] : null; + const prevPost = prevSlug ? await getPostBySlug('research', prevSlug) : null; + const nextPost = nextSlug ? await getPostBySlug('research', nextSlug) : null; + const navigation = { + prev: prevPost ? { slug: prevSlug, title: prevPost.frontmatter.title } : null, + next: nextPost ? { slug: nextSlug, title: nextPost.frontmatter.title } : null, + }; - {post.frontmatter.show_teaser && post.frontmatter.teaser && ( -
- {`${post.frontmatter.title} -
- )} - - - - {post.frontmatter.tags && ( -
- {post.frontmatter.tags.map((tag: string) => ( - - {tag} - - ))} -
- )} - - -
-
-
- ); -} + return
; +} \ No newline at end of file diff --git a/src/app/teaching/[slug]/page.tsx b/src/app/teaching/[slug]/page.tsx index 7427bd3a..ae7898de 100644 --- a/src/app/teaching/[slug]/page.tsx +++ b/src/app/teaching/[slug]/page.tsx @@ -1,13 +1,8 @@ import { getPostBySlug, getPostSlugs } from '@/lib/mdx'; -import { CitationProvider } from '@/context/citation-context'; -import { ReferencesContainer } from '@/components/references-container'; import { notFound } from 'next/navigation'; -import Image from 'next/image'; import { DATA } from '@/data/resume'; import { getPublicationsData } from '@/lib/publications'; -import { CustomMDX } from '@/components/custom-mdx'; -import Link from 'next/link'; -import router from 'next/router'; +import { Article } from '@/components/Article'; // <-- Use the new component export async function generateStaticParams() { const slugs = getPostSlugs('teaching'); @@ -16,9 +11,7 @@ export async function generateStaticParams() { export async function generateMetadata({ params }: { params: { slug: string } }) { const post = await getPostBySlug('teaching', params.slug); - if (!post) { - return {}; - } + if (!post) { return {}; } return { title: post.frontmatter.title, description: post.frontmatter.description || DATA.description, @@ -30,64 +23,20 @@ export default async function TeachingPage({ params }: { params: { slug: string const publications = getPublicationsData(); if (!post) { - return notFound(); + notFound(); } - return ( - -
-
-
-

- {post.frontmatter.title} -

- {post.frontmatter.excerpt && ( -

{post.frontmatter.excerpt}

- )} - {post.frontmatter.icon && ( -
- {`${post.frontmatter.title} -
- )} -
+ // --- Navigation Logic --- + const allSlugs = getPostSlugs('teaching'); + const currentIndex = allSlugs.findIndex((s) => s === params.slug); + const prevSlug = currentIndex > 0 ? allSlugs[currentIndex - 1] : null; + const nextSlug = currentIndex < allSlugs.length - 1 ? allSlugs[currentIndex + 1] : null; + const prevPost = prevSlug ? await getPostBySlug('teaching', prevSlug) : null; + const nextPost = nextSlug ? await getPostBySlug('teaching', nextSlug) : null; + const navigation = { + prev: prevPost ? { slug: prevSlug, title: prevPost.frontmatter.title } : null, + next: nextPost ? { slug: nextSlug, title: nextPost.frontmatter.title } : null, + }; - {post.frontmatter.show_teaser && post.frontmatter.teaser && ( -
- {`${post.frontmatter.title} -
- )} - - - - {post.frontmatter.tags && ( -
- {post.frontmatter.tags.map((tag: string) => ( - - {tag} - - ))} -
- )} - - -
-
-
- ); -} + return
; +} \ No newline at end of file diff --git a/src/components/Article.tsx b/src/components/Article.tsx new file mode 100644 index 00000000..6ea2955f --- /dev/null +++ b/src/components/Article.tsx @@ -0,0 +1,118 @@ +"use client"; + +import { CitationProvider } from '@/context/citation-context'; +import { ReferencesContainer } from '@/components/references-container'; +import Image from 'next/image'; +import { CustomMDX } from '@/components/custom-mdx'; +import Link from 'next/link'; +import { Publication } from '@/lib/publications'; +import { useAccentColor } from '@/context/accent-color-context'; +import { ProjectNavigation } from './project-navigation'; + +// --- DEFINE UNIVERSAL PROP TYPES --- +interface Post { + source: any; + frontmatter: { + title: string; + excerpt?: string; + teaser?: string; + tags?: string[]; + icon?: string; + }; +} + +interface NavigationLink { + slug: string; + title: string; +} + +interface ArticleProps { + post: Post; + publications: Publication[]; + // Navigation is now an optional prop + navigation?: { + prev: NavigationLink | null; + next: NavigationLink | null; + }; + basePath: string; // Used for navigation and tags +} + +/** + * An internal component to consume the PageLayoutContext. + * This allows us to conditionally render the icon based on whether + * an InfoBox is present in the MDX content. + */ +function ArticleContent({ post }: { post: Post }) { + const showIcon = post.frontmatter.icon; + + return ( +
+ {showIcon ? ( +
+ {`${post.frontmatter.title} + +
+ ) : ( +
+ +
+ )} +
+ ); +} + + +/** + * The main reusable Article component for all slug-based pages. + */ +export function Article({ post, publications, navigation, basePath }: ArticleProps) { + const accentColor = useAccentColor(); + + return ( + +
+
+
+

+ {post.frontmatter.title} +

+ {post.frontmatter.excerpt && ( +

{post.frontmatter.excerpt}

+ )} +
+ + + + {post.frontmatter.tags && ( +
+ {post.frontmatter.tags.map((tag: string) => ( + e.currentTarget.style.backgroundColor = accentColor} + onMouseOut={(e) => e.currentTarget.style.backgroundColor = ''} + > + {tag} + + ))} +
+ )} + + + + {/* Conditionally render navigation if the data is provided */} + {navigation && ( + + )} +
+
+
+ ); +} \ No newline at end of file diff --git a/src/components/infobox.tsx b/src/components/infobox.tsx index c695e588..8fb33260 100644 --- a/src/components/infobox.tsx +++ b/src/components/infobox.tsx @@ -9,8 +9,9 @@ export function InfoBox({ title, children, className, ...props }: InfoBoxProps) return (