I feel the same way. It seems so clean to me!
Did you by chance listen to the most recent Meteor Club podcast? If not, here’s a link https://simplecast.fm/s/2f11905f21 Josh, Ben, and Sam talked to Chris McCord about Phoenix and he had a lot of interesting things to say. One of which is similar to the DDP server idea. He basically said that Phoenix channels have been designed as low level infrastructure for people to build on top of and they talked about a potential DDP layer on top of that. Interesting stuff.
Awhile back some Meteor folks tried to hook Meteor up to Elixir https://teamgaslight.com/blog/the-philae-experiment-landing-an-elixir-app-on-meteor It’s a pretty interesting post. They also made a DDP client package GitHub - cincinnati-elixir/philae: Land a Elixir app on a Meteor App · GitHub.
I personally have been trying to figure out how Meteor would fit in with Elixir and have struggled to come up with viable options. The thing that Meteor is great at is abstraction. It’s abstracted away a lot of tedious things like syncing data between the client and server, authentication, etc… With Phoenix, I’m not sure you really need all the Meteor abstractions. If you can use tools like RethinkDB’s changefeeds in conjunction Phoenix channels and a state manager like Redux on the frontend then I’m not sure where Meteor fits into the picture.
The other thing I wonder about is whether an Oplog tailing/Long Polling type system is really the best way to go. I really like the idea of using Phoenix as a message broker to notify all clients when things change so you don’t need to be constantly polling the database. I’ve experimented with broadcasting events from the controller when something successfully changed and it’s seemed to work pretty well. It’s almost kind of a lazy DDP… haha
Anyways, I’m glad you like Phoenix! Even if it’s not something that we use everyday I think the functional world can teach us a lot about how to build better programs. My code has definitely gotten a lot cleaner since I started working with Elixir ![]()