I am currently studying Molecular Biosciences at JKU Linz and PLUS, driven by a fascination for the building blocks of life and complex biological systems.
What sets my journey apart is my multidisciplinary background. Before diving into the life sciences, I built a strong foundation in mechanical engineering and software development.
When I am not in the lab or coding, you will find me at the climbing gym, where I also work as a certified climbing instructor and route setter, merging creativity with physical problem-solving.
Developed a custom lighting system using ESP32 and custom WLED firmware. Integrated rotary encoders and designed a custom PCB to handle inputs and power distribution.
/**
* Hardware - Rotation Detection
*/
int16_t ValueNOW;
// - if a value has changed
pcnt_get_counter_value(Encoder.unit, &ValueNOW);
if (ValueNOW) {
pcnt_counter_clear(Encoder.unit);
Encoder.deltaValue += ValueNOW;
Encoder.rotationPending = true;
Encoder.TimeOfLastRotation = millis();
Serial.printf("Encoder %d has a NEW Value: %d \r\n", i, ValueNOW);
};
// - if a rotation value has changed and is pending to be forwared
if (Encoder.rotationPending && millis() - Encoder.TimeOfLastRotation >= 300) {
Encoder.rotationPending = false;
Encoder.eventRotation = true;
global_eventPending = true;
Serial.printf("Encoder %d has a CONFIRMED Delta: %d \r\n", i, Encoder.deltaValue );
};
...
Professional-grade custom saturated group head espresso machine. Built utilizing precision CNC milling and turning for metal components. Integrated ESP32-controlled external gear pump for real-time pressure profiling. Mechanical modeling executed in PTC Creo.
void adjustPressureProfile(float currentP, float targetP) {
float error = targetP - currentP;
integralTerm += (error * dt);
integralTerm = constrain(integralTerm, -40.0f, 40.0f);
float pwmOut = (Kp*error) + (Ki*integralTerm) + feedforwardBase;
ledcWrite(PUMP_PWM, constrain((uint32_t)pwmOut, 0, 1023));
}
Designed and deployed own Minecraft Modpack from scratch with custom scripting and data management to drive a progression based gameplay.
function ingredientCaching (){
console.log("[COP] Ingredients Caching started...")
let startTime = Date.now()
let { item } = Stages_Exception;
// Loop over each stage to collect ingredients
for (let key in Stages) {
let { stage_text, modids } = Stages[key];
let ingredientsByType = new $HashMap();
let itemExceptionsByStage = item.get(key)
// Loop over all registered ingredient types
global.jeiRuntime.getIngredientManager().getRegisteredIngredientTypes().forEach(type => {
let ingredientsPerModID = [];
let ingredients_typed = global.jeiRuntime.ingredientManager.getAllIngredients(type);
// Collect ingredients for mods in the current stage
ingredients_typed.forEach(ingredient => {
let ResourceLocation = global.jeiRuntime.ingredientManager.getIngredientHelper(ingredient).getResourceLocation(ingredient)
let modid = ResourceLocation.getNamespace().toString();
/**
* Check if the modid is in that stage and the itemid is not an exception for that stage.
*/
if (modids.contains(modid) && (!itemExceptionsByStage || !itemExceptionsByStage.contains(ResourceLocation.toString()))) {
/**
* ingredientsPerModID has all Ingredients for one Type and only by the filtered modids
* Structure:
* type -> ingredients
*/
ingredientsPerModID.push(ingredient);
}
...
Paris Lodron University Salzburg
Life Sciences Sector
Freelance / Educational Support
Certified Mechanical Engineering Technician
Sports & Recreation
Passionate about strategy, team coordination, and tactical execution in high-pressure environments. I enjoy analyzing mechanics and optimizing gameplay to perform at a high level.
Dedicated to the physical and mental challenges of climbing. I enjoy applying creative problem-solving to design engaging routes and sharing my knowledge through coaching.