kageneko
This is just about building the framework for now and then putting it loose into the world. I have a big refactor in mind to further decouple the client/server from the game engine, but it'll take some work.
I did make a sample database (a JSON file that was imported into the database) for an earlier iteration that was almost entirely LLM generated. I provided it with description of the general area and what sorts of things could be found there, along with the climate and such. It did a really good job with descriptions and added little touches but it had trouble keeping the map in mind and so things that were located in the north could also be reached by going east. That could also be prompting on my part or just not giving it a strong enough framework.
This year, I am creating a nodejs MUD, well closer to a MUSH actually.
* Everything is an Entity with Attributes * A player is an Entity with its client property set * There's a handful of built-in commands, but the important ones are @eval and @set-attribute * The soft-code language is ... JavaScript. * It uses the vm module from nodejs[0] to execute stuff. * It has separate clients (so far) for Discord, Slack, and local console. It's easy to add more and will be easier after I do this one refactor.
Each time an soft-code command or function or what have you executes, it creates a new context to isolate the soft-code from the rest of the application and uses Proxy objects to isolate the database Entity from the soft-code Entity. As an example, this is the look command (placed on the global registry object):
if (!me.location) {
me.send("You are nowhere.");
} else {
me.send("**" + me.location.name + "**");
const contents = me.location.contents;
if (!contents?.length) {
me.send("You see nothing here.");
} else {
me.emit("You see:\\n" + contents.map(thing => "* " + thing.name).join("\\n"));
}
}
The Proxy manages access to Entities and Attributes (for example, Attributes can only normally be accessed by their owners).The MUSH outputs markdown for everything, so each client can format it however it likes.
I know the security is not nearly close to perfect, but it's mostly a proof of concept that I will make public one day. I did do a few things, like disable eval and Function and Promise but there's probably plenty of ways to get around it.
The new one is browser based.
The mud engine runs in a web worker and takes advantage of some of the modern web tricks to do stuff. For instance, data files (think: area files that don't change often) can be stored remotely and then cached with a service worker. This allows the MUD to run offline. But that's only fun if you're playing solo.
IO between the UI and worker is handled by message passing.
Multiplayer is handled by the MUD opening an outbound connection (probably websocket) to a connection collector host. Other players would then connect to that host and have their IO routed appropriately. The host can even be smarter: it could be a specialized Discord client, allowing users to play from there. Firebase may also be involved. I don't know.
The important bit is that this is still basically message passing, so the engine won't need to know the difference between the local user and a remote user.
The MUD database would be an IndexedDB. Probably. I haven't thought as much about that yet.
I am sure all of this is theoretically possible, at least.
There are a lot of subreddits with a lot of useful information. Search for "citizenship by descent" (not just on reddit and not just about Germany) and you'll be overflowing with stuff.
Example: I am super focused and stay on something until it is done. I am also super focused and follow problem rabbit holes all the way to the bottom.
So, I did. I tried to remember every question every recruiter had asked me (and started taking notes from then on). I wrote down 1-2 paragraph answers for each question. I found that just the act of writing down these answers and reviewing them later helped even when the interviewer would ask questions that were not on my practice sheet. It would nudge my memory and keep things fresh and a lot of things could be used for related topics.
Especially since I'm building a MUD again, but using Discord and Slack as the clients.
For drawing, diagramming, and writing things out, I often use an iPad Pro and Apple Pencil, with the Paper app [0]. I find that writing with a pencil-type thing works better for me than typing.
I also do Rubber Duck brainstorming. This is often for asynchronous collaboration with other people. I'll start up an audio recording and kinda do a stream-of-consciousness thing. If necessary, I'll go through later and edit it or take more notes from what I just said. If I'm using Paper, I'll often do a screen recording at the same time, so I can talk while I'm drawing/diagramming.
If I _have_ to use other tools, I prefer Markdown over pretty much anything. I really like StackEdit [1] because it's browser based, easy to use, and easy to sync with git repos. I take session notes for my D&D group and they automatically get turned into GitHub Pages.
0. https://apps.apple.com/us/app/paper-by-wetransfer/id50600381...
Example:
steps:
- uses: actions/checkout@v2
- uses: sfdx-actions/setup-sfdx@v1
with:
sfdx-auth-url: ${{ secrets.SFDX_AUTH_URL }}
or steps:
- uses: actions/checkout@v2
- name: Run deployment script
env:
HEROKU_API_TOKEN: ${{ secrets.HEROKU_API_TOKEN }}
The first is for an Action, the second is for a normal workflow script.I regularly drive through Alabama on the way to Florida (from Atlanta). One time, I took a wrong turn and ended up in a small town with absolutely no cell signal and closed roads everywhere. We stopped and asked a local for directions. This was SE of Dothan, AL, I think.
And several times, Google Maps has routed me through areas where I no longer have a signal (south-central AL). Once when this happened, the road it wanted me to go on was closed and it couldn't download an update. I handled this one by just driving northish, knowing that I'd hit Montgomery eventually.
https://www.npr.org/2019/06/27/736715592/the-private-firefig...
It's mostly just for fun.
Maybe one day I'll add some kind of analysis to it. It might be interesting to track location, motion, and car status in order to predict mileage or if the engine light will turn on.
But one of them was an AC adapter for my laptop :|
After I plugged it in, my laptop smoked. Well, more like sizzled. The manufacturer replaced the motherboard for me. After it happened, I examined the two AC adapters I had (real + not-real) and they were virtually identical except for some font and mark differences.
That was enough for me to change my shopping habits wrt to expensive electronics and to start using review analysis sites for everything.
Back then, I was Artanin and the drama is why I gave up the mud. I did put the Weave files I have on github, tho.
I used to think it was awful that life was so unfair. Then I thought, "Wouldn't it be much worse if life were fair, and all the terrible things that happen to us come because we actually deserve them?" So now I take great comfort in the general hostility and unfairness of the universe.
MARCUS COLE, "A Late Delivery from Avalon" (1996)
To be honest, it sometimes does get to me that if I had made different choices or been in different situations, I might be richer/healthier/happier. Of course, I might also be poorer/sicker/unhappier, too.
Most importantly, I also know that I wouldn't be /me/ anymore.
I'm hoping this leads to a future where 3rd party accessories snap on and charge.
https://www.npr.org/sections/money/2018/05/02/607787950/epis...
* I got a terrible lisp since the shape of my mouth changed. It took quite a few weeks to get used to.
* The first couple of days after switching trays (I switch every week) are kinda painful because of the new positioning.
* My diet changed because I cannot eat (or drink many things) with my trays in and I need to brush my teeth after every meal. I used to eat many, small meals throughout the day but now I do 3 larger ones because it's annoying to brush and such a lot.
* Eating out is "fun" -- I bring a toothbrush and my tray box, so I can take care of things.
Fortunately, I work from home most of the time so a lot of this is not a serious problem.
11 weeks in and my overbite is disappearing and there has been some changes to the gap. Overall, I am very happy.
I (obviously) don't watch 3D movies too often. When the technology first came out, it was really bad and gave me not-quite-headaches, not-quite-nausea when wearing glasses. It's better now but I don't get nearly the effect that the movie makers are going for and some of the more blatant effects (like things jumping out of the screen) end up looking weird and off-putting -- like getting half an image and stuff.
Others have types available in "@types/<package>".
For everything else, I create a "types.d.ts" file that just has a bunch of stuff like:
declare module 'twilio';
declare module 'bitly';
declare module 'cloudinary';
declare module 'tmp-promise';
declare module 'dialogflow';
declare module 'fuel-rest';
And then those modules get set to the "any" type.