feat: added content
This commit is contained in:
18
.svelte-kit/ambient.d.ts
vendored
18
.svelte-kit/ambient.d.ts
vendored
@@ -33,7 +33,6 @@ declare module '$env/static/private' {
|
|||||||
export const COLORTERM: string;
|
export const COLORTERM: string;
|
||||||
export const XDG_CONFIG_DIRS: string;
|
export const XDG_CONFIG_DIRS: string;
|
||||||
export const npm_config_cache: string;
|
export const npm_config_cache: string;
|
||||||
export const XDG_SESSION_PATH: string;
|
|
||||||
export const XDG_MENU_PREFIX: string;
|
export const XDG_MENU_PREFIX: string;
|
||||||
export const TERM_PROGRAM_VERSION: string;
|
export const TERM_PROGRAM_VERSION: string;
|
||||||
export const ICEAUTHORITY: string;
|
export const ICEAUTHORITY: string;
|
||||||
@@ -60,8 +59,10 @@ declare module '$env/static/private' {
|
|||||||
export const XAUTHORITY: string;
|
export const XAUTHORITY: string;
|
||||||
export const VSCODE_GIT_ASKPASS_NODE: string;
|
export const VSCODE_GIT_ASKPASS_NODE: string;
|
||||||
export const MOTD_SHOWN: string;
|
export const MOTD_SHOWN: string;
|
||||||
|
export const GDM_LANG: string;
|
||||||
export const GTK2_RC_FILES: string;
|
export const GTK2_RC_FILES: string;
|
||||||
export const HOME: string;
|
export const HOME: string;
|
||||||
|
export const USERNAME: string;
|
||||||
export const LANG: string;
|
export const LANG: string;
|
||||||
export const LC_PAPER: string;
|
export const LC_PAPER: string;
|
||||||
export const XDG_CURRENT_DESKTOP: string;
|
export const XDG_CURRENT_DESKTOP: string;
|
||||||
@@ -69,7 +70,6 @@ declare module '$env/static/private' {
|
|||||||
export const MEMORY_PRESSURE_WATCH: string;
|
export const MEMORY_PRESSURE_WATCH: string;
|
||||||
export const WAYLAND_DISPLAY: string;
|
export const WAYLAND_DISPLAY: string;
|
||||||
export const GIT_ASKPASS: string;
|
export const GIT_ASKPASS: string;
|
||||||
export const XDG_SEAT_PATH: string;
|
|
||||||
export const INVOCATION_ID: string;
|
export const INVOCATION_ID: string;
|
||||||
export const MANAGERPID: string;
|
export const MANAGERPID: string;
|
||||||
export const INIT_CWD: string;
|
export const INIT_CWD: string;
|
||||||
@@ -78,6 +78,7 @@ declare module '$env/static/private' {
|
|||||||
export const npm_lifecycle_script: string;
|
export const npm_lifecycle_script: string;
|
||||||
export const VSCODE_GIT_ASKPASS_EXTRA_ARGS: string;
|
export const VSCODE_GIT_ASKPASS_EXTRA_ARGS: string;
|
||||||
export const XKB_DEFAULT_LAYOUT: string;
|
export const XKB_DEFAULT_LAYOUT: string;
|
||||||
|
export const XDG_ACTIVATION_TOKEN: string;
|
||||||
export const npm_config_npm_version: string;
|
export const npm_config_npm_version: string;
|
||||||
export const XDG_SESSION_CLASS: string;
|
export const XDG_SESSION_CLASS: string;
|
||||||
export const LC_IDENTIFICATION: string;
|
export const LC_IDENTIFICATION: string;
|
||||||
@@ -88,7 +89,6 @@ declare module '$env/static/private' {
|
|||||||
export const VSCODE_GIT_IPC_HANDLE: string;
|
export const VSCODE_GIT_IPC_HANDLE: string;
|
||||||
export const QT_WAYLAND_RECONNECT: string;
|
export const QT_WAYLAND_RECONNECT: string;
|
||||||
export const KDE_SESSION_VERSION: string;
|
export const KDE_SESSION_VERSION: string;
|
||||||
export const PAM_KWALLET5_LOGIN: string;
|
|
||||||
export const DISPLAY: string;
|
export const DISPLAY: string;
|
||||||
export const npm_lifecycle_event: string;
|
export const npm_lifecycle_event: string;
|
||||||
export const GSK_RENDERER: string;
|
export const GSK_RENDERER: string;
|
||||||
@@ -98,10 +98,8 @@ declare module '$env/static/private' {
|
|||||||
export const XDG_VTNR: string;
|
export const XDG_VTNR: string;
|
||||||
export const XDG_SESSION_ID: string;
|
export const XDG_SESSION_ID: string;
|
||||||
export const npm_config_user_agent: string;
|
export const npm_config_user_agent: string;
|
||||||
export const ROCM_PATH: string;
|
|
||||||
export const npm_execpath: string;
|
export const npm_execpath: string;
|
||||||
export const XDG_RUNTIME_DIR: string;
|
export const XDG_RUNTIME_DIR: string;
|
||||||
export const MKLROOT: string;
|
|
||||||
export const DEBUGINFOD_URLS: string;
|
export const DEBUGINFOD_URLS: string;
|
||||||
export const npm_package_json: string;
|
export const npm_package_json: string;
|
||||||
export const LC_TIME: string;
|
export const LC_TIME: string;
|
||||||
@@ -115,6 +113,7 @@ declare module '$env/static/private' {
|
|||||||
export const BROWSER: string;
|
export const BROWSER: string;
|
||||||
export const PATH: string;
|
export const PATH: string;
|
||||||
export const npm_config_node_gyp: string;
|
export const npm_config_node_gyp: string;
|
||||||
|
export const GDMSESSION: string;
|
||||||
export const ORIGINAL_XDG_CURRENT_DESKTOP: string;
|
export const ORIGINAL_XDG_CURRENT_DESKTOP: string;
|
||||||
export const DBUS_SESSION_BUS_ADDRESS: string;
|
export const DBUS_SESSION_BUS_ADDRESS: string;
|
||||||
export const npm_config_global_prefix: string;
|
export const npm_config_global_prefix: string;
|
||||||
@@ -163,7 +162,6 @@ declare module '$env/dynamic/private' {
|
|||||||
COLORTERM: string;
|
COLORTERM: string;
|
||||||
XDG_CONFIG_DIRS: string;
|
XDG_CONFIG_DIRS: string;
|
||||||
npm_config_cache: string;
|
npm_config_cache: string;
|
||||||
XDG_SESSION_PATH: string;
|
|
||||||
XDG_MENU_PREFIX: string;
|
XDG_MENU_PREFIX: string;
|
||||||
TERM_PROGRAM_VERSION: string;
|
TERM_PROGRAM_VERSION: string;
|
||||||
ICEAUTHORITY: string;
|
ICEAUTHORITY: string;
|
||||||
@@ -190,8 +188,10 @@ declare module '$env/dynamic/private' {
|
|||||||
XAUTHORITY: string;
|
XAUTHORITY: string;
|
||||||
VSCODE_GIT_ASKPASS_NODE: string;
|
VSCODE_GIT_ASKPASS_NODE: string;
|
||||||
MOTD_SHOWN: string;
|
MOTD_SHOWN: string;
|
||||||
|
GDM_LANG: string;
|
||||||
GTK2_RC_FILES: string;
|
GTK2_RC_FILES: string;
|
||||||
HOME: string;
|
HOME: string;
|
||||||
|
USERNAME: string;
|
||||||
LANG: string;
|
LANG: string;
|
||||||
LC_PAPER: string;
|
LC_PAPER: string;
|
||||||
XDG_CURRENT_DESKTOP: string;
|
XDG_CURRENT_DESKTOP: string;
|
||||||
@@ -199,7 +199,6 @@ declare module '$env/dynamic/private' {
|
|||||||
MEMORY_PRESSURE_WATCH: string;
|
MEMORY_PRESSURE_WATCH: string;
|
||||||
WAYLAND_DISPLAY: string;
|
WAYLAND_DISPLAY: string;
|
||||||
GIT_ASKPASS: string;
|
GIT_ASKPASS: string;
|
||||||
XDG_SEAT_PATH: string;
|
|
||||||
INVOCATION_ID: string;
|
INVOCATION_ID: string;
|
||||||
MANAGERPID: string;
|
MANAGERPID: string;
|
||||||
INIT_CWD: string;
|
INIT_CWD: string;
|
||||||
@@ -208,6 +207,7 @@ declare module '$env/dynamic/private' {
|
|||||||
npm_lifecycle_script: string;
|
npm_lifecycle_script: string;
|
||||||
VSCODE_GIT_ASKPASS_EXTRA_ARGS: string;
|
VSCODE_GIT_ASKPASS_EXTRA_ARGS: string;
|
||||||
XKB_DEFAULT_LAYOUT: string;
|
XKB_DEFAULT_LAYOUT: string;
|
||||||
|
XDG_ACTIVATION_TOKEN: string;
|
||||||
npm_config_npm_version: string;
|
npm_config_npm_version: string;
|
||||||
XDG_SESSION_CLASS: string;
|
XDG_SESSION_CLASS: string;
|
||||||
LC_IDENTIFICATION: string;
|
LC_IDENTIFICATION: string;
|
||||||
@@ -218,7 +218,6 @@ declare module '$env/dynamic/private' {
|
|||||||
VSCODE_GIT_IPC_HANDLE: string;
|
VSCODE_GIT_IPC_HANDLE: string;
|
||||||
QT_WAYLAND_RECONNECT: string;
|
QT_WAYLAND_RECONNECT: string;
|
||||||
KDE_SESSION_VERSION: string;
|
KDE_SESSION_VERSION: string;
|
||||||
PAM_KWALLET5_LOGIN: string;
|
|
||||||
DISPLAY: string;
|
DISPLAY: string;
|
||||||
npm_lifecycle_event: string;
|
npm_lifecycle_event: string;
|
||||||
GSK_RENDERER: string;
|
GSK_RENDERER: string;
|
||||||
@@ -228,10 +227,8 @@ declare module '$env/dynamic/private' {
|
|||||||
XDG_VTNR: string;
|
XDG_VTNR: string;
|
||||||
XDG_SESSION_ID: string;
|
XDG_SESSION_ID: string;
|
||||||
npm_config_user_agent: string;
|
npm_config_user_agent: string;
|
||||||
ROCM_PATH: string;
|
|
||||||
npm_execpath: string;
|
npm_execpath: string;
|
||||||
XDG_RUNTIME_DIR: string;
|
XDG_RUNTIME_DIR: string;
|
||||||
MKLROOT: string;
|
|
||||||
DEBUGINFOD_URLS: string;
|
DEBUGINFOD_URLS: string;
|
||||||
npm_package_json: string;
|
npm_package_json: string;
|
||||||
LC_TIME: string;
|
LC_TIME: string;
|
||||||
@@ -245,6 +242,7 @@ declare module '$env/dynamic/private' {
|
|||||||
BROWSER: string;
|
BROWSER: string;
|
||||||
PATH: string;
|
PATH: string;
|
||||||
npm_config_node_gyp: string;
|
npm_config_node_gyp: string;
|
||||||
|
GDMSESSION: string;
|
||||||
ORIGINAL_XDG_CURRENT_DESKTOP: string;
|
ORIGINAL_XDG_CURRENT_DESKTOP: string;
|
||||||
DBUS_SESSION_BUS_ADDRESS: string;
|
DBUS_SESSION_BUS_ADDRESS: string;
|
||||||
npm_config_global_prefix: string;
|
npm_config_global_prefix: string;
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ export const options = {
|
|||||||
app: ({ head, body, assets, nonce, env }) => "<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <link rel=\"icon\" href=\"" + assets + "/favicon.png\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <link rel=\"stylesheet\" href=\"src/style.css\"\n " + head + "\n </head>\n <body id=\"background\" data-sveltekit-preload-data=\"hover\">\n <div class=\"background\">" + body + "</div>\n </body>\n</html>\n\n",
|
app: ({ head, body, assets, nonce, env }) => "<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <link rel=\"icon\" href=\"" + assets + "/favicon.png\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <link rel=\"stylesheet\" href=\"src/style.css\"\n " + head + "\n </head>\n <body id=\"background\" data-sveltekit-preload-data=\"hover\">\n <div class=\"background\">" + body + "</div>\n </body>\n</html>\n\n",
|
||||||
error: ({ status, message }) => "<!doctype html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<title>" + message + "</title>\n\n\t\t<style>\n\t\t\tbody {\n\t\t\t\t--bg: white;\n\t\t\t\t--fg: #222;\n\t\t\t\t--divider: #ccc;\n\t\t\t\tbackground: var(--bg);\n\t\t\t\tcolor: var(--fg);\n\t\t\t\tfont-family:\n\t\t\t\t\tsystem-ui,\n\t\t\t\t\t-apple-system,\n\t\t\t\t\tBlinkMacSystemFont,\n\t\t\t\t\t'Segoe UI',\n\t\t\t\t\tRoboto,\n\t\t\t\t\tOxygen,\n\t\t\t\t\tUbuntu,\n\t\t\t\t\tCantarell,\n\t\t\t\t\t'Open Sans',\n\t\t\t\t\t'Helvetica Neue',\n\t\t\t\t\tsans-serif;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\theight: 100vh;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\n\t\t\t.error {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tmax-width: 32rem;\n\t\t\t\tmargin: 0 1rem;\n\t\t\t}\n\n\t\t\t.status {\n\t\t\t\tfont-weight: 200;\n\t\t\t\tfont-size: 3rem;\n\t\t\t\tline-height: 1;\n\t\t\t\tposition: relative;\n\t\t\t\ttop: -0.05rem;\n\t\t\t}\n\n\t\t\t.message {\n\t\t\t\tborder-left: 1px solid var(--divider);\n\t\t\t\tpadding: 0 0 0 1rem;\n\t\t\t\tmargin: 0 0 0 1rem;\n\t\t\t\tmin-height: 2.5rem;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t}\n\n\t\t\t.message h1 {\n\t\t\t\tfont-weight: 400;\n\t\t\t\tfont-size: 1em;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\n\t\t\t@media (prefers-color-scheme: dark) {\n\t\t\t\tbody {\n\t\t\t\t\t--bg: #222;\n\t\t\t\t\t--fg: #ddd;\n\t\t\t\t\t--divider: #666;\n\t\t\t\t}\n\t\t\t}\n\t\t</style>\n\t</head>\n\t<body>\n\t\t<div class=\"error\">\n\t\t\t<span class=\"status\">" + status + "</span>\n\t\t\t<div class=\"message\">\n\t\t\t\t<h1>" + message + "</h1>\n\t\t\t</div>\n\t\t</div>\n\t</body>\n</html>\n"
|
error: ({ status, message }) => "<!doctype html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<title>" + message + "</title>\n\n\t\t<style>\n\t\t\tbody {\n\t\t\t\t--bg: white;\n\t\t\t\t--fg: #222;\n\t\t\t\t--divider: #ccc;\n\t\t\t\tbackground: var(--bg);\n\t\t\t\tcolor: var(--fg);\n\t\t\t\tfont-family:\n\t\t\t\t\tsystem-ui,\n\t\t\t\t\t-apple-system,\n\t\t\t\t\tBlinkMacSystemFont,\n\t\t\t\t\t'Segoe UI',\n\t\t\t\t\tRoboto,\n\t\t\t\t\tOxygen,\n\t\t\t\t\tUbuntu,\n\t\t\t\t\tCantarell,\n\t\t\t\t\t'Open Sans',\n\t\t\t\t\t'Helvetica Neue',\n\t\t\t\t\tsans-serif;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\theight: 100vh;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\n\t\t\t.error {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tmax-width: 32rem;\n\t\t\t\tmargin: 0 1rem;\n\t\t\t}\n\n\t\t\t.status {\n\t\t\t\tfont-weight: 200;\n\t\t\t\tfont-size: 3rem;\n\t\t\t\tline-height: 1;\n\t\t\t\tposition: relative;\n\t\t\t\ttop: -0.05rem;\n\t\t\t}\n\n\t\t\t.message {\n\t\t\t\tborder-left: 1px solid var(--divider);\n\t\t\t\tpadding: 0 0 0 1rem;\n\t\t\t\tmargin: 0 0 0 1rem;\n\t\t\t\tmin-height: 2.5rem;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t}\n\n\t\t\t.message h1 {\n\t\t\t\tfont-weight: 400;\n\t\t\t\tfont-size: 1em;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\n\t\t\t@media (prefers-color-scheme: dark) {\n\t\t\t\tbody {\n\t\t\t\t\t--bg: #222;\n\t\t\t\t\t--fg: #ddd;\n\t\t\t\t\t--divider: #666;\n\t\t\t\t}\n\t\t\t}\n\t\t</style>\n\t</head>\n\t<body>\n\t\t<div class=\"error\">\n\t\t\t<span class=\"status\">" + status + "</span>\n\t\t\t<div class=\"message\">\n\t\t\t\t<h1>" + message + "</h1>\n\t\t\t</div>\n\t\t</div>\n\t</body>\n</html>\n"
|
||||||
},
|
},
|
||||||
version_hash: "fxalwd"
|
version_hash: "km843b"
|
||||||
};
|
};
|
||||||
|
|
||||||
export async function get_hooks() {
|
export async function get_hooks() {
|
||||||
|
|||||||
@@ -25,8 +25,45 @@
|
|||||||
<p class="indent">I am currently developing an underground-submarine openworld multiplayer physics inspired game. As a gamer and enjoyer of large, rich maps and depth to gameplay, I would really like to say thats what I started out trying to create. Instead, the story goes that I had this random idea for terrain manipulation. Games like Minecraft and Terraria use squares and cubes, which just feels boring in my opinion. I thought I could do something much more <i>visceral</i> As a sort of tech-demo/proof of concept I programmed a shape that could be modified by boolean geomerty operations, mainly union and subtract with a second polygon. This led to a very interesting, but quickly boring "game" to hop around in. However, since I could drill through and place prettymuch any shape I wanted to, it felt like I could "fly" through the land, much like a submarine "flies" through water.<br/><br/>I implemented some modularly built vehicles with use of graphs theory and object oriented programming, and terrain generation using cellular noise. The reason I used cellular noise is because if you look at the lines between cells, they form a network without dead ends. Then by applying an algorithm using a density function on depth I am able to fine tune the width and density of the caves without impacting their interconnectedness. By using this method chunks can generate completely independant of their neighbor, which is optimal.<br/><br/>"Multiplayer is the hardest part of game dev, maybe release that later" I have been told by a lot of people. However, as a hobby-server configurer and network security nerd, I thought I could take it on. I was right, however as a network security nerd I have more layers of firewalls than I do braincells. Every single time I have an issue with networking, its a firewall. Once I found which ports were blocked, yes multiplayer was easy.<br/><br/>The result? I could fly drilling vehicles through terrain, pop out of the ground or into random caves, mine materials, play hide and seek with friends, and even orbit the planet. One of the things important to me in this game was accurate phyiscs: thrust, torque, gravity, mass, all the fun stuff. While I am a physics minor, I am more importantly a heavy player of physics and rocket science games such as Kerbal Space Program. I was able to glide through AP physics simply because it <i>just part of the games world</i>, it included everything we would learn in the classroom. Realistic phyiscs also added to the depth of gameplay I was looking for.<br/><br/> After some formal computer science education, I discovered new ways to more efficiently implement many of the algorithms I had initially generated and rewrote them ...multiple times. Currently everything runs <i>buttery smooth</i> and framerates are high due to efficienct caching of unloaded chunks, multithreaded chunk generation, gpu accelerated compute shaders to modify chunk density, enhanced use of object oriented programing and graph algorithms to build massive modular vehicles, authoritative server networking to disable hackers, and other performance tweaks.<br/><br/> So this sounds amazing, wheres the game? Well, a game needs graphics, audio, a sound track. As much as I'd love to release it now, its unplayable for these reasons along with a few minor implementations left such as NPC's and reworking the tech tree. Currently I am contracting a graphical artist and sound designer. Alpha tests have been a lot of fun, and investors have appeared. The finish line is close.</p>
|
<p class="indent">I am currently developing an underground-submarine openworld multiplayer physics inspired game. As a gamer and enjoyer of large, rich maps and depth to gameplay, I would really like to say thats what I started out trying to create. Instead, the story goes that I had this random idea for terrain manipulation. Games like Minecraft and Terraria use squares and cubes, which just feels boring in my opinion. I thought I could do something much more <i>visceral</i> As a sort of tech-demo/proof of concept I programmed a shape that could be modified by boolean geomerty operations, mainly union and subtract with a second polygon. This led to a very interesting, but quickly boring "game" to hop around in. However, since I could drill through and place prettymuch any shape I wanted to, it felt like I could "fly" through the land, much like a submarine "flies" through water.<br/><br/>I implemented some modularly built vehicles with use of graphs theory and object oriented programming, and terrain generation using cellular noise. The reason I used cellular noise is because if you look at the lines between cells, they form a network without dead ends. Then by applying an algorithm using a density function on depth I am able to fine tune the width and density of the caves without impacting their interconnectedness. By using this method chunks can generate completely independant of their neighbor, which is optimal.<br/><br/>"Multiplayer is the hardest part of game dev, maybe release that later" I have been told by a lot of people. However, as a hobby-server configurer and network security nerd, I thought I could take it on. I was right, however as a network security nerd I have more layers of firewalls than I do braincells. Every single time I have an issue with networking, its a firewall. Once I found which ports were blocked, yes multiplayer was easy.<br/><br/>The result? I could fly drilling vehicles through terrain, pop out of the ground or into random caves, mine materials, play hide and seek with friends, and even orbit the planet. One of the things important to me in this game was accurate phyiscs: thrust, torque, gravity, mass, all the fun stuff. While I am a physics minor, I am more importantly a heavy player of physics and rocket science games such as Kerbal Space Program. I was able to glide through AP physics simply because it <i>just part of the games world</i>, it included everything we would learn in the classroom. Realistic phyiscs also added to the depth of gameplay I was looking for.<br/><br/> After some formal computer science education, I discovered new ways to more efficiently implement many of the algorithms I had initially generated and rewrote them ...multiple times. Currently everything runs <i>buttery smooth</i> and framerates are high due to efficienct caching of unloaded chunks, multithreaded chunk generation, gpu accelerated compute shaders to modify chunk density, enhanced use of object oriented programing and graph algorithms to build massive modular vehicles, authoritative server networking to disable hackers, and other performance tweaks.<br/><br/> So this sounds amazing, wheres the game? Well, a game needs graphics, audio, a sound track. As much as I'd love to release it now, its unplayable for these reasons along with a few minor implementations left such as NPC's and reworking the tech tree. Currently I am contracting a graphical artist and sound designer. Alpha tests have been a lot of fun, and investors have appeared. The finish line is close.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="align-right card">
|
||||||
|
<h1>Servers & Networking</h1>
|
||||||
|
<p>Open source and networking hobbies led me to depoly a set of interconnected Linux servers:</p>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<h3>NGINX Reverse Proxy</h3>
|
||||||
|
<p>This server is the internets access to all of my other servers, and the glue holding them together. Using IPTables traffic is forwarded from specified ports onto private servers connected to it.</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<h3>Lightweight Server</h3>
|
||||||
|
<p>Running on Raspberry Pi, this servers main job is to run Subterstrike servers, Minecraft servers, other game servers, and this website you're looking at.</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<h3>AI Server</h3>
|
||||||
|
<p>A powerful computer with an RX 6950 XT GPU runs my local AI servers such as Stable Diffusion image generation, Ollama and Open-WebUI LLMs. As this is also my primary devices it contains a file server.</p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="align-left card">
|
||||||
|
<h1>Work Experience</h1>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<h3>Software Developer</h3>
|
||||||
|
<p>Parkside Pool needed to automate their systems, and I had already worked as the head lifeaurd and Director of Operations so I knew exactly what needed to be done. We needed to automate:</p>
|
||||||
|
<ol>
|
||||||
|
<li>Receiving swimming lesson applications and payments</li>
|
||||||
|
<li>Design schedules based on many parameters include age, level, class size, siblings in adjacent classes, given availibility, and more soft requirements</li>
|
||||||
|
<li>Send swimming lesson application confirmations</li>
|
||||||
|
</ol>
|
||||||
|
<p>Implementing the reception and confirmation of lessons was striaghtforward enough with a Flask site using Stripe for payments, and Firebase service for sending confirmation emails. The difficult part was building the schedule, which is a form of the <a href="https://en.wikipedia.org/wiki/Nurse_scheduling_problem" >Nurse Scheduling Problem</a>. As there were at max a few hundred students per schedule, I solved this using a recursive algorithm and scoring system to choose the best generated option.</p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="align-right card">
|
||||||
|
<h1>Volunteering</h1>
|
||||||
|
<p>I volunteer within the Computer Science, Mathematics, and Statistics department at the University of Toronto as a Computer Science Ambassador to help cultivate interest in the Mathematical Sciences in high school students, as well as providing direction for first year students within the programs.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- <p>Computer Science Student, Interested in Cyber Security, Networiking, Open source, and always learning something new</p>-->
|
<!-- <p>Computer Science Student, Interested in Cyber Security, Networiking, Open source, and always learning something new</p>-->
|
||||||
|
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ button {
|
|||||||
|
|
||||||
.card {
|
.card {
|
||||||
margin-top: 2rem;
|
margin-top: 2rem;
|
||||||
min-width: 65vw;
|
min-width: 75vw;
|
||||||
max-width: 75vw;
|
max-width: 90vw;
|
||||||
width: min-content;
|
width: min-content;
|
||||||
margin-bottom: 2rem;
|
margin-bottom: 2rem;
|
||||||
padding: 12px;
|
padding: 12px;
|
||||||
|
|||||||
Reference in New Issue
Block a user