April 1, 2020
Well time keeps on ticking, I guess. I've done as NINJAM-related work in the last week as in the previous 10 years, I think. The jam we had last night (see below) was awesome, I especially like the last track in it.
We started renting a cheap ($20/month) server for hosting some private NINJAM servers. My initial thought was you could request a private NINJAM server via a web interface, then it would launch a new ninjam server process and give you the port number. That seemed like a bit of work, so instead I did something that would be less work.
As the first experiment I ran 50 NINJAM server processes on the one box, and had it as a purely etiquette-based system, where you only join an empty server or a server to which you were invited. It had some usership, though it was hard to tell if people really wanted them as private or if it was just a big farm of more servers.
I thought about modes where you connect to a server, and then can temporarily set a password so only your friends can join. Seemed easy enough, though you might connect to a server you think is empty and have someone beat you to it, and people might hog servers.
One thing I noticed is that the mechanism the NINJAM server uses to decide when to sleep was fine for a few processes, but if you ran 50 of them, all those polling between nanosleeps added up.
Then I thought -- what if you had a server where if you connected with a password, that password would define the room-name you go into (the NINJAM server already has a User_Group object which is basically the whole server). This seemed like a great idea, but it turns out it wouldn't work, because the password challenge/response system doesn't allow identification of passwords, nor would it detect if two users used the same password. I thought about using part of the anonymous username as a server ident, but the downside there is that if you set that, then connected to a different server with the same anonymous credentials, you'd leak your private server name.
So what I finally came up with: the NINJAM server can now run in a lobby-mode, and via chat commands you can create/join private rooms. You can also chat in the lobby with other people who are in the lobby. So you could negotiate "hey want to play an ambient session? let's !join ambient." So you have private rooms (secret roomname), semi-private rooms, etc. Feels pretty fun! Not many users yet, though.
Of course this will all get ruined once someone decides to troll/spam/flood/etc. I'm sure at the very start IRC was amazing and simple, and by the time I left it it was a mess with bots and anti-bots and other things that just ruin everything. Oh well let's enjoy it while it lasts.
(anything to distract from what's happening outside)