5 ms·
What I've Learned (So Far) Building Online Mini Games with Elixir and Swift
- calflegal 5mo agoMy post about my recent project, Migo Games
- calflegal 5mo agoI should've said more about the tech. I will later. The server is in NJ. If you're in the EU the game might really lag. Sorry!
- oezi 4mo agoYou mention it is possible to play via Web, but all links just lead to pages which point to Apple's app store. Game over for Android and the web?
- calflegal 4mo agoYeah. Shortly after I wrote this I shut down the web client. I wanted to focus on the other clients. Sorry. Kind of ruined one of my points
- karado 4mo agoIn my own projects I've found the feedback loop to be much slower in native mobile apps compared to web. For web apps my workflow has involved lots of human verification just through using the app myself and testing out the latest features/fixes. Sometimes I get the agent itself to do this before I do using Codex's chrome extension. This same process on mobile is a lot slower. How have you approached this aspect? Have you figured out a way to get the agent to control an emulator?
- zuzululu 4mo agowas expecting a bit more substance but always interesting to read different approaches. but I do wonder if BEAM is a bit of an overkill, even fly.io (known among developer threads to be very unreliable uptime) wouldn't be my first pick. Cloudflare Durable Objects really is generous, not often can you get replicated database and realtime sync for such low barrier in cost and implementation. I do wonder tho what Cloudflare's ultimate game is, as I'd imagine once they corner the market and practically everything is running off it, wouldn't be hard to say raise the $5/month to something higher.
- frail_figure 4mo ago> Cloudflare Durable Objects really is generous, not often can you get replicated database and realtime sync for such low barrier in cost and implementation. BEAM gives it to you for free, and you don't rely on an Internet-scale monopoly to run it.
- ramchip 4mo agoI love the BEAM and programmed on it for many years, but it really does not provide anything like durable objects. 1) It's very difficult to ensure globally serialized ownership with strong consistency in a distributed Erlang cluster when nodes are allowed to fail. Stuff like Horde will let you do some rough "run an instance of this process somewhere in the cluster", but it's eventually consistent (you may have multiple instances at times) and doesn't deal with netsplits well. 2) Mnesia is fine to replicate state within a network switch or very reliable LAN, but not over WLAN/Internet. It can enter split brain conditions and require external reconciliation. RabbitMQ suffered from Mnesia problems for many years and ended up replacing it with their own DB implementation using the Raft protocol.
- calflegal 4mo agoSee these are things I did not know. This is why I said I was 'not qualified', in the post, haha. I do use Horde for the matchmaking. I have 2 hosts in the cluster.
- 4mo ago
- apt-apt-apt-apt 4mo agoReally interested in hearing more about the architecture. Especially (1) why you chose Elixir, Phoenix over TS (2) how you dealt with real-time multiplayer. Aside: The links to the web game in the post don't lead to being able to play.
- colechristensen 4mo agoPhoenix is delightfully fast and not having to deal with two entirely different application stacks where your application is split down the middle (or the javascript ecosystem) is a breath of fresh air.
- jiggunjer 4mo agoIsn't split stack architectural, i.e. client heavy vs thin client. Not a hard TS feature?
- colechristensen 4mo agoWith Phoenix you can write actually 0 code that runs on the client, just the backend and html templating.
- frail_figure 4mo agoNot OP, but TS (as in TypeScript, right?) is not even in the same universe as Elixir with Phoenix when it comes to building backend services. It's a very productive and readable programming language with excellent documentation and conventions, and the most ergonomic way of handling concurrent operations (thanks BEAM) I've encountered. The VM it runs on was originally designed for telephone switches, which, it turns out, cleanly translates to the internet/http era. It makes it trivial to do soft-realtime because it's just actors (GenServers) passing messages. I invite you (and others) to try it out and do a small weekend project. It'll make you reconsider reaching for TS on the backend :)
- apt-apt-apt-apt 4mo ago
- w10-1 4mo ago> Also, I would encourage others to target Mac in addition to iOS for a reason you might not expect: build times. The simulators and Xcode are really pretty slow. It’s all a lot faster if you’re targeting Mac. Yes, this makes my day: (also) target macOS for continuous rapid loops on one project, or target iOS and end up flitting back and forth between many projects. ("mac (made for iPad)" does not work.)
- aquariusDue 4mo agoYeah, I do the same thing with Flutter when I'm in "rapid iteration mode" and build for desktop Linux in my case, though wireless debugging on Android is almost fast enough it's more that I don't want to dart back and forth between my laptop and phone.
- Doohickey-d 4mo agoA question for OP: why did you choose Crunchy Data for your database, instead of Fly's own managed postgres offering? Because the latency between Fly and Crunchy Data must be quite high, given that they are probably not in the same datacenter.
- calflegal 4mo agoHonestly? It's cheaper. hahaha.
- calflegal 4mo agoI'm sorry I took down the web client shortly after writing this post. Really ruins the point I made of being able to contrast web vs native performance, doesnt it? I realized I wanted to narrow my focus on client codebases. Fixing the post shortly.
- linsomniac 4mo agoI've been really enjoying retro games in the form of '80s arcade games lately. Last weekend I had Claude build me a web-based Rally-X inspired game and the experience was pretty good. I like that I can just drop it into a github.io and be done with it, but that isn't going to work for a game that needs a backend. https://linsomniac.github.io/rally-xy/ https://linsomniac.github.io/rally-xy/ I'm now working on a "nsnipes" game, and that, because of the multi-player aspect, is going to need a backend server.
- sdoering 4mo agoThanks. That just killed 15 minutes of my working day. Much appreciated. I just needed that. Love it. Went into my bookmarks for later tonight.
- chem83 4mo agoThanks for the write up. Wondering why not use something like Flutter for good cross platform support with good graphical performance on all systems. One could argue that with agentic programming, releasing on a new platform is simply a matter of prompting for a new target, but I fear that the non-determinism of LLMs will lead into a whac-a-mole situation where you’re constantly fighting framework specifics and the code that the agent spit out to get to pixel perfect solutions across the platforms. Flutter in this case would be a more token efficient solution and quite fast on most platforms (particular the ones where their Impeller engine runs).
- weego 4mo agoHistorically, iOS has been a second class citizen performance wise in Flutter. I certainly wouldn't rely on it as a gaming company.
- chrisweekly 4mo agoMy (possibly outdated) take is that Flutter is all about Dart, and Dart is a Google thing w/ virtually no other adoption.
- dzonga 4mo agofunny enough - distribution on the web would've been easier than the App Store. likely - it would grow organically too since all one has to do is share a link. for social games yeah - Elixir | BEAM is an excellent stack.
- calflegal 4mo agoI see your point. My counterpoint is that I think I’ve returned to zero web games that aren’t wordle. I think in the long run it’s the wrong choice
- pjmlp 4mo agoYet, there is hardly any Web game that it is at the level of Infinity Blade, the game used to show off OpenGL ES 2.0 support back in 2010. Browsers 3D support is a black box for game developers, still no debugging tools other than having a native build that you can plug RenderDoc, not a priority for browser vendors for the past decade. Then there is the whole issue how assets get loaded, space on browser for caching them, and security (F12 away to mess with the game engine).