adjusted html, added de version

This commit is contained in:
Victor Vobis 2026-02-24 10:14:28 +01:00
parent 597f047c40
commit ed4d6f49a9
13 changed files with 582 additions and 205 deletions

View File

@ -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,6 +54,14 @@ 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;
}
@ -65,10 +75,8 @@ http {
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
# Disable chunked transfer encoding issues
chunked_transfer_encoding on;
# Handle preflight
if ($request_method = OPTIONS) {
return 204;
}

View File

@ -1,3 +0,0 @@
export const config = {
BASE_URL: 'https://victorvobis.org/'
};

View File

@ -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 */

68
site/de/index.html Normal file
View File

@ -0,0 +1,68 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/css/style.css">
<title>Victor Vobis</title>
</head>
<body>
<header>
<h1>Victor Vobis</h1>
<p class="subtitle">Software Entwickler</p>
<nav class="nav-bar">
<a class="left" href="#projects">Projekte</a>
<a href="#work">Arbeit</a>
<a href="#about">Über mich</a>
<a href="mailto:victor@victorvobis.org">Email</a>
<a href="https://git.victorvobis.org/victorvobis" target="_blank">Git</a>
<a class="right" href="/en">English</a>
</nav>
</header>
<main>
<section id="projects">
<h2>Projekte</h2>
<a class="project-link" href="/de/minishell.html">
<div class="project">
<h3>Minishell</h3>
<p>Eine einfache Bash-ähnliche Shell, in C von Grund auf gebaut.</p>
</div>
</a>
<a class="project-link" href="/de/minirt.html">
<div class="project">
<h3>MiniRT</h3>
<p>Raytracing, eigene Engine, in C</p>
</div>
</a>
</section>
<section id="work">
<h2>Arbeit</h2>
<div class="work">
<h3>Software Engineer @ Jobited</h3>
<p class="date">12/2024 - 11/2025</p>
<p>Entwicklung interner Web App zur Datenpflege von Talenten, Mitarbeitern und Stellenangeboten.</p>
<p>Als Lead-Entwickler verantwortlich für Projekt-Management und Implementieren von Features, unter anderem:</p>
<ul>
<li>Frontend und REST-API mit SvelteKit</li>
<li>Backend Integration mit PostgreSQL und Supabase</li>
<li>KI-Automatisierte Analyse von Talenten und Stellen mit <a href="https://anthropic.com">Anthropic Api</a></li>
<li>Talent-Stellen Matching-Algorithmus mittels Embeddings Api von <a href="https://voyageai.com">VoyageAI</a></li>
</ul>
</div>
</section>
<section id="about">
<h2>Über mich</h2>
<p>
Ich schließe demnächst meine Ausbildung bei <a href="https://42vienna.at">42Vienna</a> ab.<br>
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,<wbr> insbesondere <b>C und Rust</b>,
ausserdem ich habe auch mit High-Level-Sprachen wie <b>Python, Typescript/Javascript und Go</b> Erfahrungen gesammelt.
Ich lege viel Wert auf Einfachheit und Funktionalität, das bedeutet mit einfachen Mitteln und Werkzeugen komplexe Systeme zu bauen.<br/>
</p>
</section>
</main>
</body>
</html>

102
site/de/minirt.html Normal file
View File

@ -0,0 +1,102 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MiniRT - Raytracer</title>
<link href="/css/style.css" rel="stylesheet">
</head>
<body>
<header>
<h1>MiniRT - Der Raytracer</h1>
<nav>
<a href="/de">Start</a>
<a href="mailto:victor@victorvobis.org">Email</a>
<a href="https://git.victorvobis.org/victorvobis" target="_blank">Git</a>
<a href="https://git.victorvobis.org/victorvobis/miniRT" target="_blank">Quellcode</a>
<a href="/en">English</a>
</nav>
</header>
<main>
<section class="content">
<h2>Der Raytracer</h2>
<p style="font-weight: bold;">
Raytracing Engine. Von Grund auf. In C. <a href="#demo">Demo unten</a>
</p>
<p>
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.
</p>
<p>
Der Quellcode für dieses Projekt ist <a href="https://git.victorvobis.org/victorvobis/miniRT.git">hier</a> verfügbar.
</p>
<p>
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.
</p>
<p>
Ein Raytracer ist ein Programm, das eine Technik namens <a href="https://en.wikipedia.org/wiki/Ray_tracing_(graphics)">Raytracing</a> 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.
</p>
<p>
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.
</p>
<p>
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:
</p>
<ul>
<li>Multithreaded</li>
<li>Texturen und Bumpmaps</li>
<li>Dynamisches Laden von Szenen/Texturen/Bumpmaps</li>
<li>Eigene Schriftart mit Textrenderingfunktion</li>
<li>Eigenes SDK zur Erstellung von Menüs mit Schaltflächen und Schiebereglern</li>
<li>Einfacher Datei-Explorer zum Laden von Ressourcen zur Laufzeit</li>
<li>Verschiedene Reflexionsmodelle</li>
<li>Objekte als perfekte Spiegel</li>
<li>Skybox</li>
</ul>
<p>
Dieses Projekt war eine Teamarbeit, und mein Teampartner <a href="https://github.com/benszilas">Benjámin Szilas</a> 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.
</p>
<p>
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.
</p>
<p>
Ich hatte viel Spaß mit diesem Projekt und habe viel über grafische Programmierung, Teamarbeit und (etwas) Mathematik gelernt!
</p>
<p>
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 <a href="https://github.com/raysan5/raylib">Raylib</a> zu verwenden, da dies passender erschien.
</p>
<p>
Ich habe unten eine Live-Version bereitgestellt. Probier sie gerne aus!
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
Vielen Dank an <a href="https://github.com/novnc/noVNC">noVNC</a> und <a href="https://github.com/raysan5/raylib">Raylib</a> für die Web-Integration. Ihre Arbeit ist wirklich toll!
</p>
<h2 id="demo">Demo</h2>
<div class="button-group">
<a href="/service/minirt/wasm/miniRT.html" target="_blank" class="button">WASM Version (Raylib)</a>
<a href="/proxy/minirt/vnc_lite.html?path=proxy/minirt/websockify&scale=resize" target="_blank" class="button">VNC Version (noVNC)</a>
</div>
</section>
</main>
</body>
</html>

95
site/de/minishell.html Normal file
View File

@ -0,0 +1,95 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
<link href="/css/style.css" rel="stylesheet">
</head>
<body>
<header>
<h1>Minishell - Die Shell</h1>
<nav>
<a href="/de">Start</a>
<a href="mailto:victor@victorvobis.org">Email</a>
<a href="https://git.victorvobis.org/victorvobis" target="_blank">Git</a>
<a href="https://git.victorvobis.org/victorvobis/minishell" target="_blank">Quellcode</a>
<a href="/en">English</a>
</nav>
</header>
<main>
<section class="content">
<h2>Die Shell</h2>
<p style="font-weight: bold;">
Bash-ähnliche Shell. Von Grund auf. In C. <a href="#demo">Demo unten</a>
</p>
<div class="space-y-2">
<p>
Das Minishell-Projekt ist Teil des Common-Core-Curriculums bei
<a class="underline text-blue-700 hover:text-blue-900" href="https://42vienna.com">42Vienna</a> und
gilt als Meilenstein und einer der größten Sprünge in der Komplexität auf dem Weg zur Fertigstellung des Cursus.
</p>
<p>
Die Regeln sind einfach: Erstelle ein Programm, das grundlegendes Shell-Verhalten repliziert, wie es typischerweise auf POSIX-Systemen zu finden ist.
</p>
<p>
Einige der Anforderungen sind:
</p>
<ul>
<li>Eigene <a href="https://github.com/gnu-mirror-unofficial/readline">readline</a>-Funktion</li>
<li>Kommandozeilen-Parsing</li>
<li>I/O-Schleife zur Annahme kontinuierlicher Befehle</li>
<li>Befehlsausführung</li>
<li>Dateideskriptor-Umleitung</li>
<li>Pipe-Operatoren</li>
<li>Umgebungsvariablen</li>
<li>Eingebaute Funktionen (cd, export, exit usw.)</li>
<li>Heredoc</li>
<li>Logisches UND ( && )</li>
<li>Logisches ODER ( || )</li>
<li>und mehr...</li>
</ul>
<p>
Das Programm muss in C geschrieben werden, wir arbeiten auf GNU/Linux-Maschinen.
</p>
<p>
Wir müssen außerdem einer sehr strengen Norm folgen, über die du
<a href="/assets/42-norm.pdf">hier</a> mehr lesen kannst.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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!
</p>
<p>
Dieses Projekt war eine Teamarbeit, und großer Dank gilt meinem Teampartner und guten Freund,<br/>
<a href="https://github.com/zekmaro">Andrej Arama</a>!
</p>
<p>
Der Quellcode des Projekts ist auf meinem
<a href="https://git.victorvobis.org/victorvobis/minishell">Git-Server</a> zu finden und
ich habe auch eine Live-Version der Shell unten bereitgestellt.<br/>
</p>
<p>
Dank und vielen Dank an
<a href="https://github.com/tsl0922/ttyd">ttyd</a>
für die Web-Integration!<br/>
Viel Spaß!
</p>
<h2 id="demo">Demo</h2>
<div id="shell-container" style="height: 400px;">
<iframe sandbox="allow-same-origin allow-scripts" src="/proxy/minishell/" style="width: 100%; height: 100%; border: none; display: block;"></iframe>
</div>
</div>
</section>
</main>
</body>
</html>

68
site/en/index.html Normal file
View File

@ -0,0 +1,68 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/css/style.css">
<title>Victor Vobis</title>
</head>
<body>
<header>
<h1>Victor Vobis</h1>
<p class="subtitle">Software Developer</p>
<nav class="nav-bar">
<a class="left" href="#projects">Projects</a>
<a href="#work">Work</a>
<a href="#about">About</a>
<a href="mailto:victor@victorvobis.org">Email</a>
<a href="https://git.victorvobis.org/victorvobis" target="_blank">Git</a>
<a class="right" href="/de">Deutsch</a>
</nav>
</header>
<main>
<section id="projects">
<h2>Projects</h2>
<a class="project-link" href="/en/minishell.html">
<div class="project">
<h3>Minishell</h3>
<p>A simple Bash-like shell built from scratch in C.</p>
</div>
</a>
<a class="project-link" href="/en/minirt.html">
<div class="project">
<h3>MiniRT</h3>
<p>Raytracing, custom engine, in C</p>
</div>
</a>
</section>
<section id="work">
<h2>Work</h2>
<div class="work">
<h3>Software Engineer @ Jobited</h3>
<p>12/2024 - 11/2025</p>
<p>Development of an internal web app for managing talent, employee and job listing data.</p>
<p>As lead developer responsible for project management and implementing features, including:</p>
<ul>
<li>Frontend and REST API with SvelteKit</li>
<li>Backend integration with PostgreSQL and Supabase</li>
<li>AI-automated analysis of talents and job listings with <a href="https://anthropic.com">Anthropic API</a></li>
<li>Talent-job matching algorithm using the embeddings API from <a href="https://voyageai.com">VoyageAI</a></li>
</ul>
</div>
</section>
<section id="about">
<h2>About</h2>
<p>
I'm finishing up my training at <a href="https://42vienna.at">42Vienna</a>.<br>
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 <b>C and Rust</b>,
but I've also gained experience with higher-level languages like <b>Python, TypeScript/JavaScript and Go</b>.
I care a lot about simplicity and functionality — building complex systems with simple tools and approaches.<br/>
</p>
</section>
</main>
</body>
</html>

View File

@ -1,26 +1,31 @@
<!DOCTYPE html>
<html lang="en">
<head>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MiniRT - Raytracer</title>
<link href="/css/style.css" rel="stylesheet">
</head>
<body>
</head>
<body>
<header>
<h1>MiniRT - The Raytracer</h1>
<nav>
<a href="/">Home</a>
<a href="/en">Home</a>
<a href="mailto:victor@victorvobis.org">Email</a>
<a href="https://git.victorvobis.org/victorvobis" target="_blank">Git</a>
<a href="https://git.victorvobis.org/victorvobis/miniRT" target="_blank">Source</a>
<a href="/de">Deutsch</a>
</nav>
</header>
<main>
<section class="content">
<h2>The Raytracer</h2>
<p style="font-weight: bold;">
Raytracing Engine. From Scratch. In C. <a href="#demo">Demo Below</a>
</p>
<p>
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.
</p>
<p>
@ -47,7 +52,8 @@
<li>Multithreaded</li>
<li>Textures and Bumpmaps</li>
<li>Dynamic Scene/Texture/Bumpmap loading</li>
<li>Menus with buttons and sliders</li>
<li>Custom font with text rendering functionality</li>
<li>Custom SDK to create Menus with buttons and sliders</li>
<li>Simple File-Explorer to load resources at runtime</li>
<li>Different Reflection Models</li>
<li>Objects as Perfect Mirrors</li>
@ -55,7 +61,11 @@
</ul>
<p>
This project was again a team effort, and my teammate <a href="https://github.com/benszilas">Benjámin Szilas</a> 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 <a href="https://github.com/benszilas">Benjámin Szilas</a> 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.
</p>
<p>
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.
</p>
<p>
@ -71,20 +81,22 @@
</p>
<p>
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.
</p>
<p>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.
<p>
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.
</p>
<p>
Credits go to <a href="https://github.com/novnc/noVNC">noVNC</a> and <a href="https://github.com/raysan5/raylib">Raylib</a> for providing the web integration. Their stuff is really great!
Thanks to <a href="https://github.com/novnc/noVNC">noVNC</a> and <a href="https://github.com/raysan5/raylib">Raylib</a> for the web integration. Their stuff is really great!
</p>
<h2 id="demo">Demo</h2>
<div class="button-group">
<a href="/service/minirt/wasm/miniRT.html" target="_blank" class="button">WASM Version (Raylib)</a>
<a href="/proxy/minirt/vnc_lite.html?path=proxy/minirt/websockify&scale=resize" target="_blank" class="button">VNC Version (noVNC)</a>
</div>
</section>
</main>
</body>
</body>
</html>

99
site/en/minishell.html Normal file
View File

@ -0,0 +1,99 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
<link href="/css/style.css" rel="stylesheet">
</head>
<body>
<header>
<h1>Minishell - The Shell</h1>
<nav>
<a href="/en">Home</a>
<a href="mailto:victor@victorvobis.org">Email</a>
<a href="https://git.victorvobis.org/victorvobis" target="_blank">Git</a>
<a href="https://git.victorvobis.org/victorvobis/minishell" target="_blank">Source</a>
<a href="/de">Deutsch</a>
</nav>
</header>
<main>
<section class="content">
<h2>The Shell</h2>
<p style="font-weight: bold;">
Bash-like Shell. From Scratch. In C. <a href="#demo">Demo Below</a>
</p>
<div class="space-y-2">
<p>
The minishell project is part of the common core curriculum at
<a class="underline text-blue-700 hover:text-blue-900" href="https://42vienna.com">42Vienna</a> and
is seen as a milestone and one of the biggest jumps in complexity on the way to completing the cursus.
</p>
<p>
The rules are simple: Create a program that will replicate basic shell behaviour like typically found on POSIX systems.
</p>
<p>
Some of the requirements are:
</p>
<ul>
<li>Custom <a href="https://github.com/gnu-mirror-unofficial/readline">readline</a> function</li>
<li>Command line parsing</li>
<li>I/O loop to accept continuous commands</li>
<li>Command execution</li>
<li>File Descriptor redirection</li>
<li>Pipe Operators</li>
<li>Environment Variables</li>
<li>Builtin functions (cd, export, exit etc.)</li>
<li>Heredoc</li>
<li>Logical AND ( && )</li>
<li>Logical OR ( || )</li>
<li>and more...</li>
</ul>
<p>
The program has to be written in C, we are working on GNU/Linux machines.
</p>
<p>
We are also required to follow a very strict norm on which you can read more
<a href="/assets/42-norm.pdf">here</a>.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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!
</p>
<p>
This project was a team effort, and big thanks go out to my team partner and good friend,<br/>
<a href="https://github.com/zekmaro">Andrej Arama</a>!
</p>
<p>
The source code for the project can be seen on my
<a href="https://git.victorvobis.org/victorvobis/minishell">git server</a> and
I have also provided a live version of the shell below.<br/>
</p>
<p>
Many thanks to
<a href="https://github.com/tsl0922/ttyd">ttyd</a>
for the web integration!<br/>
Have fun!
</p>
<h2 id="demo">Demo</h2>
<div id="shell-container" style="height: 400px;">
<iframe sandbox="allow-same-origin allow-scripts" src="/proxy/minishell/" style="width: 100%; height: 100%; border: none; display: block;"></iframe>
</div>
</div>
</section>
</main>
</body>
</html>

View File

@ -1,44 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/css/style.css">
<title>Victor Vobis</title>
</head>
<body>
<header>
<h1>Victor Vobis</h1>
<p class="subtitle">Developer</p>
<nav>
<a href="#work">Work</a>
<a href="#about">About</a>
<a href="mailto:victor@victorvobis.org">Email</a>
<a href="https://git.victorvobis.org/victorvobis" target="_blank">Git</a>
</nav>
</header>
<main>
<section id="work">
<h2>Projects</h2>
<a class="project-link" href="/minishell.html">
<div class="project">
<h3>Minishell</h3>
<p>A simple ash-like shell build from scratch in C.</p>
</div>
</a>
<a class="project-link" href="/minirt.html">
<div class="project">
<h3>MiniRT</h3>
<p>Raytracer, written in C, originally using libmlx (X11-wrapper) rewritten using Raylib.</p>
</div>
</a>
</section>
<section id="about">
<h2>About</h2>
<p></p>
</section>
</main>
</body>
</html>

View File

@ -1,96 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
<link href="/css/style.css" rel="stylesheet">
</head>
<body>
<header>
<h1>Minishell - The Shell</h1>
<nav>
<a href="/">Home</a>
<a href="mailto:victor@victorvobis.org">Email</a>
<a href="https://git.victorvobis.org/victorvobis" target="_blank">Git</a>
<a href="https://git.victorvobis.org/victorvobis/minishell" target="_blank">Source</a>
</nav>
</header>
<main>
<section class="content">
<div>
<h2 class="text-4xl font-bold text-gray-800">The Shell</h2>
<div class="space-y-2">
<p>
The minishell project is part of the common core curriculum at
<a class="underline text-blue-700 hover:text-blue-900" href="https://42vienna.com">42Vienna</a> and
is seen as a milestone and one of the biggest jumps in complexity on the way to completing the cursus.
</p>
<p>
The rules are simple: Create a program that will replicate basic shell behaviour like typically found on posix systems.
</p>
<p>
Some of the requirements are:
</p>
<ul>
<li>Command line parsing</li>
<li>I/O loop to accept continuous commands</li>
<li>Command execution</li>
<li>File Descriptor redirection</li>
<li>Pipe Operators</li>
<li>Environment Variables</li>
<li>Builtin functions (cd, export, exit etc.)</li>
<li>Heredoc</li>
<li>Logical AND ( && )</li>
<li>Logical OR ( || )</li>
<li>and more...</li>
</ul>
<p>
The program has to be written in C, we are working on GNU/Linux machines.
</p>
<p>
We are also required to follow a very strict norm on which you can read more
<a class="underline text-blue-700 hover:text-blue-900" href="/assets/42-norm.pdf">here</a>.
</p>
<p>
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.
</p>
<p>
We also could use the readline function used in bash to handle the input of the user.<br>
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.
</p>
<p>
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.<br>
In my opinion, this is one of the more interesting parts of our implementation, and I very much enjoyed it!
</p>
<p>
This project was a team effort, and big thanks go out to my team partner<br>and good friend,
<a href="https://github.com/zekmaro">Andrej Arama</a>!
</p>
<p>
The source code for the project can be seen on my
<a href="https://git.victorvobis.org/victorvobis/minishell">git server</a> and
I have also provided a live version of the shell found below.<br/>
Please keep in mind, this is barely a prototype, and serves more as a proof of concept, than a fully implemented shell.
</p>
<p>
Credits and many thanks to
<a href="https://github.com/tsl0922/ttyd">ttyd</a>
for providing the web integeration!<br/>
Have fun!
</p>
<div id="shell-container" style="height: 400px;">
<iframe sandbox="allow-same-origin allow-scripts" src="/proxy/minishell/" style="width: 100%; height: 100%; border: none; display: block;"></iframe>
</div>
</div>
</div>
</section>
</main>
</body>
</html>

View File

@ -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();
});

View File

@ -1,9 +0,0 @@
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ["./html/*.html"],
theme: {
extend: {},
},
plugins: [],
}