Skip to content

Commit fd45bd3

Browse files
committed
feat: minor content update
improvements to phrasing, style
1 parent 576c415 commit fd45bd3

File tree

12 files changed

+118
-135
lines changed

12 files changed

+118
-135
lines changed

assets/main.css

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,16 +57,12 @@ h6 {
5757
}
5858

5959
.writing {
60-
> h1 {
61-
@apply mb-4;
62-
}
63-
6460
> h2 {
65-
@apply text-3xl mt-4 mb-3;
61+
@apply text-3xl mt-6 mb-3;
6662
}
6763

6864
> h3 {
69-
@apply mt-4 -mb-2;
65+
@apply mt-5 -mb-2;
7066
}
7167

7268
> p {

content/projects/_index.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
---
22
title: "Projects"
33
description: Things I've created
4-
heroType: is-background-light-blue-soft
54
---
65

76
# Projects

content/projects/chat.md

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,30 @@
11
---
22
title: Chat
33
subtitle: An encrypted, ephemeral instant messaging app.
4-
date: 2023-06-12T00:00:00-00:00
4+
date: 2023-06-12T12:00:00-00:00
55
icon: /image/chat.png
6-
Description: |
6+
description: |
77
An encrypted, ephemeral instant messaging app.
88
repository: https://github.com/marcus8448/Chat
9-
heroType: has-background-light-soft
109
languages:
1110
- java
1211
- gradle
1312
---
1413

1514
## About
16-
17-
This was a project that I made in approximately 2 weeks to gain more experience using JavaFX.
18-
This time I avoided FXML and defined the GUI in pure Java.
15+
This was a project that I made in approximately 2 weeks to gain more experience with networking and JavaFX.
1916
It uses a multi-project Gradle build to enable code sharing between the client and server applications,
2017
while keeping them as separate binaries.
2118

2219
I found it interesting to compare the strengths and weaknesses of different cryptographic ciphers for this project.
23-
Originally, everything was based on RSA keys,
24-
until I realized the max block size could not support large messages (and thereby moved to use AES session keys).
20+
RSA keys are used for client/server identities,
21+
while AES keys are used to encrypt the session after the initial handshake.
2522

2623
## Features
27-
2824
* Channel support
2925
* System tray notification support
3026
* Support for sending both text and images
31-
* Messages are encrypted over the network (however, they are not end-to-end encrypted)
27+
* Messages are encrypted over the network (however, they are **not** end-to-end encrypted)
3228
* The server saves no user information
3329
* User accounts are based on RSA keys
3430
* Server just acts as a router
@@ -38,9 +34,7 @@ until I realized the max block size could not support large messages (and thereb
3834
* User account data stored on the client is encrypted with a password using PBKDF2
3935

4036
## Security
41-
4237
### Initial Handshake
43-
4438
Upon connecting to a server, the client and server exchange public RSA keys.
4539
If the server's RSA key has changed,
4640
or the client has never connected to the server before,
@@ -50,18 +44,15 @@ The server then sends a session AES key, encrypted with the client's public key.
5044
This key is used to encrypt all future messages sent between the client and server.
5145

5246
### Message Signatures
53-
5447
All messages are signed with the sender's RSA private key.
5548
Keys can be marked as 'trusted' in the client, and given nicknames.
5649
If a message is signed by a key that is not trusted, the client will display a warning.
5750

5851
### Client-side Security
59-
6052
The client stores user account data in a file encrypted with a PBKDF2 key derived from the user's password.
6153
This prevents the user's account data from being used if the file is stolen.
6254
However, this also means that if the user forgets their password, they will lose all their account data.
6355

6456
### Disclaimer
65-
6657
While I hope the application is secure, I cannot guarantee the security of messages sent.
6758
Use at your own risk!

content/projects/galacticraft.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
---
2-
title: "Galacticraft"
2+
title: Galacticraft
33
subtitle: An advanced space mod for Minecraft.
44
date: 2019-03-18T11:12:29-07:00
55
icon: /image/galacticraft.png
6-
Description: |
6+
description: |
77
A Minecraft mod centered around space exploration using the [FabricMC](https://fabricmc.net/) modding framework.
8-
HeroImage: /image/hero/galacticraft.png
9-
heroType: is-dark
108
repository: https://github.com/TeamGalacticraft/Galacticraft
119
link: https://galacticraft.net/
1210
modrinth: galacticraft-legacy

content/projects/gamemodeoverhaul.md

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,32 @@ title: Gamemode<wbr />Overhaul
33
subtitle: Minecraft mod with over 500,000 downloads
44
date: 2019-02-16T00:00:00-00:00
55
icon: /image/gamemodeoverhaul.png
6-
Description: |
6+
description: |
77
A mod for Minecraft that restores command options removed in the 1.13 update.
88
Also adds some shorthand commands for convenience.
99
repository: https://github.com/marcus8448/MinecraftMods
1010
modrinth: gamemodeoverhaul
1111
curseforge: gamemodeoverhaul
12-
heroType: has-background-light-soft
1312
languages:
1413
- java
1514
- gradle
1615
---
1716

1817
## About
1918

20-
This was my first proper Minecraft modification, originally released in February 2019.
21-
Created in about two weeks, the original goal of this mod was just restore the removed integer `/gamemode` arguments,
22-
but its scope steadily expanded to other commands and aliases.
19+
This was my first published Minecraft modification, originally released in February 2019.
20+
Created in the span of two weeks, the original goal of this mod was to simply restore the integer `/gamemode` arguments
21+
(which were removed in the 1.13 update), but has since expanded to include other commands and aliases.
2322

24-
Now GamemodeOverhaul is a fully configurable mod
25-
that supports over eight versions of Minecraft on two different mod loaders (in a shared codebase utilizing java SPI!).
23+
GamemodeOverhaul supports over eight versions of Minecraft and two different mod loaders.
2624
Since its initial release, GamemodeOverhaul has seen over 500,000 downloads.
2725

2826
## Features
2927

28+
* Supports both Fabric and NeoForge
29+
* Install to your mod loader of choice!
30+
* Fully configurable
31+
* Enable or disable commands (and aliases) as needed
3032
* Restores command arguments removed in 1.13
3133
* `/gamemode 0/1/2/3,s/c/a/sp`
3234
* `/defaultgamemode 0/1/2/3,s/c/a/sp`

content/projects/machinelib.md

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,35 +3,41 @@ title: "Machine<wbr />Lib"
33
subtitle: Library mod for Galacticraft
44
date: 2022-03-05T09:46:52-08:00
55
icon: /image/machinelib.png
6-
Description: |
6+
description: |
77
A library for Minecraft mods that simplifies the implementation of complex blocks that process resources.
88
repository: https://github.com/TeamGalacticraft/MachineLib
9-
heroType: has-background-light-soft
109
languages:
1110
- java
1211
- gradle
1312
---
1413

15-
This library/mod aims to reduce the amount of boilerplate code required to implement blocks with inventories and menus.
16-
1714
## About
15+
MachineLib aims to reduce the amount of boilerplate code required to implement complicated "machine" blocks
16+
that interact with items, fluids and energy.
1817

1918
Before MachineLib existed, Galacticraft used [UniversalComponents](https://github.com/CottonMC/UniversalComponents)
20-
to handle inventories, then [LibBlockAttributes](https://github.com/AlexIIL/LibBlockAttributes).
21-
When we were stuck waiting for these libraries to update,
19+
to handle inventories, before transitioning to [LibBlockAttributes](https://github.com/AlexIIL/LibBlockAttributes).
2220
I decided to try and make my own implementation using the newly standardized
23-
[transfer api](https://github.com/FabricMC/fabric/pull/1553), and created MachineLib.
21+
[transfer api](https://github.com/FabricMC/fabric/pull/1553),
22+
and created this project.
23+
MachineLib is attempts to take a "batteries-included" approach,
24+
with tight integration between the storage and block implementations with a focus on developer ergonomics.
2425

25-
## Features
2626

27-
* Builder-style resource storage (inventory) creation
28-
* Slot resource filtering
29-
* Define slot locations in one place
30-
* Define acceptable external block interactions and player interactions by setting a slot's type
31-
* Comes with a base `BlockEntity` implementation
32-
* Supports player-configurable resource I/O interactions with adjacent blocks
33-
* Minecraft redstone (de)activation
34-
* Supports storage of items, fluids and energy
35-
* Additional utilities for blocks dealing with Minecraft's recipe system
36-
* Comes with extensible `GameTest`s
37-
* Can automatically verify machine functionality
27+
## Features
28+
* Simplified builder-style resource storage (inventory) creation
29+
* Define storage formats and limits in one place
30+
* DRY - prevents repetition in the `BlockEntity`, `Menu`, and `Screen`
31+
* Context-aware slot resource filtering
32+
* Easily treat players and automated/external slot changes separately
33+
* Define acceptable external block interactions and player interactions at the slot level
34+
* Machine blocks have extra features out of the box
35+
* Player-configurable resource I/O interactions with adjacent blocks
36+
* Dynamic model generation reflects port changes in-world
37+
* Comes with a built-in GUI to manage the configuration
38+
* Push/pull transfer automatically handed based on selected ports
39+
* Automatic (de)activation with Minecraft redstone signals
40+
* Extended menu sychronization system
41+
* No longer constrained to pure `int` synchronization
42+
* Comes with an extensible `GameTest` framework
43+
* Allows for full in-world testing of complicated machine setups
Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,26 @@
11
---
2-
title: "v5_cli"
2+
title: v5_cli
33
date: 2022-12-12T22:17:00-08:00
44
icon: /image/v5_cli.png
5-
heroType: has-background-light-soft
6-
Description: A re-implementation of [pros-cli](https://github.com/purduesigbots/pros-cli) in Rust, adding bluetooth upload support.
5+
description: A re-implementation of [pros-cli](https://github.com/purduesigbots/pros-cli) in Rust, adding bluetooth upload support.
76
repository: https://github.com/marcus8448/v5_cli
87
languages:
98
- rust
109
---
1110

12-
# About
13-
11+
## About
1412
After getting frustrated with [pros-cli](https://github.com/purduesigbots/pros-cli)
1513
freezing my terminal (to submit a bug report) every time an error occurred, I decided to create my own implementation.
1614
I chose to (re)write it in Rust mainly to gain experience with the language,
1715
but also because I was already familiar with one of its CLI frameworks, [clap](https://clap.rs/).
1816

1917
Once I had made an app with about the same features as the original,
20-
I left the project alone until I discovered that [direct bluetooth connection](https://gist.github.com/wireboy5/e41444a135d7643c92fc3b83aa69058b)
21-
to the VEX V5 brain was possible.
18+
I left the project alone until I discovered that direct bluetooth connection to the VEX V5 brain was possible
19+
(thanks to this [gist](https://gist.github.com/wireboy5/e41444a135d7643c92fc3b83aa69058b))
2220
This led me to try and enable wireless code upload over bluetooth LE.
23-
Using bluetooth was more difficult than I originally anticipated as bluetooth APIs tend to be asynchronous
24-
and bluetooth connections are significantly less reliable than wired ones.
25-
This required me to rearchitect the project to use asynchronous Rust,
26-
and account for packet loss and/or corruption in-transit.
27-
28-
29-
# Features
21+
The project had to be re-architectured to have more robust error handling (due to packet loss) and to support multiple backends.
3022

23+
## Features
3124
* Connect to V5 robot via usb or wirelessly via bluetooth
3225
* Significantly better throughput compared to VEXnet controller connections.
3326
* Upload binaries
@@ -39,4 +32,4 @@ and account for packet loss and/or corruption in-transit.
3932
* List connected V5 devices
4033
* Keep robot connection alive with a daemon
4134
* Automatically reconnects if connection is lost
42-
* Allows for interaction with standard i/o and the system i/o simultaneously
35+
* Allows for simultaneous interaction with standard i/o and the system i/o

content/projects/robotics/vex-v5.md

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,26 @@
11
---
2-
title: "VEX V5"
2+
title: VEX V5
33
date: 2021-11-16T18:07:43-07:00
44
icon: /image/vex-v5.png
5-
Description: |
5+
description: |
66
I participated in the [Vex Robotics Competition](https://www.vexrobotics.com/v5/competition/)
77
from 2021-2024.
88
repository: https://github.com/marcus8448/VexV5
9-
heroType: has-background-light-soft
109
languages:
1110
- c
1211
- cplusplus
1312
- cmake
1413
---
1514

16-
# About
17-
18-
In 2021, I started competing in the VEX robotics competition.
19-
This was my first real application using C++ (ignoring Arduino).
20-
On the tooling side, I learned about makefiles and managing dependencies in the C/C++ ecosystem.
15+
## About
16+
From 2021-2024, I started competed in the VEX robotics competition.
17+
Being an embedded C/C++ project, I learned lots about cross compilation and build systems.
18+
On the robotics side, I learned some basic control theory to make the robot run as smooth as possible.
2119

2220
To improve IDE integration and remove platform-specific build code,
23-
I rewrote the program's makefile as a CMake project in my second year of robotics.
24-
Compared to Makefiles, I found CMake to be much simpler to use and quickly iterate on.
25-
It handled cross-compilation surprisingly well and made building with different compilers significantly easier.
26-
27-
# Features
21+
I translated the program's makefile into a CMake project.
2822

23+
## Features
2924
* Runtime sensor diagnostic information and debug tools on the screen (LVGL)
3025
* Runtime PID tuning
3126
* Real-time graphing of sensor information

content/projects/website.md

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
---
2-
title: "Website"
2+
title: Website
33
date: 2020-05-24T16:25:24-07:00
44
icon: https://avatars.githubusercontent.com/u/28928887?v=4
5-
Description: |
6-
My portfolio/website. Built with Hugo and Bulma and hosted on GitHub Pages.
5+
description: |
6+
My website. Built with Hugo, styled with TailwindCSS, and hosted on GitHub Pages.
77
repository: https://github.com/marcus8448/marcus8448.github.io
88
link: https://marcus8448.github.io/
9-
heroType: has-background-light-soft
109

1110
languages:
1211
- hugo
@@ -15,21 +14,33 @@ languages:
1514
---
1615

1716
## About
17+
This website is generated using [Hugo] and hosted on GitHub Pages.
18+
The theme is custom-designed using utility classes from [TailwindCSS].
19+
The majority of the icons used on the site are from [Simple Icons] and [Font Awesome].
1820

19-
My original website (2020) was generated using a single handwritten template with Jekyll.
20-
It had a basic navbar and not much else.
21-
I used Jekyll because it was the native site generator for GitHub pages.
21+
This iteration of the website replaced Bulma with Tailwind
22+
to get more fine-grained control over the design of the website.
23+
Another contributing factor was the excessive size of the Bulma CSS stylesheet.
24+
The extensive use of CSS variables in Bulma 1.0 caused the minified stylesheet to exceed 100KB in size.
2225

23-
In 2021, I decided to revamp the website.
24-
This time I used [Bulma](https://bulma.io/) to style the page,
26+
## Previous Versions
27+
### Jekyll (2020-2021)
28+
This was my original website. It was generated with Jekyll, using a single handwritten template.
29+
It had a basic navbar and minimal content.
30+
I used Jekyll out of convenience - it was the native site generator for GitHub pages.
31+
32+
### Jekyll + Bulma (2021-2023)
33+
In 2021, I decided to revamp the design of the website.
34+
This time I used [Bulma] to style the page,
2535
and proper templating to generate the content and layout (e.g., iterating over project pages to generate the index).
2636

27-
In 2023, I replaced Jekyll with [Hugo](https://gohugo.io/) for templating and generation.
37+
### Hugo + Bulma (2023-2025)
38+
In 2023, I replaced Jekyll with [Hugo] for templating and generation.
2839
I decided on Hugo for its strong templating, fast speed, and simple setup.
2940
This time I tried to focus on making the website responsive, rather than solely desktop-oriented.
3041

31-
The current website (as of 2025) now uses TailwindCSS rather than Bulma.
32-
Due to the extensive use of CSS variables in Bulma 1.0 (released 2024), the size of the project grew to over 100KB, minimized.
33-
34-
The majority of the icons used on the site are from [Simple Icons](https://simpleicons.org/)
35-
and [Font Awesome](https://github.com/FortAwesome/Font-Awesome).
42+
[Bulma]: https://bulma.io/
43+
[Font Awesome]: https://github.com/FortAwesome/Font-Awesome
44+
[Hugo]: https://gohugo.io/
45+
[Simple Icons]: https://simpleicons.org/
46+
[TailwindCSS]: https://tailwindcss.com/

0 commit comments

Comments
 (0)