<buttonid="themeToggleButton"class="jsonly">Change Color Theme</button>
<hr>
</header>
<main>
<articleclass="project-card">
<h2><ahref="">Ace of Shades</a></h2>
<p>
A top-down 2D shooter game inspired by <em>Ace of Spades</em>, and was made as a submission the 2021 Java Discord server's Java Jam. Includes a dedicated server, client, and server registry application.
<imgsrc="images/logo_java.svg"class="lang-icon"alt="Java programming language logo">
</article>
<articleclass="project-card">
<h2><ahref="">Ace of Shades 2</a></h2>
<p>
A 3D first-person shooter designed as the successor to <em>Ace of Shades</em>. This was again made as a 2022 Java Discord Java Jam submission, but I continued to develop it well beyond that.
</p>
<imgsrc="images/logo_java.svg"class="lang-icon"alt="Java programming language logo">
<imgsrc="images/logo_open_gl.png"class="lang-icon"alt="OpenGL API logo">
An extremely lightweight and flexible HTTP server implemented in the D programming language. Below is an example of a "<em>Hello world</em>" server that just says "Hello" in response to any request.
</p>
<pre><codeclass="language-d">
import handy_httpd;
void main() {
HttpServer server = new HttpServer((ref ctx) {
ctx.response.writeBodyString("Hello");
});
server.start();
}
</code></pre>
<imgsrc="images/logo_d.png"class="lang-icon"alt="D programming language logo">
Simple grammars for concisely defining robotic movement and inventory management for ComputerCraft robots in Minecraft.
</p>
<p>
Instead of doing this:
</p>
<pre><codeclass="language-lua">
turtle.forward()
turtle.forward()
local success = turtle.up()
while not success do
success = turtle.up()
end
turtle.dig()
</code></pre>
<p>
You can use Movescript to safely move using a simpler syntax:
</p>
<pre><codeclass="language-lua">
local ms = require("movescript")
ms.run("2FUDg")
</code></pre>
<imgsrc="images/logo_lua.png"class="lang-icon"alt="Lua programming language logo">
</article>
<articleclass="project-card">
<h2><ahref="">Rail Signal</a></h2>
<p>
API and web app for designing and managing rail systems, with real-time data updates via websockets. Originally designed for use with Minecraft and the Immersive Railroading mod, but practically can be used anywhere, as long as you've got the right device driver.
</p>
<imgsrc="images/logo_java.svg"class="lang-icon"alt="Java programming language logo">
A common logging interface for D projects, inspired by Java's SLF4J interfaces, but in an idiomatic D way. Any library can make use of SLF4D, while still letting the application developer decide how log messages are handled.
</p>
<p>
Here's an example of how it's used:
</p>
<pre><codeclass="language-d">
import slf4d;
void myFunction(int n) {
infoF!"Called myFunction with n = %d"(n);
for (int i = 0; i < n; i++) {
try {
doSomethingRisky(i);
} catch (Exception e) {
warn("Failed to do something risky.", e);
}
}
}
</code></pre>
<imgsrc="images/logo_d.png"class="lang-icon"alt="D programming language logo">
A library that defines compile-time primitives and helper functions for working with <em>streams</em> of elements. A stream is anything which provides a <code>readFromStream</code> or <code>writeToStream</code> method. Also includes many stream implementations for things like files, sockets, chunked encoding, buffering, and more.
</p>
<imgsrc="images/logo_d.png"class="lang-icon"alt="D programming language logo">