Enough games are run on their own VMs now that iptables is a pretty legit way to go, if you can manage it.
Posts made by Chime
-
RE: What to do when your mush is attacked
-
RE: Comfort Food...
Mattar paneer (basically curried peas and cheese over rice)
-
RE: Um...What?
@thenomain said in Um...What?:
Me: I...what? Did I Kickstart something and completely forget about it?
I'm glad I'm not the only one that does that ._.
-
RE: A directory of MU*'s that's actually good
@faraday, on SurfaceTension (a BluePlanet MOO that got delayed when various friends pulled me away to work on The Reach):
#7:2 ":MSSP-REQUEST"; ":"; ":Provides in-band access to Mud Server Status Protocol (MSSP) data."; try set_connection_option(player, "binary", 1); notify(player, "~0D~0AMSSP-REPLY-START~0D~0A"); for var in ($mssp_data()) notify(player, $list:join("~09", @var) + "~0D~0A"); endfor notify(player, "MSSP-REPLY-END~0D~0A"); finally set_connection_option(player, "binary", 0); endtry return $nothing; .
and then
$mssp_data()
was#0:7 dbsize = 0; helpfiles = 0; rooms = 0; exits = 0; descs = 0; progs = 0; triggers = 0; for o in [#0..max_object()] if (valid(o)) dbsize = dbsize + 1; if ("description" in properties(o)) descs = descs + 1; endif if (parent(o) in {#17, #18}) rooms = rooms + 1; endif vind = 1; for v in (verbs(o)) progs = progs + 1; if (verb_args(o, vind) != $tnt) triggers = triggers + 1; while (tpos = index(v, " ")) v = v[tpos + 1..$]; triggers = triggers + 1; endwhile endif vind = vind + 1; endfor endif endfor return {{"NAME", "SurfaceTension"}, {"PLAYERS", tostr(length(connected_players()))}, {"UPTIME", tostr($boot_time)}, {"CRAWL DELAY", "1"}, {"HOSTNAME", "surfacetension.accela.net"}, {"PORT", "7777"}, {"CODEBASE", "LambdaMOO 1.8.2-cvs20050209-5"}, {"CONTACT", "surfacetension-mssp-1@accela.net"}, {"CREATED", "2009"}, {"IP", "66.220.1.33"}, {"LANGUAGE", "English"}, {"LOCATION", "United States"}, {"MINIMUM AGE", "18"}, {"WEBSITE", "http://surfacetension.accela.net/"}, {"FAMILY", "MOO"}, {"GENRE", "Science Fiction"}, {"GAMEPLAY", "Roleplaying"}, {"STATUS", "Alpha"}, {"GAMESYSTEM", "Synergy"}, {"SUBGENRE", "Blue Planet"}, {"HELPFILES", tostr(helpfiles)}, {"ROOMS", tostr(rooms)}, {"ANSI", "1"}, {"VT100", "1"}, {"DBSIZE", tostr(dbsize)}, {"EXITS", tostr(exits)}, {"EXTRA DESCRIPTIONS", tostr(descs)}, {"MUDPROGS", tostr(progs)}, {"MUDTRIGS", tostr(triggers)}, {"ADULT MATERIAL", "0"}, {"MULTIPLAYING", "Restricted"}, {"PLAYERKILLING", "Restricted"}, {"QUEST SYSTEM", "None"}, {"Roleplaying", "Enforced"}, {"WORLD ORIGINALITY", "Mostly Stock"}, {"SSL", "0"}, {"ZMP", "0"}}; .
In summary:
MSSP-REPLY-START (lines of tab-separated key-value pairs) MSSP-REPLY-END
With CRLF line terminators.
The above code is wonky garbage and e.g. always returns zero exits as I never got around to making exits for that moocore. Yes, really. ._.
We should probably type this up into a revised spec, if the odd case anyone still cares about mssp...
-
RE: Comfort Food...
@auspice Right! But you see in the US 'gravy' usually means that horrifying thing grandmothers make with turkey
droppingsdrippings or something at Thanksgiving and Christmas.My discovery of the wider world of gravies as a general sauce with vegetarian applications is relatively new, or else I'd likely be considerably rounder. (happened when we moved to Portland, mmmm)
@wildbaboons said in Comfort Food...:
It's almost always turkey, occasionally beef.
This sounds like some sort of Texan heresy.
-
RE: A directory of MU*'s that's actually good
@faraday, per http://tintin.sourceforge.net/mssp/news.php:
- Mar 20, 2009 - Plaintext version of MSSP finalized and added to specification.
The mudbytes spec seems to be dead, and their wiki reports 500, so... hm. That was the only version that described the plaintext one apparently. Tintin's is incomplete because they only care about telnet.
A few code references (especially for MOOs) demonstrate the basic idea though; see https://thejoyofstick.com/blog/2012/05/12/share-your-moo-status-using-mssp/ for example.
This is largely representative of the overall state of decay in the MU* community. As telnet gets further phased out and web-clients start to take over, this is all going to be JSON-rpc and RESTful gubbish.
-
RE: A directory of MU*'s that's actually good
@faraday MSSP can use either telnet IAC codes or a pre-login command. On MOOs we generally supported it with a pre-login command.
It'd be fairly straightforward to add to MUX, which has a reasonably nice telnet layer for these things but... eh, it's irrelevant for the mud-centric data and giving mudstats better data is largely pointless given it can do INFO.
Future work should probably be JSON-based and reasonably self-descriptive / general. I do like the idea of a game-to-game spidering protocol for distributed discovery and publication of games mirrored on each-and-every game. These days I'm more interested in getting Evennia to do do the things I want than adding features to mushes. I mean come ON people! Mushcode is terrible and needs to die out.
-
RE: Comfort Food...
- Waffles and/or Pancakes, potentially with BLUEBERRIES and hand-whipped cream. REAL 100% pure maple syrup.
- Mild udon (Japanese noodle soup with big thick noodles and a thin broth) using vegan dashi (broth base) and silken tofu; shiitake and enokitake (mushrooms). Maitake is also fantastic if you can find it.
- Miso soup, again from vegan dashi, with small cubed tofu, kombu, nori, and scallions.
- Vegetarian poutine. (Yes, this is a thing and it is amazing)
- Malted milk shakes.
- Toast.
- Eggs&toast -- ideally sunny-side up but properly cooked so the eggwhite is solid and firm and the yolk is gooooey and the toast has a thin spread of Marmite or even just yeast flakes.
- Quesadillas -- flour tortilla on a very-lightly oiled griddle, four-cheese blend, Tapatio sauce, possibly with guacamole and sourcream on the side.
- Campanelle alfredo with smoked gruyere and steamed broccoli.
- Plain lentil soup.
- French onion soup, properly baked in an oven until the cheese browns delightfully.
- Real county fair cheese curds fresh enough that they still squeak.
- An Old Fashioned -- Rye whiskey, Angostura bitters, simple syrup, soda water, frozen whiskey stones or ice; garnish with orange peel.
- A Sazerac -- Rye whiskey (traditionally Sazerac whiskey), Peychaud's bitters, simple syrup, soda water if needed, shaken with ice and strained. Coat the interior of the glass with absinthe and swirl the rest back into the main drink (because absinthe is goddamn delicious). Garnish with lemon peel.
-
Mechanipus outage & Closing plans
As sent to Mechanipus-hosted game admins:
Two major things:
First, the primary server most of you are on (Kuramori) needs to undergo
a migration operation ASAP. I'm scheduling this for around mid-day
(US-time) tomorrow (Thursday, 6 December 2017). Services (mush,
database, webhosting, shell access, etc) will be completely offline
during the duration of this move, which may take several hours.No data is lost or in any immediate danger, but physical hardware
problems necessitate this move to ensure we have reliable backups.
(Blessed are the pessimists, for we take backups, etc.)Kuramori should return to operating status afterward all by itself, but
I anticipate that mushes linking against truly antique libraries may not
restart without a recompile. Please understand: this is 2017 and
Kuramori is a 64bit Debian environment; some of you are still running
binaries compiled on ISU. It's easier to recompile and relink than
continue to maintain binary compatibility, so that's what we'll be
doing. Sorry-not-sorry.I'll be around to recompile or assist with other restart operations as
needed; my Discord id for those of you using that sort of setup is
Chime#3134. Contacting me there is fine, but keep in mind that I do
have a job and extensive help requires extensive time. Hangouts, email,
etc. is fine too.Second, it's become apparent that Mechanipus is much less an essential
component of the MUSHing community than it was; there are a multitude of
low-cost hosting services and VM providers that are a much better fit
for most users.As a result, Mechanipus will be closing.
Mushes will be permanently halted and web services suspended on 15
January 2018. Two weeks later, at the end of January, I will be doing
the final removal of accounts, data, and likely decommissioning Kuramori
itself.I strongly suggest moving to a new provider as soon as you are able.
You may need to find codestaff to help you; I do not have the time or
energy for such an undertaking, but I'm happy to advise other hosting
providers that are stepping up to the plate.Please do not:
- Ask me to fix your wiki.
- Ask me to export your mush, sql, wiki data, images, etc.
- Ask me to Continue hosting "just this one thing."
- Panic. Really; you have weeks to get yourself sorted out, just start now.
Thank you for your time and effort over these years to keep our hobby
alive. I've delayed this announcement until another unrelated problem
(see above) has required an outage. After the outage, I will get things
back online, but please do remember that the End is approaching. -
RE: Quiet Quiet Rooms?
@skew said in Quiet Quiet Rooms?:
Thank you, @Chime!
Anytime!
Hate to do this, but can anyone break down how to apply this patch in very, very simple terms? I can get into the console as necessary, I know what git is, I just have no idea how to apply a patch to a game. Or, well, most anything else linux-related.
Sorry for being a bit terse. I spend most of my waking hours at some sort of unix prompt (Linux or otherwise). First, you'll need several tools. If you don't have administrator (root) access, then hopefully your host has already got these installed. On deb-derived systems (Debian, Ubuntu, Mint, etc etc) you'll want something like
$ sudo apt-get update ... some lines downloading package lists ... $ sudo apt-get install build-essential g++ make patch tar bzip2 wget git ... some lines describing additional packages it wants to install ... ... question about if that's okay (say yes, generally) ... ... many lines about downloading and installing each package ...
If the tools are already there, then you won't need to do that.
$ cd $ mkdir mux-src $ cd mux-src $ wget ftp://ftp.tinymux.org/tinymux-2.12/alpha/3/mux-2.12.0.3.unix.tar.bz2 --2017-05-09 23:35:06-- ftp://ftp.tinymux.org/tinymux-2.12/alpha/3/mux-2.12.0.3.unix.tar.bz2 => ‘mux-2.12.0.3.unix.tar.bz2’ Resolving ftp.tinymux.org (ftp.tinymux.org)... 52.34.23.255, 2600:1f14:2a0:2201:ab7d:7d:8dd3:57fc Connecting to ftp.tinymux.org (ftp.tinymux.org)|52.34.23.255|:21... connected. Logging in as anonymous ... Logged in! ==> SYST ... done. ==> PWD ... done. ==> TYPE I ... done. ==> CWD (1) /tinymux-2.12/alpha/3 ... done. ==> SIZE mux-2.12.0.3.unix.tar.bz2 ... 1080619 ==> PASV ... done. ==> RETR mux-2.12.0.3.unix.tar.bz2 ... done. Length: 1080619 (1.0M) (unauthoritative) mux-2.12.0.3.unix.tar.bz2 100%[===============================================================================>] 1.03M --.-KB/s in 0.09s 2017-05-09 23:35:06 (11.6 MB/s) - ‘mux-2.12.0.3.unix.tar.bz2’ saved [1080619] $ tar xjvf mux-2.12.0.3.unix.tar.bz2 mux2.12/ mux2.12/INSTALL mux2.12/SGP mux2.12/CHANGES mux2.12/LOCAL mux2.12/REALITY.SETUP mux2.12/NOTES mux2.12/src/ mux2.12/src/move.cpp mux2.12/src/Doxyfile mux2.12/src/autoconf.h.in mux2.12/src/muxcli.h ... many more files unpacking ... $ git clone https://github.com/lashtear/tinymux.git Cloning into 'tinymux'... remote: Counting objects: 59424, done. remote: Compressing objects: 100% (2/2), done. remote: Total 59424 (delta 0), reused 0 (delta 0), pack-reused 59422 Receiving objects: 100% (59424/59424), 18.34 MiB | 17.20 MiB/s, done. Resolving deltas: 100% (46787/46787), done.
Now, you should be in a folder called 'mux-src' right underneath your homedir, with the tar.bz2 archive of upstream tinymux from Brazil and a git checkout of my quirky version.
$ ls -laF total 1080 drwxr-xr-x 4 lucca lucca 4096 May 10 00:01 ./ drwxr-xr-x 104 lucca lucca 12288 May 9 23:56 ../ drwxr-x--- 5 lucca lucca 4096 Feb 13 2016 mux2.12/ -rw-r--r-- 1 lucca lucca 1080619 May 9 23:35 mux-2.12.0.3.unix.tar.bz2 drwxr-xr-x 11 lucca lucca 4096 May 9 23:58 tinymux/ $ cd tinymux $ git show 5fd6080286dc36fe7ba6673a208dbfb445a6d056 > ../blind-room.patch $ cd .. $ ls -laF total 1088 drwxr-xr-x 4 lucca lucca 4096 May 10 00:03 ./ drwxr-xr-x 104 lucca lucca 12288 May 9 23:56 ../ -rw-r--r-- 1 lucca lucca 4606 May 10 00:03 blind-room.patch drwxr-x--- 5 lucca lucca 4096 Feb 13 2016 mux2.12/ -rw-r--r-- 1 lucca lucca 1080619 May 9 23:35 mux-2.12.0.3.unix.tar.bz2 drwxr-xr-x 16 lucca lucca 4096 May 10 00:03 tinymux/
Now we have that same bit plus that blind-room.patch file. Now before you start suggesting that it'd be really handy if we kept all those patches somewhere easy to access-- that's exactly what any revision control software (like git) does. Anyway, time to apply.
$ cd mux2.12 $ patch -p2 <../blind-room.patch patching file game/text/help.txt patching file src/move.cpp patching file src/netcommon.cpp
Congrats. You now have a tinymux tree from Brazil but with just that one patch of mine added. If you were instead building from his git repo, you could do this all much easier with the
git cherry-pick
command, but you probably aren't. If building against an archive export of his git tree, change the parameter to-p1
because of the slightly different directory structure.This should work for most any 2.12 or 2.10 version, though if you use 2.10 the file offsets are slightly different, so you would see instead:
$ cd mux2.10 $ patch -p2 <../blind-room.patch patching file game/text/help.txt Hunk #1 succeeded at 5009 (offset -12 lines). patching file src/move.cpp patching file src/netcommon.cpp
Yes; git, patch, diff, etc are all rather clever and indispensable tools that I can't imagine getting through my day without. Game should build as normal with these changes.
-
RE: Quiet Quiet Rooms?
Hi! (As always nudge me in other media if I'm not responsive here; thanks @Misadventure!)
Several things:
My fork is designed for change a variety of things for the sorts of games I was working on. There are two pertinent branches; 'mechanipus' which is more or less the 'master' type branch containing all of the various changes, and 'mechanipus-rebased-vs-git_dev' which is a rebased (change collected and minimized set of diffs) version vs one of Brazil's dev branches.
In this rebased one, all the main patches are separated out as major functional changes covering the bits people find separately interesting:
https://github.com/lashtear/tinymux/commits/mechanipus-rebased-vs-git_dev shows the commit history for that resulting branch, with them always re-ordered so my customizations are at the end (independent of chronology). You can click on any of the hash-ids to see patch data for that change.
Or, in command line form:
git clone https://github.com/lashtear/tinymux.git cd tinymux git checkout mechanipus-rebased-vs-git_dev git log --abbrev-commit --sparse --decorate --pretty=oneline
Which will give you a display something like:
Hash-Id Commit comment 25c302a9
(HEAD -> mechanipus-rebased-vs-git_dev, origin/mechanipus-rebased-vs-git_dev, mechanipus-rebased-vs-git_brazil) Add a basic .gitignore file 65416020
Change bare 'think' to not alter idle() time 6b19bbb9
Cause command lookups on master room objects to consider parents 2af2f13b
Try 64000 char lbufs for the Reach. Change the Boyer-Moore-Horspool implementation to account for larger LBUF_SIZE 5fd60802
use BLIND on rooms to really silence messages In your case, you are only interested in that last one there. Hot damn I'm a markdown badass.
git show 5fd60802
Which will give you
commit 5fd6080286dc36fe7ba6673a208dbfb445a6d056 Author: Emily Backes <lucca@accela.net> Date: Wed Sep 28 22:46:09 2011 -0700 use BLIND on rooms to really silence messages * Covers X goes home. * Covers connected/disconnected/partially disconnected. * Works even with REALITY_LEVELS configured. This is for quiet rooms and character freezers, and allegedly breaks other games that use BLIND rooms for some other purpose. Based on 37c8fcf06b34f57ad9f06b060acdcbe37521cc32 but with changes to REALITY_LEVELS support. diff --git a/mux/game/text/help.txt b/mux/game/text/help.txt index af4df527..1cb90c5f 100644 --- a/mux/game/text/help.txt +++ b/mux/game/text/help.txt @@ -5021,10 +5021,15 @@ BLIND FLAG: BLIND(B) - This flag suppresses the '<who> has arrived.' and '<who> has left.' messages. - When set on a player, the messages caused by their movement are suppressed. - When set on a location, the messages for everyone entering or leaving that - location are suppressed. + When set on an object that can move, the '<object> has arrived.', + '<object> has left.', and '<object> goes home' messages that would normally + be generated and delivered to the new and old locations are suppressed. + + When set on an object with location, the '<object> has arrived.', + '<object> has left.', '<object> goes home', '<player> has connected.', + '<player> has disconnected.', and '<player> has partially disconnected.' + messages are that would normally be generated and delivered to everyone at + that location are suppressed. This flag can only be set by Wizards. diff --git a/mux/src/move.cpp b/mux/src/move.cpp index eb481dac..901107a7 100644 --- a/mux/src/move.cpp +++ b/mux/src/move.cpp @@ -676,7 +676,9 @@ void do_move(dbref executor, dbref caller, dbref enactor, int eval, int key, UTF if ( (loc = Location(executor)) != NOTHING && !Dark(executor) - && !Dark(loc)) + && !Dark(loc) + && !Blind(executor) + && !Blind(loc)) { // Tell all // diff --git a/mux/src/netcommon.cpp b/mux/src/netcommon.cpp index d389d5a1..1b0a60ee 100644 --- a/mux/src/netcommon.cpp +++ b/mux/src/netcommon.cpp @@ -1058,25 +1058,15 @@ static void announce_connect(dbref player, DESC *d) int key = MSG_INV; if ( loc != NOTHING && !( Hidden(player) - && Can_Hide(player))) + && Can_Hide(player)) + && !Blind(loc)) { key |= (MSG_NBR | MSG_NBR_EXITS | MSG_LOC | MSG_FWDLIST); } dbref temp = mudstate.curr_enactor; mudstate.curr_enactor = player; -#ifdef REALITY_LVLS - if (NOTHING == loc) - { - notify_check(player, player, buf, key); - } - else - { - notify_except_rlevel(loc, player, player, buf, 0); - } -#else notify_check(player, player, buf, key); -#endif // REALITY_LVLS atr_pget_str_LEN(buf, player, A_ACONNECT, &aowner, &aflags, &nLen); CLinearTimeAbsolute lta; dbref zone, obj; @@ -1206,22 +1196,12 @@ void announce_disconnect(dbref player, DESC *d, const UTF8 *reason) key = MSG_INV; if ( loc != NOTHING && !( Hidden(player) - && Can_Hide(player))) + && Can_Hide(player)) + && !Blind(loc)) { key |= (MSG_NBR | MSG_NBR_EXITS | MSG_LOC | MSG_FWDLIST); } -#ifdef REALITY_LVLS - if (NOTHING == loc) - { - notify_check(player, player, buf, key); - } - else - { - notify_except_rlevel(loc, player, player, buf, 0); - } -#else notify_check(player, player, buf, key); -#endif // REALITY_LVLS if (mudconf.have_mailer) { @@ -1354,22 +1334,12 @@ void announce_disconnect(dbref player, DESC *d, const UTF8 *reason) key = MSG_INV; if ( loc != NOTHING && !( Hidden(player) - && Can_Hide(player))) + && Can_Hide(player)) + && !Blind(loc)) { key |= (MSG_NBR | MSG_NBR_EXITS | MSG_LOC | MSG_FWDLIST); } -#ifdef REALITY_LVLS - if (NOTHING == loc) - { - notify_check(player, player, mbuf, key); - } - else - { - notify_except_rlevel(loc, player, player, mbuf, 0); - } -#else notify_check(player, player, mbuf, key); -#endif // REALITY_LVLS raw_broadcast(MONITOR, T("GAME: %s has partially disconnected."), Moniker(player)); free_mbuf(mbuf);
If you aren't using my fork (which now has a few other rather invasive changes)-- then THAT patch there is your best bet.
Quick explanation: Brazil got the ifdefs for reality_lvls wrong and the result is it emits a bunch of extra messages if your game is built with them. He disagreed, and cited incompatibility with other game(s)-- likely Firan, but I haven't talked to anyone on that side and didn't immediately see what the conflict would be. In any case, the patch is certainly compatible with new games that want this behavior, so there it is.
-
RE: What do you WANT to play most?
@Three-Eyed-Crow said in What do you WANT to play most?:
Original theme sci-fi. Though I'd also just like to see some not-overdone sci-fi, like something based off Star Trek or a newer property like The Expanse.
More harder sci-fi too... Blue Planet, Eclipse Phase, etc.
@Ghost said in What do you WANT to play most?:
Matrix
Only if you retcon that stupid "humans are for heat because we don't understand basic thermodynamics lol" nonsense in the movies.
Farscape
Playable ships?
Conan
By CROM! I have more fondness for that IP than I should. Somewhat helpfully, it has a rich history of trading hands through the years so likely it's easier to avoid infringement claims than you'd think-- much like the Cthulhu mythos, it has been fanfic'd for over a hundred years.
Street Fighter
...but why? Freaking capcommunists.
If you want to make a mush out of a fighting game, then you should
LET MORTAL KOMBAT BEGIN! *Gongggg* o/~ test your MIGHT o/~
Horror that isn't WoD
Hell yes. I'd love to see a game set in the world of the Laundry Files (Charles Stross)-- there's even an RPG book for it already. It's fantastically detailed and appeals to me thematically in a great many ways.
Problem is, as has been pointed out to me repeatedly... this devolves to a bureaucratic infighting simulator if you take it to anything larger than tabletop.
Dark, original fantasy theme
We don't need more song of ice&fire clones.
-
RE: Generic sci fi game.
@Apollonius said in Generic sci fi game.:
I'd like to just be a bartender in space.
You don't need a beard. You just need to be like John Hurt back in Privateer 2, partying like you're in a video game from 1993.
-
RE: MU Things I Love
@Thenomain said in MU Things I Love:
Thanks, Theno~
@Arkandel said in MU Things I Love:
@Thenomain said in MU Things I Love:
I largely stopped enjoying myself in this hobby about four years ago. That what I do can help other people from hitting this point is pretty much all that keeps me going.
You are a weird, grumpy old man.
This is true of a lot of us-- at least the weird/grumpy part and Theno's reasoning.
-
RE: Portland(ia, ia, fhtag'n)
And now, the real reason I love Portland.
-
RE: Portland(ia, ia, fhtag'n)
Living in Portland now! ...the movers arrive with our boxes in a week tho. Thankfully, the house is basically furnished already, so essentials are present.
Classy neighborhood too:
Apparently Portland has one of the highest per-capita concentrations of stripclubs. * shrug *
The house is amazing. Here's a shot of the dining room from the listing:
Original wood!
The drive up was amazing. Well-- the California part up the 5 was as-expected; an endless sea of cowshit stretching to the horizon. The Siskiyou pass was beautiful though-- still snow on the ground, but we didn't need to break out the chains. Rained pretty much continuously from the Oregon border all the way to Portland. I LOVE IT.
-
RE: Portland(ia, ia, fhtag'n)
@Admiral said in Portland(ia, ia, fhtag'n):
My condolences. Please don't trip over any hipsters.
Well, I'm already a flannel-and-jeans girl stomping around in docmartens so I might be more the problem than the solution. And I'm clumsy enough that I've tripped on pavement a couple times already...
(no, my name is NOT Wicker Basket, hahaha)
...so, this summer, might you have a couch... >.>
Kinda depends on where we end up. We're looking at some niiiice apartments near the river/downtown but still on the east, and some houses out in the mt tabor area. Both are a bit smallish. Everything is so astonishingly walkable/ridable though!
And I hear Powell's is amazing (and is about 80% of why I want to visit).
We'll be checking that out sometime this week. Grant you I mostly use kindle except for reference textbooks these days... It's the only practical way to plow through a trashy urban fantasy / paranormal romance novel each night.
Watch it, she'll drink all your booze and try to steal your cat.
She almost did this with me.
Sadly, our cat (Squee!) died Christmas night, so we are momentarily petless-- this is part of what made it possible to contemplate a move so suddenly. Definitely miss her though. http://www.accela.net/lucca/img/squee-says-hi.jpg was a shot from last year-- she'd just turned 13 or so. And yeah, nwod books in the background, woo.
As for booze, well. Doubtful. * Eyebrow waggle intensifies *
Now I just need to drag @Misadventure up here with us. The friends we made in San Diego are pretty much ALL I will miss about that place.
So far here we've done
Portland Cider somethingorother - They had cider! And cajun tatertots. Tasty.
Stumptown Coffee - Oddly disappointing compared to the online selection, but it was a little one
Sweet Hereafter - A few decent beers and OMG good food if kinda bizarre. I had a ..uh... tofu benedict? Very spicy and unexpectedly delicious
Slappycakes - Breakfast place, griddles at each table where you can make your own pancakes. Sounds like heaven, but the line was 50min so we went to the bar area and had to let the cooks make our pancakes. Still obscenely delicious and the cooks were all super friendly, if kinda busy.
Por Que No? - a taqueria! Rather impressively good for being so much farther north of the border than I'm used to. Damn fine chips and an unexpectedly large selection of vegetarian options.
Ruby Jewel - Ice cream! Rather good flavors, lots of samples to try. I got a rootbeer float. Yes, I know everyone says I need to go to the Salt&Straw but we're waiting for a non-holiday-weekend time so that the line doesn't stretch out of state.As for work, well... I'm on the first serious vacation I've had in many years. (o/~ for the first time in for-ev-er o/~) Clearly we need to move more often!
-
Portland(ia, ia, fhtag'n)
Hi everyone and sorry for being such a scarce little octopus these days. My partner and I are moving up to Portland, basically end of next week or so. This week we're still scuttling about the city looking at apartments and houses-to-rent and things and already have found some really neat ones.
I dunno if we'll have time to meet up with anyone this week, but hopefully soooon!
The food here is all crazy delicious and the people are awesome and it RAINS and I love rain and my favorite plants are moss and lichens and our favorite coffee (Stumptown) is like DOWN THE STREET... life is great.
-
RE: Tracking Alts on Dynamic IPs
Well. There are several problems here. Some technical, some not. First, the technical, because that's the easy part:
- @WTFE's method above is a great solution if you have shell access, which probably covers the set of people who should be doing this anyway (see social problems, below).
- If you want it in game, consider if history matters;
- Most mush types record the last connected address (or even a handful of them) on some of the wizard only attrs; if that's enough, it becomes a process of sweeping through character objects to find matches of some sort.
- If that isn't enough, you'll need to record the history yourself in some format. Consider how you want to do this and whether or not it is worth the trouble; SQL is one reasonable solution, but there are likely others.
If you have what you need in attributes, see
@grep
and similar tools. If you need it in SQL, you'll need your alt-detector to run a select of some sort to find things....I just looked at what I had on TheReach and ... uh, no, that's ugly. In summary though, I had a table with IPv4 address, hostname, char dbref number, and some time data. When people connected, it updated it as needed, and alts checks of various levels used
select
s with a horridly tangled mess of subqueries to do CIDR bitmasking in sql, which was kinda cool but horrible slow, done inside a synchronoussql()
that stalled the whole game and pretty much theno was the only one who ever knew how to use it safely. Do not recommend.Gotchas I noted that you should keep in mind: Many games are starting to support IPv6. Most older games are IPv4 only, and the traditional "dotted quad" form we know and love is IPv4-only. Brief review on terminology:
- IP stands for Internet Protocol; TCP/UDP are implemented on top of IP packets. PING and similar tools send special IP packets.
- IPv4 has 32bit host addresses, conventionally represented with a dotted set of four 8bit numbers written in decimal (i.e. 0-255). Hilariously, 4 billion addresses aren't enough and we're running out. (Well, ran out a while back, but limping alone either way)
- IPv6 has 128bit addresses, conventionally represented as colon-separated sets of 16bit numbers written in hexadecimal. (i.e. 0-ffff).
- IPv6 has a lot of zeros in it, so the :: means "shove a ton of zeros in that spot 'til it makes a full address." (e.g. ::1, or all zeros followed by 1 -- is the IPv6 localhost)
- Hostnames may point to any number of IPv4 or IPv6 addresses, or both. (In A and AAAA recordsets via DNS, which is another lecture)
- IPs can point to hostnames (really just one unless someone screwed things up) but are often misconfigured.
For both of these, we talk about "netmasks" as a way to describe ranges of addresses. Instead of 1.2.3.*, meaning 1.2.3.0 through 1.2.3.255, a better way to describe it is 1.2.3.0/24 -- the 24 meaning the first 24 bits are meaningful but the last 8 are not. Likewise 1.2.2.0/23 covers 1.2.2.0 though 1.2.3.255. There are calculators online that can help with this if you get confused, or you can use the really ugly old form with netmasks like 255.255.255.0, (meaning /24)
IPv6 does the same thing, but obviously has more bits. /48's and /64's are very common. /128's are almost useless, because of how many addressable bits can be freely rechosen by the client under normal configs in the interest of privacy. (Yes: Modern internet is designed to make this difficult for you to do.) Players can and DO actively set their ipv6 address to hilarious stuff, like :feed:face:dead:beef: and whatnot.
Hostname resolution from an IP is not reliable. IP's might come into your game in either form. You can represent ipv4 as an ipv6 addr of the form ::ffff:1234:5678 where the last two terms represent the 32bits of the ipv4 addr. e.g. 10.0.0.1 -> ::ffff:a00:1.
Players connecting via dynamic IP might:
- Keep the same IP for years
- Switch addresses several times a night in their same ipv4 /24.
- Alternate between several seemingly unrelated ISPs (which can be home/work/school/coffeeshop, but not always)
- Switch addresses periodically over astonishingly large sets like /16 or worse.
The wider you match, the more matches you can find, but the less meaningful they will be. Believe it or not, some people do live in neighborhoods with OTHER PEOPLE that actually use internet! This can muddy waters quite a bit.
You need to handle and use this sort of matching for it to really be an effective tool. If storing in sql, use the async
@query
system if your game has it (mux, etc).sql()
is synchronous and will make you cry.This brings us to the social problems part. People don't seem to understand the concept of false positives. For that reason, +alts checking of this sort usually needs to be limited to a very small set of people or you'll spend all your staff time trying to put out drama fires. No, documentation does not help. Meetings do not help. BBposts, forumposts, wiki pages, etc. all do not help. People are dumb, suspicious, and paranoid. If they see the slightest hint that person A is connecting from THE SAME PLANET as person B then CLEARLY THEY ARE THE SAME PERSON and OUT TO GET THEM. This gets old very, very fast.
Further, there are a very large number of cases where multiple people from the same household play, so they all show up on an IP. HOWEVER, you cannot use ip-match to prove people live together. Consider:
- Most of my mush connections would appear to originate from 66.220.1.33.
- My lovely partner has her own farm of servers and while we would often be playing from the same room, we potentially appear continents apart.
- Both of us offer shells in various forms for various purposes, leading to a multitude of other people that seem to live with us, but do not.
- 66.220.1.33 was the ipv4 address for KUU, one of the big Mechanipus servers hosting the Reach and a bunch of others. That quickly made it look like all game wiz's on all games there were coming from the same place, which I'm sure made all sorts of hilariously salacious rumormongering possible.
- It gets even worse if you connect via localhost.
So: Can this sort of ip-address based system tell you:
- If two people are the same, for certain? No.
- If two people are different, for certain? No.
If that is confusing, disheartening, or seems otherwise wrong, then that methodology cannot help you. (Not sure anything can, really...)
So: What's the best path forward?
On Haunted Memories, we had a player-accessible system for declaring your alts for staff. This worked very well, nice, and safely. It did 90% of what staff ever needs these things for, didn't show other players who was who, and didn't have any false positives(*). It did depend on player honesty and player trust in staffers.
Really though, if you can't trust staff with the knowledge of your alts, why the hell would you play there?
(*) Actually it had some hilarious bugs related to recycled DBrefs getting reused without correctly updating these tables, so for months it showed one of my alts as somebody's armor vouchers or something, but that's a different sort of trouble.
-
RE: Dystopia MUX
@Auspice said in Dystopia MUX:
Sooooo... game down? WHAT HAPPEN
Kuramori (one of the larger Mechanipus hosting servers) is undergoing kernel update and
a briefseveral migrations to updated the virtualization setup. Things will start back up when that completes, which I was hoping would be about 90 minutes ago, but will probably be more like another 30-40 minutes.In more technical detail for the morbidly curious:
- Updating the kernel to address privilege escalation vulnerabilities
- Migrated off Linode's legacy Xen environment into their KVM environment
- Migrated again to take advantage of some of their additional service upgrades (trading cpu count for MOAR RAM, etc)
- Resizing of disks
Some of those operations are unfortunately rather slow. Kuu went through most of these updates shortly after decomissioning of The Reach.
Sorry for the inconvenience; please remember that planned maintenance is better than unplanned maintenance, and Dystopia will be back up and perky very soon.