Hello World

Welcome to my computer!

Computer

Within you may find various things. Currently these things include:

In the future there could be more things. I have many ideas. So please,

Subscribe To My RSS Feed

rss

RSS is a wonderful technology which allows you to stay updated without the use of centralized social media (ewww). If you aren't yet using RSS, here's some links for you. If you subscribe the chickens will be happy.

If you have your own website with a webring page, feel free to add me:

<a href="https://chknz.org"><img alt="https://chknz.org" class="banner" src="/banner.png"></a>

Banner"

Now that I have introduced my website, I will launch into a rambling blog post about the process of building it. First though,

Happy Halloween!

Spooky

(That's today)

I've made websites before, but I was always taking shortcuts because for one, I really didn't have the time to be spending on configuring a server, all the options I saw for a self configured VPS appeared to be more expensive than preconfigured hosting, and there was nothing I needed to do that actually required advanced configuration. There kind of still isn't, but I had this Raspberry Pi I wasn't using lying around, someone on IRC mentioned that there's a way to get a free reverse proxy that means you aren't exposing your home IP when self hosting (thanks for the tip), and I think these sorts of personal websites are cool. The idea of a way to put my thoughts and code out there that is minimally dependent on third parties is especially appealing, as is the potential to contribute a little bit to building an internet where individuals have more direct agency over what they see.

I started by physically putting the machine together, which was very straightforward. Less straightforward was getting it to boot; the microSD card it came with had an OS preinstalled, but there was some error. Looking up this error revealed suggestions that this OS is terrible and no one recommends using it anymore, so the solution should be to install a different one. Well great; I had recently purchased a high capacity offbrand microSD card off ebay for some other reason I've forgotten and this seemed like a good opportunity to try it out. I used the rpi specific installer application to load a headless version of the currently recommended OS onto the card, and it successfully booted, though not before suspiciously restarting a number of times. A minute or so into trying to use it, everything started giving errors, and then it would boot no more.

Being lost at this point, I got some AI help to walk me through things, which involved the commands lsblk, fdisk, and the message "No medium found". Decided the card must be bricked or otherwise beyond my abilities, resolved to ask for a refund from the ebay seller later, and reimage the card I was trying originally instead. That worked! I went on to get ssh working so I could unplug it from my monitor, and install hugo, a framework for making simple websites. But after messing around with this for a little while, I was reminded of how I do not like frameworks and do not want to take the time to learn them. There is a lot to understand if you want to be able to do more than the basics, which isn't the case if you're instead hacking something lower level together. Plus, I have ideas for interactive features, so I started hacking together a python script to build a website. In retrospect this decision probably delayed the project from getting to the point where it is today by about a full week. Heavy use of AI assistance and code generation is likely why it was not much more than an extra week. I'm using deepseek-coder-v2, used with the Continue extension for vscodium, hosted on the local network from my gaming PC via Ollama, and some of my ideas for future features involve calling this service from the web server. This is also helpful in writing this post, because through the questions I asked I have a general record of when I was working on different aspects of the project and where I was struggling with it.

I took a few features I noticed from hugo that seemed good, like a command line option to build a testing version of the site instead of the production one.

I learned how to use rsync to make a backup of my files on another machine.

I set up the nginx webserver and learned about how to do that. A major complication I ran into was that the website would not display due to file permission issues related to trying to point to a folder within my home directory, which I still don't fully understand, but the answers I found most helpful in debugging it involved the namei command which revealed that apparently file permissions in linux are in a tree structure where the permissions of the folder above whatever file is also important to whether the file can be accessed. Also, nginx is its own linux user ??? I tried to use chmod and chown to make nginx the owner of the folder with my website, but this broke my ability to access anything with ssh. I spent a bunch of time on this problem before realizing that everything works if I just put the website in /var/www instead of a folder within my home directory, so I simply changed my python script to dump the final results there instead.

Got a little confused in various places setting up connection to the outside internet. There were a few issues I knew I would have to figure out; what happens when my ISP changes my external IP address? What happens when the router restarts and changes my web server's internal IP address? The former I set aside for later, and learned about my router's DHCP settings for setting permanent IP addresses for devices for the latter. I set an "A" record for this domain to my external IP (how "A" is different from the other ones idk, but it was the first one I tried and it works), and tried to forward port 80 to my local webserver IP, but kept getting an error. The reason for the error ultimately turned out to be that the router has somewhere else in its settings something that uses port 80 for remote configuration of the router itself, which prevents other use of port 80, and the forum threads discussing the error include suggestions to change this, but I ignored those at first because everyone replying to those responses was saying it didn't work. The only thing they said did work was upgrading the firmware, so I thought I had to do that.

Upgrading router firmware is scary, because maybe the router gets bricked and the internet is dead until you can get a new one. This was made worse by the fact that none of the software options seemed to match my router. I could find one that matched the country, or one that matched the hardware version, but not both, and there were prominent warnings about it needing to match. Decided to just risk it, and fortunately it still worked after the install, though I still had to go through more trouble to figure out the actual problem since the firmware was never the problem to begin with.

What else... the javascript for the chickens was fun and didn't take very long to write or debug. See the code for comments explaining how it works (ignore the obviously AI comments). The banner I made with kazam and kdenlive. My own RSS feed is put together manually as part of the site build process with the help of some python libraries. My hope with the time sorted webring links is to reward people using RSS and posting to their sites. I used Stable Diffusion (or was it Flux?) to make the RSS logos at the top that get cycled through, and sample colors at their edges to make them look like they blend in with the background, since none of them came out with quite the same background color. Feel free to copy paste any of the code here if you want to use it yourself btw.

If you made it this far, Wow! Thanks for reading! Here's a picture of the moon and something I made with animatediff

Moon

Spooky