Eponymous Laws

We stand on the shoulders of giants. Or at least, those who suffered that we might not, and so we should respect our elders. I do, and this is a list of places I'd prefer to lean on experience than relearn the hard way:

  • Cunningham's Law: The best way to get the right answer on the Internet is to post the wrong answer and wait for people to correct you.
  • LeBlanc's Law: Later == Never
  • Brooke's Law: Adding developers to a late software project makes it later.
  • Hyrum's Law: All observable behaviors of your system are depended on by someone.
  • Parkinson's Law: Work expands to fill the time available for it's completion.
  • Pareto Principle: For any phenomonon, 80% of the consequences stem from 20% of the causes.
  • Hofstatter's Law: Everything takes longer than you think it will, even when accounting for Hofstatter's Law.
  • Conway's Law: Any software reflects the organization that built it.
  • Linus's Law: Given enough eyeballs, all bugs are shallow.
  • Wirth's Law: Software gets slower faster than hardware gets faster.
  • Zawinksi's Law: Every program expands until it can read email. Those which can't are replaced by those that can.
  • Sturgeon's Revelation: 90% of everything is crud.
  • Stein's Law: If it can't go on forever, it'll stop.
  • Goodhart's Law: When a measure becomes a target, it ceases to be a good measure.
  • Wiio's Law: Communication fails except by accident.
  • Macnamara Fallacy: Making decisions based on both measurable data and ignoring unmeasurable data is suicidal.
  • Trust but verify: (Russian: доверяй, но проверяй, tr. doveryay, no proveryay, IPA: dəvʲɪˈrʲæj no prəvʲɪˈrʲæj) is a Russian proverb, which is rhyming in Russian. The phrase became internationally known in English after Suzanne Massie, a scholar of Russian history, taught it to Ronald Reagan, then president of the United States, the latter of whom used it on several occasions in the context of nuclear disarmament discussions with the Soviet Union.
  • Wright's Law: The more times a task has been performed, the less time is required on each subsequent iteration.
  • Hyrum's Law: all observable behaviors of your system will be depended on by somebody.
  • Layne’s Law – “A) Every debate is over the definition of a word, B) every debate eventually degenerates into debating the definition of a word, or C) once a debate degenerates into debating the definition of a word, the debate is debatably over.”
  • Lamport's Law - If you’re thinking without writing, you only think you’re thinking.
  • Mellon's Law - Everyone wants to make an API, but nobody wants to use one.

While it's not a law, it should be. Cunningham said: "If software is not periodically rewritten to communicate what we've learned, then the software will lack any sense at all eventually."

I thought I was brave.

I was wrong.

You Can't Subvert What You Don't Understand

Modern Hollywood is completely incapable of writing anything even remotely compelling, and throwing money at the problem, as The Acolyte is teaching us, still doesn't work, and I've been thinking a lot about why that could be. I've been following the Disney versus Nerdrotic and Critical Drinker debates, and the idea that Disney can't shut two Youtubers up makes me incredibly happy. Still, how have writing standards have fallen so far?

It hit me that the core of the problem has to do with Hollywood's ultimate goal, and the human tools that they use to accomplish that goal. The object has always been, at least for as long as I've been around, to subvert the values of Christianity, not limited to the atomic family, sexual roles, faith, beauty, goodness, truth, and ultimately, Jesus Christ. However, in order to achieve that goal, one must first be able to understand the value of that which they wish to destroy. Modern writers, with their complete inability to even feign agreement with these values, cannot suspend disbelief among those with even an inkling of the beauty of those values.

I do not believe that writers with that upbringing do not exist, and I'm not suggesting we let our guards down. Clever subversion is in some mediums (looking at you, triple A gaming), is alive and well. However, Hollywood has slammed the doors shut on letting such people into the writer's room, and their absurd inability to understand that this has resulted in their output being so universally despised, and their childish name calling of anyone who disturbs their illusions that we want what they're peddling, has proven to me to be far more entertaining than anything they could have written. The wonderful part of that joy is that I don't pay them one thin dime while doing it.

Nvidia Halting Solved on Pop Os

I'm on Pop!_OS 22.04 LTS in my Dell XPS (and curse the day I ever bought this box) running an Nvidia GeForce GTX 1660 Ti. I get sporadic freezing.

After a whole lot of --research-- panicked googles, it looks to be a problem with the PCI Power Management in the kernel, and shutting it off seems to fix. To do that, I edited /boot/efi/loader/entries/Pop_OS-current.conf and added to the options line : pie_aspm=off pci=nommconf and restarted.

Intro to Self Hosting

So you want to get into self hosting? It’s a fun way to learn a lot of IT concepts, and if you don’t mind break/fixing, it’s worth a try.

What do I need?

  • A server. What you bring to the table is going to decide quite a lot about how much you can handle simultaneously, and what operating systems you can use. My current main machine was one I got for a song in a company discard, so it’s a Xeon w/ 16 gigs of ram and a terabyte in drive space. For the introductory user, that might be overkill, and I know folks who’re perfectly happy with a Raspberry Pi. I prefer Intel machines purely to keep some options open.
  • A basic understanding of TCP/IP Networking. Generally speaking, everything you host is for the purpose of accessing through other machines, and so you need to know how to do things like:
    • Forward a Port through your router
    • Understand what DNS is
    • Understand the difference between internal and external IP addresses

First decisions:

Am I going to allow the outside world to access my services?. This is a very important decision to make, and it’s one that novices tend to low ball to their peril. The internet is a dangerous place, filled with folk who will tear down the things you build out of spite, or take advantage of your trust to steal from you. However, a zero outside world access lab does introduce some problems, like eliminating some serious quality of life elements like LetsEncrypt TLS certificates. Depending on your tools and experience, you can get around some of this by only hosting http in house, or rolling your own Certificate Authority. I’ve been very pleased with splitting the difference by using Nginx Proxy Manager’s traffic rules to allow only certain services access from the outside, and blocking others.

First Steps: Your Router.

You’re going to want the ability to define hostnames (example, ‘music.mylab.org’). You could go dirt simple and edit host files, but that doesn’t make it easy to use if you have multiple devices that will access the things you host. If your router has the ability to define host names, then that may be good enough for you! I am using a service called PiHole. This allows me to not only define hostnames quickly, but to also subscribe to blacklists to block ads, filth, etc. I set my router to use the PiHole instance as its own DNS server, and as the address to provide to DHCP clients on my network. Works like a champ. Remember, folk on your network can always switch out the DNS server provided to them for their own choice, so as security goes, this is a thin layer to your onion.

My PiHole instance is a docker container running on my server, which made it somewhat easy to stand up and back up. You don’t have to do that; you can install native, or get a Raspberry Pi. Personally, I am crazy about Docker for home labs because you can do break / fix work very, very quickly. I run docker commands from shell straight from SSH to the server, but there are installations that you can use to make this easier. Ain’t no shame in that; there’s a lot of implicit knowledge here already, and the longer it takes you to get a service running, the higher the odds that you’ll tap out.

Next Steps

I found that Nginx Proxy Manager was the bees knees when it comes to how to handle accessing a service I’ve stood up. Say, for example, I want to stand up a Jellyfin (great for media serving) server. I open PiHole, and set ‘jellyfin.mylab.org’ to point to the IP address of my lab server, say 192.168.1.5.

Next up, I open Nginx Proxy Manager and I map that hostname, jellyfin.mylab.org, to 192.168.1.5 on tcp port 8010.

I set up my docker container for jellyfin (say it listens by default on port 80, but I can’t do that, because 80’s already being used for Nginx Proxy Manager) to map port 8010 to the port 80 for the docker container. You start the container, open your browser, and visit http://jellyfin.mylab.org. PiHole directs your web client to the proxy manager, and the proxy manager uses a reverse proxy to connect to 192.168.1.5:8010; net result, you are looking at your first login. Yay!

Now for that jellyfin instance to actually see your media, you need to provide a volume map. If, for example, your music’s all at /mnt/Music, and if Jellyfin wants to see that from it’s perspective as /var/media, then that’s -v /mnt/Music:/var/media. Docker always handles maps for ports and volumes with the host machine’s path or port, a colon, and then the relative version inside the container.

Implicit knowledge

I see after saying all of this that I’ve made a great many assumptions about you. I’m assuming you are using Linux and know how to get it installed. You don’t HAVE to do that; it’s possible to run Docker straight out of Windows, but it’s a pain.

I’m assuming you have a spare machine. You don’t have to; you could install VirtualBox, or use Windows Hyper-V, and run Linux as a virtual machine off of your Windows PC. You could use UTM or Parallels if you’re rocking a Mac. Up to you.

I’m assuming you know how to mount external file systems on that Linux box. You don’t have to; if you have the disk space, you can host your files on the server machine.

Now, here’s the thing about EVERYTHING we’ve said so far; none of it’s the “right” way. The whole idea behind getting into this is to try different things; my workflow now doesn’t look anything like where I started, and I would bet you good money that it’ll look radically different a year from now. This is just what works for me now, which is both more and less complicated than what I used to do.

Was this helpful? Let me know; I love talking about this stuff!