Git gud projects

Here’s a list of projects I formerly had on the git gud guide. I moved them here because this list was too long for that page and it distracted from the more general points I wanted to share.

Building your castle

So a common process that I instruct people to go through to stretch their legs with a non-programming hands-on computer task is to deploy a basic website on VPS they rent, with proper certificates. It helps to have something like this as a basic branching off point that lightly touches on several different practical topics. It also establishes yourself with a presence on the internet that you can point to for anyone and publish things on.

DigitalOcean has some guides that may help with some of these steps. There’s also this website that provides a broader collection of resources on specific Linux topics that you could also consider.

You might want to learn some basic HTML to make something that looks nice, but only if you want to splurge. Doing these steps tries to gives you a good foundation for other projects later where you’d benefit from having a server in the sky to host something for you.

All of these steps can be done more easily and in less time and potentially for cheaper, if you just use some Amazon/Google/Wix/Squarespace/etc tool. But you won’t learn nearly as much that way and you’ll be locked into some special corporate offering that will limit what you’re able to do and make it harder to migrate if you decide to leave later. Doing it quick/cheap here isn’t the goal here, the goal is enrichment.

Home hosting caveat: A variation of this section is to do similar steps with the home server you set up under the “messing with home servers” section, but many ISPs have restrictions on incoming connections that get in the way of plain HTTP traffic, so it may be a bit flaky. I know that RCN/Astound and Cox block ports 80 and 443, which means HTTPS works but not HTTP. This is actually fine for a lot of purposes, but without the automatic redirect to HTTPS people might think your web server is down so I don’t host public-facing services at home without a proxy tunnel in front of them.

Messing with your computer

Some of these require that you’ve made the switch to to Linux.

Messing with the internet

The focus of these projects are to work with the internet and really get how computers actually talk to each other. If you focus too strongly on the web you become trapped into the client/server model of HTTP, and will think about everything in those terms. HTTP is a tool, it can be misused.

// TODO restructure this section, maybe split out

Messing with systems

// TODO restructure this section

Messing with languages and automata

By “languages” here I’m referring to “formal languages”, which includes programming languages but is more broad. Some of these you might want to consider focusing on the more functional languages due to their strengths.

Messing with game engines and graphics libraries

Messing with home servers

Some of these you could choose to run in Docker. Docker can make service management a lot easier, but it comes with its own tradeoffs like making integration between different services more difficult. Nginx and Nextcloud are good examples of services I find a lot easier to not run in Docker. These can be easily installed through your system package manager.