Live data from Hacker News

Show HN: Noric-bot – A bot to stress-test text-based MUDs, written in Scala 3

github.com

41–50 of 72 posts

Re: Show HN: Noric-bot – A bot to stress-test text-based MUDs, written in Scala 3

#41
post #32

I was an admin (wiz) on various MUDs and MUSHs many, many years ago, and of course an avid user. The mix of programming, creativity, and camaraderie was sometimes very special. Maybe my recollections are clouded by nostalgia, but it sometimes felt like a hacker fantasy, coding, role-playing, and working together for good (fun). I wish I could recapture that feeling, I wish there were time for it, and I wish there wer…

Agreed! I am quite nostalgic about my time in MUDs and MUCKs. I recently came across a dot-matrix realtime-printout of some shenanigans (complete with type-over when I hit backspace). Brought a smile to my face.

The realtime, collaborative, communal, asynchronous improvisation that could occur was so, so satisfying.

Re: Show HN: Noric-bot – A bot to stress-test text-based MUDs, written in Scala 3

#42
post #8
post #5

Doesn't look like this does anything clever/special; it just randomly spits a finite set of handwritten commands to the socket that the author's target MUD happens to accept. Was hoping that this was something more like AFL for TCP clients, discovering all the commands the MUD supports, and through it, the entire state-space of the MUD's world-model.

Fair enough. I try to spend as little time as possible on the bot and more time on the game itself :-) The bot you describe sounds cool -- would love to see it!

How useful is this test tool to you? What bugs did you find or do you hope to find this way? How often and long do you run it?

I'm asking, because I guess, it probably takes ages to traverse some kind of dungeon. If there are special sequences, the tool will most likely never find them (like find key, open door, kill boss), right?

I've done some small games in my spare time, but Unit-Testing was either completely useless or way overkill. But I guess, the larger your game gets, the more important it will be.

But the the work involved is so huge, that I think it's not worth it for indy games or small studios. If you look at the test setup for AAA-Games, like League of Legends [1], the work involved is mind-blowing...

[1] https://technology.riotgames.com/news/automated-testing-leag...

Re: Show HN: Noric-bot – A bot to stress-test text-based MUDs, written in Scala 3

#43
post #7

Well that's kinda cool. I didn't know there was a discord chat for mud coders. Also it appears there's a slack chat for mud coders as well https://mudcoders.com Oh even cooler, there's a mud chat network so people can chat between muds: https://grapevine.haus (coded in elixir too!)

intermud chat was something we tried back in the day. i was only ever on one team where we got it implemented. fun times.

Re: Show HN: Noric-bot – A bot to stress-test text-based MUDs, written in Scala 3

#44
post #31

Earlier quoted context omitted.

I’m a professional Scala dev, what exactly do you mean? Structural sharing instead of copying? Implicits?

package mypackage import shapeless._ import anorm._ import mything.MyObject._ import com.seriouscompany.Foo object MyThing { val a = new A() } What does A refer to? Where does it come from? One of the 15 files in the anorm package? Does it come from one of the 40 files in the shapeless package? What about mything.MyObject and the dozen mixin traits that it has? Alright, let me clone the repo, startup my 4GB IDE, wait…

Well, I bet it comes from either shapeless or anorm or mything.MyObject. Moreover, how is this different from literally any other programming language? Also, I would venture to guess that almost all programmers regardless of the language or editor/IDE they are using have some sort of jump to definition function they use all the time. At least with Scala I can actually see the source of the definition reliably, which is more than you can say about C or C++ (headers don't count).

Re: Show HN: Noric-bot – A bot to stress-test text-based MUDs, written in Scala 3

#45
post #14
post #13

Awesome! I'm going to have to check that out. I'm doing a human stress test on my mud project, Enceladus right now! There's over 25+ people in so far. It's the worlds first realtime crypto RPG, as in you can find ethereum in the game. Come help us test it!! https://discord.gg/S7TkGXX or http://enceladusgame.io/playtest

Really polished UI!

Thanks! I've been working my ass off on it!

Re: Show HN: Noric-bot – A bot to stress-test text-based MUDs, written in Scala 3

#46
post #40
post #16

Cool project, but why engage in language flame war on the project readme: > I think Scala is the best mainstream language with a sophisticated type system. Sophisticated type systems are money in the bank. Going from TypeScript to Scala is like going from JavaScript to TypeScript.

> Sophisticated type systems are money in the bank. You better have money in the bank to allow for all the refactoring you will be doing once you realize your data model needs to change in unforeseen ways ;)

why would that be any easier in a dynamically typed language?

Re: Show HN: Noric-bot – A bot to stress-test text-based MUDs, written in Scala 3

#47
post #39

Earlier quoted context omitted.

package mypackage import shapeless._ import anorm._ import mything.MyObject._ import com.seriouscompany.Foo object MyThing { val a = new A() } What does A refer to? Where does it come from? One of the 15 files in the anorm package? Does it come from one of the 40 files in the shapeless package? What about mything.MyObject and the dozen mixin traits that it has? Alright, let me clone the repo, startup my 4GB IDE, wait…

Anecdotally, this is a non-issue depending on the tools you use. IntelliJ IDEA and Metals both have Go To Definition support.

[deleted]

Re: Show HN: Noric-bot – A bot to stress-test text-based MUDs, written in Scala 3

#48
post #44

Earlier quoted context omitted.

package mypackage import shapeless._ import anorm._ import mything.MyObject._ import com.seriouscompany.Foo object MyThing { val a = new A() } What does A refer to? Where does it come from? One of the 15 files in the anorm package? Does it come from one of the 40 files in the shapeless package? What about mything.MyObject and the dozen mixin traits that it has? Alright, let me clone the repo, startup my 4GB IDE, wait…

Well, I bet it comes from either shapeless or anorm or mything.MyObject. Moreover, how is this different from literally any other programming language? Also, I would venture to guess that almost all programmers regardless of the language or editor/IDE they are using have some sort of jump to definition function they use all the time. At least with Scala I can actually see the source of the definition reliably, which…

JavaScript or TypeScript don't have the problem (except for globals, but those are usually few and far between).

Python doesn't have this problem (unless you use wildcard imports, which is often recommend against [1]).

Java does not have this problem, except for protected/internal classes which have only local use anyway (yes there are wildcard imports, but they are rather rare [2]).

Go has this problem for files in the same package, but not from other packages.

C and C++ are far from a hallmark of readability. Though there is at least a common C++ practice to at least always use the fully qualified name [3].

Ruby shares this issue.

---

What makes Scala worse is that wildcard imports are strongly encouraged by libraries and in very frequently found practice, for things such as implicits whose whole purpose is to not be explicitly named.

Plus in Scala, object, classes, fields, methods...all of these can be imported into the scope. So in practice this becomes a more common problem.

[1] https://stackoverflow.com/questions/3615125/should-wildcard-...

[2] https://stackoverflow.com/questions/147454/why-using-a-wild-...

[3] https://stackoverflow.com/questions/1452721/why-is-using-nam...

Re: Show HN: Noric-bot – A bot to stress-test text-based MUDs, written in Scala 3

#49
post #16

Cool project, but why engage in language flame war on the project readme: > I think Scala is the best mainstream language with a sophisticated type system. Sophisticated type systems are money in the bank. Going from TypeScript to Scala is like going from JavaScript to TypeScript.

Not only that, accusing TypeScript of being "unsophisticated" is just dumb. Unsound, inconsistent, overly complicated, poorly abstracted, improper paradigms.....any of those would be a more legitimate criticism than "unsophisticated".

I think the author was trying to point out that Scala has type system features, like Higher-kinded types, which (although very useful in practice IMHO) are non-existent in other mainstream languages, including TypeScript.

I think that's a legitimate and, most importantly, factually correct point to make.

If you're interested in what these "Higher-kinded types" are: https://typelevel.org/blog/2016/08/21/hkts-moving-forward.ht...

Re: Show HN: Noric-bot – A bot to stress-test text-based MUDs, written in Scala 3

#50
post #8

Earlier quoted context omitted.

Fair enough. I try to spend as little time as possible on the bot and more time on the game itself :-) The bot you describe sounds cool -- would love to see it!

How useful is this test tool to you? What bugs did you find or do you hope to find this way? How often and long do you run it? I'm asking, because I guess, it probably takes ages to traverse some kind of dungeon. If there are special sequences, the tool will most likely never find them (like find key, open door, kill boss), right? I've done some small games in my spare time, but Unit-Testing was either completely use…

noric-bot has been extremely useful as a test tool, if a bit narrow due to just spamming random cmds. To your point, the bot in its present form can't automatically run a dungeon or verify edge cases.

A previous version of the server codebase was written in ruby[1]. The playable branch of that repo has a combat demo that's a bit fun, however the performance is so terrible that I shelved the whole codebase years ago.

As a long-term vision I'd like to launch an indie MMORPG that supports at least 1,000 players per synchronous, single-threaded server. It's an item/equipment focused game. Each player may have hundreds of items with a total of thousands of affects. noric-bot helps me stay on track with that goal.

  What bugs did you find or do you hope to find this way? 
The server is an actor-based "distributed system" using Akka. I only ever run it on one jvm but in theory it could be clustered. The bot helps find performance bottlenecks and actor-related edge cases.

The server runs at 4fps and Very Bad things happen if the 250ms frame time budget is routinely exceeded. The bots use a special password to spawn "fully loaded" player mobs with hundreds of items and ~1k affects. This helps me see bottlenecks like saving/persistence, I/O, Akka mailboxes growing, time spent processing player cmds vs moving the simulation forward naturally, etc.

Sometimes the bot will find logical bugs. This is usually in the context of assertions I've added that the bots will trigger.

I'll routinely write fake commands that bots will spam to execute scenarios that otherwise would be unreachable (if only due to lacking gameplay functionality at this early stage).

Often I'll just run the bots for fun and see how the game feels with a lot of other "players" running around :-)

[1] https://github.com/ryanberckmans/NoricMud ruby codebase

Post reply on HN