HNHacker News
TopNewBestAskShowJobs

kageneko

120 karma · joined December 16, 2014

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.

submissionscomments
kageneko··on Ask HN: What are you working on? (August 2026)
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.

kageneko··on Ask HN: What are you working on? (August 2026)
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.

kageneko··on Ask HN: What are you working on? (April 2025)
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.

kageneko··on Netherlands Daft Visa for Americans
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.

kageneko··on Amazon ditches 'just walk out' checkouts at its grocery stores
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.
kageneko··on Google Interview Warmup
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.

kageneko··on Google Interview Warmup
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.

kageneko··on Building the most inaccessible site with a perfect Lighthouse score (2019)
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.
kageneko··on Richard Bartle releases his classic “Designing Virtual Worlds” book for free
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.

kageneko··on Ask HN: What's your ideal tool for collecting ideas or brainstorming?
It depends.

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...

1. https://stackedit.io/

kageneko··on Samsung Ads – Demand-Side Platform
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.
kageneko··on Code scanning for security vulnerabilities now available
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.
kageneko··on For tech-weary Midwest farmers, 40-year-old tractors now a hot commodity
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.
kageneko··on A quarter of Alabamians live in homes without internet access
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.

kageneko··on Private firefighters go to work for California's wealthy
Relevant Planet Money episode (from June):

https://www.npr.org/2019/06/27/736715592/the-private-firefig...

kageneko··on Ask HN: What do you do with your Raspberry Pi?
I'm building a CarPi. I'm using a bluetooth OBD-II adapter and Python-OBD to monitor my car's diagnostics and record them. I'm planning on adding a GPS adapter and probably a gyroscope/accelerometer so I can track location and motion at the same time.

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.

kageneko··on Walmart announces next-day delivery, firing back at Amazon
I've had a few fakes or knockoffs -- mostly low-cost electronics that I didn't care too much about.

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.

kageneko··on Iconoclast: a Gothic/Cyberpunk MUD RPG, Online Since 1996
Oh hey, a fellow Weaver. Sorta.

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.

kageneko··on Amazon’s Alexa Has 80k Apps and No Runaway Hit
You can do this. I have mine set up to use Todoist. You need to add the appropriate skill and then link the account.
kageneko··on Source: Google Hangouts for consumers will be shutting down sometime in 2020
Uggh. Yeah. We've been required to use it at work, if we want real-time chat. We were using Slack before, but it was taken off the authorization list. I made a long list of things that was wrong with it while we were with it. The notifications are the worst so far. Constant notification spam for every single message. I disabled everything ... and it still sent them. I had to turn them off in iOS.
kageneko··on Alarm over talks to implant UK employees with microchips
While there is an ISO standard for pet chips, there are several competing versions that are also in use. I think my vet said there were 3 or 4 different kinds and each had a different kind of reader.
kageneko··on Ask HN: How to accept that life is unfair?
It's a bit simplistic, but this quote from Babylon 5 has resonated with me so much:

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.

kageneko··on iPad Pro
I seem to recall seeing a 2 second thing where they had a pencil and keyboard attached at the same time. And I'm pretty sure they mentioned 192 magnets built into the edges of the Pro.

I'm hoping this leads to a future where 3rd party accessories snap on and charge.

kageneko··on Facebook adding “fbclid” parameter to outbound links
I use Neat URL[0] with Firefox to strip things like that from URLs.

0: https://addons.mozilla.org/en-US/firefox/addon/neat-url/

kageneko··on America Is Drowning in Milk Nobody Wants
Like all things involving subsidies and the economy, there is an amazing Planet Money episode on this.

https://www.npr.org/sections/money/2018/05/02/607787950/epis...

kageneko··on Ask HN: What used SUV 100k-200k miles would you recommend to purchase?
About 6 years ago, we bought a 2007 Kia Sorento EX with about 90k miles on it. It's held up well (now up to 160k miles) and only needed basic maintenance. Based on my previous experience,I would have no problems buying another Kia Sorento.
kageneko··on Ask HN: Anyone choose to get braces / aligners later in life?
I've over 40, have had a major gap in my front teeth, and a slight overbite all of my life. I wish I had gotten braces when I was younger but this is the first job I've had that pays for adult orthodontia. I've had Invisaligns for about 11 weeks now. I love them but they take a while to get used to. (they were also pricey) Stuff that's happened:

* 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.

kageneko··on Chrome 69: “www.” subdomain missing from URL
I don't remember the site offhand, but I was going to one recently where example.com didn't even work, it was some weird error page -- you had to use www.example.com. If it comes to me, I'll post it.
kageneko··on Facial Recognition Is the Perfect Tool for Oppression
Because of exotropia[0], I have extremely limited binocular vision. I have had several surgeries to keep my eyes from drifting off to the side but essentially all of my distance vision comes from size and context clues. Driving at night is difficult because it's hard to compare the sizes of headlights.

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.

[0] https://en.wikipedia.org/wiki/Exotropia

kageneko··on Announcing TypeScript 3.0
A lot of packages have types built into them.

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.

Page 1 of 3Next →