Nob
00 intro

Nob

scroll ↓

~/about

Hi, I'm Nob

I like understanding how things work on the inside, and I usually end up building something to get there

Most of these projects started with something small: knowing when the next bus was coming, playing with friends without keeping a server online, a phone IP that refused to change. Some turned out better than others; these are the ones that work

01 · mobile networks

IP Rotator

Changing an Android phone's public IP from a PC, over ADB

  1. The research Does toggling airplane mode over ADB change the public IP? With settings put global airplane_mode_on, no: it only flips a setting, and the radio never actually goes down. The verdict in v0.1.0: "ADB can't do it"
  2. The breakthrough While building Goket, my network panel, Claude (Anthropic's AI) found cmd connectivity airplane-mode: it goes through Android's connectivity service and really powers the radio off, no root needed, on Android 16. That one's on Claude
  3. Back to the repo Mode C: the phone's Wi-Fi stays off during the test, short cycles repeat until the carrier's CGNAT lets go of a new IP, and the IP is measured through the tethering interface. Real test: new IP on the first try, in 20 s. Shipped as v0.2.0
real run · Sep 30, 2026 · IPs masked

Real IP Rotator run: the IP goes from 190.130.xxx.204 to 190.130.xxx.83 on the first attempt

PythonADBAndroid 16CGNATmobile networks

02 · android + python

celltrace

Finding cell towers without GPS

CellTraceLogger is an Android app that listens to the cellular network (Cell ID, LTE, 5G NR, signal strength) from a foreground service and logs every observation. celltrace is the Python library that matches those observations against OpenCellID and infers the infrastructure around you

KotlinAndroidPythonOpenCellIDNDJSON

03 · minecraft mod

jukz

A Minecraft world that lives wherever its host is online

A Fabric 1.21.1 mod. Every world gets a permanent UUID; when you open it, the network asks whether someone is already hosting it. If so, you join as a guest. If not, you become the host and announce it. Nobody has to keep a Minecraft server running

  1. Finding each other Multicast discovery on the local network, plus a rendezvous server for the internet; UPnP and STUN to get through each home's NAT
  2. First game Host and guest playing end to end. The DHT I had planned got dropped: the rendezvous server was simpler and more reliable
  3. The world fell out of sync Handing the world to the next host was losing changes. The fix: a WebSocket relay on the rendezvous server that carries the world snapshot
  4. Never lose the world If the last player closes the game with nobody else online, the world is uploaded to the cloud (R2) and the next player picks it up from there. Also fixed the case of two hosts at once
  5. Moving to Cloudflare The rendezvous server moved to a Cloudflare Worker with Durable Objects, the screens were rebuilt on one shared theme, and closing access no longer splits the world in two

164 commits over 13 days

KotlinFabricP2PCloudflare rendezvousmulticast LAN

04 · desktop app

ExphoraDB

Open huge datasets in under two seconds, no cloud involved

Explore JSON, CSV, SQLite, XML and more: filter, search, export, and share over end-to-end encrypted P2P. Local performance first

RustTauri v2React 19P2P E2E

05 · live

Cali, right now

··· buses of the MIO, Cali's transit system, moving on ··· routes

Every @ is a real bus, at the position the MIO's own system reports. It refreshes every 10 seconds and leaves a · trail behind it. Lines are bus routes, each o is a station, ~ are rivers and ^ the hills. It's the same data behind Goko, the app I built to plan trips around the city

trunkexpressfeederpre-trunk

connecting to the MIO…

N ↑
map © OpenStreetMap · buses: SIUR (MIO)

06 · my personal system

gok-

A family of apps I use every day, sharing one look and one infrastructure

Goko

Cali on a 3D globe with live MIO buses and a trip planner, direct routes and ones with transfers

Goket

A network panel for my desktop bar: Wi-Fi, ADB, phone controls and IP rotation

GokUN

Practice tests for the ICFES, Colombia's national exam: it pulls questions out of PDFs, has a step-by-step calculator, scoring and medals. Desktop and browser

GokCo

A viewer and organizer for my local shows and videos

Goko: a 3D globe with Cali marked and the current weather
Goko's home screen

private code · built for me

07 · minecraft + networking

AccessScope

What does a Minecraft server tell a player who tries to join?

It connects with a real session (Mineflayer), reads what the server sends back (kick message, MOTD, icon, server brand) and classifies the response. It can go out directly or through Tor, to compare what each route gets

  1. The foundation Every scan runs in its own isolated Node.js process that can be cancelled at any moment. The rules vote: if two disagree, the result is "ambiguous" instead of a guess. Tested live against real servers
  2. Polish Configurable timeouts, result export, automated tests, and a shareable image card showing what each server replied

try it · live sample

This is just a sample: it asks for the server's public status, the same thing the in-game server list shows. The full AccessScope joins with a real session and classifies the response; its code is private

PythonNode.jsMineflayerGTK4Tor

private code

08 · library

pane

A real browser inside your Java app, drawn however you like

Chromium without a window: every page comes out as pixels your app draws, and takes mouse and keyboard input in GLFW codes. It's how Ko-fi opens inside Minecraft, in jukz. It's mine and MIT, built on java-cef

  1. My own library MCEF stops at 1.21.4 and is LGPL, so I wrote pane from java-cef's API. It works on all three Minecraft versions jukz supports
  2. My own copy of Chromium All six builds live at chromium.nuulm.com. Copying them uncovered a Windows bug, fixed in v0.1.1

2 commits over 1 day

JavaChromiumjava-cefGLFWCloudflare R2

~/now

What I'm up to

···

Pulled live from my GitHub: where my latest change went and every recent commit. Private work shows up as private, with no name or message

activity over the last 5 weeks

git log · live

    ~/numbers

    By the numbers

    0
    GitHub contributions in the past year
    0
    days since my first repo
    0
    buses this page is tracking right now
    0
    public repos

    live from GitHub and the MIO · the little city of bars is my contribution calendar for the past year

    ~/signatures

    Who stopped by

    ··· countries have left their mark

    Each ✦ is a country someone visited this page from: the more people arrive from there, the brighter it gets, and its line runs to Cali, where I am. The land is lit by the sun as it is right now. Drag the globe to spin it. Only the country is counted, nothing that identifies anyone

    land: Natural Earth

    ~/contact

    Let's talk

    Message me on Telegram or by email; everything public is on GitHub. And if something I make helped you, the Ko-fi supports all my projects; in practice that means jukz's servers, the only thing I spend money on