Hier gibt es Informationen zu meinen Projekten
Informatikstudent
Responsive Website mit HTML, CSS, JavaScript, PHP & SEO.
Spielentwicklung in UE5.6 & C++.
Einrichtung, Hardening & Wartung unter Ubuntu.
Fokus auf zugängliches UI und Performance. Die Oberfläche setzt auf semantisches HTML5, modernes CSS (Flexbox/Grid) und Vanilla JavaScript ohne schwere Frameworks.
Serverseitige Aspekte (z. B. HTTPS/Hardening, Admin-API) dokumentiere ich getrennt im Projekt „Ubuntu vServer“.
Framework-freies Frontend mit klarer Schichtentrennung: HTML (Struktur), CSS (Layout), JavaScript (Interaktion).
Chat-UI mit Eingabe und Verlauf. Anfragen per Fetch an chat_proxy.php
→ lokales LLM (Ollama, qwen2:0.5b).
Keine externen APIs, volle Kontrolle
Formular mit Google reCAPTCHA gesichert gegen Spam, Token-Nutzung. Formular aktuell deaktiviert („nicht verfügbar“-Overlay).
aria-labels
& alt
-Texte für Bilder.sitemap.xml
& robots.txt
vorhanden.defer
-Scripts, moderne CSS-Techniken.alt
-Texten für Suche & Barrierefreiheit.Unreal Engine 5.6 Beispielprojekt: Umsetzung eines sichtbaren Schusses per Line Trace, sowohl mittels Blueprint als auch in C++. Ziel ist es, unabhängig von Spiellogik oder Gameplay-Mechaniken eine robuste Grundlage für Treffererkennung und Debug-Visualisierung zu schaffen.
OnFire()
mit LineTraceSingleByChannel
, Debug-Ausgabe und On-Screen-Meldungen.Visibility = Block
haben, eigener Charakter wird ignoriert.Dieses Beispiel zeigt, wie man in UE5 mit Blueprints und C++ arbeitet, um Schussmechaniken technisch korrekt umzusetzen.
Eine nachvollziehbare, sofort sichtbare Schuss-Simulation: Beim Drücken der Fire-Taste feuert die Kamera einen Line Trace ab, der per Debug-Linie und -Sphäre visualisiert wird und den getroffenen Actor/Component als Text ausgibt.
Fire
(z. B. linke Maustaste).InputAction Fire (Pressed)
.Start = FirstPersonCamera.GetWorldLocation()
End = Start + FirstPersonCamera.GetForwardVector() * 15000.0
(Reichweite nach Bedarf).Visibility
, Ignore Self aktivieren, optional Debug Type = For Duration.Objekt | Einstellung |
---|---|
Treffbare Zielobjekte | Collision Enabled = Query Only , Response to Visibility = Block |
Eigener Charakter | Ignore Self aktivieren, damit kein Treffer am eigenen Pawn ausgelöst wird |
Die gleiche Funktionalität in C++ implementiert: Line Trace von der Kamera, Debug-Visualisierung, On-Screen-Feedback.
YourCharacter.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "Camera/CameraComponent.h"
#include "YourCharacter.generated.h"
UCLASS()
class YOURMODULE_API AYourCharacter : public ACharacter
{
GENERATED_BODY()
public:
AYourCharacter();
protected:
virtual void SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) override;
UFUNCTION() void OnFire();
UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
UCameraComponent* FirstPersonCamera = nullptr;
UPROPERTY(EditAnywhere, Category="Shooting")
float TraceRange = 15000.f;
UPROPERTY(EditAnywhere, Category="Shooting")
TEnumAsByte<ECollisionChannel> TraceChannel = ECC_Visibility;
};
YourCharacter.cpp
#include "YourCharacter.h"
#include "DrawDebugHelpers.h"
#include "Engine/Engine.h"
AYourCharacter::AYourCharacter()
{
FirstPersonCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("FirstPersonCamera"));
FirstPersonCamera->SetupAttachment(GetCapsuleComponent());
FirstPersonCamera->bUsePawnControlRotation = true;
}
void AYourCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
PlayerInputComponent->BindAction("Fire", IE_Pressed, this, &AYourCharacter::OnFire);
}
void AYourCharacter::OnFire()
{
if (!FirstPersonCamera) return;
UWorld* World = GetWorld();
if (!World) return;
const FVector Start = FirstPersonCamera->GetComponentLocation();
const FVector End = Start + FirstPersonCamera->GetForwardVector() * TraceRange;
FHitResult Hit;
FCollisionQueryParams Params(SCENE_QUERY_STAT(ShootTrace), false);
Params.AddIgnoredActor(this);
const bool bHit = World->LineTraceSingleByChannel(Hit, Start, End, TraceChannel, Params);
#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
DrawDebugLine(World, Start, End, FColor::Green, false, 1.0f, 0, 1.5f);
#endif
if (bHit)
{
#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
DrawDebugSphere(World, Hit.ImpactPoint, 10.f, 12, FColor::Cyan, false, 1.0f);
#endif
if (GEngine)
{
const FString Msg = FString::Printf(TEXT("Hit: %s / %s"),
*GetNameSafe(Hit.GetActor()), *GetNameSafe(Hit.Component.Get()));
GEngine->AddOnScreenDebugMessage(INDEX_NONE, 1.5f, FColor::Yellow, Msg);
}
}
}
Visibility
bereits stark genutzt wird.Ubuntu vServer als Basis der Website – eingerichtet, gehärtet und optimiert.
Ergebnis: stabiler, sicherer und modularer Server für produktive Websites.
Ubuntu 22.04 LTS, minimale Installation.
Domain philippkahle.com
& www
→ vServer-IP.
Sitemap & robots.txt erstellt, Google Search Console verifiziert.
philippkahle
, deploy
.ufw limit
./var/log/auth.log
, /var/log/nginx/*
.data/users.json
.seed_admin.php
.data/site.json
.site_public.php
.data/
per nginx gesperrt.HTML/CSS-Frontend, dynamisch hydrierbar. Projektkarten & Overlays mit Tabs Überblick/Bilder/Details.
Ollama lokal, Modell qwen2:0.5b
.
Anbindung über chat_proxy.php
.
Persona: „Philipp Kahle, Informatikstudent in Hannover“.
Website-Inhalte als Kontext, History-Trim aktiv.
robots.txt
: Admin-Bereich blockiert.sitemap.xml
: IDs & Pfade korrigiert.Der vServer ist stabil, sicher und modular: nginx + HTTPS, Security-Header, UFW, Fail2Ban, sicheres Login-System, JSON-CMS, lokale KI.