 Here we go. So, today I have you hook, line and sinker, because we are going fishing. Oh! Why exactly? Well, you say, right? That fishing is your passion? No, no. I can't eat fish, don't like fish, don't go near fish, don't go near anything that lives in water doesn't work for me. Let's quantify this. I mean, if I show you a picture of a fish, it's like you've been near the sun. Bye. Okay, yeah, fair enough. Yeah, we all have our things, mate. Well, I've bought all the stuff now, so we're gonna do it and we're gonna enjoy it. You know what I did recently? I built a web app. Oh, well done, mate. Congratulations. It's quite nice to realize that my skills haven't completely atrophied. Yeah, you still got it. Well done. It's an app that lets you record voice memos. And the whole thing, I was actually quite impressed, the whole thing is 71 kilobytes. Okay, does it work offline? Yes. A star. That's all you care about. That is all you actually care about. Come on, let's see it, then. Sure, is it? Where's the phone? Aha. Yeah, so you got this, you can record a voice memo and like, save it and all that kind of stuff. It's all working offline because I'm actually an airplane mode because you don't want to save all this. And you can actually listen to it and all that. It actually works really well. Okay. And so the web is perfect, then, yeah? I think the problem we have is that the browsers themselves, they're used to encoding and decoding stuff, right? Yeah, we've got audio elements, video elements, web audio API. Yeah, WebRTC also encodes to send over the wire, decode it on the other side. True, true. Right? But none of that's available in JavaScript. I mean, the decoder is, right? I mean, that's web audio. Yeah, no, it doesn't work with Ogopus, which does work with the audio elements, so there's a bit of an inconsistency. That must be a Chrome bug, right? I mean, because of specs. It's a bug, but it's a feature request more than it's a bug. Yeah, fair enough. So, because these encoders are surely already in there in the browser for WebRTC, right? They can already encode speech and whatever to send across the wire, but that's just not exposed on the WebRTC. No, well, sort of. If you're in Firefox, you've got the media recorder API, which you can get, Og, video, it's Opus, I think, for video and audio. But it's not available in Chrome or Safari or anywhere else today. So the net result is the only way you can get the thing to save is to actually create a WAV file. And thankfully, there are some very skilled people who've wrapped the whole thing up in libraries and so on. But in any case, the only way you can actually store these files and have it usable everywhere is a WAV file. Oh, that's going to be... I think that's bunkers. So this is why I think the stream spec is so important, because we'll be able to just pipe a WAV stream or whatever type into the encoder and get out a Uintate array of the encoded data. That's part one. I think, though, the browser shouldn't have special magical privileges to encode things. If it's encoding things, it should, in theory, allow developers to encode. Well, this is the extensible web, right? If that technology is already in the browser, it absolutely must be available to developers. The only excuse that you can say to not do that is security, and there's no security issue with exposing an encoder. Exactly. Tell you what, all that suicide, you know, there's ECMAScript 6 classes in there, Fat Arrows, Promises, Index DB. Like, there's loads going on in there. All really good fun to use. Yep. But for me, the nicest part was I tested it on Firefox, and there were a couple of small issues to fix. It was pretty minor. Probably because they were adhering to the spec normally, where it usually is. Probably. And then somebody out of the blue contacted me and said, do you know what? It works really nicely on Firefox OS. Oh, absolutely. And it was just like, it works on Firefox OS. It works on Chrome. It works on desktop, on tablet, on phone. It works in all these places. So how big is the app all in? 71 kilobytes. I think a Hello World for a native app, you're going to be hitting near a megabyte. Yeah. So this is the thing. 71K, it works on mobile, tablet, desktop, Firefox OS, like Chrome OS, presumably, 71K. Boom. That's the benefit of the web. I'm on the border of this now. What've you got then? I've got fish to catch. Nothing.