2023-06-18 12:57:54 +00:00
<!DOCTYPE html>
< html lang = "en" >
< head >
2023-09-26 13:29:55 +00:00
< title > Andrew's Projects< / title >
2023-06-18 12:57:54 +00:00
< meta charset = "utf-8" >
< meta name = "description" content = "The Homepage of Andrew Lalis." >
< meta name = "viewport" content = "width=device-width, initial-scale=1" >
2023-07-22 18:45:42 +00:00
< script src = "scripts/themes.min.js" > < / script >
2023-06-18 12:57:54 +00:00
< noscript > < style > . jsonly { display : none !important ; } < / style > < / noscript >
< link rel = "stylesheet" href = "styles/style.css" type = "text/css" >
2023-10-05 01:08:23 +00:00
< script src = "scripts/sitestat.js?remote-url=sitestat.andrewlalis.com" async > < / script >
2023-07-22 18:45:42 +00:00
2023-06-18 12:57:54 +00:00
< link rel = "stylesheet" href = "styles/project.css" type = "text/css" >
< link rel = "stylesheet" href = "vendor/prism.css" data-noprefix >
< script src = "vendor/prism.js" > < / script >
< / head >
< body >
< header class = "page-header" >
< h1 > Andrew's Projects< / h1 >
< nav >
< div >
< a href = "index.html" > Home< / a >
2023-06-22 07:17:16 +00:00
< a href = "articles.html" > Articles< / a >
2023-06-18 12:57:54 +00:00
< a class = "page-header-selected" href = "projects.html" > Projects< / a >
< a href = "training.html" > Training< / a >
2024-03-10 17:00:13 +00:00
< a href = "garden.html" > Garden< / a >
2023-06-18 12:57:54 +00:00
< a href = "contact.html" > Contact< / a >
2023-07-23 23:22:30 +00:00
< a href = "logbook.html" > Logbook< / a >
2023-06-18 12:57:54 +00:00
< / div >
< div >
< a href = "https://github.com/andrewlalis" > GitHub< / a >
< a href = "https://www.linkedin.com/in/andrew-lalis/" > LinkedIn< / a >
< a href = "https://www.youtube.com/channel/UC9X4mx6-ObPUB6-ud2IGAFQ" > YouTube< / a >
< / div >
< / nav >
< button id = "themeToggleButton" class = "jsonly" > Change Color Theme< / button >
< hr >
< / header >
< main >
2023-09-27 20:17:50 +00:00
< article >
< h2 > Active Web Projects< / h2 >
< p >
The following list of links will lead you to various subdomains of andrewlalis.com that host active projects that I'm running. Do note that there's no promise that anything will work as expected; they're my experimental projects.
< / p >
< ul >
< li > < a href = "https://litelist.andrewlalis.com" > LiteList App Demonstration< / a > < / li >
2023-11-05 15:39:58 +00:00
< li > < a href = "https://d-package-search.andrewlalis.com" > D-Lang Package Search Prototype< / a > < / li >
2023-09-27 20:17:50 +00:00
< li > < a href = "https://schematics.andrewlalis.com" > Minecraft/Create-Mod Schematic Exporter< / a > < / li >
< li > < a href = "https://logbook.andrewlalis.com" > Backend API for this site's logbook< / a > < / li >
< / ul >
< / article >
< h2 > All Projects< / h2 >
< p >
The following projects are a selection that I'm most proud of, or showcase some particular skill or challenge that was overcome. Please see my GitHub page for a full list of my publicly available projects.
< / p >
2024-01-10 00:05:01 +00:00
< div class = "project-card" >
< h2 > < a href = "https://github.com/andrewlalis/perfin" > Perfin< / a > < / h2 >
< p >
A desktop personal finance application that makes it easy to manage your accounts and transactions in a secure manner.
< / p >
< div class = "icons-row" >
< img src = "images/logo_java.svg" class = "lang-icon" alt = "Java programming language logo" >
< / div >
< / div >
2023-09-26 13:58:32 +00:00
< div class = "project-card" >
2023-08-18 14:41:15 +00:00
< h2 > < a href = "https://litelist.andrewlalis.com" > LiteList< / a > < / h2 >
< p >
An extremely barebones web application to demonstrate the viability of my own HTTP server. It's just your average ToDo list app, with basic JWT-based authentication.
< / p >
< p >
2023-08-25 16:02:54 +00:00
If you want to try it out, click the link (this project's title) and create an account. Please avoid storing anything in LiteList that you want to keep secret, as I've not really taken all proper precautions to keep data 100% safe.
2023-08-18 14:41:15 +00:00
< / p >
< div class = "icons-row" >
< img src = "images/logo_d.png" class = "lang-icon" alt = "D programming language logo" >
< img src = "images/logo_vue.svg" class = "lang-icon" alt = "Vue JS framework logo" >
< / div >
2023-09-26 13:58:32 +00:00
< / div >
2023-08-18 14:41:15 +00:00
2023-09-26 13:58:32 +00:00
< div class = "project-card" >
2023-08-01 11:58:39 +00:00
< h2 > < a href = "https://github.com/andrewlalis/AceOfShades" > Ace of Shades< / a > < / h2 >
2023-06-18 12:57:54 +00:00
< 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.
< / p >
2023-06-22 07:17:16 +00:00
< iframe
src="https://www.youtube.com/embed/LHeMhCN6O2Y"
style="width: 100%; min-height: 250px;"
title="YouTube video player"
frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowfullscreen>
< / iframe >
2023-08-01 11:58:39 +00:00
< div class = "icons-row" >
< img src = "images/logo_java.svg" class = "lang-icon" alt = "Java programming language logo" >
< / div >
2023-09-26 13:58:32 +00:00
< / div >
2023-06-18 12:57:54 +00:00
2023-09-26 13:58:32 +00:00
< div class = "project-card" >
2023-08-01 11:58:39 +00:00
< h2 > < a href = "https://github.com/Ace-of-Shades-2" > Ace of Shades 2< / a > < / h2 >
2023-06-18 12:57:54 +00:00
< 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 >
2023-08-01 11:58:39 +00:00
< div class = "icons-row" >
< img src = "images/logo_java.svg" class = "lang-icon" alt = "Java programming language logo" >
< img src = "images/logo_open_gl.png" class = "lang-icon" alt = "OpenGL API logo" >
< / div >
2023-09-26 13:58:32 +00:00
< / div >
2023-06-18 12:57:54 +00:00
2023-09-26 13:58:32 +00:00
< div class = "project-card" >
2023-06-18 12:57:54 +00:00
< h2 > < a href = "https://github.com/andrewlalis/handy-httpd" > Handy-Httpd< / a > < / h2 >
< p >
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 > < code class = "language-d" >
import handy_httpd;
void main() {
HttpServer server = new HttpServer((ref ctx) {
ctx.response.writeBodyString("Hello");
});
server.start();
}
< / code > < / pre >
2023-08-01 11:58:39 +00:00
< div class = "icons-row" >
< img src = "images/logo_d.png" class = "lang-icon" alt = "D programming language logo" >
< / div >
2023-09-26 13:58:32 +00:00
< / div >
2023-06-18 12:57:54 +00:00
2023-09-26 13:58:32 +00:00
< div class = "project-card" >
2023-08-01 11:58:39 +00:00
< h2 > < a href = "https://andrewlalis.github.io/movescript/" > Movescript & Itemscript< / a > < / h2 >
2023-06-18 12:57:54 +00:00
< p >
Simple grammars for concisely defining robotic movement and inventory management for ComputerCraft robots in Minecraft.
< / p >
< p >
Instead of doing this:
< / p >
< pre > < code class = "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 > < code class = "language-lua" >
local ms = require("movescript")
ms.run("2FUDg")
< / code > < / pre >
2023-08-01 11:58:39 +00:00
< div class = "icons-row" >
< img src = "images/logo_lua.png" class = "lang-icon" alt = "Lua programming language logo" >
< / div >
2023-09-26 13:58:32 +00:00
< / div >
2023-06-18 12:57:54 +00:00
2023-09-26 13:58:32 +00:00
< div class = "project-card" >
2023-08-01 11:58:39 +00:00
< h2 > < a href = "https://github.com/andrewlalis/RailSignalAPI" > Rail Signal< / a > < / h2 >
2023-06-18 12:57:54 +00:00
< 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 >
2023-08-01 11:58:39 +00:00
< iframe style = "width: 100%; min-height: 250px;" src = "https://www.youtube.com/embed/eGkM-cJcYD8" title = "Minecraft Web-Based Rail Signalling First Version Showcase" frameborder = "0" allow = "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen > < / iframe >
< div class = "icons-row" >
< img src = "images/logo_java.svg" class = "lang-icon" alt = "Java programming language logo" >
< img src = "images/logo_spring_sm.png" class = "lang-icon" alt = "Spring Framework logo" >
< img src = "images/logo_vue.svg" class = "lang-icon" alt = "Vue JS framework logo" >
< img src = "images/logo_lua.png" class = "lang-icon" alt = "Lua programming language logo" >
< / div >
2023-09-26 13:58:32 +00:00
< / div >
2023-06-18 12:57:54 +00:00
2023-09-26 13:58:32 +00:00
< div class = "project-card" >
2023-06-18 12:57:54 +00:00
< h2 > < a href = "https://github.com/andrewlalis/slf4d" > SLF4D< / a > < / h2 >
< p >
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 > < code class = "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 >
2023-08-01 11:58:39 +00:00
< div class = "icons-row" >
< img src = "images/logo_d.png" class = "lang-icon" alt = "D programming language logo" >
< / div >
2023-09-26 13:58:32 +00:00
< / div >
2023-06-18 12:57:54 +00:00
2023-09-26 13:58:32 +00:00
< div class = "project-card" >
2023-06-18 12:57:54 +00:00
< h2 > < a href = "https://github.com/andrewlalis/streams" > Streams< / a > < / h2 >
< p >
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 >
2023-08-01 11:58:39 +00:00
< div class = "icons-row" >
< img src = "images/logo_d.png" class = "lang-icon" alt = "D programming language logo" >
< / div >
2023-09-26 13:58:32 +00:00
< / div >
2023-08-01 11:58:39 +00:00
2023-09-26 13:58:32 +00:00
< div class = "project-card" >
2023-08-01 11:58:39 +00:00
< h2 > < a href = "https://github.com/andrewlalis/record-net" > Record-Net< / a > < / h2 >
< p >
A Java library for defining common protocol of binary messages to transmit over the network, similar to < a href = "https://protobuf.dev/" > Protocol Buffers< / a > , but for pure Java applications, so it can take advantage of records and avoid code-generation.
< / p >
2023-09-27 20:17:50 +00:00
< p >
This was my first Java project published to the Maven central repository!
< / p >
2023-08-01 11:58:39 +00:00
< div class = "icons-row" >
< img src = "images/logo_java.svg" class = "lang-icon" alt = "Java programming language logo" >
< / div >
2023-09-26 13:58:32 +00:00
< / div >
2023-08-01 11:58:39 +00:00
2023-09-26 13:58:32 +00:00
< div class = "project-card" >
2023-08-01 11:58:39 +00:00
< h2 > < a href = "https://github.com/andrewlalis/CoyoteCredit" > Coyote Credit< / a > < / h2 >
< p >
A web application for students to learn the basics of real-world stock trading through a simplified user interface and simulated accounts.
< / p >
< div class = "icons-row" >
< img src = "images/logo_java.svg" class = "lang-icon" alt = "Java programming language logo" >
< img src = "images/logo_spring_sm.png" class = "lang-icon" alt = "Spring Framework logo" >
< / div >
2023-09-26 13:58:32 +00:00
< / div >
2023-06-18 12:57:54 +00:00
< / main >
< / body >
< / html >