Hey, welcome back to another JavaScript jabber. This week on our panel, we have aj O'Neill yo.
Yo yo, come at you live from the winter wonderland of Utah. Well, at least we had our first the first frost that I noticed. The grass is all frozen.
Yeah. We also have Dan Shapier.
Hello from Tel Aviv where here it's the first day of fall. We've essentially had the first day of rain. We're still wearing T shirts though.
I'm Charles Maxwood from Top End Devs.
Yeah.
I had to scrape the car this morning. I didn't notice frozen grass. I don't live terribly far from aj so anyway, we have a special guest this week, and I am going to slaughter your name. I'm sorry, Danny. We have Danny Moore Kirk. Did I get anywhere in the ballpark.
Yeah, somewhere around more Cadica. It's a pretty complicated name. It's Dutch or it's Belgian actually I think, but pretty good.
Yeah, I'm sorry.
I don't speak Dutch or Flemish in very little French, so I'll pro how it all breaks down. But yeah, welcome.
To the show.
We are you very much discussing down access and browser APIs and some of the capacity the browser gives you for PWA's. Before we do that, do you want to just inform people a little bit more about who you are what you do.
Yeah, of course. Yeah. First of all, thanks for having me. I'm Danny Moolkaka. I'm from Amsterdam. I'm a freelance JavaScript what develop rice should say. Started professionally around two thousand and seven, two thousand and eight, and I've been also been messing around with a Tari home computer since I was a kid. I've done a lot of stuff. Worked a lot of time for the i G Bank in Amsterdam where we by on need web components, did a lot of work on Polymer back then and later with
the lit framework. Currently doing a lot with web components and progressive web apps, and the creator of what p w A can Do Today, which you can find that What pw A can do dot Today. It's basically a showcase of what is possible with progressive web apps today and the apps itself a p w A. So what you can do is you can install it to your own device and then see for yourself what is possible
on your device and your platform. I also publish a weekly newsletter called The Modern Web Weekly, where I also write about web components and progressive web apps in general. You can also find me on Medium and on X.
So you're the guy who's still using web components, I.
Am the one. Yeah I heard, I'm the only one who's still doing that.
Well, I don't know, I don't think you're the only one.
To be fair, No Jojo Bite does it too. That's at least two.
You know, there have been a couple of of you know, those techno storms, debates, arguments, whatever you choose to call them on X and a recent, relatively recent one was about web components. Yet again, I think it started with a post that our friend Ryan Carneato wrote which was very I wouldn't say dismissive, but the harsh critique I think would be a better term of web components. But and then Rich Harris or another friend of ours, also
joined the discussion, also very critical of web components. So so yeah, probably need to get Alex Russell on the show again.
Yeah, YouTube says that there does and dozens of people using it. The other thing that I'll throw in is that I've used a few items libraries on my front end stuff that once I kind of cracked it open and piked under the hood, it's like, oh, they're using web components in here, and I just didn't know. So there are a lot more people probably that just don't know they're they're using them.
Yeah.
Yeah, but that's the thing, you know, I don't want to derail us to web components, but that's the thing the question wasn't. The discussion wasn't so much how prevalent web components are on the web. Rather it was about do web developers these days, you know, should they be using them? Do they like using them? Should they be using them if they're using some sort of framework such as React or Spelt or whatever. I think that was the main Yeah.
Yeah, And there was a lot of criticism of web components because they don't really integrate quite well with the ex system framework like Swelter that Rich Harris built and React in general. There are a lot of pain points with integrating web components into these frameworks because, yeah, like the standards are taking different routes, they have different APIs. So that was basically what the what the discussion was
mostly about. And yeah, I can't understand in one way that that it's quite hard if you have an existing framework to integrate these components in there that are taking different routes. But yeah, I wouldn't say it is impossible. I personally have work a lot with lit, which is also compiling down to two raw vanilla web components, and that actually works quite well.
Yeah, but LID was specifically built, designed and built to work with web components. I think the majority of the criticism came, indeed from the fact that other frameworks which were not specifically designed for web components are having a hard time integrating with them. I think that that was the main source of criticism.
Yeah, yeah, that was exactly it.
Yeah.
Yeah.
Also, you know, a while back, micro front ends were all the rage, and then I completely stopped hearing about them. Now I assume people are still implementing that pattern, but for some reason, nobody's really talking about micro frontin's, at least not in my vicinity.
No, I don't hear too much about that either as well.
Anyway, so p WA's also yet again, I kind of paraphrase about p was that p WA's are the future, always have been, always will be and no, but I mean it's kind of a kind of criticism because it means that p w as might never arrive, because if they're always the future, It's it's the basic question is can p WAS survive Apple's attitude towards them. That's that the crux of the thing.
Really, Yeah, I think that's that's the million dollar question right now. Yeah, it's it's it's like Apple is still actively frustrating the development of p w as or basically there's a lot of browser APIs that they still don't do, not support on iOS. At least here in the EU, things are changing a little bit with the digital market acts.
There's at least some movement in the direction that Apple will be forced to change their ways, but that might take some quite some time before that happened, if if it will ever happen. I do think in the end it will, but it might take quite some time, just like with Microsoft in the nineties. But yeah, that is still a big issue, the lack of parity between between the Android platform and the iOS platform. But that is still something that will need to change in order for
PWAs to really be the future. Yeah, although I think it's not the only ones. I think we should also, you know, hold up a mirror to ourselves as developers. This is also something that I write frequently about, is that we should also build better web apps because right now, if you look, there's so many web apps that their only job is to promote the native version of themselves.
For example, if you go to LinkedIn nowadays, the first thing you see is like this big app banner that says, go to our native app, don't use our web app, go to our native app, and then the web app is just basically a dumped down version of the native app, which is really unnecessary because a lot of stuff that these native apps can do, web aps can do just
as well, even worse. A lot of times, when you go to a native version of some app, it doesn't offer you anything extra that the web app cannot do. So I think we as web developers should also start just spitting out web aps that are only there to promote native apps and really start using these browser APIs that we have at our disposal nowadays.
To be fair, I don't think it's a developers. I think it's the marketing department. The way that I like to put it is that when you're a web application, then on a mobile device, you're like a guest in a hotel. On the other hand, when you're a native application, it's like somebody renting the apartment. It's like a much more last in permanent relationship. The whole process of going to the store, downloading the app, installing it, getting an
icon on the desktop. That's a much more permanent relationship. And that's what the marketing people want, uh. And they want to be able to push notifications, which you know, I'm not sure can you now do this on iOS or not? For a long time?
You can for a long time you putdn't.
I really hope that that changes the conversation. If if iOS can do that, then then maybe. But but that's that's the thing.
Now.
What they're what they're ignoring is the fact that people don't like installing apps. So you might prefer that people install your app, but the likelihood that they're in that they're install your app is actually very low. So you should try to make the most of your shorter term web based engagement that you have with them and make
them repeat visitors. And if what you built as a web app is a PWA and the browser notices that you visit again and again, it would actually offer you to install an icon on your desktop, and like you said, you can now start sending push notifications. So it's actually a better way of getting onto the device. But I think that a lot of marketing managers just are not aware of this now.
They are not, they are not. And I also see some role for developers in there to educate these these these marketing managers that these things are now available on the web. I mean, I can understand if you're not gonna that you're not gonna move all your stuff from native apps right now to web apps because you still have a lot of lack of support on iOS. But for example, if I look now at the the the PWAs that action Instagram have, you have perfectly fine functioning
p w as until you turn off the network. When you try to make them work offline, it doesn't work anymore. You refresh the page, you get nothing. If you go to t X on the native app, it will just keep giving you your feet. Of course you won't have any new stuff, but you can still still use it on X. That's not the case because if you turn down the network or you you disconnect the network and you try to start up the app, it will not
give you anything. There's nothing, So at least that's something that we yeah, that should be improved and that we can use right now.
Yeah, Cache APIs and various storage APIs have been around for a long time on all platforms.
Yeah. Yeah.
And also want to point out is that the mobile platforms have an incentive to make you go through the App store as well.
Oh absolutely, absolutely, Yeah.
So that's just another reason why they may or may not be jazzed I guess about, you know, giving you the kind of support you want from heal.
Yeah.
We spoke about this on several I think on on on an episode with Bruce Lawson that we had him as a guest to talk about how mobile platforms and iOS in particular Apple and iOS in particular try to you know, kind of stammy the whole concept of p w as just in order to preserve their their store based revenue stream. It's like what it's like a thirty cut on every app based or somethings like that. That's
that's insane, you know, why billions of dollars? Why would they give it up if as long as they have a choice.
Yeah, yeah, I think that's that's the main intentive for them. It's just the revenue streams that they get from the from the app stores and the control that they that they have. I understand that they're not going to give it up like that. Yeah, let's hope maybe Apple and Google will find a new business model there with with web apps. Maybe that will finally give them the incentive to to move toward webaps or Yeah, otherwise, I think it's the only legislation that will force them in the end.
I think that's the way.
It's maybe, though, it's worthwhile to backtrack a little bit and kind of explain the difference between a p w A and a regular old web app, Like what's the what makes so what transforms a web app into a p w A.
Basically, there are two things that that are like the pillars of a p w A, which is the manifest dot Jason file, which is just a metadata file that describes the items that that will be added to your home screen whenever you install the the app. You can also define other stuff in there. You can define the name in there, you can define the background color. In Chromium browsers, we also now have what they call the
Enhanced Install UI. So what that means is whenever you go to a Chrome browser, like atro Chromium or Opera on the right in the address bar. When the app can be installed, when it has a manifest dot jason file, there's icons in there. You can click it and then you can install it to your device. You can also put some screenshots in there nowadays for Chromium browsers, So whenever you click that button to install the app, you get a screen that is more like installing the UI
that you get when you install a native app. So you can see a nice name there, you can see a description there, and you can see some screenshots that are different for desktop and mobile. Those are also the things that you can define there. You can define short cuts also in the manifesto jason file, which is for example, on an Android device, if you push and hold the icon, then like a shortcut menu will pop up and then you can go straight to some pages in your PWA.
Those are some of the things that you can define in the manifest adjacent file. And then the other thing is the service worker, which is a special kind of web worker that sits, as it were, between the network and your app. So what it can do. It can intercept the network requests and it can also cash, so it can cash assets like style sheet, scripts, images, you
name it. It can also cash whole pages or whenever you install the web app, you can just give it a list of routes and URLs that it will then all visit and then it will cash the resulting HTML or the image or the script or the style sheet or whatever. Then you can define a fetch handler in the air that can just decide whenever you go to
the network what it should do. So, for example, you can have it serve everything from the cash and then it can after that you can do an additional request, for example, to get any stuff that is new, or what you can do is, for example, you can let it always go to the network, and whenever that fails, it can serve content from the cash. The service worker
also takes care of push notifications. So whenever, even when your device is or when your app is not running, whenever a push notification arrives, the operating system will wake up the service worker, and then the service worker will take care of receiving the push notification and then showing a notification on your screen. And yeah, other stuff like
background sync is also something that is doing. So for example, if you have a form on your web app and the network is gone and you want to send the form. What it can do is that the service worker can intercept that request that post requests from the form. It can storage somewhere maybe in index TV, and then whenever the network comes back, there will be a sync event will be fired, and then the service worker can send
that request. For example, I also use that for Google Analytics or even when people are offline, I can get that analytics data there as well. And it can also do background fetch, which is very interesting for podcast apps for example. So normally in a webpap, when you download, yeah, when you download stuff in a web app and you close the webpap, then your download is gone. But now with background fetch, that download can continue in the background.
So you can just switch off your web app, the download will continue and then whenever you activate it again, the download will be will be ready for you. So those are the two main things. The service worker that takes care of all the network stuff, that intercepts network requests and cash your stuff for you. And the manifest ob Jason file, which is the metadata file that describes the icons, the callers, uh, the name and stuff like that.
Okay, I want to jump in here, because you you kind of pushed a couple of my buttons and I don't I don't know if you knew this, but you did. So I have a couple of things that I'm kind of looking at, and this is specifically with the caching.
And the offline download. I can't remember what you call it, but.
So I've been wanting to, yeah, to give people better options for listening to podcasts, and I kept thinking, man, it should be nice.
It was just a p w A. And then we've we've discussed this on other stuff.
But the technology that I typically use on the back end is Ruby on Rails and they've got this nice Turbo Native which you can wrap around.
A p w A and it it does pw A things.
But even if I just wanted to do in the browser, there for me to have it download new episodes in the background and have them ready to go, so that if I'm offline and I'm going through the airport or whatever, I can still listen to those episodes on my device in airplane mode without internet and be good to go.
Yep, exactly.
And similar to that, because I'm starting to put together training videos and you know, I'm getting into AI and starting to offer those videos. But I'm also looking at I want to do kind of comprehensive like if you want a video that walks you through an API, like a web API or a you know, browser API, or you know whatever. You know, maybe I pick up something that's commonly used out there, like I don't know, you know, but it walks through.
Hey, these are all the APIs.
Similarly, if somebody's interested, they can say I want to be able to watch these ones offline, and then they can go and it can have those ready to go. And again they can just browse to the website on their browser and it'll just play them even though they're not connected to the Internet because it actively pulled it in when they were.
Yeah. Yeah, that's exactly what you can do. So basically what it does is the service worker takes care of that. There's a couple of events there, like I don't know the exact name, it's background seeing start or something whatever, and it will download the things in the background. If you go to what PWA can do today, there's also a demo there that just downloads a lot of stuff. I think it's from Jake Archibald from some of his podcasts. I just did that to make it really take a
long time. So in the meantime you can play with it. For example, if you have an Android device, it doesn't work on iOS yet, although it should be coming because it's already in Safari Tech Preview in the the future flags you can enable it. It's it's it's there, but it's not functionally yet, so it should be coming to iOS as well in the near future. Then you can see in the Messaging center or whatever it's called in Android, you can just see the download continuing and you can
pause it. You can you know, go to flight Molde and then it will stop. And even if you go if it's if it's running in the background and you go back to the app, you can see that after a few seconds, the progress will pick up, so it will just continue. If it's still downloading, you can see
the progress also, yeah, progressing. And basically what it does is whenever that that download is finished, it will be presented to the web app as a response, and then that response can be put in the browser cache.
So that is.
Basically how that that that works. It's a very simple system and yeah, that that really enables exactly what you're looking for, so you can download whatever you want in the background while the web pap is not running.
Yeah, all the audio only people, I'm making all kinds of happy gestures and movements and smiles.
I'm super excited about this.
So and by the way, I'm I'm clicking around on the site right now, just kind of testing things out, and I'm actually kind of surprised at some of the stuff that's supported. I'll have to try it in Firefox and Mobile Safari to see if this is real. Is this all evergreen stuff, is this baseline stuff or is some of this still not everything?
If you look at the for example, there's a one with the screen capturing, which is quite experimental. These are a couple of the what they call origin trials and chromium, so that's chromium only. That's the screen capturing and the element capture, which enables you, for example, to do a screen recording of a short and dumb element. Yeah, and then there's also the stuff that that Apple just blatantly refuses to implement, like Bluetooth and NFG stuff like that.
I don't know if that will ever come Okay, Well, yeah.
I was I was really impressed that I typed it in and I hit enter, and I could tell instantly you were used you were not using React because the page loaded when I hit enter, So that was that was That was great. And then and then I can also tell you weren't using React because when I click on a button, the U r L changes. When I click back, the back button works. So I'm pretty stoked on this.
Good.
Yeah, I'm currently using a a what do you call it a skeleton, so it just uses or just loads to HTML quite quite quickly. It's still a single page app, but I really want to move it to a multipage app as soon as the the cross cross document view transitions are already they're already working also in Safari Tech
preview right now. Basically the only reason it's a single page app right now is because I wanted to have those sliding transitions on mobile, and the only way to do that when I started building this was to do it as a single page app and have both pages in the DOM and then do some animations.
But now with the this is beautiful, I think thanks. I wish that there was something basically some boilerplate, like some copy paste boilerplate that somebody uses this as a template for how to start their web out because I mean, just no website works anymore. And this works like everything that I click, it responds instantly. There's an animation or a transition to let me know that my click was
responded to. I mean, this is like using the web in nineteen ninety five, but with flat design as if it was in nineteen eighty five.
Yeah, yeah, yeah, thanks thanks. I have if I had a euro for every time somebody asked me to open sources, that would be a millionaire by now. But I really want to do it. But the thing is that the code is not Yeah, I think it's a bit messy, and it's pretty integrated with Amazon. It runs on AWS. So I am thinking of starting a boiler plate for people to really start up a PWA what I did
do in the meantime. On my GitHub page, there is a project called basic service Worker, which is just a service worker that enables you to make your web app work offline, because I think that's really the baseline that web apps should have, and there's so many web apps that just do not work offline, and I think any any web as should work off line nowadays.
What you should do what you should do. I think, now, maybe this already exists, and maybe Fred can chime in and tell us it exists, but I would look to integrate something like that with Astro. You know, Astroid is multi page and not single pages, so they support view transitions between the pages in their framework. So having really good offline support with Astro, I think would really open up a lot of interesting possibilities for a lot of developers.
Yeah.
Yeah, I'm using stimulus and I'm looking at the same kinds of things.
You know, it's like, oh, how much of this can I tie in?
Because again, stimulus is like weight and inside your controllers, you can call into any of these APIs.
Yeah, for sure, Just just to say chuck, just to say it's so yeah, to emphasize the fact that Danny kind of stated it, but it really needs to be emphasized that it's so easy to transition from a plain old web application to a p WA. Basically all you need is adjason file, which is the manifest you know, how hard is it to do adjason file and and
the service worker. You know, we've been talking about all the sophisticated things that service workers can do, but you can also have a really dumb down service worker that's basically passed through and there are you know, examples of this on the web, and and just add that and and you're done. It's a p w A. Uh. And then you can start adding all the sophisticated bells and whistles.
Yeah, I was I was going to ask too.
So on all the demos on what pw A can do dot today, I mean, these are all just using straight up browser APIs and dom APIs.
Right. There's there's no.
Library or you know, special this or that you have to pull in.
It's no, no, there's there's nothing really there. It's just basic vanilla JavaScript. I think. The only thing is I think I used three D dot j s for one of these demo. Have to look it up. I think it's in the orientation or the motion demo. Oh yeah, it's in the device orientation demo. If you look on that on a mobile device, there's a nice texted cube there. That's what I used three D do js for. But I don't even Yeah, I think I could even do that myself really not that hard. But the rest is
no framework. Nothing is just browser APIs. Like I said, the the service worker and the manifest adjacent file. It's funny that you mentioned then the the integration with astro. I at my time, I g I did look a little bit into Astro, but I'm not even sure if we need any specific integration for that, because the service worker itself is just a a separate web worker file that probably doesn't even need any integration with with with the framework.
Oh yeah, for sure. It's just that if you make the whole process as seamless for Astro developers, that would immediately provide benefit for a lot of developers. That's that's all I'm saying. Obviously, at the technological level, you don't really need anything because you know, like you said, service worker is basically just a JavaScript file. Astro is basically
just a web server, you know. Yeah, that's yeah, you don't need much in a way of integration to get web service to deliver JavaScript files.
Yeah, yeah, yeah, it's interesting. Now I'll have a look at that to see what I can do over there. It's the Yeah, the main thing about the service worker that people always struggle with is like the life cycle management of it and also the way you know, if something goes wrong in your service worker, it can go really rough sometimes.
But I think that is mostly fixed.
Though.
It used to be that if you got a bug in yourself service worker, you could literally get into a situation where you would need to call your visitors and ask them to reload the page or clear the thing something. But I think they fixed that.
Yeah, I don't even think there was a fix needed on the on the platform level, but I could be wrong. You can always just you know, just to put a put a no observed worker in there. But the thing is that people whenever they go to your web app, they need to get that service worker, which is mainly the hardest thing. So what I did in this basic service worker project I have on GitHub is that I made sure that the service worker can update as soon as possible, and it also actively checks if there are
any new versions of that that service worker. And then I also use you know, like like page events like page height and all stuff like that. So whenever right before you close it, it will check. And then the next time you open it and the service worker is already down there, it's installing, it will be activated straight away. Whenever that is possible. It won't be possible if somebody has like multiple taps with your web app open, because that would be very messy.
So you you we mentioned a couple of the items on the list here, it's worthwhile to mention a couple of more. So we've got geolocations in here, notifications. We already talked about the forms of capture. We've already talked about vibration, barcode detection, web share, payments. What what what is the payment API? What can it do? Uh?
The payment API is just integrate with Google Pay and Apple Pay. So yeah, if you just got it, it's just a very simple demo. You can just click the button and then you will see in Chrome you will see a Google Pay screen coming up with one dollar cent, just just for demo, and whenever you open it in in iOS, you will see the Google pay sorry, the the Apple Pay screen. So what you can do there is is just call yeah the APIs for those specific things and have a payment done in your app. So
it just integrates with with that. It's also our browser API. But then you can pick if you want to, if you want to do it with Chrome Pay or Apple Pay, and that will just completely integrate with that.
And we've got speech synthesis, speech recognition, wakelock, which means that you can get your phone to unlock.
No, it prevents your screen from locking, which is why yeah, which is also something like I love to cook, my wife loves to cook, so I regularly get get the recipe on my phone and then whenever your hands for dirty, you want to scroll through the recipe or you want to do something else.
And then in my language, my friend yeah yeah, and that's all the time.
Yeah, me too, and then the screen just goes off. You know. That's the thing. None of these sites use this, and it's so easy, so simple to use. It's just a couple of lines of code, and that will make your recipe websites stay on. You know, it will keep the screen on. You know, if you're a cook, if you're cooking and your hands for dirty, that's really something you need. But they don't use it. It's yeah yeah.
My solution to this is I call my eight year old over, Okay, can you unlock my screen?
Now?
I do that too with my daughter. Yeah, yeah, yeah, yeah, I would come coming back. Like you said, AJ, like you were surprised that a lot of stuff is already supported. I hear that so often by web developers say oh, I have no idea that this was supported, because yeah, people don't know. And that's also why why I write about this, is to educate people about what is possible nowadays with web pats, because a lot of developers have
really have no idea of what is already supported. But that's also the reason they don't use this stuff, because they don't know about it.
So I guess my question on this is how much of this stuff is.
Like I'm looking at the wakelock for example, and okay, so it's it's under the navigator stuff, so you really it's already there, you just you just have to run it. How much of this stuff requires you to have that service worker and how much of this stuff is just kind of part of the dom api.
Let me see, I think the service worker is only for the let me see, for the backgrounds it requires a network basically, yeah, no, not even that. Basically the background fetch API for example, to download stuff in the background. Yeah, that's what needs a service worker. The background sink as well, although you could poly fill that the background sink. What it does is you can ever whenever there is for example,
you want to send out some message. Let's say that you have an email client and you want to send out an email. What you can do with background sync is to create like this out box functionality. So what you can do is you can send it straight, you can send it to an outbox, and whenever you are online, it will go from the outbox it will be sent immediately. But when you are offline, it will go to the service worker and then the service worker will take care
of sending it whenever the network is back. But that's also something you can poly fill. With the online and offline events, you won't have the granular control that you have with background sync.
Also also the limitation that the web page would need to be open and in focus, whereas with the service worker it can it can work even if your web page is closed.
Uh yeah, yeah, yeah, oh yeah, that's another thing yet that also where yeah, the sink will also be raised when when it's not. No, I don't think so with the background sync.
No. What I mean is with background sync, with using a service worker, the web page doesn't need to be open, like whereas if you're just using the online offline events in the page itself, obviously the page needs to be open in order for it to work.
So what you're saying is that whenever I register a SYNC something that needs to be done whenever the network is back. So when I close the p w A and then the networks come back, that that task will be executed.
Might be and I need to you know, I haven't played with it, you're the PWI expert, but that but that would be that, that would be Like the whole idea of a service worker is the fact that you've got code that is running like p w I basically serves two purposes really. First of all, it's a proxy between the page and the network, so it gives you a lot of control over what goes through the network.
You know what comes from the cash. It gives you a lot of cashing capabilities that are otherwise not available. And the fact that it continues to run or can run when the page is closed, which means that it can do background things even when the page is closed, even theoretically when the browser app is not in the focus, like the background sync, like sending push notifications.
Have to admit, I didn't even try that yet. With the background shink like like having some shank registered and then closing the p w A and then reconnecting the network. So that's interesting. I'm going to try that tonight. I didn't even I didn't even try that. Yeah, it's a very good, very good remark.
So his mad scientists costume on for Halloween and then try it.
Yeah, yeah, no, that's really good. That's really good. Actually, other than that, it's only the notifications that will need a service worker, but like the rest, I'm quickly scanning through it. Yeah, all the other stuff is just basically workable even without a a service.
Worker, right, because it's either dom or browser and it doesn't need the network.
No, no, it doesn't really need to need a network.
No, no, Yeah, it's it's a huge shame that all this API is there, it's available, a lot of it is even supported by Safari, and yet web developers hardly ever use it.
Yeah exactly, exactly, Yeah, yeah exactly. I think it's a combination of people not being aware of this, that this stuff is available, and yeah, whenever they need something or functionality like this, I think they will be quicker to go to a native app and build that, and then.
The company, the company might go to a native app, but the actual developer, I mean, you know, there are a lot of people who are web developers and don't really have much experience in building native applications. Me for example, Uh, and you know, obviously I can go and learn it. It's you know, it's not the end of the world, but it's effort. And if I can get the same functionality using technologies that I'm very familiar with, then you know, it's.
So when Yeah, the point is is that a lot of this stuff that's on what compete WA, what PWA can do today I'm trying to it's a jumble of letters in front of my face and so I struggle to read it. But a lot of these I didn't know were there, and so it wouldn't even occur to me to try to do it with my application, if that makes sense. But I mean, like a barcode detection, right, I would have gone out and I would have found some library that would have you know, magiced it in.
But you know, it's like, oh well, anyway, So one other thing, and yeah, now we're getting into kind of the NUBE questions is so let's say that I want to put this in to my application, and you know I mentioned that like the background sync and the background fetch and some of this other stuff is some of what I'm interested in. Those require service worker. How do I set one up?
Is it just.
I mean, is there just an API for that that I just you know, call, and then how do I tell it how to connect to the back end to respond? And then finally what does that response look like?
Yeah, So basically what you need is a script, so a separate script which is a service worker. And like I said, it's a special kind of web worker. And what it consists of. I already mentioned the life cycle of a service worker, So what it goes through. Whenever a web page is loaded and it finds a service worker script, it will load that script. The service worker will then start to install itself. So basically what you do is you define an event handler for the install event.
So it's really a simple event handler that you put in there for the install event. And then you can call the cash API, which is cash ad or cash ad all. You can just give it an array of URLs. That's all you need to give it. Let's say you have a couple of scripts, you have a couple of images, you have a couple of style sheets. You all put
the r ls to those files into the array. And then let's say you also have some htmail routes that don't end in a dot htmail file, you can also give that to the service worker, and then when the service worker starts to install, it will run that that install event handler, and inside that event handler, it will add all those it will fetch all the all the stuff it needs, like the the the assets style sheets,
whatever you put in there, it will fetch that. It will fetch the pages, and then it will put a response object into the browser cache. And I'm not talking about the cash that the browser uses for the network, but it's really like it's it's a property on the window object. And then after that, whenever that is finished that that install phase, it will go to the to the activate phase. And in that phase you can, for example, you can remove some old cashes. For example, one of
the best practices is to always version it. So I always put like a version variable in my service worker, and then I attach that to the name of the of the cash, which can be anything you want. And then what you can you can check for other cases that are still there, like for a previous service worker, you can delete them and then you can add yeah, or you can start up. You can you can even create an index TV or something like that if you
have to serve other stuff. And then after that, yeah, you need a fetch handler, which is also a simple simple event handler. So whenever there a network request is done, the service worker will raise a fetch event and then the event handler for that will, yeah, will handle the network requests. And then inside that you can just do basically whenever you want. You can let's say, you can use you can serve other pages if you want, you
can serve offline pages. You can decide if you want to serve everything from the cash or if you want to serve everything from the network, or maybe something in between whatever. So basically it's just yeah, a lot of scripts and a lot of event line was that you use for that. Like, for example, a push notification is also an event that is raised, so you put an
event handle for the push event. The background fetch is also an event, and background saying they're all events, so a lot of it is just event based.
Like I said, the easiest I think way to think about it is as a cloud as a proxy, but instead of running somewhere out in the cloud, it's running locally on your device. So all the network, all the network goes through that and it can and it you know, has total insight into the actual content going back and forth, and it can pretty much do whatever it wants with the requests that are for that for the pages on domain.
That's that's willing to know. So if you're making requests to third party stuff that does not go to the service work, it does it does? It does go to the service Yeah.
Yeah, yeah it does. I think what you're referring to is that the service worker can only control its own domain. It cannot control any other domains. There are some okay, help me right now. Sorry, yeah, yeah, yeah. So for example, what you can do is if you have Google Analytics, for example, I always had that when I when it was trying to fetch the Google Analytics script, that it would just give an error and then it wouldn't work
offline anymore because it would would give an error. So what I did at a certain point, I would just fetch the script and also store that in the browser cache. So if you have third party scripts, you can also catch those and then deserved worker can also yeah, serve
those value are offline. And that's very important because you know, if you want your app to work offline and there is like an error in there, and you know that the worst thing is if you have an error in your index page is like the first page, then it serves. If there's something wrong in there, it won't work, it will give you an error, it won't serve the page, and your whole offline functionality is gone.
Yeah, this is one of those really annoying things. Like, for example, if I go on a flight and you know, I'm reading something interesting at the airport just before the flight, you know, boards, and then I bought the flight and I want to keep on reading but the pages, but because I switch between apps or something, the browser decides that it has to reload the tab. I can't because I'm in airplane mode or whatever. And that's gone on, and you're thinking, hey, it's just text. Why can't I
see what was there before? But I can't. And with service worker, it's so easy.
It is it is. Yeah, it happens to me all the time as well. I use the Fiery browser to put it in the reading list, and it always or like nine times out of tend it just refreshes for no reason, and then it's it's not stored right or something. I don't know, but yeah, that's that's like you said, it's another very nice use case for a service work and just put a button on your pages if you haven't already cashed them, and then put a button like read offline or something.
That's.
Yeah, that's also something that you can do with a service worker.
Yeah, it's It's interesting because so topendevs dot com for example, it uses import maps, right, and so a lot of the a lot of the scripts are being pulled from a CDN somewhere instead of being loaded up by my own domain. And so what you're telling me is is that it can capture and cash those so that yeah, when somebody comes back around, the page still works even
though that's the third party stuff. The other example I'm thinking of is I've played with the idea, and this is on another app that I built several years ago, played with the idea of allowing people to essentially put together their own podcast feeds out of other third party audio.
And so for example, you know and.
I, the idea was to put a plug in into like Chrome, and so then it's I'm on this page, it has some audio or video that I want to add to this feed, and so I can you know, click something in there, but then it.
Would load it up on the page for the actual app.
And so what you're telling me is I can catch those two even though I'm not hosting them and they're not under my own domain.
Yeah, yeah, yeah you can.
You can.
You can just fetch it. You can. You can let the surface work and fetch anything you want and then store the response objects in uh in the browser cache. That's that's really really no problem. And another thing but I also use is I can also put that in the chat. By the way, another demo app that I built some time ago is that also uses a readable stream. So and that's something that I started working on again because now with the with the cross document view transitions,
this could be very handy. If you have cross document view transitions, you need to make sure that your page is loaded very fast, because otherwise, if you click a button or you click a link and you have a transition and it takes like two seconds, you know, that really doesn't look good. So a couple of years ago, I also I put it in the chat. Now is also a demo app, very simple that uses a readable stream.
To serve the responses. So what it does is everything is split out in a header, footer, and a content and then what the browser or what the service worker does is it intercepts all the requests and then when it does, it streams the response back to you, which stitches it back together from the header, the content, and
the footer. And that allows you to have a multipage app that is well nearly as fast as a single page app because it streams the content to the browser and then the browser streaming partier which is insanely fast and can stream everything. And yeah, you can basically have a multipage app with a service worker that's just as fast as a single page app.
Sounds a lot of like what Turbo does.
Yeah, I think it's similar. I think it's I heard that term before. Yeah, I think I think they also do something like that. Yeah. Yeah.
If we can get some of our listeners to just try out the stuff, you know, go into your page, look browser around, try it out, get inspired, and actually try it out, I think I think we've done.
We've done a few the.
Web that would be wonderful. Yeah, yeah, yeah, yeah, yeah, that's also what I consider my job to educate people on what is available what you can already do with with web apps today, because there is yeah, like there is so much that you can already do. I mean, even if you don't want pw A, you don't want people to install your app, you know, really with the with the icon to their home screen, at least make
sure that your app works offline. That when you know, whenever they go to you, and not even because people they tell me, yeah, I have this chat app, and there's no point for it to work offline because you cannot chat when you are off line. Of course you can, but I've been in so many situations. You know, you're in a parking garage or in a building, or you're in some rule area where you just do not have a network, maybe for thirty seconds or a couple of minutes.
I mean, that is my definition of line. It's not like totally offline, but it's for those situations where people have a bad network, they're in a parking garage or something. You should make sure that your web app also works in those those conditions and that they don't get this ugly dinosaur screen that tells them that they're offline. There's there's really no need for that. It's not something that's uh that that that native apps do and that web
app shouldn't do either, I think. So at least get the service worker running.
Well, yeah, you've got you, you've got you've let's say a user filling this big form and then clicks submit or something, and because they're walking around so that I don't know, they move between two cell towers or something, and they lost connectivity for a second or two. You know that that shouldn't kill that form submit.
No, no, exactly, but that's what happens all the time.
Well, the other the other thing is you're talking about a chat or something that maybe it might be time sent. You could also simply just put some intelligence around it, right because at this point it's just JavaScript calling an API in your browser as, hey, you are offline for more than five minutes, do you still want to push this chat post?
Yeah? Yeah, yeah, for example, or you could maybe store a couple of messages and then send them later. Might not always make sense, but that's at least something that that that you can do. And also, you know, when when you have a service worker, you already have all your assets cashed and people are on a bad network, they don't need to download that anymore because it's already there.
So yeah, that's completely true. But I want to emphasize that even though you get fine grained, granular control over cashing with service worker, that's not a justification to not put proper cash shadders on your stuff.
So of course should always always of course, yeah, of course. But what I mean is that you know, if you are on a bad network and people already visited you're at one time that the assets are already there, so they don't need to download these again. So you can use that that little network that you have, you can use it for more important stuff.
M Yeah, for sure. The amount of times that you know, let's say, at the airport, I you know I'm late from I you know, I'm late for my flight, or I'm worried that I'll be late for my flight. But I'm overseas on a data plan. Connectivity is shitty. I try to check what's going on, and I'm having frustrating problems trying to get the air line website to load. You know that's happened too often.
Yeah, I'm sure I have the same thing. It's I was in the last weekend, I was with my wife at Aka to pick up something. So we were at the pickup point down in the parking garage, and then I wanted to I was checking the my my newsletter. I got a couple of new subscriptions, so I wanted to go to the member list and I had to do some filtering. So I clicked the filter button and then this dialogue screen comes up, but it's initially it's empty.
There's not even a button there to close it. So I was there for two minutes with this filter screen that you know, blogs like more than half of the screen, and I couldn't even click it away because it was still loading all the stuff. It was loading everything that is inside. Yeah, of course this is just bad programming. They should have put the button already there and at
least tested it on a slow network. But if you already have that, you know, framed out with a service worker, that stuff wouldn't happen.
I have to say that, you know. Again, going to our initial conversation about native apps versus web apps, even with other PWA stuff, a lot of times web apps are just better. For example, I've seen a lot of news apps that when you go to let's say some news article. Until they load everything, they show nothing, so until it finishes downloading the largest ad or something, you basically can't read anything. And this is something the web has solved like ages ago. So it's it's so frustrating.
Sometimes I just wish that, you know, that instead of using their native app, I could just use their web app, because sometimes you can't, but a lot of cases you can't. Yeah, yeah, frustrating.
Yeah, yeah, yeah, I do the same thing I I. You know, sometimes I just refuse to go to the to the native app. But for example, the other day,
I also write articles on mediums. The other day somebody responded to one of my articles, and then I was sitting on the couch at home with my phone and I wanted to respond, but I couldn't do it because then you have to go to the native app, which is I think it's about eighty four and a half megabytes just to fill out a form to write a comment, which is simply not of course it's possible, but it's something that they want you to download the native app for,
which is ridiculous, of course, but that also feats the idea, I think to end users and maybe to developers to a certain extent, that web apps are just bad, they're inferior, they're not as good as native apps, which is of course not true. But because a lot of stuff is in native apps that is not in web apps. While it could be, or maybe it's deliberately not there, people really get the idea that web apps are inferior, and that's really a shame, I think, because it doesn't have to be that way.
Yeah.
So are there any things that the native apps do that the PWA's don't like? And I'm even talking about experience things like, for example, your web app does have to say ask for permission to use your camera and microphone before it works, as opposed to in a native app it just kind of does it without asking you.
Yeah. Yeah, those are a couple of things.
Well.
For example, I think the main thing that that hinders web app is the install experience, and that's also something that Apple Apple refuses to implement properly. There is a browser API that allows you to trigger that install screen. Like I said before, in Chromium browsers, you can even have like a better screen with screenshots and a description and the name of the app, all the nice stuff that makes it look more like you're installing a native app.
Apple doesn't do that. You have to go to the share screen and scroll all the way down, and then there's this add to home screen button. I think that that's the main thing that hinders us. But for the rest, yeah, it's stuff like I think there's a couple of background I think native apps can do some more stuff in the background. I'm working also on a web artisty app that you that you can it's a bit like like WhatsApp that you can make calls to each other. That's
something a web app cannot do. You cannot have like a somebody is calling you screen. You know, the whole screen is lighting up, just just like you have when somebody calls you. That's something you you you cannot do. And then of course there's a lot of bugs, things that don't really work well, especially on iOS.
iOS is the thing. If let's put it this way, If iOS forget about adding new features and capabilities, if iOS just added a chief sufficient parity with what Chrome already provides on Android, I would be a happy camper.
Yeah yeah, yeah, me too, me too. But still there is a lot of stuff that you can already use in web apps that is still underused, like like all the APIs I'm showing here now that that can already be used across platforms.
And one more thing important to note, a lot of these APIs you don't need to be a p w A to do them. Like like you know, everything having to do with the background, you need a service worker. If you want to get added to the home screen on a mobile device, you need the manifest. But if you just want to do something with audio or video, you don't need to be a p w A for that, not.
At all, Not at all. You really don't need any any stuff to be a p w A like that. Like you said, it's really the background stuff and the notifications that you really need to be uh, that you need to have it installed for. But for the rest you can use everything. I can understand that, you know, companies that haven't NATed app right now are not going to bet their whole business on a web app when uh, the installed experience for iOS and Android is that different.
I can understand they don't want to do that. But besides that, there is yeah, all the stuff that you can already use in a web app, and that it doesn't even need to be a p w A four. So yeah, it's it's it's really a shame that it's so underused all this stuff. Yeah, yeah, so that's yeah, that's that's basically what I'm trying to do to educate
people and show them what is possible. I regularly post screen recordings as well on X when I take one of these demos and then you know, run it on a device, make a recording of it, and then show what can be done. Is to educate people and show then what is already possible and what they should be using.
Yeah.
Yeah, I wasn't familiar, for example, with the APIs for screen capture and element capture. That's really cool.
Yeah it is, but I have to say those are quite experimental still.
So yeah, so we're recording this on stream Yard, and stream Yard does that right where if you hit the button right you can share your screen.
So is that not that API that they're using here?
I don't think so. I think with web arty C you have the ability to just basically just capture screen, but if you want to capture specific elements on the page, I think that's more sophisticated.
Okay, so I'm not aware of being able to capture screens with web artists without the browser API.
Are you I'm to be honest, I'm not exactly certain how it works. But obviously you've got it in stream Yard, you've got it in Google Meet, so there are quite a number of a.
Yeah okay, yeah, yeah, yeah, yeah, yeah okay yeah. In a web ap you will you will always need to have this. It's called get display media, so navigator Media devices dot get display media that you can use to to get like a screen or a browser tap or like a whole display. You can also limit that with the with the options that you can set, but you will always need that browser api, uh to to be able to share something, to get a video stream of a program or a tap or the whole screen, you
will always need that. But then yeah, you could do something like, for example, you can take that video stream that you get from whatever you are sharing and then put it on the canvas and then maybe limit it or crop it or whatever. That's also something that I'm being playing with lately. But to really get like a specific thing like with the element capture that that's really
what you need chron for right now. And a lot of this stuff is like I said, it's still experimental in the sense that those are origin trials, so you really need to get like an API key to h to activate it. So it's just a meta tack that you put on your in your web app and then it will be activated there. But it's not activated by default in these these browsers and.
Then usually what I'm supposing that so that they can contact you when when they change it or remove it. Were about the break your side or something.
No, they're not, They're they're not going to contact you. It's it's really to activate it in uh. So it's really just a metattack with a name and a long API key long string that you have to put there and then the the API will be activated and you Basically what they was it forced to test out stuff and to get a feedback from developers so you can give feedback.
You know, the basic issue with the web is that
once something is in, it can never be removed. Now, in the past, you know, they've tried to do things by let's say, prefixing things with the browser names like the WebKit stuff or stuff like that, and what they it ended up being is that those things had to be backwards supported as well, so they essentially landed on these origin trials as the only mechanism that seems to work to give you know, developers' ability to test things out without being tied down to particular implementation and being
able to either change the APIs or even totally remove APIs if it turns out that they were bad ideas.
Yeah, yeah, exactly, exactly, And Edge is doing something similar. They have their own origin trials. But then whenever there's an origin trial and chromium that also works in Edge, so you can, yeah, just activate it and play with it. It's not guaranteed that they will stay though. Sometimes they have like origin trials that end and then they don't come back, or they only come back when they've done some refining or technical stuff and then they come back.
And yeah, sometimes they don't. They think it's not worth it, or maybe the API is too difficult. I think it also happened with view Transitions long ago, or there was some different name for it. It wasn't called view transitions, but that was also in an origin trial. I was also playing with it, and then it went away, and then it came back under the name view Transitions, and yeah, now it's now it's widely supported. So yeah, that's basically what they use it for.
Very cool.
We're kind of getting towards the end of the time that we scheduled, but I want to make sure that we've given everything a fair hearing. Is there anything else that we haven't touched on that people might be interested to know?
Yeah, maybe it's quickly some APIs that are now available, Like we haven't discussed the file system API just quickly. It enables you, at least on desktop, to actually to access the actual file system of the device. So on desktop you can just create files there, read files there,
you can browse through your whole file system. And then on mobile it's not available maybe in the future, but right now you only have the Origin Private file system, which is like a yeah, like a virtual file system, so it will not correspond to so called physical files on your disc. It might be in in the database or whatever. But it's also something that that photoshop on the web users. But because it's very optimized for very
fast reading and writing. But from the perspective of your web app it, yeah, it just looks like a file system. That's a very nice one. And there's also the authentication. Yeah, the demo in what p w A can do today is a bit boring because I haven't really found a
nice way to show it off. But the web authentication your web often for sure, it enables password less authentication, so you can just have phase ID or touch ID fingerprints to log into your web app, which is yeah, unfortunately also still an underused one, but a very nice one.
Well, for the first ten years it was useless. It's only in the last eighteen months or so that the APIs have become stable. And even still the documentation out there is horrible and to understand what it is, what it does, and the simple way to use it, you know, and many companies are capitalizing on this to try to
push you through their SaaS platform. But it there, there is a way, you know, there is a way to just you know, you call it with a couple of options, it generates assigned key, you send it off to the server, it verifies it with a public key, and you know you're done. You can be very simple, but it's it's
not it's not marketed. Is very simple. It's certainly not profitable for any of these companies that are doing the off stuff to show you how to do it in a simple way because they want to show you the complex way, so you get roped into their so that one, that one's that one's a tragedy in a lot of and and most of the features don't don't work or unreliably like it was built. It seems to have been
built around the idea of trusted platform computing. So there's a whole bunch of stuff with attestations and keys and a gu U I d S and all that, but
none of it's none of it's useful at all. You can't rely on any of it because because it because the reality of that is that anybody, any any government can just spoof any of those things, because they could just open up a ubikey and get the private keyat you know, they just use X ray machine and soldering and you know, so it's it's it's it doesn't provide if you're trying to log a user into their email
and it's just a Joshmo or their Twitter or whatever. Yeah, it's great, but but I mean, well sorry, the authentication mechanism is great no matter what, because what it is is it's just better than a password. But a lot of the advanced features, if you look into it, the enterprise features. None of them could be trusted at the level of a government because you can't trust that the hardware is I'm modified.
Yeah, yeah, I haven't looked into a debt deep but I have to say that I was playing with the the al a metic upgrade to a pass key. So whenever you log into a website and then the browser alto fills your credentials, then you should be able to upgrade to a pass key. But that was kind of I still haven't figured out how that is supposed to work. And like you said, the documentation is very sparse around this.
I'll I'll link a demo. I've got passkeys dot js dot org, and I'm gonna get the documentation for this, uh in a in a better state. But I'll just throw throw that out there because I spent a ton of time on this. One of my clients is moving to pass keys and and we wanted to get it in a way that would work reliably, and we ran into a couple of problems. And you know, it ends up being really really simple with very few caveats, but
the path to learn it was frustrating. But you know, you've got your demo there and I've got mine in the get Source. I'm going to be linking to more and better documentation as I firm this up for them. But yeah, it's something where it's like I want to tell people go use this, but I don't yet have the resource to point them to that shows. Okay, you follow these steps in these steps and you're done.
Yeah, yeah, all right, Well I'm gonna go ahead and push us to picks. Now.
For those of you who are new to the podcast, picks are just things we shouting out about. We try and keep them short, try and keep him interesting, and I will let Dan go first.
Excellent. So I've got two picks today. My first pick is a movie that we watched. It's a movie from two thousand and well, it's actually a movie from this year, although it seems that it came out last year. Originally it's called Knox Goes Away. It's starting Michael Keaton. Also I think directed the movie. Yes, I see that he did. It's crime thriller, drama sort of thing. But it's just
an excellent movie. I don't want to start telling what it's about because I'll probably spoil it, so I'm going to say that, you know, just just watch it if you can. My wife and I both watched it, and we both enjoyed it very very much. It's just an excellent movie. So that would be my first pick. My second pick is I make it a point on social media to kind of separate between my technical views and opinions and posts and my let's call them political commentary
social posting. So on x it's almost all technical. Sometimes I respond to stuff, but I don't just post political stuff. I make a point of it. But on Quora it's actually kind of the other way around there. Most of my posts are about you know, what's going on, as it were, So if you're interested in that part of me, you can check out my account. I'll post a link in the show notes to it, just as a point of interest. Turns out that my account is relatively popular there.
Just in the past week, I've got something like almost one hundred thousand views there and something like almost a thousand up votes, so you know, some people enjoy it what I write. If you're interested, check it out, and you know, I'd appreciate the feedback. And those would be my picks for today.
Awesome, how about you, aj.
Well, I'm linking to both the Past Key's demo and the Past Keys presentation that I gave because I do really like past Keys. I just wish I had a yeah, like I said, a way to say, here's the quick and easy path, and I'll have that. I'll have it, it will come, but I just don't quite have yet. But the presentation I kind of go through the well, I go through the happy path, but I also explain a lot of the the pitbull pitfalls and stuff as well.
But anyway, Yeah, then I also want to pick Sabine Hassenfelder. I don't know if I'm pronouncing that Sabine Sabine. I think that yeah, yeah, she is totally getting red pilled little by little, you know, I've I've watched her videos over the past year, and she is uncovering more and more and more. She's a physicist over in and I'm I'm assuming by her accent that she's in Europe, but.
Maybe she is German.
Yeah, does she currently live in Germany.
Or well, I'm not sure where she lives right now, but she studied and worked in Germany, as I recall.
Yeah, so she's a top physicist or she seems to be a top physicist, and she's been she's been on uh some of the long form podcast sites. Anyway, she got tons of great videos. Some of them I agree with, some of them I disagree with, but I've just been loving.
Well.
It's terrible because she's getting so depressed over the last few months as more and more stuff comes out with hoaxes in scientific papers, and you know, the foil is getting peeled back.
It's worse than that. You know, hoaxes are people being certain, people being dishonest. The bigger issue is, based on my understanding of what she's saying, is that she's kind of seeing the current situation in physics as basically the death of physics. It's like physics, the field of physics, in her opinion, or at least theoretical physics, has kind of run into a wall, and she has a very pessimistic and cynical viewpoint of of you know, how that this
field is progressing or should I say regressing. For example, I don't know if you know this, but the two Nobel Prize winners for physics this year aren't physicists.
Yeah, she covered one of those.
Yeah, they basically they got the Noble in Physics for their work on AI ne on neural nets. They were like the pioneers of neural networks or something like that. And it's kind of strange that, you know, the Nobel Prize Physics doesn't go to physicists.
Yeah, well yeah, anyway, My point is I really like her channel. I think that uh, I think it's just about anybody who's interested in that sort of stuff could like it because she her viewpoints are varied. She's not towing a specific party line. She is letting herself explore. And you know, she'll criticize one thing one month and then come back and say I was wrong the next month, or well normally it's she is pro something one month
and comes back and criticizes the next month. But but anyway, yeah, so I just want to I want to throw her channel out there because I I've been watching it and I and I learn a lot, and I'm very interested to see her you know, critique of video from a year ago or from two years ago or whatever. And that's uh yeah, anyway, that's that's what I got. So Paski's paskis are great. There is a happy path it. It doesn't have to be complicated. I just don't have
the blog post appointed to you yet. And then Sabina Uh for her her physics videos and just hear takes on things that are that are going on in the realm of science.
Cool.
I'm gonna throw in some picks of my own and then we'll get some from Danny here. So the first one is I was do a board game pick. The last time I got together with my friends, we played a rousing round of the game. We played a couple of rounds. Actually, the game is essentially it's a really simple game board game. Geek waits it at one point two four, which means it's a really simple game.
Essentially, it's called the game and it's hard game.
It's kind of like the band.
Sure that there's another variation on it, and I can't remember what it's called, but it's it's got some other simple name like that. But you have cards the number from one to one hundred. You've got four sets one to one hundred.
And so you start with four piles.
There are other ways to vary this, but we start with four piles to the start with one, and two that start with one hundred.
I guess it's just two sets one to one.
Hundred anyway, So then what you're doing is you're trying to make the cards either count up from one or down from one hundred, and you're trying to discard all the cards onto those piles, moving up or down, and you can jump backward, right, So if you're counting up, you can jump down by exactly ten, and if you're counting down from one hundred, you can jump up.
By exactly ten.
And if you can manage to discard all the cards out of your hands playing in turns, and it's just you have so many cards in your hand and so many cards you're playing, you win. And so anyway, it's kind of a nice game that we can kind of sit back.
And chat while we play.
And there was a lot to talk about this last time, and so we were having an interpersonal talk while we figured.
Out what to do.
And sometimes you can you can all there's a little bit of table talk that you can do. You can't tell people what numbers you have, and you can't hints that specifically tell them what numbers you have, but you can tell them, for example, I would like to play on this pile, right, And so then the other players unless they don't have any other good plays, we'll try
and leave that pile alone or things like that. And so you try and get people clues as to what you can do for the pile, either you know, not playing too far out so that you know, bridge a huge gap and then you've got to figure out which other pile you can play those cards on, or you know, sometimes you're trying to hint to them, hey, I can jump this one back ten and then we can play more cards on it.
So anyway, it is a super fun game.
I think usually takes this half hour to play it, you know, maybe less, depending on how how hard we made the game. Right, Because you have more cards in your hand, that makes it easier. If you have to play more cards out of your hand, that makes it harder, and so you know, you can vary it that way. I think I mentioned yes or last time that I'm putting together the AI boot camp that is going to be an aidvboot camp dot com website. I'm still working
on it. I've had to fix some stuff on top of devs, so I'm hoping I have that fixed up this week.
And there was a.
Website that I wanted to pick, but I can't remember what it is, so I'll pick it next time.
Danny, what are your picks?
Yeah, I had two picks, and I'd like to sneak in a third one if I have time. Yeah, Social movie. Yeah, I was just a remind us because then you mentioned the movie. Also had a nice movie I just saw. First one is the I'll past it in the chatter is the Open Web Advocacy. This is a group of engineers web developers. What they do is they provide technical information to regulators, legislators, policy makers to fight the anti competitive stuff in our industry. For example with with Google
and with Apple. They do a lot of research, they publish a lot about this. Yeah, they get involved to yeah, to get rid of all kinds of anti competitive stuff. Yeah, the link is there, great organization. The second one I have is actually when I picked up here is the web components compiler Projects. What's the guy's name that from Owen Buckley that you also had in April as think on the.
Show imented on this episode in YouTube.
So okay, okay, cool, because it's really I'm working with web components, I'm doing a lot of service side rendering with lit elements, but there was nothing like that for you, like for Vanilla web components. So I was really happy to see that that Owen already built something like this. So I was quite quite happy with that. I mean using it and it's working quite well to do yeah, to do service side rendering for Vanilla JavaScript web components. And the third one is the movie I just saw.
I think I saw it the last weekend. It's called The Whale. It's from twenty twenty two. I won't give away too much, but it's a very simple movie. It's the whole movie is set like in one room, and I always tend to like these kind of movies. It's about, yeah, a man, very unhappy man who struggles with obesity. What struck me about this movie is when it came out in twenty twenty two is the main star of it
is Brendan Fraser. And I don't know if you know him, but you're probably see The Mummy and movies in that like he always played in. I always never considered him like a very good actor, but that was basically because of the movies that we played in, like like for example, The Mummy. But this is really really impressive. He plays this very obese guy in a suit, but you can't even tell it's a suit. It's amazing. You want an
oscar for this great movie. Not a very happy movie, but definitely one I would would recommend you to to watch. It's called The Whale. So those are my picks.
Yeah, it was. It was Brendon Frazer's comeback movie.
I think, yeah, it is, it is, and what a comeback it was.
Yeah, I think about it, but I I'll have to go watch it.
Yeah, yeah, it's it's really Yeah. I loved it. I think the acting was really really impressive.
All right, Well, I'm just gonna throw this out here.
So besides the what p w A can do today, if people want to contact you, maybe volume on social media or reach out and say hey, can you help me with or train me on this stuff?
I mean, yeah, yeah, sure, there's a form. There's a contact form of what people p w A can do today where people can reach me. They can find me on X then you move just my name medium shame thing. I also right there, and I also have a website it's a bit outdated, dannimookcharacter dot com where people can also fund me. So I think X would be the best way to.
Richmond sounds good. All right, well we'll go ahead and wrap it up. Thanks for coming. This was really great.
Thank you for having me. I really enjoyed it absolutely
All right, Well until next time, folks, Max A
