235 JSJ JavaScript Devops and Tools with Donovan Brown and Jordan Matthiesen

00:00 2906
Download MP3

00:50 Intro to guests Donovan Brown and Jordan Matthiesen1:14 Javascript and Devops3:49 Node JS and integrating with extensions11:16 Learning Javascript coming from another language15:21 Visual Studio Team Services at Microsoft, integration and unit testing


Charles:        Hey everybody and welcome to JavaScript Jabber. This week on our panel we have AJ O’Neal. I’m Charles Max Wood from Devchat.tv. We have two special guests this week. We have Donovan Brown. Donovan: Hi, I'm Donovan Brown. I'm a senior devops program manager here at Microsoft.Charles: We also have Jordan Matthiesen. Jordan: Hey, I'm Jordan Matthiesen like you said. I'm a program manager on the Microsoft Visual Studio team working on JavaScript Mobile Developer Tools. Charles: We’re here at Microsoft Ignite. This is our second take so I won’t make the same mistake. This is a conference for IT pros.Jordan:         But I liked correcting you.Charles:        I said it was about devops. That’s essentially what we’re going to be talking about here at JavaScript and devops. The question I asked earlier, and I’ll ask it again, is JavaScript is kind of everywhere. It’s in mobile, it’s in the web, it’s in all kinds of other stuff. I keep seeing it in IoT. Is devops for JavaScript that much more complicated because it’s everywhere or is it simplified to whatever case you’re using it for?Donovan:     It depends on what case you’re using it for because I am a big proponent of unit testing all the code that I write. NodeJS is a piece of cake for me to unit test the devops pipeline. Mocha and Jasmine, very easy for me to run those in the pipeline. But when I start trying to run JavaScript test in a web browser, like in that context for web development, it’s a little trickier for me to get that to run the same way. JavaScript like we talked about earlier has a unique set of challenges when what tools are you going to use, how you’re going to test it, how are you going to get the code coverage out of it using something like instant bull. How do I get that incorporated in my devops pipeline? It’s not impossible, it’s just a different set of challenges. Like I said earlier, I try to take devops and apply it to every type of software development I can so I can get the benefit of devops through that pipeline.Charles:        I know Jordan that you work on Visual Studio Code, I think it’s what you said and you’re involved somewhat in Cordova and things like that and Microsoft. How do you look at that where you’re building tools and working on mobile and things like that? How do you look at devops with JavaScript?Jordan:         Similar in a lot of ways. First, from my perspective, I’m definitely not a devops expert quite like Donovan but from our perspective like with our Visual Studio tooling, we’ve got some continuous integration tasks and things where you can check in your Cordova project and get a build and deploy that build out. You can tie it in with the HockeyApp service and be able to deploy the app from a fresh build out to your beta test user base. It’s the way I look at where we tie in with devops is my tooling around the coding and the checking. After checking, you have the continuous integration flow, continuous delivery type of a process.AJ:                So you’re working more from the developer at this inner loop of actually writing the code?Jordan:         Right.AJ:                It sounds like what your tools are doing is making sure that when you hand that off to your CI system, the task would build it but at that point it’s kind of like okay, the black box, get the devops out and do everything else on the other end? Is that right?Jordan:         Right.AJ:                More developer focus on that point.Jordan:         Right.Charles:        Let’s just focus on Node for a minute. It seems like a good place to start. It’s a pretty common and pretty popular platform. People are doing all kinds of things with Node. I think AJ does a lot of stuff with Node for his start up and things like that. For somebody like AJ where you’re working on backend systems that have Node or you have systems that you’re deploying out elsewhere across the internet with Node, how should he approach some of these processes that you work in day in and day out?Donovan:     I think the tools that Jordan work on is going to make his day to day offering of the code easier but if you’re asking about the delivery of that code, it’s the same. I’ll define it again for your users in case they don’t watch both shows. Devops is the union of people, process and products to enable continuous delivery of value to your end users. I didn’t say anything about languages. I didn’t say anything about platforms because I don’t need to. It doesn’t matter. If you’re trying to deliver matter to your customers, that’s the goal. Doing that with Node JS is no different than doing it with C# or vb.net. It doesn’t matter.Charles:        It’s just more fun because it’s JavaScript.Donovan:     Exactly. What it allows us to do is basically take the tools that you are going to use. You’re going to use Node JS. What do you use for testing? Are you using Mocha? Jasmine? What are you using? Because hopefully you’re writing automated unit testing. I don’t want to call you out here and all your customers are like, “He doesn’t do unit testing.”AJ:                I do testing kind of on an as needed basis. I’m the worst person in the world. Not the worst.Donovan:     I doubt you are, I know the worst. You’re not him.AJ:                I tend to just write a couple of files that have the test cases that I’m in and exit with status one if it’s bad and exit with status zero if it’s good.Donovan:     You’re not using a framework for unit testing, you’re writing your own code.AJ:                Yeah.Donovan:     Got it. Got it. I’m a big proponent of Mocha. I’m a huge fan of that testing framework. It allows me to use BDD when I’m writing my test cases and it works really effectively when you’re using something like Gulp to run them all the time whenever you’re doing your interloop. Obviously, running them as part of your devops pipeline is also a piece of cake. I’ll usually tie that in with sign-ons so I can get my mocking and then obviously I bolt on Istanbul at the end. It gives me full code coverage. I’m a huge fan of code coverage. I know better than to believe 100% means no bugs but it helps me strive to make sure that I have good code coverage in all of my test. What I’ve been doing is tying that into my devops pipelines as well because I don’t want a Java developer to say, “It’s too hard to do this so I’m not going to do this.” I find ways that we can improve our products to make sure that it’s easy for everyone even if you want to do Node or Jasmine or whatever case it might be. It’s the best practice regardless. Everyone should be writing unit test. I won’t accept any excuse on why you’re not writing unit test. It’s a fallacy if you think you’re faster doing it without it.AJ:                First, I want to understand more about what you do with Node JS because you were saying earlier when we’re talking downstairs that you enjoy playing with it, you do a lot with it these days. Tell me about what you’re doing and then I’m going to ask you some questions about what I’m doing as well.Donovan:     Perfect. I wasn’t a huge fan of JavaScript. Again, I don’t like the loosely type languages. I come from a C background, then I learned C++ all strongly tight, all really secure but then I joined the Visual Studio Team services team and you have the ability to write extensions for Visual Studio Team services. Our build system works on Linux, it works on Mac and it works on PC. For me to write my extension once, the same challenge you have for mobile, I had to choose a language at that time that went across all of them. JavaScript is everywhere. Fast forward a year, now we have PowerShell on all three. I could’ve chosen PowerShell but at that time PowerShell was not an option for me to be able to reach all three platforms so I chose JavaScript. Our engine understands Node JS so that’s how I got introduced to Node JS. I had these tasks that I wanted to write and I wanted them to work on all build systems no matter what language or what platform they were. That’s how I got started with it.AJ:                Quick question. Node JS, Microsoft now has a Chakra version. Is that production ready yet?Donovan:     That’s a good question. You asked me that downstairs and that’s not the version that I’m using so maybe you can answer that.Jordan:         I haven’t heard a go production yet on that one so I don’t know of any change of status on that. I’ve seen the same thing as you, the Chakra, the pull request that could work on that space.AJ:                Donovan likes cars, I like my V8 engines, it’s good.Donovan:     I’ve just been using straight go to Node and download it and install it and use a username from the command line. I haven’t used any other flavors of that but I’m curious now. I’ll probably go and do some research to see what that’s about.AJ:                I know the max support. There was just a pull request. They got merged in. I haven’t tried it yet but I’ve been waiting for that to happen because I actually want to use Chakra and find out how it works. Anyway, I didn’t mean to sidetrack. I’m just curious and that came to my mind.Charles:        Also, I tracked the listener really quickly. A build we talked to the team lead Remi I think is his name. Go check that episode out if you’re interested in Chakra and what AJ is talking about because we interviewed him there and it was a great interview. Anyway, go ahead.AJ:                You were telling me about what you’re doing with Node JS and how it integrates in the extensions.Donovan:     Visual Studio Team services, you can write build tasks, release tasks, you can write widgets. A lot of what you saw me demo in the keynote, the second demo that I did, you can extend all of that yourself. You can use JavaScript to do a lot of that extension. Node is what I use because that’s the platform that I chose simply because a lot of what I was doing, I want it to run on like I said, Linux, Mac and Windows and at that time Node was the best answer for me. I’m just kind of stuck with it because it is extremely powerful. It’s all asynchronous and it changed the way I think about code because everything is asynchronous now. There’s callbacks for everything and at first I hated it and now I’m starting to understand and I’m trying to change my thinking and I see the power in it. My extensions are great and I have a lot of fun with it now. I stuck with it.Charles:        Even if you are writing code, do you think asynchronous? Just the nature of everything, talking to everything, you can’t always count on it. It’s interesting, you’re saying, “Yeah. I’d like it to be synchronous and simple.” But it’s not always that way.Donovan:     But now I’m starting to look for things that I can do in parallel that I didn’t used to do before. I used to always think, “Okay. I’m going to go download this file and the I’m going to go parse this file and then I’m finally going to go do this.” Then like, “Hold on. This has nothing to do with those other three steps. I can literally just go do both of these at the same time and then let this guy catch up and then glue them back together.” I was working on a Yeoman task recently, a Yeoman generator. I can’t say anymore for that because it’s a special thing I’m going to do at Ignite in New Zealand here so I can’t spoil it too much but I realized that I could speed this up because so much of that could have been done in parallel which Node makes so easy to do, whereas before it has been very difficult for me to realize that, “Oh, I could parallelize this.” Now it’s going to be hard for me to parallelize in another language. Node is like, “No, we do this by default.” It’s harder for you to do this serially than it is for you to do it parallel when you’re dealing with Node. Just changes the the way that I think about things but once you get over the hump, I’m a crunchy old man, I can’t believe we’re doing mark down. HTML was good enough for me but now everything’s marked down. I remember using TFVC now everyone wants to use Git. When I went to Node, it’s like, “Damn it. Really? Do I have to go onto something else?” I didn’t even want to learn it. And then now I’ve gotten over that and then like, “Okay, I get it guys. This is pretty cool stuff.”AJ;                That’s one thing I wish more people in the JavaScript community would learn JavaScript because I see so many people coming from whatever community they’re from and just try to turn JavaScript into that language.Donovan:     I remember this story. It’s like the worst C++ programmers are C programmers because the C programmer, everything works, “I’m now a C++ programmer.” No, you’re horrible. You don’t understand OO at all and because everything that you used to do still works, you think you’re now a programmer. I can completely get where you’re coming from. It’s like, “JavaScript is so free and so flexible.” I can almost do that. Wherever I come from, I could probably make JavaScript feel like I want it to which probably isn’t the best way to use it.Charles:        The other aspect to that is the React programmer or the Angular programmer that comes in and doesn’t know JavaScript. They just do everything by example. They pull code off of stack overflow and then when something really tricky that is something they have to do, they look at it and go, “Now what?”Donovan:     It’s learning the fundamentals. I remember when I learned how to program in Windows development. I learned Win32 before I learned MFC and MFC programmer was basically confined by what the MFC framework provided for them. If you didn’t know Win32, you would eventually get stuck. We haven’t implemented that new feature yet but because I knew Win32, the core underneath MFC, I had no bounds on me. I would use the convenience of MFC when it worked and then I would drop down to the lower level and that meant learning that development out of completely different level. I think that’s what you’re saying with JavaScript. Learn JavaScript first, don’t worry about Angular yet, don’t worry about any of these other things, Node even, because that’s just an implementation of it.AJ:    Node, you can write JavaScript in Node like you can write JavaScript in a browser.Donovan:     Sure.AJ: The difference being like JavaScript versus CoffeeScript or Elm or NativeScript or TypeScript or Asterisk, whatever you want. There’s a new one every week these days.Donovan:     The funny thing is I don’t use TypeScript, I get a lot of crap at it working at Microsoft but I don’t use it. To me, that’s just another level on top of something that I want to understand. I think if I’m really good at writing JavaScript and I’m really disciplined in my architecture, I don’t need those. It’s weird coming from a C++ programmer. You would think I would be dying for that strong typing and the protection that it gives you. But again, being old and not wanting change, I’m like, “It’s just something I got to learn.”Charles:        Donovan, I thought we could be friends.Donovan:     I’m waiting to be convinced, man. Every time, what ends up happening is like, “Okay, I’m going to learn it this week.” In an hour, I’m like, “Damn it. I’d be done already. If I wasn’t trying to figure out how I get all this tooling work, how do I get individual studio code in the trans compiling work?” And then like, “Screw this. I’m just going to go back.”AJ:                You hit a point that we got to circle back around to with the tooling because what you’re talking about is that you’re throwing out things that I’ve heard the words but I’m not familiar with them because I haven’t used them. I tend to develop very, admittedly, a little too simply. I could add some tools to my stack but I try to develop in them without any automated process in place, just like I write code and I write tests when there are functions that have inputs and outputs that I can easily test and other than that I do more on the integration route where I’m testing the API to make sure not that all the individual functions necessarily work but that the loop works.Charles:        AJ is our purest on the show.AJ:                I used to be one of those people that liked all the latest and greatest but I just got to a point…Donovan:     You can’t keep up, man. It’s exhausting.AJ:                You can’t. And then it’s like, “Forget it all. I just want to go back to F5, refresh, oh it works, awesome.”Jordan:         But JavaScript Fatigue was like a serious freeze last year especially right.Charles:        We did a show on it.AJ:                We’re jumping all over the place. What is Team Services? You said you’re integrating with Linux, Mac and Windows. When I hear Visual Studio Code, I understand that runs everywhere. It’s like built on electron which is the same thing atom is built on. I get it and I’ve seen it. I’ve seen people use it. I love it. Visual Studio Team Services, all I heard was Jabberwocky, Jabberwocky.Donovan:     Let me frame that one for you. Team Services and its long name is Visual Studio Team Services. Most of us inside of Microsoft either call it VSTS or Team services because the name is just too freaking long. I use them all interchangeably. It is your source control, your continuous integration, your continuous deployment, package management, work out in tracking, bug tracking, it’s everything that you need to turn an idea into a working piece of software. It works for any language targeting any platform which means our build server, the actual guy who does the heavy lifting of your build, must run on a Mac, must run on Linux and must run on Windows otherwise my statement of any language, any platform is FUBAR. It’s not, it’s true. That’s why I was saying I had to learn Node because at that time that was the only way I could get to all of those three platforms and I have to rewrite my task and rewrite all my extensions over and over again. That’s Team Services. What I do with everything that I write, Mocha, if it’s Node or if it’s C# or if it’s Java, I use Team Services to give me that devops pipeline, that continuous integration so that I can take whatever it is that I’m writing and get it to my users as quickly as I possibly can. Said it in the other show. I apply devops to everything that I do because it simply reduces friction and increases my velocity and my quality.AJ:                Let’s break that down into a simple product that I’m going to ship out to customers. What kind of product are we talking about that we’d be using with Team Services? Like an API service or like a mobile app?Donovan:     Great question. Everything you write, because everything that you write eventually has to get to a machine that it can be used by your users.AJ:                Earlier you were throwing out Istanbul, Mocha and there’s a couple of other ones in there. Can you give an example of an actual application that you’ve done and where those fit into that process?Donovan:     Absolutely. New Zealand would be awesome. I’m actually going to show what I’m about to tell you on stage at New Zealand. It is a Node JS web app, not a web service, a web app, full blown UI. I can’t remember what framework I’m using for my tippling of my website but it’s a full-blown web application. It’s an MVC which means I have controllers. Those controllers are really easy to test. That’s one of the good thing about MVC, that pattern, it’s really easy to test your controllers. I need to unit test these which I use Mocha for. If any of these unit test was to call out to a web service or to a database, during a unit test you should not actually call out to that database or to that web service. You should isolate this particular piece of code. I use sign-on. Sign-on is just a mocking framework that can fake out my other code that make it think it’s calling that database or it’s actually writing to a file on the hard drive on the hard drive but it’s truly calling this mock that I created.AJ:                With Angular, there’s dependency injections. Doing something like that, I totally get because you can just inject the fake request but with Node you have require and if you require request and request is calling out to the service, how does sign-on help with that?Donovan:     That’s a really good one. There’s a completely different module that you can actually add that you can fake the require as well so that you think you’re requiring react. I just did this where you think you’re requiring express. Express is a tough one because very few of us do express that Git. We don’t actually call the function, we just use the name itself and then we go ahead and do our call. But you can actually hijack the entire require to where you actually get a fake version of that that I’ve actually provided for you.AJ:                So you’re doing dependency injection by overloading require?Donovan:     Exactly. That way, I am now in control of the response that my code gets. Be it is you’re using file system, if you’re using a web service, whatever this case is. You’re really talking to another piece of code that has given you what I want it to give you so that I can then go back and assert did you behave correctly or not. The key is how do I then tie that into my devops pipeline so that if we’re working on a team, I have those same tests to run if you check in code or if Jordan checks in code or if I check in code. Those tests do run to make sure that none of us screwed up. That’s why it’s important to have something like team services, be able to take that commit, compile it and then run all those tests again because you might not have them on your machine before you checked in that change and you’ve broken the rest of us.AJ:                The system that you’d have in place with Team Services, part of it is running at your local system?Donovan:     That’s just your dev environment. That’s what Jordan does for you. He’s the guy who’s making sure that your dev environment on your local environment is the best you possibly have. As soon as you commit that to a Git repository, that’s when my team kicks in.AJ:                That’s up in Asher?Donovan:     Yes.AJ:                Okay.Donovan:     Or you can install that’s Team Services, it has a twin brother called Team Foundation Server that you can install yourself and that you get the same functionality but on your own hardware. It’s completely up to you.AJ:                That is Windows hardware though?Donovan:     Yes, absolutely. The build agent will run anywhere but the core engine, that all runs on Windows and back by SQL Server. You have to have a Windows Server for that. If you don’t want to install that, just go to Team Services. It’s literally for free. Everyone listening to my voice right now can go tovisualstudio.com and fire up Team Services and start doing everything that I’m saying for free. There’s nothing to cost to get started.AJ:                This integrates with Visual Studio Code, not just Visual Studio.Donovan:     Absolutely. Visual Studio Code, Android Studio, Eclipse, IntelliJ, Visual Studio, any language, any platform. I was preaching that in the keynote this morning. That’s why everywhere you are, we’re coming there to help you be better at Microsoft. This is the new Microsoft and it’s hard for a lot of our customers to get their head around. Sometimes it’s hard for me to get my head around. The first time I installed Linux was after I joined Microsoft.AJ:                I saw that we got a Linux booth today over, I don’t remember what section it is.Donovan:     I flew here with an Ubuntu 1604 laptop and a Mac.AJ:                The guy over the VS code, he’s doing all his demoing on the Mac.Donovan:     Exactly. I had to do half of my demo on a Mac today. It’s weird place to have Microsoft Word in your Mac.AJ:                And then you have to use it. You have to.Donovan:     Yeah. I hate it personally. I honestly don’t like it at all. I like my Linux machine and my Windows machine a lot because all my keyboard shortcuts are the same, command, options, whatever man. I hate that stupid thing.Jordan:         On your question about the VSTS using it, at one level you can look at it as if it actually is a Git repo. You can set up as Git and just do git-cli, check in and then have the server side take care if the CI process for you.Donovan:     He’s absolutely right.AJ:                Are you guys familiar with Travis? Is it a similar setup to that where you put in some configuration which version of this or that you want and it has some of the other pieces pre-installed?Jordan:         It’s a task based system to where you simply say, “I would like to build an app.”AJ:                Like Rake or Make?Donovan: Not to a level of a Make, you don’t have this one file. It’s a Graphical User Interface with a catalogue of task that say, “I want you to run MPM install.” “I want you to run Bower install.” “I want you to run a command line that compiles my Node or runs my Mocha test.”AJ:                The extensions would be the ability to add in new things it doesn’t understand.Donovan:     Exactly.Jordan:         In the JavaScript space, you could have your build script in Gulp and then over on VSTS you can set up a Gulp task to run as part of that CI flow.Donovan:     Exactly. It’s completely fixable which is why I can make the claims, crazy claims that I make that we can do any language, any platform.Charles:        There’s a five-year old in me that wants to start throwing out languages and see if you say yes to but I’m not going to do that.Donovan:     I will say yes. The craziest one I got was VB6. Someone said, “Hey Donovan, I just saw your presentation. It was awesome. We still have VB6 in our organization. How can I do all that cool stuff with VB6?” Fine. Challenge accepted. Go to Donovan Brown right now atdonovanbrown.com and read exactly how to do all this cool stuff with VB6. Hardest part? Getting VB6 to install on a modern OS. You have to stand a certain way. You have to kiss the baby and then finally it will install. And then you got to get the service pack on there. After that it’s a piece of cake. Our tooling is great. All I needed to do was call up to the command line and build a code. It was getting VB6 installed was the hard part.AJ:                Listeners, don’t do that. Just stick with JavaScript.Donovan:     Exactly. Go lying if you want to do that. If you want to do Python, PHP, whatever you want to do.AJ:                Not PHP either, don’t do that.Donovan:     I’m doing three languages. I’m not going to give that away. I keep talking about New Zealand. I’m not going to give that away.AJ:                Maybe let’s talk a little bit about Visual Studio Code. We talked at build with some members of the VS Code team and I’m sure since then it’s come a little bit of a ways. What are some of the new things in the past six months or so and tell us a little bit about the integrations.Jordan:         I work on the mobile tooling and extension. We’ve got four VS Codes. I’m not in the VS Code team to declare so I might riff a little bit on what was new but I can’t think of the exact latest and greatest on the new stuff on VS Code. Tabs were a hit coming in, the ability of putting tabs if somebody wants them or not. There’s been some new support for changing up your flavor of icons and matching some standards out there on the icons, I can’t think of the name of the extension that it was ported in but some things like that. It’s much more important changes as well.Charles:        One thing that I’m really curious about with mobile tool kits is you have visual studio code that is essentially a wrap around chromium so as you build Visual Studio Code, it’s a web application. I think a lot of the tooling is focused around web development in JavaScript or TypeScript or whatever in Visual Studio Code. What do you have to add on in order to do mobile development in Visual Studio Code?Jordan:         From my team, we’ll work on the Apache Cordova open source project. It lets you build apps deployed locally on mobile devices by using web technology. For our tooling, we have an extension called the Cordova Tools Extension. You can go on to the VS code marketplace and install that and then it will layer and support for some quick command of doing builds and running on various platforms. For example, on Android I could run straight to a device or run an Android emulator on Mac at a PC or use one of our newer features called Cordova Simulate that lets you actually run the Cordova app in the web browser but do some simulation of things like Geolocation, simulating a camera that you can’t normally simulate in the Cordova app running in the web browser.Charles:            That makes sense. It’s really interesting too. I’ve gotten to be friends with Mike and Max over at Ionic. I’ve talked to several other people that use Cordova for various things. There’s a big Adobe office near us and they have the big Cordova day over in Utah. It’s a platform that people are really using and they’re taking advantage of because they understand the web technology. It’s exciting to see somebody actually go after that and say, “Here are some tools in an editor that’s really designed for you to be able to use in these specific ways to write great apps.” I’m looking for something that’s going to get people excited to go, “Oh, let me go get those mobile extensions. And then let’s go ahead and once I have all this coming together and building on my machine and running all the tests and doing all that stuff, to hand it out to Visual Studio Team Services or whatever.” That’s what I was looking for from this episode. I think we’ve got the Team Services pretty well covered. Why should people be excited to use Visual Studio Code with mobile extensions on it as opposed to using something like the Android system?Jordan:         When you look at Cordova, the one I really look at with the framework at the top of that, the Ionic library which you mentioned. What I get excited about there is using the Ionic library with Cordova, I can build apps using my familiar HTML, JavaScript, CSS TypeScript now with Ionic 2.0 and Angular 2.0. Apps start to feel more native. They can actually get form. They’ve got optimizations in there to take advantage of the latest WKWebView on iOS, optimizing through the new stuff on Angular 2.0. I can get apps that are performing and feel more like native applications but stick with my familiar JavaScript world and not have to learn Objective-C or swift for iOS and Java for Android and be able to get that all in the one place I’m comfortable with. I came up in the .NET world and C# world, JavaScript at the same time. I like the rich tooling I got from a type language. TypeScript starts to bring in some things that can help with some quicker refactoring and stuff. It feels a bit like a native app workflow with strongly typed languages and the ionic framework to give me this richer feeling application but still stay on my comfy JavaScript land.Charles:        It’s funny because you talked about, “I came up in a strongly typed land and so I liked TypeScript.” I got into development with Ruby. For me, the JavaScript and the freeform, I’m like, “Why would you ever want types? They just get in the way.”Donovan:     Compile time errors are better than run time errors, that’s why I want strong typing.Charles:        That was ultimately the thing that got me was I sat down with a few of my friends who were doing Angular or Ionic. They pulled up TypeScript and they started using decorators and they started using some of these other features and then they hit this build step and it said this is where you’re going to have problems. I was like, “Yeah, JavaScript and Ruby really don’t do that for me.” In some ways, it’s like yes, just being able to run it raw and just do its thing is nice but on the other hand I made enough stupid errors typing crap into my computer to where it’s like, “Oh, I see. I get this check against my code.” That’s nice but ultimately what got me were some of the advanced features that JavaScript itself doesn’t have and the typing was just another nice added feature that took advantage of the extensions on my JavaScript and gave me a few more checks that were convenient. I don’t always use the typing in TypeScript. A lot of times it’s just, I forget what they’re called, they’re basic anything type. Sometimes I just use that because I don’t want to worry about it but when it’s like, “You know, I really do want to make that check,” it is pretty nice.Donovan:     I want to add in that with TypeScript, you don’t have to use TypeScript to use the TypeScript tooling. Just like for jQuery, they have the definitely typed files so that you can use regular JavaScript with TypeScript tooling. You can add JS Dock to any of your JavaScript and use it with the typescript tooling. You can get that benefit of having compile time and having some of the IntelliSense and that sort of thing without having to degrade yourself and debase to that level.Charles: I will say that some of the annotations though is just like, “I know I’m getting a number or I know I’m getting a class.” And I like having classes in JavaScript.Donovan:     I think another reason I might not go so far with TypeScript is because I unit test so much. To me, I don’t have to wait to run the app to find out I screwed up. A lot of people don’t write unit tests. TypeScript is really valuable because it tells you a compile time you screwed up. I know because I’m going to run all my tests and they’re going to tell me I screwed up. I think that’s another reason I just don’t get it yet. I definitely don’t want to get in the habit of relying on type checking and compile time errors to give me the excuse not to write unit test. I almost feel more pressure to write the unit test because I don’t have the typing to protect me.AJ:                On the subject of unit test, this is the problem that I get into and I think a lot of people do. I sit down and I’m not thinking like, “I’m writing production code.” I’m sitting down and like, “I got this problem. Scratch this itch for a minute.” And then like two hours later I’ve got a Node library that’s published in PM. Sometimes more like six hours later. And it’s like, “Oh it worked. It did the thing that I needed it to do. I’m not worried about it and maybe I’ll never even update it again except for when some weird edge case bug is found that I published 1.0.2.”Donovan:     To me, I found that writing unit test make me faster as a developer.AJ:                I totally believe it.Donovan:     That six hours it took you to publish it, maybe I would’ve published it in four hours because every time you stood up the scenario …AJ:                No, no, no, no, no. I wrote it for four hours or five hours and then it ran perfectly.Donovan:     Of course it did because you have the inputs you gave it which you expect to use it for and then when I download it and I give it an input you didn’t expect it for, I think this is a piece of crap. It was only for this one scenario. Whatever.AJ:                My random function returns for because I chose that after a dice roll.Donovan:     Exactly. If you get into the habit of it, you literally become a faster developer if you write unit test. It’s such a weird place to have to get to but once you get there, I’ll never go back to not writing.Charles:        That’s true but at the same time I found that having a good set of tools on it, I keep coming back to this too, because I have it set up so every time I save, it opens up another tab or it uses the one that was already open and it runs all of my tests in that other pane. I have those tests or Visual Studio Code. It’s relatively easy if you’ve got the test, you just say run them again.Donovan:     It’s also a plug in for that too. There’s a Mocha extension that will run them whenever you want.Charles:        Or you can use Karma or whatever.Donovan:     Whatever you want.Charles:        It’s like, “Don’t make me think about it.” Which is kind of what devops is about too but it still makes me think about it so when you have these kinds of powerful tools, it’s just so great because it’s like, “Oh yeah, I set it up once and it just does my thing.”Jordan:         What I like TypeScript when I’m going to unit test because I don’t know production code but when I do, I use TDD at the start to save me the cycle of going to look up the docs for IntelliSense. It’s a piece I love. And then my test sketching that red-green-refactor loop when I could do refactoring that are higher confidence like the renames. Typescript can make me faster there and then my test at that. I like that kind of tactic.Donovan:     It’s fantastic.Charles:        That’s a really good point with TypeScript. The refactoring’s become a lot simpler.AJ:                IntelliSense is always nice. IntelliSense is different than just remembering what you typed before. This is literally understanding the library that you’re using in making smart suggestions. Most editors today remember, “Oh, you’ve typed something that looks similar. You probably want to type that again.” No, no, no. IntelliSense is different. That is something that TypeScript really gives you this true proper IntelliSense which is fantastic.Donovan: Trust me, I keep wanting to learn. I keep wanting to learn it and it just takes me too long and I get frustrated and I’m like, “I’d be done already.” Because I just don’t get the tooling. We need to make wiring it up in getting started with it easier so that people don’t have the excuse that I have. Even in code, you have to set up the TS Config and you’ve got to set up this other file to make sure it understands that and then you got to download the typing files and then I got to remember that it’s not quite JavaScript. You gotta write it in a certain way and then time is like I’m too old man, I’m too old to learn another language. I’m exhausted.AJ:     For me, one of the issues is actually because of what I do with being in the home cloud business, I do a lot of prototyping on ARM devices. I will write code on the device because I’m doing so much networking stuff, localhost doesn’t work for what I do. I need it to actually beyond a thing that’s doing. Having all that build tool set up especially on ARM for me is part of my pain. I know it’s not the pain for a lot of people. Most people have super expensive MacBooks that has eight cores in it and run it four gigahertz each. It takes a microsecond and it’s no big deal.Charles:        That’s a handicap too where you have the MacBook pro with the fast processor with eight cores in it, all that RAM and stuff. And then my mom tries to run it on her machine.Donovan:     Because your mom is always trying to run your Mocha test and your TypeScript.Charles:        Even just my web application.Donovan:     Yes.Charles:        I have a large set of JavaScript just trying to run on her machine as a client and it doesn’t perform as well or it has some issue or she’s using an older version of a browser. I’ve gotten it all up to date because I want to make sure it works on the latest stuff.Donovan:        That’s where devops pipeline would have a lot because we did that testing for you on that different clicks and items.AJ:     As talking Utah JS, Tim Caswell was talking about how his focus is on Chromebooks. He wants people to be able to develop JavaScript on Chromebooks. Some of those are ARM processors. I don’t know if there’s any Android tablets where you can write JS on but somebody’s got an app for that somewhere I’m sure. There are legitimate use cases too where people…Charles:        I do want to get back to your point though about ARM devices where you have, essentially it’s an IoT device. It’s a computer but it’s got limited resources and people are using it for specific things. For you it’s basically a cloud server on my home network but for other people, it’s their home automation or they’re writing JavaScript against some other thing where it’s displaying information on a screen and that’s all it does. What do Visual Studio Code and Visual Studio Team Services offer me to help deal with those situations where it’s not, I mean it’s Linux I guess but it’s a resource constraint environment where I’m really trying to… I like having the nice tools around my JavaScript but I’m not really going to test it on my machine because it doesn’t mean anything.Donovan:     That part I’m not sure about. If you’re trying to do integration or performance testing on your machine it would be unfair for those of us who don’t but unit testing the stuff…Charles:        Fair enough.Donovan:     When you’re doing integration testing, you would have to find environments that mimic what your customers are going to be using. The ARM part, that’s a little bit trickier but we literally had a guide to install, that build that I keep talking about that runs on Linux, Mac and PC, they got it installed on a Raspberry Pi. Pretty much wherever you want to be, we can actually go run your code on that Raspberry Pi and then run your test to say on the Raspberry Pi it still performs the way it performed or it performs adequately enough that I’m happy with it. Wherever you want to be. I was blown away when I saw our agent running on a Raspberry Pi and knocked me out. That’s freaking awesome. It literally is everywhere it need to be.AJ:                Was that Windows 10 IoT or was it Linux?Donovan:     It was before. It was the Linux one. That’s what blew me away. That is freaking awesome. I haven’t played with the Windows 10 when I haven’t tried getting an agent on there yet but I’d have to play with it and see. Now it’s all written in .NET Core. We completely port it. We used to have two different agents. One written specifically for Mac and Linux and then the other one written for .NET, for Windows. Now they’re literally are all written in .NET Core because it runs everywhere.AJ:                .NET Core, the new JavaScript.Charles:        The new Java. That was the promise of Java right.Donovan:     It was and it never was true. It’s always right one’s test everywhere and then rewrite it again.Charles:        Yeah, I don’t want to open that kind of work.Donovan:     Me neither.Charles:        Do you provide tools? A lot of the mobile Devices are ARM devices. Do your mobile tools give you some view into some of these constraint environments or is that a completely different concern?Jordan:         Typically what I look at for that angle is the world of testing on the emulator or the devices. In my own mobile development workflow, I may have, like our teams got a few Android four one devices that are lower performance than what’s out in the market today. It’s more of backing those through testing on these devices and seeing how they run. And then you’re getting to your performance tuning best practices of using the browser tools to examine what’s my memory usage like. Not so much in tooling for that versus backing it up by what you’re testing on. I have some local devices to test on and you scale out through CI solutions to bigger formal things.Charles:        You have your system that essentially then can deploy to the Raspberry Pi sitting on my desk and the beaglebone sitting on my desk. I don’t remember, there’s another one out there that people keep telling me about.AJ:                That’s the Intel one. I think it’s an Atom processor. I don’t know if it’s an ARM.Charles:        You would just test them that way and put them on the device and then monitor them and see how they do.Jordan:         I travel down local Intel browser but there are tools out there to throttle your network bandwidth and simulates.Charles:        We’re running short on time so we’re going to go ahead and push to picks.AJ:                Can I ask one tiny question? What is the worst phone operating system that is still widely used? As in like Android 4.3. What is the troublesome thing that you’re waiting to fall away?Donovan:     Blackberry.AJ:                Nobody uses that, right?Donovan:     Some people. I don’t know why.AJ:                We’re talking like greater than 1%. At least greater than 1%. What is one of the phone platforms you’re just hoping will die?Jordan:         I think the one I hear about the most is going to be Android before 401 when it was not even the WebKit engine, it was a different browser. Now you can get around it with Cordova and sub in, this thing called Crosswalk or place it like the older versions of Android. A lot of people are dealing with those still but that’s the one that from a JavaScript hybrid app developer it causes the biggest pain.AJ:                Microsoft edge is the new Chrome and Android less than four is the new Internet Explorer 6.Donovan:     Wow man, wow. I’m glad this is almost done because I’ve had about enough of you right now.Charles:        I’m going to push to picks. AJ, what are your picks?AJ:                I’m going to pick Veridian Dynamics. It’s a great company. they make lots of wonderful products that are safe for your home and their Jabberwocky presentation is absolutely the best business presentation I’ve ever seen. And if you have no idea what I’m talking about, there’s a TV show called Better Off Ted and Veridian Dynamics is the company that it works for. If you’ve ever played portal and the Aperture Labs, very similar. It’s a joke company. Check out the Jabberwocky video on YouTube because it’s the title of lots of business talks. When you see it, you’ll get it.Charles:        I’m going to make a pick. Last time I was in Atlanta. I was here for a conference. A few folks and I, we went to Hard Rock Café. I don’t know why but I liked the place. The food is good. The environment is fun. If you’re in Atlanta or anywhere else that has one, Hard Rock Café is a pick. One other pick. If you’re a fan of the show and you want to run into me in person, I’m going to be at CES in January seeing all the new gizmos and stuff. I ran into AJ there last year. If you’re in Las Vegas and you want to get together, let me know or if you’re going to be at CES then I may wander around for a day with you.AJ:                I think it’s funny that we see each other more across the country than we do right where we are.Charles:        It’s true. AJ lives a couple of miles from me. Donovan, what are your picks?Donovan:     I pick 3D printer. We talked about that a little bit in the break. I love my 3D printer. I look for excuses to print stuff. I just wish it was faster. Hopefully they’ll get faster but yeah, I love 3D printers.Charles:        I want to fix in my car a lot and I keep thinking, it’s just a little plastic piece.Donovan:     That’s exactly why I bought one. I collect BMWs. I collect a lot of old rare ones, fantastic breaks on the old rare ones. Those parts, I found one that I couldn’t simply replace. BMW doesn’t make the part anymore. It’s just a piece of plastic so I literally bought a 3D printer for that part. It cost me $3,000 for this $9 part that they don’t make anymore but over time that will be very cheap. Exactly. I printed speaker grills also to fix my car. I love it.Charles:        A good deal.AJ:                Over the years, they’re more like Legos.Jordan:         My [00:45:26] right now got to be a thing I'm into right now where I'm getting my next year’s home gardening setup. Thinking of gardening for geeks, there’s this guy called Seattle Urban Farm Company. They got a book high-yield gardening. It’s like glorious geekiness for the home gardener looking to do mini farm. That’s probably my main, non-professional pick.Charles:        If people want to find out more about what you guys are working on or see what’s going on with your various projects, what should they do?Jordan:         You can take a look attaco.visualstudio.com. That’s where we’ve got a lot of info on our tools for Apache Cordova. taco.visualstudio.com.Charles:        Are you on twitter or somewhere people can follow you?Jordan:         Twitter, @jmatthiesen.Donovan:     All of our stuff is onvisualstudio.com. It’s also where you can go to start your own visual studio team services account for free and start playing with all this crazy stuff I was talking about and I am @donovanbrown on Twitter and I blog all the time atdonovanbrown.com. Just remember, Donovan Brown. If you google it, I’ll be the first person that you’ll see up there.Charles:        Good deal. Thanks for coming.Donovan:     My pleasure guys.AJ:                Don’t you mean if you Bing it?Donovan:     Yeah, I slipped up man. I told you I’m sticky man.AJ:                Adios.

Sign up for the Newsletter

Join our newsletter and get updates in your inbox. We won’t spam you and we respect your privacy.