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.