Web Rush

Episode 125: Working with JavaScript on TVs and Xbox's with Todd Spatafore

Episode Summary

Todd Spatafore talks with Ward, Dan, and Craig about his experience working on the Vudu app. How do you write code for TVs and media devices? What sort of matrix of devices do they use? How do you do feature detection? And what worries Todd about JavaScript going forward?

Episode Notes

John Papa @John_Papa

Ward Bell @WardBell

Dan Wahlin @DanWahlin

Craig Shoemaker @craigshoemaker

Todd Spatafore @Spatacoli

Brought to you by

Resources:

Timejumps

Podcast editing on this episode done by Chris Enns of Lemon Productions.

Episode Transcription

Craig Shoemaker  0:04  

Welcome to web rush, the weekly talk show that brings you Stories of Real World development from industry experts, and developers like you and me. Each week, Ward Bell, Dan Wahlin, Craig Shoemaker, and John Papa, find out what it takes to write, deploy and maintain apps that stand up to the demands of the real world. And now, here are your hosts. Well, welcome back to web rush We are here at at Episode 125. Living with JavaScript. And our guest today is Todd spatter four before we get to him, though, Lord, how's it going? What do you been up to?

 

Unknown Speaker  0:45  

Holy smokes?

 

Ward Bell  0:46  

My phone is going crazy.

 

Craig Shoemaker  0:49  

That's not your your new toy there that has all the sound effects so

 

Ward Bell  0:52  

many toys to any toys? Ah, goodness. Ah, yeah, it's, it's crazy. It's crazy. I'm having I'm putting together a little studio for myself. So that I can be coming across to you all and, and it's a lot of fun playing with the toys. So the electronic toys you got to know

 

Craig Shoemaker  1:17  

where he we're hearing the benefits of it for sure. You sound you sound great.

 

Ward Bell  1:22  

It's still very confusing their buttons and wires. I don't know what I'm going to be putting on camera at one minute or the next. But it's it's fun. So, anyway, that's me. How about the rest of you?

 

Dan Wahlin  1:36  

Oh, same ol same ol here. It's so fun that Warden I after the last podcast, I think we spent almost an hour going through all the caches

 

Ward Bell  1:46  

all gauged in its

 

Dan Wahlin  1:49  

talk again. Oh, geez. you ship it all back and get all new stuff. Now, you shouldn't be the old stuff, you know, for free. That's a good idea. There's nothing more fun, though, than playing with gadgets. I don't know, I have to admit I love I missed the days in high school. I used to have a bunch of MIDI equipment. This is back before like, you know the software for recording. It was all hardware based. And I look back and go How the heck did we get anything done? You know, because if you wanted to chop something, you had to jump forward to that. Listen, figure it out on the digital thing, right then deleted. There was no like select the mouse and delete the music. And I actually went to physical address live. Yeah, cuz I would work in 16 and eight millimeter and I would physically splice the stuff together.

 

No way.

 

Oh, yeah. Work? Well, I

 

used to work.

 

Ward Bell  2:45  

I did that.

 

I did that too. You know, I am from the

 

Craig Shoemaker  2:49  

party. Well, and you know, we all started writing JavaScript on punch cards. So that's, that's definitely the best place to start. Right?

 

Ward Bell  2:56  

That's right.

 

Craig Shoemaker  2:58  

Which, which brings us to what we're here to talk about living with JavaScript from beginning to end, the good, the bad, and the ugly for it. And so I want to bring Todd in in here to join us. And Todd's a senior manager for VUDU working on the html5 app for smart TVs, and set top boxes. He's been developing software for 22 years, and is a book and video course author, Todd, thanks for joining us today.

 

Todd Spatafore  3:23  

Hi Craig, thank you very much.

 

Ward Bell  3:25  

Oh, you actually know something?

 

Todd Spatafore  3:28  

You would think?

 

Ward Bell  3:31  

Well,

 

Dan Wahlin  3:33  

well, I first have to say, Todd, that's probably the number one use that maybe aside from Disney plus, or Netflix in my family is the VUDU app. So keep up the good work, because we have a ton of videos. That's great. Thank you.

 

Craig Shoemaker  3:49  

So what aspect Are you responsible for of the app?

 

Todd Spatafore  3:52  

So I'm responsible for the front end development of the Xbox, the Xbox, the video, or the Vizio? Chromecast, LG and Samsung devices. So there's a number of televisions as well as a number of set top boxes that were responsible for.

 

Ward Bell  4:16  

And you do this all in JavaScript in HTML?

 

Todd Spatafore  4:19  

Yeah, yeah. It's all JavaScript html5.

 

Ward Bell  4:21  

Do you write it in vanilla JavaScript, like a real developer? Or do you?

 

Todd Spatafore  4:26  

Unfortunately, we're currently using a framework called mootools. Are you familiar with you?

 

Craig Shoemaker  4:34  

from the past? That's Yeah, memory man,

 

Unknown Speaker  4:37  

that is the Wayback Machine. So we're currently in the process of getting rid of mootools and replacing it with ECMO script six or TypeScript. Probably TypeScript. The only thing that we really use mootools for right now is, is classes and inheritance. So if we can just replace that with TypeScript and classes and inheritance Everything will be good.

 

Dan Wahlin  5:00  

But you know a finger to about this whole dealing with living with JavaScript, because I'm guessing from a maintenance standpoint, that could be pretty challenging, right?

 

Unknown Speaker  5:10  

And it's quite challenging, especially when you get new employees come in. And, you know, you're you're interviewing them, and they're, they want to use. They want to use promises and stuff like that. And some of our set top boxes, our TVs can't handle promises yet. So we have to use TypeScript. And then, you know, transpile, that down to ACMA, script three, so then it'll work. Ah,

 

Ward Bell  5:38  

so this probably, maybe this has something to do with why you're not really using a framework, either the infrastructure that drives this is all custom coded in JavaScript then right?

 

Unknown Speaker  5:48  

That's right. Our friends over it. So our friends over at Fandango, Fandango. Now, they've actually written theirs and react 1615. React 15?

 

Ward Bell  6:00  

And did you consider since you're going to type if you considered also trying to go to a reactor, you're going to stay with vanilla? I mean, TypeScript is JavaScript, right, so you're gonna stay vanilla,

 

Unknown Speaker  6:11  

I think we're gonna stay vanilla, I would like to. Ideally, it would be nice if we could go to a framework. But frameworks come and go, and when you have a project that's going to last for 1015 more years. And beyond it, it's really unknown if you'd ever get the chance to Greenfield the app, you know. And I think the pain that we're seeing with new tools today, with nobody really knows it anymore, and how did it work in the first place? All of those kinds of pain points where we're learning from and going forward, we're not going to rely on something that may not be there in 10 years,

 

Ward Bell  6:57  

do you use any third party libraries? Or do you just write out? You know, like, I assume you're not using jQuery, right?

 

Unknown Speaker  7:03  

No, no, we're not using jQuery. Okay. The Yeah.

 

Ward Bell  7:07  

Do you use any? Are there any third party libraries? Or do you just try and go right to the metal,

 

Unknown Speaker  7:13  

we just try to go right to the metal, it would be nice to be able to use third party libraries. But right now, our code isn't modular. So we don't have modules. And that kind of makes it difficult to say NPM, install? Blah, you know? Well,

 

Ward Bell  7:31  

it on the plus side, you don't have to worry about a supply chain hack, because you're not installing anything.

 

Todd Spatafore  7:39  

That's right. Well, and

 

Craig Shoemaker  7:41  

the other side two, is that you? You don't you're not subject to the JavaScript fatigue that so many teams are often dealing with? Oh, you're killing me, Craig.

 

Ward Bell  7:55  

You don't have any clothes, you don't have any clothes on? So you're not you don't have to subject to the whims of fashion, walking around in the nude.

 

Todd Spatafore  8:03  

That's right.

 

Craig Shoemaker  8:05  

Well, you're just not having to keep up with all of these different versions and, and the chasing the shiny new thing. I mean, one of the things that you're having to deal with is this set of constraints. And I would imagine that that simplifies and makes things complex at the same time.

 

Todd Spatafore  8:20  

It does, it does, it simplifies things, in that we don't have to worry about always upgrading our packages for security reasons. And it complicates things because, you know, we're responsible for all of our code, the testing of it, the maintenance of it, and, you know, the security implications of it as well. So

 

Craig Shoemaker  8:45  

pay, are you building apps in react Angular node, or some other framework? Well, with Nx, you can build your full stack apps in a shared model repo, integrate with modern tools, and reinforced best practices, you'll get advanced cogeneration, and automatically configured tooling like Cypress jest and prettier that will simplify your workflow. And x also helps you simplify the relationships between applications and shared libraries to make it easier to share more code and develop more consistently across teams. And the best part is, you'll build higher quality apps and spend less time on configuration. So visit nx dot dev to get norwall as popular open source toolkit for mono repo development today. The

 

Dan Wahlin  9:27  

view Have you mentioned DS three and that also takes us way back, you know, machine which, you know, luckily with things like TypeScript and stuff, you know, you can compile back to that if you want to. But so do you do you all have like a matrix or something of devices that you have to run on and then this you know, support Ts file this support to s3 this? Because I'm just I'm assuming the new one. Yeah, no problem. But it sounds like there's some older ones. Yeah.

 

Unknown Speaker  9:55  

So we deal with everything from the Xbox series x, which can do everything. All right, two TVs that were, you know, built in 2015, which weren't up to date or modern state of the art in 2015. So they've got slow processors, they, yeah.

 

Ward Bell  10:18  

Do you is there brought browser detection was always a problem back in the day, and it must be for you to? I mean, you have to know what to load, right?

 

Unknown Speaker  10:29  

Yeah, um, we don't do a lot of browser detection. We do feature detection. For the most part.

 

Ward Bell  10:34  

Yeah, that's the correct way I,

 

Unknown Speaker  10:38  

I've been pushing feature detection. We just we do have some code in there that says, you know, if Xbox then do this, and in those cases, then we can do promises, because the Xbox can do promises. But other televisions can't, can't handle that. So it kind of chokes on the promises.

 

Dan Wahlin  11:00  

So one thing to ask you about Todd is, when it comes to feature detection, are there you know, I'm assuming, for example, you're not doing like, Hey, does it support geo location? But then again, maybe you are? I don't know, are there some really key features, you have to make sure, like a specific TV has,

 

Unknown Speaker  11:19  

um, the biggest thing that we have to worry about a TV having is the different codecs for video? Right, so does this TV support? atbc? does it support HDMI? 2.2? You know, things, things of that nature of, you know, can we do 4k on this television? Or do we have to limit it to 10? ADP?

 

Ward Bell  11:45  

How do you how do you do that?

 

Unknown Speaker  11:46  

You can't ask the browser that question. How do you how do you find out? We have a platform team that does most of that work? And there are within the media or the video tag, you can do certain queries against the the Emmy engine and the to find out if it can handle the if it can handle the the queries or if it can handle the video. Yeah, that format. Yeah. That format. Thank you. Yeah. Fascinating. So that's kind of where we're at with, with media queries are? Yeah, what I call media queries. It's not the same as CSS media queries. Right? Yeah.

 

Dan Wahlin  12:32  

overloaded term there, I

 

guess, right?

 

Todd Spatafore  12:34  

Yeah. Yeah.

 

Dan Wahlin  12:35  

So when I go to VUDU on my desktop, I know it limits to SDI think, am I right on that, if I just go on a browser, I think it limits it to like Sdlt or something.

 

Unknown Speaker  12:48  

I go on TV, I can do 4k, I know. And we have different players. And that's different code bases between the web and the TVs. And then certain, certain studios also say, you know, on a browser, you can't play our content at higher than say, 720 p. Ha,

 

Craig Shoemaker  13:10  

what's the reason for that? Is there because they don't have the higher formats available? Or is that?

 

Todd Spatafore  13:17  

It's, it's a security thing? Yeah, they

 

Ward Bell  13:20  

Yeah. And copyright and, and they want to, you know,

 

Todd Spatafore  13:23  

they want to own the copyright.

 

Ward Bell  13:24  

If somebody steals it, they're gonna steal a bad version of the lower quality version.

 

Unknown Speaker  13:29  

Yeah, it's their intellectual property. So at the end of the day, they own the content. So they can they kinda are King, they can say, what, what goes and what doesn't. So

 

Ward Bell  13:40  

do you know what's fascinating about it, there was a guy at Microsoft, who used to say, he used to just beat the desk and say, framework bad, you know, we'd call it the MC framework, and all this other stuff. And he'd really get on us. And we all would snicker back that, while he's there coding, every little thing, we had our frameworks, but you don't exactly have a choice. So what's it like, having to write everything? Living the JavaScript thing? Like, what are the pros, what are the cons? I mean, I, you know, intellectually abstractly, we know that the Pro is that you're not the victim of whatever could happen in anybody's framework. But, but what does it feel like to write and maintain? Every, you know, your own infrastructure? You must have your own infrastructure and everything.

 

Unknown Speaker  14:34  

Yeah. So it, it's kind of complex. Like I said, this, this code base is about 10 years old now. So and it looks like it's 10 years old. There have been people constantly working on it. There have been people coming in working on it and then leaving and there hasn't been a strong, guiding light, so to speak on the code. formatting. And so it looks like 10 different people have worked on this. I used to work for a company called yuzu, then I don't think they're around anymore. But we had a, we had a lead developer who was really good. He was, he was incredible at making sure that all of the code fit. And even though there were 10 people working on the code base, it looked like one person worked on that codebase. And I was really impressed with his work. And then coming over to Voodoo. We haven't had that strong lead to mange, make sure that the code is cohesive, so to speak. And so that's kind of what I'm trying to push for in the next year is how can we get this code so that it looks like one person wrote it? And instead of, you know, three dozen

 

Dan Wahlin  15:57  

cars, I'm guessing without that, the the main stories probably pretty challenging right now, because it sounds like like everything you jump into? It's like, yeah, Todd wrote this, but Whoa, what must have written this?

 

Todd Spatafore  16:08  

Yeah, that's exactly. Yeah.

 

Dan Wahlin  16:11  

You know, it's just very different, I guess. So it's almost like you're relearning something every time you jump into part of the code? Is that kind of how

 

Todd Spatafore  16:18  

that's kind of how it is. That's the way that it feels.

 

Dan Wahlin  16:22  

I don't keep on top. That's, that's all about just keeping a job.

 

Unknown Speaker  16:26  

Like someone like me with imposter syndrome. I look at this code, and I'm like, Oh, no, I have to relearn this code. What are my my peers thinking? Do they think I'm a moron? Because I can't, you know, get up to speed fast enough on this. So I think imposter syndrome comes in pretty quickly on on a code base like this,

 

Ward Bell  16:44  

you got to tap into your inner arrogance set self, let's say, who wrote this crap. You know, you just got to be aggressive about that. That's,

 

Unknown Speaker  16:53  

that's my code lens comes up and says, Oh, I wrote this crap.

 

Ward Bell  16:58  

That was, that was the evil twin. Well,

 

Craig Shoemaker  17:02  

we always despise the code. We wrote six months, a year ago, whatever. So we're always our last week. Yeah. Always our worst. Yeah, that's true. Do you get the the support that you need from organizationally be able to say, okay, maybe I need to clean this up, or I need to refactor this or change it a little bit. And I'm not necessarily changing the behavior, the functionality, but this is going to be more maintainable on down the line.

 

Unknown Speaker  17:28  

Absolutely. Our our management is very keen at our they know, technology, they know code, they understand that, you know, maybe we need a sprint, that's just for refactoring. Right? And we have a plan that by next year, at this time, two years from now, at this time, we will have all of our business logic in a separate layer, right? And then we will have just a UI layer on top of that business logic layer. And then that whole thing will be written in TypeScript.

 

Craig Shoemaker  18:07  

Do you see your own framework emerging from these changes?

 

Unknown Speaker  18:12  

Yeah, so the business logic layer, we have a framework for the business logic. And it's, it's actually called toggle. h o GG le. Long story, or not really long story. Short story on that is we have another business logic layer called Pixie. Okay. And Pixie was written in Java and then transpiled to JavaScript, using DWT or gwit, right. And it's kind of a pain to debug. Right. And I do this on the windows 10 apps. So I'm responsible for the windows 10 app as well. And the windows 10 app uses Pixie. Now, in the movie Labyrinth, there's a character named huggle, who kills Pixies.

 

Unknown Speaker  19:09  

The architect of this new framework named hoggle, for that reason, and Andrea, his name was Andrea, he was he's a great engineer. And he, he architected this using TypeScript and using react j s. And it's it's a very robust system that I would really like to use. And it's this business logic layer that we could just sit down and rewrite our UI layer on top of, but I don't think that we will get the chance to Greenfield the app. So we have to figure out a way to refactor it to this pattern that we're looking at it. Yeah.

 

Dan Wahlin  19:53  

I'm sitting here, Todd gone. You know, you're dealing with this obviously, but I guarantee we have a whole lieu of people going Yep, that's pretty much what it feels like where I work, too.

 

Todd Spatafore  20:05  

That's true. Yeah. You know,

 

Dan Wahlin  20:06  

where we have this old, you know, it's not the Pixi, whatever, it's some other name. And they have to somehow factor that into the new Greenfield stuff. And yeah, it's it's challenging. I think that's, it's one of the things that does, has always scared me about when people make technology choices, kind of by what the crowd is doing,

 

Todd Spatafore  20:30  

what's popular, what's popular

 

Dan Wahlin  20:31  

right now. And you already alluded alluded to this earlier. That's to me always been scary be at a company where you know, that app will be around for like you said, 1015 years or whatever it may be. And you have to maintain it over that time period. You know, how important is it to factor in that technology choice? And obviously for for your group? That's why your printers right and every scratch? So

 

Unknown Speaker  20:59  

it's not? I wouldn't say that we're writing it from scratch, we're, like you said, we're backing into it, you know, where we've got this code base? It's, it's had several dozen people working on it in the past. How can we untangle it, you know, and that's kind of the challenge that we're faced with for the next couple of years.

 

Craig Shoemaker  21:21  

So tell us about a specific instance, if you can think of one where you just hit this really gnarly architecture or area of code or whatever. And you were able to, to change things the way that you wanted it like what did the before and after look like for you.

 

Unknown Speaker  21:38  

So if you can imagine an s3, code base has a lot of gifts, and then in it, right, or if and else. And because it has a lot of if else, it's it gets to be really gnarly, like you said, also s3 you do a lot of callbacks. So you get into callback hell, and just being able to refactor those callbacks so that you don't have the nested functions and pull the functions out into utility classes. That's, that's always a helpful. That's a helpful the pattern,

 

Ward Bell  22:19  

you mentioned that there's zero modularity in the in the current situation, is that one of them, are you trying to figure out how to and I don't mean lazy loaded modules here. I'm just talking about some degree of module structure. Do you have a vision about how you're going to introduce that into your code?

 

Unknown Speaker  22:35  

Yeah. So um, I have one of one of my employees is working on that task right now. Actually, as we're speaking, he, he's tasked with how can we introduce modules into this modulus? package or application? Right? So today, it gets compiled into an all.js file, as you can imagine, and all that JS has everything well, how can we? How can we lazy load those modules? And how can we separate out the pieces that are modules? And just have them? Not in the all.js? not have this monolithic structure?

 

Ward Bell  23:19  

Wait a minute, what a TV, any TV can can lazy load? No.

 

Unknown Speaker  23:25  

So that's something else we have to figure out, we have to figure out, you know, can we can we do this on these? You know, 2015 TVs?

 

Ward Bell  23:34  

Right? Because I figure they must? What's the up? You know, like, how would you How would you roll this out? How would a TV acquire the latest version when you've got this together?

 

Unknown Speaker  23:43  

So but newer, the newer TVs, not I won't say TVs, the newer set top boxes. They, they work on a principle where they are, for lack of a better term, a progressive web app, right? So they've got a URL, and they go out to that URL, and they grab the files from our server, and they load it. Okay. And in that respect, it's very nice. The other TVs, they have packages, so they have, you know, like an app x only for Samsung or LG or Vizio. Vizio is lazy loaded or progressive web app style. But LG and Samsung in particular, they've got their packages and we can upgrade those packages through like Samsung's back end portal or LG back end portal.

 

Ward Bell  24:44  

So that would get updated all at once. Do the do the Do you have to deal with the security side of this like I suddenly realized that everybody's afraid that their TVs looking at them and listening to them. How do I you know, are they trying to push back on you? To make sure that Voodoo doesn't have that kind of.

 

Unknown Speaker  25:04  

So rather than just push the file out, they do intense testing of their own on the package so Voodoo doesn't track on the TVs, we don't track a lot of things that people might think we do. So like, some people might be afraid that TV x is listening to them all the time. We're not the lightest. Yeah,

 

Ward Bell  25:30  

I got it. As a matter of fact, I have a tinfoil hat that I've got.

 

Unknown Speaker  25:35  

We aren't listening all the time. And in fact, when we are listening, it's the it's through the TV. So the TV can actually, you know, there's Bixby or there's Alexa, or there's sorry, if I just said anyone's off. But there are buttons on those remotes where you can do voice searches, and that goes through the TV. And then it's passed on to us through an a, an SDK. Alright. And so we don't, we don't actively have any way of listening or watching the user. In that respect.

 

Ward Bell  26:15  

That's disappointing. Todd,

 

Todd Spatafore  26:16  

I'm sorry.

 

Ward Bell  26:20  

So john, one of the things I like about ag grid, which is a data grid component for the kind of complex grid scenarios that we encounter all the time in enterprise apps, one of things I really like about it is that it works for a variety of frameworks, angular react view, or, or just vanilla j. s,

 

John Papa  26:40  

Does that ring a bell for you? Oh, it really does. There's all these different companies that I work with, where they have no choice. But to use a lot of these different tools, they have different teams working on them. So being able to port their code or share that code, that technical investment they have is really important to them.

 

Ward Bell  26:57  

So it's important to us, I do believe we're a consulting company. And I, you know, we never know what our clients going to want to use Angular react view, but they're all going to need a grid. And it's great to be able to reach for the one grid that works everywhere, ag grid,

 

John Papa  27:10  

you know, at any size company, too, because you could have these teams that maybe they only use one framework, but eventually they're going to switch to another one and be able to take that investment again, and use it reuse, it is really nice.

 

Ward Bell  27:21  

So if multi framework grid makes sense to you, you should certainly go over there and check out ag grid at ag dash grid.com. And tell them Warren Johnson. So So what do you you have just like a boatload of challenges. I was gonna say like, what's your biggest challenge, but you know, talk about living with JavaScript, this is as close to living with JavaScript as I can imagine, it's been so long since I've had to go 100% vanilla, it must be kind of liberating in a way, but what's worried what worries you?

 

Unknown Speaker  27:53  

Well, you know, we've got vanilla JavaScript. So I mean, it's not like tomorrow, the world's gonna stop using JavaScript. Right. So that doesn't worry me. What worries me is getting new employees who want to use react view, Angular, you know, one of the new frameworks, and then I have to tell them, sorry, we're not doing that here. So it's kind of that respect that it's a human problem, not a computer problem that I think that I have. So yeah.

 

Craig Shoemaker  28:32  

How do you address that, like, what's been successful for you in dealing with it,

 

Unknown Speaker  28:35  

finding challenges in the code base itself? And so and, and addressing it, like, Hey, this is a neat problem that we've never solved before, or hasn't been solved in this company before? how can how can you solve this problem? Right? It's, it's kinda like the Hanoi tower, right? You can move the pieces one way or another and then get the tower to move to the correct peg. And it's those kinds of puzzles that are interesting to me and seem to be interesting to my fellow employees. So to paint

 

Craig Shoemaker  29:17  

a picture for for people who are used to working in you know, continually updated browsers and kind of cutting edge type of environment. You've talked about some of the restrictions, but can you describe like, okay, here's what it's like to write in this sort of environment. This isn't, you know, promises aren't available to you what, whatever else is not available to you so we can kind of get an idea of what it's like in your day in the life.

 

Unknown Speaker  29:45  

That's a good question. I think that the the hardest, the hardest one to get around is that promises aren't there. That's the hardest one for me to get around. It's I would really like to Be able to say, you know, async await on this project or on this function or on this module and and just let it go. But for me, the hardest one is promises, getting around that. Beyond that, you know, you get, do

 

Craig Shoemaker  30:19  

you get some of the newer API's? Like do you have fetch available? Or is it kind of like you're frozen, and x year with whatever?

 

Todd Spatafore  30:28  

Oh, yeah,

 

Craig Shoemaker  30:29  

at the time,

 

Unknown Speaker  30:29  

we're pretty much frozen in whatever year the API's were available at the time. Because I've been able to use fetch on Xbox, like I said, because they're up to date. The PlayStation five is also up to date, the xfinity is up to date, so we can use fetch in those scenarios, right. But then how do we, how do we write our code so that it isn't littered with if Xbox do this? And that's kind of the challenge.

 

Dan Wahlin  30:59  

I was just thinking about that Todd? Yeah. Because, And that, to me, that is kind of the fun part, like you were talking about earlier, where, you know, somebody might get assigned, hey, build this, I'm going to call it a module, which would be like the fetch module. But in reality, it's just a wrapper around you know, device checks and feature checks and all the checks you got to deal with. But you know, that, to me, that is kind of the fun part of development is being able to work work in multiple environments like that. And you know, you get done, you're like, you know, we did it, we got it, it works great. And it even works back in like 92. sets,

 

Unknown Speaker  31:37  

a lot of times we ended up going, why does it work? It shouldn't work. You know, that scenario. It's like, oh, what's a good problem that we're having right now, we're having a problem where we're making calls, like an AJAX call an X ATAR call to our server, right? And on some TVs, the host of that page is just called file colon slash slash. And that's not a, that's not a URL, right? It's just got a scheme, it doesn't have a file attached to it. So how do we solve that problem. And, you know, the way that we've solved it in the past isn't going to work anymore, because it was insecure, or we don't like the solution that we had. So we have to work forward and work with our server team to accept things that aren't standard. So there, there are definitely some funkiness with some older TVs in that respect. So,

 

Craig Shoemaker  32:44  

so tired with all of the refactoring, it sounds like you're doing the on a constant basis, what sort of testing infrastructure Do you have set up? And then, you know, what's your publishing pipeline? Like?

 

Unknown Speaker  32:56  

Okay, so first of all, as you can imagine, we have, we have, for lack of a better term spaghetti code, right? That's not modularized. So we can't take out little chunks of it and test it. You know, with unit tests, or functional tests or integration tests, we, we do end to end testing, we have a QA department, that's, I consider them to be top notch, they're really, really good at testing this top to bottom every, you know, six weeks or whenever we do a release. And that's kind of our testing story today. Where do we want to get? Or where do we want to be? Well, as I said, we want to modularize this code. And as you modularize the code, you can take certain chunks of it and test it individually and do unit tests on it. And I think I know that there's kind of a pull away from unit testing these days, or I see a pull away from unit testing. But I've always been a fan of it, you know, red, green, you know, Red Green testing factor. Yeah, refactoring, that that form of coding has always been really good for me to see, write a test it fails, write some code to make it work, and then refactor it. So yeah. As far as our CI pipeline, you know, we, we currently use Jenkins. It's really good. We have a release team that's really does a great job of keeping our release. Going. I will say, Yeah,

 

Ward Bell  34:46  

what do you what do what do you use for source control? And I mean, I'm thinking you know, at this point, almost any technology we could ask could be like, well, you do something different.

 

Unknown Speaker  34:55  

Well, it might not surprise you, but we used to use Perforce. When we I first started at when I first started at VEDA we use Perforce. And then about three years ago, we made the leap to get sober using Git. We're currently using Git labs, self hosted Git labs. As we move forward, we'll probably migrate that to something like that bucket. So that's what we're using for source control. It seems to work, the hardest part is of it during that transition, we used to use version numbers based on Perforce. Check in numbers. And now we can't do that with get hashes. So just finding a way to have a build number that makes sense is kind of our current problem. Today, we do that on builds on Jenkins build, you know, it increments of build number, and that's what we use. So, but I don't know if that's the best way of doing things.

 

Craig Shoemaker  36:00  

So how do you handle it when a deployment goes wrong? So let's say you push something out to a TV and just get mangled along the way, like, What?

 

Unknown Speaker  36:07  

How do you come back from that? Oh, man. So we've, we had this problem in December. And fortunately, the teams that Samsung and the teams that LG, they can push an old version really quick. So let's say version two comes out for just throwing numbers out there. But let's say we just released version two. And it totally messes up like you can't play video, right? And for whatever reason, it didn't get caught in testing. The teams that Samsung and LG can quickly push out version one. And so that all the TVs would get get downgraded. But at least they work. Yeah,

 

Craig Shoemaker  36:55  

yeah. Just pick up the bat phone and say make it happen. Yeah.

 

Dan Wahlin  37:01  

There's no phone Craig, he just finds that live in the sky.

 

And you know, that's

 

what that's gonna be one of those. Especially you said December, you know, especially if it was around the holidays, where I'm sure it was extremely stress free work, right. You push out a brace a butter movies, no problem. Like, chill, though, the

 

Unknown Speaker  37:22  

problem that we had in December was a feature that we absolutely had to have live by January 1, didn't make it into the build. For whatever reason, it didn't get cherry picked into the release branch. Oh, yeah. And so we had to scramble to get that. retested, you know, so move the feature into the release branch, retest it really quick, and then push it lot. And, you know, if it's one of those things that everyone goes through, I'm sure. Right. So yeah, we went through it. And we got it out, we managed to get a release out in three weeks, which is, you know, within three weeks. So that's

 

Dan Wahlin  38:08  

your you're here today to tell the tale. He survived.

 

Todd Spatafore  38:12  

During during the Christmas of all times, well, it's

 

Ward Bell  38:14  

not Christmas without a crisis.

 

Todd Spatafore  38:17  

That's absolutely

 

Ward Bell  38:20  

right. So Todd, this is a really interesting moment. I mean, a story that fits into a career. How do you see your like, how does this fit into your vision for yourself of your career path?

 

Unknown Speaker  38:36  

That's a that's an interesting question. So if you'd asked me five years ago, where I saw myself in five years, it would not be in the middle of a pandemic, right. So now, I would have said, I want to stay in architect and I want to move up the architect ladder, and, you know, keep my hands on the cup. And then something happened. And I realized that I really enjoy being a people manager. Right. So my path forward is, I want to, I want to I'm currently a manager, I have three employees under me. I want to manage managers, that's the next step, then be a director and just kind of move up that chain because i think i think the overall art arch is kind of nice to see people come in as Junior engineers and then help them develop and and raise them up to be senior developers it that's that's really fun and to be able to see our to help these people get to be better people that are engineers. I think that's that's an exciting challenge. So my way forward isn't the next hotness. It's not viewed Three or four, it's not Angular whatever's next, right, it's, it's the new employee that we're going to bring in. And, you know, in the next six months, it's the, it's the employee that I have today that wants to be a manager or, you know, or the the less are the less senior engineer who I think could be a really great senior engineer. So for me, that's, that's kind of my path forward, I

 

Ward Bell  40:27  

get that. You know, many of us have been flirted with management roles. And some of us have had to be managers and despite ourselves. But the thing The thing is, never, you know, I my, my piece of advice on that, given that I have that rule is never lose touch with the technology, but don't get trapped in writing the code. It's, it's a delicate balance, the thing that definitely doesn't work is when, if you're, you know, lead, and you don't have I talked to, I talked to managers all the time, who don't have any technical ability anymore. And they're, that does not work. So you got to keep your chops,

 

Todd Spatafore  41:13  

got to keep your chops, right.

 

Ward Bell  41:14  

On the other hand, you can't get you can't do what I often end up doing, which is you can't be in there writing the code all the time either. So, so as a career path, it's fascinating. But I would keep those things and you know, one guy I have in my, in my mind is always is is Elan Musk, you know, whenever you watch him. He may be CEO of his companies, but he knows every detail. Yeah. And I remember jack welch at GE and, and that guy knew, you know, he knew every detail. He thought he knew that his job was the people job first. It was all and that was what he spent every waking day was thinking about people. But there was he had a real grasp of the intimate details. And I think that's that's the recipe for the path you're, you're on.

 

That's just my opinion.

 

Unknown Speaker  42:10  

I agree. Oh, I think that's a great opinion. Yeah.

 

Craig Shoemaker  42:14  

Well, I think we don't hear that enough. I mean, oftentimes, it's always about the next version and staying in code. And not everybody is best suited for that. So it's definitely good and refreshing to hear. That being said, Well, I think that wraps us up for this one. Todd, thanks so much for being with us. And what we'd like to do at the end of each one of our shows this kind of have a final parting thought, Tom, I'll give you a second to think about that. Dan, what do you what do you got for this for us this week,

 

Dan Wahlin  42:46  

I'm actually gonna jump on kind of the bandwagon that Todd started, because I like that approach. And it's having managed a lot of folks over, you know, my career, especially before I came to Microsoft recently. I think it's fun to watch others succeed. And so I guess my challenge, there's, I think, in the pandemic, these days, we kind of naturally are a little more focused on us or our family, because, you know, we're a lot of us, we're just trying to get through this stupid thing. And hope we're good on the other side. But I guess my challenge would be and I'll challenge myself here too, because I have some really great colleagues I work with Matt, Microsoft, is, you know, what are you doing to specifically help somebody improve in whatever area and I don't mean lecturing them, by the way? I mean, like you said, you're kind of pulling them up the ladder, you know. So, you know, for me, I think that'll be kind of my, what am I doing, you know, this week, this month, to help people pull up the ladder, because there's always somebody that needs some help everyone.

 

Craig Shoemaker  43:52  

What about you Ward?

 

Ward Bell  43:55  

Well,

 

I naturally want to go in some kind of joke.

 

Cuz, you know, Oh, goodness, but you know, it's true, Dan, so

 

Dan Wahlin  44:13  

is taken, you have to do your own hornbill.

 

Ward Bell  44:15  

In my moment, in my occasional moments of honesty and self revelation, I to say, you know, what I really want at this stage of my life, and it's not it wasn't true when I was 18. This stage of my life, the most fun is watching the other people come along and have their aha moments and stuff like that, which makes it sound like I'm like one step away from being out to pasture. And which may be true, but I can't see that in myself. So I, you know, I I'm trying to keep learning and being on the edge and things like that, but, but when I asked myself, What gives me the most pleasure, it's Seeing a it's putting together a team and having them succeed and having them seeing them grow. It's It sounds so trite, I'm almost embarrassed to say it.

 

Dan Wahlin  45:11  

Good, it's not at all good.

 

Craig Shoemaker  45:14  

I would say that there's a lot of fun in working with frameworks and all the new AI, well, even just the vanilla j. s, has new API's and new parts of the technology that are available to you. But there's just a lot of joy, sometimes just writing JavaScript. And so you know, I would say, take the opportunity to if you're not doing it on regular basis, just to try and challenge yourself and create even if it's just a small app doing it, if nothing else, it helps you really appreciate what the frameworks do for you if you have the opportunity to use them. But yeah, give give vanilla j s some some time in the near future. Target, what do you what do you got for us?

 

Unknown Speaker  45:57  

I forget who said I thought, I thought Satya said it best when he said Don't be a know it all be a learn it all right. And for me, it's that's that rings true. That really rings something true in my heart of learn everything you can write. And I think constantly learning is the way forward for everything. You know, you can learn how to be a better manager, you can learn JavaScript, you can learn newest frameworks, whatever you learn, you're going to, it's going to build you up and make you a better person. So learn it all,

 

Dan Wahlin  46:36  

like a great quote.

 

Craig Shoemaker  46:39  

So if people want to get in contact with you, what's the best way to get ahold of you?

 

Unknown Speaker  46:43  

So the best way to get ahold of me is on Twitter. I'm spectacularly on Twitter. And, yeah, so on Twitter, I do. ramblings, you know, like everyone else does on Twitter. I do videos on YouTube as well. So if you search for my name on YouTube, you can find me. I do a lot of Raspberry Pi stuff lately, but it cool. Yeah. So that's awesome.

 

Craig Shoemaker  47:14  

That's me. Well, the link to his Twitter profiles also in the show notes. I just want to say thanks again for joining us and gentlemen, we'll have to do this all again real soon.