Issue Overflow: A is for ACK

By Zachary Flower

So… we post a lot of resources in The MUD Coders Guild Slack. I’ve been doing some digging into our analytics, and the members of TMCG post nearly 30,000 messages a month.

That’s a lot of chatting!

As subscribers of The MUD Coders Guild Newsletter know, we’ve had a history of massive emails, so welcome to our second edition of the Issue Overflow , an aggregation of articles, videos, projects, and resources discovered and shared by the members of The MUD Coders Guild.

> open source

websocket

A WebSocket implementation for Go.

ws

ws is a simple command line websocket client designed for exploring and debugging websocket servers. ws includes readline-style keyboard shortcuts, persistent history, and colorization.

tracery

Tracery: a story-grammar generation library for javascript

bb2tcp

This program acts a as TCP proxy on the Byteball network. By default, it serves the current time from telnet://india.colorado.edu (port 13). However, it can trivially be configured to serve any TCP service over the Byteball network.

dyon

A rusty dynamically typed scripting language

prose

A Golang library for text processing, including tokenization, part-of-speech tagging, and named-entity extraction.

fantasyname

Fantasy name generator. Four implementations — JavaScript, C++, Elisp, and Perl — of the name generator described at RinkWorks. The JavaScript and C++ implementations are by far the most mature.

ecs

This is our implementation of the “Entity Component System” model in Go. It was designed to be used in engo, however it is not dependent on any other packages so is able to be used wherever!

accent

Open-source, self-hosted, developer-oriented translation tool.

beam-dashboards

A collection of Grafana dashboards for visualizing Prometheus BEAM metrics.

elixir-battleship-guesser

Elixir AI for the “Battleship” game to demonstrate my elixir behavior tree library.

elixir-behavior-tree

Elixir library for building AI’s from composable behavior trees.

fluent-behavior-tree

C# behaviour tree library with a fluent API.

kmud

MudOS-inspired Node-based MUD.

room.js

RoomJS is a modern Node.js-based MUD/MOO engine, where (privileged) players can extend everything while in game. The basic idea is that one can create and edit objects, locations and code from inside the game.

siege-mud

The Seige MUD. A CircleMUD-based MUD inspired by Rainbow Six Siege.

lambda-moo-programming

Lambda MOO Programming collects and updates numerous MOO guides in one place and includes an updated and expanded version of the MOO Programmer’s Manual in markdown and HTML5.

memento

Simple + Powerful interface to the Mnesia Distributed Database.

mud-pi

A simple MUD server in Python, for teaching purposes, which could be run on a Raspberry Pi.

> inventory

Medieval Fantasy City Generator

This application generates a random medieval city layout of a requested size. The generation method is rather arbitrary, the goal is to produce a nice looking map, not an accurate model of a city. Maybe in the future I’ll use its code as a basis for some game or maybe not.

> cast ‘inspiration’

List of Dick Tracy Villains

The following is a list of Dick Tracy villain debuts. One of the appeals of the Dick Tracy comic strip is its unique villains. Many had bizarre deformities including The Blank (1937), Little Face Finney (1941), Pruneface (1943), The Brow (1944), Shaky (1945), and Pear Shape (1949). Chester Gould wrote these villains for his reader’s righteous condemnation, without exploring moral gray areas. This was emphasized by depicting the heroes as attractive and the villains as grotesque.

Chicken Esolang

Chicken is an esoteric programming language by Torbjörn Söderstedt, in which “chicken” is the only valid symbol.

Watership Down Lapine Vocabulary

Watership Down — A novel by Richard Adams.

Sample space flight from Starmourn

Here is a short space flight video from our upcoming game, Starmourn. In this instance we are just navigating around the Nocturne zone, starting at the red giant sun before moving to the lava planet, Ecliptis. Near the planet, you can see the dark moon, Shroud.

> train int

Why aren’t we using SSH for everything?

A few weeks ago, I wrote ssh-chat. The idea is simple: You open your terminal and type ssh chat.shazow.net. Unlike many others, you might stop yourself before typing “ls” and notice — that’s no shell, it’s a chat room! While the little details sink in, it dawns on you that there is something extra-special going on in here.

Fluent behavior trees for AI and game-logic

Do you need an economical and effective way of using behavior trees? The fluent behavior trees API allows the coder-come-game-designer to have many of the benefits of traditional behavior trees with much less development time.

Behavior trees for AI: How they work

While there are plenty of behaviour tree tutorials and guides around the internet, when exploring whether they would be right for use in Project Zomboid, I ran into the same problem again and again. Many of the guides I read focused very heavily on the actual code implementations of behaviour trees, or focused purely on the flow of generic contextless nodes without any real applicable examples.

Introduction to Behavior Trees

Welcome to a series of blog articles about my experiment (read: stumbling around) of marrying data-oriented, memory-streamlined behavior trees with a second representation to ease creation and modification during development. I write it to document my findings and decisions and to ask for your invaluable feedback to build a BSD licensed BT toolkit that is truly useful.

How Discord Handles Two and Half Million Concurrent Voice Users using WebRTC

From the very start, we made very conscious engineering and product decisions to keep Discord well suited for voice chat while playing your favorite game with your friends. These decisions enabled us to massively scale our operation with a small team and limited resources.

How to build a Low-Tech website: Software & Hardware

Earlier this year we’ve been asked to help redesign the website of lowtechmagazine.com. The primary goal of the redesign was to radically reduce the energy use associated with accesing their web content. At the same time it is an attempt to find out what a low-tech website could be.

> quaff elixir

The Road to 2 Million Websocket Connections in Phoenix

If you have been paying attention on Twitter recently, you have likely seen some increasing numbers regarding the number of simultaneous connections the Phoenix web framework can handle. This post documents some of the techniques used to perform the benchmarks.

Getting each stage of Elixir’s compilation all the way to the BEAM bytecode

Piggy backing a bit on @dvcrn topic BEAM optimization for functions with static return type? I’ve been trying to understand in a deeper manner how Elixir works internally to generate the BEAM’s bytecode. After reading way too many blog posts I’ve found some things…

Voice Leading with Elixir

I play quite a bit of guitar in my free time. Once of the things I’ve been practicing lately is improving my voice leading between chords. Voice leading refers to how the individual notes, or voices, within a chord move when you transition to another chord. You often want as little movement as possible to keep the transition from sounding jarring (unless you’re going for jarring).

Monitoring Your Elixir App with Prometheus

We previously monitored our applications with tools such as New Relic, but with the removal of the free server monitoring last year, we decided to take a look at other monitoring solutions. What we ended up with was a combination of Prometheus, Grafana, and the alert manager for Prometheus.

Tokenizing and parsing in Elixir with yecc and leex

Lexical analysis (tokenizing) and parsing are very important concepts in computer science and programming. There is a lot of theory behind these concepts, but I won’t be talking about any of that here because, well, it’s a lot. Also, I feel like approaching these topics in a “scientific” way makes them look a bit scary; however, using them in practice turns out to be pretty straightforward. If you want to know more about the theory, head over to Wikipedia (lexical analysis and parsing) or read the amazing dragon book (which I recommend to all programmers, it’s fantastic).

> ooc

The Agile Bicycle: A Better Analogy for Software Development

In a recent software development seminar, we discussed a famous analogy for agile development. If you’ve ever read a book or attended a training session on agile/Agile development, you’ve probably seen it, too. Henrik Kniberg created the original and best known version of the drawing.

Oh yeah, that’s why I don’t play MUDs anymore

This morning I popped into Genesis, a MUD (Multi-User Dungeon). It’s a free to play, multiplayer fantasy text adventure you can play in your browser. Genesis has been around since 1989 (and is amazingly still getting updated), whereas I myself probably haven’t played a MUD since the late 1990s and haven’t played a text adventure in probably just as long.

Text adventures are back from the dead

It’s easy to dismiss text adventures as the relics of a bygone age. They served a purpose when art and animation were too memory-intensive for the computers of the day. They were popular with a generation of players who thought choose-your-own adventure novels were neat.

Evennia 0.8 released

After about a year of work and almost 540 commits from close to 20 contributors, Evennia 0.8 is out! Evennia is a Python game server for creating text-based multiplayer games (MUDs, Mushes, etc) using Django and Twisted.

> afk

Witchcraft: Monads for the Working Alchemist — Brooklyn Zelenka — Elixir.LDN 2017

Witchcraft, Algae, and Quark bring several utilities to Elixir from other languages, enabling an easier, principled use of tools such as algebraic data types and monads. Witchcraft’s goal is to feel fully idiomatic, and provide a gentle learning curve for learning the new concepts that it introduces. This talk walked us through the library basics, demonstrating common use cases, and discussed some of the opportunities for integration with the existing Elixir ecosystem.

Optimizing RTC for Distributed Teams — Nick Gauthier of MeetSpace

Nick Gauthier of MeetSpace talks to WebRTC Boston about how he optimized his WebRTC video collaboration implementation for low cost but voice quality first.

MOO Programming #1: The Basics of LambdaMOO Programming

Start learning how to code in LambdaMOO. In this video we touch on some basic MOO programming commands and general information about programming in MOO. A must watch if you’re new to MOO (Multi User Object Oriented) or LambdaMOO in general.