Posts

Service Areas on the GPU and in the Browser, Checked Against ArcGIS

Image
I have used ArcGIS Network Analyst for service areas for a long time. You give it a start point and a few drive times, and it gives you the streets and the area that you can reach. It is correct, and it is the reference that people trust. But it is not fast. For 100 crash locations in Adams County, Ohio, with breaks of 1, 5 and 10 minutes, the solve takes 69 seconds. For all 2,483 crashes, it takes 31 minutes. So I asked a simple question: can a GPU calculate the same service areas, and I mean the same, not "close enough"? And if the GPU can do it, can the browser do it too? In this post, I show the three engines that I built, how I compare them with ArcGIS, and where they do not agree. The source is on GitHub: mraad/service-area . The live page. The mouse moves along a street near West Union, Ohio. The browser calculates the 5-minute service area again at each position. The problem The study area is Adams County, Ohio. The data is a file geodatabase with 3,063...

A Map Beside the Chat: An ArcGIS Mod for Claude Code

Image
Claude Code now has mods . A mod is a plugin with a hooks module: a TypeScript file whose functions Claude Code calls when events occur. A mod can add tools for Claude, slash commands, and panes beside the chat. When I read that, I had one question. Can I put a live ArcGIS map next to Claude, and can Claude draw on it while I talk to it? The answer is yes, with one interesting detour. In this post, I show the mod, explain how the parts connect, and tell you what does not work yet. The source is on GitHub: mraad/claude-mod-map . Markers in seven cities, labels, a geodesic route and a dark basemap, all placed with the mod's tools. What the mod does The mod gives Claude six tools. Each tool changes a map that uses the ArcGIS Maps SDK for JavaScript 5.2. add_graphic adds a point, a line or a polygon. The input is GeoJSON geometry and an optional ArcGIS symbol. add_layer adds a feature, GeoJSON, GeoParquet, tile, vector tile, imagery or portal item layer. It ta...

mcp-rwee: Four Tools, and arcpy Runs on Another Machine

Image
In my post arcpi: Not Everything Needs an MCP to Be Agentic , I let an agent call the ArcGIS REST API directly, with no MCP server in front of it. This time I have the opposite problem. My data and arcpy are on a Windows machine with ArcGIS Pro. Claude Code runs on my Mac. arcpy has no REST API, and it does not run on a Mac. So here, a small MCP server earns its keep. The server is mcp-rwee . The name is its tool list: r ead, w rite, e dit and e xecute. The client writes a Python script on the Windows machine, runs it there and answers from the printed output. In this post, I explain how it works, what one real question looked like, and what Windows taught me that macOS did not. Four tools and a prompt file The server has exactly four tools and one prompt. There is no buffer tool, no select_by_location tool and no list_layers tool. arcpy already has all of these. The client writes the script that calls them. read , write and edit work on text files on the Windows machin...

An Agent Loop That Runs in the Browser: Rust, WASM and One MCP Endpoint

Image
Can the whole agent run on the client? I mean the loop itself: the model calls, the tool calls and the context management. The server still runs the tools. But the part that decides what to do next lives in the browser tab. gen-ai-rs is my experiment to answer that question. It is a small agent harness in Rust, compiled to WebAssembly. It talks to an OpenAI-compatible model and runs tools through one same-origin MCP endpoint. A plain question uses one model call. A question about North Sea wells draws them on an ArcGIS map. Where this comes from This is my third pass at the same problem. The first was IDRIS, about two and a half years ago. It explored geospatial data with an LLM and SQL. Its text-to-SQL side came from what I learned from Vanna . There was little to copy then, so I learned the loop from the ground up, with help from OpenAI's building agents track and its practical guide to building agents . The second was the Generative AI Toolkit. It grew out of IDRIS and be...

Three Pads: Claude Writes the Weights, No Training

Image
In my earlier lander posts , every controller needed something first: training steps, a solver, or a fine-tuned model. This week I read Sparks of Weight-Space Programming from MIT CSAIL. It makes a claim I had to test: a frontier LLM can read and write the weights of a neural network directly, with no optimizer and no gradient descent. The authors call this Weight-Space Programming. Their LLM is GPT-6 Astra. I wanted to know what Claude does with the same inputs, and what the result looks like on a small problem of my own. So I built weight-space-programming with Claude Code, and I added a small landing game. In this post, I show how the test works, what the numbers say, and where the method fails. You can play the game here . A 484-weight network flies the craft. Claude wrote the weights in one reply. Nothing was trained. In the last flight, the target changes from pad 1 to pad 3. Shown at 2x speed. The claim The post has eight experiments, in three groups: Read....

Loci: a landscape for your notes

Image
A post on r/secondbrain, Maps organize information through landscapes — why? , stopped me for a minute. It brought back Moonwalking with Einstein , Joshua Foer's year with competitive memorizers, and the old trick at the center of it: put each thing you want to remember in a place, then walk the places. The Romans called the places loci . I have a few thousand notes, clippings and links. I can search them when I remember a word. I cannot walk them. So I built a landscape for them and called it Loci . Here is the idea in twenty notes. I imported twenty short Markdown files with tags and [[wikilinks]] . They became five hills. I clicked one note, and then I orbited the terrain. What a hill is Every note is a point. Notes that mean the same thing sit near each other. Groups of near notes become regions, and each region is a hill. The hill with the most notes is the tallest and the widest. Height is a count, not a judgment. A tall hill means you wrote a lot about that topic, no...

TrackAnything: Click an Object, and a DGX Spark Follows It

Image
I want to point my Mac camera at a scene, click an object, and see a mask stay on that object while it moves. I do not want to train a model for each object. I also want to run the model on my own hardware, not on a hosted API. Segment Anything models can do this. You select an object one time, with a point, a box or a name. The model then finds the same object in each new frame and marks its pixels. This marked area is the mask. The project is TrackAnything . It runs three trackers (EfficientTAM, SAM 2.1 and SAM 3) on an NVIDIA DGX Spark. The Mac only shows the camera and the result. In this post, I show how the pieces fit together, what the numbers say, and where the method is wrong. Vehicles on a motorway, tracked with EfficientTAM-S. The detector runs again every 15 frames, so new vehicles get a mask. Video: "Motorway A40 - on bridge above the traffic" by Kathinka Engels / Sounds of Changes, CC BY 3.0 , via Wikimedia Commons. Changes: audio removed, trimmed to 10 se...