Image 1 — [OC] Bluetooth devices broadcasting in one room over 37 minutes. Each line is a unique device; each step takes its angle from the detection timestamp and its length from signal strength.
Image 2 — [OC] Bluetooth devices broadcasting in one room over 37 minutes. Each line is a unique device; each step takes its angle from the detection timestamp and its length from signal strength.
Image 3 — [OC] Bluetooth devices broadcasting in one room over 37 minutes. Each line is a unique device; each step takes its angle from the detection timestamp and its length from signal strength.
Image 4 — [OC] Bluetooth devices broadcasting in one room over 37 minutes. Each line is a unique device; each step takes its angle from the detection timestamp and its length from signal strength.
Image 5 — [OC] Bluetooth devices broadcasting in one room over 37 minutes. Each line is a unique device; each step takes its angle from the detection timestamp and its length from signal strength.
Image 6 — [OC] Bluetooth devices broadcasting in one room over 37 minutes. Each line is a unique device; each step takes its angle from the detection timestamp and its length from signal strength.
Image 7 — [OC] Bluetooth devices broadcasting in one room over 37 minutes. Each line is a unique device; each step takes its angle from the detection timestamp and its length from signal strength.
▲ 621 r/DataArt+2 crossposts

[OC] Bluetooth devices broadcasting in one room over 37 minutes. Each line is a unique device; each step takes its angle from the detection timestamp and its length from signal strength.

Dead Reckoning: This is a data visualization of BLE signals, part of an ongoing print series and a continuation of my creative practice exploring the invisible networks and communication systems around us.

Data source: Custom-built system that scans for and logs Bluetooth LE advertisement packets from devices around me. Devices like phones, watches, laptops, earbuds — captured on my phone. Every device broadcasts its presence continuously, to no one in particular, several times a second; this is a recording of that traffic. 388 device addresses, 68,373 detections, over 37 minutes on Aug. 8, 2026. Each record is the UUID, device address, signal strength, and timestamp.

Tools: BLE captured through my Data as Material app (React Native, react-native-ble-plx), streamed over datanet.art... also a data platform I built. The drawing engine is plain JavaScript (ES modules), HTML canvas on screen, and a hand-written SVG exporter for the print. No charting library.

Encoding — two variables, both straight from the packet:

  • Step angle ← timestamp. Where the detection falls in a repeating 15-second period becomes a compass bearing. Top of the period is straight up, then clockwise: 3.75s is east, 7.5s is south.
  • Step length ← RSSI. Signal strength, mapped linearly from −5dBm (shortest step, closest) to −100dBm (longest, weakest).

Each line starts at a random position on the page. Every detection adds one segment to that device's line, fixed from the previous position using only bearing and distance, with no external reference — which is how ships navigated before GPS (or pirate maps). That's not a metaphor; it's the same procedure, which is where the title comes from. Error compounds, so a line drifts further from any true position the longer it runs.

Two things you can read directly off the image: a device that lingers leaves a long, tangled path, and the busier the room, the denser the picture.

The scan happened in a static location, so this is visualizing the signals at a specific location for a specific duration of time. It's indexical: every line is a trace of a device that was physically present and broadcasting. Replay the same capture, and you get a near-identical drawing (minus the random start position). Device addresses are used only to group a line and seed its colour; nothing else from the packets is stored.

More about the project is available on my site: https://www.jordanshaw.com/home/dead-reckoning

u/jshaw3 — 8 days ago
▲ 1 r/playmygame+1 crossposts

An art piece disguised as an iOS game — the only mechanic is waiting, and the only currency is your attention

Most apps are built to capture attention quietly. This one asks for it outright and gives you nothing back except a record of what you spent.

Black screen. A circle appears whenever it feels like it — could be two seconds, could be fifteen minutes. Tap it in time, or restart from Level 1. That's the whole game. The stats screen renders your play history as a particle field where every particle is 100ms you spent waiting.

The idea is from 2013. I was watching people pay real money for cosmetic items that gave them no gameplay advantage, purely for status, and wondered whether they'd pay with time instead.

Free on iOS. Took four rounds with App Review under 4.3(a) Design/Spam to get through.

You can grab the app in the App Store here: https://apps.apple.com/us/app/a-game-of-patience/id6759990913

u/jshaw3 — 12 days ago

Taking Processing off-screen: using nearby wireless activity to drive light and sound

For the last few years, I’ve been developing a body of work called Data as Material, exploring how invisible activity—wireless signals, nearby devices, movement, and presence—can become material for images, sound, light, and physical installations.

This is Constellation Range, a networked light sculpture I recently installed at OCAD University. Nearby BLE and Wi-Fi activity is brought into Processing as generative input. Each detected signal becomes a pulse of light, while the presence of people and their devices shapes the evolving visuals and soundscape in real time.

Processing acts as the centre of the installation. I use a Teensy with Teensy OctoWS2811 for the physical lighting, while a library I wrote called Canvas2DMX translates pixels from Processing sketches into Art-Net and DMX lighting streams:

https://github.com/jshaw/Canvas2DMX

I also built DataNet.art to move live signal data between Processing, the installation hardware, and a browser-based control interface. I’m currently packaging the Processing integration and examples so other people can experiment with them.

It’s been exciting to use Processing less as something that produces an image on a screen and more as the real-time centre of a physical, spatial artwork.

I’d love to see what other people here are controlling with Processing outside the screen.

u/jshaw3 — 21 days ago

Constellation Range: a networked light sculpture driven by live data

I’ve been expanding my creative-coding practice beyond screen-based work and into physical, sculptural light pieces. I've been really focused on visualizing invisible networks via BLE and WIFI detecting nearby signal activity. So each "pulse" of light within the sculpture is a signal from someone's device within the vicinity.

This specific piece is Constellation Range, recently installed at OCAD University. The sculpture is also connected to a browser-based control system, allowing live signal data and changes in state to move between the software and the physical work.

I ended up building DataNet.art to handle that connection and support other projects where I need to move data between browsers, hardware, sensors, and installations.

It’s been exciting to think about code less as something that produces an image on a screen and more as something that can inhabit and change a physical space.

As a software developer in a past life, I'm still always amazed by how programming interacts and can impact IRL experiences.

Edit: A little more about the technical setup: the installation was developed using Processing, a Teensy, and the Teensy OctoWS2811 system. I also open-sourced a Processing library for working with data that can be sent over Art-Net and DMX.

The data, visuals, and audio are generative. The presence of attendees becomes input that is processed in real time through Processing and translated into changing light and soundscapes.

u/jshaw3 — 21 days ago