added to forte

This commit is contained in:
logan 2024-04-28 19:49:30 -05:00
parent 1466b5db32
commit 2f509c9251
14 changed files with 289 additions and 52 deletions

7
Cargo.lock generated
View file

@ -483,6 +483,7 @@ dependencies = [
"futures-intrusive",
"gif",
"image",
"pollster",
"tokio",
"wgpu",
]
@ -1401,6 +1402,12 @@ dependencies = [
"miniz_oxide",
]
[[package]]
name = "pollster"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22686f4785f02a4fcc856d3b3bb19bf6c8160d103f7a99cc258bddd0251dc7f2"
[[package]]
name = "ppv-lite86"
version = "0.2.17"

File diff suppressed because one or more lines are too long

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"/><meta content="width=device-width, initial-scale=1" name="viewport"/><title> &#60loganGatlin/&#62 </title><link href="resources/favicon.svg" rel="icon" type="image/x-icon"/><style>
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title> &#60loganGatlin/&#62 </title><link rel="icon" href="resources/favicon.svg" type="image/x-icon"/><style>
/*!
Pure v3.0.0
Copyright 2013 Yahoo!
@ -321,14 +321,14 @@ code {
.property {
color: #586e75;
}
</style></head><body><div class="pure-g"><div class="pure-u-1-1"><header><h1> Fishbowl <a target="_blank" href="https://github.com/Xterminate1818/fishbowl"><svg style="padding-bottom: 0.2em;" viewBox="0 0 128 128"><title> View source on GitHub </title><g fill="#181616"><path clip-rule="evenodd" fill-rule="evenodd" d="M64 5.103c-33.347 0-60.388 27.035-60.388 60.388 0 26.682 17.303 49.317 41.297 57.303 3.017.56 4.125-1.31 4.125-2.905 0-1.44-.056-6.197-.082-11.243-16.8 3.653-20.345-7.125-20.345-7.125-2.747-6.98-6.705-8.836-6.705-8.836-5.48-3.748.413-3.67.413-3.67 6.063.425 9.257 6.223 9.257 6.223 5.386 9.23 14.127 6.562 17.573 5.02.542-3.903 2.107-6.568 3.834-8.076-13.413-1.525-27.514-6.704-27.514-29.843 0-6.593 2.36-11.98 6.223-16.21-.628-1.52-2.695-7.662.584-15.98 0 0 5.07-1.623 16.61 6.19C53.7 35 58.867 34.327 64 34.304c5.13.023 10.3.694 15.127 2.033 11.526-7.813 16.59-6.19 16.59-6.19 3.287 8.317 1.22 14.46.593 15.98 3.872 4.23 6.215 9.617 6.215 16.21 0 23.194-14.127 28.3-27.574 29.796 2.167 1.874 4.097 5.55 4.097 11.183 0 8.08-.07 14.583-.07 16.572 0 1.607 1.088 3.49 4.148 2.897 23.98-7.994 41.263-30.622 41.263-57.294C124.388 32.14 97.35 5.104 64 5.104z"></path><path d="M26.484 91.806c-.133.3-.605.39-1.035.185-.44-.196-.685-.605-.543-.906.13-.31.603-.395 1.04-.188.44.197.69.61.537.91zm2.446 2.729c-.287.267-.85.143-1.232-.28-.396-.42-.47-.983-.177-1.254.298-.266.844-.14 1.24.28.394.426.472.984.17 1.255zM31.312 98.012c-.37.258-.976.017-1.35-.52-.37-.538-.37-1.183.01-1.44.373-.258.97-.025 1.35.507.368.545.368 1.19-.01 1.452zm3.261 3.361c-.33.365-1.036.267-1.552-.23-.527-.487-.674-1.18-.343-1.544.336-.366 1.045-.264 1.564.23.527.486.686 1.18.333 1.543zm4.5 1.951c-.147.473-.825.688-1.51.486-.683-.207-1.13-.76-.99-1.238.14-.477.823-.7 1.512-.485.683.206 1.13.756.988 1.237zm4.943.361c.017.498-.563.91-1.28.92-.723.017-1.308-.387-1.315-.877 0-.503.568-.91 1.29-.924.717-.013 1.306.387 1.306.88zm4.598-.782c.086.485-.413.984-1.126 1.117-.7.13-1.35-.172-1.44-.653-.086-.498.422-.997 1.122-1.126.714-.123 1.354.17 1.444.663zm0 0"></path></g></svg></a></h1><h2> Vector Math - Standard Library </h2></header><div class="content"><h2 class="distinct"> Gallery </h2><div class="pure-g"><div class="pure-u-1-3"><img class="pure-img" src="/resources/mona_lisa.gif" title="Mona Lisa - Leonardo da Vinci"/></div><div class="pure-u-1-3"><img title="Wanderer above the Sea of Fog - Caspar David Friederich" class="pure-img" src="/resources/wanderer.gif"/></div><div class="pure-u-1-3"><img class="pure-img" title="The Starry Night - Vincent van Gogh" src="/resources/starry_night.gif"/></div></div><h2 class="distinct"> Motivation </h2>
</style></head><body><div class="pure-g"><div class="pure-u-1-1"><header><h1> Fishbowl <a href="https://github.com/Xterminate1818/fishbowl" target="_blank"><svg style="padding-bottom: 0.2em;" viewBox="0 0 128 128"><title> View source on GitHub </title><g fill="#181616"><path clip-rule="evenodd" d="M64 5.103c-33.347 0-60.388 27.035-60.388 60.388 0 26.682 17.303 49.317 41.297 57.303 3.017.56 4.125-1.31 4.125-2.905 0-1.44-.056-6.197-.082-11.243-16.8 3.653-20.345-7.125-20.345-7.125-2.747-6.98-6.705-8.836-6.705-8.836-5.48-3.748.413-3.67.413-3.67 6.063.425 9.257 6.223 9.257 6.223 5.386 9.23 14.127 6.562 17.573 5.02.542-3.903 2.107-6.568 3.834-8.076-13.413-1.525-27.514-6.704-27.514-29.843 0-6.593 2.36-11.98 6.223-16.21-.628-1.52-2.695-7.662.584-15.98 0 0 5.07-1.623 16.61 6.19C53.7 35 58.867 34.327 64 34.304c5.13.023 10.3.694 15.127 2.033 11.526-7.813 16.59-6.19 16.59-6.19 3.287 8.317 1.22 14.46.593 15.98 3.872 4.23 6.215 9.617 6.215 16.21 0 23.194-14.127 28.3-27.574 29.796 2.167 1.874 4.097 5.55 4.097 11.183 0 8.08-.07 14.583-.07 16.572 0 1.607 1.088 3.49 4.148 2.897 23.98-7.994 41.263-30.622 41.263-57.294C124.388 32.14 97.35 5.104 64 5.104z" fill-rule="evenodd"></path><path d="M26.484 91.806c-.133.3-.605.39-1.035.185-.44-.196-.685-.605-.543-.906.13-.31.603-.395 1.04-.188.44.197.69.61.537.91zm2.446 2.729c-.287.267-.85.143-1.232-.28-.396-.42-.47-.983-.177-1.254.298-.266.844-.14 1.24.28.394.426.472.984.17 1.255zM31.312 98.012c-.37.258-.976.017-1.35-.52-.37-.538-.37-1.183.01-1.44.373-.258.97-.025 1.35.507.368.545.368 1.19-.01 1.452zm3.261 3.361c-.33.365-1.036.267-1.552-.23-.527-.487-.674-1.18-.343-1.544.336-.366 1.045-.264 1.564.23.527.486.686 1.18.333 1.543zm4.5 1.951c-.147.473-.825.688-1.51.486-.683-.207-1.13-.76-.99-1.238.14-.477.823-.7 1.512-.485.683.206 1.13.756.988 1.237zm4.943.361c.017.498-.563.91-1.28.92-.723.017-1.308-.387-1.315-.877 0-.503.568-.91 1.29-.924.717-.013 1.306.387 1.306.88zm4.598-.782c.086.485-.413.984-1.126 1.117-.7.13-1.35-.172-1.44-.653-.086-.498.422-.997 1.122-1.126.714-.123 1.354.17 1.444.663zm0 0"></path></g></svg></a></h1><h2> Vector Math - Standard Library </h2></header><div class="content"><h2 class="distinct"> Gallery </h2><div class="pure-g"><div class="pure-u-1-3"><img class="pure-img" src="/resources/mona_lisa.gif" title="Mona Lisa - Leonardo da Vinci"/></div><div class="pure-u-1-3"><img class="pure-img" title="Wanderer above the Sea of Fog - Caspar David Friederich" src="/resources/wanderer.gif"/></div><div class="pure-u-1-3"><img class="pure-img" title="The Starry Night - Vincent van Gogh" src="/resources/starry_night.gif"/></div></div><h2 class="distinct"> Motivation </h2>
Physics solvers tend to be very complex software. In the
past, I toyed around with physics solvers for different kinds of geometries, but
struggled to implement these algorithms in a way that was both convincing
and performant. The idea for Fishbowl came from a video by the creator
Pezzza. They describe the high-level implementation details of a Verlet
Integration solver. This approach caught my interest.
<div class="video"><iframe referrerpolicy="strict-origin-when-cross-origin" frameborder="0" allowfullscreen title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" src="https://www.youtube-nocookie.com/embed/lS_qeBy3aQI?si=gLrHCWO-XUSP0T0j"></iframe></div>
<div class="video"><iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" title="YouTube video player" allowfullscreen src="https://www.youtube-nocookie.com/embed/lS_qeBy3aQI?si=gLrHCWO-XUSP0T0j" frameborder="0"></iframe></div>
Pezza's work is very impressive, particularly the demonstration at the end
which proves the program is deterministic. However, the focus of Pezzza's
project was to create a performant real-time application. I was instead
@ -376,7 +376,7 @@ code {
Keep in mind the web version below will be slower and generate lower quality
results than the native application, as it is being run on my home server with
limited resources.
<br/><br/><img hidden id="result_image" height="512" class="pure-img centered" width="512"/><form id="fishForm" style="justify-content: center;" method="post" class="pure-form-stacked" enctype="multipart/form-data"><fieldset><label for="file"> Select an image </label><input accept="image/bmp,image/gif,image/vnd.microsoft.icon,image/jpeg,image/png,image/tiff,image/webp" id="file" type="file" name="image" required/><br/><input class="pure-button pure-button-primary" type="submit" value="Run Fishbowl"/></fieldset></form><!----><script>
<br/><br/><img class="pure-img centered" id="result_image" hidden height="512" width="512"/><form id="fishForm" class="pure-form-stacked" style="justify-content: center;" method="post" enctype="multipart/form-data"><fieldset><label for="file"> Select an image </label><input required name="image" id="file" accept="image/bmp,image/gif,image/vnd.microsoft.icon,image/jpeg,image/png,image/tiff,image/webp" type="file"/><br/><input class="pure-button pure-button-primary" value="Run Fishbowl" type="submit"/></fieldset></form><!----><script>
const form = document.getElementById("fishForm");
const image = document.getElementById("result_image");

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title> &#60loganGatlin/&#62 </title><link type="image/x-icon" rel="icon" href="resources/favicon.svg"/><style>
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title> &#60loganGatlin/&#62 </title><link rel="icon" type="image/x-icon" href="resources/favicon.svg"/><style>
/*!
Pure v3.0.0
Copyright 2013 Yahoo!
@ -321,7 +321,7 @@ code {
.property {
color: #586e75;
}
</style></head><body><div class="pure-g"><div class="pure-u-1-1"><header class="header"><h1> Forte <a href="https://github.com/Xterminate1818/forte" target="_blank"><svg style="padding-bottom: 0.2em;" viewBox="0 0 128 128"><title> View source on GitHub </title><g fill="#181616"><path clip-rule="evenodd" fill-rule="evenodd" d="M64 5.103c-33.347 0-60.388 27.035-60.388 60.388 0 26.682 17.303 49.317 41.297 57.303 3.017.56 4.125-1.31 4.125-2.905 0-1.44-.056-6.197-.082-11.243-16.8 3.653-20.345-7.125-20.345-7.125-2.747-6.98-6.705-8.836-6.705-8.836-5.48-3.748.413-3.67.413-3.67 6.063.425 9.257 6.223 9.257 6.223 5.386 9.23 14.127 6.562 17.573 5.02.542-3.903 2.107-6.568 3.834-8.076-13.413-1.525-27.514-6.704-27.514-29.843 0-6.593 2.36-11.98 6.223-16.21-.628-1.52-2.695-7.662.584-15.98 0 0 5.07-1.623 16.61 6.19C53.7 35 58.867 34.327 64 34.304c5.13.023 10.3.694 15.127 2.033 11.526-7.813 16.59-6.19 16.59-6.19 3.287 8.317 1.22 14.46.593 15.98 3.872 4.23 6.215 9.617 6.215 16.21 0 23.194-14.127 28.3-27.574 29.796 2.167 1.874 4.097 5.55 4.097 11.183 0 8.08-.07 14.583-.07 16.572 0 1.607 1.088 3.49 4.148 2.897 23.98-7.994 41.263-30.622 41.263-57.294C124.388 32.14 97.35 5.104 64 5.104z"></path><path d="M26.484 91.806c-.133.3-.605.39-1.035.185-.44-.196-.685-.605-.543-.906.13-.31.603-.395 1.04-.188.44.197.69.61.537.91zm2.446 2.729c-.287.267-.85.143-1.232-.28-.396-.42-.47-.983-.177-1.254.298-.266.844-.14 1.24.28.394.426.472.984.17 1.255zM31.312 98.012c-.37.258-.976.017-1.35-.52-.37-.538-.37-1.183.01-1.44.373-.258.97-.025 1.35.507.368.545.368 1.19-.01 1.452zm3.261 3.361c-.33.365-1.036.267-1.552-.23-.527-.487-.674-1.18-.343-1.544.336-.366 1.045-.264 1.564.23.527.486.686 1.18.333 1.543zm4.5 1.951c-.147.473-.825.688-1.51.486-.683-.207-1.13-.76-.99-1.238.14-.477.823-.7 1.512-.485.683.206 1.13.756.988 1.237zm4.943.361c.017.498-.563.91-1.28.92-.723.017-1.308-.387-1.315-.877 0-.503.568-.91 1.29-.924.717-.013 1.306.387 1.306.88zm4.598-.782c.086.485-.413.984-1.126 1.117-.7.13-1.35-.172-1.44-.653-.086-.498.422-.997 1.122-1.126.714-.123 1.354.17 1.444.663zm0 0"></path></g></svg></a></h1><h2> Programming Language - Hackathon </h2></header><div class="content"><h2 class="distinct"> Motivation </h2>
</style></head><body><div class="pure-g"><div class="pure-u-1-1"><header class="header"><h1> Forte <a target="_blank" href="https://github.com/Xterminate1818/forte"><svg style="padding-bottom: 0.2em;" viewBox="0 0 128 128"><title> View source on GitHub </title><g fill="#181616"><path clip-rule="evenodd" d="M64 5.103c-33.347 0-60.388 27.035-60.388 60.388 0 26.682 17.303 49.317 41.297 57.303 3.017.56 4.125-1.31 4.125-2.905 0-1.44-.056-6.197-.082-11.243-16.8 3.653-20.345-7.125-20.345-7.125-2.747-6.98-6.705-8.836-6.705-8.836-5.48-3.748.413-3.67.413-3.67 6.063.425 9.257 6.223 9.257 6.223 5.386 9.23 14.127 6.562 17.573 5.02.542-3.903 2.107-6.568 3.834-8.076-13.413-1.525-27.514-6.704-27.514-29.843 0-6.593 2.36-11.98 6.223-16.21-.628-1.52-2.695-7.662.584-15.98 0 0 5.07-1.623 16.61 6.19C53.7 35 58.867 34.327 64 34.304c5.13.023 10.3.694 15.127 2.033 11.526-7.813 16.59-6.19 16.59-6.19 3.287 8.317 1.22 14.46.593 15.98 3.872 4.23 6.215 9.617 6.215 16.21 0 23.194-14.127 28.3-27.574 29.796 2.167 1.874 4.097 5.55 4.097 11.183 0 8.08-.07 14.583-.07 16.572 0 1.607 1.088 3.49 4.148 2.897 23.98-7.994 41.263-30.622 41.263-57.294C124.388 32.14 97.35 5.104 64 5.104z" fill-rule="evenodd"></path><path d="M26.484 91.806c-.133.3-.605.39-1.035.185-.44-.196-.685-.605-.543-.906.13-.31.603-.395 1.04-.188.44.197.69.61.537.91zm2.446 2.729c-.287.267-.85.143-1.232-.28-.396-.42-.47-.983-.177-1.254.298-.266.844-.14 1.24.28.394.426.472.984.17 1.255zM31.312 98.012c-.37.258-.976.017-1.35-.52-.37-.538-.37-1.183.01-1.44.373-.258.97-.025 1.35.507.368.545.368 1.19-.01 1.452zm3.261 3.361c-.33.365-1.036.267-1.552-.23-.527-.487-.674-1.18-.343-1.544.336-.366 1.045-.264 1.564.23.527.486.686 1.18.333 1.543zm4.5 1.951c-.147.473-.825.688-1.51.486-.683-.207-1.13-.76-.99-1.238.14-.477.823-.7 1.512-.485.683.206 1.13.756.988 1.237zm4.943.361c.017.498-.563.91-1.28.92-.723.017-1.308-.387-1.315-.877 0-.503.568-.91 1.29-.924.717-.013 1.306.387 1.306.88zm4.598-.782c.086.485-.413.984-1.126 1.117-.7.13-1.35-.172-1.44-.653-.086-.498.422-.997 1.122-1.126.714-.123 1.354.17 1.444.663zm0 0"></path></g></svg></a></h1><h2> Programming Language - Hackathon </h2></header><div class="content"><h2 class="distinct"> Motivation </h2>
In February of 2024, I competed at RowdyHacks during the 9th
annual Hackathon. This was my second time attending, having
<a href="/projects/fractal-viewer" class="link">
@ -387,10 +387,31 @@ code {
difficult to pull off.
<h2 class="distinct"> Safety </h2>
Creating a memory safe assembly language presents much different challenges
from a compiled language like Rust. There are no compile-time checks or
guarantees, any string of bytes could be interpreted as a "program." The core
design principle of Forte is to make unsecure programs impossible (or at least
very difficult) to express, and to make static analysis simple. This is a delicate
balance to strike - limiting Forte's capabilities necessarily makes it more
cumbersome and less performant.
</div></div></div></body></html>
from a compiled language like Rust. There are no compile-time checks or
guarantees, any string of bytes could be interpreted as a "program." The
core design principle of Forte is to make unsecure programs impossible (or
at least very difficult) to express, and to make static analysis simple.
This is a delicate balance to strike - limiting Forte's capabilities
necessarily makes it more cumbersome and less performant. I believe we are
at a point in history where making this trade-off is the right move. Modern
processors are unbelievably fast, security concerns far outweigh
performance concerns in most use cases. Writing machine assembly by hand is
far less common today, and so the ergonomics of an assembly language are
also less of a concern.
<h2 class="distinct"> Limitations </h2>
Forte is the first programming language I've written, and it was hacked
together in less than 24 hours. It is certainly not production ready, and
not every feature is implemented yet. Other features are technically functional,
but exist as mostly placeholders for when I can find a better way to implement them.
<br/><br/>
Evaluating branching and looping code during the Warmup is very difficult to achieve.
I very quickly run into the
<a class="link" href="https://en.wikipedia.org/wiki/Halting_problem">
Halting Problem</a>,
and feasibility limits where I to try and implement this sort of algorithm on real
hardware. Solutions I've considered are requiring code branches to have the same net effect
on stack size, forcing branches to execute another function rather than exist inline, replacing
loops with some form of recursion, or outright removing branches and loops altogether. Without
solving this problem, it is impossible to make the Warmup phase do its job, and so it is mostly
vestigial. As of now, Forte is only really capable of simple linear programs.
<h2 class="distinct"> Try it Out </h2></div></div></div></body></html>

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"/><meta content="width=device-width, initial-scale=1" name="viewport"/><title> &#60loganGatlin/&#62 </title><link href="resources/favicon.svg" type="image/x-icon" rel="icon"/><style>
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title> &#60loganGatlin/&#62 </title><link href="resources/favicon.svg" rel="icon" type="image/x-icon"/><style>
/*!
Pure v3.0.0
Copyright 2013 Yahoo!
@ -321,7 +321,7 @@ code {
.property {
color: #586e75;
}
</style></head><body><div class="pure-g"><div class="pure-u-1-1"><header class="header"><h1> Fractal Explorer <a target="_blank" href="https://github.com/Xterminate1818/rowdyhacks-2023"><svg viewBox="0 0 128 128" style="padding-bottom: 0.2em;"><title> View source on GitHub </title><g fill="#181616"><path clip-rule="evenodd" fill-rule="evenodd" d="M64 5.103c-33.347 0-60.388 27.035-60.388 60.388 0 26.682 17.303 49.317 41.297 57.303 3.017.56 4.125-1.31 4.125-2.905 0-1.44-.056-6.197-.082-11.243-16.8 3.653-20.345-7.125-20.345-7.125-2.747-6.98-6.705-8.836-6.705-8.836-5.48-3.748.413-3.67.413-3.67 6.063.425 9.257 6.223 9.257 6.223 5.386 9.23 14.127 6.562 17.573 5.02.542-3.903 2.107-6.568 3.834-8.076-13.413-1.525-27.514-6.704-27.514-29.843 0-6.593 2.36-11.98 6.223-16.21-.628-1.52-2.695-7.662.584-15.98 0 0 5.07-1.623 16.61 6.19C53.7 35 58.867 34.327 64 34.304c5.13.023 10.3.694 15.127 2.033 11.526-7.813 16.59-6.19 16.59-6.19 3.287 8.317 1.22 14.46.593 15.98 3.872 4.23 6.215 9.617 6.215 16.21 0 23.194-14.127 28.3-27.574 29.796 2.167 1.874 4.097 5.55 4.097 11.183 0 8.08-.07 14.583-.07 16.572 0 1.607 1.088 3.49 4.148 2.897 23.98-7.994 41.263-30.622 41.263-57.294C124.388 32.14 97.35 5.104 64 5.104z"></path><path d="M26.484 91.806c-.133.3-.605.39-1.035.185-.44-.196-.685-.605-.543-.906.13-.31.603-.395 1.04-.188.44.197.69.61.537.91zm2.446 2.729c-.287.267-.85.143-1.232-.28-.396-.42-.47-.983-.177-1.254.298-.266.844-.14 1.24.28.394.426.472.984.17 1.255zM31.312 98.012c-.37.258-.976.017-1.35-.52-.37-.538-.37-1.183.01-1.44.373-.258.97-.025 1.35.507.368.545.368 1.19-.01 1.452zm3.261 3.361c-.33.365-1.036.267-1.552-.23-.527-.487-.674-1.18-.343-1.544.336-.366 1.045-.264 1.564.23.527.486.686 1.18.333 1.543zm4.5 1.951c-.147.473-.825.688-1.51.486-.683-.207-1.13-.76-.99-1.238.14-.477.823-.7 1.512-.485.683.206 1.13.756.988 1.237zm4.943.361c.017.498-.563.91-1.28.92-.723.017-1.308-.387-1.315-.877 0-.503.568-.91 1.29-.924.717-.013 1.306.387 1.306.88zm4.598-.782c.086.485-.413.984-1.126 1.117-.7.13-1.35-.172-1.44-.653-.086-.498.422-.997 1.122-1.126.714-.123 1.354.17 1.444.663zm0 0"></path></g></svg></a></h1><h2> Parallel Algorithms - Optimization - Hackathon Finalist </h2></header><div class="content"><h2 class="distinct"> Motivation </h2>
</style></head><body><div class="pure-g"><div class="pure-u-1-1"><header class="header"><h1> Fractal Explorer <a href="https://github.com/Xterminate1818/rowdyhacks-2023" target="_blank"><svg viewBox="0 0 128 128" style="padding-bottom: 0.2em;"><title> View source on GitHub </title><g fill="#181616"><path clip-rule="evenodd" d="M64 5.103c-33.347 0-60.388 27.035-60.388 60.388 0 26.682 17.303 49.317 41.297 57.303 3.017.56 4.125-1.31 4.125-2.905 0-1.44-.056-6.197-.082-11.243-16.8 3.653-20.345-7.125-20.345-7.125-2.747-6.98-6.705-8.836-6.705-8.836-5.48-3.748.413-3.67.413-3.67 6.063.425 9.257 6.223 9.257 6.223 5.386 9.23 14.127 6.562 17.573 5.02.542-3.903 2.107-6.568 3.834-8.076-13.413-1.525-27.514-6.704-27.514-29.843 0-6.593 2.36-11.98 6.223-16.21-.628-1.52-2.695-7.662.584-15.98 0 0 5.07-1.623 16.61 6.19C53.7 35 58.867 34.327 64 34.304c5.13.023 10.3.694 15.127 2.033 11.526-7.813 16.59-6.19 16.59-6.19 3.287 8.317 1.22 14.46.593 15.98 3.872 4.23 6.215 9.617 6.215 16.21 0 23.194-14.127 28.3-27.574 29.796 2.167 1.874 4.097 5.55 4.097 11.183 0 8.08-.07 14.583-.07 16.572 0 1.607 1.088 3.49 4.148 2.897 23.98-7.994 41.263-30.622 41.263-57.294C124.388 32.14 97.35 5.104 64 5.104z" fill-rule="evenodd"></path><path d="M26.484 91.806c-.133.3-.605.39-1.035.185-.44-.196-.685-.605-.543-.906.13-.31.603-.395 1.04-.188.44.197.69.61.537.91zm2.446 2.729c-.287.267-.85.143-1.232-.28-.396-.42-.47-.983-.177-1.254.298-.266.844-.14 1.24.28.394.426.472.984.17 1.255zM31.312 98.012c-.37.258-.976.017-1.35-.52-.37-.538-.37-1.183.01-1.44.373-.258.97-.025 1.35.507.368.545.368 1.19-.01 1.452zm3.261 3.361c-.33.365-1.036.267-1.552-.23-.527-.487-.674-1.18-.343-1.544.336-.366 1.045-.264 1.564.23.527.486.686 1.18.333 1.543zm4.5 1.951c-.147.473-.825.688-1.51.486-.683-.207-1.13-.76-.99-1.238.14-.477.823-.7 1.512-.485.683.206 1.13.756.988 1.237zm4.943.361c.017.498-.563.91-1.28.92-.723.017-1.308-.387-1.315-.877 0-.503.568-.91 1.29-.924.717-.013 1.306.387 1.306.88zm4.598-.782c.086.485-.413.984-1.126 1.117-.7.13-1.35-.172-1.44-.653-.086-.498.422-.997 1.122-1.126.714-.123 1.354.17 1.444.663zm0 0"></path></g></svg></a></h1><h2> Parallel Algorithms - Optimization - Hackathon Finalist </h2></header><div class="content"><h2 class="distinct"> Motivation </h2>
In March of 2023 I attended RowdyHacks 8, my first hackathon. I was
in the middle of my Calculus II class, which I was enjoying a lot. With
Math at the front of my mind, I decided to write a program to visualize

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"/><meta content="width=device-width, initial-scale=1" name="viewport"/><title> &#60loganGatlin/&#62 </title><link href="resources/favicon.svg" type="image/x-icon" rel="icon"/><style>
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"/><meta content="width=device-width, initial-scale=1" name="viewport"/><title> &#60loganGatlin/&#62 </title><link href="resources/favicon.svg" rel="icon" type="image/x-icon"/><style>
/*!
Pure v3.0.0
Copyright 2013 Yahoo!
@ -321,7 +321,7 @@ code {
.property {
color: #586e75;
}
</style></head><body><div class="pure-g"><div class="pure-u-1-1"><header class="header"><h1> HTML Templating Engine <a target="_blank" href="https://github.com/Xterminate1818/html"><svg viewBox="0 0 128 128" style="padding-bottom: 0.2em;"><title> View source on GitHub </title><g fill="#181616"><path d="M64 5.103c-33.347 0-60.388 27.035-60.388 60.388 0 26.682 17.303 49.317 41.297 57.303 3.017.56 4.125-1.31 4.125-2.905 0-1.44-.056-6.197-.082-11.243-16.8 3.653-20.345-7.125-20.345-7.125-2.747-6.98-6.705-8.836-6.705-8.836-5.48-3.748.413-3.67.413-3.67 6.063.425 9.257 6.223 9.257 6.223 5.386 9.23 14.127 6.562 17.573 5.02.542-3.903 2.107-6.568 3.834-8.076-13.413-1.525-27.514-6.704-27.514-29.843 0-6.593 2.36-11.98 6.223-16.21-.628-1.52-2.695-7.662.584-15.98 0 0 5.07-1.623 16.61 6.19C53.7 35 58.867 34.327 64 34.304c5.13.023 10.3.694 15.127 2.033 11.526-7.813 16.59-6.19 16.59-6.19 3.287 8.317 1.22 14.46.593 15.98 3.872 4.23 6.215 9.617 6.215 16.21 0 23.194-14.127 28.3-27.574 29.796 2.167 1.874 4.097 5.55 4.097 11.183 0 8.08-.07 14.583-.07 16.572 0 1.607 1.088 3.49 4.148 2.897 23.98-7.994 41.263-30.622 41.263-57.294C124.388 32.14 97.35 5.104 64 5.104z" fill-rule="evenodd" clip-rule="evenodd"></path><path d="M26.484 91.806c-.133.3-.605.39-1.035.185-.44-.196-.685-.605-.543-.906.13-.31.603-.395 1.04-.188.44.197.69.61.537.91zm2.446 2.729c-.287.267-.85.143-1.232-.28-.396-.42-.47-.983-.177-1.254.298-.266.844-.14 1.24.28.394.426.472.984.17 1.255zM31.312 98.012c-.37.258-.976.017-1.35-.52-.37-.538-.37-1.183.01-1.44.373-.258.97-.025 1.35.507.368.545.368 1.19-.01 1.452zm3.261 3.361c-.33.365-1.036.267-1.552-.23-.527-.487-.674-1.18-.343-1.544.336-.366 1.045-.264 1.564.23.527.486.686 1.18.333 1.543zm4.5 1.951c-.147.473-.825.688-1.51.486-.683-.207-1.13-.76-.99-1.238.14-.477.823-.7 1.512-.485.683.206 1.13.756.988 1.237zm4.943.361c.017.498-.563.91-1.28.92-.723.017-1.308-.387-1.315-.877 0-.503.568-.91 1.29-.924.717-.013 1.306.387 1.306.88zm4.598-.782c.086.485-.413.984-1.126 1.117-.7.13-1.35-.172-1.44-.653-.086-.498.422-.997 1.122-1.126.714-.123 1.354.17 1.444.663zm0 0"></path></g></svg></a></h1><h2> Front End - Parser Design </h2></header><div class="content"><h2 class="distinct"> Motivation </h2>
</style></head><body><div class="pure-g"><div class="pure-u-1-1"><header class="header"><h1> HTML Templating Engine <a href="https://github.com/Xterminate1818/html" target="_blank"><svg style="padding-bottom: 0.2em;" viewBox="0 0 128 128"><title> View source on GitHub </title><g fill="#181616"><path d="M64 5.103c-33.347 0-60.388 27.035-60.388 60.388 0 26.682 17.303 49.317 41.297 57.303 3.017.56 4.125-1.31 4.125-2.905 0-1.44-.056-6.197-.082-11.243-16.8 3.653-20.345-7.125-20.345-7.125-2.747-6.98-6.705-8.836-6.705-8.836-5.48-3.748.413-3.67.413-3.67 6.063.425 9.257 6.223 9.257 6.223 5.386 9.23 14.127 6.562 17.573 5.02.542-3.903 2.107-6.568 3.834-8.076-13.413-1.525-27.514-6.704-27.514-29.843 0-6.593 2.36-11.98 6.223-16.21-.628-1.52-2.695-7.662.584-15.98 0 0 5.07-1.623 16.61 6.19C53.7 35 58.867 34.327 64 34.304c5.13.023 10.3.694 15.127 2.033 11.526-7.813 16.59-6.19 16.59-6.19 3.287 8.317 1.22 14.46.593 15.98 3.872 4.23 6.215 9.617 6.215 16.21 0 23.194-14.127 28.3-27.574 29.796 2.167 1.874 4.097 5.55 4.097 11.183 0 8.08-.07 14.583-.07 16.572 0 1.607 1.088 3.49 4.148 2.897 23.98-7.994 41.263-30.622 41.263-57.294C124.388 32.14 97.35 5.104 64 5.104z" fill-rule="evenodd" clip-rule="evenodd"></path><path d="M26.484 91.806c-.133.3-.605.39-1.035.185-.44-.196-.685-.605-.543-.906.13-.31.603-.395 1.04-.188.44.197.69.61.537.91zm2.446 2.729c-.287.267-.85.143-1.232-.28-.396-.42-.47-.983-.177-1.254.298-.266.844-.14 1.24.28.394.426.472.984.17 1.255zM31.312 98.012c-.37.258-.976.017-1.35-.52-.37-.538-.37-1.183.01-1.44.373-.258.97-.025 1.35.507.368.545.368 1.19-.01 1.452zm3.261 3.361c-.33.365-1.036.267-1.552-.23-.527-.487-.674-1.18-.343-1.544.336-.366 1.045-.264 1.564.23.527.486.686 1.18.333 1.543zm4.5 1.951c-.147.473-.825.688-1.51.486-.683-.207-1.13-.76-.99-1.238.14-.477.823-.7 1.512-.485.683.206 1.13.756.988 1.237zm4.943.361c.017.498-.563.91-1.28.92-.723.017-1.308-.387-1.315-.877 0-.503.568-.91 1.29-.924.717-.013 1.306.387 1.306.88zm4.598-.782c.086.485-.413.984-1.126 1.117-.7.13-1.35-.172-1.44-.653-.086-.498.422-.997 1.122-1.126.714-.123 1.354.17 1.444.663zm0 0"></path></g></svg></a></h1><h2> Front End - Parser Design </h2></header><div class="content"><h2 class="distinct"> Motivation </h2>
HTML is a powerful tool for creating static web pages, but
is not easily modular or scalable. Front end frameworks like
React provide reusable components. I want to use components

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"/><meta content="width=device-width, initial-scale=1" name="viewport"/><title> &#60loganGatlin/&#62 </title><link rel="icon" href="resources/favicon.svg" type="image/x-icon"/><style>
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"/><meta content="width=device-width, initial-scale=1" name="viewport"/><title> &#60loganGatlin/&#62 </title><link rel="icon" type="image/x-icon" href="resources/favicon.svg"/><style>
/*!
Pure v3.0.0
Copyright 2013 Yahoo!
@ -321,7 +321,7 @@ code {
.property {
color: #586e75;
}
</style></head><body><div class="pure-g"><div class="pure-u-1-1"><header class="header"><h1> Rust HTTP Server <a target="_blank" href="https://github.com/Xterminate1818/server"><svg viewBox="0 0 128 128" style="padding-bottom: 0.2em;"><title> View source on GitHub </title><g fill="#181616"><path clip-rule="evenodd" fill-rule="evenodd" d="M64 5.103c-33.347 0-60.388 27.035-60.388 60.388 0 26.682 17.303 49.317 41.297 57.303 3.017.56 4.125-1.31 4.125-2.905 0-1.44-.056-6.197-.082-11.243-16.8 3.653-20.345-7.125-20.345-7.125-2.747-6.98-6.705-8.836-6.705-8.836-5.48-3.748.413-3.67.413-3.67 6.063.425 9.257 6.223 9.257 6.223 5.386 9.23 14.127 6.562 17.573 5.02.542-3.903 2.107-6.568 3.834-8.076-13.413-1.525-27.514-6.704-27.514-29.843 0-6.593 2.36-11.98 6.223-16.21-.628-1.52-2.695-7.662.584-15.98 0 0 5.07-1.623 16.61 6.19C53.7 35 58.867 34.327 64 34.304c5.13.023 10.3.694 15.127 2.033 11.526-7.813 16.59-6.19 16.59-6.19 3.287 8.317 1.22 14.46.593 15.98 3.872 4.23 6.215 9.617 6.215 16.21 0 23.194-14.127 28.3-27.574 29.796 2.167 1.874 4.097 5.55 4.097 11.183 0 8.08-.07 14.583-.07 16.572 0 1.607 1.088 3.49 4.148 2.897 23.98-7.994 41.263-30.622 41.263-57.294C124.388 32.14 97.35 5.104 64 5.104z"></path><path d="M26.484 91.806c-.133.3-.605.39-1.035.185-.44-.196-.685-.605-.543-.906.13-.31.603-.395 1.04-.188.44.197.69.61.537.91zm2.446 2.729c-.287.267-.85.143-1.232-.28-.396-.42-.47-.983-.177-1.254.298-.266.844-.14 1.24.28.394.426.472.984.17 1.255zM31.312 98.012c-.37.258-.976.017-1.35-.52-.37-.538-.37-1.183.01-1.44.373-.258.97-.025 1.35.507.368.545.368 1.19-.01 1.452zm3.261 3.361c-.33.365-1.036.267-1.552-.23-.527-.487-.674-1.18-.343-1.544.336-.366 1.045-.264 1.564.23.527.486.686 1.18.333 1.543zm4.5 1.951c-.147.473-.825.688-1.51.486-.683-.207-1.13-.76-.99-1.238.14-.477.823-.7 1.512-.485.683.206 1.13.756.988 1.237zm4.943.361c.017.498-.563.91-1.28.92-.723.017-1.308-.387-1.315-.877 0-.503.568-.91 1.29-.924.717-.013 1.306.387 1.306.88zm4.598-.782c.086.485-.413.984-1.126 1.117-.7.13-1.35-.172-1.44-.653-.086-.498.422-.997 1.122-1.126.714-.123 1.354.17 1.444.663zm0 0"></path></g></svg></a></h1><h2> Keywords: Back End - TCP - SSL </h2></header><div class="content"><h2 class="distinct"> Motivation </h2>
</style></head><body><div class="pure-g"><div class="pure-u-1-1"><header class="header"><h1> Rust HTTP Server <a target="_blank" href="https://github.com/Xterminate1818/server"><svg viewBox="0 0 128 128" style="padding-bottom: 0.2em;"><title> View source on GitHub </title><g fill="#181616"><path fill-rule="evenodd" clip-rule="evenodd" d="M64 5.103c-33.347 0-60.388 27.035-60.388 60.388 0 26.682 17.303 49.317 41.297 57.303 3.017.56 4.125-1.31 4.125-2.905 0-1.44-.056-6.197-.082-11.243-16.8 3.653-20.345-7.125-20.345-7.125-2.747-6.98-6.705-8.836-6.705-8.836-5.48-3.748.413-3.67.413-3.67 6.063.425 9.257 6.223 9.257 6.223 5.386 9.23 14.127 6.562 17.573 5.02.542-3.903 2.107-6.568 3.834-8.076-13.413-1.525-27.514-6.704-27.514-29.843 0-6.593 2.36-11.98 6.223-16.21-.628-1.52-2.695-7.662.584-15.98 0 0 5.07-1.623 16.61 6.19C53.7 35 58.867 34.327 64 34.304c5.13.023 10.3.694 15.127 2.033 11.526-7.813 16.59-6.19 16.59-6.19 3.287 8.317 1.22 14.46.593 15.98 3.872 4.23 6.215 9.617 6.215 16.21 0 23.194-14.127 28.3-27.574 29.796 2.167 1.874 4.097 5.55 4.097 11.183 0 8.08-.07 14.583-.07 16.572 0 1.607 1.088 3.49 4.148 2.897 23.98-7.994 41.263-30.622 41.263-57.294C124.388 32.14 97.35 5.104 64 5.104z"></path><path d="M26.484 91.806c-.133.3-.605.39-1.035.185-.44-.196-.685-.605-.543-.906.13-.31.603-.395 1.04-.188.44.197.69.61.537.91zm2.446 2.729c-.287.267-.85.143-1.232-.28-.396-.42-.47-.983-.177-1.254.298-.266.844-.14 1.24.28.394.426.472.984.17 1.255zM31.312 98.012c-.37.258-.976.017-1.35-.52-.37-.538-.37-1.183.01-1.44.373-.258.97-.025 1.35.507.368.545.368 1.19-.01 1.452zm3.261 3.361c-.33.365-1.036.267-1.552-.23-.527-.487-.674-1.18-.343-1.544.336-.366 1.045-.264 1.564.23.527.486.686 1.18.333 1.543zm4.5 1.951c-.147.473-.825.688-1.51.486-.683-.207-1.13-.76-.99-1.238.14-.477.823-.7 1.512-.485.683.206 1.13.756.988 1.237zm4.943.361c.017.498-.563.91-1.28.92-.723.017-1.308-.387-1.315-.877 0-.503.568-.91 1.29-.924.717-.013 1.306.387 1.306.88zm4.598-.782c.086.485-.413.984-1.126 1.117-.7.13-1.35-.172-1.44-.653-.086-.498.422-.997 1.122-1.126.714-.123 1.354.17 1.444.663zm0 0"></path></g></svg></a></h1><h2> Keywords: Back End - TCP - SSL </h2></header><div class="content"><h2 class="distinct"> Motivation </h2>
As a systems programmer, I want to understand the technologies
I use at a very low level. Modern web stacks abstract away the
process of handling TCP connections, serving SSL certificates,

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"/><meta content="width=device-width, initial-scale=1" name="viewport"/><title> &#60loganGatlin/&#62 </title><link href="resources/favicon.svg" rel="icon" type="image/x-icon"/><style>
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title> &#60loganGatlin/&#62 </title><link type="image/x-icon" href="resources/favicon.svg" rel="icon"/><style>
/*!
Pure v3.0.0
Copyright 2013 Yahoo!

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title> &#60loganGatlin/&#62 </title><link href="resources/favicon.svg" rel="icon" type="image/x-icon"/><style>
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"/><meta content="width=device-width, initial-scale=1" name="viewport"/><title> &#60loganGatlin/&#62 </title><link type="image/x-icon" href="resources/favicon.svg" rel="icon"/><style>
/*!
Pure v3.0.0
Copyright 2013 Yahoo!
@ -321,7 +321,7 @@ code {
.property {
color: #586e75;
}
</style></head><body><div class="pure-g"><div class="pure-u-1-1"><header class="header"><h1> nd-range <a target="_blank" href="https://github.com/Xterminate1818/nd-range"><svg viewBox="0 0 128 128" style="padding-bottom: 0.2em;"><title> View source on GitHub </title><g fill="#181616"><path d="M64 5.103c-33.347 0-60.388 27.035-60.388 60.388 0 26.682 17.303 49.317 41.297 57.303 3.017.56 4.125-1.31 4.125-2.905 0-1.44-.056-6.197-.082-11.243-16.8 3.653-20.345-7.125-20.345-7.125-2.747-6.98-6.705-8.836-6.705-8.836-5.48-3.748.413-3.67.413-3.67 6.063.425 9.257 6.223 9.257 6.223 5.386 9.23 14.127 6.562 17.573 5.02.542-3.903 2.107-6.568 3.834-8.076-13.413-1.525-27.514-6.704-27.514-29.843 0-6.593 2.36-11.98 6.223-16.21-.628-1.52-2.695-7.662.584-15.98 0 0 5.07-1.623 16.61 6.19C53.7 35 58.867 34.327 64 34.304c5.13.023 10.3.694 15.127 2.033 11.526-7.813 16.59-6.19 16.59-6.19 3.287 8.317 1.22 14.46.593 15.98 3.872 4.23 6.215 9.617 6.215 16.21 0 23.194-14.127 28.3-27.574 29.796 2.167 1.874 4.097 5.55 4.097 11.183 0 8.08-.07 14.583-.07 16.572 0 1.607 1.088 3.49 4.148 2.897 23.98-7.994 41.263-30.622 41.263-57.294C124.388 32.14 97.35 5.104 64 5.104z" clip-rule="evenodd" fill-rule="evenodd"></path><path d="M26.484 91.806c-.133.3-.605.39-1.035.185-.44-.196-.685-.605-.543-.906.13-.31.603-.395 1.04-.188.44.197.69.61.537.91zm2.446 2.729c-.287.267-.85.143-1.232-.28-.396-.42-.47-.983-.177-1.254.298-.266.844-.14 1.24.28.394.426.472.984.17 1.255zM31.312 98.012c-.37.258-.976.017-1.35-.52-.37-.538-.37-1.183.01-1.44.373-.258.97-.025 1.35.507.368.545.368 1.19-.01 1.452zm3.261 3.361c-.33.365-1.036.267-1.552-.23-.527-.487-.674-1.18-.343-1.544.336-.366 1.045-.264 1.564.23.527.486.686 1.18.333 1.543zm4.5 1.951c-.147.473-.825.688-1.51.486-.683-.207-1.13-.76-.99-1.238.14-.477.823-.7 1.512-.485.683.206 1.13.756.988 1.237zm4.943.361c.017.498-.563.91-1.28.92-.723.017-1.308-.387-1.315-.877 0-.503.568-.91 1.29-.924.717-.013 1.306.387 1.306.88zm4.598-.782c.086.485-.413.984-1.126 1.117-.7.13-1.35-.172-1.44-.653-.086-.498.422-.997 1.122-1.126.714-.123 1.354.17 1.444.663zm0 0"></path></g></svg></a></h1><h2> Vector Math - Standard Library </h2></header><div class="content"><h2 class="distinct"> Motivation </h2>
</style></head><body><div class="pure-g"><div class="pure-u-1-1"><header class="header"><h1> nd-range <a href="https://github.com/Xterminate1818/nd-range" target="_blank"><svg style="padding-bottom: 0.2em;" viewBox="0 0 128 128"><title> View source on GitHub </title><g fill="#181616"><path clip-rule="evenodd" d="M64 5.103c-33.347 0-60.388 27.035-60.388 60.388 0 26.682 17.303 49.317 41.297 57.303 3.017.56 4.125-1.31 4.125-2.905 0-1.44-.056-6.197-.082-11.243-16.8 3.653-20.345-7.125-20.345-7.125-2.747-6.98-6.705-8.836-6.705-8.836-5.48-3.748.413-3.67.413-3.67 6.063.425 9.257 6.223 9.257 6.223 5.386 9.23 14.127 6.562 17.573 5.02.542-3.903 2.107-6.568 3.834-8.076-13.413-1.525-27.514-6.704-27.514-29.843 0-6.593 2.36-11.98 6.223-16.21-.628-1.52-2.695-7.662.584-15.98 0 0 5.07-1.623 16.61 6.19C53.7 35 58.867 34.327 64 34.304c5.13.023 10.3.694 15.127 2.033 11.526-7.813 16.59-6.19 16.59-6.19 3.287 8.317 1.22 14.46.593 15.98 3.872 4.23 6.215 9.617 6.215 16.21 0 23.194-14.127 28.3-27.574 29.796 2.167 1.874 4.097 5.55 4.097 11.183 0 8.08-.07 14.583-.07 16.572 0 1.607 1.088 3.49 4.148 2.897 23.98-7.994 41.263-30.622 41.263-57.294C124.388 32.14 97.35 5.104 64 5.104z" fill-rule="evenodd"></path><path d="M26.484 91.806c-.133.3-.605.39-1.035.185-.44-.196-.685-.605-.543-.906.13-.31.603-.395 1.04-.188.44.197.69.61.537.91zm2.446 2.729c-.287.267-.85.143-1.232-.28-.396-.42-.47-.983-.177-1.254.298-.266.844-.14 1.24.28.394.426.472.984.17 1.255zM31.312 98.012c-.37.258-.976.017-1.35-.52-.37-.538-.37-1.183.01-1.44.373-.258.97-.025 1.35.507.368.545.368 1.19-.01 1.452zm3.261 3.361c-.33.365-1.036.267-1.552-.23-.527-.487-.674-1.18-.343-1.544.336-.366 1.045-.264 1.564.23.527.486.686 1.18.333 1.543zm4.5 1.951c-.147.473-.825.688-1.51.486-.683-.207-1.13-.76-.99-1.238.14-.477.823-.7 1.512-.485.683.206 1.13.756.988 1.237zm4.943.361c.017.498-.563.91-1.28.92-.723.017-1.308-.387-1.315-.877 0-.503.568-.91 1.29-.924.717-.013 1.306.387 1.306.88zm4.598-.782c.086.485-.413.984-1.126 1.117-.7.13-1.35-.172-1.44-.653-.086-.498.422-.997 1.122-1.126.714-.123 1.354.17 1.444.663zm0 0"></path></g></svg></a></h1><h2> Vector Math - Standard Library </h2></header><div class="content"><h2 class="distinct"> Motivation </h2>
The Rust standard library provides several 'Range' types which
represent integers inside a given bounds (i.e. 1 &#8804; n &#8804; 100).
Ranges can be iterated over, and used for bounds testing of numbers.

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title> &#60loganGatlin/&#62 </title><link rel="icon" href="resources/favicon.svg" type="image/x-icon"/><style>
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"/><meta content="width=device-width, initial-scale=1" name="viewport"/><title> &#60loganGatlin/&#62 </title><link type="image/x-icon" href="resources/favicon.svg" rel="icon"/><style>
/*!
Pure v3.0.0
Copyright 2013 Yahoo!

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title> &#60loganGatlin/&#62 </title><link href="resources/favicon.svg" rel="icon" type="image/x-icon"/><style>
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"/><meta content="width=device-width, initial-scale=1" name="viewport"/><title> &#60loganGatlin/&#62 </title><link href="resources/favicon.svg" rel="icon" type="image/x-icon"/><style>
/*!
Pure v3.0.0
Copyright 2013 Yahoo!
@ -321,6 +321,6 @@ code {
.property {
color: #586e75;
}
</style></head><body><div class="pure-g"><div class="pure-u-1-1"><div class="header"><h1> This page is under construction </h1><h2> Check back later </h2><a class="link" href="/home"><button class="pure-button pure-button-primary button-xlarge">
</style></head><body><div class="pure-g"><div class="pure-u-1-1"><div class="header"><h1> This page is under construction </h1><h2> Check back later </h2><a href="/home" class="link"><button class="pure-button pure-button-primary button-xlarge">
Return Home
</button></a></div></div></div></body></html>

View file

@ -192,12 +192,34 @@
difficult to pull off.
<h2 class="distinct"> Safety </h2>
Creating a memory safe assembly language presents much different challenges
from a compiled language like Rust. There are no compile-time checks or
guarantees, any string of bytes could be interpreted as a "program." The core
design principle of Forte is to make unsecure programs impossible (or at least
very difficult) to express, and to make static analysis simple. This is a delicate
balance to strike - limiting Forte's capabilities necessarily makes it more
cumbersome and less performant.
from a compiled language like Rust. There are no compile-time checks or
guarantees, any string of bytes could be interpreted as a "program." The
core design principle of Forte is to make unsecure programs impossible (or
at least very difficult) to express, and to make static analysis simple.
This is a delicate balance to strike - limiting Forte's capabilities
necessarily makes it more cumbersome and less performant. I believe we are
at a point in history where making this trade-off is the right move. Modern
processors are unbelievably fast, security concerns far outweigh
performance concerns in most use cases. Writing machine assembly by hand is
far less common today, and so the ergonomics of an assembly language are
also less of a concern.
<h2 class="distinct"> Limitations </h2>
Forte is the first programming language I've written, and it was hacked
together in less than 24 hours. It is certainly not production ready, and
not every feature is implemented yet. Other features are technically functional,
but exist as mostly placeholders for when I can find a better way to implement them.
<br/><br/>
Evaluating branching and looping code during the Warmup is very difficult to achieve.
I very quickly run into the
<a class="link" href="https://en.wikipedia.org/wiki/Halting_problem">
Halting Problem</a>,
and feasibility limits where I to try and implement this sort of algorithm on real
hardware. Solutions I've considered are requiring code branches to have the same net effect
on stack size, forcing branches to execute another function rather than exist inline, replacing
loops with some form of recursion, or outright removing branches and loops altogether. Without
solving this problem, it is impossible to make the Warmup phase do its job, and so it is mostly
vestigial. As of now, Forte is only really capable of simple linear programs.
<h2 class="distinct"> Try it Out </h2>
</div>
</Container>

192
nohup.out Normal file
View file

@ -0,0 +1,192 @@
warning: unused imports: `Write`, `cell::RefCell`, `path::Path`
--> /home/logan/fishbowl/src/lib.rs:3:3
|
3 | cell::RefCell,
| ^^^^^^^^^^^^^
4 | future::join,
5 | io::{Cursor, Write},
| ^^^^^
6 | path::Path,
| ^^^^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
warning: field `uniform_buffer` is never read
--> /home/logan/fishbowl/src/draw.rs:108:3
|
103 | pub struct QuickDraw {
| --------- field in this struct
...
108 | uniform_buffer: Buffer,
| ^^^^^^^^^^^^^^
|
= note: `#[warn(dead_code)]` on by default
warning: `fishbowl` (lib) generated 2 warnings (run `cargo fix --lib -p fishbowl` to apply 1 suggestion)
warning: unused import: `tiny_http::Header`
--> src/get.rs:6:5
|
6 | use tiny_http::Header;
| ^^^^^^^^^^^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
warning: unused variable: `query`
--> src/get.rs:14:13
|
14 | let (url, query) = url.split_once('?').unwrap_or((url, ""));
| ^^^^^ help: if this is intentional, prefix it with an underscore: `_query`
|
= note: `#[warn(unused_variables)]` on by default
warning: function `graceful_cleanup` is never used
--> src/main.rs:15:4
|
15 | fn graceful_cleanup() {
| ^^^^^^^^^^^^^^^^
|
= note: `#[warn(dead_code)]` on by default
warning: `server` (bin "server") generated 3 warnings (run `cargo fix --bin "server"` to apply 1 suggestion)
Finished `release` profile [optimized] target(s) in 0.11s
start.sh: 3: watchexec: not found
18:35 INFO - Get AT "/home"
warning: unused imports: `Write`, `cell::RefCell`, `path::Path`
--> /home/logan/fishbowl/src/lib.rs:3:3
|
3 | cell::RefCell,
| ^^^^^^^^^^^^^
4 | future::join,
5 | io::{Cursor, Write},
| ^^^^^
6 | path::Path,
| ^^^^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
warning: field `uniform_buffer` is never read
--> /home/logan/fishbowl/src/draw.rs:108:3
|
103 | pub struct QuickDraw {
| --------- field in this struct
...
108 | uniform_buffer: Buffer,
| ^^^^^^^^^^^^^^
|
= note: `#[warn(dead_code)]` on by default
warning: `fishbowl` (lib) generated 2 warnings (run `cargo fix --lib -p fishbowl` to apply 1 suggestion)
warning: unused import: `tiny_http::Header`
--> src/get.rs:6:5
|
6 | use tiny_http::Header;
| ^^^^^^^^^^^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
warning: unused variable: `query`
--> src/get.rs:14:13
|
14 | let (url, query) = url.split_once('?').unwrap_or((url, ""));
| ^^^^^ help: if this is intentional, prefix it with an underscore: `_query`
|
= note: `#[warn(unused_variables)]` on by default
warning: function `graceful_cleanup` is never used
--> src/main.rs:15:4
|
15 | fn graceful_cleanup() {
| ^^^^^^^^^^^^^^^^
|
= note: `#[warn(dead_code)]` on by default
warning: `server` (bin "server") generated 3 warnings (run `cargo fix --bin "server"` to apply 1 suggestion)
Finished `release` profile [optimized] target(s) in 0.11s
start.sh: 3: watchexec: not found
18:36 INFO - Get AT "/home"
18:36 INFO - Get AT "/home"
19:09 INFO - Get AT "/robots.txt"
19:09 INFO - Get AT "/"
19:09 INFO - Get AT "/home"
19:09 INFO - Get AT "/home"
19:09 INFO - Get AT "/home"
19:09 INFO - Get AT "/favicon.ico"
19:09 INFO - Get AT "/resources/favicon.svg"
19:09 INFO - Get AT "/resources/favicon.svg"
19:14 INFO - Get AT "/home"
19:14 INFO - Get AT "/home"
19:14 INFO - Get AT "/resume.pdf"
19:14 INFO - Get AT "/home"
19:14 INFO - Get AT "/projects/http-server"
19:15 INFO - Get AT "/projects/forte"
19:16 INFO - Get AT "/projects/forte"
warning: unused imports: `Write`, `cell::RefCell`, `path::Path`
--> /home/logan/fishbowl/src/lib.rs:3:3
|
3 | cell::RefCell,
| ^^^^^^^^^^^^^
4 | future::join,
5 | io::{Cursor, Write},
| ^^^^^
6 | path::Path,
| ^^^^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
warning: field `uniform_buffer` is never read
--> /home/logan/fishbowl/src/draw.rs:108:3
|
103 | pub struct QuickDraw {
| --------- field in this struct
...
108 | uniform_buffer: Buffer,
| ^^^^^^^^^^^^^^
|
= note: `#[warn(dead_code)]` on by default
warning: `fishbowl` (lib) generated 2 warnings (run `cargo fix --lib -p fishbowl` to apply 1 suggestion)
warning: unused import: `tiny_http::Header`
--> src/get.rs:6:5
|
6 | use tiny_http::Header;
| ^^^^^^^^^^^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
warning: unused variable: `query`
--> src/get.rs:14:13
|
14 | let (url, query) = url.split_once('?').unwrap_or((url, ""));
| ^^^^^ help: if this is intentional, prefix it with an underscore: `_query`
|
= note: `#[warn(unused_variables)]` on by default
warning: function `graceful_cleanup` is never used
--> src/main.rs:15:4
|
15 | fn graceful_cleanup() {
| ^^^^^^^^^^^^^^^^
|
= note: `#[warn(dead_code)]` on by default
warning: `server` (bin "server") generated 3 warnings (run `cargo fix --bin "server"` to apply 1 suggestion)
Finished `release` profile [optimized] target(s) in 0.13s
19:19 INFO - Get AT "/projects/forte"
19:20 INFO - Get AT "/projects/forte"
19:22 INFO - Get AT "/projects/forte"
19:24 INFO - Get AT "/projects/forte"
19:25 INFO - Get AT "/"
19:25 INFO - Get AT "/home"
19:26 INFO - Get AT "/projects/forte"
19:40 INFO - Get AT "/robots.txt"
19:40 INFO - Get AT "/"
19:40 INFO - Get AT "/home"
19:40 INFO - Get AT "/home"
19:40 INFO - Get AT "/home"
19:40 INFO - Get AT "/favicon.ico"
19:40 INFO - Get AT "/resources/favicon.svg"
19:40 INFO - Get AT "/resources/favicon.svg"
19:40 INFO - Get AT "/projects/forte"
19:41 INFO - Get AT "/projects/forte"
19:41 INFO - Get AT "/projects/forte"
19:42 INFO - Get AT "/home"

View file

@ -23,10 +23,10 @@ fn graceful_cleanup() {
.arg(format!("{}", last_pid))
.output()
.unwrap();
},
}
None => {
log::warn!("Did not find previous PID");
},
}
};
let pid = std::process::id();
let mut file = std::fs::File::create(PID_PATH).unwrap();
@ -37,13 +37,12 @@ fn graceful_cleanup() {
async fn main() {
// graceful_cleanup();
let _h = logging::init();
// let ssl = tiny_http::SslConfig {
// certificate:
// include_bytes!("../lgatlin.dev.cert").to_vec(),
// private_key:
// include_bytes!("../../lgatlin.dev.priv").to_vec(), };
// let server = Server::https("0.0.0.0:443", ssl).unwrap();
let server = Server::http("0.0.0.0:8080").unwrap();
let ssl = tiny_http::SslConfig {
certificate: include_bytes!("../lgatlin.dev.cert").to_vec(),
private_key: include_bytes!("../../lgatlin.dev.priv").to_vec(),
};
let server = Server::https("0.0.0.0:443", ssl).unwrap();
// let server = Server::http("0.0.0.0:8080").unwrap();
let router = Arc::new(Router::new());
let post = Arc::new(PostHandler);
@ -112,11 +111,7 @@ async fn main() {
}
}
async fn handle_connection(
mut request: Request,
route: Arc<Router>,
post: Arc<PostHandler>,
) {
async fn handle_connection(mut request: Request, route: Arc<Router>, post: Arc<PostHandler>) {
use tiny_http::*;
let response = match request.method() {
Method::Get | Method::Head => route.construct_response(request.url()).await,