kageneko

Joined 12 years ago

Karma
120
Submissions
67
Member since
Dec 16
My github, full of tasty goodness: https://github.com/herrevilkitten

Always a researcher, sometimes a scientist. Be the UX you want to see in the world.

View on Hacker News

Recent submissions

Comment · 2 months ago
Yeah, but that's a different project than this one :D

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.

Comment · 2 months ago
I grew up coding MUDs (in college) and every year I try to recreate that glory, so I start a fresh MUD code base from scratch.

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.

Comment · 1 year ago
I've always been into MUDs since the mid-90s and every now and then I get this idea to write one from scratch (again) and I get pretty far and then I lose interest.

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.

Comment · 1 year ago
After some research, mostly in /r/GermanCitizenship, I recently applied for and received my German passport, based on my mother being German at the time I was born.

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.

Comment · 2 years ago
One of the "perks" of my Walmart+ membership is scan-as-you-go. I think I've used it twice. Both times, I only had a few things and the store was packed solid with spring breakers. It was a decent experience but I still like the normal self-checkout the best.
Comment · 4 years ago
I'm pretty introspective and I've got my strengths and weaknesses down. They're also the same things, but in different directions and degrees.

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.

Comment · 4 years ago
I had the same problem with these questions. Then one day a recruiter said to me, "kageneko, your engineering skills are on top, but your question answering is really bad. I think it would help if you wrote down some questions and answers beforehand."

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.

Comment · 4 years ago
Screen readers often read things in particular ways that non-screen readers would interpret differently. One example that I've run into is using all caps to label something, like "ACCOUNT NAME". Screen readers will typically read out each letter individually instead of as a word. There could be other things, like describing field colors or something that are not as useful when audio only.
Comment · 5 years ago
Ah, such memories. MUDs were the first reason I almost flunked out of college. Especially when I started running my own. Gonna read this so much.

Especially since I'm building a MUD again, but using Discord and Slack as the clients.

Comment · 5 years ago
Comment · 6 years ago
I've bought a few non-smart TVs from Wal-mart: Sceptre brand. They were cheap and functional. I use them with Fire TV sticks, XBox, and this NUC that I've got sitting around.
Comment · 6 years ago
They don't have direct access. You need to assign the secret in your workflow file.

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.
Comment · 6 years ago
I picked up a 41 inch Sceptre earlier this year and I loooove the lack of smart features. For watching TV in my office, it works amazingly well.
Comment · 6 years ago
I wouldn't bet on the availability of a data plan.

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.

Comment · 7 years ago

Live from the official Hacker News API

A modern reader for Hacker News · SvelteKit + Skeleton