Creating Vault and Getting Back Into Hobby Programming.
I've finally started completing programming projects again! It's been months since I've last been able to, and it's great to be doing it again.
I have always loved programming, I remember the first time I finally got my own laptop, and within a year I had installed Ubuntu 10.04 on it and
had started programming. Interacting with the computer, and being able to take full control (with a lot of asterisks) of your machine and getting
it to do what you want it to, and not what other's have programmed it to do, has always fascinated me, and the incredible nature of computers
will never stop grabbing my attention.
Unfortunately, trauma works in mysterious ways. The last few months I've been unable to muster the willpower to work on stuff without getting reminded of events of
last year, and it was absolutely dreadful. But I won't delve into details in regards to that, as it is not the focus of this post. Instead, I just want to say I'm proud of
myself for finally working through detaching my largest and most beloved passion, programming and technology, from the traumatic events that happened in 2020. So it's time to get back to work! =^w^=
Vault was a project I started because I didn't want to use what I had used last year, Nextcloud,
as I had no personal use for such a robust solution. My primary use for remote file storage is to store small, critical files such as password databases and other important documents.
So I thought to myself, "This would be a really fun project!" So I started work on it this week.
When deciding what programming stack I wanted to use for Vault, I wanted to keep it as simple as possible, and as direct as possible. I have a deep, personal hatred for modern software, and how
it is not only heavily bloated, but it is designed and developed to remove any and all control from the user. From overly complex code, to restrictive settings, to horrible web apps that will slow
interaction and scripting to websites, and it has been forced into a role it should never have been put in. But that's a topic for another post.
So my goals and reasoning was clear: I wanted to keep Vault as simple as possible, and I wanted to avoid web apps. So I decided to use a protocol I have a good amount of experience in,
CGI/1.1, as it allowed me to write simplistic gnu89 complaint C programs, and have a well known and robust web server (lighttpd
in this case) as the actual publically exposed application. Of course, this has a lot of caveats, primarily speed of the server. CGI has a lot of overhead, and it's well known that it is not very fast.
But this server will only be serving me, and a couple other people who may want some remote file storage as well, so I decided it was acceptable for use.
So one day, I laid in my bean bag, booted up my ThinkPad x200t, and got to work. And in 2 days, I had a functional file storage server, and it's source code can be found here.
I was already happy to see something I had thought of and designed be fully implemented, and I was especially glad to see that I am not as rusty at C as I thought I was! It was very trivial to implement, really, and
I kept the simplistic ideal when looking at authentication too, opting for a simple key based approach. No usernames, or passwords, just a 256-bit key. It isn't best practice, usually, as it creates a singular, critical
point of failure, but it's simple, and robust enough that an attacker would have to gain access to a machine that has that key on it, or a user would have to expose the key themselves, in order to gain access to the remote
So I did it, I built a remote file storage system. But now I needed to build desktop applications to talk to the server and allow a person to actually use it. So I did just that! I wrote an extremely
simple, Python 3 command line client for testing Vault, and then I got started on a Windows client for my main desktop. And I didn't want to make another command line application for Windows, as Windows is not designed for
those kind of applications. So instead, I sat down and I got to work building a simple, quick and dirty C# WPF application. And after another 2 days, it's complete! It's source code can be found here.
And so here we are, after 4 days and probably ~20 some odd hours of programming, and I now have a full system for remotely storing and retrieving files. All of this to use my password database between computers more easily! ^w^;
I'm thinking of starting a tutorial area for this website, to talk about "low-level" programming in C, specifically ANSI C and gnu89, as well as ways to approach programming and the process of designing applications,
and systems in general. Not sure exactly when I would start doing this, as I hop between ideas annoyingly quickly, but at some point I'd like to. But I'm extremely glad to be back programming and building these fun
projects for my own personal use again, it's always been where I'm the most comfortable.
Onwards to another year of programming, and loving and being fascinated by technology! <3