I discovered Evan Miller at the same time I started using Erlang, around 2009/2010. I used Chicago boss, his Erlang framework, in three projects.
The third project was a complete rewrite of a really badly created dating website written in PHP that would crash at least once a day and would be unbereablly slow, built by 5 people for a full year.
We rewrote everything in 3 months, with two developers, while adding features that were impossible to do otherwise.
One lighting bulb moment is when we realize we could use ejabberd and the xmpp protocol for way more than messages and chats, but also to handle our news feed.
Once we launched the rewrite, the website became extremely fast and stable.
Since then, the BEAM has always been my go-to platform, even if now I use elixir.
There is no platform/language that makes me feel more productive and confident about the code I write.
The fact I can introspect the code (the repl is way more than a repl), the crazy stability of the runtime, and the simplicity of the language makes it a no brainer.
LiveView is a game changer. We built our entire e-commerce stack on it, it runs flawlessly.
My only issue with the Elixir/Erlang ecosystem is its lack of business oriented libraries and solutions:
- not many payment gateway integrations
- no CMS / E-commerce platforms
- quite no ready to use open source apps
Yes it's not as fast in pure performance as many other programming languages, but in practice, it's fast as hell due to concurrency and performance doesn't degrade with load.
And so many exciting things are being developed, from LiveView based native apps to ML and IOTs.
> The third project was a complete rewrite of a really badly created dating website written in PHP that would crash at least once a day and would be unbereablly slow, built by 5 people for a full year. We rewrote everything in 3 months, with two developers, while adding features that were impossible to do otherwise. One lighting bulb moment is when we realize we could use ejabberd and the xmpp protocol for way more than messages and chats, but also to handle our news feed. Once we launched the rewrite, the website became extremely fast and stable. Since then, the BEAM has always been my go-to platform, even if now I use elixir.
This matches my experience with one of the few opportunities I had to use Elixir in "production". I took over as a replacement "technical co-founder" (in actuality: a part-time contractor) for a startup, and inherited a Node codebase that would take an hour or so to batch process a bunch of student data every night. The Elixir replacement I wrote did it in minutes (even before actually making any effort to parallelize it), and it thus turned into an hourly job and eventually near-realtime. I probably could've made similar gains while sticking with Node, but it would've been a lot harder, and the rewrite ended up creating a lot more opportunities for feature development.
Unfortunately that startup failed to raise funds, and it got put on permanent hiatus once the founder's runway ran out. I also nearly became an exception to the "nobody is ever fired for picking IBM" rule when I migrated the hosting from Heroku to Bluemix (the latter deciding to eat our Postgres container for lunch, prompting a mad scramble to migrate yet again to AWS). Fun times, fond memories.
Hey that’s awesome. I’m also learning elixir and I deployed ejabberd for chat. I switched to phoenix channels for chat to have a lot more control. What are your thoughts on that? Any suggestions or articles or code repos you can link me for inspiration?
Fwiw I was using firestore for real time before since it was easier. Now I like phoenix channels (I’m still struggling with the language truth be told, but it makes sense after reviewing at the code like eight times).
My app (social app, still wip) is currently using flutter for the mobile apps, a nodeJS backend for the rest APIs, and a phoenix server for the chats. I’d be interested to have a discussion if that’s okay.
Hi @mradek. This ejabberd system was around 10 years ago, before websockets. Haven't built a chat system since but Channels would be perfect for it, especially in a multi platform context. If not I'd go simple and just use LiveView on the front and pubsub on the back.
The ejabberd system was great at the time but lacked flexibility. But I think we saved at least 3 months of dev thanks to it.
I see you are using 3 languages, that's a lot of things to coordinate and keep in the brain. May I ask why you use node for the rest API and not elixir ? That would simplify things a lot.
I am using 3 languages because I originally started this project using nodeJS+pg backend + flutter mobile apps. I've been experimenting with a lot of stuff as well, at one point switching to Go because I had some CPU heavy stuff, but I find myself going back to nodeJS because I'm most productive in it and I feel that its performance (I/O wise, since I'm doing DB or API calls) to dev time ratio is pretty good especially considering the number of well made dependencies and SDKs available.
I am still a noob at elixir (only a few days of total experience), so maybe some day I might migrate the REST API over. However, Phoenix channels are amazing and for that piece of the overall system I think I am happy to have stumbled upon it. I found that using phoenix channel API is a lot easier to work with both from server perspective and flutter client side. I need to figure out the proper way to auth (right now just auth'ing on socket connect against my nodeJS API, then continue).
My backend is super modular, feature wise, so I can swap out any piece for something better easily.
I was really blown away by how well erlang/chicago boss handled throughput when I first gave it a spin. A webpage I converted over handled multiple orders of magnitude more incoming requests before failing than the php version it replaced.
CB would get frustrating when wanting to extend certain functionality however, which phoenix isn't quite as bad about.
We’ve built our own CMS in Ex with the interface in LiveView and an admin. It builds pages as a single json document comprised of a list of blocks and components, which map to elixir functions and can render themselves.
It’s one of those things that we want to release when we get time as think the primitives will be useful for people.
The third project was a complete rewrite of a really badly created dating website written in PHP that would crash at least once a day and would be unbereablly slow, built by 5 people for a full year. We rewrote everything in 3 months, with two developers, while adding features that were impossible to do otherwise. One lighting bulb moment is when we realize we could use ejabberd and the xmpp protocol for way more than messages and chats, but also to handle our news feed. Once we launched the rewrite, the website became extremely fast and stable. Since then, the BEAM has always been my go-to platform, even if now I use elixir.
There is no platform/language that makes me feel more productive and confident about the code I write. The fact I can introspect the code (the repl is way more than a repl), the crazy stability of the runtime, and the simplicity of the language makes it a no brainer.
LiveView is a game changer. We built our entire e-commerce stack on it, it runs flawlessly.
My only issue with the Elixir/Erlang ecosystem is its lack of business oriented libraries and solutions: - not many payment gateway integrations - no CMS / E-commerce platforms - quite no ready to use open source apps
Yes it's not as fast in pure performance as many other programming languages, but in practice, it's fast as hell due to concurrency and performance doesn't degrade with load.
And so many exciting things are being developed, from LiveView based native apps to ML and IOTs.