Bruce Williams - 10 Reasons Why I Keep Choosing Elixir & Phoenix

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
I'm sorry that you can hear me hill from here though hold on real quick well I figure out how to share I thought I don't use this every day actually before I do that let's um let's get to know each other a little bit more I'm interested in the technology since this is kind of a mixed group of folks has anyone here used elixir before has anyone has anyone here deployed elixir to production okay okay kind of kind of is okay that's okay um so I'll get more more into it obviously I've been running production elixir systems for about five years my previous company which is called cargo science still kicking I was a CTO of that company for five years and we built our infrastructure it's kind of a near real-time system for logistics intelligence on top of elixir and couldn't have been happier I actually left that company because I felt like I was kind of done it was working I didn't really have much more to do was chugging along and I was fully vested so it was time for me to move on and not something else that was interesting and had scale issues and things and github it definitely qualifies there's lots of really cool stuff going on here so that's why I made the jump on I'm gonna go switch over real quick the zoom is being nice jump here okay can everyone see that okay can everyone still see that okay so it's not cutting it off in any weird way [Music] okay so now I need to put this little window where I can see all of you folks in some place that makes it possible for me to still to read things um okay so this is called ten reasons why I keep choosing Alex French Phoenix why did I choose top I have no idea however it any one being a lot harder than I then I thought of to limit it to ten that was actually the main the main problem that I had okay so yeah that's me at github I am just Bruce I am easy to find there the benefit of being the 72nd user of github is that I get my first name it also means that I get all of the notifications for all the Bruce's on github so any time that someone tags briefs I get it which this has been interesting of I apparently there's a bunch of climate scientists named Bruce which I didn't know that so I've got to see some research it was all public I obviously can't I'm not looking at stuff that I shouldn't be but there's some really cool stuff on Twitter I was not quite as lucky so it's W Bruce there and only follow me on Twitter if you really just want to torture yourself because it's all nonsense so I am actually I'm from Portland so I'm I'm from Southeast Portland actually so about eleven eleven miles south and slightly east of where you are right now I actually measured this however I'm not right now I'm a little bit further south I'm at github headquarters in San Francisco at the moment I got pulled down here at the last moment for a summit and thankfully Nate didn't kill me and we were able to arrange this which is very nice so I am sorry that I'm not there I wish I was I would actually really like to meet some of you folks well all of you folks I haven't picked any of you out specifically yet that I don't want to be that'll be that's regret later on but at the moment you know I'd love to go up there maybe your next meeting as I said before I've been using elixir for about five years fairly early in the game it is has now taken off quite a bit more I'll talk more about adoption a little bit later and how I feel about how it looks there's been adopted as Mike mentioned I'm the co-creator co-main tainer of absinthe which is the graphical tool kit for a lick sir it was something we put together a car get sense because we wanted to graph QL API we wanted it to be fast we wanted to make use of Erlang LTP and Undercovers and we wanted to we wanted to make it happen our way and so we built absinthe and then a bunch of people decided they wanted to use it so now I have a select channel of 2000 people asking me for things which is a really good time on a daily basis um and a related note if anyone would like to learn a lick sir and hang out at sectional answer questions for me I would be appreciated that's absinthe I also wrote a book about absinthe that was published by pragmatics last year with my co-author Ben Wilson who is the lead developer and Curtis once again it's now director of engineering I like to dabble in languages my background is in linguistics and semiotics and it's just to say that I'm a language nerd and I pick up languages all over the place most of these I've used in some capacity in the last six months some of these are almost jokes that I passed in that I have used before so now I've actually written an embarrassing amount of Louetta last month because I've been working on minecraft stuff with my sons and I like a lot of the languages in here some of them I like slightly less I wouldn't recommend you write high tech codes really tech any kind of thing instance but I do love languages and so some of the stuff that we'll be talking about will come out of my level of languages in general and what I think about elixir specifically and its use in Phoenix so the scope of this i'm inevitably whenever i put together a talk i put together too many slides with too much stuff i've been doing this for a long time and i haven't gotten any better at that so apologize for that some things that i will not be talking about if you're familiar with elixir in this in this talk this i'm not going to talk about how awesome the pipeline operator is even though it's very very awesome i'm not going to talk about data pipelining which is a term that people use about pushing data using the pipe operator i'm not going to talk about immutability very much even though that's also great and obviously a core feature language feature i won't be digging too much into the compiler stuff especially with relation to types and type specifications that's all really cool useful interesting stuff on a day to day basis but i wanted to talk more about the foundational parts of elixir that make kind of day-to-day life with it once it's in production comfortable so i put my video in the wrong place hold on will I move this so I can read things I know what I'm talking about okay so the first thing I'm gonna talk about is mix mix is the build tool for elixir it comes out of the box you get it when you get to lick serve you can use it to create projects you can use it to compile projects test them people can add on to for instance if people here have background and like Ruby for instance it's kind of similar to rake but kind of similar to the gem command it's kind of a mix of those things and it's really really great I'll go over to some reasons why I think so here okay so like I said you can generate a project Nick's a meta project it generates all the normal that you need all the normal boilerplate the formatter which is really nice elixir has a code format under these days you're good ignore for you the mix of the excess is the most important piece here which is essentially your manifest for your project and then the rest of the pieces and then there's some help documentation at the bottom mixes mix is pretty nice in terms of hints on what you should do next this is what mixed study excess looks like out of a bear recently generated project skeleton it's very simple everything in elixir is organized in module so that's the death module that you see up at the top you'll notice that railing due at the end of that that that's because of lick search for more consistent about the use of using for instance ruby is so if you've got it a depth line you're gonna have a dual line at the end of it there's some other examples like this and you have some project definition stuff there and then at the bottom you can see some dependencies that's just some commented out stuff that you get for free kind of explaining how you would declare your appearances anyway if anybody has any questions nate feel free to you know interrupt me it's cool it's fine happy with this being casual i will i do hope to have time at the end for questions too but if something jumps out at you and you feel like we can't move forward with you remember you know and you'll forget something let me know built-in hope so if you type mixup as you might expect you get a list of all the tasks that you have available to you easy mix there's a ton of them out of the box and you can add on to them I only wanted to grab a few to show you the top list it's pretty expensive and they all individually have help documentation as well so if you type mixed health archive for instance you'll see information about archives then you can also use mix to generate a Phoenix app there's a you have to install the Phoenix archive to be able to do this archives are essentially prepackaged many applications that are used by mix for lack of a better explanation but this will generate a Phoenix app from scratch and it's kind of simple it's very similar actually to what a normal what a normal new elixir project looks like but it has some of the conventional directories that you might expect in a web application so for instance if you're familiar with rails it's a very similar structure at least at the top level okay and it will go ahead and fetch an installer with dependencies for you too it sets up all your database stuff what you might expect there's a bunch of command line switches so if you want to use MySQL and sort of Postgres or if you have if you don't need a database or if you don't want web pack or whatever you can you can change those types so you can get your dependencies just using bits that's that get you can't ask you to mix tests you can start your Phoenix server if you're in a Phoenix app by doing mix paycheck server which I always type serve and then it tells me no you should use server and and then you can get a Red Bull at any tonk IEX is similar to for instance like IRB it's just a ruffle that you can that you can you know type in and do the whole read eval print loop thing in this case this - s mix means that it's going to load all of the environment information out of mix so all of your dependencies all that code will be available and you can call it directly so it's just a nice thing to do you can also type IX dash X Mix Paychex dot server and it will run the server and give you a raffle so that you can actually interrogate the running state of the application live which is usually how I bind the server locally that's pretty cool there's a tool called distillery that lets you package up your elixir application to be released it comes with release tasks that you can call it there's that bundling for you and so that's in there too and mixed tasks are extensible highlights you can add in your own project you can add as many mix tests as you want all you have to do is main space them appropriately and you're off you can also test them to which a recent addition to your absent 15 is now testing our mixed tasks which I find extremely nice so this one however it's pretty useless and I don't recommend you add it to your project so next hex hex is the package manager for elixir it's also the package manager manager for our line because of course elixir is sitting on top of the Erlang OTP which is the BM or RTS is also called which is the Erlang runtime system and hex it's a it's actually really nice culturally within the elixir and Erlang communities we've kind of come together and we use hex there's also something called rebar which is a building tool that's specific to Erlang but packages are all distributed on unhex so there's a website for hex text rpm you can go there you can see all the packages you can search and find them you can see who you know who wrote them all the normal things that you'd expect you can see at the bottom lives with the current statistics on hex so I got 10,000 packages and almost 3 million down little gets yesterday and he's checking along pretty well I have a lot of packages and in hex because I haven't learned lesson on once you create packages and share code you popular these days the hex talks website as well so when you push it push a new package to hex it'll generate documentation for you I believe you can opt out that no one does and that documentation looks pretty good it has some search ability we've done some special things with absence so that we have least this guided structure we've been able to define that in our mixed ID excess which is also one of the benefits of being able to use mix for this and you can generate these docs will waive course as well so and if you want to learn about absolute if you just have to go and look at the package box and we can have basically everything hexans integrated with Nick so there's a bunch of mixed asks for it doesn't have its own executable which actually really like everything basically that you need to deal with the loads or you're gonna be running on mix control and so there's a there's a ton of things actually this is the full list for four huts I believe and but for instance on most most days what you're going to be running is probably mix heck publish and or after your login so and there's some things here too for private packages so one really nice thing about that is that there's a specification for how the package manager works of the actual registry Inc it uses protobufs actually for part of the for the API and it's specified there another cultural thing that I love about elixir is that our package manager hasn't splintered into a bunch of competing on CL is and and package managers and there's not any kind of infighting between different teams there's no bad blood and so everything is chugging along pretty nicely and so you can take a look at how hex actually works by checking out of that specification and actually that code for most of the code it's open source as well I think there's some pieces dealing with private repos it's not ok so processes when people talk about Erlang and elixir this is one of the very first things I always think about is our processes which are a little bit different than what you might think of if you come of the world of C or even if you come out of you know more more modern languages ruby for instance they were very different because there's lots of teeny tiny processes is the way that it works in Erlang and elixirs and this is the this is the official documentation line about what what process is on the main thing to know here is that processes aren't these special things you're running in a process at all times it's not like a thread there's no threat everything is a process you your main application has a starting process and then you can you have a tree of processes that are all interrelated that makes up your application so and most of one of the things that I think is important to point out with elixir versus versus other languages is it takes concurrency and parallelism very seriously it's not it's structurally part of the VM rather than it's just something that you can call that you can chain it's not like a promise it is it is much more the way everything works and that consistently that consistency yields a lot of benefits the process overhead itself is very small so the base overhead is essentially a process is going to cost you about two K in terms of your RAM usage and it is you can run hundreds of thousands of these on a machine without any degradation it ends up being kind of amazing how many processes that you can kick off there's there's a number if you can go google and find people trying to you know fill their system with processes they can get up to quite a significant number in in practice I probably I might run a couple thousand processes it just kind of depends on depends on what I'm doing but for David ingestion system we had something enough in that kind of range and there's some links on the bottom here too in terms of the reference manual an efficiency guide that are really useful to read give you a lot more background the main thing to remember with the processes is that they're a lot later than with other languages they're significantly lighter than you know then well then Ruby's processes or threads you can just spawn them all willy-nilly for all kinds of things ERT s elixir has a scheduler this is what keeps actually schedulers multiple but then another number of cores that you have on your machine these are pre-emptive schedulers they keep things running on time versus a kind of a cooperative scheduling mode I'm not going to go into depth about our scheduler and dirty scheduler and handling different things that Erlang has been around for 20 plus years there's a lot of there's been a lot of work put into the scheduler and how it operates it's kind of a Best of Breed when it comes to orchestrating a ton of processes at once one thing to note too with a scheduler is if you're running on the machine with a bunch of course you're gonna use all those course like you can use them you can make use of your entire machine you're not stuck on a course you're not writing mode all right so you can you can make use of a lot more of your course so in this example here you can see that you're actually in a process there's a function called self that'll tell you what your process ID is you can check to see if a process is alive by passing a process ID to it obviously working in a process so we are alive you can spawn a process by using a function called spawn you pass it an anonymous function which is what the FN is there the arrow in this case that that process immediately execute some exits which is why the process is no longer allowed in the next one so that's how you spawn importantly the way that processes communicate is with a mailbox so they send messages to each other and they without getting too deep into into the way the VM works they don't really share memory they push they push messages around into mailboxes and receive them so in this case for instance and I'm sending myself a message send is another function you give it a pig and you give it a message the message in this case is a tuple with an atom hello and a binary or a string world and you can see the return value of that is just the message that you set and then you can see directly after that I'm receiving and this received block here is a bit of pattern matching and we'll talk more about pattern matching a little bit and if I got hello in a message then I returned message from that block and if I got world in a message and I returned the string won't match and you can see that it says world because I sent hello and then in practice a lot of the time you're not actually sending doing this send and receive stuff yourself there was a bunch of tooling that sits on top of it that you can use but this is kind of the lower-level process work in this example we're actually definitely with two different processes so I'm getting in my parents bed then I'm spawning a child and then I'm having the child send a message to the parent pad and then in the parent I'm receiving that message directly afterward and there's things that you can do with that receive block you can have timeouts you can essentially have it receiving a loop so it turns out and then it goes and does any work and it comes back to the receiver check the mailbox but that's this is kind of quarter process management stuff in the air kiss so that's how the messages are sent and they can be linked this is one of the most important things to understand about elixir and Erlang is that if I start a process and it blows up I'm not going to care about it right like I'm I can start when up and it might blow up maybe I don't care it's just kind of a fire-and-forget however there may be cases where you really care that that thing blows up and so there is a another function called spawn link which links this process to that process and so if it exits then I have to deal with it just like if the essentially is the exception occurred in this process and so we'll talk about supervisors in the second that's very related to how that works but in this case I'm just spawning another process and I'm immediately ways mean in that process and you can see that ADA exists and then the parent process exits as well so it actually exit the Cheryl because the d-pad level processes so they can be linked and they can have state so in this case here's a module this module has a function called start link you can see tasks their task is just a fancier wrapper around around all of the spawning gives you better error messages and things like that and in this case task is going to start a process that's going to loop with a map and it's just going to sit and loop and loop and wait so this is like a little key value server let's just going to sit there it's a little process that's going to hang out and it's going to wait for messages and then it's going to do things with those messages so in this case you can put a value into that state and you can get a value from that state from outside of it and there's an example of that works no I don't have the example sorry I thought I did oh no I just don't have the part where I initialize it but I can put a value and I can get a value out of that state and flushes a little helper that lets you dump everything that's in the mailbox if this is all if this all sounds a little arcane and complicated take heart in the fact that you didn't actually have to write most this code most of the time this is stuff you sit on top of so you get a lot of benefits of this without having to do it then but is a very powerful concept okay so supervision I've talked about a tree earlier so a supervisor is essentially a module that watches a bunch of processes so in this case there's like a KD registry and it's watching and importantly the supervisor has rules about what happens when that thing dies so before when I did a spawn link you saw that the other process died then I died and that was no good in this case if that KB registry dies you can see it's a very bottom wire in there where it's both supervisor NIC strategy one for one if that Kay the registry dies it'll just get restarted they'll just start another one that's exactly what will happen there's a bunch of different strategies there's a number of retries this why people call or lengths all tolerant because you have these trees of Supervisors you can have a supervisor watch Supervisors watch Supervisors and they all have workers underneath and they do work and if you have a worker blow up then that supervisor knows how to handle that case so should I restart it should I restart it three times and then exit should I exit immediately and that my supervisor no bad things happen should I do some type of self-healing this is why elixir and early well especially Erlang systems have been known to run for years provided they don't lose power but anyway so this this whole tolerance is a key feature and your application in itself there's a top-level module for your act if you create a Phoenix application that does this for you that you can put your own supervisors inside that children and you can set up strategies and your application when it starts will start those supervisors will start various pieces of your app that'll run when you run Phoenix app a lot of the stuff is already built for you you don't have to worry about it but if you want to build your own data ingestion system or if you want to have your own Redis clone that's actually written elixir then you can just add that into the supervisor treat [Music] so that's what a supervisor is cost during clustering takes it a level higher my first entry into Erlang was when I went to this it's called Scotland on Rails it was a early rails conference in Edinburgh and they actually for some reason had someone coming to the conference and speak about Erlang it was from a startup called hyper numbers at the time and I remember things that really stuck to me stuck in my head from his path was when he said in the beginning when we were writing programs were writing it directly on their metal and then system and that would make it easier to write programs and now because of the distributed nature because of scale what we really need is something that's unlike an operating system is more like an application system so an application that runs across multiple machines and Erlang has has taken that idea and run with it so it has it has distributed Erlang disagreed elixir essentially is you can run multiple VMs on the same machine across multiple machines in a data center you can connect to those VMs programmatically you can connect them there's tools to connect them and once they're connected you can fire off processes on other nodes in that cluster just as if they were in your existing VM so you don't it's the concept essentially is that their location to transparent right so in this case I am I am spawning I'm spawning a a sorry I'm spawning a process on another note here on Goulet computer name which is a connected it is essentially it's a connected node to the my current node and then I can get the results from that right I don't have to care that it's over there necessarily there's a bunch of tooling in and around processes you and moving processes from from node to node in a Phoenix application for instance you might run it in a cluster of three or more and that will give you the ability to kind of spread load across your machines and in a different way than a load balance would necessarily be with you or to turn parts of your application on or off on different missions as well so distributed Iying and elixir or obviously complex topic but it's once you start start really digging into scale it becomes important this stuff is really cool observability so I'm going to totally misuse the operations term observability here to some degree which will annoy people that work in aqsa devops world but obviously it goes beyond monitoring this you get a lot of stuff out of the box with airplane and an elixir you can just jump into you can just jump into your repple and say observer start this that : observer means that this is an actual Erlang Erlang package underling application and so I'm going to start to the observer and it's actually pops up this Bui window here and you can you notice at the top there's a bunch of tabs I'm actually looking at the supervisor tree here the trees underneath vkv you can see the individual pids you can also click on the individual ones and kill them which is really cool in a production systems that you want to test see how well your production system deals with errors you can actually just remotely connect to your production system securely and you could just kill a part of it and then see what happens so it's kind of an interesting way to make life interesting for your workmates who suddenly have to deal with partial outage so I may or may not have done that before so the there's other there's a command-line interface version of the same thing you can run which is cool it's very end curses like and you can kind of dig into this - the same stuff you can also interrogate the state of individual processes and you can modify the state of individual cross as well there's also commercial products around this wombat OAM which comes out of erlang solutions which is a packager of Erlang they have a lot of some of the original Erlang folks there we tested this a cargo sense it was crazy it was an absolutely amazing product that told you way more than we could ever know what to do with in Erlang and it integrates now with a ton of other tools so if you were actually shipping something this might be something to look at well it was more than we needed because there's so much you get out-of-the-box macros if you like to torture other people macros or you um if you haven't in Ruby and you're familiar with how to do meta programming it's similar it's a little bit safer I think in this case for instance you can see the DEF macro which is the second line which is and the quote and unquote is the macro piece so you can essentially write code that writes code for you so in this case that stuff doesn't even add post compilation the macro macro macros get executed during the compilation process so post compilation if the application environment does not have a logger enabled you won't have the overhead of it checking so you it'll just be a no Optim you can call log or log and you pass that string to it just nothing will happen and you won't have any of that already so this is just kind of a short example of how macros work they get very complicated for instance in absinthe we have the sensitively use macros for actually defining your graphical schema you can load it through the normal graphical way but we also have these macros that actually most people seem to prefer it was looking more easily programmatically generate their schema so we have things like in this case query is a macro filled as a macro there's all this of macro and then it's actually during compilation writing a bunch of code for use so that's pretty cool and it's terrible to maintain but that's my problem and not people that are using it to be seen to love it so mission accomplished pattern matching people love pattern matching it elixir and for good reason we don't generally use the word assignment we usually talk about binding when we talked about setting a variable value to something and in this case all three of these lines are setting the variable name to the string Bruce so the first one is simple it doesn't even look like it's any kind of pattern matching but it actually is the second one is extracting that first element of the list and then the third one is taking the first element of a value of a mat and so coin briefs out and other names which would be Bryce and Bryce which by the way were what I was going to be named and thankfully wasn't either one of those so all of those are equivalent and essentially you can structurally match the right and the left hand side you can pull values out that's pretty cool you can do that and case statements as well so in this case I'm matching that's the list and the result of this case statement if the list is empty we'll be in adding no items and if it's got one wait a minute then it will be a tuple of an atom one item and B item value itself and if it's anything else I'm going to assume it's got too many items for for me to report and so I'm just going to return lots of items in the length of the items this is a totally nonsense example but it illustrates how case basically works and if you were to take this a level higher you can also match on function heads so if you're familiar with multiple dispatch that's what this is essentially so in this case there is one function called put subscription it takes it has an area of two so it takes two arguments in the first case if there's a user that that by the way is what we call it straps which is a fancy math essentially of key value pairs and if the subscription is nil then I'm going to take the subscription that you've given and set the subscription on the user that's what the fancy bet is on the second line and I'm going to return that but if the subscription isn't know then I'm gonna return a tuple already subscribed and the user and that all happens at the point of dispatch so it takes it takes the arguments that you're passing to put subscription it matches it against all of the function heads in this case there's two and then it picks the first one that matches and so this can make your code at least a lot shallower you're not indenting quite as much obviously there's trade-offs and readability that you have to deal with anything else but it's I really like it also if you are a parsing nerd and if you like doing things like unpacking binaries you can do binary or bit string pattern matching in elixir as well it's similar to how a line works so in this in this case I'm actually parsing a UDP packet and pulling these individual pieces out those get it signed so I'm unpacking piece a one packet into individual variables and then I can return a map of those with better for names so you can write really really fast parsers and let's or because of the pattern matching that's available to you and this is only kind of just a few bits and pieces of the types of matching options that you have with binaries Phoenix perk so the performance of Phoenix it's really fast people may remember this quote there are three kinds of lies lies damned lies and statistics they may even be more familiar with this one which is micro benchmarks in statistics so I'm not going to shove a bunch of micro benchmarks at you and tell you that Phoenix is super fast what I'm going to tell you is to Google these things if you're interested you know Phoenix has been able to handle two million concurrent WebSocket connections on a single machine that's pretty cool bleach to report switch things over to using elixir in Phoenix and seriously changed there is scalability characteristics discord as well not last one's totally a joke but I thought you could I bet you could go google it right now it's absolutely true I love rails I use rails from the very beginning and I still use rails here at github but Phoenix at least when it comes to speed of the system not speed of development necessarily because we're still new things for us to use rails is obviously a very huge ethical system whose axis is very large but in terms of the actual code that's running in terms of its speed Phoenix is very very impressive and I suggest you dig into that more Phoenix lag view this is the last piece I'm just if you haven't seen in Phoenix lied to you before I don't know if I can actually make this run so what you're seeing here since this is a full stack group this is a UI this that is being served by Phoenix there is the developer of this wrote no JavaScript there's no JavaScript written this is all happening from elixir over WebSockets doing Dom modifications there's a tiny shim of JavaScript for handles I think it's called morphed on that handles the Dom changes and I'll show you what this code looks like as well so these are some validation people have built games in it and I'll show you a link to some other crazy stuff that people are going to be showing off your spin so you saw here with this thermostat take a look at the code for that if you're familiar with rails would be familiar with controllers in this case there is an action on its controller called thermostat instead of using rendering uses live render and it renders a view here which it's the way that Phoenix works I won't go into that really but that view just happens to be a live view you can see that on the second line where it say use Phoenix live view and the rest of what we're going to show is what goes inside of this view so this is if you if you're familiar with like JSX for instance it's very similar and don't worry you can totally shove this stuff in a separate file you do not have to have it inline dim electric oh but this the else if you let you see at the top right there is what defines a live view HTML trunk you'll notice there's some special events in here you can see Phoenix click for instance to actually trigger an event and this is what when you when we watch the animation when the cooking the cooking was occurring it was pushing with over step up and down and decrement and increment at the very bottom there you can see so that's what the render looks like you always you have to have a function that's called mount you see the session there which we're ignoring which is like it for instance if you had to be authentication you would want to look at that session you want to make sure that the socket is connected and in this case this thing is triggering a send after so basically every second it's going to redraw that's what the tick is and then it's some it's assigning some initial values for this so if I go back you can see the dial mode and time you can see that allotted time in here you look like instance variables are familiar we for instance at mode at time a pal those are being set there this is the tick that we triggered this is happening every second so like a like a set interval this is this is kind of this is like blinking set timeouts where once the time that causes another one to happen this is a sent after here causing another tick and in this case all that's doing is reassigning with the time value is and then these are the event handlers actually handle the user input so the individual clicks the increment decrement and the toggle mode I'm switching between cooling and heating and that is a obviously besides the CSS that I'm not going to show you but there's no if you were writing this if you were building this you might have flow quit the line of JavaScript this isn't to say that this is going to kill you no client-side JavaScript it's not happening but you know leave it to back-end developers to avoid JavaScript at all costs so this is this is one way to do that and it's extremely fast well over 60 frames per second for instance you can really you can actually build relatively decent small games with this and this again is Thanksgiving it's these are some early this is from December of last year so I'm just an early numbers on the JavaScript shim that you have to have for a lot of you which is why do you got Jess and the more fun versus you know buin react a member obviously those at all all of these have changed since then and I have no idea whether they've gotten bigger or smaller but and that gives you an idea of scale and this is happening right now if you are interested in Live View this phoenix frenzy here and is a competition where you can enter it and try to build a really cool live view demo and they're not gonna give you anything for it but it's gonna be cool and it presumably means that we kind of packaged and shown as demos for people that are interested phoenix and they'll be available to you to actually go look at that's a site once it's done i think it's got something like 40 days like that i believe you can still register and this a pretty cool thing I've built a couple small IP things and they're really fun to build and they're fun to test do so some quick words on Phoenix adoption and when I talk to people communiques has been you know well that Phoenix necessary but elixir there's been a renowned you know for a few years now when I talk to people especially people that came out of the rails community I started learning Ruby in 2001 and so I was there long before rails ones and so I was I was part of the community as it you know get a hockey stick of growth and grew extremely fast and so from people that I know from that period of time they always went like why isn't elixir difficult feeding and my point that I usually tell them is just not to worry about that there's a big there's a difference of inducements between rails and in Phoenix with rails it was development speed primarily the ability to build something really fast coming out of probably used Java before of some of the other tools that were available that was the primary push speed was a secondary one I actually think the growth in the other community is healthier I think that I think that people that are looking at elixir in Phoenix have a different kind of problem to solve and these problems are problems of scale and problems of performance and problems of maintainability and so I think that the growth that's happening in the elixir in the Phoenix community is actually very very healthy and it actually is it is growing actually at a pretty good clip is just not doing a hockey stick thing that I think some people expect or maybe new technology post Wales so that's my words there thank you very much
Info
Channel: Vancouver Full Stack
Views: 5,465
Rating: 4.9595962 out of 5
Keywords:
Id: wRI75pzjHRo
Channel Id: undefined
Length: 46min 39sec (2799 seconds)
Published: Fri Aug 23 2019
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.