AJ_O’NEILL: Yo, yo, yo. Coming at you live from the deep dark purple dungeon.
CHARLES MAX_WOOD: We also have Steve Edwards.
STEVE_EDWARDS: Hello from a beautiful and sunny Portland, which is not something that happens a lot, especially this spring.
CHARLES MAX_WOOD: I'm Charles Max Wood from Top End Devs. And this week we have a special guest and that is Matt Pocock. Did I say that right?
MATT_POCOCK: Yeah, you said it good. You said it pretty American. I'm not going to lie. Matt Pocock. I'll take it. I'm coming live from rainy, miserable Oxfordshire in England.
STEVE_EDWARDS: So it would be the correct pronunciation. We were like, Matt, Paul, cock or a cock.
MATT_POCOCK: Yes, exactly. Yeah. Okay. Hey, I was closer. Okay. We're going to do another Matt. Pocahontas, you know, Matt, Bocahontas. I'll take it. Yeah.
CHARLES MAX_WOOD: I don't know. My great grandparents immigrated from England. So anyway, but yeah, let's, let's go ahead and start talking about TypeScript now. Why don't you introduce yourself and kind of talk about a little bit about what you're doing with TypeScript and then we can dive in and fight about, I mean, discuss when and where to use TypeScript.
MATT_POCOCK: Sounds good. Yep.
Hey folks, this is Charles Max Wood from Top End Devs. And lately I've been working on actually building out Top End Devs. If you're interested, you can go to topendevs.com slash podcast and you can actually hear a little bit more about my story, about why I'm doing what I'm doing with Top End Devs, why I changed it from devchat.tv to Top End Devs. What I really want to get into is that I have decided that I'm going to build the platform that I always wished I had with DevChat.tv and I renamed it to Top End Devs because I want to give you the resources that are going to help you to build the career that you want. So whether you want to be an influencer in tech, whether you want to go and just max out your salary and then go live a lifestyle with your family, your friends, or just traveling the world or whatever, I want to give you the resources that are going to help you do that. resources in there and we're going to be giving you content on a regular basis to help you level up and max out your career. So go check it out at topendevs.com if you sign up before my birthday, that's December 14th, if you sign up before my birthday you can get 50% off the lifetime of your subscription. Once again that's topendevs.com.
CHARLES MAX_WOOD: Very cool. Now I know that not everybody feels this way, but I'm curious. You said that it's basically saved your life on some of these projects. And I'm curious, you know, what is it that has driven that?
MATT_POCOCK: A lot of it is kind of data related, you know, when you have data coming in from like an external source. We were like a front end team, just doing the front end things, building out this sort of front end. And we had these very, very complex data structures coming in from outside that we weren't sort of like, we had these data contracts with a backend, but when they were through our application and sort of like being drilled down through props and things, it was really sort of easy to make a mistake. And the data contracts kept changing as well. So it was kind of like, okay, yeah, that's a Boolean. That's kind of got a, sorry, now that's now a string actually. Oh, sorry, no, that's an uppercase P, not a lowercase P. And actually having that kind of rolling through your system all the time is not good. And it meant that we actually got a lot of benefit out of the refactors that TypeScript can give you. And so when we adopted TypeScript, suddenly when they said, okay, that's like a lowercase U instead of an uppercase U. We suddenly got all these red lines throughout our system and we were just able to go bang, bang, bang, bang, bang, bang, bang, bang, bang, sometimes even automatically refactor them. It felt super duper good and it just meant that we some tasks that just took hours, you know, testing things, checking for runtime errors could be checked at the type level. And that was huge for us. The data contracts from the backend kept changing. And what that meant was every time they would say, oh, that's actually a lowercase P, not an uppercase P, we would have to go through and kind of like check against the runtime, make sure that nothing had broken. Whereas when we adopted TypeScript, what that meant was we would just get all these squiggly red lines wherever the data contract had changed. And it meant that we didn't even have to test in the runtime anymore. We knew that the types would be okay. And so it just saved us a ton of time.
MATT_POCOCK: And so we're talking about the same thing. JS doc is the comments syntax that lets you sort of declare the input and output functions, right?
AJ_O’NEILL: Yeah, I mean, it more or less, I mean, you're going to use, you're going to use the TypeScript checker when you use JS doc. So you it is it is the alternate syntax for TypeScript in essence.
MATT_POCOCK: TypeScript doesn't wanna implement classes. So TypeScript has this concept called an enum, right?
AJ_O’NEILL: Yeah. So an enum is like the classic C-sharp thing, right? The TypeScript team now, I don't think that...
AJ_O’NEILL: Enums mean different things in different languages. So for my sake and for the sake of our listeners, define what you mean by enum, because that, in every language, it means something different.
AJ_O’NEILL: OK, so you're talking about data enums, not type enums.
MATT_POCOCK: How did you feel when ES6 came out?
CHARLES MAX_WOOD: I think it was Tayeh. Yeah, Tayeh.
AJ_O’NEILL: That's not quite...what it is. So if you stand for nothing, you fall for anything. And I think this is where TypeScript does well. TypeScript says, we are C sharp for the browser. We're bringing C sharp developers to the web. Right. That you're shaking your head. No,
MATT_POCOCK: I'm shaking my head. Yeah. Yeah. I'm like, you said that about 10 minutes ago and I thought, when am I going to get around to refuting that? It's going to be some
MATT_POCOCK: I would take a more I would take a more generous view than that.
AJ_O’NEILL: I think sure.
MATT_POCOCK: Yes, it is.
AJ_O’NEILL: It is absolutely the best tool we have.
MATT_POCOCK: Yeah. What better than JS doc?
MATT_POCOCK: Okay, tell me how, how did it happen? Tell me the story.
MATT_POCOCK: Should we say they're so ahead of the curve, they're on the dark side of the moon or something?
AJ_O’NEILL: Yeah, it does have the disadvantage of being both dynamically typed and loosely typed, which I think is absolutely disastrous. If there's something that strict mode should have fixed or that we should have some sort of flag for, that would be awesome if it were native in the language, it would be to have strict inferred typing rather than dynamic loose typing.
MATT_POCOCK: Yeah, and that looseness is what TypeScript is trying to patch on top of basically. And again, it's doing a pretty good job. Like a lot of work is going in in the language at that level, you know, to improve it and to make sure the edge cases are sort of fixed. And so every minor version, there's usually some new thing that you can use if you're into that stuff. But to be honest, most people and most TypeScript users are not going to be dealing with generics really, like maybe a couple of sort of basic stuff. But they're not going to be doing the really complicated TypeScript work. That's kind of the whole, like the work of library people, essentially, the people who are building the libraries and printing out those or compiling those horrible type definitions that you were talking about. And that is an interesting divide there. You've got like the app users on one side and then the library users on one side. And you kind of want them to be able to contribute to each other, you know, for the app user to contribute to the libraries. But I do worry sometimes that it's.
AJ_O’NEILL: Go ahead. Finish the sentence.
MATT_POCOCK: Yeah, I do. I worry sometimes that the syntax puts people off, uh, even though the primitives are relatively simple when you know the syntax.
Hi, this is Charles Maxwood from top end devs. And lately I've been coaching some people on starting some podcasts and in some cases just taking their career to the next level, you know, whether you're beginner going to intermediate and immediate going to advanced whether you're trying to get noticed in the community or go freelance, I've been helping these folks figure out how to get in front of people, how to build relationships and how to build their careers and max out and just go to the next level. So if you're interested in talking to me and having me help you go to the next level, go to topendevs.com slash coaching. I will give you a one hour free session where we can figure out what you're trying to do, where you're trying to go and figure out what the next steps are. And then from there we can figure out how to get you to the place you want to go. So once again, that's topendevs.com slash coaching.
AJ_O’NEILL: Well, you were talking about generics before. Technically, yes.
MATT_POCOCK: But generics are only at the type level, right? Like they're not runtime code.
MATT_POCOCK: So it's raising the floor, right?
AJ_O’NEILL: That's correct.
MATT_POCOCK: It does raise the floor, right?
MATT_POCOCK: You know, you you have a yeah, you have a new sort of level that you need to reach in order to do even the most basic stuff.
AJ_O’NEILL: And people are struggling. I mean, look at web dev Twitter just or don't or don't look at it.
MATT_POCOCK: I'd say don't. Yeah, don't. Correct.
MATT_POCOCK: Yeah. So yeah, it's tough, right? Because if you're a developer just sort of messing about on your own, you want the floor to be low. You want the floor to be as low as possible. You want the entry to be easy.
AJ_O’NEILL: Or if you have to work with people.
AJ_O’NEILL: So are you talking about errors from TSC? Are you talking about? trying to get errors to have the properties you want when you throw an error.
MATT_POCOCK: Oh, no, no, no, no. So, time script TSC errors, basically. So, things that pop up in VS code, for instance, if you're using that. And the red lines and decoding what they mean. That can be terrifying. But if you want that flaw to be sort of high, then you know you're gonna build pretty good products. And it's not like it's raising the flaw for no reason. It raises the flaw, and in my experience, it also raises the quality of the product.
AJ_O’NEILL: So, but my, I mean, I guess my argument is just why not raise the floor with JS doc so you're not introducing any extra complexity. And by JS doc, I use, I think about maybe less than 10 features of JS doc. And all the code that I write can be described with about 10 of its annotations. So I think that JS doc is unwieldily huge and describes way too much stuff because it's trying to be Java doc.
MATT_POCOCK: Let me make the argument against JS doc then.
MATT_POCOCK: So JS doc is like TypeScript, but way too verbose. It's essentially just like, okay, why would you take, you know, a hundred characters to write out something that can be written in five? You've got all those kinds of TypeScript comments in taxes. You've got this, you've got that. And like, it's just-
AJ_O’NEILL: Well, but you get the documentation built in as well.
MATTl: Sure, you can just add a comment, you know, like the-
AJ_O’NEILL: Well, yeah, but when you JS doc build, you get the documentation that has those comments and everything's in there quite nice and-
MATT_POCOCK: And again, if you're using it for that, then that's wonderful.
AJ_O’NEILL: If you don't know how to hit the tab key to autocomplete, you need to go back to the fundamentals of day one of using your editor, right? I mean, if you're worried about, oh, I have to type five letters, just hit the tab key. You don't have to type all five letters.
MATT_POCOCK: Sure, sure, sure, sure. But then, of course, you've got GitHub Copilot, which can auto-generate your type annotations for you. You know, I mean, like, sure, like, but it's the verbosity and the fact that it's not got the best ID support as well. Like it's, you know, it feels like TypeScript is always going to give you a more complete experience than JS Doc. Although I mean, JS Doc again, like if it's, it's about that lowered floor, right? Like if you, I guess it's a way to raise the floor slowly. I'm just not sure what the
AJ_O’NEILL: Just a superset. So when you create a supersubset of something, that is just fancy parlance for a completely different language.
MATT_POCOCK: Yeah, of course it's a different language,
MATT_POCOCK: So that is not the goal of TypeScript. Like if you never say that again, I'll be about 10 times happier. Cause it just does not ring true for me at all. I don't get it.
AJ_O’NEILL: Tell me why this is wrong. I mean, look at the Wikipedia page for TypeScript. It is.
MATT_POCOCK: Well, look at the TypeScript documentation, I would say. Because the TypeScript documentation tells you what it is, I suppose the Wikipedia people.
STEVE_EDWARDS: I believe the correct acronym for that is RTFM. Oh, no, no.
MATT_POCOCK: That sounds correct.
AJ_O’NEILL: Well, they can record the documentation. I mean, it's always.But it's
MATT_POCOCK: what I'm saying
AJ_O’NEILL: is whatever type script developers as just a superset.
AJ_O’NEILL: I'm a hundred percent in with you on having tools do the work and it's just I want the tools to do the work on the thing I'm working in, not on something else. But yes, I'm 100% in. I want tools to do the work. That's one of the reasons I love Go. I really like Rust because the tooling is bar none in Go.
MATT_POCOCK: Totally. And what that means too is that when you go all in on TypeScript and you have these, the thing I guess that separates it, I don't know whether JS.doc has this actually. I don't know JS.doc that well. Can you define like a sort of interface in JS.doc? like you can in TypeScript, for instance. So let's say I have a user that I know has an ID, a Boolean, whatever.
AJ_O’NEILL: So yes, but I don't do that. Because if you think about it, all you need to do to define an interface is just define a type, right? Because if you define a type that has three functions on it and you say I'm returning this type of object that has these three functions, there's no practical difference between defining it as an interface or defining it as a type. And like I said, the only things that I use in TypeScript are type def, property, param. I use union on occasion. I use the enum as in object enum, meaning this can be a string or a number. It is the enum set of what the types are. And I don't know if there's much else that I use. There's probably one or two things here or there, but essentially with those, I think I counted off five things. Every possible pattern that you could represent in any language can be represented with just those five things. And so all of the other stuff, your class is just a function that returns an object of a type. So if you just define, if you just type def function, and then you say that what its return value is, is another type, then you've defined a class.
MATT_POCOCK: Yeah. I think, I guess I was using kind of interface and type, uh, interchangeably. That what I meant to say was like you, what I find TypeScript does for me that I really, really like is it makes me think data flow first. It makes me think types first and implementation later. And so what I tend to do is when I'm building something new, like I'll just sort of think about what the data needs to be and the types need to be declare those in TypeScript first, and then start thinking about the flow and the API and how it should be designed and how it should all flow through.
AJ_O’NEILL: So it's funny that you should say that because this is exactly verbatim what is criticized by Rob Pike in the way that languages like TypeScript encourage people to think. He explicitly calls out that it leads you towards thinking about the typing first, which is the thing that you're most likely to get wrong because you don't have enough information about how your program actually works. And then your refactoring efforts are greater than if your type system is very minimal and you focus primarily on the business logic first.
MATT_POCOCK: That's fascinating because so would that impact how you apply your tests? Is that kind of like the idea is you should write your test first and get a sense of what the business logic is doing and then apply the tests, apply the types on afterwards?
AJ_O’NEILL: I am gonna go all in on, unit testing is not a replacement for type checking. I'm going to make a hard left from my sensei, Douglas Crockford on this one.
AJ_O’NEILL: But it's just in the context of something like Go versus the context of something like C-sharp from my perspective, something that has, or in a similar way, Python Python has strict typing, right? So I think that the most important thing more than anything else is to have strict typing. That's number one. If you don't have strict typing, how can you possibly have any hope of writing a correct program with other developers? Because you see a one and they say a one and you say the inputs one and all of a sudden you get a string and it works half the time. So strict typing I think is essential. I don't know why any language would ever want loose typing. I think shadowing is great, which for those that aren't familiar, shadowing is when you can declare a variable multiple times and you can declare it once as a string and then you could say do a parse int and you could declare it a second time as an int. So you could do var age equals read user input and then you could do var age equals parse int age. That's what the shadowing is. And I think that that is great. A lot of languages choose not to do that. I understand how it goes. could be confusing for someone, but in the places where I've seen it implemented, it seems to flow and work well. So strictness, type shadowings, I'm not going to say something has to have it, but I think it's nice. I don't know if there's really that... I don't think I've ever heard a good argument against it or any argument against it. And then having inferred typing is great, because if you have inferred typing and strict typing, then you have types. That's it. You don't need anything else. Well, except for where types can be ambiguous, such as is it an int 32 or an int 64? Or is it a float 32 or a float 64? But, and then the idea of new types, uh, which unfortunately we don't get in JS doc, and I don't think you get in TypeScript either. Uh, are you familiar with it?
MATT_POCOCK: I don't know what you're throwing to.
AJ_O’NEILL: So a new type is of just, it's, it's just a compile time check. Let's say that you have most famous case would be Imperial units and you have metric units. And so a number one. What does that mean? Because it lacks context. We don't know what that number one is. So in various parts of the program, say you need to do type conversion, you could specify that this type conversion takes in a metric unit and it outputs an imperial unit or is vice versa. And so new types give you the ability to just, you don't do anything. You don't add anything, you don't change anything. It's simply a type, a type linting or type hinting that you're saying this is not a number and it doesn't accept numbers. it accepts imperial units. And if you ever tried to pass in a number that has not been typed, it won't accept it. And if you ever tried to pass a number that is typed wrong, it won't accept it.
MATT_POCOCK: You can indeed do that in TypeScript. You can have kind of branded numbers, which would be like an alias on a type of number. And you would say this is like an imperial number, essentially, or an imperial whatever, which is kind of cool. So I've done that before with like strings as well. So like I had different entity IDs mapped to different types. And so you couldn't pass a user ID into something that was expecting a post ID, for instance, very, very powerful.
AJ_O’NEILL: That yeah, that is super useful. And if that's possible to do in JS doc, I haven't yet discovered it. That be my sixth item on the list of things that are incredibly useful if, if supported because that I use it so rarely, but when you need it, you need it, especially if you have something that you can pass in, say three different numbers to a function and you, you don't want to accidentally switch up two of them. That'd be a case where I'd potentially use it if it didn't make sense to convert that to an object for some reason.
MATT_POCOCK: And it's almost not possible to do at runtime, right? That's something you can only do at a tight level.
AJ_O’NEILL: Yeah, it's a 100% compile time. There's no way to do that. Which I actually had a question for you, which is how-
CHARLES MAX_WOOD: Can we wrap up on this because we're kind of getting the picks time.
AJ_O’NEILL: Oh, okay.
CHARLES MAX_WOOD: No, go ahead.
AJ_O’NEILL: Okay, so my- My one question that I haven't investigated and just heard people complain about, but I bet there's some sort of solution for is, oh no, I lost it. Wait.
MATT_POCOCK: That's it. Timescript is perfect.
AJ_O’NEILL: No. Curse you, Chuck. No. What was the last thing that I said? I think it was not even a related thought. I think it was just going back to something somebody had told me before.
AJ_O’NEILL: Well, I'll be interested to chat with you in 10 years. Hopefully once you've dabbled in Go a little bit, or Zig, or some other language that's extremely constrained and see if age doesn't pull you into the pit of, I don't want to deal with mental load.
MATT_POCOCK: Pit of simplicity, yeah.
MATT_POCOCK: A little, little, little unrefutable points at the end that I don't have time to get to.
CHARLES MAX_WOOD: All right. Well, let's go ahead and do our picks. I've been pretty quiet because I don't know, I've used both and I kind of like them both for different things. So anyway, yeah, let's do PIX.
Hey folks, if you love this podcast and would like to support the show or if you wish you could listen without the sponsorship messages, then you're in luck. We're setting up new premium podcast feeds where you can get all of the episodes released after Christmas 2020 without the ads. Signing up will help us pay for editing and production and you can go sign up at devchat.tv slash premium.
CHARLES MAX_WOOD: Steve, do you want to start us off with PIX?
STEVE_EDWARDS: Ah, I see we're starting with a high point first. So, okay. It's all downhill from here. Today I just, downhill from here, that's right. So I just have the regular elite level dad jokes. Last night, finally getting a good night's sleep and I was woken up by my wife and kids screaming. I was like, what the heck are you guys all yelling about? And they said, we're driving.
AJ_O’NEILL: What? I didn't get it.
STEVE_EDWARDS: I was falling asleep while I was driving and they were yelling at me to wake up.
AJ_O’NEILL: Oh, okay, I missed.
STEVE_EDWARDS: hate it when you have to explain the joke.
AJ_O’NEILL: Okay. It's I missed a critical word in there.
STEVE_EDWARDS: Oh, okay. You know, I can usually guess what people do for a living by looking at their hands. I mean, I'm usually wrong, but I can at least guess. And then finally, if you really think about this, humans eat more bananas than monkeys. I mean, really who's ever eaten a monkey.
AJ_O’NEILL: That was good. Go that one.
STEVE_EDWARDS: Thank you. All right. That's all I have, Chuck.
CHARLES MAX_WOOD: All right, AJ, what are your picks?
AJ_O’NEILL: but how many terabytes of bandwidth do we use Chuck?
CHARLES MAX_WOOD: I think we, I think we top 10. Yeah, it was something like that. It was enough to where they said that we had to pay more for the bandwidth. And I have a different arrangement with Cashfly regarding the bandwidth. And so it'll cost considerably less to host with them. What that means is that I've got to migrate everything over. All the shows are going to be back on Top End Devs. So if you go to topendevs.com slash podcasts, you'll see the shows there. Yeah, I'm just kind of hammering out some more pieces of that. Since I'm building top-end devs myself, I kind of had to divert into managing some of that other stuff. But the upside is that I kind of get to do it the way I want it. If you're, incidentally, if you're looking for a system that'll do podcasts, conferences, meetups, courses, and all that good stuff, and you can kind of manage your media presence and your paid content, that's what I'm building with top-end devs and I'm planning to license the software you can pay for all that. But anyway, that all said, just a heads up that everything's going to kind of shift here within the next few weeks. So yeah, anyway, but if you're looking to start your own show, the, the hosts that I like are fireside.fm and transistor.fm. So you can go look at both of those. Matt, do you have some picks for us and also tell us how to get your course?
MATT_POCOCK: Sounds good. Yeah. My course is at mattpocock.com. You can find me as Matt N-A-T-C-P-O-C-O-C-K. You can also find me on Twitter at matpocockuk. I'm posting TypeScript tips and all sorts of fun stuff there, kind of advanced generics and all sorts of madness going on. I work at a company called State the AI as well. We do a lot of work with state machines and state charts. And I kind of think that there's a lot to be said there and there's a lot of cool stuff we're doing. We're building like a visual editor that you can build state charts using it and compile them down to code and make them power your front ends. It's kind of cool and cool to see sort of like a visual builder thing happening. And my pick is actually a board game pick. So I'm in board games as well, or relatively recently into board games. And the two that I've really, really loved. The first one is the crew. You played the crew, Charles?
CHARLES MAX_WOOD: I don't think so.
MATT_POCOCK: Oh, it's real good. It's really good. It's like a 10 quid or I don't know, $13 or something. And what it is, it's just a, just a card game basically except it's a collaborative card game, so you're all trying to win together. And what you do is you basically, it's just a trick taking game, and you have a little mission at the start of the round, and someone has to win a trick that contains a certain number of a certain suit. And what you do is when you win that, you go on to the next round, and it gets a little bit harder, a little bit harder, and there's 50 rounds, and it's incredibly good value for money. And also the main thing about it is, is that you cannot talk while you play the game. So you can't talk about what's in your hand. So what happens is you get 10 minutes of people going like in complete silence playing these tricks See if they win or lose and then at the end it's like, oh my god, you did this And it just goes crazy. Yeah, it's a brilliant brilliant brilliant game and so cheap And I guess the other one is like a classic game called race for the galaxy, which you may have heard of Chuck Which is just fabulous. It's like a card game I was into magic the gathering for a long time and this sort of scratches that itch while being a bit more sort ofMfriendly for new people to join in. Again, a card game where everyone's sort of playing at the same time, but it is competitive and all about building up your space empire. And yeah, those are my picks.
CHARLES MAX_WOOD: Very cool. So I'm just gonna chime in here for a second. So the crew, it looks like they have a sequel to it now. So there's another one that's a Deep Sea one. It's not a space one. But yeah, the crew, it clocks in on Board Game Geek. It's a 20 minute game and it clocks in at 1.98. So it's, it's kind of your casual level game.
MATT_POCOCK: It's not super complex race, super approachable, but it's because it's, it's impossible to kind of quarterback, you know, so someone can't sit at the back and like, uh, direct everything. So it's surprising how much complexity comes out in it. So yeah, the weight is low, but it's, it's pretty nice.
CHARLES MAX_WOOD: Right. Race for the galaxy is weighted at 2.99. So it's a little more complicated. I just like to give people a feel right because some people are casual gamers. They don't want much more than a two or 2.5 unless it's got like an interesting theme or something. So maybe race for the galaxies there, but yeah, it clocks in at 2.99. So it's about a three. So it's a little more complicated on the scale of casual gamer, but yeah, both of these look like fun. I'll have to go waste my money on them. I'm a sucker for board games and card games. I really, really enjoy playing them.
MATT_POCOCK: So yeah, you'll love the crew. I promise.
CHARLES MAX_WOOD: Well, if people want to find you online, where do they find you?
MATT_POCOCK: They can find me at MattPocockUK on Twitter or MattPocock.com. Just search for MattPocockTypescripts. I've got a YouTube channel. Yeah. You'll see me.
CHARLES MAX_WOOD: Okay. Sounds good.
AJ_O’NEILL: It was great to have you on.
CHARLES MAX_WOOD: Yeah, it was fun.
MATT_POCOCK: Enjoyed our discussion.
AJ_O’NEILL: I enjoyed your well-defended position.
MATT_POCOCK: Yep. I thought you did a pretty good job too. I was surprising. I was expecting a much worse defense. So well done.
AJ_O’NEILL: Well, yeah, thanks. What? Not curious. What kind of expense were you suspecting?
MATT_POCOCK: Wait, I saw the purple box and I thought, ah, this guy can't be serious. What's going on?
AJ_O’NEILL: Wait a minute. You don't have purple boxes over in the UK?
MATT_POCOCK: No, I've got my green box. You see. Oh yeah.
CHARLES MAX_WOOD: Well, all right. I'm going to, I'm going to end the recording.
Bandwidth for this segment is provided by Cashfly, the world's fastest CDN. Deliver your content fast with Cashfly. Visit c a c h e f l y.com to learn more.