 I don't even know if I have a Randall's email. Oh, no. Uh-huh. Um, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, uh, Yeah, I'll talk to you in a minute and a half, all right? Thanks, man. Good to see you. Thank you. Yeah, yeah. Yeah, yeah. Yeah, yeah. All right, thank you guys so much for your patience as we figured out how this technology worked. We were able to get the projector working for pre-meeting slides. Then the microphones were fun because we were in there and there were microphones in there. But half of them didn't have batteries. And then once we made sure that they all had batteries, we couldn't figure out how to turn the volume up. Turns out the volume's out here. So anyway, I think we're good to go now. Everybody has a microphone? I have a microphone. I don't need a microphone. But I will have one in case one dies. So anyway, just want to thank you guys for coming out. Hopefully you got some pizza, got some beer. And we definitely want to thank our sponsors, which we'll just run through real quick and then we'll turn it over to Cam Tom and get going here. First sponsor is huge. You are in their space. So huge thank you to them for giving us this wonderful space for us to be in. Definitely, is there anybody from you here that wants to say hello or anything? No, they're that kind of awesome sponsor that's just like... Oh wait, there's one here. So thank you, thanks so much. Next sponsor is another sponsor of Atlanta JavaScript, which by the way, I'm Randall from Atlanta JavaScript. Cam and his group from Atlanta, Ember, are going to be kind of emceeing the talk. Andrew, you guys probably know what it's about. Check it out. They're great sponsors. They've sponsored Atlanta JavaScript for, gosh, probably almost two years now. Great people, great product. Next is Vodger, it's a company that I work for. And then we've got Atlanta Embers sponsors, Big Nerd Ranch, where I believe you guys typically do your e-nups. Synapse, another sponsor, right there. Simple Photo. Yeah, good times. And so one small plug is Connect.js, having last fall. Definitely check it out. It's going to happen again this fall. Great content. I think they're opening it up a little bit more to just a little bit beyond JavaScript. But definitely worth your time, which we all know is valuable. So without further ado, I'm going to turn it over to Cam for the awesomeness. And again, thank you guys so much for coming out. Hi, there we go. So yeah, also I want to thank you to the sponsors and Randall for helping us put together. And thank you everybody out there for coming out here. I'm Cam. I'm an Ember. That's Tom. That's a Huda. From regular Ember. They don't have a specific city. Just before we started, how many people here are just in town for RailsConf? Yeah. Okay, cool. Well, thank you so much for making the hike out here to hang out with our respective e-nups. It's very cool. Can I also ask a question? How many people here have used Ember before? That'll make our lives easier. Okay, so you guys are going to get to interrupt like that because I'm going to explain how this is going to go down. I'll have questions, okay? We're going to try to get through them as fast as possible and then sort of open it up to crowd questions if we have time. And then if there's even more time, Tom said we could read through some of the... Actually, the environment that Ember grew up in. So something that we've had deal with a lot as maintainers of the JavaScript library that is trying to be somewhat batteries included, like the whole point of Ember is that it gives you most of what you need to build a really awesome app. Along with that, it's going to pressure. It's like there's all of these legit problems that 80% of people have. That's usually our metric. It's like 80% of people have this problem. That there's been a ton of pressure to include fixes to those problems even before we think they're ready. So people will open a pull request and they will be like, here's this feature that solves this problem. And we'll be like, that's a legit problem, but that solution is not the best. But then it's GitHub, so you get like 1,000 people with one plus one. I also have this problem. And that creates an intense pressure to merge it. So one thing that I have been so, so gratified to see is that NPM coming like a pretty dominant player in JavaScript, including on the client side, and then Ember CLI having an add-on API for people to build their own extensions of the framework and make it like trivially easy to distribute. It's like so easy to add an Ember add-on. I remember back in December there were like 300 Ember add-ons in NPM and now there's like 900,000, 100,000. Like that is huge. So my opinion is that despite our Twitter personas, you and I are not the smartest people in the room. And we think that if this is a problem that you have or someone else in the audience has, like if you want to play around with ideas, please distribute it. So the bar for what gets included in the core framework, I would say, has gotten much, much higher because it's no longer a pain for you as a user to add and function on the framework, right? It's like a one-line NPM install command. And that means that we can let a lot more experimentation and innovation happen outside of the framework. And once something is more established, then we can consider rolling it back in the framework. There actually are a number of pretty good form add-ons which is maybe where you were getting to both form, things like easy form, but also like validation frameworks that people can use. And kind of the messed up thing about like quote-unquote enterprise forms is it's one of these canonical situations where everybody's like, yes, it obviously should work like this. It's like you put the three fields. And then obviously when I type, the red thing should appear next to it. That's of course what everyone wants. But then everyone has slightly different requirements. And those kinds of situations are really, really good for add-ons because you can have people that service one little community over here with specific set of requirements and different people servicing people over here. Honestly, the worst parts of Ember historically are these situations where we felt like because it was 2011 there was no package manager, we had to add all kinds of stuff and then we had to draw the line somewhere. With forms, it was pretty early. After Ember got selected for Ember.radio. Yeah, I definitely feel like the ecosystem, like you were saying with add-ons, has made it and also like the monetization of Ember coming up is making it so much easier and it's going to make it easier in the future for people to distribute like common things that can share their other apps, right? I guess when you talk about forms, it's easy to think about them in like the old in terms of like your form for from Rails or what have you. But like in Ember, you can make such richer sort of like real objects around your forms. So, okay. Did you guys like my question? Great, great. Question number two, it's from Jim. He did not give us his last name, but I know who he is. We're going to go a big picture here. What is your long-term goal for Ember? In other words, what is the ceiling you are trying to reach in terms of its impact on web development? They want to release some add-ons and all sorts of forms. I think that was an answer. Yeah, I'll answer what I think Tom may have other answers. So I started writing JavaScript actually originally because of forms, as it turns out. Originally, I was just like, I want to make a form. I was given a task of making this huge form and I was like, this sucks. I want to be able to type in a zip code and get the city and state for free and I want to be able to progressively reveal things as it matters. So I started writing JavaScript from the beginning to do that kind of stuff and then I had gotten to Rails because I went to a JavaScript seminar and they were like, just check out Rails but I was always frustrated from the beginning about how much the Rails world view didn't necessarily match up with like the rich JavaScript world view. At the time it was because of RJS but every generation of Rails has something that everyone thinks is going to save them from JavaScript but prevents people from writing really good apps in my view. So I guess my goal for Ember from the beginning has mostly just been about taking Rails specifically, convention over configuration shared values whether you're a beginner or advanced user and make something that serves a similar purpose in the JavaScript space and frankly if the JavaScript community was more into conventional solutions there would be less of a place for Ember but just like on the server side Rails is like still out there weirdly controversial about convention over configuration it's even worse in the JavaScript space so I think ultimately my goal will be built and I definitely want it to be successful but ultimately my goal for Ember is to space in JavaScript for people who believe in shared conventional solutions to get work done. I think so my background originally was more of like doing Coco which is actually why it was pretty cool to see Big Nerd Ranch sponsoring and I spoke so kind of a neat little circle of life so I think Simbo behind me any moment and I think that's kind of interesting because I think if you look at Ember you hit his background as Rails and my background is more Coco and I think you actually see that in Ember Ember is like a love child of Rails and Coco where it's the convention and the configuration like hey I don't really want to worry about having stupid arguments I just want to face something out the shelf that will help me be super productive right away and then Coco which is like it's about providing really rich experiences providing everything that you need to build client side applications and I think it's been really tragic that the tools historically for the web have been so far behind tool sets like Coco, NativeAge guys and for SDK so the role that I see for Ember is filling a role similar to similar to Coco on iOS I really want a framework platform where you can pull something off the shelf and build an app that is competitive with a native app now it's not going to have a day, not in 2015 but probably in five years I will like the web platform is moving a lot faster than people give it credit for and they're going to be taken by surprise if they're not building it for right now things like offline or things like native graphics service worker so I want to have a framework that's ready for that day where the browser is a competitor to a native SDK like Coco and Android so that's what I'm building for but of course it's just like us in the core team so we don't have the big corporate backing so that's why we really need to get tools like Ember CLI out there so the whole community can help us build that platform there's also another little area which is I've been doing open source for a long time like I guess 10 years now and I like having Ember be a place where you can take what people have figured out over the past 10 years so open source and make it work like the 6-week release cycle like Semberg I think there's a lot of stuff that people kind of know you should be doing but everybody doesn't know how either doesn't know how to build the tools for it or just doesn't have the discipline or like can't get everyone on the core team on the same page so a lot of my goal for Ember is to take like what we learned how to get out of the era and make it a thing that helps with project action cool that's some deep stuff you guys okay the next couple are about Ember data they're two discrete questions but I'm going to smash them together first part's from Chris McCuller he's got a lot of questions on here he's also learning those things and then the second part's from Jesse Rankin to part one are you using Ember data in skylight and other production apps and then Jesse's part is once Ember 2.0 lands will more resources be put on Ember data so the answer is yes we are using Ember data in fact I think if you log in to skylight if you open the Ember inspector you can see the data tab now it's not all of data is modeled in Ember data so the back end for skylight is two components we're not familiar with skylight it's a product that we're working on it's like a monitoring tool for Rails we do all of our like user account billing authentication all of that happens through the Rails app part integration all of the third party integrations like intercom that all goes through the Rails app which is really great because Rails is super productive for that and then for the number crunching we crunch like time series data so we have a Java back end which is Cassandra so persist it's like really enterprising I guess fast it's good I don't touch it it's enterprising it's fast it's enterprising it's fast and I don't touch it so that does not use Ember data specifically because it's time series data so all of that data is actually so that you can basically scrub quickly across basically explore data fast and have it update in real time as you manipulate and yeah for that it doesn't really make sense to do like a filter on that data it makes sense to do like they're like trees that were like merging we basically built some somewhat novel data structures in JavaScript that we merged in real time as we scrubbed in D3 it's pretty hard for it so that was like one question for side projects there was another like will we put more resources on Ember data yep it says once Ember 2.0 plans will more resources be put on Ember data I don't know if we'll put more resources on it but I think you and I will probably be more focused on it I mean I think the thing about Ember data is that we realized this a long time ago but it doesn't help anybody really is that Ember data because of the fact that it's trying to be an ORM and also asynchronous is actually solving a bunch of problems that are pretty unusual in the ORM space so like in Rails the ORM is like oh what are the columns of this database or like just any kind of metadata you want to know about the database you can just like stop the world and go get the information and so there's never any point where you're like oh well what should what should happen while I'm in the middle of fetching this data and the user tries to do something else like that doesn't even come up with another call but in Ember pretty much any time to make a request or has a chance of doing something else in between and specifically what relationships get involved relationship between records get involved it just ends up being a problem that people haven't solved effectively in other environments so it's not like oh just copy it after everybody's done ORM just copy it this async issue has basically been doubled us for a long time now what most other libraries have done and maybe we should have just done is basically say you know basically on you you can pretty much model your data however you want and you kind of know the order that people go through your app in so you can deal with it that in that order I think that kind of was frustrating about for doing that strategy Ember is that Ember was about multi-screens and URLs from the beginning so the idea that you can like click around and go from one screen to another screen to another screen and then like reload the page and you're on screen number three was always part of Ember which meant that a lot of the like strategies that happen to work like oh I kind of know the flow of my user they're going to like load the app so I can do some work and then they're going to click one of these three places and then they click one of those three places I can make sure that I get right data and if user reloads well there's no URLs so I'll just start over great like that kind of stuff totally works when you have no URLs but as soon as you start having URLs it actually you really do want to have some kind of thing under you that takes the ordering dependency out of it and that just makes the problem harder and unfortunately that hasn't meant that we have had to solve the problem with the community which is good but it also means that people who are used to not building out for the URLs and multiple screenings feel like it's complicated another thing I'll say is that we so Ember data has improved quite significantly over the last year and there actually are a ton of people working on it now and probably many of you have not seen this reach of those labors yet but we're shipping Ember data with 1.0 with the Ember 2.0 release so I'm sure in that frustration that people will be over people are working on documentation and I think that's honestly the biggest source spot for Ember data right now the primitives are actually extremely good now everything's there, I use it but not everyone knows how do you effectively so we're working we're in the middle of like working on a revamped platform I think in particular over time we've gone more and more towards where you could use Ember data basically as just like a identity map store and that API is pretty well exposed and then there's like hooks for like oh I want to use, if you type in like store.find close comma 1 then there's like a particular hook that gets called that is basically one-to-one mapping if you're like oh I really wish I could just make an AJAX request well now it's quite easy you use like a query API and you're going to get the exact query you put in here into the adapter it's just a little, like a tiny bit of decoupling but not anything crazy I would say we used to try to do a lot more and over time we've gotten more and more in the direction of let's make sure that we handle the identity map and the relationships between objects very well and kind of leave it up to you to do the transport although JSON8Guy is an effort to say if you want to follow a particular set of rules then we'll do the transport for you as well but I think we kind of mixed those things up early on so but in order for people to know like what that is there needs to be better documentation than your friend and there's people actually working on that yeah I know we've definitely seen like recently there was a bug from like last May that was fixed in redata which I don't know you guys can do it everyone with redata no I'm so happy that that's gone just shit um ok so we're now on to question 4 from Jeffrey also thinking of some of this name but I also know him tell us a story from the beginnings of the member any hilarious bugs make their way into an early version there's always the amber naming story that was in the bottle well there's one funny story which is that when we actually decided to do member I actually don't remember it because I was so drunk coming back from a giant game so the way that I met Yehuda is that I was working on Scraupor at Apple and Yehuda was working on Rails 3 and then when Rails 3 shipped you know that was 18 months so it was ready for like the next challenge and so Frank I said before the fact that Rails was pretty not friendly to that was always frustrating so I didn't feel like continuing to work more on the Rails that was going to be that fruitful for the whole story so Yehuda was like oh you know that's the next thing and he had the sense that ok well JavaScript seems like we're building the kind of UIs that are going to be coming it really seems like JavaScript is worth that because of course that's the language between our English browsers and so that's our own thing our handlebars so I don't think a lot of people know this but Yehuda wrote handlebars kind of in anticipation of something like Ember some kind of company system that was flexible enough that an observer system could plug into it wrote handlebars and then once that was done it was like ok well let me look around and see like what kind of observation like key value observing library exists in JavaScript that would be a cool back ember to plug into this and looked around and there was like knock out or and at the time Sprout Core's object model which is very similar to Ember's today or Ember's a lot faster now was like the best and a lot of people didn't see that because you had to write your UI using this like varying Cocoa style of like nested views it was like imaginability of Cocoa without like any interface builder at all and it's also by the way JavaScript so I don't know I read lots of collabs anyway so there's some like really cool stuff underlying Sprout Core and so Iuda came in and he was like ok we're going to take Sprout Core but instead of doing this very native style of development UI development where you pretend like you're not in a web browser you pretend like you're on a native system instead of that we are going to add this templating layer so we're going to add views but they're going to be backed by templates like it turns out people don't know how to write HTML CSS let's say that although now we're like going back in a circle where people are like yeah let's do the native thing but at the time it was like of course like web developers know HTML CSS no one was writing JavaScript this was like 2011 no one was writing JavaScript and because you had to learn Sprout Core or you had to learn Cappuccino and you know want to make that investment so anyway this so I was like sounds great I'm on board I was like I didn't program for like a year at that point and like when you do your office tells you to do something just do it you know I mean like I was going to argue with the dude so my guess sounds great let's go on board but it was like weirdly controversial in the Sprout Core community because the Sprout Core community had really hitched their wagon to this idea that we're not building web apps we're building native apps that happen to run in the browser and their world view and their identity was really attached to that so like every decision we made was a huge slog but we kept that in any way and it was like we just lost so much time because we were arguing with the core team with me so I don't really remember this but our office in San Francisco at the time was like two blocks from Giant Stadium AT&T Park and I had some old coworkers at town and we stumbled like we went down to the park for a ball game and I just got like totally hammered because like they give you those beers that are like so big right like how are you supposed to moderate and those beers are so big and they cost the $14 so anyway I don't really remember this but I come back to the office and I apparently gave you this like big speech of like how we got to do it we got to just like make a clean break let's do proper 2.0 it's not backwards compatible we finished him it in like backwards compatible way like let's just do a big rewrite and then I went home and then I woke up the next morning to our CEO just having sent me an email and he's like hey Tom you just caught me up on everything you said last night it's like it sounds like a great idea let's do it so that was like the moment like we had been discussing doing this proper 2.0 all along but that was what ultimately made us decide to do this proper 2.0 I guess there weren't it wasn't like Angular 2.0 because we didn't have a lot of users yeah like three users yeah so then this proper 2.0 I like that one that was good okay question number five halfway point also from Jim there are one or two other client-side JavaScript frameworks what is the best idea that Ember should borrow how about the other way around what should the other frameworks steal from Ember I guess we can exclude virtual DOM well I think that the reason that's tricky to answer that question is that you and I pay so much attention to the competition you go to a particular like I constantly walk in the office and he's like okay there's a new video from ngconf the new video we have to watch it I'm like dude we have work to do but he makes a note we sit down when we watch it and we analyze it like okay what are the good ideas here why does the scene just like hype and I think that ends up being a strength because I think that we like to champion good ideas like I said earlier we do not think that we have enough good ideas at all and so we steal very liberally right so components were directly inspired by Angular 3.0 once we got through like 17 pages of documentation explaining what Transplusion was we were like oh that's awesome it's like so cool you can define your custom elements right so we decided to copy it but maybe give it a little bit more friendly API similarly like Glimmer the new rendering engine in Ember is like directly inspired from us like really getting into the details really understanding specifically understanding why the React programming models will not just like supposedly it's fast because we're too long but like what makes it a pleasant experience to work with and since I think dependency injection is another example it's like we I think we were pretty negative on the idea of making quote unquote dependency injection like a main part of using Ember and I think we still are pretty negative against making it like thinking better today but I think looking at we looked at Angular and we said there's things that are good about Angular's whole experience I think it was around just like sane internals that are benefited by having some kind of in direction internally and this is actually something I really wish Rails had like if you look at Rails if you're like oh I want the foo controller it's going to be like or if you're like oh I look I'm inside of the you know foo view and I want the controller for this view it's going to be like go do a split over slashes get the last part out like upcase it concatenate it up onto the end of whatever name fits you're on I think I probably this steps like that's probably like a simplified version of what Rails actually does in that situation and I've written a lot of that code and what Ember does is Ember just has any direction that's like give me the foo controller that's like the thing you can say to Ember give me the foo controller and it was really important for us because we were switching from the global system the module system so internally it was important that we not rely on things a lot of improved internals and improved and improved testing and so yeah I think Tom's point is just there's not a anything that was good to steal is something that we slowly been stealing over time and I don't know I think right now we're looking at like the React CSS stuff with some trepidation I kind of feel like I kind of feel about the React CSS stuff like you guys can go do the R&D on that one that seems a little crazy but maybe it'll work out yeah I just think there's like this caricature of us like as personalities that we just think that like we're the smartest people ever and like if you have an idea it's different and you're just an idiot and I think that's clearly not true like we have stolen so many good ideas from other frameworks and we're not even like ashamed to tell you where it came from like I'm not ashamed that Angular and React have better ideas than us it's great it's main for a stronger system I think the only thing that Ember does differently in general is just Ember tries if there's a way to make there be one thing so Direct as an Angular for example one of the reasons that we weren't too hot originally was that Direct as an Angular is encapsulating 10 different things and you have all these little knobs you can turn like it's like restrict EACM it's like oh let me pick up the amp what does that mean I don't really know it's like there's all these like scoping things and you can like turn all these little knobs and I think in Ember it's a really powerful thing quote-unquote but you have to know so much to use it that in practice people can't really make a lot of good use of power so I think at Ember when we try to steal stuff this is kind of like if you remember when Apple they have copy and paste on the iPhone forever like why not copy and paste and it was just like we have to try to figure out how to make good copy and paste I kind of feel that way sometimes people are like why don't you just steal virtual DOM and it's like well we want to like investigate what's going on and you just don't ever type class equals you just know you have to type class name equals and you don't type for equals in your HTML you type html for equals and you can't just use an image tag you have to remember to self-close your image tag there's all these inconsistencies that can react on a model in html and for us it's like we really want to make sure that html is the thing you're using not like some XML thing that's similar to html in terms of what other people should steal router well the router but I think so Angular 2's router is using our recommendable which we might collaborate with the router and then React Router is React which is like a port of our router directly I feel like the biggest thing that people should steal is not a feature actually but it's just like a worldview which is like I feel like the JavaScript community in particular fetishizes flexibility it's like everything has to be maximally flexible because it is frustrating my friend he's a framework and it's like too magic and you can't actually figure out how it works however I think just having a set of defaults like it's your job as the main thing in the library to kind of curate it like I really like opinionated software because I'm going into a domain where you've written stuff where you probably know more than I do and I want to rely on all that wisdom that you've accumulated over the years that I don't have yet and I want to be able to work around it and let me do that where he actually had a good insight that I didn't realize before where he's talking about the Baptist basically and so he wrote this app which is basically Hacker News app hijacking second Chrome extension that hijacks Hacker News and it like uses the HTML as the data source and things like that and he was doing things like okay well I need to have URLs but the URLs that Hacker News wants which I need for the Chrome extension don't map onto the URLs that ever wants and I want you to be like well that's Ember's fault for being monolithic and totally unplexable and it's magic and whatever and Godfrey had a good insight I think as a member of the real sports team like oh I can see that there's like that Ember's sports history and cash location and the testing one that probably means there's some kind of abstraction for dealing with URLs not the layer that you can go in and shim into but so many people and this is actually similar to his talk today so many people look at it they're like world's a black box so it doesn't do exactly what I want it's basically game over this is actually what I tried to do in Rails and to a bigger degree did in Ember is like the thing on top is just a layer of defaults and if you want to go inside there's always there should be a pretty nice you did it with that little bit okay we go from question 5 to question 11 because I think I grew this and did some macros or something and did a super good job of it so okay so this question is from Mark Lummis how much of a long-term roadmap has shifted from one year ago based on the new focus on performance also how is the roadmap prioritized? so I think it's important to note that HTML bars which is probably the thing that has driven the roadmap the most in 2013 like March 2013 so Ember had like two years with the original spring-based templating engine and then two years working on an HTML-based one and because of the six-week release cycle we basically had to do that very smoothly so we already landed like most of the features that we thought we cared about from HTML bars and now there's like performance stuff on top so what I mean by that is the ability to use quotation curlies inside of attributes things like that are all landed so I would say we had a pretty good sense of the roadmap and things that changed the roadmap a lot were not a lot things that affected the roadmap were like Angular 2.0 being such a big shift from Angular 1.0 I think made us it gave us like a gut check that our stability guarantees and the way that we like to do things matter and so I think I guess the answer is not much has changed there was a second half of the question though that I how have you prioritized? yeah so we basically prioritized the RSC process which I know I feel like if I was telling myself this like three years ago or five years ago I'd be like that sounds terrible and the reason for that is that I feel like a lot of people connect things like the RSC process with like design by committee or very very slow and very process driven results and for me the key thing is just like if you're so it's good to have a core team that has a lot of companies on it and a lot of individuals real-estates that and real-estates that's good but there's always stuff that you get wrong when you're like when you're planning stuff so usually what we'll do is we'll sit down as a core team most of you here's like all us want and there's a lot of different people but then we'll go out and at that point if we just ship the thing that we thought we were going to ship we would just miss stuff that matters to a lot of people so we take the thing that we came up with and usually me and Tom will write a really big RSC you've probably seen some of these that's just like laying out what we discussed as a group and like almost assuredly there's several points that people make that we didn't think of ahead of time and that that affects a plan so for example the energy point the roadmap we've been working on that for like four months before before we announced it we had two face-to-face meetings that were dedicated before that we just got lucky that Angular 2.0 shipped and right when we were planning on shipping the other 2.0 announcement but if you look at that announcement that wasn't us saying here's the roadmap we have figured out the roadmap it was basically us saying here are some ideas that we have and can you community help us figure out the policy policy and tell us if there's anything totally off the rails that we came up with and if you look at the comments there's a lot of stuff that people sent those comments that made it into the longer plan but I think the biggest point about the roadmap in general is that because we do the six-week release cycle it's pretty easy for us to adjust works as we go as people we discover whether things we're doing are working or not so our whole project a lot of visionary steps I think the point is that we have made a very essential effort to try to get different kind of like representative personas on the 14 so for example Higuda and I and Peter work on a very small product we have some employees really great backpack cover if you will if you're running those conflicts then we have people who do consulting so they go around and they're constantly dropping in on like totally messed up you I mean people like Steph Penner where they have like big MRAPs they're responsible for grabbing like millions of dollars revenue right and all of those personalities we basically get in a room and like totally duke it out about like what is the most painful for people and I think having that perspective is very important and certainly never go on stage and announce the roadmap at a keynote without telling the core theme it's really subtle I've known myself a bit okay so are we going to get down to business with this one alright what is better for performance related to showing slash hiding elements this question is for great paper by the way sorry I'm great okay so what is better for performance related to showing slash hiding elements if else blocks in the template for class name bindings on the model slash controller slash controller and so before I believe he's asking like is it better to like hide stuff using CSS in class name bindings or just it helps I don't think I've ever been in a situation where this was the bottleneck I think the thing straight up to do those two things is basically memory versus performance right so if you mostly show and hide things which actually used to be the Angular approach for a long time before they got NGF and if you do that for basically and then you end up with like several times as much stuff in the DOM as you're actually showing any given time and that actually memory usage has an effect on performance through your GC right so you have a lot of stuff in your in your DOM it will affect the rank it also affects CSS recalculation it basically has an effect on performance right on the flip side of that when you use the fell spots with it fully inflips the falls we actually do work to tear it down finding things like that right so first my personal what I personally do is lean heavily on GC on cleaning things up so I would definitely use the fell spots and basically anything that doesn't keep things alive on the screen unless there's like a UX reason that you need it I know like yeah for example does more keeping things alive because they need to do some animation liquid fire would do that for you yeah liquid fire automatically but personally having spent a lot of time looking at the performance profile of different apps I find people underestimate the performance cost of memory and so Ember actually is pretty aggressive about trying to clean things up and less aggressive about trying to reuse I would hope that with her the performance difference between the two should be in perceptible from the user point of view in which case you should favor saving memory yeah do you guys have any tips for debugging performance in the DOM like you just lean on DevTools and Ember Inspector and stuff I think for views we have the performance profiling tool and there's basically two steps that you can use so there's like the view tree which just shows you all the views the rightmost column in the view tree is just like the amount of time it took the last time that view is rendered so and you can turn on the component view and it will show you a lot more information things or whatever you can then go into the performance tab in the inspector and make that view show up like click away with that and then it will give you a whole tree of all the things that took time in that particular view that particular time and you can look at it and see what's going on I think we're using like the that tab uses like the Chrome timing APIs that let you do it with low impact so it's especially because rendering the whole view is like a pretty chunky thing usually that is pretty good information and A is the jobs performance so when we were working with our we were using the flame chart a lot just to like get a somewhat visceral sense of where the render engine was doing its thing that's what I did to you because I saw I'm doing with the pros too I'm also professional not correct but people literally do but what are the current stories around offline first development in a mobile environment in Ember that's also for more performance so we don't have anything built into the framework yet so so nothing in Ember is going to be like make your app offline without you doing anything yet but I think that there's actually two big things like I said when we were starting on Ember we were thinking we were having like kind of a long-term vision before we wanted the framework to be the two big things that we wanted to be able to support were offline and what was the other thing you were talking about you wanted something like really rich interactions right so that was like handlebars on the client side and offline was the other big one oh server-side render that was the other thing so from the beginning since we built Ember which is like that in 2011 in four years we have been thinking always in every architectural decision that we've made does this help or hinder server-side rendering something like fastboot does it help or hinder people who want to build offline apps so even though we built him we've always been making sure that we don't do anything to preclude that so today nothing although it's definitely possible so for example Ember data you can get an adapter for Ember data it lets you write the index to be I personally right now I'm working on an Ember project it's like a side project it's like post photos I'm probably going to raise like 10 million dollars in PC any second now but so the use case is if I'm on vacation in let's say hypothetically brewed there's no internet in my hotel room hypothetically brewed in like a week I'm focused I really want to be able to edit these photos and like build these like photo journals offline while I'm still fresh in my memory even though I may be at a location with not an internet connection and then when I get back to something that does I want to be able to publish something I'm building on Ember and so far it's been really great and I'm hoping is that other people in the community start building these offline apps we can start as we always do in Ember trying to get a sense for what the community solution is what are the good ideas what are the bad ideas and rolling those back into framework especially as API is like service worker get rolled into the browser I think we're going to be able to do some really like nice stuff to give you a really great offline experience without you having to do so much work one of the cool stories I remember hearing about Ember was something like this person was like oh I'm building offline apps in Ember what are you building an offline app and he was like well the teams using my apps go into nuclear disaster sites like Chernobyl and once that computer goes in and becomes irradiated it's never coming back out again so we're building these Ember apps that run totally offline on this computer like once it goes into the nuclear reactor it can never come back online again one thing I always think about where people ask about offline yeah is that I think a lot of people like DHH had this blog post that Tom likes to quote which is like you're not on a plane you're not in a fucking plane so the title of your blog post is and the premise of that is like offline doesn't matter because you're not you're rarely in a situation without connectivity and I think Tom likes to complain Tom likes to feel the fact that sometimes you are offline but I actually kind of think of offline as a a different thing which is you may not be offline offline you may not be like I am not on the internet right now because I'm on an airplane but it's pretty common to be using an internet connection that's like offline for five seconds or ten seconds or like you're driving and you're going into a tunnel and there's a big and this is something that Ember does pretty good job at now there's a pretty big difference in a native app where like if you were to download the Twitter native app and use it and you hit the back button you happen to have loaded some stuff from Twitter a minute ago and you hit the back button in general what will happen is you'll get what was there before right so as long as you're going to get back on eventually when you hit the back button you get what was there before you have a blog that's built using the web you've got like a WordPress app and you go back to the list of blog posts you get the list of blog posts there before but when you build something using like the TurboLynx philosophy or worse like just a pure service environment philosophy and you hit the back button maybe it works like occasionally for some reason like some cash for some reason but most of the time you just lose the information that was there before and certainly there's like very little or no interactivity that you could do and a thing that's nice about Ember even without doing anything special for offline is that Ember tends to do a pretty good job at dealing with momentary disconnectivity because most of the time the thing that the user is doing is not a writing operation right so it's a app that has like that's like some kind of content site and it's not like a part of the app and you didn't build it to be offline but when the user hits the back button it's a URL driven app they get what was there before and I think until you start like I started thinking about this a few years ago when I saw that blog post actually the first time and until you start thinking about it it's like you realize that your habits are totally different like on the web you treat the page that you're on is like very precious the back button it's like what happens if I lose this it's like gone I'm totally fucked I need to especially go to flaking connection but in apps I think people are much more willing to like navigate because they are pretty confident that the information is going to be there unless it's like an app that's bad at this so I I kind of think of offline more in this kind of way I think flaking connections matter more than offline I think people put up with it on the web because that's how every website right now I think like there's going to be a shift and any app that's like if you go offline in the back button you just have white page in the forward button you don't get back what you're seeing another white page like that app is going to bust into your customers and they're going to use your competitor that has this offline offline and I think this is why people feel like the web feels busted compared to native is that I mean this is one reason like when you use native apps like Superport because on mobile you're often disconnected for one reason or another but it's actually but as connectivity becomes more and more ubiquitous it's increasingly the case it's kind of like a paradox right DHH is right like he tweeted like oh like now on Unite and I have Wi-Fi so now it's totally not the case that you're ever on a plane and have no Wi-Fi but actually as Wi-Fi gets to more and more of these places the connectivity in these places is the worse it works right so you're more and more likely that you're going to need to be resilient to flaky and questionable kind of connectivity and let me just say something about TurboLinks I think I think TurboLinks is like a totally plausible transitional strategy so if you have like an existing Rails app it's like built out scoring it I think TurboLinks is a really awesome way to like eke out a little bit more performance I think that's really great the thing that I don't understand is what seems to me is pitching TurboLinks as a way to build an app today because like it seems so like lazingly obvious to me that in four or five years this kind of thing is going to be just like so common and it's going to be so taken for granted that if your app doesn't have it it's going to feel totally busted and if you're building a product that you're not going to throw away the next three to four years why on earth would you start with something that can't even support that it's not even like it will be hard like architecture doesn't support you it's going to be totally different if you're building a brand new product today and you want to last more than a few years and you want these capabilities even if not now you want something that architecture won't preclude them down the road then why on earth would you start with PJAX? I mean the thing that's also sorry for busting in and not letting us any questions but the thing that the thing that bugs me I think is that every time I see an explanation of like the next version of TurboLinks I'm always I always compare it to like what my job is like what is my day-to-day job doing a thing like Skylight and I'm always like oh my god the implementation complexity of this approach especially when you consider operational requirements like now it's like Redis is involved it's like the complexity of doing that compared to like the idea of TurboLinks is like you have this environment that works great for you you want to just like get something out up and running quickly and like how are you going to do that how are you going to build like this JavaScript thing is so crazy how are you going to even get started without this like Ruby environment that you're so used to and for me it's like having you know clients that are rendering some JSON or servers just doing JSON that's like a pretty simple approach and yes I agree that compared to like the blogging 50 minutes demo from 2004 it's more complicated than that demo but when you combine all the various things you have to do like the TurboLinks please definitely that TurboLinks yeah that TurboLinks oh there's like a lot of things now that you have to know there's a lot of infrastructure there's a lot of caching approaches you have to understand and when you add it up it's just way more complicated than doing the clients under DC system I think it's it's like a problem where you can keep adding a little bit of complexity if you were a Rails user all along every little incremental thing doesn't seem so bad but then when you step back and look at it it's like honestly frankly I use Rails every day for my job and I would not know how to begin building an app with the TurboLinks architecture it's extremely complicated like you have to know Russian testing and caching and all this stuff TurboLinks yeah that's totally what that question is about super comfortable okay cool so this one's I think it's a rando headlaster and this for sure it's from John Burser I guess he's a rando actually sorry John if you're like oh there's a note I'm calling him a rando okay so many of us work at companies that hire college grads usually they study procedural C in a classical object in language such as Java however JS has certainly works this quote's not mine such as first class functions closures lambdas et cetera that make it in Douglas Crockford's words Lisp and C's clothing which is like the nice thing he's ever said about JavaScript okay how would you train a college grad to write JS as JS and not as an imitation of some Java-like classical OOB how would you train them to understand and properly implement the world's most misunderstood programming language that's actually the nicest thing Crockford fanboy is yeah goodness okay so I guess this is kind of interesting though I don't know how would you guys teach people to use JavaScript like JavaScript you know using you're on TC39 why don't you take it over so there's one thing that I'll not answer the question but I'll try I'll try to find my way back to the question so I started I started programming in like 05, 04 something like that my first programming languages were Java and Ruby JavaScript and Ruby and both of those languages had first class anonymous functions so my first programming languages were like I have a thing I want to loop over map for each grid and it was totally mathful to me and then a few years later I started to notice that there was a bunch there was like a lot of people in the JavaScript community that were like very hot okay what are these people saying what is the point of this what they're saying and there's definitely different things that people mean but what I started to notice was that the biggest gap between the people who were like functional programming people and the people who were like very not hot on the things that the programming people were talking about was basically first class functions right so if you it's true so Ruby if you write a lot of Ruby the first thing you learn is like everything's an object and that's like the most important thing about Ruby that somebody teaches you and they teach you Ruby and when you're in JavaScript it's like this prototypical inheritance thing and you there's like all this crazy stuff going on but at the end of the day if you learn to program with and that's even though even in languages that you might expect to have more in common with like the functional style like actually Python you might think is more functional than Ruby because Python is like very callable oriented everything's callable there's functions everywhere Ruby is like object oriented Ruby is like super OO you think it like comes from the Java tradition but the fact is that in Ruby you write so much code blocks which are very handy that you kind of if you're a Ruby programmer that's like all you know you actually have your world is very similar to functional style and so I guess coming back around to the personal question I guess my thinking is that it's the most important thing to teach people who are coming from an environment without first class I hate saying land but like makes it sound it's basically some kind of like block structure to understand like what it is doing like lets you write in particular the fact that it lets you write custom control structures so you're not like stuck with the whatever control structure the language gave you so like those canonical examples like you know Ruby is like file open like v-text.synchronize which is a thing that in Java has to be like built with the language or like in C-sharp or Python like they don't know about file that open and I'm sort of getting the idea that a block or even a function JavaScript is a pretty big thing the fact that you can basically write a lot of abstractions that make you see these things honestly I think that's the big thing and anytime anybody starts I have a lot of friends who are like academics and I have like a really close friend who got his PhD in macro like macrology and I guess we always talk about the fact that functional programming basically functional programming one every programming language that's created recently has lambdas in it and that's the thing that actually it's a well hold on the question is about Java programmers people who learn Java in college but Java 8 has lambdas yes it's true so if someone learned Java 8 and they were taught lambdas it's actually pretty helpful maybe they should be asking how do we teach Java programmers to program like do people just feel like you write JavaScript as JavaScript like especially an number for me I feel like I'm trying to write it as much like classical as possible obviously with functions sprinkled around but like I don't know I'm writing so this at least for me there's definitely so one thing that I notice is big difference in Ruby and JavaScript for me and maybe this is not this is definitely something that happened after I started writing a lot more coding modules for class but then I'm like oh I need help in Ruby you're kind of forced to make a method out of that even if it's not really appropriate for a method but in JavaScript you can just like write some functions from the bottom of your file and call them sometimes for like private functions I'll even make functions that just take the object this is first parameter and now I go private functions and that's that's definitely that's quintessentially something that you can't do in Ruby and if you try to do it in Ruby it would feel really weird but in JavaScript it's really natural and similarly like in JavaScript if you look at testing frameworks people really use lexical scope with testing frameworks in JavaScript to like you'll just have a variable and then every set of blocks will like assign to that variable and you can totally like with R-SPEC you can totally do that in Ruby with testing you can but in R-SPEC you totally can't but it's totally not gonna be bad in Ruby and there's definitely a sense by which using lexical scope as a lexical scope and functions and that lexical scope and variables in lexical scope as like a way of programming is I would say for people who are like intermediate at least in JavaScript is pretty normal but in Ruby it's here I can't yeah since you've followed the audience I'll raise a point we were talking about this a few minutes ago the way I wrote JavaScript before I learned Ember Backbone is very different than the way I write it when I'm writing for Backbone or Ember so it's almost like I'm writing Ember script which is has subsumed JavaScript and it's not pure JavaScript the same is true for Backbone and I'm sure the same is true for other frameworks so as these frameworks grow they kind of morph the language turn it to themselves so JavaScript for Ember won't work in Angular and vice versa do you find that to be true and is that intentional? I feel very similar to you as far as that goes though like it kind of dawned on me like a while ago I was like oh crap I'm basically a JavaScript programmer now that's weird self-identified as a Rails guy for like Ember or whatever but then there's like actually I'm an Ember next question if you want to go and hear that it's about using ESX classes and ES5 getters and setters and yeah that perfectly segues so yeah so what you just said is true but it's actually a natural consequence of using a language that's a very especially ES3 is very much like here's like six primitives go do whatever you want with it and so if you use like Ruby or even or even Python or Java right there's like a lot that you're given to do stuff with it's like here's a class here's a static method here's methods here's private here's how you do it here's how you share code with other people if you want modules there's a Java as a packet system Ruby has requires these things are built into the language and JavaScript is like you have lexical scope and functions have a nice bit so the natural consequence and of course nobody wants to write oh and you have like a new keyword which like packages up like three operations do something right so people I think what ends up happening is that people don't want to write the primitive code because that sucks so people end up writing extractions but of course if you're only given people really like kernel languages the natural consequence of kernel languages is that you have a lot of different dialects of the kernel languages because people don't like code I want classes and so Ember really wants mixes but maybe back on this care about mixes or maybe Ember's so what ends up happening is that everything is this is like sort of the paradox of compositionality the primitives are compositional but you can't actually do anything with the primitives you have to build abstractions once you build an abstraction the abstractions are of course not really compositional so the story of ES6 is like or even ES5 started to try to deal with this with Derrick's etc and I would say like the meta object protocol the object has to find property stuff but ES6 is very much like okay we need to add some tools for people to like talk about the same common things in the same way so an ES6 class which is a question about is like okay a lot of people are doing things where they're like creating a function it's like literally a constructor's a function and you add a proper protocol prototype and then magically when you say do it does the right thing why don't we just instead of making people do that and making sure they you know set the right constructor and all this stuff why don't we just give them a sentence for that doesn't happen to look a lot like like Java sure it has a lot of the same syntax with Java not surprisingly since all the syntax is reserved from like ES1 days which is whatever Java happens to be using ES1 right so the syntax might consequence of how reserved words work in programming languages ends up looking very similar but and similar with models right so we have we have these things that are now there's a way to say like I am doing this pattern that's very common and so yes now with ES6 I think things like Ember will end up writing classes that are more compatible with other stuff but I don't I think people look at look at things like Ember and they say this is proof that Ember is going off the rails and like their own object model but if you even background has their own object model right I feel like you could definitely say like Angular really made a virtue out of like we don't have objects we just have like functions and you call a function and we call this an object literal it's like well I guess you could say that that's just a function of your own object literal but that's just like another way of having a class that's exactly right and so I think it's good I think it's good that ES6 gives us a way of talking about these common things in a common way and I do think that the consequence of that will be that more and more classes are written in more comparable ways you've been working with folks on Angular team for the decoder API yeah so yeah so it turns out that classes just like the simple class impact that's ES6 it's not really enough for various reasons but it ends up being true in all frameworks yeah we've been working on decorators which is kind of like it's kind of like a mix between like the Python decorator API and like trying to get the power of Ruby metaprogramming into it although people in JavaScript don't like me to say that a lot basically like more metaprogramming so like classes in ES6 are very declarative you can like make a class and then you can put some methods in it and the methods are just like syntax and decorators let you like have some functions around those those methods again and you can do it with object rules and your idea was into it and reacting to it we're all working on it yeah you can try out decorators in for today right like Robert Jackson released an app on for the computed maybe we'll talk about Babel a little bit I've been talking for a while what about Babel the fact of Babel is like it allows us to take on it so one thing that I think that many people don't take into account there was a very dark period of the web where like the standards bodies were just like really often academia made the semantic web is a good idea and then Microsoft like really dominated the browser space and that was like a really dark period where progress just stagnated completely and the most web developers who lived through that period because it was so traumatic really internalized it and the reason is that like the reason the bodies were so slow is one there like the browser implementers were just like often like IE was like okay we're done with the web but they like stamped out all of the competition and then it seemed bad and then the standards was like oh okay Historically what's happened is the standards bodies will go off and work on something they'll spend years building this like very high level feature they'll spend years building this and then they'll ship with all the developers and all the developers will be like oh this is broken in ways X, Y, and Z and at that point it's like well we just sunk like five years in the spec and you didn't comment why didn't you comment on the spec and like well I was busy like doing my job right now for the things I actually had I didn't have time to like go read this like 80 page document right and so what happened is that the feedback between standards related to the spec type so I think what's really cool about Babel if you're not familiar Babel is a project that takes future JavaScript syntax and compiles it down and is something that will work in every browser today what's really amazing about this is that finally us as practitioners get a say in the standards process but not like at the tail end where it's like please tell us like what we think about this and we can make a program language when he went to the last TC39 meeting he went and he said okay here is my proposal for decorators here's where I think it's cool here's what the syntax looks like oh and by the way if you want to try this out in project day here's a version of Babel that supports it so you can actually write little toy programs you can see how it feels you can try and run apps and immediately after that Robert Jackson wrote a library that allowed you to write stuff that you have to do using primitives today in Ember all of your billion Ember apps can try out today and you can run into pieces like right away we started using it people started finding bugs like hey I tried to do this it didn't work as I tried to write at least like two or three different questions that Sebastian asked the different people asked about like what some edge case semantics that I just didn't think about but as soon as people started using it it became clear so now us as practitioners get a voice in that we get a voice in that feedback cycle that Babel has committed to basically building all of these proposals to the language in and then things that seem like they're definitely going to make it turn on by default but other things that are not quite there yet you can turn on and play with and provide feedback in a much more accessible way that doesn't involve spending like to be done from this way I think for me like the biggest anecdote about this is I went back and watched Douglas Rockford gave a talk in like 2011 about ES5 so ES4 people don't know if it's a semantic web like XHTML that whole thing ES4 basically failed thankfully and ES5 was this really really unambitious like spot fixes plus this plus strict mode plus getters and setters plus the meta object protocol which were pretty big things actually but it was a relatively small set of changes in language and when Douglas Rockford was talking I wasn't on the committee at that point and he was talking about how they felt like syntax you have to be very careful because how could you get like new syntax into old browsers it's like possible like how like IE6 obviously doesn't support it so you're basically done but libraries that's like way better because libraries can be polyphil of course the libraries that you're talking about are like object that define property which are totally possible and it turns out that in 2015 which is like a year three and a half years later it turns out that we have great tools for getting syntax into old browsers and it just goes to show like the whole zeitgeist the whole sense of like what it is that it means to get a new feature I remember I mean it's even the case today that most people feel like oh wow cool story you just shipped a new feature like what kind of use that that's still like a thing people feel but I think increasingly people realize that there's like strategy that we can use as a community to make it work but in 2011 it was like completely unheard of like nobody even thought of it as a possible strategy that somebody might use which just goes to show how long how much we have not in that time and so the other thing that changed if you're not aware of this is the fact that IE 8 and IE 9 are basically going out of maintenance mode and I think IE 10 is everything sort of Ember I love it IE 11 well I think all versions of IE have gotten better and better at getting people off of it so the notion is like probably many of you use Chrome as your development browser I would bet that if I asked most of you what version of Chrome you're running you'd be like I don't want to do it great okay I don't want to know if I'm running Chrome before you want but I would bet I do open it I know I have the latest version and if I want to know if a feature works in that browser I just open the console see if it works so it works okay I guess I can use it right so this notion of being stuck because of these old browsers that haven't updated yet that's slowly going away like the modern IE's auto update themselves what Chrome can use yeah IE 8 is actually like the most the biggest browser other than like in IE's IE 11 and then after that it's IE 8 basically because IE 8 is the last one that's the browser it's the last one that didn't have any pushing updating strategy stuff but yeah increasingly like old versions of IE are going away and be able to use this and now when you started using Ember CLI we include Babel with it so you can start using these features right away and someday in the future it's a year from now two years two years doesn't really matter you get all your managers today and some day yeah it's really cool how like Ember and Babel in particular are kind of giving us as end users like agency and like the future of what's going to go on the web so that's really cool and to the second part of the gentleman who asked this question is André whose name I just pronounced flawlessly he asked about ES5 getters and centers which I think he can just use today right we need to draw IE so he was specifically about computer property so we just don't know because IE it's not had to find property now we can definitely start using it we're going to probably do something with that early in the Ember 2.x series cool okay so somebody back there with an eye on the clock we have like 10 minutes we can keep going okay so looking out for questions if you want yeah so that's all of our prepaid questions does anybody out there have any questions so you're going to go first would you like to have a microphone yeah so you guys are so far away you definitely can't hear without this but for those of you in the back my question is what have you guys been stealing from like Google's polymer web components and do you plan to ever integrate that fully so people can use Google power web components as they're just the HTML so let me let me try to unpack it for you this is honestly a source of free frustration for me largely because of the way other frameworks have decided so there's basically polymer which is like web component framework then there's angular which is like we have spent all this time to make angular super compatible with polymer it's awesome it's great and then there's react which is like web components are terrible we don't need them we have a way better component model I like the voices for each framework but the whole point of web components if they're done well if the spec is good is that it lets you as a regular web developer make new HTML tags now there's very little in amber or angular or react there's a little bit in react and a little less in amber that cares about what HTML tag you're actually using so if you in amber or react to a div it's not like we go through some complicated algorithm that's like ah you're inserting a div what does curlies mean ah we must investigate it's clearly a div it's like no it's an HTML tag and when you use curlies you use set attribute that's what it means set attributes on an HTML tag that is what it is you want to set a property there's a way to set properties of HTML tags and so web components there's some small niggles here and there but for the most part there's a lot of HTML tags so if you want to use Polymer if you want to use the Google Maps tag in amber and actually someone did this I'm talking about I'm talking about amber if you want to use the Google Maps tag in amber assuming that web components are working and you put the Google Maps tag on a template it's not going to be treated as any different than divs because that's the point so I guess that means that assumes that things are spec'd correctly and there have been some back and forth on that another thing is that it implies that people do something plausible with attributes and properties with their components so you can easily imagine someone expecting you to use attributes or expecting you to set properties on an HTML element when you really should use attributes or something like that so there's like these little details like this but the idea that you that there's something about web components that's not inherently compatible like the whole point of them is that they're inherently compatible with the programming model that we're already using so putting them in a template should work I think there's questions about like polyfills like how much might the polyfills stomp on other polyfills did I just did you guys have to like do it out amongst yourselves when we get to go next I couldn't really see this side of there okay come in so what do you think about the react-native kind of landscape they're taking the I don't know I feel like they've Facebook is on the route of saying that PhoneGap or Cordova that area can just be jumped over by thinking about putting JavaScript developers and just saying use just specific language do you have an opinion while it's coming from Cogo so I for one plan using Rails-native seems like the new thing to do is watch the day and I'm sure it'll be on GitHub any day now by the way he did actually announce a thing that is like Rails-native yeah so I I kind of I think I agree with the react-in there I would say that most people like the way that I think that Ember shines is you have a JSON API for your server you have a web client which is an Ember app consuming your JSON you have an iOS client consuming your JSON even Android clients consuming your JSON et cetera and actually I think it's interesting I've noticed that a lot of so-called mobile-first with the JSON like of course we were building JSON on the back end not on the HTML front but back end at that point Ember's a really natural choice to them because like oh we have this like already awesome thing so I think react-native is pretty cool like the whole idea is they have decoupled the component infrastructure from any ties to the DOM so it's pretty easy to shim in this abstraction in this layer of the direction so instead of creating DOM elements it's creating native views and actually that was kind of an inspiration in some sense for us when we were working on Bloomer because in and actually the fast boot right so because we have the fast boot requirement which basically just means that we have to have the ability to run an Ember app in Node that means that by definition we can't rely on things that exist in the DOM so we've created abstraction internally in Ember that we call the DOM Helper the DOM Helper is just again just like react-native in the direction of any DOM operation so we say like create an element now to be fair like you and I do not have the funding of Facebook we are not playing on personal IDOing anytime soon so I think in that sense the constraints are very liberating we are focused purely on the web right now we have no intention of going down that route however I think all the primitives in the architecture are in place if someone wanted to try to do like an Ember native as a community project basically everything is there and I think we would certainly assist I hope is that in like a few years web applications like capabilities on the web will be so good that you'll have no reason to develop a native app but good luck hopefully that will be true but we should definitely head to our pets I guess so I agree with all that we definitely spent a lot I would be lying if I said we never discussed on the Ember working like whether the architecture can support react-native type stuff we definitely talk about it pretty often actually but I also feel like so sometimes people think like oh well if you're building a thing like Ember or React or Angular if you have like 10 times as many full-time people then you can go 10 times as fast although probably people know that this is a fallacy that was first uncovered in the 60s so but there's this idea that you can go faster if you have more people but there's actually a bottleneck when you try to do anything that involves communities which is you need to get feedback from the community so I actually there's like this paradox of so Ember has like 10 people or 12 people something like that 14 you know on the core team but basically no full-time people and then we're competing with like Angular which has like a dozen full-time people or React which has a lot of full-time people so it's like how is it that Ember is at all plausibly keeping up the base like actually a better aspect like how is that how does that happen and my thinking on that is that you can't speed up the community cycle right so you can't speed up getting feedback from the community and feeding that back into what you're doing and so I I kind of don't mind that Ember wants to focus on the web and get feedback from the community and just keep turning the wheel for a while because it takes there's just a fixed amount of time that takes to get bigger things out and I feel like spending a lot of time on a native project right now is a way of fragmenting people's attention and makes it harder to actually spin the wheel on the main thing so again I think I think Cloud's right if somebody wanted to do it we would definitely not like turn it down but I think we want to focus on I mean I'm personally happy to let React do the R&D on that I think it's a really interesting idea I don't know if it's going to turn out I think there's like RubyMotion there's a there's a similar effort to to build native apps using a somewhat similar principle and the thing I heard for people I first used it I heard it was like really hard because everything that has to do with iOS development is like assuming Coco and like Xcode I mean the thing that's tricky with React in general is just there's like a combination of really awesome ideas that you like like you're like awesome that's so good and just hype and so whenever like if I read an article someone writes about React native disambiguating the like legitimately good stuff which is pretty much it seems like an awkward the legitimately good stuff on React from like I have used it and I am never going back my world has changed and like people are like knocking on doors can I tell you about the good news of React Native like it's big I it's difficult I think this is why it sometimes takes this time also it's like we want to wait for the weed and the chaff to separate and definitely React Native is still in the ultra top peak of the hype cycle mode and that's also a time where people are very unlikely to tell you the bad things right so you look at Angular for example Angular 18 months ago all you get anybody to tell you is like well how much Angular was amazing so good everything was great so simple and then we were like wait I don't understand there's like all these problems it seems very complicated but everyone's like no no it's so great it's so great and then you wait a certain amount of time and so I think we're still React is starting to get into trade off mode React Native is still definitely at the peak of the hype cycle where getting like I want to sit down with a person who's React Native for a year and be like hey tell me about it what worked well what didn't work well and we're just not at that point in their hype cycle yet how that comes in hype cycle is an art term by the way it's like a gardener research term so it's not just casting the spirits it's like a legit thing you can pull it there's a chart in there and everyone is just just with the same as we okay can we do one more you guys okay cool alright so in your opinion why don't you think Emmer has had as much widespread adoption as say some other JavaScript frameworks if you're to start over today is there anything that you change potentially make that different today I can start by probably better thoughts on this than me so I've thought about this a lot so one thing that I think is just worth noting in general is that Emmer has a lot of adoption among big apps so like if you look there's a lot of like Heroku dashboards and bustles companies that like their entire company on Emmer and so I usually people compare Emmer to like Angular by looking at Google trends and yes there are a lot more people by far like I'm not and I'm not saying that that means a lot of people aren't using it a lot of people are using it like a lot of people use jQuery but Emmer was always targeting people who are betting their business on Emmer or building real apps that doesn't have to mean like a hundred people like three Emmer developers basically but people who are going to like build an app on it and that naturally is a smaller group but we bet on the idea that that small group would be passionate and would build the ecosystem and I think that has worked out well that said I think there's a couple of things that have definitely had a big impact one of them is just Emmer is the only major framework left standing that's not out of a big company so so like Angular, Polymer, and Google like Polymer should really have no credibility at all sorry I'm on video tape Polymer has like there's no reason why you should look at it like yes I definitely want to use it it doesn't have a lot of users it doesn't have a lot of ecosystem but the fact is out of Google means that people look at it and say ah this seems like a thing Angular actually was never really like part of Google but they self-described like road framework which I think worked well for them actually but they were able to be like Angular by Google and React was able to be like React by Facebook and even like Knockout was like Knockout by a guy at Microsoft and we've always been like Ember by Dolan by like your friendly neighborhood open source people and it takes years I think in the same way that like our product right now we've been around for three and a half years and it took like a couple of years before anybody was willing to like even consider switching from New Relic to Skylight because they're like how do we know they'll exist in a year and it took a few years for Ember to like get past the point where people were like is this like there's 17 million open source JavaScript frameworks like why is Ember different from like the other seven million I heard of this week and so now so it took time and I think we're starting we're gaining momentum but it's really hard to compete with because the irony of course is that you think that if you're from Google you're gonna be like super compatible and like stable whatever and like we have 16,000 apps inside of our trunk and yet somehow Ember is the framework that is like the most stable and most careful and most cautious about that ability but I think Tom Brog has other thoughts but those are mine well I mean I think for a long time it really bothered me but to your point like I think in my total market share yeah we're definitely still quite small but in terms of like products that I love using personally I think we dominate and for a long time I was really frustrated but Chris Epstein a compass sass thing gave a talk with was it EmberConf where he talked a little bit about this and about how it's actually really rad being in second place because I wouldn't trade the Ember community for anything like I think by far we have such a cool community people who are just like getting out there trying new stuff experimenting they're so thoughtful and so smart and also just like so on board with the idea that we're gonna do all of these big moves as a community we're gonna shift you know rendering into this community we're gonna move to Ember CLI as a community so I think there were definitely opportunities where if we had focused a little bit more on like the onboarding experience like reducing some of the paper costs that it took I think we definitely couldn't we could have improved but the honest answer is that like I'm in this for the long game and I want to build a framework that I personally want to use like if I wanted to use any of the other frameworks I would just quit right now I'm gonna use them but I want to build a framework that's gonna last for decades hopefully and like decade one decade and a half decade and a half I want to build something that's long lasting and adapts and that takes a long time it's not gonna be a flash in the pan and so I think given that we're still alive and given that like every round with a framework of course it's always Ember versus someone versus Ember versus backbone it was Ember versus the angular and last Ember versus React like I will always take that yeah I think we are also you made a good point about like the long lastingness it's always possible for someone to like appear overnight and be like look at this thing it's so great it's not pretty awesome it's so much simple or whatever but it's a lot harder to be a thing that is maintained over the long haul and that means that at any given moment you look at Ember and Ember is not gonna be all caught up with the latest the latest thing but we also have a strong commitment to actually actually pulling in those things so yes you look at Ember like a year ago it's like there's this meme about frameworks that tries to be crazy it's like it's like you framework guys like you have this huge model thing you can't move at all you're like totally incapable of moving because it's so big and bulky and whatever but the thing that's awesome about frameworks is that you have a lot of people that are using the thing which means that if you do move which we did you get everyone moved with you as opposed to yes like backbone in theory is faster moving but all the people who were using backbone two years ago are not able to use the new thing now they're not able to easily switch to react but everybody who's using Ember a year ago can switch to glimmer because there's no actual switching modes and I think it takes a long time it takes like many of these cycles for people to look at to be able to look at Ember and say yes this is a thing that has been around for a while it is in fact the case that it did not stagnate like you can easily imagine that like sub stack is right like the tiny module philosophy is correct and Ember can't actually ship glimmer ever it's impossible and you'll have to actually see it happen a few times before you can start to believe it so I I think part of the answer to the question is just like it's only now it's only like 2015 that we've been through enough rounds that you can look at it and say all the things that you might have thought would cause Ember to not be able to succeed either because it's a big framework or because it's open source and it doesn't have the resources of the company or like maybe like maybe Tom you know will go work on Skylight and then they'll disappear and Ember will collapse or whatever like there's a lot of things that you could imagine could happen and we've actually outlived all of them and so I think we're starting to see like internal analytics and Google friends like starting to gain some momentum and I think that's just it's just a matter of time like it's sort of both back to my original idea and be like we have a thing and people will think it's seriously right away but it takes time for Ember to be thinking to Okay cool Alright on that note I think we're gonna wrap this show up Alright great well thank you guys so much that was a great fireside chat by a nice virtual fire So we feel so good You know we actually have a couple more slides but the fire just feels so natural I don't want to put the slides up so I'm gonna try to see how it goes So at the end of each meetup we want to kind of bring other meetups to light so that's something that might be you know new to the meetup community might know of the ones that are worthwhile so clearly if you're here because Atlanta Embers said come here should check out Atlanta Jopscript and Atlanta Jopscript should check out Atlanta Embers so are there any others that you guys would recommend like personal like thumbs up too I'd say ATL rug ATL rug yeah and Atlanta Ruby users group Ruby good good they meet at ATDC I believe on a monthly basis yeah cool what else do we have software testing plug-it-lan prioritization testers and where do you guys do your meetups sometimes here sometimes here cool and then are you on meetup.com awesome easy to find anyone else go ahead Atlanta node users group Atlanta node Atlanta tech village okay meets at ATV very cool good I call build guild it's sort of a pseudo meetup it's no presentations just getting together at joystick joystick bar and having some drinks talking about stuff we talk about a lot of Arduino stuff but also a lot of web things too so good times at joystick build guild check it out that's monthly as well yeah just on meetup.com fantastic anyone else ATL rug also has a social event too it's not like 3-3-1 so anyone of them wants to do a lot of cool things we'll meet at octane a week in a day after cool so a week in a day after ATL rug octane social event check it out it's the octane in the great part right yeah because I went to the wrong one one time and it was super jam up okay sort of tangential a lot of people said they were here for Railsman Tom and I are here people want to come check it out very cool anything else no okay one additional plug the meetups that happen I know ATL or Atlanta Ember and Atlanta JavaScript we are all volunteer runs so if you're interested in getting involved whether that means organizing speaking even in like a 5 minute lightning talk definitely reach out to one of the groups because we'd love to kind of help build a community in that respect so without further ado I think we are going to do drinks I believe Kurt has informed Fado that we will be heading over there and they will have a room for us so that is peach tree it's the midtown one so don't go to Buckhead that'd be awkward so peach tree in 8th so it's like you know just a few tennis blocks down south where you can hop on Marta if you'd like there's some street parking come there if you guys are driving and they validate that's where it's at but don't drink and drive do not drink and drive horrible things happen no that's all thank you guys so much for coming out absolutely thank you