 Hi, welcome to JSfoo. So JSfoo is my favorite, it's my annual thing that it's our party, we get together, talk about code, functional programming, disk the Java guys. So as always, I'd like to start by thanking Hasgeek for giving us this opportunity, this great venue with the bright lights today. So thank you Hasgeek. One more JSfoo in the bag, hopefully it goes as well as all the previous ones. Thank you very much. So this is a version of a talk that I gave at JSfoo Puna. So at that point of time, JSfoo was held in classrooms, and we all had to shuffle into a little cafeteria room to have a buffet lunch, and that was great. At the time, I just joined Yahoo after being fired from my previous job, and totally, I got fired. I don't know why, I was like, sure. And at that point of time, the JavaScript wave had broken, it was mainstream. People were using Backbone, and people were learning how to use HTML5 push. So that video has a bunch of, I don't know, I guess 400 views awesome in the JavaScript scale, considering there are about 400 people here right now. Anyway, so that was interesting for me because at that point, I was like, okay, fine, we're ditching the toil language thing, we're saying serious language, we're building applications with it. And it went well, so I did a bunch of talks after that, and I was thinking that, so I was watching it again, and I realized that a lot of it is now essentially obsolete. No one even talks, like, why do I just went RIP? They're moving to React and stuff like that. So the general rule of SQLs is that SQLs suck. So if I come up here and try to do the same thing that I did last time, it's falling flat, like a bunch of you are probably scrolling through, oh, already know what packages I want to talk about and stuff like that. And that's the case with a lot of movies, like Matrix 2 sucked, Matrix 3 sucked, Die Hard 2 sucked. There are some times when SQLs don't suck, and there are some characteristics to these movies. The one that I specifically want to talk about is the reason that I'm calling it Amplify or Stack Due. So if you guys have seen Hot Shorts Part Due, right? Remember this, right? Charlie Sheen went without any drug wrinkles. Interesting days. So it's awesome, it's slapstick, physical comedy, just like a Leslie Nielsen movie. The thing about the movie is that they never break character. Not like the Big Bang Theory, like there's no laugh track or nothing like that. They're doing all these gags, but they're serious about it. He really thinks he's in Rambo, and he shoots a chicken at a guy with this bow and arrow, and he kills the dude. I think he shoots it at his butt or something. It's an excellent movie. So the point of SQLs is that you have to find out what your roots are and actually compress it down to just those things. People are looking for a core experience. Captain America 2 had a lot more punching because people like punching. So excellent. So I've been up to stuff. The last time I was up here, I was thinking there was going to be at Yahoo for many years. I'm with Mintra now. And I work there as an architect, and we build solutions to business problems. And that makes it sound like way fancier than it actually is. What happens is the bosses decide how we want to build this, we want to do this. Me and a bunch of old people, we sit together and say, okay, what is the least amount of work that we can do to get the most amount of impact? Move forward to the next feature, the next project. And it works fine. It's a great strategy. Let's see what we can do, how fast we can do it. So it's an interesting team. Okay. So disclaimer, right? So Mintra is apparently a sponsor. So I'm not supposed to do a pitch type thing. I can't really tell you 35% off. So I will make fun of Mintra once and then I'll stop talking about Mintra. So here it is. I'm probably live cast, so there's probably somebody at office watching this right now. That is the weirdest brand name ever. I don't know what it means. My dad doesn't know how to pronounce it yet. He keeps saying Mintra. Is it Mintra? Is it Mantra? So legend has it that our CEO picked it because he didn't get Mantra.com and he didn't expect it to be a billion dollar company someday. But that is, I don't get it, but you know, logo is kind of nice. So I deal with it. Anyway, so my first draft for this talk started really badly. So I took A4 sheets and I started writing down concepts like automation scripts and less frameworks and require module systems and stuff like that. And it was like really ridiculous. So I want to show you this one slide from something Kanga shared on Twitter. Okay, not sure if you can see it clearly, but I'll read it out. Like there's stuff for scaffolding, building automation, automation utilities, and I don't know the difference, really. There's dependency management and dynamic loading and preprocessors and libraries and test runners and DOM utilities. And this is just the JavaScript part of it. Then you have to talk about like CSS and what you're doing for your static assets and what you're doing like as a framework as a whole to like, because they're going to be 20 people working on your stack or whatever. How are you delivering your HTML? What is your Weisloh score? Oh, my God, SEO? And do you have a library helper for that? What about isomorphic rendering? How are you doing single page app? This can't be the way forward. I was really looking forward to doing that. By the way, pulling out 10 packages and saying, guys, this is the way forward. You should and you totally should learn react.js and Swift and all that just but it doesn't I can't really talk to you for it'll take me a couple of weeks to go through all of them. And that's the nature of the JavaScript community, like they're very like experimental and do 20 things and all that. So okay, fine, let's look at a slightly easier way to do this. We'll start with the basics, right? So what are the basics? What exactly is it that we do all day? We call it programming need something better like programming is what comes on TV channels, like friends coming from eight to eight 30s programming by the TV network. So a bunch of people said, like, oh, it's making machine stuff and all that. But I think it's like one very specific thing that you write code that replaces humans or human behavior. It shouldn't require humans anymore. So it sounds very bombastic. But let me tell you what I mean, right? So in the 90s, this is how we bought shoes. I just Google shoe store and I copied one image. I don't know copyright and all very sorry. But okay, so you went into a shoe store and you asked a guy, hey, I like red shoes. So will you show me some red shoes and maybe leather in a size eight? And he goes inside a thing and he comes back with something that's not red shoes. And you're like, dude, I just said red shoes. He like, oh, sorry, goes back and figures it out. And so now this entire thing, this entire process, where you had to pay money to go to commercial street and buy shoes is essentially replaced by one line of code. And this is the line of code from Mintras code base, okay, where we have a bunch of services, you say search, you give it a query term, can pass it parameters like size eight and stuff like that, the results come to a callback. I have ruined the lives of this poor shoe salesman with just this. Now it takes a bunch of work to get here, like a solar cluster has been set up and they've set up APIs on it and it can scale so that like, when traffic comes, like it can scale upwards and all that just. But essentially, this is what we were working towards where I can talk to my machine that I've built and say, hey, show me all the red shoes we have and then like filter down upon it. So yeah, that's the deal like right code that replaces humans or like human interaction. That's why they are like robots and drones and stuff like that. That's always the goal to make a lot of people unemployed, I guess. And for JavaScripters, then there's this concept of like front end development. Okay, so that's one thing, right? JavaScript is essentially the language for front end development. Now close contenders are of course, Android and iOS. And you know what, some of it is nice. If you guys have been messing with Swift, seen a bunch of things. But what does it mean to us? What is the word front end development mean to us? What is the difference between you and the guys writing Java services? Is that you are actually defining the interface between the human and the machine at that moment, right? You are at that moment where you are getting unpredictable input, you don't know what the guy is going to type and click and all that. If you have services, you can throw error conditions, but you can't tell your error, your user, you know, bugger off just because he spilt the word shoes wrong. And he wants a nice interface into your machine. He can't use this. Obviously, what he'd like is this. I have so the original Google didn't have an submit button because those guys were engineers and they just used to keep pressing enter. And I like that you just type credit issues and you throw spit me back a bunch of products. So awesome, front end development is also one of our things, the JavaScript world. Let me talk about what platform is. This has been a changing answer, but now the answer is settled. Okay, it used to be writing little stuff inside your browser to do drop downs and hover effects and all that jazz. And then it was like Ajax. So I'm going to start doing service calls from the browser. Now JavaScript on server also. So you can do your own service things. You essentially are talking to clients and servers. You're creating clients and servers at this moment as a JavaScript developer, or as a developer of any sort in having to do with anything with the internet. But then that doesn't make sense because you have like robots with JavaScript, your people writing natural language processing algorithms with JavaScript, video games with JavaScript. So this entire slide is useless. I'm sorry, I wasted two minutes of your time. Programming is everything. It's not about client servers, little thing. You just look at a problem and say, how do I make, you guys remember switchboards of the 40s and 50s? Like in the black and white movies, there used to be these women in skirts who used to sit and connect you and say, excuse me, sir, I'm just connecting you to the guy. Like we killed that job. I want to be very serious about it. We ruined that industry. They were very happy and taking a salary back and we wrote software and we kind of left them unemployed. Then again, of course, computers have lifted humanity up. I'm not being that serious, guys. Relax. Then there's the concept of theory. Okay, how much effort should you put into learning how to write code? Not with what tools to write code. Anybody can give you a bloody API design list and say underscore map underscore reduce all that does. But who tells you that that code should be constructed in a particular way? Have you sat down and thought about it? There's this nice concept that I like called shumpeterianism. It means like creative destruction, like I'm not really attached to the final product of what I wanted it to be. I'm happy breaking it down five more times and seeing where I can reach with it. It's just a get-repo. I can keep it running, but I'm always looking to like break it down. So theory is important. And at that level, you can learn about like design patterns. You can learn about books. You can use books. You can sit down with somebody who you respect in your office and ask them questions. There's a quote that I keep coming back to and it's by John Carmack, this guy who wrote Doom, Wolf 3D. Somebody's played Doom in this room, right? Really? Okay. Thank you. One guy's played Doom in this room, two, three, four, five. Yeah, okay, fine, we get it. You guys played Doom. Sorry. Anyway, so the code is pretty simple. Sometimes the elegant implementation is just a function, not a method, not a class, not a framework, just a function. And you ask yourself like, why, this isn't just like lip service to like functional programming because the doer has been writing video games. He wasn't really using hardcore functional programming languages. But the idea is that the function is the easiest way to express a verb, a unit of human thought, right? You'll pass some arguments to it and you'll process it and you'll return something else out. And at the end of the day, that's what most of our job is. You're picking data up from a bunch of places, doing a bunch of stuff to it and either passing it on or putting it to a browser or to an iOS app or an Android app. So in essence, like everything is modeled after one of these functions, so you should be able to like twist them around and do a bunch of stuff. So there's a lot of theory behind functions and you're encouraged to actually go out and do it, to read about it because these are things that like model the way your brain starts solving problems. And it's always interesting to learn something new. So I remember doing a talk and I have no evidence that this ever happened, but I remember doing a talk on the principles of object-oriented programming languages. Object-oriented programming. And so Rakesh is looking at me and he's like, dude, like I have very little respect for you. Why did you do this? It's because I could have that one slide up front which said principles of object-oriented programming and it just spilt poop. That's cool. Then the idea of tests. This is something that I spoke about during my last talk and the idea is simple. You ask yourself, how do you write interfaces? How do you write HTML and CSS? You have a working relationship with your designer and he comes up to you with like a Photoshop that he spent two weeks on. And it looks like the site but you can't really click it. So what do you do? You keep it to the left, you open up sublime text or whatever on the right and you start writing code. And at every point of time you're refreshing the browser and comparing it to the JPG and saying, okay, fine. Like, this is how it's coming along. So don't you? And it would be strange if you didn't have a mock at that time. Like if you didn't have a PRD because you'd be building something but you're not sure if it's actually what everyone wants. This provides a reference. It looks very much like the website but it doesn't work at all but it provides a reference. So the idea with tests, and I'm not talking about unit tests, I'm not talking about integration tests or feature tests or whatever. Basically some amount of code that you write and make sure that your program works. So those kinds of tests. So the phrase that I repeat again is something that my mentor told me before. So it's like Photoshop for code. All you have to do is write down a list of things that you expect your program to do in some form of code. You could be using mocha, you could be using, I don't know, Q unit or a whole bunch of unit testing frameworks or just a regular bash script or something you spun up with node. You can do all of that but the general question is do you have a reference point that you know your code is getting towards? Now it doesn't really have to work the spec but it does have to have, like it should be able to run tests on the code that you're writing and keep going green, green, green, green. Fair. Okay. All right. So the general form of a test, again copy pasted essentially from my last time, you should be able to write something like this based on your machine. Okay. You have a machine. It's a now called machine. It could be an app.app instance or it could be router instance or a controller or order. You have a machine and you say machine do something and let's say that you're building an adder, right? It adds two numbers. So you give it like two and two and you get back the result and you make sure that it's four. If it's not four alarm bells, else carry on. That's it. It's as simple as that. So like you look back at your applications that you're working on right now by the front end or back end order. What is the least amount of work that you can do to say, okay, it works as expected. I can run this on four browsers and it'll do the same. So yes, tests. I'm not even saying unit tests anymore. Even I've given up on writing unit tests. I don't have the time for it. But I definitely write like a small bunch of things that just run my machine and make sure it's doing what is expected. Three months later when a whole bunch of other bunch of people are working on the code ways and break it, that'd be the thing that saves your ass. Awesome. Libraries. Favorite thing to quarrel about online right now is what is a library? What is a framework? I think I got like some kind of answer. Okay. So when I'm building an application, or any of you are building an application, your concepts in the application. So you don't really say database. You say like data store. Okay. So I have something where I store all my data and I'll be doing network calls either via Ajax or via network, HTTP, so on and so forth. Or I want to do, I want a little library that deals with DOM elements. Okay. So a library is something that basically enables this for you in the language of your choosing. Okay. So if you want to do functional programming, you can pick up underscore j s or load as j s or whatever it is. But once you have that in your stack, you can now do functional programming with your arrays and your objects and so on. Similarly, you can pick something like super agent just for doing network calls. So it uses Ajax on the front end. It's isomorphic. So it works on the back end and you can make calls from there as well. So the basic point I'm trying to make here is that you have to choose your libraries for concepts and not for hype. Awesome. A whole bunch of people love jQuery. I get that and it solves a number of problems for you. But the next moment that the only reason you pull jQuery into your... Everybody's writing on jQuery notice. I'm sorry, I don't mean to pick on jQuery. But the idea is that that just because you needed Ajax, like a basic concept of XML HTTP request for one thing, you know, it added 35k of weight and you're basically pulled concepts that you didn't really want from a library itself. Instead, look at something a lot smaller. The ecosystem is huge. Like I just showed in the beginning, you will find something that you want if you don't write your own and publish it on npm. But yes, libraries choose for concepts and not for hype. The next slide is very specifically, it's like it doesn't sound right. You have to think about what your motivations and values are for writing the software. Not so much in a compassionate about JavaScript and stuff like that. Okay, no. But you tell you like, for example, in Mintra, we say, okay, least amount of work for most amount of impact. What is it that we can do? We'll build systems for 50,000, 50 million people once we actually have 50 million traffic. For now, let's get 400 people onto the thing and see if they like the product. So those are our motivations to be able to get stuff out to our customers like really quickly. At Yahoo, like we are motivations were about getting great technical scores on our pages, like Weisler would give. And those were just the things that we were asked to attempt anyway. So if you have these base thought set down, hey, we are maybe a functional programming team. We don't really want to sit and model the entire, well, architecture of the company in in JavaScript, we'll just have little values and we'll pass it through pipes and we'll go ahead. Or you ask yourself whether you're building a system for 2 million people out the gate. Maybe you are, maybe you're building on mass push notification platform and stuff like that. But unless you actually think deeply about how we are going to be building these things very early, what will happen is that five people with different opinions will build some stuff a little, again, a little differently and you might be okay with that. But it's nice to have everyone pointing in the same direction if anything like for rhythm. Cool. Motivations and values. Then we get to frameworks. No flame fest. Very simple. I think I have a definition for frameworks as well. What do frameworks do? What is it that is common between ember and angular and extjs but not so much reactjs? So frameworks basically try to codify a style of thought. This goes back to the whole motivation values that I talk about. The people who are best at writing extjs for the guys who made it. Similarly, Facebook writes awesome reactjs code because they just made it. They think very deeply about how they want to solve a problem and because they want other people to solve the problem in the same way they thought about it, they try to put it like establish it in code. So if you use angular then you have to learn about transclusion and a bunch of dependency injection and how they do it. If you're doing react then you might be more interested in like immutable data structures. If you're doing ember it's doing a whole bunch of data binding on elements directly. Sure, whatever it is but if you're going for it either you buy into it completely or you are just wasting your time. I have to say because I know a lot of people who say no framework for me. You're going to go back and you're going to set up your code in a particular way. That my friend is your framework. You have decided that I'm going to be building code in this fashion and I've made a folder for it. Awesome. So as an example I'd like to tell you what my framework for code right now is. Like what my machines I think they do what the flow structure is. It's actually like it's influenced by the flux architecture from Facebook but this is my version of it. So I have links in my machine. This is the API. It could look like an ahref. It could look like a button. It could be a form submit. It could be whatever. So I have either humans interacting with it or recently with WebSocket to send all. I have like servers interacting with my browser as well. Fine. So like there are basic entry points that I can click on my application. And then after that my application does some stuff. Does some stuff with the data store and then renders it to the screen and changes the button color and so if you click for example one tab. That's a human who just hit one of my tab links and then I check to see what the active tab was and maybe I should toggle it. Then I save the state of what the active tab now is and then I update it to show what the DOM is. That sounds really bad but you get what I mean. Like I basically look at machines now like this. Like little interaction machines and then like they come all the way back just by clicking or so on and so forth. So it's like unidirectional. So I have a little image of how the flux architecture is. If you can actually see they. So the language that they use is actions. So every machine has actions. Button click and hover and type in an input field and so on. So you have actions which fire it onto a dispatcher for a machine. This machine goes and updates a whole bunch of data stores and then it spits it down and renders the view. Further things have to come up on an action itself. It's interesting because otherwise MVC is claimed to be the slightly tightly bound thing and after a point of time it's hard to maintain those relationships. But this is more like server side programming right. Like you take a bunch of data construct HTML give it to him. The next guy clicks a link it's going to come all the way back up. Feel free to investigate that. And finally the one that is near and dear to my heart so to speak is automation. So automation is the ultimate level of programming where you end up automating yourself. So there are a bunch of things that you do. Okay fine like you have build scripts and all that jazz. But your project doesn't end the day that you actually finish writing code for it. It goes upon a production machine and then there are going to be ops guys who talk to it and there are going to be QA guys who want to do some tests on another machine with that and stuff like that. So you don't want them to have to come to you every time you want to deploy it on another machine or like at least a readme.md. So to share for example exactly what I mean I have a list of what our make actions are inside the Mintra search page. The way that we do this. So we have something that sets it up so a developer comes inside he sits down clones the thing runs make setup and it sets the whole thing up for him. You can do like it starts up a little development server so and every time you edit a chain it restarts itself. Update like the updates all your dependencies and package.json because it's a no no thing. So it compiles templates generates bundles, lins the thing which is useful for us because a bunch of people don't put semicolons at the end or whatever. Upload files to cdn and we have like a key somewhere that it pulls generate documentation for the thing I think that's a to-do that I might have removed. Then it runs all our tests on the thing and so these are all the things that would be actions that I would be doing by hand. So I want to now write code that automates that for myself that automates myself. So the name next time that these guys want to run tests on a production server they just run a little thing like that runs script of mine and essentially that's it. If you have these base concepts in place that your thought of what code is going to be once it starts leaving your fingers and then finally leaves your machine and you actually go through a little bit of diligence then this starts looking a little simpler. This starts looking a little simpler. They're essentially trying to solve one-one problem each and you don't really have to solve a bunch of problems until you like for example bump into it. So for example if you're doing a single page app and you don't really need like routing and stuff like that don't put page.js in the beginning don't tell yourself I'm going to choose these 10 things because what it'll just be available that is just one line away. You start looking at it and you're like okay fine something like closure script it might be interesting for me as an experiment but I'm not putting into production yet. So I'll take that off the table. I won't even think about that as an option and I'm thinking about it for work. Something like writing tests okay fine hold on I don't really have all that time to write unit tests ideally you should you look for coverage but I should be able to pick a couple of these things and run automated tests on my machines. Awesome boss happy product manager happy QA guy is super happy and yeah so essentially that like ask yourself what you're doing at work. You're writing little machines that replace oh god that that replaced that replaced human work but you're trying to enable human beings to do a lot more and that's the punchline to the entire thing right because we could do this a whole like people are happier they're able to well they're able to get stuff delivered to their house and stuff like that and and that's important I think like that that is how the world has been progressing like computers evolve way faster than human beings but they're taking us along for the ride as long as we do it with diligence I think we should be fine questions I'm sorry I bored all of you guys okay no questions okay awesome thanks a lot guys enjoy JS4 I promise the others are way funnier than mine. Yeah oh okay hey uh you didn't talk about um you know what's what stuff you use I mean for instance uh you know in each of those steps oh sure your work oh sure you want me like just quickly go back and tell you some of the modules I'm using so this is just make the 1977 program and this runs little node scripts so a lot of it is written in node for me I use underscore for functional programming I'm really looking forward to what react is bringing to the table have you people messed with react JS anybody go to the workshop yesterday phenomenal stack feel it's interesting because it lets you like keep rendering to the page in a very performant way so you don't have to write the same code twice otherwise I like little functions that return objects I like super agent because it's an isomorphic library that means that as long as I proxy my services down to the browser I can write code that works in the browser and the server for free like it just works and switch off JavaScript and the thing keeps working again I like mocha for testing very clean API I like reading john karmak's twitter feed that's nice I think I got this off bootstrap this is styling so bootstrap is quite heavy but you can also check out yahoo's pure css it's quite nice it's really small 4k nice I am a human that talks to a machine and these these are just apis like built with super agent and underscore like very few tools but we are having a lot of fun just keeping it down to that much right now any more questions what is the code testing framework for you like I mean what do you use for testing so I like mocha basically and should dodges but not like because like I love it or anything it just like it's very simple to say take a function and here's a callback that you can call when you're done with your test instead of having to do spies and stuff like that further I do I used to do a lot of mocking for my tests like fake data but now I just like talk to the real services it takes I mean it makes the tests run a little longer but it's fine really like 10 seconds is fine compared to two seconds I'm already surfing reddit anyway in another window by then but yeah mocha is nice you can check on mocha and should I think I think there's a group that you get something called chai.js you might want to google that as well any other library recommendations that I can do for you different question so when you build your own frameworks which is what you end up doing your own like way of coding um you sort of become less nimble because you get sort of attached to it so how do you you know what's your pattern of reusing modules others have written versus stuff you write yourself okay so I'm not the best at this but I'll tell you some of the things that we do to keep it simple okay so first of all like there's I've stopped doing these inheritance classes you know a person animal that sort of thing no like functions that return objects and ideally stuff that doesn't mutate the object back so when I say object right I don't mean like a new instance of a class that I defined though we use that as well but I'm more interested in stuff like arrays with regular values in it instead of having an instance of a person class I'm much happier having a hash which says name is equal to so on and so once I keep it like that lightweight it's very easy to switch it out because all then you're doing is data transformation you're not really worried about class inheritances and stuff like that further functional programming like under like if I can do stuff without with a simple like map reduce kind of thing then happy because that means that I since I've described it with verbs and I know that my requirements I get with in verbs I can change the code also then fairly simply otherwise I'd have to think about which guys are talking to which guys and how it's invented and stuff like that but like let's say you're working in a team and you have your own style of code sure so how do you impose that on others or what do you do that's why I implement their features before they get to it like I was like okay so this is the way that is no I'm joking of course so we argue a lot as you can imagine people are fairly opinionated around me at work and that's good and I've learned that consensus does not have to mean compromise we try out both things we put A B test on it we see a number we can argue about like commas and all but they're like frankly I think we're mood past that we just like want to get stuff done there's a lot of shit to do inside the place okay all right there is a question how do you guys test memory leaks in the production memory leaks so something is lagging so there's a lot of prayer involved I'm I'm crying inside so this is what we do okay thankfully because at the scale that we are at we can throw traffic at a server okay if we want to that means if we leave something running and it has a memory leak we will start seeing our New Relic graphs like going up RAM usage and stuff like that we'll start seeing that weird graph and eventually like it'll die and it'll start up again at that point of time we go back and see who broke what suddenly like we go through every commit and we can do this so because like little node packages and we use like git for our deploys our deploys are really short like it really goes there spins up the machine again and like if it's just like one file delta it's about 10 seconds to do the thing so we can actually try out live versions I'm sorry if it's affected anyone shopping experience so far but we can theoretically do this and we have done it a couple of times further we have like we run profiling and stuff like that that being said we don't even have a lot of this evented stuff like memory leaks have turned out to be fairly rare now that we moved to this functional way of just moving data down chains very few references are kept upwards and so on except like when we're doing caches but we have like flushes on those caches does that answer your question so we break is what I'm saying excuse me yeah hi yeah what is your take on isomorphic JavaScript because we are talking about stack it's awesome I love writing isomorphic I like that it has a cool name like isomorphic it sounds like a cartoon from the 90s isomorphic point being no it's okay so conceptually you know whether you're writing code for the browser or the server this is basically what you do you talk to a bunch of places one session service one data service one configuration service you take that data together you stitch it and you pass it on to somebody now this could be a template that spits out html or it could be a service that spits out json or a protocol buffer or whatever so at that level I'm happy imposing those kinds of abstractions over it so for that which is why I recommend super agent as an ajax library to use because it gives a uniform api across node and the browser and on the browser the only change that I make is I remove the domain name because like no cross domain Ajax and we proxy down to regular services so at that level then the rest is just like JavaScript we have functions that return html whether it runs on the front end or the back so we have a little extra code of course on the front end for event handlers and stuff like that but isomorphic JavaScript it means less JavaScript I like that did that answer your question isomorphic isomorph okay cool hey thanks a lot guys okay have fun with jswoo come by and ask questions if you want to hey Sunil so you should probably join the scroll back chat room and probably answer a few more questions now there could be I mean as people reflect on what you just spoke if people have questions it'll be nice if you could answer them yeah well thank you Sunil guys one more time Sunil bye