commit a4f689e78cdd9a7fadda7d399cb78997c8bd7e6f
parent 4e86f87db8e5cd5414aa23ef87b9036df4ea47f6
Author: Samdal <samdal@protonmail.com>
Date: Mon, 24 Feb 2025 03:36:35 +0100
fix old projects
Diffstat:
1 file changed, 98 insertions(+), 96 deletions(-)
diff --git a/_posts/2025-02-23-my-old-projects.md b/_posts/2025-02-23-my-old-projects.md
@@ -7,102 +7,113 @@ comments: true
tags: [writing, programming, electronics, C]
---
-I mostly developed as a programmer through personal projects, reading others code, and watching YouTube.
+I mostly developed as a programmer through personal projects, reading good code I've found and watching YouTube.
-When it comes to other people's code, [Gunslinger](https://github.com/MrFrenik/gunslinger) and later the [RAD Debugger](https://github.com/EpicGamesExt/raddebugger) have thought me the most.
+When it comes to other people's code, the [Gunslinger graphics framework](https://github.com/MrFrenik/gunslinger) and later the [RAD Debugger project](https://github.com/EpicGamesExt/raddebugger) have taught me the most.
-As for videos, at first I actually watched YouTubers like [The Cherno](https://www.youtube.com/@TheCherno), [Bisqwit](https://www.youtube.com/@Bisqwit) and [javidx9](https://www.youtube.com/@javidx9),
-and later people you can see in [this post]({% post_url 2025-02-21-Software-Rants %}).
+As for videos, at first I actually watched YouTubers like [The Cherno](https://www.youtube.com/@TheCherno), [Bisqwit](https://www.youtube.com/@Bisqwit) and [javidx9](https://www.youtube.com/@javidx9).
+I have also watched a lot of different electronics channels, but I won't be mentioning them here.
+Later i started watching the people you can see in [this post]({% post_url 2025-02-21-Software-Rants %}), but I don't spend much time watching programming YouTubers anymore.
-It's harder to concisely say the projects I've done, so I have some of them listed here.\
-There are some projects which I didn't bother mentioning, or are proprietary.
+It's harder to concisely say the projects I've done, so I have some of them listed here.
## Unreal Engine
-I started my programming journey learning C++ for Unreal engine using [Udemy](https://www.udemy.com/course/unrealcourse) during the first summer break of secondary school.
-Here I followed along as they thought the basics of C++, then jumped into developing some simple games.
+I started my programming journey during the first summer break of secondary school. I used a [Udemy course](https://www.udemy.com/course/unrealcourse) to learn C++ for the Unreal engine.
-I was really overwhelmed, and couldn't solve anything on my own. But I got a large stream of info, and it set me up for further learning.
+Initially I was really overwhelmed. I couldn't solve anything on my own, but I got a large stream of info. It set me up for further learning.
-After I had worked my way through a good chunk of the course, I started getting a bit bored, and wanted to try making a game on my own.
-To make it I ended up using Blueprint, but I just got stuck at rudimentary logic and math.
+I started getting bored after working through a good chunk of the course.
+This made me attempt making a game on my own. Instead of C++ I used Blueprint, but I still got stuck at rudimentary logic and math.
<a name="weeb-bot"> <a/>
## Weeb Bot
-"[Weeb boot](https://github.com/Samdal/WeebBot)" was my first independent project, as cringe at it may be. It was a discord bot written in Golang.
+As cringe as it may be, "[Weeb boot](https://github.com/Samdal/WeebBot)" was my first real independent project. It was a discord bot written in Golang.
This project was made in 2018-2019 during secondary school (I was like 14-15 years old).
-I didn't really know anything about programming practices, but I could read examples and make if statements.
+I didn't really know anything about programming practices, but I could read examples and write if statements.
-The bot mostly did some simple storage, automated responses, string transformations and web scraping.\
-I later added the [anilist GraphQL API](https://anilist.co/graphiql) to it.
+The bot mostly provided storage retrieval, automated responses, string transformations and web scraping.\
+I later added the [Anilist GraphQL API](https://anilist.co/graphiql) to it.

{: style="text-align: center;"}
## Drones
-I have been involved in making two drones so far. The first one was mostly made by my dad. He made the main structure using wood and plastic boxes.
-It was then fitted it with a commercial flight-controller and motors.
-It never flew that great though, which is why we decided to buy a ready-made kit for a drone frame, and a brand new flight-controller. Although I assembled it and solder it together, I never got far enough to fly it or test it properly.
+I have been involved in making two drones so far.
+
+The first one was mostly made by my dad. He made the main structure using wood and a plastic box for the electronics housing.
+It was then fitted it with a commercial flight-controller and motors. It never flew that great when we tested it, which is why we decided to buy a ready-made kit for a drone frame.
+
+This time I assembled and solder it together, I never got far enough to fly it or test it properly.
+Partially because the configuration tool for the new flight-controller was really hard to work with, and I was unsure if I had some broken connections.
+I didn't really make it in a repairable manner, so it was hard to check.
## Snow-plower
The snow-plower was a project I made during roughly the same time as [Weeb Bot](#weeb-bot), maybe slightly later.
-It was made with a raspberry PI running [ROS](https://www.ros.org/). The main navigation and mapping method was a lidar. It would then create a path to plow snow autonomously, a bit like a robot vacuum but for snow.
+It was made with a raspberry PI running [ROS](https://www.ros.org/). The main navigation and mapping were done with a lidar.

{: style="text-align: center;"}
-The snow-plower used an old defective snow blower (it had tracks, so it looked cool).
+It was then going to use it's sensor information to autonomously plow the snow, a bit like a robot vacuum.
+
+The snow-plower's hull was an old defective snow blower (it had tracks, so it looked cool).
The plan was to fit it with electro motors to replace the gasoline engine that I removed.
-The project never got further than very rudimentary mappings with the lidar and half-working simulations, but it would've been cool to complete it.
+The project never got further than very rudimentary mappings with the lidar and half-working simulations.
+It would be cool to complete it sometime though now that I'm more experienced.
<a name="traffic-light"></a>
## Traffic light
-A traffic light simulation I made with an Arduino. This project was the first time I tried to properly use OOP, which I never ended up liking.
-Read my [post about OOP]({ % post_url 2025-02-22-implications-of-OOP }), or my [my list of software rants worth watching]({% post_url 2025-02-21-Software-Rants %}) if you want to know more about my stance about it now.
+I made a traffic light simulation with an Arduino. This project was the first time I properly tried to use OOP, which I never ended up liking.
+Read my [post about OOP]({ % post_url 2025-02-22-implications-of-OOP }), or [my list of software rants worth watching]({% post_url 2025-02-21-Software-Rants %}) if you want to know more about my stance about it now.
-This was actually a school project, although it never really ended up counting towards the grade since there was such a low completion rate.
+This was actually a school project. It never really ended up counting towards my grade, since there was such a low completion rate.

{: style="text-align: center;"}
## Anders Tale (Godot)
-This is the proper "game" I've been working on. I originally started in early 2021. Right after I did the [Traffic Light](#traffic-light). I've been programming the game mostly alone, but it's a "group" project kind of.
+This is the proper "game" I've been working on. Originally I started working on it in early 2021, right after I did the [Traffic Light](#traffic-light).
-The original idea for the game isn't mine. It was one in my friend group's, and the game has been a running joke for a while.
+I've been mostly programming on the game alone, but it's a "group" project.
+The original idea for the game wasn't mine, it was a friend who came up with it. The concept of the game has been a running joke in my friend group for many years.
-This game has been an on-an off effort from me, and main source code is not something I have public. There is a joke [website](https://stelaug.github.io/) for the game though (not made by me).
+Programming on the game has been an on-and off effort from me. The main source code is not something I have public, but there is a [joke website](https://stelaug.github.io/) you can check out (not made by me).

{: style="text-align: center;"}
-The game was always made with Co-Op in mind. Although the campaign was supposed to be the main highlight of the game, the PvP mode ended up seeing the most development. The free-for-all game mode was actually pretty fun, and we genuinely played it.
+The game was made with Co-Op in mind. The campaign was supposed to be the highlight of the game, but the PvP mode ended up seeing the most development.
+The free-for-all was actually very fun, and we genuinely played it.

{: style="text-align: center;"}
-The game was made in GDScript, and started development in Godot 3. One of the biggest stop-points was that I couldn't get lighting to be anywhere near performant, so the game looked pretty bad.
+The game was made using GDScript and started development in Godot 3.
+One of the biggest stop-points was that lighting wasn't anywhere near performant, so the game looked pretty bad.
-I actually recently did some development on it during the end of summer break in 2024. I began from a clean slate in Godot 4, and it was surprising how much better I am at programming since I first had a go at the game. The stopper this time was that I have gotten so used to working without game engines, that it almost felt in the way. Some data-oriented approaches I want to do just require you to fight against the engine, which was a bit painful. I should try to have a go at it again sometime though.
+I actually picked the project up again during the end of summer break in 2024. I started fresh from a clean slate in Godot 4, and it was surprising how far I've come as a programmer.
+The stopper that time was that I have gotten so used to working without game engines that it almost felt in the way. Some data-oriented approaches makes you to fight against it, which was a bit painful.
+I should try to have a go at it again though.
<a name="rnm"></a>
## Rick & Morty Portal Gun
-Together with a friend from primary school, we made a [Rick & Morty portal gun](https://github.com/Samdal/r-and-m-portal-gun). He led the physical design, while I did the electronics.
+I made a [Rick & Morty portal gun](https://github.com/Samdal/r-and-m-portal-gun) together with a friend from primary school. He led the physical design, while I did the electronics.
-The project was made in a pretty short time during late May - early June of 2021, it was meant as a parting gift my friend was supposed to give.
-(I have not seen Rick & Morty myself)
+The project was made in a pretty short time during late May - early June of 2021. The portal gun was meant as a parting gift my friend was going to give to someone.
-It was made using an Arduino, an mp3 player, a rotary encoder, and a 3-wide 7-segment display.\
-It had a boot-up sequence, and allowed you to "select" different world co-ordinates, with a bias towards C137.
-Clicking the rotary encoder fired the gun, enabling the front lights and playing a sound.
+It was made using an Arduino, an mp3 player, a rotary encoder, and a three wide 7-segment display.\
+It had a boot-up sequence, and allowed you to "select" different world coordinates, with a bias towards C137.
+Depressing the rotary encoder fired the gun, enabling the front lights and playing a sound effect.
It was powered with AA batteries.

@@ -112,7 +123,7 @@ It was powered with AA batteries.
## Minesweeper
-[Minesweeper](https://github.com/Samdal/minesweeper) was my first C project, and it marked the beginning of a new era for me. I did it during the end of April in 2021, and it used Raylib to do the graphics.
+[Minesweeper](https://github.com/Samdal/minesweeper) was my first C project, and it marked the beginning of a new era for me. It was made during the end of April in 2021, and used Raylib to do the graphics.

{: style="text-align: center;"}
@@ -120,12 +131,12 @@ It was powered with AA batteries.
<a name="gs_snake"></a>
## gs_snake
-[gs_snake](https://github.com/Samdal/gs_snake) was a super simple snake game I made with [Gunsligner](https://github.com/MrFrenik/gunslinger).
+[gs_snake](https://github.com/Samdal/gs_snake) was a snake clone I made with [Gunsligner](https://github.com/MrFrenik/gunslinger).
-I have since then made programmed a lot with gunslinger, and I am active in it's discord server.
-Discovering gunslinger has been the most developing part for me as an early developer.
+I have since then programmed a lot with gunslinger, and I am active in it's discord server.
-It lead me towards the path of discovering new ways to program. I learned a lot from reading John's code, and I found out about Jonathan Blow, Casey Muratory, Handmade Hero and Ryan Fleury.
+Discovering gunslinger was a critical part for my development as an early programmer.
+It made me discover new ways to program. I learned a lot from reading John's code. Through it's community, I also learned about Jonathan Blow, Casey Muratory, Handmade Hero and Ryan Fleury.

{: style="text-align: center;"}
@@ -133,9 +144,10 @@ It lead me towards the path of discovering new ways to program. I learned a lot
<a name="HS"></a>
## HS
-[HS](https://github.com/Samdal/hs) is an OpenGL wrapper. It mostly just simplifies OpenGL resource creation and usage.
+[HS](https://github.com/Samdal/hs) is an OpenGL wrapper. It mostly simplifies resource creation and usage.
-I wouldn't recommend using it, it was simply something I wanted to make while I was following along [Learn OpenGL](https://learnopengl.com/) after I completed [gs_snake](#gs_snake).
+It was a project I always wanted to make while I was following along [Learn OpenGL](https://learnopengl.com/) after I completed [gs_snake](#gs_snake).
+The project is very incomplete, as I never made anything proper with it.

{: style="text-align: center;"}
@@ -143,34 +155,34 @@ I wouldn't recommend using it, it was simply something I wanted to make while I
## Anders Tale (C version)
-I figured I could use [HS](#HS) to make something. Since I already had the ideas for anders tale laid out, and it was a fairly simple 2D game. I thought that would be a nice way to have some focus.
-
-I don't remember that much from it, but I tried to apply some of the ideas I got from Jonathan Blow in the way I did my entities, by separating out hot/cold.
+I figured I could use [HS](#HS) to make something, and re-making anders tale seemed like fun. I thought that would be a nice way to have some focus.
-The game had a simple tile-map system, and a AABB collision system. It also supported "allowed-areas", i.e the player has to stay inside a room/corridor, instead of mapping each wall as large rectangles.
+The only notable part about the game was it's tile-map system and a AABB collision. It also supported "allowed-areas", which forced the player to stay inside a room, instead of mapping each wall as large collision shapes.
I never got that far with this version of anders tale though.
## Anders Tale Room editor
-[Anders Tale Room editor](https://github.com/Samdal/anders_tale_room_editor) is a TileMap editor for the C version of Anders Tale which I wanted to try myself at making.
+[Anders Tale Room editor](https://github.com/Samdal/anders_tale_room_editor) was the tile-map editor for the C version of Anders Tale.
The project was made with [HS](#HS) and [Nuklear](https://github.com/Immediate-Mode-UI/Nuklear) for the Gui.
+This project was my first real introduction to serialisation and de-serialisation, and I made a custom file-format for the tile-maps.
+During the project I also added font rendering through STB TrueType, which taught me a lot.
+

{: style="text-align: center;"}
## Ghostbusters Costume
-The [Ghostbusters Costume](https://github.com/Samdal/ProtonPack) is another project I made together with my friend from primary, or rather, this is the main project we've had together.
-
-We are both avid Ghostbusters fans, and decided during primary school that we were going to make a ghostbusters costume one day. We have made many revisions, probably like 4 in total I think?
+The [Ghostbusters Costume](https://github.com/Samdal/ProtonPack) is another project I made together with my friend from primary. This is the main project we've had together.
-Because of this the code and electronics has gone through many revisions as well.
+We are both avid Ghostbusters fans. During primary school we decided that one day we were going to make a ghostbusters costume.
+As with the [Rick & Morty Portal Gun](#rnm), my friend did most of the physical design, while I did the electronics.
-All of them before the were awful attempts that would've never seen success. As with the [Rick & Morty Portal Gun](#rnm), my friend did most of the physical design and leading, while I did the electronics.
+We made many revisions over the years, naturally all of the early ones were awful attempts as we were very young.
-The project used an arduino mega, a mp3 player (same as in the portal gun), neopixels, normal leds, audio amplifier, a lithium drill battery, both a 12V and 5V supply, vibrator motor in the gun, a bunch of buttons and switches and a rotary encoder. Pretty much all lights, sounds and effects are made to be awesome and somewhat movie accurate.
+The final project used an arduino mega connected to an mp3 player, neopixels, normal leds, audio amplifier, a lithium drill battery, both a 12V and 5V supply, vibrator motor in the gun, a bunch of buttons and switches and a rotary encoder. All the lights, sounds and effects were made to be awesome and movie accurate.


@@ -181,16 +193,18 @@ The project used an arduino mega, a mp3 player (same as in the portal gun), neop
[SE](https://github.com/Samdal/se), the *Simple Editor*
-This one is actually a fairly decently sized project. I mostly made it in December 2021 and early 2022. My main editor is Doom Emacs, so it is essentially a feature copy from that.
+This project was actually a fairly decently sized project. I mostly made it during December 2021 and early 2022.
+
+My main editor was (and still is) Doom Emacs. Emacs is extremely slow, and I envisioned an editor with the features that I used without the bloat.
-I started off with the code base of [ST, the Suckless Terminal](https://st.suckless.org/). I ripped out the "terminal" part and was left with a simple monospace text renderer, which only pretty much only used X11 and Xft as it's dependencies.
+I started off with the code base of [ST, the Suckless Terminal](https://st.suckless.org/). I ripped out the "terminal" part and was left with a minimal X11/Xft monospace text renderer.
-It's made in a super simple and Suckless fashion. It's configured through changing the "source file", i.e a `config.h`/`config.c`.
-SE has a callback interface which allows you to register extensions without inserting code into the main files.
+SE continued in a simple and Suckless fashion. It was configured through changing the `config.c` file.
+It had a callback interface which allowed you to register extensions without inserting code into the core files.
-I didn't really know anything about parsing files or using regex for that matter, so the syntax highlighting and auto-indents are done with a custom state-machine-like rule system.
+The syntax highlighting and auto-indents are done with a custom state-machine-like rule system.
-The editor had *most* of your everyday vim key-binds. The main thing it had missing was macros and markers.
+I started implementing a fairly complete vim support, which was a larger undertaking than I expected. The main missing features were only macros and markers.


@@ -199,13 +213,12 @@ The editor had *most* of your everyday vim key-binds. The main thing it had miss
## ArduinoNative
-[ArduinoNative](https://github.com/Samdal/ArduinoNative) is a header-only C++ project which implements the same top-level features as the Arduino library.
+[ArduinoNative](https://github.com/Samdal/ArduinoNative) was a header-only C++ project which implemented the same top-level features as the Arduino library.
-It also adds some debug helper functionality, and ways of interfacing with the "virtual board".
+It used the console to expose a virtual board interface and monitoring functionality.
-This project is probably the most usable, of the bunch. I don't really think the code is that great, but the interface is pretty clean.
-
-Compared to other ways of simulating an arduino, or otherwise working with one without having physical hardware connected, using ArduinoNative is extremely simple.
+TArduinoNative is probably the most usable of my projects. I don't really think the code is that great, but the interface is pretty clean.
+Compared to other ways of simulating an arduino, using ArduinoNative is very simple.
Serial and AnalogRead Example
```
@@ -261,22 +274,20 @@ nisse __
|____)_)
```
-I kind of made this project during an evening in November of 2022, I did some cleanup and additions during the following week though.
+I made this project during an evening in November of 2022, but I did some cleanup and additions during the following week.
-It's basically just a S expression parser with some macro helpers.
-It's made raw without a tokenzier, and with only libC.
-If i were to make it again I would use a slice based string, arena allocator and made it with a tokenizer.
+It's basically just an S expression parser with some helper macros.
+Like my previous parsing projects, it's made raw without a tokenzier.
+If i were to make it again I would use a slice based string, an arena allocator and made it with a tokenizer.
It doesn't support escaped characters, which is probably the main feature it lacks.
-This project would've been a great exercise in making a more proper parser though, so I might re-do it.
-
+This project would've been a good exercise in making a proper parser, so I might re-do it.
## gs_ddt
-[Gunsligner Drop-Down Terminal](https://github.com/Samdal/gs_ddt).
-It's a simple drop-down terminal I decided to write one day in late 2022 when I had just started college.
-It's made for development use in Gunslinger.
+[Gunsligner Drop-Down Terminal](https://github.com/Samdal/gs_ddt) was a simple debug terminal I decided to write when I started college.
+It was made for invoking custom commands inside your game. It's actually been very useful, and I've had it in all my gunslinger projects since.
I also made an [example program](https://github.com/Samdal/gs_ddt_ex) for it.
@@ -285,22 +296,22 @@ I also made an [example program](https://github.com/Samdal/gs_ddt_ex) for it.
## gs_avdecode
-[gs_avdecode](https://github.com/Samdal/gs_avdecode) is video decoder for embedding in gunslinger which uses the avcodec API from ffmpeg.
+[gs_avdecode](https://github.com/Samdal/gs_avdecode) was video decoder for embedding in gunslinger, which uses the avcodec API from ffmpeg.
-I also made an [example program](https://github.com/Samdal/gs_avdecode_ex) for this utility.
+I made an [example program](https://github.com/Samdal/gs_avdecode_ex) for the utility too.
-The latest version of the program isn't actually the one github, as I have decided to keep it private (it's a bit more embedded into work code now). The newer version is quite a bit better though.
+The latest revision of the program isn't the one github, as I decided to keep it private (it's a bit more integrated into work code now).
-I still think `gs_avdecode` is a meh reference if you wish to learn how to use the avcodec. There are some examples out there, and the documentation isn't that bad, but I never saw a simple and mostly complete example like `gs_avdecode`.
+I still think `gs_avdecode` is an alright reference if you wish to learn avcodec.
## gs_bucket_array
-[gs_bucket_array](https://github.com/Samdal/gs_bucket_array) is a generic data structure for gunslinger.
+[gs_bucket_array](https://github.com/Samdal/gs_bucket_array) was a generic data structure for gunslinger.
-It's similar to `std::deque`. It's basically a dynamic array which contains pointers to *chunks* or *buckets*. This gives it fast insert/delete, while also being pointer stable.
+It operates similar to `std::deque`. Essentially it's a dynamic array which contains pointers to *chunks* or *buckets*. The array grows by adding a new bucket, which gives it fast insert/delete times while also being pointer stable.
-The implementation also has an optional packed free-list.
+The implementation additionally came with an optional packed free-list.
-I don't use this project anymore though, I just use linked lists since they are simpler.
+I don't use this project anymore though, as I would rather use a linked lists or static allocation.
```
gs_bucket_array(float) ba = gs_bucket_array_new(float, 100); // Bucket array with internal 'float' data, where each bucket is 100 floats
@@ -316,17 +327,6 @@ uint32_t ba_size = gs_bucket_array_size(ba) // returns index
gs_bucket_array_free(ba) // Free's the entire array, make sure your own elements are free'd first
```
-## meep
-[meep](https://github.com/Samdal/meep) is just a dumb tool that sends a desktop notification if you type `meep`, `mehehe` or `gloop`.
-
-It uses `libnotify` for the notifications, and X11 for the keylogger.
-
-Yes, X11 lets programs just keylog everything.\
-Yes, I made this in like a couple hours because I figiured I hadn't done a personal project in a while.
-
-
-{: style="text-align: center;"}
-
## awaC
[AWA5.0](https://github.com/TempTempai/AWA5.0) is a stack-based [esoteric programming language](https://en.wikipedia.org/wiki/Esoteric_programming_language) where you manually write the bits with "wa" or " awa".
@@ -334,11 +334,13 @@ Yes, I made this in like a couple hours because I figiured I hadn't done a perso

{: style="text-align: center;"}
-The original implementation was done in JavaScript, and others have also made their own interpreters and compilers for it. I made mine in C and called it [awaC](https://github.com/Samdal/awaC?tab=readme-ov-file)
+The original implementation was done in JavaScript. Others have also made their own interpreters and compilers for it. I made mine in C and called it [awaC](https://github.com/Samdal/awaC?tab=readme-ov-file)
-Originally the plan was to use this project to make a graphical debugger for the language, but I never got to that part.
+Originally the plan was to use this project to make a graphical debugger, but I never got to that part.
+The only debug functionality the interpreter provides is printing the stack and program counter.
-I did add pretty useful printing of the stack and program counter. Together with the `syscall` operation I added, I ended up making a web server in this language, and subsequently "hosting" a JavaScript interpreter of AWA5.0 in my AwaC web server.
+ After watching a Tsoding stream about making a web server in fasm, I knew I wanted to do that with AWA5.0. All I needed was to extend the byte-code with a `syscall` operation, and painstakingly write over a kilobyte of `awa awawaw awawaw awawa`.
+The website I ended up hosting was a JavaScript interpreter of AWA5.0.

{: style="text-align: center;"}