Jeff Kreeftmeijer works at Appsignal where they create a tool for application monitoring that works in Ruby and Elixir. He works specifically with integrations focusing in Elixir and also writes articles for their Elixir and Ruby newsletters. Jeff started as a Ruby programmer but had an interest in functional programming which lead him to gain an interest in Elixir. When he started at Appsignal they were already considering an Elixir integration and that made it a perfect fit.
Jeff then shares more details about his involvement in Appsignal’s two newsletters called Ruby magic and Elixir alchemy, both of which are aimed at more experienced programmers. He also details his experience with articles that he wrote on Live Share and how he came to write them. The panelists also introduce the Go game that is written about in these articles.
The next topic covered by the Elixir experts is the Go game Live View implementation mentioned in Jeff’s articles. The panelists draw comparisons of how something similar could have been implemented in React. Jeff highlights that he doesn’t have to write JavaScript and doesn’t have to worry about state either. However, in part 1 of Jeff’s current implementation he used a struct to track the state. In part 2 of the implementation, where he implements the code rule, he has another struct that tracks the game.
The panelists then discuss how Jeff maintains the game state. In the first version of the implementation he keeps it in the Live View process and when he implemented multiplayer he had to move the game state to a GenServer. He also shares some of the details of why using a GenServer is necessary for multiplayer. Jeff is then asked what his experience was like using a dynamic supervisor and he shares the technical ideas of how this helped him in the project.
Next the conversation moves to how the game is able to communicate moves between players to each other. The issue with connecting two sessions to the same Live View is that one player won’t be updated if the other makes a move. Jeff details how using a Pub/Sub helps to overcome this issue. The panelists also discuss ideas of how the game could be implemented in a multi server instance.
Jeff shares how his article series still has many more installments that can come out, specifically citing that they haven’t even covered assigning player connections with different player callers. This kind of functionality would handle the assignment of which players controlled which pieces. Jeff closes with highlighting the convenience that comes from using the libraries that they are using as they natively come with technologies they find helpful for building out an interactive, collaborative project.
Lastly, the panelists discuss what Jeff is currently doing to work more with these same technologies. Jeff shares that he has a side project where he tries to build a fish tank with artificial intelligence and how he uses Live View for this project.
Panelists
Mark Ericksen
Eric Oestrich
Josh Adams
Michael Ries
Guest
Jeff Kreeftmeijer
Sponsors
Sentry.io | Use code “devchat” for two months free.
ElixirCasts | Get 10% off with the promo code "elixirmix"
JavaScript Jabber
Links
Appsignal.com
Live View article
Computers and Go
Building the Go Game in Elixir: Time Travel and the Ko Rule
Multiplayer Go with Elixir’s Registry, PubSub and Dynamic Supervisors
Dynamic Supervisor
PubSub
Hayago Github
GenServer
Functional Web Development With Elixir, OTP, and Phoenix
Asciiquarium
Terminal Asciiquarium
The NeuroEvolution of Augmenting Topologies User Page
The NeuroEvolution of Augmenting Topologies
Jeff Kreeftmeijer Twitter
Jeff Kreeftmeijer.com
Picks
Josh Adams
Haskell Parser
Eric Oestrich
Dragon Quest 11
Wingspan
Michael Ries
Fireball Island
Observer CLI
Mark Ericksen
Acquired
Jeff Kreeftmeijer
Go (game)
Mansions of Madness
Alphago Documentary
Special Guest: Jeff Kreeftmeijer.