The most underrated feature of Elixir/Erlang is how damn stable throughput is. May not have the same straight line performance as some other languages, but throw more and more load at it, and it’ll still be chugging along with good response times long after other systems have fallen over. Preemptive multitasking is a superpower.
Yup, that's it's jam. Everytime I've used elixir, it's always been about constant latency and perf. Not to mention that you can write these apps with very few lines of logic. From what this guy was explaining, he probably had 3 modules and maybe some extra genserver modules to lift up the logic. My favorite thing to do with elixir though is to use rust NIFs. Elixir gives you fault tolerance and out of the box distribution, but it can be slow computationally. On the other hand, you can hook in some rust native interface functions to get back some of that speed.
idk much about any of this but when real-time system languages like erlang were introduced to us briefly in university, this was described as one of their main design criteria
@@patricksmith8262 I think it's a combination of factors. This is a functional language, and paradigm shift is hard for those who are used to writing oops, the language has a kind of unusual syntax inherited from Ruby, you will have to learn OTP (the gen-servers mentioned in the video), and the most interesting thing is that not everyone wants the kind of workload that can be afforded with this programming language. It's an odd take, I know. Nevertheless, Elixir is used a lot of places, even in Microsoft flight simulator.
Re: "let it crash"--the Erlang joke at 5:11. "Let it crash" is a core tenant of Erlang design and programming. Instead of writing "defensive code", you let a process crash or "die", and have its supervisor or monitoring process restart it. That said, in actuality, you probably do not want it to crash and will likely write some defensive code, however, in the off chance something unexpected happens, having a supervisor process and that philosophy lends to a greater peace of mind. I guess the intended joke was that the major change from serverless to Elixir initially resulted in some crashing, so the saying "let it crash" fit the bill. Re: "fit the bill"--wait, stop recursion.
Let it crash is a good philosophy as long as you have a good case for restarting services with the state intact everything is fine. Hence a graceful crash that returns a recoverable state
let it crash is a philosophy that works really well in practice as long as you aren't writing extremely stateful processes and to be honest not filling your processes with state is pretty idiomatic for both elixir/erlang. As with hardware when you have a state problem, you reset the device and it normally will correct the problem; this is how let it crash works too. With elixir/erlang, you also have tons of methods to pass the state back and forth between crashing processes; you can pass the old state from one process to the new one using some of the genserver callbacks. Other parts of OTP like ETS and Mnesia work well for making sure that you can move state from your processes to something more tangible.
@@ocoolwow Logging Services do more than just centralizing your logs into a file. Most Logging Platforms aggregate your logs and let you analyze and monitor them
Been writing elixir for 6yrs. I have that natural curiosity toward other languages and frequently try them out. EVERY SINGLE TIME I end up thinking, "this is just so much simpler in Elixir." I try not to fanboy over any language since they are just tools but man Elixir/Erlang just works.
I had started using Elixir about almost 4 years ago and have had the same sentiment. If I want to get something going quick and easy, Elixir is such a quick solution for me and each time I try something else, I find something to appreciate but I can see an amount of work and shifting ideas that don't meet my internal effort-economy bar so I go back to Elixir.
Its the case with every language. You solve problems that youranguage is good at, in the way that it's easiest in your language. Then you switch to another language and naturally you want to do same things, the same way. It would never be as easy as in your language. You need to use other language to do what it's good at in the way that is easiestin that other language.
@@adriankalI would agree, but learning Javascript, Rust, Go, Python, etc. coming from C++ did not feel so hard. All object oriented ofc, so that is probably why
It must feel pretty damn good to reduce the cost from $30k to $500. I remember I felt good for days when I optimized an API service from 20s to 3s on a school group project lol. And yes, give that man a raise
Ever since I learned Erlang many moons ago and later switched to Elixir I wonder how in the world anybody would use any non BEAM language for anything web and still be able to look in the mirror
Love this, been learning Elixir for the past week. Tried haskell in college and was told to look into Elixir by a class mate. Year later im checking it out and its enjoyable. Golang and Elixir are my languages of choice and im enjoy every second of it.
Stopped watching about half way to rewrite my services in Elixir to run on kubernetes. Will come back and watch the reminder after I deploy perfectly first time.
This is also a great showcase for indie/hobbyist dev - it just shows that even if you think your pet project will have an overnight success (an unlikely event), you still rarely ever need more than one or a few small servers. No need for “cloud scale” with thousands of “serverless” instances, when 1-3 tiny servers can handle ALL of it, and then some. The cloud is a lie (and I’m saying this after being a “cloud architect” for 7 years)
Serverless is really only for small to medium sized projects/companies. I think the strategy is generally to use serverless in order to spit out functional apps as soon as possible and then if any of the apps in particular blow up in popularity you would move that app to a self-managed infrastructure to maximize profit.
I learned Elixir earlier this year and had to do a CRUD’s table for a small company cause they asked for it using Phoenix table. When the project was completed, I haven’t touched Elixir since, that was back in January. Sadly not as much demand for it (right now).
And it was about that time that i realized that that girl scout wasnt no gurl scout. It was that damn lochness monster again trying to get my tree fiddy!
and how unnecessary complicated it might get. I was recently staffed for a company that assigned me to work on a serverless project. Considering what this project does, it is overkill.
20:52 I think "contrarianism" is a good product of critical thinking (to an extent). We know people are fallible and can get swept up in hype. When there's no counternarrative that's pointing out the downsides or nuance of a situation or thing, its generally a good thing to give some air to the skeptic so they can scrutinize the narrative. This isn't to say that things can't have a huge amount of pros and very little (relevant) cons, or that the skeptic themselves are going to be constructive; just that it's good practice to keep an open mind to nuanced views. "There's a time and place for everything," and that is never all the time and everywhere. The higher the stakes, the better it may be to seek said nuance out on your own or to play "Devil's advocate" in efforts to stress test an idea and play it out to its logical ends. PS: That said, sounds like TheFightagen just wants to throw a few "Oh really?"s. Edit: Better -agen.
Honestly, I doubt this is a good use-case of BEAM which is designed for handling large number of connections concurrently in IO bound scenarios. This problem looks more like CPU bound because the server doesn't need to keep connections while waiting for external API or something. If the requests from clients take time and cause large number of concurrent connections, then we can just put nginx or something to deal with the bloated connections.
Remember back in the day when developers threw their code over the fence and let the sysadmin handle deployments and infrastructure, and then they invented "devops" so developers became responsible for the infrastructure their code ran on, and then eventually nobody specialized in anything anymore, and then infrastructure became so complex that it became impossible to setup shitty infrastructure to run shitty code as fast as we deployed quality code on quality infrastructure, and now developers are throwing code over the fence to "devops" who spend most of their time trying to keep the costs down and wondering why nothing is stable anymore? Yeah, good times.
"That's a lot of shards" I'm laughing at this phrase. Once we tried to calculate how many shards we would need it came out as 300 just counting bandwidth, in the end SQS was an order of magnitude less expensive
never written elixir before so i can only assume what the code shown @10:56 means. im gonna apply the knowledge i have of languages in general but since this is a specific language with its own nuances im most def gonna be wrong about some things. im guessing defmodule is a keyword & as it implies it is used to define a module, which is essentially a namespace. now the syntax on the following lines that start with @ are just that; identifiers from what im guessing. so the first line would be an identifier for a struct/class/interface/namespace, since im unsure what Storage actually is or if elixir even has classes/structs/interfaces. the second would be an identifier for the string literal " " and the third identifier would be assigned to the returned value of the get_env function located in the Application namespace/module or, from a c#/java perspective Application would be a class and get_env would be a non void public static method. unsure about the arguments it takes in and the syntax associated with. then on the next line the def keyword is used to define a function which is exactly like ruby & python, following that would be the identifier of the function & its single argument, "do" would obviously indicate the begining block of the func. then the body of this function would be the actual procedure that this function does. Seems to me that another function is being invoked from the File module; the write function. Which makes sense if File is infact a module. You would want some kind of write functionality. it takes in the value of @log_file as the first arg which im assuming is a path to a file, and im assuming the result of concatenating its actual argument assigned to the identifier "msg" with the string literal " " would be the second argument. my reason behind guessing so despite not knowing what the token "" means is because it looks to me like an operator & the right operand is defined a string. so if im right, the code is actually readable compared to most typescript (especially generics) that u will find out in the wild & especially on yt.
Pretty spot on. The creator of erlang is José Valim and he was formerly a core contributor for Ruby on Rails which is why it has similarities to ruby in design. He wanted elixir to be understandable and the logical next step for ruby devs to move to.
nothing against the point of the author, BUT, i ran into the same issue wtih AWS api gateway costs and found i had to convert from REST to their lower tier HTTPS and it cuts the API costs in half.
Why not making an express server and start off some child processes or clusters for processing and wait for a batch to be finished before sending it to this mysterious kinesis, if your server can handle the load?
@@victorpinasarnault9135 every place i worked at were using java for literally every thing, even the smallest ones were spring boot apps, i created a flask server for 2 small endpoints once, senior came, overwritten with a java spring boot app and pushed, that was a miserable experience..."a very small api with 4 endpoints and you're using node or python? excuse me what the fuck?!" that basically sum it up the enterprise experience for me
'' is string concatenation in Elixir. Most of the functional langs have something different than (ehm retarded) C-like syntax '+' .. OCaml use '^', Haskell '++'
The whole thing can probably be handled by 20 hosts on Hertzner with haproxy, for $1000/mo, completely over-provisioned. Or (if you really need to) in AWS for somewhat more. But tell me more how KISS your setup is, with AWS, Elixir, Kinesis, Go, Node, k8s, and whatever else was utilized there.
Elixir has little in common with Ruby, only surface syntax but in Elixir it means things that are very different to Ruby's In Ruby a module is define between the keywords "module" & "end" and it is just a bag of definitions for ruby, the only way you have to ship it is as a file and supports no versioning. In Erlang(or Elixir) a module is a distribution unit of code, is the minimum code the beam loads and it is binary and it is versioned and the BEAM (Erlang's VM) allows to load to different versions of the same module, and if you use correctly the supervision tree it comes with an automatic mechanism to update the module in all the running instances and if you have processes of the old version still doing job, it waits until they are done to kill them and replace them. So Ruby & Elixir are way to different.
not to mention Elixir is an FP language unlike Ruby and Python, and works with an actor system, which is requires a pretty different mental model to program with than your usual Ruby or Python programming.
Relying on client side validation. Want to know how I know you have never written a high performance system that requires reliability? You can NEVER rely on client side validation for anything or you will shoot yourself in the foot.
@@SigSeg-V you can get pretty good type safety in Elixir if you use its TypeCheck feature (and Dialyzer/Dialyxir). That makes it WAY more type safe than Ruby.
@@SigSeg-V Elixir definitely does have explicit types, there are 7 of them: integers, floats, Booleans, atoms, strings, lists and tuples. Typespec and dialyzer provide type checking and documentation on what types are expected, and Jose is actively working on implementing a more formal type system. The research part is finished and they are working on actually implementing it now. I will add that Elixir is based on Erlang which is extremely reliable and has been powering systems that are critical infrastructure for decades without any issues. All of BEAM (the VM that Elixir and Erlang run on) has the same typing system, and it works perfectly. So a disaster? Hardly. You just are having a hard time letting go of the things other languages and developers have convinced you are requirements, but when properly handled (like BEAM does) is not actually a requirement at all.
Elixir getting types soon sounds interesting. I did some programs on it and it was fun, but I guess I gravitate towards C syntax. (GO). Still, cool community that's hardcore in love with the language. Scales well (like Go), and has cool web stuff (like Phoenix). Also part of the "NOT JS" Crew. lmao.
As an Elixir bro, I watched this one live and thought it was never gonna get uploaded bc the article sucked :( It was just "serverless bad" for 20 minutes with not enough "elixir is goated" to compensate 😔I hope we'll see more elixir content soon though :)
I smell bs, either at a management or engineering level. If and only if the service is running optimally then the aforementioned 12k bill shouldn't be an issue if the service is actually providing value to the business to offset it's cost. Either the engineering is bs or management pricing the service to customers is bs.
Both have tradeoffs. I have an Elixir bias and did a little Go. In Elixir, spinning up a Phoenix Framework web server is super quick and easy and really only demands that you have PostgreSQL installed. Which on that note, making database changes with Ecto is easy too--once you get it though. Then once you learn a little about getting values onto HTML pages, you're off to the races. Phoenix framework feels nice to me because everything including a webpage is just a process that might have some state. Something going wrong elsewhere won't often break the entire web app. Hot reloading is a thing so the dev experience feels nice. When I was playing with Go, making an HTTP(s) server was certainly easy but for me I haven't got good. However, it feels hard in Go to start with a script that defines what your server is. Anytime something changes, at least in that server file, you have to close and restart the server script again. In Elixir I just type `recompile` and the whole app is recompiled in less than a second. As for a chat app--super simple in Elixir and there are many examples out there elixirbridge.org/03_Intro_to_Phoenix/01-creating-a-chat-app.html As for Go, probably also super simple to build a chat app. As for e-commerce, all you're really building is a store front with a stripe integration and an inventory database. You can use Phoenix for the store front, I've seen articles about integrating stripe with Elixir, and Ecto to PostgreSQL will be your database. Easy in theory, takes a bit of effort.
The most underrated feature of Elixir/Erlang is how damn stable throughput is. May not have the same straight line performance as some other languages, but throw more and more load at it, and it’ll still be chugging along with good response times long after other systems have fallen over. Preemptive multitasking is a superpower.
It pipes really well
Yup, that's it's jam. Everytime I've used elixir, it's always been about constant latency and perf. Not to mention that you can write these apps with very few lines of logic. From what this guy was explaining, he probably had 3 modules and maybe some extra genserver modules to lift up the logic. My favorite thing to do with elixir though is to use rust NIFs. Elixir gives you fault tolerance and out of the box distribution, but it can be slow computationally. On the other hand, you can hook in some rust native interface functions to get back some of that speed.
idk much about any of this but when real-time system languages like erlang were introduced to us briefly in university, this was described as one of their main design criteria
I'm still dumbfounded how Elixir hasn't become more popular over that past decade.
@@patricksmith8262 I think it's a combination of factors. This is a functional language, and paradigm shift is hard for those who are used to writing oops, the language has a kind of unusual syntax inherited from Ruby, you will have to learn OTP (the gen-servers mentioned in the video), and the most interesting thing is that not everyone wants the kind of workload that can be afforded with this programming language. It's an odd take, I know. Nevertheless, Elixir is used a lot of places, even in Microsoft flight simulator.
Re: "let it crash"--the Erlang joke at 5:11.
"Let it crash" is a core tenant of Erlang design and programming. Instead of writing "defensive code", you let a process crash or "die", and have its supervisor or monitoring process restart it. That said, in actuality, you probably do not want it to crash and will likely write some defensive code, however, in the off chance something unexpected happens, having a supervisor process and that philosophy lends to a greater peace of mind.
I guess the intended joke was that the major change from serverless to Elixir initially resulted in some crashing, so the saying "let it crash" fit the bill.
Re: "fit the bill"--wait, stop recursion.
Let it crash is a good philosophy as long as you have a good case for restarting services with the state intact everything is fine. Hence a graceful crash that returns a recoverable state
let it crash is a philosophy that works really well in practice as long as you aren't writing extremely stateful processes and to be honest not filling your processes with state is pretty idiomatic for both elixir/erlang. As with hardware when you have a state problem, you reset the device and it normally will correct the problem; this is how let it crash works too. With elixir/erlang, you also have tons of methods to pass the state back and forth between crashing processes; you can pass the old state from one process to the new one using some of the genserver callbacks. Other parts of OTP like ETS and Mnesia work well for making sure that you can move state from your processes to something more tangible.
"we were using a logging sevice that was getting expensive" - cough cough datadog cough cough
Cloudwatch is also quite expensive. Not sure how they compare
@@FinLoganmuch more expensive, but is a better tool UX wise.
f# enjoyer? 🤔
Or you know just code a simple logging system yourself, it ain't that hard to write text to a file
@@ocoolwow Logging Services do more than just centralizing your logs into a file. Most Logging Platforms aggregate your logs and let you analyze and monitor them
Been writing elixir for 6yrs. I have that natural curiosity toward other languages and frequently try them out. EVERY SINGLE TIME I end up thinking, "this is just so much simpler in Elixir." I try not to fanboy over any language since they are just tools but man Elixir/Erlang just works.
I had started using Elixir about almost 4 years ago and have had the same sentiment. If I want to get something going quick and easy, Elixir is such a quick solution for me and each time I try something else, I find something to appreciate but I can see an amount of work and shifting ideas that don't meet my internal effort-economy bar so I go back to Elixir.
currently trying to get into elixir. Feels harder to learn than other languages I worked with so far.
Its the case with every language. You solve problems that youranguage is good at, in the way that it's easiest in your language. Then you switch to another language and naturally you want to do same things, the same way. It would never be as easy as in your language. You need to use other language to do what it's good at in the way that is easiestin that other language.
@@adriankalI would agree, but learning Javascript, Rust, Go, Python, etc. coming from C++ did not feel so hard. All object oriented ofc, so that is probably why
What sort of projects are we talking about here?
Elixir is the “One Man Army”
language
This guy deserves a bonus and a raise
It must feel pretty damn good to reduce the cost from $30k to $500. I remember I felt good for days when I optimized an API service from 20s to 3s on a school group project lol.
And yes, give that man a raise
Nice try, Louis!
The interprocess communication in Erlang/Elixir is actually really cool. Once I understood it, it became my favorite model for this.
the actor model
Ever since I learned Erlang many moons ago and later switched to Elixir I wonder how in the world anybody would use any non BEAM language for anything web and still be able to look in the mirror
@@binarysun_ Go is a worthy contender. It's still not nearly as cool but it's better than most.
Love this, been learning Elixir for the past week. Tried haskell in college and was told to look into Elixir by a class mate. Year later im checking it out and its enjoyable. Golang and Elixir are my languages of choice and im enjoy every second of it.
How would you compare the 2?
Stopped watching about half way to rewrite my services in Elixir to run on kubernetes.
Will come back and watch the reminder after I deploy perfectly first time.
This is also a great showcase for indie/hobbyist dev - it just shows that even if you think your pet project will have an overnight success (an unlikely event), you still rarely ever need more than one or a few small servers. No need for “cloud scale” with thousands of “serverless” instances, when 1-3 tiny servers can handle ALL of it, and then some. The cloud is a lie (and I’m saying this after being a “cloud architect” for 7 years)
The cloud is not a lie. The little man behind the green curtain told me so. ;)
Serverless is really only for small to medium sized projects/companies. I think the strategy is generally to use serverless in order to spit out functional apps as soon as possible and then if any of the apps in particular blow up in popularity you would move that app to a self-managed infrastructure to maximize profit.
this is the way
But serverless is very cheap.when you don't have users!
Not as cheap as VPS
@@kibels894 But that doesn't S C A L E!!!!! Well, you sure have to hope your bank account scales as well as serverless does...
@@kibels894 that is the joke
Why ??
the best article u read so far. i watch your videos for a month now. the other videos were good but this was the best. love it.❤
I learned Elixir earlier this year and had to do a CRUD’s table for a small company cause they asked for it using Phoenix table. When the project was completed, I haven’t touched Elixir since, that was back in January. Sadly not as much demand for it (right now).
And it was about that time that i realized that that girl scout wasnt no gurl scout. It was that damn lochness monster again trying to get my tree fiddy!
:D
Every time that I hear serverless surprises me how much money they spend!!
and how unnecessary complicated it might get. I was recently staffed for a company that assigned me to work on a serverless project. Considering what this project does, it is overkill.
They have to resist evil but not join it! Dumn lambdas
And the link was in fact not in the description
20:52 I think "contrarianism" is a good product of critical thinking (to an extent). We know people are fallible and can get swept up in hype. When there's no counternarrative that's pointing out the downsides or nuance of a situation or thing, its generally a good thing to give some air to the skeptic so they can scrutinize the narrative. This isn't to say that things can't have a huge amount of pros and very little (relevant) cons, or that the skeptic themselves are going to be constructive; just that it's good practice to keep an open mind to nuanced views.
"There's a time and place for everything," and that is never all the time and everywhere. The higher the stakes, the better it may be to seek said nuance out on your own or to play "Devil's advocate" in efforts to stress test an idea and play it out to its logical ends.
PS: That said, sounds like TheFightagen just wants to throw a few "Oh really?"s.
Edit: Better -agen.
Im surprised elixir isnt more popular, I fn love it
Honestly, I doubt this is a good use-case of BEAM which is designed for handling large number of connections concurrently in IO bound scenarios.
This problem looks more like CPU bound because the server doesn't need to keep connections while waiting for external API or something.
If the requests from clients take time and cause large number of concurrent connections, then we can just put nginx or something to deal with the bloated connections.
🎉🍾🎊 elixir mentioned 🎊🍾🎉
Elixir? I hardly know her.
Remember back in the day when developers threw their code over the fence and let the sysadmin handle deployments and infrastructure, and then they invented "devops" so developers became responsible for the infrastructure their code ran on, and then eventually nobody specialized in anything anymore, and then infrastructure became so complex that it became impossible to setup shitty infrastructure to run shitty code as fast as we deployed quality code on quality infrastructure, and now developers are throwing code over the fence to "devops" who spend most of their time trying to keep the costs down and wondering why nothing is stable anymore? Yeah, good times.
"That's a lot of shards" I'm laughing at this phrase. Once we tried to calculate how many shards we would need it came out as 300 just counting bandwidth, in the end SQS was an order of magnitude less expensive
Cory O’Daniel is a gangster. Stick with him, y’all.
I see elixir, I like
Why not go? well I came to elixir from go and rust...Elixir is simply pure joy compared to others
never written elixir before so i can only assume what the code shown @10:56 means.
im gonna apply the knowledge i have of languages in general but since this is a specific language with its own nuances im most def gonna be wrong about some things.
im guessing defmodule is a keyword & as it implies it is used to define a module, which is essentially a namespace.
now the syntax on the following lines that start with @ are just that; identifiers from what im guessing.
so the first line would be an identifier for a struct/class/interface/namespace, since im unsure what Storage actually is or if elixir even has classes/structs/interfaces.
the second would be an identifier for the string literal "
"
and the third identifier would be assigned to the returned value of the get_env function located in the Application namespace/module or, from a c#/java perspective Application would be a class and get_env would be a non void public static method. unsure about the arguments it takes in and the syntax associated with.
then on the next line the def keyword is used to define a function which is exactly like ruby & python, following that would be the identifier of the function & its single argument, "do" would obviously indicate the begining block of the func.
then the body of this function would be the actual procedure that this function does.
Seems to me that another function is being invoked from the File module; the write function. Which makes sense if File is infact a module. You would want some kind of write functionality.
it takes in the value of @log_file as the first arg which im assuming is a path to a file, and im assuming the result of concatenating its actual argument assigned to the identifier "msg" with the string literal "
" would be the second argument.
my reason behind guessing so despite not knowing what the token "" means is because it looks to me like an operator & the right operand is defined a string. so if im right, the code is actually readable compared to most typescript (especially generics) that u will find out in the wild & especially on yt.
Pretty spot on. The creator of erlang is José Valim and he was formerly a core contributor for Ruby on Rails which is why it has similarities to ruby in design. He wanted elixir to be understandable and the logical next step for ruby devs to move to.
When you look at the description looking for the links for the keyboard and find nothing...
If you google "From $erverless to Elixir" it comes up (in case youtube doesn't like the link I dropped)
Loud ass Iago from Aladdin sounding mf, waking me up when I fall asleep to youtube.
Rofl so true. 😂
Prime's skepticism about serverless hype, lies, deception and the need to go along is better placed with the Typescript crowd.
Deep article and good commentary.
nothing against the point of the author, BUT, i ran into the same issue wtih AWS api gateway costs and found i had to convert from REST to their lower tier HTTPS and it cuts the API costs in half.
Why not making an express server and start off some child processes or clusters for processing and wait for a batch to be finished before sending it to this mysterious kinesis, if your server can handle the load?
Finally - elixir
Dang, this article is 5 years old.
I am learning elixir it's fun
thank you for your feedback. appreciate it lol
Serverless is a movement? Like bowel?
another episode of: tech choices that you will never see happen in an enterprise/big company
I agree, sadly, I agree.
@@victorpinasarnault9135 every place i worked at were using java for literally every thing, even the smallest ones were spring boot apps, i created a flask server for 2 small endpoints once, senior came, overwritten with a java spring boot app and pushed, that was a miserable experience..."a very small api with 4 endpoints and you're using node or python? excuse me what the fuck?!" that basically sum it up the enterprise experience for me
Hehe, some of these big guys uses Elixir but never tells about it
the constant beef with elixir is so entertaining
... and now there is FLAME ... Serverless PLUS Elixir functions ....
5m/h request, is this netflix ?
Someone broke your keyboard in half
11:11 That is evil annotations black magic.
They are not annotations, just constants (:
People are getting over reliant on cloud based abstractions.
spent 1.3 hours trying to get phoenix to hello world on stream - no luck yet
where is the link for the keyboard?
I want to check it out
Collecting metrics on your metrics is the circle of sadness.
'' is string concatenation in Elixir. Most of the functional langs have something different than (ehm retarded) C-like syntax '+' .. OCaml use '^', Haskell '++'
It’s made for simplify and sped up compilers
The whole thing can probably be handled by 20 hosts on Hertzner with haproxy, for $1000/mo, completely over-provisioned. Or (if you really need to) in AWS for somewhat more. But tell me more how KISS your setup is, with AWS, Elixir, Kinesis, Go, Node, k8s, and whatever else was utilized there.
I really like that elixir juice.
Love Elixir
Elixir has little in common with Ruby, only surface syntax but in Elixir it means things that are very different to Ruby's
In Ruby a module is define between the keywords "module" & "end" and it is just a bag of definitions for ruby, the only way you have to ship it is as a file and supports no versioning.
In Erlang(or Elixir) a module is a distribution unit of code, is the minimum code the beam loads and it is binary and it is versioned and the BEAM (Erlang's VM) allows to load to different versions of the same module, and if you use correctly the supervision tree it comes with an automatic mechanism to update the module in all the running instances and if you have processes of the old version still doing job, it waits until they are done to kill them and replace them.
So Ruby & Elixir are way to different.
@atkascha Any proof that it is faster than Python 3.11 ?
not to mention Elixir is an FP language unlike Ruby and Python, and works with an actor system, which is requires a pretty different mental model to program with than your usual Ruby or Python programming.
@atkaschaFor a fast Ruby you have Crystal
Kinesis links are not in description
>2018
Now suddenly everything made sense.
It is hilarious how passionately ThePrimeagen hates Elixir.
TLDR. They change it, because people finally realise ok, we don't need that k8s / terraform crap.
Wow that is some quite low hardware load
Kinesis alone is a financial black-hole...
Upboated for the trippy elixir
they have users?
Do they even need K8?
Why not client-side JSON schema validation? It would save you from using a Lambda.
Relying on client side validation. Want to know how I know you have never written a high performance system that requires reliability? You can NEVER rely on client side validation for anything or you will shoot yourself in the foot.
@@anarchoyeasty3908 I really haven't, I do front end stuff. Why cant you simply do client side validation?
@@anarchoyeasty3908 you actually don't need to write high performance systems to know that, it's basics of web development
I like the tooling and fundamental concepts of elixir, I just can’t get over the Ruby-ness.
I can get used to the Rubyness but not dynamic typing.
@@verified_tinker1818 that’s what I mean, having no explicit types yet the compiler not being able to coerce types is just a disaster.
@@SigSeg-V you can get pretty good type safety in Elixir if you use its TypeCheck feature (and Dialyzer/Dialyxir). That makes it WAY more type safe than Ruby.
@@SigSeg-V Elixir definitely does have explicit types, there are 7 of them: integers, floats, Booleans, atoms, strings, lists and tuples. Typespec and dialyzer provide type checking and documentation on what types are expected, and Jose is actively working on implementing a more formal type system. The research part is finished and they are working on actually implementing it now.
I will add that Elixir is based on Erlang which is extremely reliable and has been powering systems that are critical infrastructure for decades without any issues. All of BEAM (the VM that Elixir and Erlang run on) has the same typing system, and it works perfectly. So a disaster? Hardly. You just are having a hard time letting go of the things other languages and developers have convinced you are requirements, but when properly handled (like BEAM does) is not actually a requirement at all.
@@SigSeg-Vcore team is working on it right now but it’s a long road
Elixir getting types soon sounds interesting. I did some programs on it and it was fun, but I guess I gravitate towards C syntax. (GO). Still, cool community that's hardcore in love with the language. Scales well (like Go), and has cool web stuff (like Phoenix). Also part of the "NOT JS" Crew. lmao.
Complains about cost and moves to K8s hahaha good one
As an Elixir bro, I watched this one live and thought it was never gonna get uploaded bc the article sucked :( It was just "serverless bad" for 20 minutes with not enough "elixir is goated" to compensate 😔I hope we'll see more elixir content soon though :)
W elixir
no funny comment this time, just wanted to say hello :3
raw dog me and append me 😂😂😂🎉
Why is Erlang getting no love 😢
All that stuff they were saying about Elixir like genservers etc. is actually all Erlang under a metalanguage... Erlang is all the love.
I smell bs, either at a management or engineering level. If and only if the service is running optimally then the aforementioned 12k bill shouldn't be an issue if the service is actually providing value to the business to offset it's cost. Either the engineering is bs or management pricing the service to customers is bs.
cloud bad
Serverless means peer-to-peer, not what you think it means.
Which one to chose Elixir or Go
for chat app?
and for e commerce?
Both have tradeoffs. I have an Elixir bias and did a little Go.
In Elixir, spinning up a Phoenix Framework web server is super quick and easy and really only demands that you have PostgreSQL installed. Which on that note, making database changes with Ecto is easy too--once you get it though.
Then once you learn a little about getting values onto HTML pages, you're off to the races.
Phoenix framework feels nice to me because everything including a webpage is just a process that might have some state. Something going wrong elsewhere won't often break the entire web app. Hot reloading is a thing so the dev experience feels nice.
When I was playing with Go, making an HTTP(s) server was certainly easy but for me I haven't got good. However, it feels hard in Go to start with a script that defines what your server is. Anytime something changes, at least in that server file, you have to close and restart the server script again. In Elixir I just type `recompile` and the whole app is recompiled in less than a second.
As for a chat app--super simple in Elixir and there are many examples out there elixirbridge.org/03_Intro_to_Phoenix/01-creating-a-chat-app.html
As for Go, probably also super simple to build a chat app.
As for e-commerce, all you're really building is a store front with a stripe integration and an inventory database. You can use Phoenix for the store front, I've seen articles about integrating stripe with Elixir, and Ecto to PostgreSQL will be your database. Easy in theory, takes a bit of effort.
What language do you already know?
js and python @@PwrXenon
doing web apps, elixir no contest. Phoenix is just so far ahead of Gin or other go web libraries
isnt this an old ass video