Events Add an event Speakers Talks Collections
 
Duration 48:16
16+
Video

ElixirConf 2017 - Closing Keynote - Chris McCord

Chris McCord
Architectural Engineer at DockYard, Inc.
  • Video
  • Table of contents
  • Video
ElixirConf 2017
September 5, 2017, Washington, DC, USA
ElixirConf 2017
Request Q&A
ElixirConf 2017
From the conference
ElixirConf 2017
Request Q&A
Video
ElixirConf 2017 - Closing Keynote - Chris McCord
Available
In cart
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Add to favorites
6.57 K
I like 0
I dislike 0
Available
In cart
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
  • Description
  • Transcript
  • Discussion

About the talk

Come level-up on Phoenix's most exciting features while gaining insights from its creator! Together, we'll use Phoenix Channels and Presence to build a highly interactive, collaborative application that works seamlessly across a distributed infrastructure. This hands-on tutorial will take you step-by-step from a blank project to a usable application. Along the way, you'll gain insights into Phoenix's distributed Pub-Sub layer and see all the tricks to getting the most out this exciting feature-set.

About speaker

Chris McCord
Architectural Engineer at DockYard, Inc.
Share

Okay, awesome. So to give some context behind this for request joke. There's just so I did I did some guy training the last couple days first two days of the conference on so I was just ate our training couple days in a row while we had a phoenix guides for effort going on. Meanwhile, we'll talk about which is fantastic second day of the guys in effort Jose spent his entire afternoon instead of doing useful things getting almost every person I interacted with I like dozens of people to submit the tiniest pool request possible to the Phoenix

guides only so I will only so I would basically that that's a big joke, but it was like the level of effort he went to like throughout the day became more more. Play keeping the other even the other trainers that were predisposed all day also submitted a request because I got an email from Jose. It was like the Caps important. So everyone let me interview. Did you know I'm pretty sure at this conference. Anyway what we were talking about what's next for Phoenix today in a little bit about

1.3 we have heard before but it's some lessons learned now that it's out and kind of where we're headed are going forward. Before I get started, so we just heard the flight from dockyard, but I do have to thank dockyard for really allowing me to balance my life out and work on open source of the majority of my company time. So they really invested in the community and in Phoenix a self selfie check us out. We do what's your in Phoenix development anything from Greenfield architecture engagements to training so we owe them a big. Thank you. Out of the four I get talking about

Phoenix. I do want to talk about some kind of rebranding effort that I started I just today cuz they did a little bit of gold rebranding with Elixir and they change their their goals from being productive extensible compatible to a productive maintainable and reliable which sounds good thinking this morning like all the sounds that sounds really good. And I was like wait sounds sounds really good like almost to Goodman. I was like, it's still all we had all

the best words and they still almost all of them. So, Yeah, right. So I mean do they call the shots? At least it's on top, right? So we're going to do a rebranding effort, you know other than fast that's all we're left with but I think that that goes without saying now so I was thinking like what are we going to do? But we can just feel the other all the other best words back. So it looks ever was productive expensive one compatible. So now Phoenix is productive extensible compatible, right? I mean, we were

productive just like elixir still cuz everyone was being productive when we can always improve that extensible because people think like all Phoenix Phoenix takes over your app, and now it's actually really expensive or we can just serve the web component of your at people can use this to build apps then subscriptions. Like we're very piecemeal very sensible, and we're also compatible right? We're going on top of flood. So if you want to use a plug Library, you can just drop that in 4 compatible with cowboy and cowboy to and Ellie plug adapter. So I think we really can just take over these

words and then just do a swap. So, thanks Jersey. All right. So fix 1/3 sure you're wondering like what I've heard about the Phoenix 123 like last year and I'm going to talk about it today a little bit because it's 8 months late give or take a couple months. Am I talk about why this took me longer than plans? And before I do that, I do want to highlight that we have a contacts guy. That's why I've quite a bit of work and I were really happy with with where it's at. So if you haven't checked out the new Phoenix guys, they're all on Hex dogs with a new contacts guide. So

why you're waiting on the new Phoenix book it be updated. We're planning on having that come out by the end of the year. Do you check out? This guy's I do think it will fill the gap between the Phoenix 1.3 ideas and the Phoenix book. But why does it take longer than planned? Because we we just talked about Kieran have new generators where to focus on code that pushes newcomers in the right direction sounds pretty simple, but we were trying to answer a pretty large question in retrospect and that's like what makes your program and she's trying to pull everyone in the audience today.

You'll probably get a thousand different answers and worse. We were trying to answer like what makes a good program in general like it turned out trying to solve this generic generator question was really encompassing the entire field of computer science and lots of different opinions. So it took a long time to try to find the right balance of how do we distill what it means to make a good looks or program into a tiny set of rules that we can apply broadly to newcomers to people live in in the in the language for years and that's really difficult task in retrospect.

And I'm pretty happy with where we ended up. So ultimately what we want is go this easier to write easy to understand and easy to change. I think that's pretty easy to steal those rules and what we want we write software and I think up until Phoenix 13 we were focusing on codices is Right. Definitely I think people felt productive the code was pleasant to work with but I think that was easy to understand easy to change was kind of hand wavy at least long-term. It wasn't so hard to understand but trying to maintain something down the road with our current one point two generators

when you let people down and unmentionables path and that wasn't clear to us initially because as with any young Community, we release tools and then receive how the community's reaction to them. I can salt be used with like or like for my second dockyard. We get client applications that come in from teams that need help and we kind of see the ball of my people start creating so Rv-14 said okay. We need to address some of these issues that people are having told that we're inheriting that's really difficult to understand and teams are having trouble

changing and repacking their code. Let me find out about Kroger means hard but teaching programming is harder. So if you ever tried to teach programming or any kind of technical document trying to teach someone rules that are going to level them up to a place that you want to be is incredibly difficult because we have our current holistic understanding and we're trying to distill that down and bring them step by step up to where are we want to be so that was kind of the task of the Phoenix team when it seemed seemingly easy just to write some generators. It ended up being us

kind of trying to teach people how to ride mechanical programs. And it's really hard because how do we distill that down? And how do we get that right in a way that the word broadly because for me personally coming into functional programming. That's like what does it mean to write a good functional program and I have a lot of baggage. I think a lot of Us 2 coming from object-oriented backgrounds, like historically like my entire say Yes program was all about orientation. So I had different I had to use in my head when I would take classes in college that like, wow, the the people that came

before me like this gang of four book these authors they figured it all out. So there's decorative research and effort that have gone into programming and I would like wow, I wonder what it would have been like 2 to be alive a few decades sooner in like actually figure out these problems like the way to program cuz you just asked you take these things at face value like this is the way to do it and then you come into functional programming and you're like, oh, what about the gang of four book 4 FP like where is it? And it doesn't exist for me like my own Learning Journey. I kind of had to

like throw away some old Concepts. I think a lot of us have to do that. Whether it's coming from another language. Your looks are coming from another framework into Phoenix. You kind of have to discard that there is a way to do something and rethink. I think it's hard for people. And we like to say in front of programming like all we don't have design patterns and functions. That's all we do. And it sounds great. I say that all the time but if you're a newcomer you hear that and you're like, okay, this is not with me at all. Like this doesn't tell me anything about running a

program but it sounds good sounds catchy. So I think it's not enough for us to just stay right models and functions. So we've gotten some backlash on. Why did you name the special thing in Phoenix? 1/3 call contacts? Like why did you have to come up with a new idea and I hate the name context is hard, but you wave week we name something. We will give a name to a new idea because we can't just tell people right models and functions. That's not a rule to that doesn't tell them how to write good programs. So that's where we came up with this idea. Like, how do we still down? All the

computer science all of these ideas in the field of structuring programs into something that's broadly applicable. And what's the smallest that we can take and that's where contacts come in and contacts or just dedicated modules that exposing group related functionality and that's it. So their models and functions, but you we want you to think a little bit about how they're grouped and how they exposed in her features near application. And along with that we also focus on a directory structure that also kind of Screams the intent of your application and we made a switch right before Phoenix

1-3 was out that we actually moved the web directory outside of wheat. We separated your application code Live directory from your web code in the live DirecTV. This was a very late in the game change, but I'm glad we did it. He has this further kind of signifies that you're what application is entirely separate from your actual application be code that drives your business Logic the actually think the thing that your app does and we also go further than that and say I want to be able to look in a nap when a client comes in the dockyard or when I help someone try to debug an application. I

want to be able to look at them and say okay. I don't know what this application does yet. I'm not going to open the web directory to see you like what the controllers are doing. I'm just going to say, okay look listen to the directory structure. I can see that this happened you notifications as a sales system. Looks like it has a Blog and then if I check out the Public interface for those modules like they should tell me what they do without even trying to get a full understanding of the code. I can see that I can handle refunds here. Looks like I can get purchases from Custom time data

storage. I can see notifications out. Looks like I can send SMTP emails push notifications in SMS. So the goal is to get people in this direction of now I can understand the code easily and it's cold is going to be easier to change because the moment I want to talk to you twilio within my notification system if I want to use mailgun or use SMTP, I can easily change that piece of code in my notification system without finding the controller or Channel that's calling twilio directly. Struggling to get people here and we think this is a small enough step in a general enough

rule that this is how you can write software right? Just like the Elixir standard library has a logger modules that you can log stuff to the console. There's other code in there that doesn't make things right but we interact with it through a public interface. We want people to get thinking about writing code in a woman Muslim function in grouping related functionality in the application. Cobra surveillance, because what happened was people before we went to the released today, there was some pushback where people are saying this is going to be this is literally going

to be the death of Phoenix to like They were like in yo, it was like a hot and cold type thing. That's a good feedback and then occasionally like this would literally kill you if you use it. But by and large, I think it's been very positive and then even talking to people here at the conference. I've heard that you know, I've heard comments like initially this was a barrier for me, but I really try to internalize these ideas in now, I love the way my code is turning out. I was talking with Sean Washington on slack. He's not here today, but we had a really good conversation is like just before

the conference about someone struggling and then kind of working through this new process and then ending up in a very good spot. I so like most people inside keep us a question because if your on flagging you need help while we're here to help you so he said I'm struggling to think up contacts rapping for social actions. So any newcomer comes in and we tell them okay, we want you to think and then you're there like a high but I don't know what to do and sometimes Make a decision paralysis because if even if they had the best of intentions were telling them it's important that

you make a decision. It's important to think about your application design. Then they start thinking like I can't make a decision because I'm afraid to make the wrong decision. So we do have this barrier but we think with a little bit of effort people can get past it and up in a really good spot. And if you want to keep stock earlier, which was excellent. I like his It is the cesspit of success analogy that I'm going to steal for the end of time now because our goal is we want to have newcomers come in and you're going to stumble right when you're

learning anything new any new technology new API or framework you are going to stumble but we want you to stumble into constant 6s versus pits of Despair example of that is just a and I actually had people tell us that don't run into issues. Like they're they're learning channels are there learning parts of Phoenix and we'll get an error message an error message could be a pit of despair. Like any are you could stop you from continuing for hours, but will your people say that they just followed the errors and it told them what to do what to fix and that's all they had to do to end up

with a working program. So that's kind of a fight like this pit of success scenario because you're going to stumble but we want you to keep stumbling into pits of success or like I stumbled and then I can try to push a message in a phoenix Channel join. You can't do that. If I instead of just like argument error like you would get from Erlanger. It's like Hey, you tried to push and join yours why you can't do that. Here's what your code should look like. If you want to do a push and join send yourself a message in handle info. And anyway, so we want people to constantly reach a successful

point when they're struggling. So when Sean said, I'm trying to name this context, I don't really know what to think of what the name at where the snake should live what he did immediately what he's like well, maybe I just put it on your existing account contacts. So it's nice that you at least said, I'm not thrilled with this idea. But I want to make forward progress. I had to think about where they should live in my system. So maybe I'll just add this function and even said I don't like that name, but while I'm on my way, so at least he had to think about where should just leave my

system like my app still coming together, but I'm going to make a decision to place it here. And I was online I said Sean. I actually have a talk at Winstar look see her with this exact question of like social actions and I said what if we made the API reaction, I'd like to introduce a new contacts because accounts in the system is really our social actions really Roofing functionality into like user accounts. Maybe we can have a separate contacts year that encapsulates that functionality. America look like this where instead of having two accounts have like a light post for user

we could just have a reaction add like and then that could hold its own after schema table. So we wouldn't have to worry about polymorphic associations the rash you can handle all that and know which kind of data structures it supports in this way regrouping that functionality and providing a clear in the face for it. John was like oh wow, this like almost seems too easy and he was in a good spot. So it was like he hit the little barrier. We talked through its and he ended up in a happy spot and even told me later that when you was testing it after the fact that it

became incredibly clear his test became much better than they were before. So he encountered a little bit of resistance how to do a little bit of thinking and ended up in a very very spot. I'm it was even cooler because we continued where he was like, no, he's just feeling his ass. So he was like, okay that reaction stuff sounds cool and he was like, what about cashing place? I was kind of cool to see like why it's important to think up front about design. So we thought like he's like, oh, by the way, I have this requirement. I have to cash the number of posts or the number of likes a

post has like what I do that something might counter patches and this is where like eating preconceived assumptions from other Technologies. Like if you come from active record and rail is Connor cash is overuse. That's what I've used in the past. You're like everyone that I know you's counter cashes that must be the way to do it and I was like well, And we try to avoid counter caches, but then Sean was like, you know, what wait a second. Like this doesn't make sense because he's starting to think about Roofing functionality and he's like, well if I have to introduce counter Cash's I'm

going to head feels that leak throughout the app that are concerned with cash. So like if I have Community content with post I sent her just a couple Fields here like bikes count Luvs count if I had like a rage face and then I have to have a rage face count because I got to get ridiculous and like I have to introduce that for every entity in the system that cares about it. And now it's leaking across the group functionality of my app. So it became apparent when she started thinking about this just like generalize rule that maybe we could have the reaction module that takes care of likes and

dislikes contain the cashing information and that way we can just expose the stats over the common API. So if I like a post or I want to get stats for a post that you're actually knows how to do that and handles the cashing internally, so he ended up because it went from like I'm struggling Do at least I can make forward progress to while the sounds good and then as he added features of the app it became apparent that the New Direction was driving him and in a proper mindset. And then he wanted to come and live in my floor in my office. It's soaked up all of my

apparent knowledge, but I had to break the bad news soon. Like this is my current home office. So doesn't drywall a heavy machinery undergoing Renovations. So he's more than welcome to sleep there if you can find a spot. So that was that's interesting. So I guess I get comments from newcomers that reinforce the idea that we're definitely on the right path. And what's the most interesting thing for me since we release Phoenix 1/3 is expertise adult have also been affected by this and this has been the biggest surprise for me. So Saucy York has the author of elixir in action

probably one of the most talented and skilled members in the community and I'm going to walk you through a story that you shared on The Elixir for more. He said a year ago, his teams are working on a Phoenix Ave. And they all had experienced building or line systems web servers a lot of non-trivial software just software development in general. So this is easier expert developers and none of them had experience with Phoenix, but they followed all the best practices at the community had which you do right? You follow a blog post you follow what books are saying you follow with the

official guys are saying And decide which things 1.1 there no context it in and they move quickly. There was a lot of code cuz they really productive as you do right, but the problem is later on they were like suddenly like is Easter to step your like okay, this feels good and productive and then suddenly you realize my code is really interleaved. There are no clear responsibilities in the app and it became increasingly harder to maintain extend. So expert team following best practices ended up implicitly following the time for all good. So the framework

decisions we're even our code generators are pushing expert teams in a wrong direction. And six months later, they come to find out that while we're in a point that we really need to clean up and unfortunately for them, like what's clear to me, like he said to this day our code is still not completely factored. So they tried to go into the service module Pro. She was just kind of similar to contacts. Let's try to you know, figure out where the where we can isolate different functionality or app that's group together and six months later. They are not there yet because it's really

hard to change software especially software that is in relief with no clear boundaries. So he has some takeaways which I've summarized a little bit but there's a leak at the bottom of the slide. You might check it out, but I think it's really important to go with to go through these I want is he says the frame plays an important role in determining code organization, even for experienced teams. And to me that's been the most surprising thing. So the tools we use weather is Phoenix whether it's makes their informing our code decisions, even if we don't realize it so even though his team

wrote non-trivial programs, even though our code generators just give you this like really basic starting point. They don't write your whole app that was still nudging them implicitly in a bad Direction and I think it's obvious now, but it's harder to code after the fact and Sasha feels that your chance of keeping control of your code is you have to pay attention to it from the very start on so we've gotten pushed back from people that say it's not important to have our generators focus on these things from the start people can get into them later. But again, Spit up

thick cestonaro like we want them to fall into a good design and maintainable program. We can't have him fall into this pit of despair. I'm in table mess and say oh now here's what you should have done. We have to focus on these things from the start. And then he said that keeping Phoenix part of just do web related to ask in your app is kind of an interface. The rest of the system is a good way to structure any production apps. That's kind of what we're trying to push book stores like Phoenix is great. But have that be a window in the rest of your system don't write your business logic in

your HP interface. So that was interesting take away from me for Phoenix 130 think by and large. I've had great feedback client projects that dockyard has better come in the dockyard with teams following scenarios have been way better. So I think we're seeing definitely success in the community from these and the talking to folks of the conference. I've even heard quite a bit of success stories. So I want to talk about team is 1.4. I mentioned this in Barcelona. But I'm a little bit about our plans are going forward. I so we want to focus on monetary

metrics cuz we see some problems coming about so she related to do to what applications I mean every what application every company wants to say. Okay, like where is the Apple slowing down? Where do I have so database queries, you know, if one if one person that users are experiencing a Slowdown that's who directly affect my sales. So we have a lot of companies that take care of this for you. So there's datadog New Relic app signal Skylight. These are great companies that serve a great role. But the problem we've seen is all these companies Implement their own data collection agents that

run on your server and all of them usually provide clients on different platforms are there is Ruby C sharp and elixir as we were seeing a lot of duplicated efforts to integrate with these different services in a lot of data collection that was happening that didn't really treat deerling VM as the novel platform. It is a so the idea For us is that Phoenix team focus on having some common interface. So a all these are referred to as application performance monitors. So we wanted to provide some basic boring APM library

that Phoenix x o x o w s plug every library that wants to report metrics and elixir ecosystem can depend on so instead of saying if you want a new relative forward, you have to kind of try to shim some Library want to provide a common interface that handles the data collection and the best way for the DM. So we want to make sure it's fast and efficient and also make sure we collect information that's relevant to the novel platform that we have. So if using Phoenix direct or flood Rexall as they can report to this, I'm sorry, they can use a p.m. To collect the data and then

we can configure a day reporting to datadog New Relic app signal so we can handle the collection side and then report to Whatever third party that you need. I saw that one probably want to solve and the other problem around this is this issue and he's a business is a caricature. Right? So these modules don't exist. So don't go open an issue on the app signal but we're seeing is these companies rightfully want to have a first class experience in Elixir. So they want to say and do what we can track your database queries. We can let you know where you have a slow query it's

all you have to do is use app signal repo metrics fake module, but But it's still the point of flies and then new relics. Like hey, we actually have electric support to in a lot of people use so you can use RF connector. It's really do some point injection here and report. So we're seeing in all these duplicated efforts and they lead to a lot of nasty hacks with code injection. So the goal is well if we can just have F to rely on this interface and you can configure apps ignore datadog unitek token just stay here report this statistic. And if no one can figure for it

can no off. Otherwise, I can report the data to all these services. And we also want to do this in the most efficient way possible. Cuz the problem we're seeing is these Services much like this and a client project will say okay. We're going to monitor your Weber performance. So they release a client you add it to your plug library. And what happened was I was doing some performance analysis on a final project and I traced it down to a service that I won't name was just doing since her forecast on every plug request to some

reporter back in and that reporter back in what is chunking this together. So it wasn't just sending a post request to every to the backend ever request, but it was sending a message to a single join server process on every request. I came into the house with the taxi crash DVM when I hit it with the traffic, so it's potentially in an effort to measure performance. They were they reduced application to single thread performance. So the number one goal. AJ Lee collection in metric library is that it can take Gaba under load so like its job is to measure the performance under a load.

So I can't take you out if it gets under load. So we want to solve this problem properly for all these providers and then we can report the data to them and they can do what they do best, which is visualizing the data doing physical analysis on all the great things that they are good add without trying to reinvent the wheel. And for me personally is I want to take this day to then from the Phoenix side. So we have this boring metrics library and this is just the casino table. So if you have experience with CSS, and you want to help us make an awesome looking interface. Please contact me

but one of my personal goals is okay. If you're using any of these Services, that's awesome continue to use them Phoenix is not going to replace them. But what I want to do is have an application out of the box have maybe a / performance in points last Matrix in point that we can have this app. This metric reporter be reporting to Phoenix Journey Phoenix app and expose axle in size 4 Non experts and for me, this is again this whole pit of success in area where if you're lucky we have all these novel VM statistics like yeah timetable how many tables you have how many processes and we

have different system limit. So there's some interesting characteristics specific to the irlen VM that most of our Neiman aware of at least if you're not a Intermediate expert user. So I want to use her to let's say they see that their service is being restarted because that out of memory errors that could be a pit of despair. We are like I was like I was lied to. It was a mutable was supposed to stop the memory leaks. Like what is going on? I be nice if they were like I have no idea what's going on. Phoenix has this / metric thing and then they were like something please tell me something

is wrong here like at this movie trivia for us to say, you know, what like we can chill a message like this like potential memory leak here. It looks like you are now this was supposed to be expanded on the other! So just pretend it's going off of the atom's but we can stay like it and then you can also just show the darling dachshunds Say by default. The maximum is a million atoms. What if you know what you're doing you want to increase it you can pass this to Davina and like this. This information is out

there, but being able to serve it serviced this and give non-experts Insight would make a man in extreme difference and then of also make people feel like they're a wizard because then it's like they just fix these errors in production and we continue having them fall into that pit of success. That's my personal goal with we get to data collection part of it. So we get the third-party data reporting solve. But then since we're collecting is data, we can Surface a phoenix Phoenix process. So out of the box, you don't have to be running grafana or graphite referring to Stats

the you can just be running stock Phoenix Elixir no dependencies and get this kind of insight. I think it would be a huge deal. And monitor metrics is pretty basic at falls down into a few different types of one is going to provide gauges. So like if you want to provide, what's your CPU usage right now? You can report that hamburger sample that for you and then report it to these different Services. We can measure a price per second which is what you're the one for a web request that's done with a meter. So it's going to be a rate of a minute overtime and then the services can

provide the statistical distribution for you. So Phoenix isn't going to try to replace. Like I said, the service is like New Relic but we can provide information for a meter and then you can see this is just go distribution. Like what's my 99th percentile of request duration and get that kind of insight? But we will provide is this instrument or layer where people don't know about Phoenix has any Sim Point instrumental that you let you instrument different events happening in the framework. So we want extra pack that into a more generalized part of the library that we just gives you

compile time Hooks and application events. That way we can officially like it. If someone says they want to instrument in the query they can hook into it and do that. That way I feel doesn't have to worry about doing it the other way around like we're not to tell active itself to ask an instrument as we can just handle it at the instrumentation level. And this is early API. I should have a prototype of this working in Barcelona. So this is subject to change. But the goal is that you should just be able to write a function and we should be able to collect data from it. So I should be able to say

I have eyes original tree here and I want to start this CPU gauge that samples the CPU every second and I just to find a function that uses existing erlang VM modules to get the CPU information and likewise. We want people to use this to surface whatever information they need. So they can say OK mean I subtract my active users throughout the day. That way I can convince my investors to invest more money because they lack of use as a really important. I can just do that with the right. So the goal is I should be able to do trivia Lily Define

these give it the sample rate and it's going to report that to my own back in something my companies using internally and you need after that wasn't Implement of the data reporting. In the last Arruda have a instrument that can say I'm going to Mark a meter. So Phoenix instrumentation will say okay, every time of Phoenix employee controller is called you can Mark commuter to perform request for a second. So if I want to create a meteor I can just name it and say hey I'm going to take this thing ever request for a second. And then internally

when you call me to remark looking into aren't your Mentor in this case, it's good to use a net to calendar and make sure that's a very fast operation instead of the the whole life doing try to do it in server call and then introduced in a bottleneck. And we also want to do some other neat. Development Future's So since it looks in 1.5 got the I-X debugger that we saw this morning. We should just make use of it. Right if it's there we should make use of it. So the easiest thing to do is in flood. We should introduce the ability to set a breakpoint from the

browser. So imagine you get a beautiful-looking are page like this, which is awesome. This is just a plug debugger and then we can configure the Phoenix logo to show has a beautiful debugger. Now we can step through the whole stack Trace we can see the lines of code in The Echoes at the factories exist on so it's awesome. But when he's actually click next to that sacrus lie and say well set a breakpoint here and then when you refresh the page and your IX prompt that you were in IX that's mixed Phoenix server, you are how to break Winstead so we can do that. It would it would be a

no time for us to implement. Now I want to extend that idea to introduce a developer dashboard. And again, we want this to look super slick. So this is just a mock-up. I have been playing it with this and channels. But the idea is we want to have kind of like a phoenix Locker on steroids in the browser where you can say there is there's a library now that I forget the name of it that could you finish statistics if you have a server in your dad, but we want to consolidate that idea to like a / dashboard in point that way if you're developing a Json API using graphql, you

can see if consider having in the app. So let's say I have a Json API for my Uber app. We do a lot of Ember a dockyard and I get a crash. I don't have a server in her page to see that nice tax rates for us to say I like this 500 here. I have got my dashboard open set a breakpoint there or be able to expand to get a pretty pretty good and payload response. So these are things that Alexa has added recently and we can make you sick. To give you this nice developer experience instead of having to try to get this breakpoints meaning of yourself or figure out what's happening specially in an

application with a lot of traffic like our Workshop channels. We had a lot of Channel traffic going on. So anytime there was a crash by the time we try to look at in the wall August, it would be flooded in the scroll back. So it would be nice to have a phoenix Pacific a lager happening go back and debug at the entry point of a web request. Another future that we can Implement very soon after I told you say I would have a PR for it before the conference and it hasn't happened. But what we've been a dockyard is wheat, we do a lot of Ember in the

way we develop our single Uber apps is we have them isolated from our Phoenix Jason apis separate repo separate es Suites, but we do have ended in test. So one of the problems with finding tests are painfully slow and we've solved one of the reasons is we have to spawn headless browsers and headless browser is they have to call in to our. But then all our tests are synchronous because we can share a database transaction. ISO Elixir, and I actually saw this with the echo sandbox. If you're running a test with the

next unit but end in test there's no there was no different method to make use of it. So what we can do in JavaScript now dockyard as we can say, okay before each test this is I think the MoCA test Library, I don't really write jobs. But this is a job as group test because the way it is But we can do is we can say OK make Ajax request to sandbox check out of the Phoenix app. And then after each test case check that connection back in so it's using the same semantics Echo sandbox check-out and check-in but actually making a request to the physical server and in the physical

server. We just have a controller in her ass right now that is calling into this inbox. So the Phoenix Echo project will get the special sandbox it for is that will allow you to request is going to spawn a process that checks out a connection from the echo pool. And then it's going to send that back down in a header saying here is a reference back to the checkout connection. So that way each test case from The Headless browser is connected to the Phoenix and we have a plug-in are in point that's going to actually do it after sandbox allow on a request process from that spawn

process at the beginning of the test at the end of tests. We just Checking URL and then we check the connection back in. And it's really need it. Cuz one of things were experimenting with is we can actually do fix your base set up an AR test. So since it's just a few nice controller that we can control we can write code in we can say okay. I'm going to test Pro subscriptions in this app. So now I can have a concurrent test running into a transaction and I can feed fix your data for this test on a JavaScript side and it totally different project so we can say like set up a program like

set up me to call this Pro and then back in our controller, which is just a phoenix controller. We say Okay pattern match if we have a set up the color factory and insert for users So within that test it's running along with all the other in protest, but we have seeded data that we can test against so this is like improving our tests by an order of magnitude and Brian was supposed to have actual figures for me, but I will share those when we have them but this has made an enormous difference for us and this is something that took like almost no time to implement so How's your pets will

be faster. Once we introduced this to you are the Phoenix after a project and it should be very soon. And Jose will hold me to it. Another thing I want to call Lau is we had our first guy contributions Sprint that I didn't I did not participate in that's clear at this point. But other people did this is a really neat effort that the Phoenix guys are enormous effort that Lance person started and Incredibly enormous effort because after the contacts guide very appreciated just how much time it takes to write a solid documentation.

So will it was kind enough to email the 40 min try to get in, let us know if I can help with sponsorship. I'm getting some of the things for team members here sponsoring their trip here and leading up an effort into work on the Phoenix dies during the workshop days and trying to get the community involved to have people that want to get involved with a framer can come in and we can work on the guys together. This allows will one the themes for team to meet face-to-face focus on The guy that for a bit to it allows a community get

involved in the project. So this is great because the guy is even if your is your first day in the framework your inputs valuable because we can have someone go through our guides from start to finish as a total newcomer and get that feedback that we all miss once were kind of experts in in the ecosystem. It's our first guide Sprint happened. We had a ton of closed issues and be on board in half a dozen new contributors. So you can get a contributor badge. We merge the Phoenix guys into the main Phoenix, which is pretty awesome. I was worried that Lance would have unseated me as a top

Phoenix contributor with his commit count but it didn't happen if it had happened. I may have had to revert it. But anything is those commits are just as important documents are just part of the core of Phoenix Wright the guys if you don't have solid guys are not going to get people into the community, that's even cooler though that you can also come in and fix the community in a guy's on day one submit a guide for Quest for some issues you had and get a contributor badge count to the Phoenix primer itself. So I think we should encourage contributions and We also had

multiple sponsors help sponsor this event. So I think going forward this model of getting the Cortina Together and getting the community involved on through sponsorships is going to be a big help for the community and I want to thank all the sponsors you see here for sponsoring Jason and Gary from the Phoenix for team to come out to the conference and I'll lead up this guide effort and I really want to thank Willie for kind of getting it all together cuz I think this is a really solid and a successful pattern that I'd love to follow on a future conferences not so really got to be sponsors.

And for me personally, like the conference has been awesome as usual, but I've been kind of Blown Away by some of the most cases of Phoenix and elixir and I think it's like for me you like my own personal goal is like Phoenix is like the plumbing to enable other neat things in the community. I think Noah Webster and it being like you write every every layer of attraction in the in the Oreo stack, right? But real gold that is like Phoenix the goal isn't that we are going to have you like everything's gonna be a phoenix outfits that we have this base of neck technology. That looks are provided

us. We're able to implement a framework that is enabling people to go really really need things. So absent project for example with bin and Bruce they have implemented a graphql subscriptions on top of Phoenix pumps sandals wedge for one is amazing because two years ago. I said graphql looks awesome. There's a ton of heart. The song of like around efficiently session data and if we could do this thing or things channels, they did it all in it. It works and it's all about the heart problems for me. So thank you guys and have a book which is just Alice. So check that out.

But for me, the coolest thing is I like to I like to build things. Like that's why I've always enjoyed and that's like anything like building software is fine. I'm into woodworking like I just bring him like I raise the for my living room just like putting pieces of wood together. Like that was awesome. Like I just like to build things so building a framework that allows other people to build cool things. I guess it kind of Wells me to be lazy because now you can just do all the building but but the cool thing is it's an evil things that I didn't think was possible and Keith highlighted

this in his talk, especially any kind of blew me away thinking in that light. So I knew that Phoenix enabled cool things to happen graphql subscriptions, But if we take a higher level look at that has a self-described physician with software delusions of grandeur self-taught and he was able to use Phoenix presents to write software to improve patient care patient outcomes and reduce errors in medical practice so that way because it allows people to do cool browsers, but here's a doctor that was able to say

wow, like all these things that were possible for. I can just grab Phoenix presents off the shelf and a five is too literally improve the lives of patients in improve patient outcomes and asked you said we have like thousands of deaths per year for air is a happenin just standard medical practices and he wants to work on software that to go to solve those and elixir can help with that too would like not I'm not even being a grandiose like literally the tools that we working as a community directly affect people's lives and can save people's lives and where Newcomers that come in

and use these tools that allow him to do things. Otherwise more possible. So for me that's been the coolest part of the conference. So weather like you're a physician what software delusions of grandeur or if you are Tim who has a wife with type 1 diabetes. He's a software developer, but he's like, I'm a doctor what am I doing? His wife wanted him to write a program to control her insulin pump in a closed loop. And again, her goal was to have improved Quality of Life by having a automatic regulation of her diabetes. And Tim came in saying

like I don't know what I'm doing. I'm not a hardware programmer, but he was able to use a nurse project and off the shelf with able to do something that previously just wouldn't have been possible given his background and he was able to build this and his wife's using it piggybacking off an Arris project and other open source software and it's directly improving. Her quality of life. So for me is this conference today specifically is like really internalized the impact that open source software can have you know, that used to be wow. I allowed someone to build something cool in the web

browser. But now it's like this community is enabling not only those cool things to have in the web browser, but literally were allowing people to achieve things that previously were possible or did they didn't think were possible so I'm going to steal another quote from Keith. In that I think what we're doing is we're making the previously unachievable achievable. This is what he said this morning from his point of view as a doctor not a thing all just for the self-taught programmer you things weren't evil for achievable for him before he wasn't able to get into programming your use

this replicated data structure Phoenix presents. You can use the shelf that I can just come and see you on day one and have an embedded program running even though I have no background in in Hardware. I think like we're literally making the unachievable achievable and I want people to really think about that when they're getting involved in the community whether it's through answering my questions or cinnamon piaras to nerves are Phoenix or Elixir. I think that we really have something special here and we can do amazing things. So I talked and I thank you very much.

Cackle comments for the website

Buy this talk

Access to the talk “ElixirConf 2017 - Closing Keynote - Chris McCord”
Available
In cart
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free

Access to all the recordings of the event

Get access to all videos “ElixirConf 2017”
Available
In cart
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Ticket

Interested in topic “IT & Technology”?

You might be interested in videos from this event

November 9 - 17, 2020
Online
50
81
future of ux, behavioral science, design engineering, design systems, design thinking process, new product, partnership, product design, the global experience summit 2020, ux research

Similar talks

Keith Gautreaux
Engineering Director at Schweitzer Engineering Laboratories
Available
In cart
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Available
In cart
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Gary Rennie
Director at VoiceLayer
Available
In cart
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Available
In cart
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Boyd Multerer
Founder and CEO at Kry10 Industries
Available
In cart
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Available
In cart
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free

Buy this video

Video
Access to the talk “ElixirConf 2017 - Closing Keynote - Chris McCord”
Available
In cart
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free
Free

Conference Cast

With ConferenceCast.tv, you get access to our library of the world's best conference talks.

Conference Cast
950 conferences
37772 speakers
14419 hours of content