loadzero

Joined 11 years ago

Karma
429
Submissions
54
Member since
Feb 9
blog.loadzero.com

loadzero dot dev at gmail dot com

View on Hacker News

Recent submissions

Comment · 5 months ago
Inspired by the o.g. classic cloud-to-butt.
Comment · 1 year ago
I think at least some of the NOPs are due to this

From my C transliteration: https://github.com/loadzero/si78c/blob/master/si78c.c

    // xref 0462
    //
    // This code is using the shot counter as an index into the ROM
    // (where some code resides), for the purposes of random number generation.
    //
    // For the saucer direction logic, only bit 0 of each bytecode is used.
    //
    // The 256 bytes used reside at 0800 -> 08FF
    //
    // If you check bit 0 of each byte in that ROM section, you will find that there is no bias,
    // and there are exactly 128 0's and 128 1's.
    //
    // It seems unlikely that this was an accident, I think Nishikado deliberately constructed
    // the ROM this way, and used some well placed NOPs to achieve fair balance.
    //
    // E.g. these NOPs
    //
    // 0854: 00 00 00
    // 0883: 00 00 00
    //
    // This information can be exploited to the player's advantage.
    //
    // If using the shot counting trick to get high scores, the
    // expected saucer direction for the first 6 saucers (if counting),
    // will be as follows:
    //
    // [22,37,52,67,82,97]
    // [0, 1, 1, 0, 1, 1]
    // [L, R, R, L, R, R]
Comment · 2 years ago
I have been down this road a little bit, applying the ideas from jockey to write and ship a deterministic HFT system, so I have some understanding of the difficulties here.

We needed that for fault tolerance, so we could have a hot synced standby. We did have to record all inputs (and outputs for sanity checking) though.

We did also get a good taste of the debugging superpowers you mention in your blog article. We could pull down a trace from a days trading and replay on our own machines, and skip back and forth in time and find the root cause of anything.

It sounds like what you have done is something similar, but with your own (AMD64) virtual machine implementation, making it fully deterministic and replayable, and providing useful and custom hardware impls (networking, clock, etc).

That sounds like a lot of hard but also fun work.

I am missing something though, in that you are not using it just for lockstep sync or deterministic replays, but you are using it for fuzzing. That is, you are altering the replay somehow to find crashes or assertion failures.

Ah, I think perhaps you are running a large number of sims with a different seed (for injecting faults or whatnot) for your VM, and then just recording that seed when something fails.

Comment · 2 years ago
Comment · 2 years ago
I use this in my `~/.jq` when I have a problem like this.

    def flat_json_keys:
        [leaf_paths as $path | {"key": $path | map(if (type=="string") then (if (test("([?:\\W]+)")) then "['"+.+"']"  else . end) else "["+tostring+"]" end) | join(".") | gsub(".\\[";"[") , "value": getpath($path)}] | from_entries;

    def ukeys:
        keys_unsorted;
Use like so:

    cat wat.json | jq flat_json_keys
Comment · 4 years ago
Birdi | QA Engineer (junior) | Remote | 6mo contract | https://www.birdi.io/qa-engineer | Australian working rights required.

Birdi runs drone capture projects across Australia. We acquire and process drone imagery, and provide an online platform for our customers to interact with rich geospatial data.

We are a fully remote, growing and highly experienced team that moves fast and builds flexible and powerful solutions to real problems.

Tech stack:

  Infra: AWS/Kops/K8s/Terraform/Golang
  BE: NodeJS/Postgresql
  FE: TypeScript/React/Maplibre/DeckGl
We are currently looking for the following roles:

  QA Engineer (6mo contract, junior role)
For more detail on the specific role see: https://www.birdi.io/qa-engineer

For more general detail, see our careers page : https://www.birdi.io/careers

We are always looking for good people, so even if the above role is not a fit for you, please reach out.

Email me at [email protected]

Comment · 4 years ago
Birdi | Senior Front-End | Remote | Full-time | https://www.birdi.io/careers | Australian working rights required.

Birdi runs drone capture projects across Australia. We acquire and process drone imagery, and provide an online platform for our customers to interact with rich geospatial data.

We are a fully remote, growing and highly experienced team that moves fast and builds flexible and powerful solutions to real problems.

Tech stack:

  Infra: AWS/Kops/K8s/Terraform/Golang
  BE: NodeJS/Postgresql
  FE: TypeScript/React/Maplibre/DeckGl
We are currently looking for the following roles:

  Senior Front End Developer (full-time)
For more detail, see our careers page : https://www.birdi.io/careers

We are always looking for good people, so even if the above roles are not a fit for you, please reach out.

Email me at [email protected]

Comment · 4 years ago
Birdi | Multiple roles | Remote | Full-time | https://www.birdi.com.au/careers Australian working rights required.

Birdi runs drone capture projects across Australia. We acquire and process drone imagery, and provide an online platform for our customers to interact with rich geospatial data.

We are a fully remote, growing and highly experienced team that moves fast and builds flexible and powerful solutions to real problems.

Tech stack:

  Infra: AWS/Kops/K8s/Terraform/Golang
  BE: NodeJS/Postgresql
  FE: TypeScript/React/Maplibre/DeckGl
We are currently looking for the following roles:

  DevOps (full-time)
  Senior Front End Developer (full-time)
  QA Engineer (6-month contract, full-time)
For more detail, see our careers page : https://www.birdi.com.au/careers

We are always looking for good people, so even if the above roles are not a fit for you, please reach out.

Email me at [email protected]

Comment · 5 years ago
After reading a few paragraphs and skipped to the end, I was almost certain it was going to end with "The Aristocrats!"
Comment · 5 years ago
An interesting (if horrifying) exercise:

$ ndisasm -b 64 /dev/urandom

Comment · 6 years ago
See below.
Comment · 6 years ago
Ah, it does have a Microprose feel with the campaign, mission structure, and ejecting.

Thanks for giving me permission to publish the port, and cheers for writing a game that has given people some fun memories.

It's great also to see that you're still making games, 30 years on from this.

Live from the official Hacker News API

A modern reader for Hacker News · SvelteKit + Skeleton