Skip to content
View Mootjelh's full-sized avatar

Block or report Mootjelh

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
Mootjelh/README.md

Mootjelh

Backend and request engineering, mostly Go. High-concurrency automation, low-latency monitoring, and the full-stack tooling that operates it.

Open source

  • flatread · read FlatBuffers buffers when you don't have the schema. Field access by vtable slot instead of by generated name, for plain and size-prefixed buffers alike. No dependencies, fuzz-tested so it never panics on malformed input.
  • proxypool · rotating proxy pool with cooldowns. Small: no health checks, because only your own traffic can tell you whether an address works.
  • hardiff · compare two HTTP Archive captures. Matches requests by endpoint rather than by full URL, so a cache buster does not turn every call into one request removed and one added, and compares JSON bodies field by field instead of as a blob.
  • flatschema · infer a FlatBuffers schema from sample buffers. Merges what each sample populated and writes the .fbs they imply, keeping the slot numbering right where a field nothing populated would otherwise shift every field after it.
  • identlint · check that a request's headers agree with the browser they claim to be: the version in User-Agent against sec-ch-ua, the arbitrary brand Chromium puts in that list and where, the platform and mobile hints, the encodings, a TLS profile name. The brand rules are Chromium's own and were checked against Chrome, Edge and Brave on the wire. Reads a header block or a whole HAR.

Upstream

  • bogdanfinn/tls-client#266 · a cached transport was reused after the server changed the protocol it negotiated, so an HTTP/1 transport read an HTTP/2 SETTINGS frame as a status line. Merged, in v1.16.0.
  • bogdanfinn/tls-client#270 · the transport cache was written from a reconnecting dial holding a different mutex than the one guarding it, so a read and a write could overlap. Found with the race detector. Merged.
  • bogdanfinn/fhttp#27 · a deflate body was sniffed and buffered while the response was still being built, so over HTTP/2 the request never returned. gzip and brotli on the same host were fine. Merged.

Stack

Go · TypeScript · Node · React / Next.js · PostgreSQL · MongoDB · Redis · Docker · REST & GraphQL

What I build

Request-based automation in Go: site modules, CLI tooling, and systems that have to stay fast under heavy concurrency. Real-time Discord tooling, scraping and database sync. Monitoring with sub-second reaction times. Dashboards and API backends to drive all of it.

field-notes · what I learned from being confidently wrong 115 times while reverse engineering a bot-protected site. 110 of them were my own bug.

Available for project work and monthly retainers. Reach me at info@mh-automation.nl.

Pinned Loading

  1. flatread flatread Public

    Read FlatBuffers buffers you have no schema for. Zero dependencies, never panics.

    Go

  2. proxypool proxypool Public

    A rotating proxy pool with cooldowns for Go. Zero dependencies, concurrency-safe.

    Go

  3. field-notes field-notes Public

    Notes from reverse engineering a bot-protected site. 74 confident conclusions, 71 of them my own bug.

    1

  4. hardiff hardiff Public

    Compare two HTTP Archive captures and see what changed. Matches requests by endpoint, diffs JSON bodies by field. Zero dependencies.

    Go