 What is this what's going on? Oh, we're gonna record it on the overhead. Of course. Sorry. I'm gonna press the refresh button Yeah, I'm gonna do another shit. I spit on your So all the tests are green. Can you confirm all tests are green? Yeah, that's only green boxes No, red or yellow boxes. No, that's just the lesions Boxes submit to see Q whatever that means commit Q. I don't so it's now queued up for commit. Oh Boom How we can aggressive use that as the end card or something Okay, well now that the end's done with let's do the start Right Yeah, this is our third go at recording this episode first time went well didn't it was really awesome good episode We were so high energy So the energy is going to be all good things come in threes as we try and remember all of the off the cuff Funny things we said during the other records and we'll crowbar them in Whether you like it or not here we go off you go because we have funny go on go on So don't tell me through your disgusting kerning first, right? Oh the Kerning. This is not getting any easier Third time I've seen the screen and look what is this and you could drive a plane down that and My personal this is just how chrome layouts this font. Oh, so we're saying chromes bad. Yeah, excellent Okay, I did that's what I did. I fixed chrome you fix chrome one of all of chrome I have I now have broken it is still broken. Okay, mostly but the part that now works I didn't work before I fixed up you now have code in chrome. I have code in Chrome Well, all right most like so tell me for it again So I Work on a side project which doesn't really matter, but basically if you know you have an image It's not square, but you kind of want it to be square You can either crop in or you can make it bigger and fill in the the the empty parts with a nice color So you see you have an image that is the correct shape You are making it square, but then you are making it square within like yeah, it's called letter boxing I did the thing. Yeah, it's very Instagram Of course it is it's for Instagram because they do their images square apparently you can also do five by four ratio But who does that who who does that? Okay, so yeah So the part that I want to talk about is that in this app. I used web assembly because sometimes that's fun Let's go. It actually wasn't necessary. I think but I thought was quite fun And just to remind everyone this is how you use web assembly you fetch Is it required that you go that high when you say Assembly the fun fact I only do this in English. I apparently never do this when I speak German When you speak German and it's one tone only or not in us, but not funny Well, you said but not funny and Right so assembly assembly here we go So you fetch your web assembly binary and just throw it into instantiate streaming That gives you back an instance and that instance has the functions that you can call This is what assembly and so I wrote this code and I developed and it was fun And so, you know in Chrome it was fine Yes, like let's test on other browsers and then Firefox went Nah, this doesn't like and I was like Firefox you stupid wait, so you okay, so you've chosen to to use a green cross there In you know in Unicode there is no Cross in a square that is red only the green one. There's a red by itself But no, there's no there's no equivalent to this in red That's horrible. Yeah, I was really sad and so I was like I could just use the free floating acts, but it looks Should you CSS like he rotates filter? Oh, I should have used that. There you go. I'm so I'm so disappointed myself now You could have done it between one of the free takes we've done Anyway anyway, so um, yeah, Firefox wasn't working. I was like What did it do wrong now? Why is Firefox of working like can they just fix it like it works in Chrome It must should be working in Firefox, of course And so I looked into the console and saw response has an unsupported mind type. Hmm. I was like does it though? Does it though because Chrome is clearly accepting it. It can't be that wrong and so I've been using HP server for a while now I've been using it here as well for development. Oh, this is the node the one. That's my PM, right? Yeah Yeah, okay. Yeah, use that did a curl and I found this content. I was like Ah, I mean, it doesn't really make sense to define Squeaky chair This is the specific but I'm aring it. I don't know. I'm looking at this and go like Okay, so I mean a character set doesn't really make sense for a binary exactly But also the the core part is that it's defined as application wasm And so it is intended to be WebAssembly and should be interpreted as WebAssembly. The chair said yeah, it doesn't really matter and I guess Firefox was being pedantic and Chrome was just being like And just accepting it and I was like well firefox Yes, and so I was opening an issue and then one of the firefox engineers came back and said like well Actually actually well the spec is quite explicit and says Extra parameters are not allowed. Did they do that? They wagged the finger like on every single line Yeah, they went into a video call like karaoke Okay, so even if you just have a semi-colon at the end which is a separator between the mime type and the extra parameters That is already not allowed. And so really what we discovered is that firefox was technically correct While chrome was being lenient but not spec compliant This is not unusual is that the amount of times I found something like oh firefox And then you look at it. It's like oh, it's correct everything everyone else from yeah. Yeah, okay, and I was like Why why isn't the tests? Why you know this these are kind of things that I would because it's so explicit in the spec It's well and this seems very strict. I don't know why there's a strict But if you are the strict put it in a test well oh There are tests and sadly you can't read what these tests are about because they kind of clip it away And only if you hovered with your mouse they should hide the results to show you the rule whatever, okay? We're basically these tests test if you reject invalid mime types Okay, and chrome okay, it's not fair not passing those tests because it is not rejecting those invalid mime types Firefox on the other hand well done them. They are completely test compliant Safari well safari is a fail because they don't implement the streaming API's at all Okay, they don't even have the phone call, so they're not getting the mime type wrong. They just don't have the API exactly fair enough What we see here is that tests have been failing and Nobody cared about it and I was very surprised by that and it turns out as I learned later on that usually whenever you Accept that a test is not failing you have to attach a bug to it inside chrome Okay, this test not failing. He's a bug that we're working on it. Yeah, these tests didn't have that what I don't know Why my hunch is that these tests were added after we already implemented the streaming API's and that? Some oversight happened a long way. This is still not good. I'm just saying like it's probably This state Nobody was aware of this is the current set of things that's that's fair because sometimes when like the first browser You know a browser will implement something first the other one will come and start working on it And they'll find like an inconsistency in the spec and they'll add tests to that and so that's probably something like that We'll have happened here, and so I was thinking That's an intro problem. Yes, it is because something works in Chrome and not in Firefox and That is where you usually end up in issues in production. It was like, you know what? Can I fix it? Is this something that is simple enough that I can do it myself and so I did I had two engineers Andrea's house and Clements who is not on here and who helped me through this entire process of learning how to actually clone Chrome compile Chrome Which how to find the files I need to patch? Yes, it's a big old project Chrome, isn't it? Yeah, yeah, if I didn't have a computer farm full of compilers that Google gave me it probably takes a good amount of hours Yes, it does in this case. It only takes 20 minutes Yes, but in the end it turned down to be a one-line change So basically the the function Streaming instantiate and streaming compile do this mime type check with it like is the mime type not application web assembly Right. Yeah, now the fun fact is that mime type is a helper function by us That strips away extra parameters from the content type header. So anything after the semi colon Right. Yes. No, it's what I'm doing instead. I now call content type Which gives me the literal content type header turn to lowercase because you know if you write application uppercase a lowercase or something like that doesn't matter That's the change. That's the entire change and now ship it. Yeah, and I did I opened the CL as you saw and Then someone came along and said well well I applaud your effort because this is interop nice try, but but we are doing the worst kind of interop Where we go from something that works to now that is something that doesn't work Right, which is correct because if there's a site in the wild that does this header with char set blah, blah, blah at the end It worked so far and now it stops working and if you break a large site for a lot of users And they go what did you do and you say haha? I think you'll find it's now Wow, that's okay then great Yeah, we'll find that millions of users couldn't access our products So they said the code we were was fine like is this the correct code? I mean it didn't arrive here instantaneously. I had code reviews and they caught some bugs and blah But they said we probably either want to send out the deprecation notice first Mm-hmm, or make sure we are not actually breaking a significant amount of sites Right, and so it turns out in Chrome. We often we gather some user metrics where you know What kind of files are even being loaded is a certain API even being used how often this is this code path happening Yeah, this kind of thing is not tracked So it's not like we track the content type header which with a certain type is delivered over the network That is something it's like you could add that but it takes six weeks to roll out Yeah, you have to gather the data. That's a long old process. We've done it with service worker stuff Yeah, yeah what we have instead and which apparently some Chrome engineers and think of what I find quite interesting is we have a GP archive Yes, we do. HGP archive crawls Five million pages every month. I think roughly. Yes, and it's it's slanted towards the like a set of top sites Yeah, most popular sites are crawls and like the amount of pages increase But they add you know from the top of a list they keep adding Yeah, and all the results basically all the fetches all the assets are put into a big old database and then you can use big query With some pseudo sequel syntax. Yeah, run some analysis on this is what I did So what I did is I took the summary requests all the requests of our sense during one of these crawls and I got the content type column and Beta just counted for all the files at end and wasm Yep, what that content type header was and apparently this is about 60 gigabytes of data, which is you know, because it's just text It's quite a bit and this is not just something that's like internal Google thing No, this is public anyone can do this. Yeah, open source database. Yep and So yeah, I did this query and I turned it into a Spreadsheet. Yay spreadsheet. So out of these five million pages that are being crawls Roughly two thousand even use WebAssembly at all. That's awesome. It's popular, isn't it? Yeah It's pretty new. Yeah And out of these two thousand pages or actually out of these five million pages exactly one page Has a WebAssembly file that would go from working to not working Right because it has it even then and that's I think it's very important I say that it doesn't mean that this site would break because it would only break if it uses the streaming API Which it probably does not because Safari doesn't implement it Safari doesn't implement it And this would be failing a firefox and it will be fine So let's I so that HTTP server thing it definitely says on the MPM package like this is for development Yeah, not for life That's the same server. Yeah, it could be so that means overall point zero zero zero zero two percent of pages are Potentially affected by my chain change So it would actually be given like the amount of time you have to have a deprecation notice in Chrome It would actually be a better use of your time to go and hand deliver a letter to the one person Yeah, runs that site, but let's go round to the house and just I know you can fix things remotely, but it would still be quicker to go round Yes, and say excuse me. Hi, can I just can I just get to your laptop and so when so they say Something will be closely Investigated something at this like a deprecation or a breaking change if you are on point zero three percent or more So we're way below that here. So in this case, they said, you know, it's fine You don't need to hand out a deprecation notice or anything like that. We can go ahead with this And so just now press press the merge button literally just now So this this is a change to the other two takes of this episode We've done because it hadn't gone through yet. No, just literally of the delay The bots finally finished a test all the tests went green. I could press the merge button Which means did you engineer the delays? Did you have you been tampering with the equipment? Just so you could have been found out So yeah by tomorrow or day after tomorrow, it should be in Chrome canary Which is sometime in the past when this episode goes out. Just just it's incanary now. Yeah at home Brilliant, check it out now. And if it's not incanary now It means the patch has been reverted because some are broke every time I put the I put the committed the CL I do Go check. Yeah, you can go check it out and make fun of me What did I do? Bye. Bye. Bye. See you happy next time Click the subscribe button Press the bell if you want to get notifications click the bell push the bell the bell I have no idea what you're on about to do all of those things Bell bell and this is the end. So it's the bell end You