# Richard Jones

Logbook / blog / devlog

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Bevygap: Autoscaling multiplayer Bevy game servers with Edgegap & Lightyear

DevFeed: [Bevygap: Autoscaling multiplayer Bevy game servers with Edgegap & Lightyear](<https://devfeed.tech/articles/bevygap-autoscaling-multiplayer-bevy-game-servers-with-edgegap-lightyear-25816.md>)

Original publisher: [Read original article](<https://www.metabrew.com/article/bevygap-bevy-multiplayer-with-edgegap-and-lightyear>)

Author: {"image"=\>"rj-headshot.jpg", "greetings"=\>nil}

Published: 2024-12-09T06:00:00Z

Content type: article

Language: en

Sources: [Richard Jones](<https://devfeed.tech/sources/richard-jones.md>)

Topics: [Bevy](<https://devfeed.tech/topics/bevy.md>), [autoscaling](<https://devfeed.tech/topics/autoscaling.md>), [inference-endpoints](<https://devfeed.tech/topics/inference-endpoints.md>), [Docker](<https://devfeed.tech/topics/docker.md>), [GitHub Actions](<https://devfeed.tech/topics/github-actions.md>), [API](<https://devfeed.tech/topics/api.md>), [Latency](<https://devfeed.tech/topics/latency.md>), [wasm](<https://devfeed.tech/topics/wasm.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [autoscaling](<https://devfeed.tech/tags/autoscaling.md>), [bevy](<https://devfeed.tech/tags/bevy.md>), [bevygap](<https://devfeed.tech/tags/bevygap.md>), [docker](<https://devfeed.tech/tags/docker.md>), [edgegap](<https://devfeed.tech/tags/edgegap.md>), [game-servers](<https://devfeed.tech/tags/game-servers.md>), [gamedev](<https://devfeed.tech/tags/gamedev.md>), [github-actions](<https://devfeed.tech/tags/github-actions.md>), [latency](<https://devfeed.tech/tags/latency.md>), [multiplayer](<https://devfeed.tech/tags/multiplayer.md>), [netcode](<https://devfeed.tech/tags/netcode.md>), [rust](<https://devfeed.tech/tags/rust.md>), [wasm](<https://devfeed.tech/tags/wasm.md>)

### AI overview

This article describes adapting the Lightyear spaceships example into a server-authoritative multiplayer Bevy game and deploying its client and headless server with Docker. It explains using Edgegap to deploy game servers in suitable locations on demand and autoscale them in response to player demand, with supporting infrastructure including GitHub Actions and NATS.

### Source excerpt

If i'm going to write a server-authoritative multiplayer game, it would be nice to have a decent way to deploy it. Especially to deploy servers around the world in response to player demand, to autoscale and keep latency down.

## Rock and Rollback: Realtime multiplayer in the browser, with rust and bevy

DevFeed: [Rock and Rollback: Realtime multiplayer in the browser, with rust and bevy](<https://devfeed.tech/articles/rock-and-rollback-realtime-multiplayer-in-the-browser-with-rust-and-bevy-25823.md>)

Original publisher: [Read original article](<https://www.metabrew.com/article/rock-and-rollback-realtime-multiplayer-games-with-bevy>)

Author: {"image"=\>"rj-headshot.jpg", "greetings"=\>nil}

Published: 2024-12-08T06:00:00Z

Content type: tutorial

Language: en

Sources: [Richard Jones](<https://devfeed.tech/sources/richard-jones.md>)

Topics: [browser](<https://devfeed.tech/topics/browser.md>), [browser-game](<https://devfeed.tech/topics/browser-game.md>), [realtime](<https://devfeed.tech/topics/realtime.md>), [Bevy](<https://devfeed.tech/topics/bevy.md>), [Rust](<https://devfeed.tech/topics/rust.md>), [QUIC](<https://devfeed.tech/topics/quic.md>), [WebRTC](<https://devfeed.tech/topics/webrtc.md>), [HTTP](<https://devfeed.tech/topics/http.md>), [Streaming](<https://devfeed.tech/topics/streaming.md>)

Tags: [bevy](<https://devfeed.tech/tags/bevy.md>), [bevygap](<https://devfeed.tech/tags/bevygap.md>), [browser](<https://devfeed.tech/tags/browser.md>), [gamedev](<https://devfeed.tech/tags/gamedev.md>), [http-3](<https://devfeed.tech/tags/http-3.md>), [multiplayer](<https://devfeed.tech/tags/multiplayer.md>), [netcode](<https://devfeed.tech/tags/netcode.md>), [quic](<https://devfeed.tech/tags/quic.md>), [realtime](<https://devfeed.tech/tags/realtime.md>), [rust](<https://devfeed.tech/tags/rust.md>), [snapshots](<https://devfeed.tech/tags/snapshots.md>), [udp](<https://devfeed.tech/tags/udp.md>), [webrtc](<https://devfeed.tech/tags/webrtc.md>)

### AI overview

This article discusses building a realtime multiplayer browser game with Rust and Bevy. It explains why TCP can delay updates, considers WebRTC and WebTransport over HTTP/3 and QUIC for unreliable data channels, and introduces snapshot interpolation as a multiplayer networking model.

### Source excerpt

How hard it is to build a realtime multiplayer browser game? Like asteroids, but multiplayer. Retro vibes with modern netcode 🚀.

## A blog redesign and an exploratory Rust multiplayer game project

DevFeed: [A blog redesign and an exploratory Rust multiplayer game project](<https://devfeed.tech/articles/10-years-later-25814.md>)

Original publisher: [Read original article](<https://www.metabrew.com/article/2021-blog-update>)

Author: {"image"=\>"rj-headshot.jpg", "greetings"=\>nil}

Published: 2021-07-29T05:00:00Z

Content type: opinion

Language: en

Sources: [Richard Jones](<https://devfeed.tech/sources/richard-jones.md>)

Topics: [border-image](<https://devfeed.tech/topics/border-image.md>), [Media Queries](<https://devfeed.tech/topics/media-queries.md>), [Rust](<https://devfeed.tech/topics/rust.md>), [WebAssembly](<https://devfeed.tech/topics/web-assembly.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>), [WebRTC](<https://devfeed.tech/topics/webrtc.md>), [Bevy](<https://devfeed.tech/topics/bevy.md>), [render](<https://devfeed.tech/topics/render.md>)

Tags: [bevy](<https://devfeed.tech/tags/bevy.md>), [css](<https://devfeed.tech/tags/css.md>), [life](<https://devfeed.tech/tags/life.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [mobile-web](<https://devfeed.tech/tags/mobile-web.md>), [render](<https://devfeed.tech/tags/render.md>), [rust](<https://devfeed.tech/tags/rust.md>), [wasm](<https://devfeed.tech/tags/wasm.md>), [webassembly](<https://devfeed.tech/tags/webassembly.md>), [webrtc](<https://devfeed.tech/tags/webrtc.md>)

### AI overview

The author describes updating the blog with responsive CSS and migrating comments to GitHub issue comments while experimenting with a browser-based multiplayer game in Rust, WebAssembly, WebRTC, and Bevy.

### Source excerpt

I have dragged my blog, kicking and screaming, into the era of media-queries and responsive CSS. So now it's readable on a variety of screen sizes. My first post was roughly the same year the iPhone 3G came out I think, and the mobile web wasn't really a big deal back then.

## BigWig: A better Erlang webtool (spawnfest entry)

DevFeed: [BigWig: A better Erlang webtool (spawnfest entry)](<https://devfeed.tech/articles/bigwig-a-better-erlang-webtool-spawnfest-entry-25817.md>)

Original publisher: [Read original article](<https://www.metabrew.com/article/bigwig-erlang-webtool-spawnfest>)

Author: {"image"=\>"rj-headshot.jpg", "greetings"=\>nil}

Published: 2011-07-11T05:00:00Z

Content type: article

Language: en

Sources: [Richard Jones](<https://devfeed.tech/sources/richard-jones.md>)

Topics: [Erlang](<https://devfeed.tech/topics/erlang.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Web](<https://devfeed.tech/topics/web.md>), [WebSocket](<https://devfeed.tech/topics/websocket.md>), [systems](<https://devfeed.tech/topics/systems.md>)

Tags: [appmon](<https://devfeed.tech/tags/appmon.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [erlang](<https://devfeed.tech/tags/erlang.md>), [etop](<https://devfeed.tech/tags/etop.md>), [json](<https://devfeed.tech/tags/json.md>), [processes](<https://devfeed.tech/tags/processes.md>), [programming](<https://devfeed.tech/tags/programming.md>), [realtime](<https://devfeed.tech/tags/realtime.md>), [sasl](<https://devfeed.tech/tags/sasl.md>), [spawnfest](<https://devfeed.tech/tags/spawnfest.md>), [web](<https://devfeed.tech/tags/web.md>), [webtool](<https://devfeed.tech/tags/webtool.md>)

### AI overview

The article describes BigWig, a web-based suite of Erlang tools created during Spawnfest. It presents process inspection, process information, application hierarchy exploration, SASL report browsing, and VM dashboards, using Cowboy and WebSockets; some parts were unfinished.

### Source excerpt

This weekend, Steve, Hunter, Paul and I took part in Spawnfest, a 48-hour Erlang programming event.

## Erlang rebar tutorial: generating releases and upgrades

DevFeed: [Erlang rebar tutorial: generating releases and upgrades](<https://devfeed.tech/articles/erlang-rebar-tutorial-generating-releases-and-upgrades-25818.md>)

Original publisher: [Read original article](<https://www.metabrew.com/article/erlang-rebar-tutorial-generating-releases-upgrades>)

Author: {"image"=\>"rj-headshot.jpg", "greetings"=\>nil}

Published: 2011-03-26T05:00:00Z

Content type: tutorial

Language: en

Sources: [Richard Jones](<https://devfeed.tech/sources/richard-jones.md>)

Topics: [Erlang](<https://devfeed.tech/topics/erlang.md>), [Tutorial](<https://devfeed.tech/topics/tutorial.md>), [releases](<https://devfeed.tech/topics/releases.md>), [Development](<https://devfeed.tech/topics/development.md>), [make](<https://devfeed.tech/topics/make.md>)

Tags: [appup](<https://devfeed.tech/tags/appup.md>), [code](<https://devfeed.tech/tags/code.md>), [deploy](<https://devfeed.tech/tags/deploy.md>), [development](<https://devfeed.tech/tags/development.md>), [erlang](<https://devfeed.tech/tags/erlang.md>), [gnu-linux](<https://devfeed.tech/tags/gnu-linux.md>), [make](<https://devfeed.tech/tags/make.md>), [otp](<https://devfeed.tech/tags/otp.md>), [production](<https://devfeed.tech/tags/production.md>), [programming](<https://devfeed.tech/tags/programming.md>), [project](<https://devfeed.tech/tags/project.md>), [rebar](<https://devfeed.tech/tags/rebar.md>), [releasehandler](<https://devfeed.tech/tags/releasehandler.md>), [releases](<https://devfeed.tech/tags/releases.md>), [sasl](<https://devfeed.tech/tags/sasl.md>), [tutorial](<https://devfeed.tech/tags/tutorial.md>), [upgrades](<https://devfeed.tech/tags/upgrades.md>)

### AI overview

A tutorial on using rebar to structure, compile, package, deploy, and upgrade Erlang applications. It demonstrates creating releases that bundle the Erlang VM, required OTP libraries, application code, and dependencies, enabling installation of new versions without downtime.

### Source excerpt

During my experiments with rebar, I made a simple example app for testing upgrades and releases. This article will walk you through using rebar to create an application, lay it out properly, package and deploy it, and create and install new versions without downtime.

## Erlang/OTP releases: rebar, release\_handler, .appup, etc

DevFeed: [Erlang/OTP releases: rebar, release\_handler, .appup, etc](<https://devfeed.tech/articles/erlang-otp-releases-rebar-release-handler-appup-etc-25820.md>)

Original publisher: [Read original article](<https://www.metabrew.com/article/erlangotp-releases-rebar-release_handler-appup-etc>)

Author: {"image"=\>"rj-headshot.jpg", "greetings"=\>nil}

Published: 2010-09-18T05:00:00Z

Content type: opinion

Language: en

Sources: [Richard Jones](<https://devfeed.tech/sources/richard-jones.md>)

Topics: [Erlang](<https://devfeed.tech/topics/erlang.md>), [releases](<https://devfeed.tech/topics/releases.md>), [upgrade](<https://devfeed.tech/topics/upgrade.md>), [modules](<https://devfeed.tech/topics/modules.md>)

Tags: [appup](<https://devfeed.tech/tags/appup.md>), [deployment](<https://devfeed.tech/tags/deployment.md>), [erlang](<https://devfeed.tech/tags/erlang.md>), [hacks](<https://devfeed.tech/tags/hacks.md>), [irc](<https://devfeed.tech/tags/irc.md>), [irccloud](<https://devfeed.tech/tags/irccloud.md>), [mochiweb](<https://devfeed.tech/tags/mochiweb.md>), [otp](<https://devfeed.tech/tags/otp.md>), [programming](<https://devfeed.tech/tags/programming.md>), [release](<https://devfeed.tech/tags/release.md>), [releases](<https://devfeed.tech/tags/releases.md>), [sasl](<https://devfeed.tech/tags/sasl.md>), [sysops](<https://devfeed.tech/tags/sysops.md>), [upgrade](<https://devfeed.tech/tags/upgrade.md>)

### AI overview

An Erlang developer describes deploying live upgrades for running OTP applications behind an in-browser IRC client. The article discusses release packaging, release_handler, .appup files, rebar, and an upgrade from R13B to R14 after encountering upgrade-related problems.

### Source excerpt

I've been building something in Erlang recently, provisionally called IRCCloud.com (mention this post if you request an invite!) - it's an in-browser IRC client that stays connected for you all the time, so you never miss the conversation. You can reopen your browser later and still have all the backlog. IRC is damn useful, and James and I are building IRCCloud to give you the advantages of IRC bouncer-esque functionality, with the ease of just opening a webpage.

## Rewriting Playdar from C++ to Erlang: source-code savings and similar resource use

DevFeed: [Rewriting Playdar from C++ to Erlang: source-code savings and similar resource use](<https://devfeed.tech/articles/rewriting-playdar-c-to-erlang-massive-savings-25822.md>)

Original publisher: [Read original article](<https://www.metabrew.com/article/rewriting-playdar-c-to-erlang-massive-savings>)

Author: {"image"=\>"rj-headshot.jpg", "greetings"=\>nil}

Published: 2009-10-21T05:00:00Z

Content type: opinion

Language: en

Sources: [Richard Jones](<https://devfeed.tech/sources/richard-jones.md>)

Topics: [Erlang](<https://devfeed.tech/topics/erlang.md>), [C++](<https://devfeed.tech/topics/c-plus-plus.md>), [Code](<https://devfeed.tech/topics/code.md>), [cross-platform](<https://devfeed.tech/topics/cross-platform.md>), [Optimization](<https://devfeed.tech/topics/optimization.md>)

Tags: [c](<https://devfeed.tech/tags/c.md>), [c-plus-plus](<https://devfeed.tech/tags/c-plus-plus.md>), [code](<https://devfeed.tech/tags/code.md>), [cross-platform](<https://devfeed.tech/tags/cross-platform.md>), [erlang](<https://devfeed.tech/tags/erlang.md>), [optimization](<https://devfeed.tech/tags/optimization.md>), [playdar](<https://devfeed.tech/tags/playdar.md>), [programming](<https://devfeed.tech/tags/programming.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>)

### AI overview

The author describes rewriting Playdar from C++ to Erlang after initially developing it with Boost, Asio, and CMake. The Erlang version reached near feature parity within a week, and counting bundled third-party code while excluding Boost and Asio showed a 92% reduction in source lines. Preliminary comparisons found similar CPU and memory usage overall, with Erlang using slightly more memory at the time of writing.

### Source excerpt

I've heard many anecdotes and claims about how many lines of code are saved when you write in Erlang instead of [C++/other language]. I'm happy to report that I now have first-hand experience and some data to share.

## Erlang talk at London Hackspace

DevFeed: [Erlang talk at London Hackspace](<https://devfeed.tech/articles/erlang-talk-at-london-hackspace-25819.md>)

Original publisher: [Read original article](<https://www.metabrew.com/article/erlang-talk-at-london-hackspace>)

Author: {"image"=\>"rj-headshot.jpg", "greetings"=\>nil}

Published: 2009-10-08T05:00:00Z

Content type: article

Language: en

Sources: [Richard Jones](<https://devfeed.tech/sources/richard-jones.md>)

Topics: [Erlang](<https://devfeed.tech/topics/erlang.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [Processes](<https://devfeed.tech/topics/processes.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [distributed-systems](<https://devfeed.tech/tags/distributed-systems.md>), [erlang](<https://devfeed.tech/tags/erlang.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [hackspace](<https://devfeed.tech/tags/hackspace.md>), [london](<https://devfeed.tech/tags/london.md>), [messages](<https://devfeed.tech/tags/messages.md>), [mochiweb](<https://devfeed.tech/tags/mochiweb.md>), [playdar](<https://devfeed.tech/tags/playdar.md>), [processes](<https://devfeed.tech/tags/processes.md>), [recursion](<https://devfeed.tech/tags/recursion.md>), [state](<https://devfeed.tech/tags/state.md>), [talk](<https://devfeed.tech/tags/talk.md>), [uncategorized](<https://devfeed.tech/tags/uncategorized.md>), [upgrade](<https://devfeed.tech/tags/upgrade.md>)

### AI overview

This article recaps an introductory Erlang talk at a London Hackspace meetup. It explains Erlang's use for scalable, reliable distributed systems and demonstrates processes, message passing, recursive state management, hot code reloading, and gen_server.

### Source excerpt

Last night I gave an "Intro to Erlang" talk at a London Hackspace meetup. I did a quick audience survey first: About 75% did "web programming" (ruby,python,php,etc). Around 30% admitted to regularly using C/C++/Java or desktop/mobile app development. Less than 10% had much experience with functional programming.

## Anti-RDBMS: A list of distributed key-value stores

DevFeed: [Anti-RDBMS: A list of distributed key-value stores](<https://devfeed.tech/articles/anti-rdbms-a-list-of-distributed-key-value-stores-25815.md>)

Original publisher: [Read original article](<https://www.metabrew.com/article/anti-rdbms-a-list-of-distributed-key-value-stores>)

Author: {"image"=\>"rj-headshot.jpg", "greetings"=\>nil}

Published: 2009-01-19T06:00:00Z

Content type: opinion

Language: en

Sources: [Richard Jones](<https://devfeed.tech/sources/richard-jones.md>)

Topics: [Databases](<https://devfeed.tech/topics/databases.md>), [Replication](<https://devfeed.tech/topics/replication.md>), [data](<https://devfeed.tech/topics/data.md>), [Algorithms](<https://devfeed.tech/topics/algorithms.md>), [cloud-computing](<https://devfeed.tech/topics/cloud-computing.md>)

Tags: [algorithm](<https://devfeed.tech/tags/algorithm.md>), [algorithms](<https://devfeed.tech/tags/algorithms.md>), [couchdb](<https://devfeed.tech/tags/couchdb.md>), [data](<https://devfeed.tech/tags/data.md>), [database](<https://devfeed.tech/tags/database.md>), [databases](<https://devfeed.tech/tags/databases.md>), [dht](<https://devfeed.tech/tags/dht.md>), [distributed](<https://devfeed.tech/tags/distributed.md>), [dynamo](<https://devfeed.tech/tags/dynamo.md>), [erlang](<https://devfeed.tech/tags/erlang.md>), [hadoop](<https://devfeed.tech/tags/hadoop.md>), [hashing](<https://devfeed.tech/tags/hashing.md>), [http](<https://devfeed.tech/tags/http.md>), [java](<https://devfeed.tech/tags/java.md>), [nosql](<https://devfeed.tech/tags/nosql.md>), [programming](<https://devfeed.tech/tags/programming.md>), [rdbms](<https://devfeed.tech/tags/rdbms.md>), [replication](<https://devfeed.tech/tags/replication.md>)

### AI overview

This article presents research notes on distributed key-value and document stores that could replace groups of relational database shards under suitable conditions. It discusses use cases, replication and partitioning concerns, related systems and background research, while noting that the material was written in January 2009 and may be outdated.

### Source excerpt

Please Note: this was written January 2009 - see the comments for updates and additional information. A lot has changed since I wrote this.

## How we use IRC at Last.fm

DevFeed: [How we use IRC at Last.fm](<https://devfeed.tech/articles/how-we-use-irc-at-last-fm-25821.md>)

Original publisher: [Read original article](<https://www.metabrew.com/article/how-we-use-irc-at-lastfm>)

Author: {"image"=\>"rj-headshot.jpg", "greetings"=\>nil}

Published: 2009-01-08T06:00:00Z

Content type: article

Language: en

Sources: [Richard Jones](<https://devfeed.tech/sources/richard-jones.md>)

Topics: [IRC](<https://devfeed.tech/topics/irc.md>), [Development](<https://devfeed.tech/topics/development.md>), [Monitoring](<https://devfeed.tech/topics/monitoring.md>), [Java](<https://devfeed.tech/topics/java.md>), [PHP](<https://devfeed.tech/topics/php.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [Deployment](<https://devfeed.tech/topics/deployment.md>), [issue tracker](<https://devfeed.tech/topics/issue-tracker.md>), [Testing](<https://devfeed.tech/topics/testing.md>)

Tags: [channel](<https://devfeed.tech/tags/channel.md>), [commands](<https://devfeed.tech/tags/commands.md>), [deployment](<https://devfeed.tech/tags/deployment.md>), [irc](<https://devfeed.tech/tags/irc.md>), [issue-tracker](<https://devfeed.tech/tags/issue-tracker.md>), [java](<https://devfeed.tech/tags/java.md>), [lastfm](<https://devfeed.tech/tags/lastfm.md>), [monitoring](<https://devfeed.tech/tags/monitoring.md>), [php](<https://devfeed.tech/tags/php.md>), [programming](<https://devfeed.tech/tags/programming.md>), [server](<https://devfeed.tech/tags/server.md>), [tests](<https://devfeed.tech/tags/tests.md>)

### AI overview

This article explains how Last.fm uses IRC for team and company-wide communication, automated monitoring, and developer support. It describes the irccat bot, which forwards network messages to IRC, sends operational events such as commits, alerts, deployments, and test results, and exposes lookup and administrative commands through PHP handlers.

### Source excerpt

Everyone that works at Last.fm is typically connected to our IRC server. We have different channels per team, as well as a company-wide channel, and a few channels dedicated to automated monitoring.