diff --git a/nginx.conf b/nginx.conf index 1a75407..5da91fb 100644 --- a/nginx.conf +++ b/nginx.conf @@ -35,11 +35,13 @@ http { #gzip on; upstream minirt { - server minirt:7080; + # server minirt:7080; + server 127.0.0.1:7080; } upstream minishell { - server minishell:6080; + # server minishell:6080; + server 127.0.0.1:6080; } server { @@ -52,26 +54,32 @@ http { #access_log logs/host.access.log main; location / { + index /en/index.html; + } + + location /en { + try_files $uri $uri/ /index.html; + } + + location /de { try_files $uri $uri/ /index.html; } location /proxy/minishell/ { - add_header Access-Control-Allow-Origin "https://victorvobis.org" always; - add_header Access-Control-Allow-Methods "GET, POST, OPTIONS" always; - add_header Access-Control-Allow-Headers "Content-Type, Authorization" always; + add_header Access-Control-Allow-Origin "https://victorvobis.org" always; + add_header Access-Control-Allow-Methods "GET, POST, OPTIONS" always; + add_header Access-Control-Allow-Headers "Content-Type, Authorization" always; - proxy_buffering off; - proxy_cache off; - proxy_read_timeout 3600s; - proxy_send_timeout 3600s; + proxy_buffering off; + proxy_cache off; + proxy_read_timeout 3600s; + proxy_send_timeout 3600s; - # Disable chunked transfer encoding issues - chunked_transfer_encoding on; + chunked_transfer_encoding on; - # Handle preflight - if ($request_method = OPTIONS) { - return 204; - } + if ($request_method = OPTIONS) { + return 204; + } proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; diff --git a/site/config.js b/site/config.js deleted file mode 100644 index ad7a1c0..0000000 --- a/site/config.js +++ /dev/null @@ -1,3 +0,0 @@ -export const config = { - BASE_URL: 'https://victorvobis.org/' -}; diff --git a/site/css/style.css b/site/css/style.css index 176d9d3..28874b1 100644 --- a/site/css/style.css +++ b/site/css/style.css @@ -50,6 +50,35 @@ h1 { font-weight: 600; } +.nav-bar { + display: flex; + border: 1px solid #00000000; + gap: 0; +} + +.nav-bar a { + background-color: #fff; + padding: .5rem .7rem .5rem .7rem; + color: #000; + transition: all 0.3s; +} + +.nav-bar a.left { + border: 1px solid #00000000; + border-radius: .5rem 0rem 0rem 0.5rem; +} + +.nav-bar a.right { + border: 1px solid #00000000; + border-radius: 0rem .5rem 0.5rem 0rem; +} + +.nav-bar a:hover { + background-color: #000; + color: #fff; +} + + main { max-width: 800px; margin: 0 auto; @@ -70,6 +99,11 @@ h2 { p { margin-bottom: 1rem; + text-wrap: pretty; +} + +.work p.date { + color: #202020a0 } a { @@ -89,8 +123,64 @@ li { margin-bottom: 0.5rem; } +.work { + padding: 0.5rem; +} + +.work:hover { + transition: all 0.3s; +} + +.work h3 { + font-size: 1rem; + font-weight: 600; + margin-bottom: 0.3rem; +} + +.work p { + color: inherit; + font-size: 1rem; +} + +.work p:hover { + font-size: 1rem; +} + +.work li { + font-size: 1rem; +} + +.work a { + color: inherit; + background-color: inherit; + text-decoration: underline; +} + +.work a:hover { + color: inherit; +} + +/* Link wrapper for projects */ +.project-link { + text-decoration: none; + color: inherit; + display: block; + transition: all 0.2s; +} + +.project-link:hover .project { + opacity: 0.8; +} .project { - margin-bottom: 2rem; + padding: 0.5rem; + border: 1px solid #fff; + border-radius: .5rem; +} + +.project:hover { + background-color: #000; + color: #fff; + transition: all 0.3s; } .project h3 { @@ -100,17 +190,23 @@ li { } .project p { - color: #666; + color: inherit; + font-size: 0.95rem; +} + +.project p:hover { + color: #fff; font-size: 0.95rem; } .project a { - color: #333; + color: #fff; + background-color: #000; text-decoration: underline; } .project a:hover { - color: #666; + color: #fff; } /* Link wrapper for projects */ diff --git a/site/de/index.html b/site/de/index.html new file mode 100644 index 0000000..c48fa67 --- /dev/null +++ b/site/de/index.html @@ -0,0 +1,68 @@ + + + + + + + Victor Vobis + + + +
+

Victor Vobis

+

Software Entwickler

+ +
+ +
+
+

Projekte

+ +
+

Minishell

+

Eine einfache Bash-ähnliche Shell, in C von Grund auf gebaut.

+
+
+ +
+

MiniRT

+

Raytracing, eigene Engine, in C

+
+
+
+
+

Arbeit

+
+

Software Engineer @ Jobited

+

12/2024 - 11/2025

+

Entwicklung interner Web App zur Datenpflege von Talenten, Mitarbeitern und Stellenangeboten.

+

Als Lead-Entwickler verantwortlich für Projekt-Management und Implementieren von Features, unter anderem:

+
    +
  • Frontend und REST-API mit SvelteKit
  • +
  • Backend Integration mit PostgreSQL und Supabase
  • +
  • KI-Automatisierte Analyse von Talenten und Stellen mit Anthropic Api
  • +
  • Talent-Stellen Matching-Algorithmus mittels Embeddings Api von VoyageAI
  • +
+
+
+ +
+

Über mich

+

+ Ich schließe demnächst meine Ausbildung bei 42Vienna ab.
+ In den 2 Jahren habe ich gelernt, Projekte von Anfang bis Ende durchzuziehen und alleine oder im Team komplexe Aufgaben zu lösen. + Meine Stärke liegt im programmieren mit System-Level-Sprachen, insbesondere C und Rust, + ausserdem ich habe auch mit High-Level-Sprachen wie Python, Typescript/Javascript und Go Erfahrungen gesammelt. + Ich lege viel Wert auf Einfachheit und Funktionalität, das bedeutet mit einfachen Mitteln und Werkzeugen komplexe Systeme zu bauen.
+

+
+
+ + diff --git a/site/de/minirt.html b/site/de/minirt.html new file mode 100644 index 0000000..916027d --- /dev/null +++ b/site/de/minirt.html @@ -0,0 +1,102 @@ + + + + + + MiniRT - Raytracer + + + +
+

MiniRT - Der Raytracer

+ +
+ +
+
+

Der Raytracer

+

+ Raytracing Engine. Von Grund auf. In C. Demo unten +

+

+ Das Projekt, das ich vorstellen möchte, ist miniRT (Mini-Raytracer). Wie die Shell war dies Teil des 42-Curriculums und wurde unter denselben Regeln und Einschränkungen wie das vorherige Projekt umgesetzt. +

+ +

+ Der Quellcode für dieses Projekt ist hier verfügbar. +

+ +

+ Diesmal bestand die Aufgabe darin, einen einfachen Raytracer von Grund auf zu erstellen, mit einem eigenen Wrapper um die Linux-X11-API für einfache Fenstererstellung und I/O. +

+ +

+ Ein Raytracer ist ein Programm, das eine Technik namens Raytracing verwendet, die genutzt wird, um realistische Bilder digital zu erzeugen. Raytracing bedeutet im Wesentlichen, dass wir das Betrachten einer Szene aus unserer „Augenposition" simulieren und den Computerbildschirm wie ein Fenster benutzen, durch das wir auf diese Szene schauen. +

+ +

+ Wir stellen uns vor, einen perfekt geraden „Strahl" von unserem „Auge" durch jeden Pixel des Bildschirms zu schießen und den Pfad dieses Strahls zu verfolgen, um zu sehen, ob er ein Objekt schneidet. Wenn ja, wissen wir, dass dieser bestimmte Pixel die Farbe des getroffenen Objekts anzeigen soll. Mit etwas Mathematik für Beleuchtung, Schatten anderer Objekte, Entfernung und mehr können wir eine endgültige Farbe für jeden Pixel bestimmen und damit ein bemerkenswert realistisches Bild unserer Szene erzeugen. +

+ +

+ Ueber die grundlegende Bilderzeugung hinaus haben wir zusätzliche Funktionen hinzugefügt, die nicht von der Aufgabe verlangt wurden, aber interessant genug schienen, um sie selbst zu erlernen und umzusetzen. Einige der zusätzlichen Funktionen sind: +

+ + + +

+ Dieses Projekt war eine Teamarbeit, und mein Teampartner Benjámin Szilas hat viele Funktionen implementiert, die für das Projekt essentiell waren. Er ist für viele der Tracing-Funktionen verantwortlich und hat Funktionen wie Schatten, Spiegel, Phong-Reflektion, mehrere Lichtquellen, Anti-Aliasing und vieles mehr implementiert. +

+ +

+ Ich bin in unserem Projekt verantwortlich fuer viele I/O (input/output) bezogene Features z.B. Maus und Tastatur input, Datei Parsing, der eigene Datei Explorer, das gesammte Bedieneroberflaechen Konzept wie Menus, Knoepfe, Ordner-Navigation, Text-Rendering und das Live-Laden von Scenen und Texturen. Ausserdem habe ich auch einige Features wie Texturen und Bumpmaps sowie das Schachbrett Muster und mehr implementiert. +

+ +

+ Ich hatte viel Spaß mit diesem Projekt und habe viel über grafische Programmierung, Teamarbeit und (etwas) Mathematik gelernt! +

+ +

+ Als abschließende Anmerkung: Seit wir das Projekt abgeschlossen haben, wollte ich es hier vorstellen, und so habe ich die Rendering-Schicht neu implementiert, um Raylib zu verwenden, da dies passender erschien. +

+ +

+ Ich habe unten eine Live-Version bereitgestellt. Probier sie gerne aus! +

+ +

+ Es gibt zwei Möglichkeiten, die App auszuführen: entweder direkt im Browser als WASM (WebAssembly) Programm oder über eine live noVNC-Verbindung zu einer Instanz, die auf dem Server läuft. +

+

+ Der Raytracer selbst ist multithreaded, aber da JS/WASM auf einem einzigen Thread läuft, ist die WASM-Version sehr langsam. Ich habe die Auflösung für diese Version verringert, damit sie nicht mit -5 FPS läuft. +

+ +

+ Vielen Dank an noVNC und Raylib für die Web-Integration. Ihre Arbeit ist wirklich toll! +

+ +

Demo

+ +
+
+ + diff --git a/site/de/minishell.html b/site/de/minishell.html new file mode 100644 index 0000000..45ee884 --- /dev/null +++ b/site/de/minishell.html @@ -0,0 +1,95 @@ + + + + + + + + + +
+

Minishell - Die Shell

+ +
+
+
+

Die Shell

+

+ Bash-ähnliche Shell. Von Grund auf. In C. Demo unten +

+
+

+ Das Minishell-Projekt ist Teil des Common-Core-Curriculums bei + 42Vienna und + gilt als Meilenstein und einer der größten Sprünge in der Komplexität auf dem Weg zur Fertigstellung des Cursus. +

+

+ Die Regeln sind einfach: Erstelle ein Programm, das grundlegendes Shell-Verhalten repliziert, wie es typischerweise auf POSIX-Systemen zu finden ist. +

+

+ Einige der Anforderungen sind: +

+
    +
  • Eigene readline-Funktion
  • +
  • Kommandozeilen-Parsing
  • +
  • I/O-Schleife zur Annahme kontinuierlicher Befehle
  • +
  • Befehlsausführung
  • +
  • Dateideskriptor-Umleitung
  • +
  • Pipe-Operatoren
  • +
  • Umgebungsvariablen
  • +
  • Eingebaute Funktionen (cd, export, exit usw.)
  • +
  • Heredoc
  • +
  • Logisches UND ( && )
  • +
  • Logisches ODER ( || )
  • +
  • und mehr...
  • +
+

+ Das Programm muss in C geschrieben werden, wir arbeiten auf GNU/Linux-Maschinen. +

+

+ Wir müssen außerdem einer sehr strengen Norm folgen, über die du + hier mehr lesen kannst. +

+

+ Was die 42-Projekte meiner Meinung nach auszeichnet, ist, dass die verwendeten Werkzeuge sehr eingeschränkt sind – im Wesentlichen sind nur Syscalls zur Kommunikation mit dem Kernel, einige Hilfsfunktionen und Speicherfunktionen erlaubt, und in diesem Fall war die Verwendung von printf erlaubt, was normalerweise verboten ist. + Das bedeutet, dass alle Hilfsfunktionen von Hand implementiert werden müssen und der gesamte relevante Code von den Projektautoren geschrieben wird. +

+

+ Wir durften die in Bash verwendete readline-Funktion zur Verarbeitung von Benutzereingaben verwenden. + Da Speicherlecks jeglicher Art beim Validieren eines Projekts als nicht behebbarer Fehler gelten und die readline-Funktion unweigerlich Speicher lecken würde, wurden diese Leaks von den Projektanforderungen ausdrücklich toleriert. +

+

+ Aber aus Neugier habe ich beschlossen, die readline-Funktion nachzubauen, die Abhängigkeit und die Leaks aus unserem Projekt zu entfernen und dabei viel zu lernen. + Meiner Meinung nach ist dies einer der interessanteren Teile unserer Implementierung, und ich habe es sehr genossen! +

+

+ Dieses Projekt war eine Teamarbeit, und großer Dank gilt meinem Teampartner und guten Freund,
+ Andrej Arama! +

+ +

+ Der Quellcode des Projekts ist auf meinem + Git-Server zu finden und + ich habe auch eine Live-Version der Shell unten bereitgestellt.
+

+

+ Dank und vielen Dank an + ttyd + für die Web-Integration!
+ Viel Spaß! +

+

Demo

+
+ +
+
+
+
+ + diff --git a/site/en/index.html b/site/en/index.html new file mode 100644 index 0000000..87ed453 --- /dev/null +++ b/site/en/index.html @@ -0,0 +1,68 @@ + + + + + + + Victor Vobis + + + +
+

Victor Vobis

+

Software Developer

+ +
+ +
+
+

Projects

+ +
+

Minishell

+

A simple Bash-like shell built from scratch in C.

+
+
+ +
+

MiniRT

+

Raytracing, custom engine, in C

+
+
+
+
+

Work

+
+

Software Engineer @ Jobited

+

12/2024 - 11/2025

+

Development of an internal web app for managing talent, employee and job listing data.

+

As lead developer responsible for project management and implementing features, including:

+
    +
  • Frontend and REST API with SvelteKit
  • +
  • Backend integration with PostgreSQL and Supabase
  • +
  • AI-automated analysis of talents and job listings with Anthropic API
  • +
  • Talent-job matching algorithm using the embeddings API from VoyageAI
  • +
+
+
+ +
+

About

+

+ I'm finishing up my training at 42Vienna.
+ Over the past 2 years I've learned to take projects from start to finish and solve complex problems on my own or in a team. + My strength is in programming with system-level languages, especially C and Rust, + but I've also gained experience with higher-level languages like Python, TypeScript/JavaScript and Go. + I care a lot about simplicity and functionality — building complex systems with simple tools and approaches.
+

+
+
+ + diff --git a/site/minirt.html b/site/en/minirt.html similarity index 61% rename from site/minirt.html rename to site/en/minirt.html index 76826de..de3c6f1 100644 --- a/site/minirt.html +++ b/site/en/minirt.html @@ -1,26 +1,31 @@ - - - - MiniRT - Raytracer - - - + + + + MiniRT - Raytracer + + +

MiniRT - The Raytracer

+

The Raytracer

+

+ Raytracing Engine. From Scratch. In C. Demo Below +

- The next project I want to showcase is the miniRT (mini-raytracer). Like the shell, this was part of the 42 curriculum, and was achieved within the same rules and constraints as the previous project. + The project I want to showcase is the miniRT (mini-raytracer). Like the shell, this was part of the 42 curriculum, and was built under the same rules and constraints as the previous project.

@@ -47,7 +52,8 @@

  • Multithreaded
  • Textures and Bumpmaps
  • Dynamic Scene/Texture/Bumpmap loading
  • -
  • Menus with buttons and sliders
  • +
  • Custom font with text rendering functionality
  • +
  • Custom SDK to create Menus with buttons and sliders
  • Simple File-Explorer to load resources at runtime
  • Different Reflection Models
  • Objects as Perfect Mirrors
  • @@ -55,7 +61,11 @@

    - This project was again a team effort, and my teammate Benjámin Szilas implemented a lot of functionality and features which were essential to the project. He is responsible for a lot of the tracing functions, and implemented features like shadows, mirrors, phong-reflection, multiple lights, anti-aliasing and much more. + This was a team project, and my teammate Benjámin Szilas implemented a lot of features that were essential to the project. He is responsible for a lot of the tracing functions, and implemented things like shadows, mirrors, Phong reflection, multiple lights, anti-aliasing and much more. +

    + +

    + In our project, I was responsible for many I/O (input/output) related features, like mouse and keyboard input, file parsing, the custom file explorer, the whole UI concept including menus, buttons, folder navigation, text rendering, and live loading of scenes and textures. I also implemented features like textures and bump maps, the checkerboard pattern, and more.

    @@ -71,20 +81,22 @@

    - There are two ways to run the app: either directly in your browser with the WASM compiled program, or over a live noVNC connection to a running instance on the server. The connection to the VNC server will automatically be closed after 60 seconds in order to save resources. + There are two ways to run the app: either directly in your browser as a WASM (WebAssembly) program, or over a live noVNC connection to an instance running on the server.

    -

    The raytracer itself is multithreaded, but since JS/WASM runs on a single thread, the WASM version is very slow. I scaled down the resolution for that version in order to have it not run at -5 FPS. +

    + The raytracer itself is multithreaded, but since JS/WASM runs on a single thread, the WASM version is very slow. I scaled down the resolution for that version in order to have it not run at -5 FPS.

    - Credits go to noVNC and Raylib for providing the web integration. Their stuff is really great! + Thanks to noVNC and Raylib for the web integration. Their stuff is really great!

    +

    Demo

    - + diff --git a/site/en/minishell.html b/site/en/minishell.html new file mode 100644 index 0000000..cf160a5 --- /dev/null +++ b/site/en/minishell.html @@ -0,0 +1,99 @@ + + + + + + + + + +
    +

    Minishell - The Shell

    + +
    +
    +
    +

    The Shell

    +

    + Bash-like Shell. From Scratch. In C. Demo Below +

    +
    +

    + The minishell project is part of the common core curriculum at + 42Vienna and + is seen as a milestone and one of the biggest jumps in complexity on the way to completing the cursus. +

    +

    + The rules are simple: Create a program that will replicate basic shell behaviour like typically found on POSIX systems. +

    +

    + Some of the requirements are: +

    +
      +
    • Custom readline function
    • +
    • Command line parsing
    • +
    • I/O loop to accept continuous commands
    • +
    • Command execution
    • +
    • File Descriptor redirection
    • +
    • Pipe Operators
    • +
    • Environment Variables
    • +
    • Builtin functions (cd, export, exit etc.)
    • +
    • Heredoc
    • +
    • Logical AND ( && )
    • +
    • Logical OR ( || )
    • +
    • and more...
    • +
    +

    + The program has to be written in C, we are working on GNU/Linux machines. +

    +

    + We are also required to follow a very strict norm on which you can read more + here. +

    +

    + What makes the 42 projects stand out in my opinion is that the tools we use are very restricted — essentially only + syscalls to interface with the kernel, some utility functions and memory functions, and in this case we were allowed to use + printf, which is normally forbidden. + This means that all utility has to be implemented by hand, and all relevant code will be written by the project's authors. +

    +

    + We were allowed to use the readline function used in bash to handle user input. + Since memory leaks of any kind are considered an unrecoverable mistake when validating a project, and the readline function would + inevitably leak memory, those leaks were explicitly tolerated by the project's requirements. +

    +

    + But, out of curiosity, I decided to recreate the readline function, removing the dependency and leaks from our project, + and learning a lot along the way. + In my opinion, this is one of the more interesting parts of our implementation, and I very much enjoyed it! +

    +

    + This project was a team effort, and big thanks go out to my team partner and good friend,
    + Andrej Arama! +

    + +

    + The source code for the project can be seen on my + git server and + I have also provided a live version of the shell below.
    +

    +

    + Many thanks to + ttyd + for the web integration!
    + Have fun! +

    +

    Demo

    +
    + +
    +
    +
    +
    + + diff --git a/site/index.html b/site/index.html deleted file mode 100644 index b3cb060..0000000 --- a/site/index.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - Victor Vobis - - -
    -

    Victor Vobis

    -

    Developer

    - -
    - -
    -
    -

    Projects

    - -
    -

    Minishell

    -

    A simple ash-like shell build from scratch in C.

    -
    -
    - -
    -

    MiniRT

    -

    Raytracer, written in C, originally using libmlx (X11-wrapper) rewritten using Raylib.

    -
    -
    -
    - -
    -

    About

    -

    -
    -
    - - diff --git a/site/minishell.html b/site/minishell.html deleted file mode 100644 index e5cfcee..0000000 --- a/site/minishell.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - - - -
    -

    Minishell - The Shell

    - -
    -
    -
    -
    -

    The Shell

    -
    -

    - The minishell project is part of the common core curriculum at - 42Vienna and - is seen as a milestone and one of the biggest jumps in complexity on the way to completing the cursus. -

    -

    - The rules are simple: Create a program that will replicate basic shell behaviour like typically found on posix systems. -

    -

    - Some of the requirements are: -

    -
      -
    • Command line parsing
    • -
    • I/O loop to accept continuous commands
    • -
    • Command execution
    • -
    • File Descriptor redirection
    • -
    • Pipe Operators
    • -
    • Environment Variables
    • -
    • Builtin functions (cd, export, exit etc.)
    • -
    • Heredoc
    • -
    • Logical AND ( && )
    • -
    • Logical OR ( || )
    • -
    • and more...
    • -
    -

    - The program has to be written in C, we are working on GNU/Linux machines. -

    -

    - We are also required to follow a very strict norm on which you can read more - here. -

    -

    - What makes the 42 projects stand out in my opinon is that the tools we use are very restricted, essentially only allowing - syscalls to interface with the kernel, some utility functions and memory functions, and in this case we were allowed to use - printf, which is normally forbidden. - This means that all utilty has to be implemented by hand, and all relevant code will be written by the projects authors. -

    -

    - We also could use the readline function used in bash to handle the input of the user.
    - Since memory leaks of any kind are considered an unrecoverable mistake when validating a project, and the readline function would - inevitably leak memory, those leaks were explicitly tolerated by the projects requirements. -

    -

    - But, out of cursiousity, we decided to recreate the readline function, removing the dependency and leaks from our project, - and learning a lot along the way.
    - In my opinion, this is one of the more interesting parts of our implementation, and I very much enjoyed it! -

    -

    - This project was a team effort, and big thanks go out to my team partner
    and good friend, - Andrej Arama! -

    - -

    - The source code for the project can be seen on my - git server and - I have also provided a live version of the shell found below.
    - Please keep in mind, this is barely a prototype, and serves more as a proof of concept, than a fully implemented shell. -

    -

    - Credits and many thanks to - ttyd - for providing the web integeration!
    - Have fun! -

    -
    - -
    -
    -
    -
    -
    - - diff --git a/site/minishell.js b/site/minishell.js deleted file mode 100644 index ca7ee51..0000000 --- a/site/minishell.js +++ /dev/null @@ -1,19 +0,0 @@ -import { config } from '/config.js'; - -const shell_button = document.getElementById('shell-start-button'); -shell_button.addEventListener('click', function() { - const shell_container = document.getElementById('shell-container'); - const shell_frame = document.createElement('iframe'); - shell_frame.id = 'minishell-iframe'; - shell_frame.height = '600'; - shell_frame.width = '800'; - shell_frame.src = config.BASE_URL + 'minishell/vnc'; - shell_container.appendChild(shell_frame); - shell_button.style = 'display: none'; -}); - -const next_project_a = document.getElementById('next-project-a'); -next_project_a.addEventListener('click', function() { - const shell_frame = document.getElementById('minishell-iframe'); - shell_frame.remove(); -}); diff --git a/site/tailwind.config.js b/site/tailwind.config.js deleted file mode 100644 index 4aea311..0000000 --- a/site/tailwind.config.js +++ /dev/null @@ -1,9 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: ["./html/*.html"], - theme: { - extend: {}, - }, - plugins: [], -} -