ARI:
Aww man, it’s like we’re friends. [Laughter] If I close my eyes and squint and I look just the right way it does appear that way – that we are indeed friends. [Laughter]
[This episode is sponsored by Hired.com. Every week on Hired, they run an auction where over a thousand tech companies in San Francisco, New York and L.A. bid on JavaScript developers, providing them with salary and equity upfront. The average JavaScript developer gets an average of 5-15 introductory offers and an average salary offer of $130,000/year. Users can either accept an offer and go right into interviewing with a company or deny them without any continuing obligations. It’s totally free for users, and when you're hired they also give you a $2,000 signing bonus as a thank you for using them. But if you use the Adventure in Angular link, you’ll get a $4,000 bonus instead. Finally, if you're not looking for a job but know someone who is, you can refer them to Hired and get a $1,337 bonus if they accept the job. Go sign up at
Hired.com/adventuresinangular]
[Ready to master Angular? Oasis Digital offers Angular Boot Camp, a three-day, in-person workshop class for individuals or teams. Bring us to your site or send developers to ours classes in St. Louis or San Fransisco -AngularBootCamp.com.]
[This episode is sponsored by Wijmo 5, a brand new generation of JavaScript Controls. A pretty amazing line of HTML5 and JavaScript products for enterprise application development. Wijmo 5 leverages ECMAScript 5 and each control ships with AngularJS directives. Check out the faster, lighter and more mobile Wijmo 5.]
[This episode is sponsored by Digital Ocean. Digital Ocean is the provider I use to host all of my creations. All the shows are hosted there, along with any other projects I come up with. Their user interface is simple and easy to use. Their support is excellent. And their VPSes are backed on solid-state drives and are fast and responsive. Check them out at DigitalOcean.com. If you use the code “angularadventures” you'll get a $10 credit!]
CHUCK:
Hey everybody and welcome to episode 61 of the Adventures in Angular Show. This week on our panel we have Lukas Reubbelke.
LUKAS Hello!
CHUCK:
John Papa.
JOHN:
Hey everybody!
CHUCK:
Joe Eames
JOE:
Yo!
CHUCK:
Ward Bell.
WARD:
Here I am!
CHUCK:
I’m Charles Max Wood from Devchat.tv and this week we have a special guest – Ari Lerner.
ARI:
Hey! I’m special this week, alright!
CHUCK:
Yaaay!
JOHN:
We’ll just call you Special Ari. [Laughter]
JOE:
So special.
CHUCK:
Do you want to introduce yourself really quick?
ARI:
Sure. I’ve been called a lot of things. Special is definitely in that list. Yeah, this is Ari Lerner. I am the – one of the original authors on ng-book 1 and ng-book 2 and ng-newsletter – the esteemed, special ng-newsletter.
CHUCK:
Woohoo!
ARI:
Hurrah!
CHUCK:
So what prompted you to write the book and do the newsletter?
ARI:
Which one? Angular book 1?
CHUCK:
Yeah.
ARI:
When I first got my Java about two weeks ago, I built this really awesome calendaring system. I have very bad [inaudible] and I was working with Backbone primarily way back when I decided there must be something that would be nicer out there than Backbone – Backbone has a lot of trickery around it; I still like it but –.
So I went on a couple day long for better [inaudible] experiences and I went through a bunch of frameworks back then – I say ‘back then’ like it was forever ago. It feels like forever ago. And I stumbled upon Angular, so I started writing on Angular and it felt like it was right. This is pre-1.0 days and it felt right; it felt like the right way to actually build a [inaudible] application and one of the things that I found is that there was very, very bad documentation or a lack thereof of documentation. And I started learning it by reading the source and talking to authors of the framework and realized that there was very little documentation so I just started writing what I thought would maybe be a 30-page handbook on my learnings of Angular and it ended up with about 520 pages Angular content. I gave up on my calendaring system and just kept going with Angular.
JOE:
Okay, so why did you not name it Lerner’s Learnings? [Laughter]
ARI:
Originally, it wasn’t even going to be a book; it was just going to be maybe a couple of blog pages.
LUKAS Learner’s learnings – I see what you did there. [Laughter] I see.
JOHN:
Pro tip. [Laughter]
ARI:
From now on, pretty much everything I’m going to be – all those things will be called either ‘Specials’ or ‘Lerner’s Learnings’.
LUKAS I just bought the domain. You can buy it for me for a thousand dollars. [Crosstalk]
CHUCK:
Oh, then you’ll be an ambitious [inaudible] there.
LUKAS Yeah, boom.
ARI:
Yeah, so that’s kind of [inaudible] half of life that I’ve been on for the last two and a half years.
JOE:
So Ari, when is ng-book coming up?
ARI:
Well, it’s available for pre-release right now. We’re aiming to have it done within the next – and by done I mean content complete but not necessarily edited complete in the next three weeks.
JOHN:
And will that contain web versions of Angular?
ARI:
Are we talking about ng-book 1 or ng-book 2?
JOHN:
Ng-book 2.
ARI:
Ng-book 2 – that will contain Angular 2.
LUKAS I don’t understand. Wait, one more time?
ARI:
Right. I actually – what versions will ng-book 2 cover? Is that it?
JOHN: is it Alpha 36?
ARI:
Right now it covers Alpha 37 up to –.
CHUCK: Ohhh.
ARI:
As in what version of Angular 2 is covered? Yeah, as of now it’s Angular 2 Alpha 37.
LUKAS So Ari, let me ask you a question. This is what I’m dying to know is given the state of flux that Angular 2 is in right now, how challenging is it to actually create content around Angular 2?
ARI:
Well, it’s actually pretty similar as how it was to create content for ng-book 1 in the sense that despite the fact that the source code itself is evolving. And also there’s a major difference between ng-book 1 and ng-book 2 in the sense that when I got into Angular 1 the JavaScript itself was in a state of flux so that’s really pretty much the major difference between ng-book 1 and ng-book 2.
As of now their major difference is ES6 – the spec itself is kind of settling out so that’s really the major difference and Angular 2 itself is following along that same pattern where that’s actually kind of starting to settle out as well.
It still is evolving like the routing chapter for instance when we started it. The router itself made major changes so we had to go back and rewrite that chapter entirely. But things like the template and the components and what we know now as directives hasn’t changed that much since we started writing the book that is.
LUKAS So you could elaborate it just a bit more on just the general state of flux said JavaScript is in at the moment as well?
ARI:
Yeah, sure. Like I said ES6, the spec itself, it’ kind of settling out now there’s a general consensus about what are good patterns and how to actually write ES6. Are there static variables, for instance, in classes? As of now, there’s not that’s still kind of an open – in the open air question so to speak as less – as far as I last checked – things like that.
One of the nice things about ES 6 is, as it stands right now, is that Babel – and there’s a really large support in the community around transpilers like Babel. Then you’ll just start writing it today and it can traspile your ES6 code into ES5. So that’s really – that is something that is really nice to get into.
TypeScript, on that note – this is actually one of the things I really like about TypeScript is that you can get started on Angular 2 today using TypeScript which is also a fantastic language, thank you to strong typing.
CHUCK:
So is ng-book 2 then focused around showing you how to do a TypeScript or with JavaScript?
ARI:
So we focused a lot on TypeScript in the book. We have a chapter that is dedicated to TypeScript to the end of it. A lot of our ‘Getting Started’ stuff is using TypeScript, but we also make the point, in the book currently. You can use on JavaScript to simply do something to impose the JavaScript.
JOHN:
Yeah, I think it’s going to be interesting is Angular 2 comes more enforced where you starts using it. Since you're going to use ES5, you can use ES6, you can use TypeScript, when you Google for it [inaudible] people are going to do, some samples are only going to be done in one of those. Like the Angular team, I suppose, might do it in all three but I imagined not everybody is going to write a book or an article or a blog post or a code sample in ALT, so it’s interesting to see what the predominant one is.
ARI:
Yeah I think –.
WARD:
[inaudible] is going to be interesting, isn’t it?
ARI:
That’s kind of a – there’s little team that has revolved around writing Angular book 2; this time, it’s not only me which is really nice, and that’s a discussion that we have pretty consistently – where should we spend our time? What language do we spend more time in? And I think we’re spending more and more time in JavaScript because of that conversation but we write a lot in TypeScript. And I think that is going to be pretty interesting, too because Angular 2 itself – it’s largely a different enough framework where Angular 2 could be kind of a misnomer or it could be considered to be mislabeled because it’s such a divergent path from Angular 1 that learning both another language and another framework – to be flipping about it, learning those two simultaneously is kind of a lot of –.
WARD:
Overhead.
ARI:
Yeah.
JOHN:
Ari, when you say you're doing a JavaScript are you talking ES5 or ES6?
ARI:
ES6. I’m sorry, not ES5.
JOHN:
[Inaudible] Isn’t learning ES6 pretty much learning a new language anyway even if ES5 has been offered for many years?
ARI:
ES6 isn’t largely different enough to be really considered TypeScript in ES5 and TypeScripts against ES6 – those are very different languages from each other – the syntax in the sense that you have that sonic typing that you can rely on for error checking.
ES6 itself is close enough to ES5 where I would say that there is some knowledge overhead to actually have to learn it. Especially if you see syntax like the spread operator that you’ve never seen before, there is overhead to learn that but I think that that’s kind of a natural path of language. [Crosstalk]
JOHN:
That’s really interesting because I actually disagree with you. I find that ES5 and 6 are – more difference between those than there is ES6 and TypeScript for me. I can go between ES6 and TypeScript back and forth, and now seal the pain personally. But when I go from doing a lot of ES5 for my day job quite frankly, and then I have to do either TypeScript or ES6, I [inaudible].
I’m not saying it’s wrong, I’m just saying I feel my experience [inaudible], I guess.
ARI:
Sure, yeah. I have spent a lot of time in all three and I end up tripping over TypeScript more than I ended up tripping. Maybe in contrast with each other. Actually, I think I probably align closer to what you said with ES6 and TypeScript. There’s still – I think ES5 and ES6 are close enough where the knowledge overhead for the learning those two – for learning ES6 from ES5 is easier than from TypeScript. [Inaudible] But I can definitely say the others are too.
JOHN:
Yeah, to be completely honest I would tell you that while I write in all three of those, I have the least amount of problems with ES5. To be very honest, many, many times I’m very happy and content just to write functions and when I have to rewrite them as classes, sometimes I have to really rethink what I’m doing.
While I liked TypeScript and ES6, I use it a lot and I see [inaudible] I can use it. ES5 sometimes is just – it’s almost second nature to me now.
ARI:
Well you’ve been writing in it for a long time so that’s not surprising.
JOHN:
Exactly.
WARD:
Yeah, and I think that the addition of these typing syntax that you have with TypeScript is something that you have to trip over and maybe that’s why you're feel like that’s such a dramatic difference because if you don’t use typing, then I can’t tell the difference much between ES6 and TypeScript.
But it does seem to be to be a bug hurdle to go from ES5 to ES6 particularly if you're falling down the class rabbit hole which is – I don’t know, what do you think about the – do you like your classes? I’m just not sold.
ARI:
Well, I subscribed to a functional style probably more than I do with object style anyway. There are things that I liked about the class style; I really liked using decorators on classes. But beyond that, if we're just talking purely about functions – if we’re talking about the classical style in ES6, functions are so much easier to follow that objects.
WARD:
Yeah, I just wished we could use them more but Angular 2 drives you and many other systems also seems to be driving you towards classes, which means you have to give up the functional style or it seems to me unless you're having some other kind of experience in which case I’m curious.
ARI:
No, I agree with you probably more than a 110% on that.
JOHN:
When you look at this, so we’ve got ES5 and it’s functional and you got ES6 – why, you can be functional on ES6 and I think it’s great to use functionally. It does feel very much like all the new frameworks that are coming out are driving towards – yeah you can use ES6, you can use functional but we like it if you use classes with ES6.
JOE:
I guess [inaudible 13:20] at least.
ARI:
Yeah, in Angular 2 it’s hitting on classes quite a bit also.
WARD:
Yeah, I wish it was an analogy for putting decorators on functions but it doesn’t seem to work quite that way.
ARI:
[Inaudible] composite functions I think, which is we wrap a function or function.
WARD:
Before we go down to a complete rabbit hole, let me just announce what I – the thing that I find most distasteful with classes everyday is [crosstalk] no, I can’t do – yeah, there’s lots of homework [chuckles] but – either work there is, there’s too much homework. But particularly I can’t – I got all these variables around that are exposed and I’m underscoring them to let the world know that if you happen to be looking in a debugger, you're not supposed to actually touch that thing because it’s not yours but I can’t really hide it so the information hiding is terrible.
ARI:
Yeah, it’s a lot of private variables, I think, is what you're talking about.
WARD:
Yeah, exactly. There’s no hope for that so in order not to have somebody stumble on, I think that when they end the debugger – let’s say we end up on it a lot of the time. And they see a juicy dot something there, they want to call it and you’ve written your whole class on the assumption that nobody can get to that thing. So the only way you can signal that – wink, wink – is to swallow the convention of underscoring it and so I’ve got underscores everywhere and it’s just painful. So that’s the homework, that’s the bookie thing that I hate to do. And I think and instead of just sounding like some theoretical class-vader which you call me also, there is this practical thing that are more practical audience should be aware of.
But anyway I’m stepping off my soapbox. Let’s get to what you're liking in Angular 2 because you said you're spending some time there.
ARI:
Yeah, so in order to write a book I kind of have to. [Chuckles] Oh I crack myself up.
WARD:
Yeah, you did. You broke me up there, too, I’m thinking. [Inaudible] Who needs to know the subject to write about it? Not Ari.
ARI:
No, not me. I flap my magical knowledge wings. What I like about Angular 2, I like the new templating syntax. I like where in templates you can [inaudible]; kind of like what ng 1 has with controller as syntax. I like – I personally like controller as syntax, it allows you to get closer to the JavaScript rather than Angular itself.
Like I said, I like decorators and I really like – I like the annotations that decorators provide for classes if you end up having the right classes which, again, as we’ve talked about pretty much this entire episode Angular 2 really underscores using classes, at least [inaudible] with it does.
I also really – one of the things that I strongly support the direction that Angular 2 has taken is the isolation it takes when it talks about building components for a page. And the kind of dissimilar from Angular 1 – even though Angular 1 does make this claim, I’ve never actually successfully used it inside of other frameworks. That’s not true; I have used it in other frameworks. At the same time however, Angular 1 itself has a pretty strong opinion on wrapping; I’m using one Angular app within a page versus Angular two – I’ve used it in combination with React, React Native, Omniscient on React Native and ClojureScript. I’ve used them all. I’ve used Angular 2 successfully in those different spots.
WARD:
Do you feel like Angular 2 enables certain kinds of – certain common application scenarios? A better way than you remember from Angular 1?
ARI:
I’m not sure I understand. Does it make it easier to write [inaudible]?
WARD:
Well I’m thinking, I’m sitting here trying to write an app – let’s suppose I’m writing Angular 1 apps, and I’m thinking ‘maybe I should try on this thing, take this Angular 2 on’ – what good things are going to happen to me as a result of making that move?
ARI:
Oh, I see. I mentioned ClojureScript a little bit. If you're using ClojureScript as an analogy – if you were using ClojureScript three years ago, the difference between three years ago and ClojureScript today is that they are so much more – there’s many more components and many more open source libraries that are available now than there were three years ago.
So the analogy that I’m trying to take there is that three years from now there’s going to be a lot more libraries and components written in ES6 than TypeScript. So if you're writing your application today and you're aiming for a couple years, you're aiming for that thing to run a couple of years and you want to use something – you want to use an open source library that will come out in a year from now, building out your application in Angular today is going to give you a better preparation for that tomorrow and better preparation for the tools that are actually coming out. That’s my advice for learning Angular 2 and ES6 today.
Also, to more directly answer the question you just asked, “Why would you want to try Angular 2 today? Why would you try building an application?” I feel like that was the question you asked.
WARD:
It kind of is. It’s like how does Angular 2 make – how might that become a better approach to write in my application? What does it allow me to do that I can do more easily than I could in Angular 1?
ARI:
Got it. So you can embed your Angular 2 functionality inside your Angular 1 application and deal with that functionality and isolation. So for instance, if you're going to write your tabs, if you have a tab component which shows different tabs and different [inaudible 18:59] you could write that solely in Angular 2 and let that live in the Angular 2 component. So I would still work with your Angular 1 application and so it’s the same app.
It’s really nice, because if you end up – say that you end up writing a component in React and you want to integrate it with your Angular 2 app, it’s pretty easy to do. The component itself will be very similar, if not, the same when you add another React component.
WARD:
Uh-hm. Yeah.
ARI:
One more thing on top of that same idea is that it helps whose ever is writing that tab component for instance, to follow along with that example, doesn’t necessarily have to know how the video transcoding component that somebody else is writing that suites inside of that, inside one of those tabs. It helps keeps that component knowledge isolation.
WARD:
Yeah.
JOE:
So Ari, something I’ve read recently and heard from a few people – and this isn’t a semi-opinion but I’m curious what you think, is a – you're just simply being foolish if you writing an Angular 1 application today that you should be doing something different, whether it’s not Angular or Angular 2 or whatever. How do you feel that kind of statement? I’m hearing that more and more from people, and as you can tell with my tone I don’t exactly agree with that. What do you think?
ARI:
Well, I’m going to ask that question right back to you after I answer my initial opinion because I’m curious about what you think because we do hear that. I definitely hear that especially if people who reach out, people who have purchased ng-book 1. And we try to really be really responsive with ng-book 1 so people have also reached out and asked for support, ask a set of some other question.
I think that one of the by-products of being a software developer is you end up having to balance that ever changing – it feels constantly changing. We have JavaScript itself is changing and JavaScript has been around, ES5 has been around for quite a long time and JavaScript just – is becoming something new. We didn’t have – GitHub wasn’t that – wasn’t a big deal a couple of years ago and now it’s really kind of a big deal. These are things like – those are really high level examples but that’s one of the [inaudible] prides of being a software developer and I think right now Angular 2 itself – if you're writing an app in Angular 2 today, you can expect that in a month from now, your Angular 2 app is going to be outdated, and you might end up having to change your app just to support the new Angular 2 syntax.
In terms of why should you not write it – “are you being foolish if you’re writing in Angular 1 because Angular 2 is coming out”, I think being a software developer requires you to pick the right tool for the right job at the right moment and I think Angular 1 is so powerful and we can do a lot with Angular 1 that you want to build the best software products that you can for today. You should be writing it in Angular 1 for sure.
Also, the other thing is that it’s not going away. People still write [inaudible] today. And there are the people who are making tons of money. [Crosstalk]
JOE:
Yeah, and let’s be honest. Angular 1 is a fortune, right? When you say it’s not going away, they [inaudible] what I hear a lot as well. It may not be going away but it’s not an act of development; it’s going to be supported for X amount of time.
I heard a friend – before I answer my thought – I heard a friend say today when I asked this question; it’s like the iPhone – nobody wants to be on the old one. They all want to be chasing the next new one the one that’s coming out on the road. The problem with that game is if you're constantly chasing the next thing that’s coming, you’ll never actually going to do anything. You’ll be like ‘wait a minute; I don’t want to use Angular 2 because Angular 3’s coming out’ or ‘I don’t want to use React 1 because React 2’s coming out’. When is it going to stop? At some point, is it about building the technology or is it about delivering business solutions for the people who are actually paying your salaries? That’s where I get back to.
ARI:
Yeah, right. Of course, you could just write in a straight jQuery; that’s not going away and people are still writing in just straight jQuery or even just straight JavaScript. And they're delivering solutions where there are lots of businesses out there that are making tons of money on their own homegrown frameworks – not using Angular, not using Knockout. It depend what you're doing it for.
WARD:
We always hear somebody say ‘use the right tool for the right job’ and I like the way you added ‘for the [inaudible] at the right time’ because that’s a really important third leg following that. Why wait for the next phone strategy? You can’t do that; we have to write up our apps today.
Yeah, we have to look ahead a little bit, make sure we’re not driving off a cliff but Angular 1 isn’t driving off the cliff. [Crosstalk]
ARI:
It’s really powerful, too.
WARD:
Yeah, exactly. It’s good stuff and the migration story has improved so rapidly from Angular 1 and Angular 2 and this starts the coexistence story has improved so rapidly there that I think one should be feeling better today about programming in Angular 1 than they did a while ago.
What you didn’t know, we had no idea about how you were going to take a massive Angular app and ever get it to go anywhere and now I think there’s a vision for that.
JOE:
Yeah, and when is that ever – if you think about that, ‘when is that happening in JavaScript land in recent years?’ And I can’t think of an example. I’m sure there is one but of when you could say, “Hey, I’m in the older version of X and I’m going to go to the next version. And we’re not compatible but yet I can actually slowly migrate and actually have [inaudible] written in the same time around the same app. In Angular, that’s going to work.
ARI:
Yeah, I can’t think of another example.
WARD:
That’s incredibly refreshing and that’s circles back to the point that you were making earlier about how it coexists with other frameworks. And it’s the same sense of it’s its own thing but it doesn’t intrude on anything else that allows it to play well with other frameworks which includes, as it turns out, Angular 1.
ARI:
Yup. Absolutely agree with that. We are – that’s one of the – we have a chapter in the book about doing out migrations specifically because it’s been requested by so many people and so many times.
JOE:
Yeah, and you may ask me as well where I’m going and the answer, really quickly, is what I would do is Angular 1 today is I am actively involved in many Angular 1 apps right now and I have no problem with that. There’s nothing wrong in building an application in Angular 1 right now. Right now, today, at the moment it’s solving many problems that our users have and that’s what we’re using.
When Angular 2 is ready, I will look to use that as well. But today, Angular 1 is tried and true and I want something that can live for a couple of years and solve problems and that’s what that is.
ARI:
The other thing is we also live right now; we’re not living in a couple of years.
JOE:
Exactly! I’m not trying to build for anything that’s going to be the hottest technology in four years; I
have no idea what it’s going to be. It might be an [inaudible].js; who knows what it is?
JOHN:
Well, that’s a killer. That’s the one I’m working at. That’s coming in any day.
LUKAS Yeah. Also, I just bought the domain.
JOHN:
Either that or flapmytechnologywings.com. [Crosstalk]
ARI:
Yeah. That was a mouthful.
CHUCK:
So, one thing that I’m wondering with ng-book 2 is how do you get your information? Because it seems like a lot of people are – they're either watching ng-newsletter or they're following the ngbook 2 – I don’t know. I bought the book, I just haven’t done anything with it yet.
So I’m curious – where are you getting your information? Are you watching the source code or is there something else to it.
ARI:
I’m kind of lucky in the sense that there’s, like I said before, there’s a team going around – a smaller team going around ng-book 2 so I can say that I contribute about a quarter of that information rather than all of it. So I can only answer for me; I can’t answer for the rest of the writers on the book. There’s actually two other writers; maybe a quarter to write the vision.
But anyway, I read a lot of the source; I pretty much constantly have [inaudible] open or e-macs open with a source code as I’m writing the book, the parts of the book that I’m writing. Where am I getting that information? Pretty much from the source.
WARD:
What parts of the source are you watching closely? What are you writing about?
ARI:
So right now the couple of chapters that are in actual development are that migration chapter – number one – also the testing chapter. So visited two parts of the source that I’m sending more and more time on – one of the nice things about Angular. But being Angular 1 or Angular 2 is that the Angular team itself is really sensitive to testing and ensuring that the source code that they're writing actually is tested and is dependable. That’s one of the nice parts about writing and testing components is that I – just by the fact that I know what’s going on and I know how I test my Angular 2 apps is really nice to force me to look at how the Angular team itself is testing its own framework.
WARD:
You're speaking my language there because that’s the area I’m also watching closely with Angular 2 and making suggestions so and so. Maybe we can talk a little bit about what that feels like after you finish your second one.
ARI:
Yeah, one of the nice things about – this is what we were talking about a little bit before we started recording. One of the things that I’m really excited about in this next version of JavaScript, so to speak, components style and development is that we can use different data findings in the front end. One of the things I’ve been sending a lot more time now is using Immutable.js to make my objects immutable. And also using one-way data binding – one-way data flows; things like RxJS for instance, which we have a chapter on in ng-book 2 in how to use RxJS along with Angular 2.
Those are the two areas that I spend a lot more of my time and my focus on with Angular 2.
WARD:
I just heard Joe dropped because he’s a big Rx fan [laughter] and I know we’re going to actually talk about that in an upcoming show. But do you want to clue us in on how you're using Rx in Angular 2?
ARI:
I’m not entirely certain how to answer that question actually. How am I using it?
WARD:
Yeah. How does it show up for you?
ARI:
One of the things I like from – this might be a dirty work; this might be a dirty phrase to say here, but one of the things that I really like from the React community is the architecture around the flux framework and the idea behind the flux framework, like data dependability and I think that that’s something that, at least personally, as our application started growing more and more complex things in the large part of Angular 1. Ng 1 they say that data in our applications was actually becoming a bigger unknown – a bigger question mark. And now that – when the flux pattern came out, it started forcing myself and a lot of my co-developers and co-workers actually started focusing on the state of data within our applications and that kind of has let us down a couple different paths including using flux and using RxJS.
One of the things that I like about RxJS is it forces that similar pattern of that one-way data flow and it makes it really easy to be able to depend on for the data ease in my app – in my particular applications.
WARD:
In an audible form – that’s what you're talking about there in terms of that one-way data flow. It may help to make a concrete. Let’s suppose take some data and describe how you get that circular one way flow, say, person or object or a collection of people or something like that. How does that manifests itself?
ARI:
Right. So specifically with RxJS or just one-way data flow?
WARD:
Just start from the one-way data flow because I – we all keep hearing how wonderful this is but I’m not sure which has been properly described.
ARI:
Since everyone in here is probably – everyone who’s listening to the podcast and everyone who’s participating in it knows Angular. And you want, at least, opposes it from an ng 1 perspective.
Say that you have an Angular 1 component, you have an Angular 1 button on the page that has an ng click assignment attached to it and you click on that bug in that button, say it pops up a login form. If you start typing your username inside the login form – this is a tough analogy actually; tougher than I originally thought.
There’s many different ways that that button could get clicked or that same information could get – potentially, that same ng model binding could get populated by data. It could either be by clicking on a button it could be by clicking on another button and that populates that data itself. And so at any given point, it could be radically unclear as to how one piece of data got into a particular state. Like was the login – is the current user to that happened because of a cookie? Did that happen because you already authorized Facebook to log you in? Did that happen because somebody already logged in through the standard login form? The state of the application where that current user person is could’ve come from anywhere. And so having one particular route where the current user information came through is actually really nice because then you don’t have to write different data migration as to the application. You can just depend on it being delivered from one point, one specific data flow.
WARD:
Well let me throw some things back at you and then you tell me. It may help to clarify because I actually think that’s a pretty good example; we’re all familiar with having to type in the username and if we use LastPass, it autofills for user type it ourselves, it gets filler or as you say could be pulled from a cookie and pre-filled for us. There are lots of ways that data could get there but behind the scenes there is – in Angular 1 anyway, there would be that one object that holds the username and that’s what’s being presented on screen.
So as you say, there are many sources or there are many ways that could be mutated. How is that different from this one-way data flow versus if I had that same situation in Angular 1?
ARI:
Right. So let’s say that we have a user service, and our user service is the thing that’s holding on to that username, at some point in our application – and this might be another rough example here – but at some point somewhere in the application, that service drops that username for a specific reason. Let’s say that we have a log – a user service – not user service has a log out function; while we’re using that user’s service in an ng 1 controller and that ng 1 controller is not bound to the service but it’s bound to the skill of that controller – that username. And the user service itself causes logout and drops that username, we still have access to that username within that controller, and the controller itself may or may not have seen that update.
Whereas if you have a one-way data flow, one-way data binding there’s a single source of truth and also a guarantee that you only have one path that you can actually end up updating that. Again, I am not specifically talking about tools here; I’m talking about the idea of one-way data flow.
It’s like you have one particular thing that can actually end up mutating that. In Angular 1, the oneway data flow would end up being something like that service where you don’t actually hold on to the copy of the controller from an ideal perspective.
If you're talking about tooling – using something immutable inside that service where anything that is trying to update that has to go through he immutable updates, you can guarantee that who’s ever calling that immutable update, you’ll catch where that’s changing across your application rather than just depending on it to be how you left it or making a copy of that username for instance. And you don’t necessarily need one-way data flow – the idea and the ideology behind it so you have this guarantee.
I particularly find it much easier to write my applications when I can depend upon the knowledge of knowing where – off understanding where that is coming from.
JOE:
So I’m trying to understand a little bit, too. So we’ve got – I hear a lot of – you known lateral? You know directional data flow – is that what we call it?
ARI:
It’s both. [Laughter]
JOE:
I don’t know – bifunctional? So we’ve got this unidirectional data flow which does make it easier to know where it’s coming from and going to, but I call BS in some of this and that’ not for you but that’s more for the theory that’s –. I don’t think that that’s the real issue; I think the real issue we have with two-way data binding is that technically, it can cause some problems, right? It can cause some performance issues, it can cause some – like in an Angular aspect, there’s dirty checking in all the libraries has it. You have to get into things like observables or whatever you want to do to make it work.
Technically, I think it’s extremely challenging to put that kind of thing in place but I think unidirectional flow helps solve that problem and make it go away, but it also introduces another problem, right? Now you have to deal with my data flowing in a certain direction so now I have to recount for what I used to get for free out of data binding. Since I’ve taken that away with two-way data binding, now I have to manage and making sure that anything that enter into a screen goes to the backing store and the backing store comes back to the screen.
I don’t think that’s like one better that the other so much as it is. You’ve got to pick your poison – what do you want to deal with?
JOHN:
What we understand about two-way data binding is not quite the issue, right? So what we understand about two-way data binding is if I go into some info box and I type that every keystroke update some data that I can view and see on the screen; that’s what we think of is two-way data binding, right? And that’s just one tiny, little aspect of two-way data binding. But that scenario solve us completely possible in a one-way data flow just as long as you're listening to an event of a keystroke, and on every keystroke you go through the one-way flow. This is no different than a button where if I click a button something changes, and then that change causes my data to be changed somewhere, then that data causes my application to update the UI in some way.
So as a button, that could be a keystroke and so in Angular 2, if – for those who watched the videos, the ng conf videos and all the announcements – there is no two way data binding. And some percentage of the user base out there says that a problem and some percentage did not really understand what’s going on, but there’s ng-click and then there’s events bindings and there’s data bindings are very different, and when they add up this whole ng model that has both the parenthesis and the squares, they didn’t add to it data binding back in; all they do is automatically listen to the keystroke.
JOHN:
Yes. And you hit exactly on my point is that it’s not the name of it, right? So when you hear – it’s like html [inaudible]. Say in html there’s the html 5 and then there’s the html 5, the marketing term. Html 5 is html 5, where as we know it by its technologist, but html5 the marketing term, it taught you a lot of non-techies. Html 5 to them means iPad; it means CSS, it means JavaScript and [inaudible]. It’s a lot of things and I think in this case, data binding between general mass technologist just means, exactly what you said, I type data in here and those keystrokes shows up over there. That’s the concept of marketing term for data binding and as long as the ability is there, I don’t think it matters if it’s unidirectional data flow or if it’s eventing or it’s data binding or what the heck it is. I personally don’t care; I don’t know about you guys.
JOE:
I agree with that.
ARI:
Yeah, so coming from an application development perspective, typing an input box and my user source as my username that I’m trying to login with and the number of times that I’ve tried to login, that doesn’t matter if its one-way or two-way for sure.
The thing that I kind of push back on that about when you said everything flow s to the same channel, and everytime that – if I can depend on it flowing through that same channel, number one, it makes testing a lot easier. I don’t have to write scenarios that just can’t happen because data’s coming in from some other way.
JOE:
Yeah, I agree.
ARI:
And also when the application say I can have ‘undo’ in my application pretty much for free, which you don’t get with two-way data binding, at least not with a lot of hacking; or you have your own ‘undo’ manager which is kind of – I’ve done that in the past and it ends up always just being a giant hack.
WARD:
Why is it for free, huh? How is it for free?
ARI:
You keep track on the changes because you have one way to actually end up updating this data than it – it’s just a matter of replaying and undoing those changes.
WARD:
And you can do that in Angular 2? Were you lessen – I type the keystroke into the username box – where do I lessen to undo those? Don’t I have to write code to do that?
ARI:
I’m talking about the theory of one-way data binding; I wasn’t necessarily talking about the actual function of binding.
WARD:
Okay, because I always have a problem with the difference between theory and practice. Because I’ve never had a problem holding the original version in my pocket and having – and if you hit cancel it replaces – it has a copy of the original and restores it. I have a problem with that.
I have the clue that where you're going, like you say, there might be one channel except that I don’t know where that channel is. I don’t know how to get involved in that channel.
ARI:
So if you have something like – RxJS is really nice for this because anytime that something updates, you can copy the changes and those changes propagate. That’s at least for Rx; that’s one of the ways that I use it.
And the other thing is if you end up having a crash; if there’s a bug in your application and you're looking for how a user got into a particular screen, having access to that – having access to the stuff that your data took to get to that particular bug is so nice. It’s so nice to walk through a crash log being able to replay everything – every step that that user took because there is a single source of data store for your application data.
JOE:
You’ve actually have that experience, Ari?
ARI:
Oh yeah. Absolutely.
WARD:
Is that that big in Angular 2 or are you programming that in through one – [crosstalk].
ARI:
No, no. I use Rx with that. I’ve also done that with React Native which is really nice when you're dealing with a mobile app; you're trying to catch these data inconsistencies. So both – I’ve done it; I have it in Angular 2 like I said through my RxJS data store and it just makes it so – ugh, it’s just so much better! It’s so much more refreshing to be able to hit play on my application, so to speak, and see where that crash occurred, or walk through the last two or three or four steps that that data took to get.
WARD:
Yeah, that’s be nice. That’d be wonderful to see that illustrated and also to see how easy it is to make that a general part of my application.
ARI:
Yeah, that’s probably actually a good post you should do on ng-newsletter. Let’s go ahead and write that one down. [Laughter]
JOE:
That’s great; and I think we’re all kind of getting this. We all want the functional ability in our applications with Angular 2 to get to these kind of things, but what I don’t want – personally, I’m not willing to do is go back to what I use to do in the early days of jQuery which is to wire up an event for every single thing I have to do and put a lot of code in there to make it all happen because I don’t think we need to be there now.
In Angular 2, form everything I’ve seen, while there isn’t true two-way data binding as you have said, there are mechanisms in places that give you that feel that’s why you don’t have to do a lot of work.
ARI:
Yeah, I didn’t mean to suggest that that –.
JOE:
Oh, no, I didn’t think you did and I’ll be clear for our listeners. I didn’t think you were going there; I
just wanted to make sure that everybody understood the [inaudible] because we were getting kind of deep technically.
ARI:
Yeah, that’s a really good point. That’s one of the reasons you use our frameworks in the first place.
JOHN:
Yeah.
ARI:
We don’t end up having to write those. How the data actually gets to the screen, it gets updated, he says because that’s the whole job for hazing something like Angular. I don’t [crosstalk] for sure.
JOE:
One of my early days on a [inaudible], I was doing Knockout version 1 a couple of years ago. We talked about that one being only on Knockout 2 so I guess. And I remember doing a demo and it was in a very heated room where a lot of people were like – they were ready to just throw me out the door. They’re like, “What are you trying to do with html 5 and JavaScript? Let’s go back to our example and server paging.” And I told them, “How would you get these 40-fields of data out of an object and how them on the screen and then get them out of the screen and put them back in the object?” And it was basically reading all the data, setting each input yields to selectors in jQuery to every single info box. And then when a button is pressed or an event is keystroked, taking all forty fields again and then pulling it back into an object. We’re talking about 40 lines for each ways; you’re talking 80 lines of code and then you show them how to do that with some kind of a binding mechanism which is really what we’re writing up with.
And that’s what we have now in Angular 2 as well. You're pretty much writing node code to get that to happen which is much easier to deal with and much less lucky.
ARI:
Right.
JOE:
And that’s when they started throwing me out of the window. [Laughter]
WARD:
Well, this is a story that really – with claims about one-way data flow. It’s a story that needs to be told. I have seen many attempts at it; almost all of them mischaracterized what’s going on in a normal Angular app. I see it over and over again. They describe problems that don’t actually exist in Angular 1 apps, and then they go on to say, “See how much cleaner this is?” And of course the cleaner thing that they show, it doesn’t begin to have the complexity that they were illustrating as a problem in Angular 1 not because the complexity is in the framework but for example –.
Let me stop doing it that way; let me just say it like this – they will show – a typical example is this – they will say, “See, when you have all these models and all these views crisscrossing each other, talking to all these model elements; what a mess –,” they say. This all goes away when we use one-way data flow. And then they go and they show a single view talking to a single model.
Well that’s not – A, that’s not. [Laughter] the first thing wasn’t correct anyway because nobody does that. Nobody writes five views that are crisscrossed to five models underneath – nobody does that! If they do that they’re nuts and you're not going to be able to stop them. So that was the ludicrous example of critique of the way it’s done.
But what’s worse – almost as bad – is that they didn’t say ‘see all that chaos over there? Look at this view in one model.’ And that’s stupid because you're – the problem that you're trying to contrast with is five views, five models and you're trying to tell me that it’s simpler because you got one view on one model, of course, but you're not – it’s not [inaudible].
So what we really need here is somebody to lay it out, show why in an instant this is your – with an apples to apples comparison and make it really clear what’s going on and where that flow is and where that flow isn’t under the Angular 1 world that we know today, and then I think the world would understand what everybody is talking about.
Until I see that, I’m not buying it. And I don’t think the world is buying it. Forget about me, you don’t have to convince me. I don’t think – the rest of the world is up there saying, “I don’t know what you guys are talking about. Just don’t know what you guys are talking about. And it’s pretty clear to me what you guys are talking about because if you can’t lay it out in a clear example, you don’t know what you're talking about,” and I think they got a point. So Ari, as a writer, this is an opportunity.
ARI:
Oh yeah, that’s what I’m hearing, right?
WARD:
It’s a big opportunity because this story has not been told. There have been stories told about it but they're all, as John called it, BS. I’m looking for the real story.
JOE:
Yeah, and to be very clear it might sound like we’re – we’re all passionate about this; nobody here is jumping on anybody. What this is all about is were a bunch of technologists and we’re all deep in the technology and the one thing technologists are pretty bad at besides being social animals with graces is telling good stories. We tend to talk about the nitty-gritty details in the coolness factor, what we often forget to actually explain – if you do this, this is what you’ll get and this is why it’s better, and that’s what we really need to be told here.
WARD:
And I think the story – there’s a story to be told there for why Angular 2 is going to be better. I’m already – as I have experienced it, I think you're probably [inaudible] that sometimes one of my problems is that I’m always talking to Angular 1 people who have, in their heads, how they think it ought to work and I have to clear that away before I can get to one of those.
But if I can talk to somebody new – and I didn’t have to reference what Angular 1 was like, I get this feeling like I could talk about Angular 2 concepts and constructs in a way that was pretty simple. I don’t have 27 varieties of directive. I don’t have 27 flavors of templates and text. I have just a couple of way – there seem like there are more clear roots to how you program in Angular 2 without feeling like you're hand-cuffed and I think that – I hope that’s a story you can tell [inaudible] book.
ARI:
Thanks. Yeah. Hopefully that is what we’re telling. You mentioned that you bought it; please give us feedback or if you want more of one thing, let us know. That’s why the book itself is as good as the original book; that’s why people like it is because we do –. I suspect a part of why people like it is because we are focused on what people want in the feedback that we get.
WARD:
Yeah, and I’ve got your books, too, Ari. It’s actually phenomenal. It’s really good; we use it a lot in our office as a reference point. I think you’ve done really good job at Angular 1 explaining where and why and how to use things as opposed to just some books which go into ‘here are the features and here’s what they do’. That’s great, but you want to go beyond that and say ‘this is when you do it, why you do it and how it works’.
ARI:
Thanks, yes. It’s not always easy to do that. [Chuckles]
WARD:
I like it, too. It’s holding on a corner of my couch right now. [Laughter]
ARI:
I think you're speaking to the size of it. [Laughter]
JOE:
Do you know how many books I’ve purchased in the last two weeks? Technical books? Two. I’ve purchased two technical books and ng 2 is definitely one of them. Very awesome a fan so it’s good.
ARI:
Aww, thank you.
JOHN:
So tell us – can you, in a moment here, can you tell us a little bit of what your testing experience is because you said you're deep into the [inaudible]. Tell us about it as quickly as you can.
ARI:
That’s a good question; I didn’t expect it. I actually don’t know how to answer that – how has it been? I like testing it so I feel like writing and test with Angular 2, it has been a little trickier to figure out how to do that. But I think that comes from – [crosstalk].
JOE:
Trickier than Angular 1?
ARI:
Well it was trickier because – [crosstalk]. That’s exactly what I was going for.
JOE:
I found a lot of people that did test with Angular 1 and I’m trying to think of something trickier.
WARD:
It’s up there in the trickiness factor – Angular 1 is and I think Angular 2 is actually, in my limited experience with it, it’s going to be easier. [Crosstalk] But right now, there’s some rough edges to the support that Angular is providing to make it easy for you to write your test. So if you were looking today, you might say, “Wow, you’re making me jump through six hoops,” but I think the hoops are – they're going to get down to one/two hoops, and when they get the number of hoops down, it’s going to be a lot clearer, at least that’s what I’m fond.
ARI:
Yes, that’s where I was attempting to go but you said it much clearer than I did.
Yes, I totally agree. So I found it a little bit tough to fully finish answering your question; I found ti a little bit tricky in the beginning and by the time that it actually gets out in wide views, it’s going to be a lot easier. And you’re right, teaching Angular 1 controller testing is probably one of the most painful things in the world.
WARD:
It really it; it’s this mysterious –.
JOE:
Directives would be worst.
WARD:
Their directives are really bad, too, and I’ve just written a couple of Angular 2 tests in which I’m trying to focus on the interaction between, in my case, a controller and a thumb but I guess it would be the directive and the thumb and it just – it seemed more clear to me what to do. It didn’t seem like there are 20 different ways to do it.
ARI:
Yeah, it’s definitely getting easier for sure. Going to get easier.
JOE:
I know we need to wrap up soon but we already discussed your book is – what’s the state of it?
When is it going to be released? Is there a beta version that people can go look at?
ARI:
There is, thanks for asking. Ngbook.com/2/ is the site. You can grab a pre-release. We’re aiming to have it done in the next three minutes or thirty minutes – [chuckles] Whoa!
CHUCK:
Wow. Boom! Is that?
ARI:
Yup, there it is.
JOHN:
Is it ng-book.com?
ARI:
Yeah, I’m sorry. It’s ng-book.com. it will be done in the next two and a half minutes – no, we’ll have it done in the next three weeks so you can grab he bet version today and –.
JOE:
And everybody who listens to this podcast gets a free copy! No. Okay. [Laughter]
WARD:
They’d do for the next two weeks. [Laughter]
JOE:
We’re probably buying them a free copy.
JOHN:
Love it.
WARD:
We’re ready for picks, aren’t we? My pick is the book you can’t yet have for the framework you can’t yet have. [Laughter]
JOHN:
We cut off Ari – you were saying something?
ARI:
Yeah, listen at @ng-newsletter on Twitter where we’ll post a discount code for all of the listeners here.
CHUCK:
Alright, cool. I have another question but we don’t have time for it so I will just save that.
ARI:
Okay.
WARD:
So next is [inaudible].
ARI: you’re going to tease us like that?
CHUCK:
Okay, so here’s my question I’ll ask but anyway – basically, we’ve been talking about Angular 2 for a very long time, like a year longer than a year, and I was just wondering a lot of people that I’m talking to, they're just like, “Well, I’m just going to wait for Angular 2 and use some other framework in the mean time.” What I’m wondering is if we keep waiting for the beta to come out, how long is it going to be before eventually people who are in on Angular start moving away and we start losing them, too.
ARI:
Like how long is it going to be – [crosstalk].
CHUCK:
Yeah, I just wonder if it’s an alpha in December or March – if it’s still an alpha, are people stop going to take it seriously already?
ARI:
That’s a really good point. That’s something we have to bring up to the Angular team [inaudible]. I think we – all developers – want to hold on to our baby, right?
CHUCK:
Yeah.
ARI:
We never want to see it pushed and fail out of kindergarten so to speak and I think that if we keep doing that, pretty soon your startup runs out of money if you don’t have a product that you can charge for. Just like your framework loses an audience if you don’t have a framework. But that being said, Angular 1 is still really powerful. We use Angular 1 a lot; our production – we don’t actually have any production Angular 2 apps. So it’s a really good point and it’s not something that I
can’t answer for sure.
CHUCK:
It’s just something I’ve been thinking about and I worry about sometimes. Anyway, let’s go ahead and do picks.
John, do you want to start us with picks?
JOHN:
Yeah, so one pick I’ve got is – it’s great right now that people are starting to get interested in Angular 2 lately, the betas. The alphas have been solidifying a bit and the Angular team and a lot of your guys here on the podcast have been hosting hack-a-thons in different parts of the country and the world. And my pick right now is a local one. We’re doing one here in Orlando on October 6 where we’re going to have a hack-a-thon and we actually only sold out a – wee sold out in about seven or eight minutes.
So I think my pick is go ahead and start a hack-a-athon in your area. Go ahead and see if you can get a bunch of people together and hack out on Angular 2, provide some feedback to teams and start getting used to using it.
CHUCK:
I like it.
LUKAS I like it, too.
CHUCK:
Joe, what are your picks?
JOE:
I’m going to pick because it’s the week that new shows are coming out on TV, at least the start of this week, although by the time this airs it would have been a little while ago but new shows –.
JOHN:
I know what you're going to say; you're going to tell them they should all see the new episode of Dancing with the Stars. I knew it!
JOE:
[Laughter] I’m a big fan of Paula Dean. Was she on it? I swear it has some article issues on Dancing with the Stars. Anyway –.
ARI:
You wouldn’t say The Muppets because I agree – totally agree.
JOE:
I haven’t watched it yet; did you like it?
ARI:
I haven’t watched it yet either.
JOE:
Aww, but I like the old muppets; I really hope that it’s as good as the old muppets but I haven’t watched it yet. Thought the one show that I have watched so far is Big Bang Theory so I’m going to pick Big Bang Theory because it’s an awesome show.
The other thing I’m going to pick is a comic book. I’m not really a big comic book guy; I’ve read very – I’m sorry, graphic novel. See, people love [inaudible] and have become a big graphic novels are probably flipping off their iPod right now or phone.
Wolverine:
Old Man Logan and it was really fun and it was a great read. And I highly recommend it so that’s going to be my second and final pick is Wolverine: Old Man Logan. If you like mainstream superheroes at all, it’s a really cool story. Extremely graphic; don’t get it for kids.
CHUCK:
Very cool.
JOE:
Oh wait, wait, wait, wait! I have one more pick. In the spirit of John, do hack-a-thons, we started up a meetup specifically for developer to go and play board games at local board game store and socialize. We have tons of meetups that are about going and doing technical things, but we don’t have a lot of meetups for developers to just network and socialize in a fun environment, and a lot of people like board games; it’s very popular, especially among developers. And it’s also an opportunity if you have a significant other to bring your significant other. And so we’re having one; we’re actually hosting our first event tonight. And so that is my pick is to startup and meetup for board gaming for your local developer community.
We [inaudible] specifically in the JavaScript community here but corset really doesn’t matter, whether it’s generic or not. But go and do that and give yourself an opportunity to socialize and network. Now I’m done.
CHUCK:
Ward, what are your picks?
WARD:
Well, I thought I didn’t have one but then I realize after this last couple shows that it was to re-read Samuel Beckett’s Waiting for Godot in which Vladimir and Estragon wait endlessly for someone named Godot. That’s my joke pick; I have no serious picks. [Laughter] It’s a great play though.
ARI:
Yeah, it’ a good one. Waiting for Guffman is a great take on it, too.
WARD:
Oh, that is so funny! That would be a second pick. Love that.
ARI:
There you go.
CHUCK:
Alright, well I’m going to go ahead and make a couple of picks here. The first pick I have is iOS 9. I’ve got an iPad mini 4 and so I actually – doing the update gets me some features like doing this side by side, picture, picture and all that stuff which is super nice. And then there are just some other enhancements to it that I really like on both the iPhone – I have an iPhone 6 plus and on the iPad and so I’m going to pick those.
Another pick I have is I just found out that you can program the Pebble Watch with JavaScript and I didn’t know that. And I don’t know why I didn’t know that but I didn’t know that so I’m going to pick Pebble.js which is a programming system for the Pebble Watch. I have a Pebble Time Steel so yeah, those are my picks.
Ari, do you have some picks for us?
ARI:
I do, I have two and then I think we got to call it. If you’ve never used e-macs before, spacemacs is an awesome way to get involved in it. If you're interested I tried – I’ve used e-macs for a long time and [inaudible] them for a long time and e-macs itself is pretty awesome. Spacemacs itself is even more awesome. That’s my number one pick.
My number two pick is if you are interested in learning and using ocr – object character recognition. It was computer vision. There’s a project that I’ve been playing around with called open-ocr which is a tesseract API and it’s really fun. It really helps a lot and it uses –.
WARD:
Is that the same tesseract as the Avengers movie?
JOHN:
Yeah, that one. It is –.
ARI:
It is; you're in. Alright, this has been fun, guys!
WARD:
Thanks Ari!
JOHN:
Yeah, thanks Ari!
[Hosting and bandwidth provided by the Blue Box Group. Check them out at BlueBox.net.]
[Bandwidth for this segment is provided by CacheFly, the world’s fastest CDN. Deliver your content fast with CacheFly. Visit cachefly.com to learn more]
[Do you like to join a conversation with the Adventures in Angular crew and their guests? Do you want to support the show? Now you can. Go to adventuresinangular.com/forum and sign up today.]