Archive.fm

North Meets South Web Podcast

Dynamic images, Livewire slots, and API-based file uploads

In this episode, Jake and Michael discuss (clever?) ways to generate dynamic images for OpenGraph purposes, how a missing slot variable sent Michael mad, Jake's adventures with API-based file uploads, and some more details about Laracon AU.

Broadcast on:
10 Oct 2024
Audio Format:
other

In this episode, Jake and Michael discuss (clever?) ways to generate dynamic images for OpenGraph purposes, how a missing slot variable sent Michael mad, Jake's adventures with API-based file uploads, and some more details about Laracon AU.

Hey, I'm Michael Durenda and I'm Jake Bennett and welcome to episode 164 of the North Meet South web podcast. Michael was doing his very best YouTube cover video, you know, YouTube cover image, or he was like, you know, these weird things, you know, I know those of you not watching the video, almost everyone doesn't get that. But, you know, that's what it was, it was pretty funny before the show started. So you were just talking and I wanted to make sure, you know, sometimes if you've never recorded the podcast before, you'll maybe be surprised to know that the best information, like the best just, you know, the best show content comes as soon as you get on the call and have not yet started recording. So I was like, let's not make that mistake. Let's start recording. So Michael, design work, you said, you said, I have been doing some design work. And I said, let's press the record button. I want to hear it. And while you do that, because we literally just sat down, I'm going to grab a drink while you do that. And I'm going to listen to my AirPods. So I'm here, I'm here. So a while back, I kind of had this idea to allow attendees to larach on a U to design their own badge and not designers in, you know, choose the color or choose the composition of where things are, but design in so far is putting your Twitter image, like your profile image on the badge. And I kind of wrote it off because we didn't ask attendees this year for their Twitter as part of registration, like when they bought tickets, we didn't ask for it. And so it became this thing of like, well, I've got to figure out how to capture that information out. I've got to go back to them and ask them, do you want to do this and blah, blah, blah. And then it was this whole thing. And then I kind of showed the idea. And I had seen a few people kind of mention it. Like Joe Tannenbaum had mentioned this and Taylor mentioned it in a podcast, I think, on the larable podcast, Marcel mentioned it like there's been a few people that have mentioned it that sometimes you will meet someone at a conference that you've not met personally before, you know, meaning something for the first time. And it may not occur to you right away who that person is, especially more prominent members of the community, for example, you know, someone will come up to you and I'll start talking to you. And you'd be familiar with this, you know, people come up to you because you podcast and they know all about you and all this kind of stuff. And you may have interacted with them on Twitter at some point, you may have interacted with them extensively on Twitter. And you don't necessarily put the face of the person standing in front of you. And the avatar on Twitter that you are most likely have engaged with together. And so it could be like later that day or the next day or worse, it could be like a week later where you interact with that person again on Twitter, where you go, oh, I like literally mentioned that we had a conversation. Yeah. So, you know, I kind of went back to it. And we've got four different badge designers this year. We've got one for attendees, one for speakers, one for sponsors and one for stuff. And so I went back to the printer and I went back to the designers and I said, Hey, is it possible for us to dynamically put a Twitter image? Like, can we just do this? Because we could do first and last name easily enough as a dynamic text on there. And they just like male merge it when they print it. And I went back to them, I said, can we do images? Like, can that be a dynamic thing? If there's an image printed, if there's not though, because not everyone has Twitter. Yeah. Yep, we can do it. And I thought, okay, nice. And I was variable data printing. Right. So I was kind of kicking the can down the road, kicking the can down the road. And then it's like, we have to send the badges to print by the 18th of October, in order to get them all done in time and whatever else. You got 10 days, little over weeks. Yeah. So I planned, I kind of started doing this a while ago. And I was like, okay, I can just go to like x.com slash Jacob Bennett slash photo. And we can scrape the photos that way. You can't do that using like the HTML line from Laravel because it's a Twitter is a React app. So when you load it, there's no, there's nothing on the page, you can't load it and all of this kind of stuff. And the API, as you may or may not know, sure, sure, significant. But lockdown, right? You can make three requests to the API every 15 minutes, which is not enough. No way. Are you serious? On the free one, right? So, which is obviously not enough when you, when you need to potentially get hundreds of Twitter images. And so I was like, now I'm just not going to do it, whatever, like, it'll be cheaper. It'll be easier. I won't have to go into it. Anyway, I was talking to Mitchell Davis last night and he's like, no, you got to do it. And I'm like, well, I don't want to. I'd have to, I'd have to pay to get like elevated access to the API and it's like, it was like $100. I'm like, yeah, okay, fine. So I did it last night. I like, put it all together. I built like this live work. Can I tell you about this live work component? I'll come back. Oh, yes. I built this live wire component that's like a live designer, where it's like, we send you a link, which has got like your badge ID in it. And all we ask for is your Twitter using it. Because I don't even want to begin to think about how I would do this with all the other things. Yeah, right. You're probably not interacting with people on LinkedIn and whatever else is like Twitter. Twitter is the main thing in our sphere right now. And so, just put your Twitter image in there. And then so we will go on fetch, we'll hit the API, we'll go on find your profile, we'll extract the profile URL, the profile image URL, we'll display it to you. So this is like, we put it together roughly as what it's going to look like. It's not the exact design, but it's enough to give you idea. This is what my name will look like. This is what the picture will look like, et cetera. And then, you know, we farm that off, we go on, we go on fetch the image, we go and upload it to cloud and area within downloaded again from cloud and areas as a PNG, because we need it to be like a rounded circle with a transparent background. So there's a bit of back and forth in it. But I've got it in a place now where it's working. And I've sent it to all the speakers for the speakers to be able to do their badge designs. And Joe, Joe Tannenbaum, Lesim, was very excited by this idea. So, and as part of that, we then give you the ability to do a like a share image of your thing. So like share it on Twitter, hey, I'm going to Larrick on AU, it gives you a nice little open graph image, nice dynamic page, little surfing elephant on there, if people click on it and they can go and buy their own tickets and things like that. So yeah, got that all up and running, just going through some like design things, trying to figure out, I saw, I think, Wes Bos was maybe talking about this recently, where you can like, if you use grid, the easiest way to kind of layer images and text over each other, is to do like, have a container that is grid, which is one column by one column. And then all of your items are just coal start one, road start one. And it's just everything kind of just layers on top of each other perfectly. So you don't have to worry about, you know, absolute relative positioning, all that kind of madness that we used to do is just like grid grid grid. And it's like, in the region, sub grid, are you saying or no, you're just saying, just grid, like, literally, there's a div with grid. And then like grid calls one rose one. Sure. So like, what we used to do with, with Twitter, was it bootstrap? Yeah, bootstrap, right? Twitter bootstrap. And so like the column system, yeah. Yeah. So everything is like column one, row one, and it all just stacks on top of each other, the way that I need it. And like, for this, which is like, you know, an hour or two of hacking it together, just to make it give you some indication of what the badge would look like with your thing. I think it was fine. The thing that took me longer to figure out was why my live wire component was not live wiring. And I messaged the cash money about this. And I was like, did you know, I spent like an hour on this, if you because live wire expects your component, like your layout component to have a slot, like a dollar slot in the body somewhere for where the stuff goes. If there's no slot there, because I had a traditional layout, which had a section content, and I was like, or yielding the content, whatever. And because my live wire component was just shoving stuff into the section, it was all displaying, but I had no interactivity. So it took me like an hour to figure it out. And just as I was about to give up and go to bed, I went and looked at the live wire docs, like getting started, like the bone head, go and read the dog's thing. Oh, yeah, you need to have a slot here. And as soon as I put the slot there, it was all working. I'm like, okay, so that's it. You can't you can't yield content. You can't do that. You have to have a slot. Is that what it is? Yeah. Okay, that is actually very good information to know, because I could totally see myself from falling into that exact same trap. Yeah. And I don't do a lot of front hand, like, I don't do any react or view. I don't do any blade, like basically all of what I do, all I all of what I have been doing for the last, the better part of the last three years is back in. Not even it's not even like I don't like the tooling or I don't understand like, I mean, I don't I don't understand the tooling and I don't understand any of the front ends. But like, I just haven't exposed haven't written any HTML for so long. It's it's wild. So yeah, if you want to have a layout for your lightweight components, then what you want is to have somewhere in there a slot or for it to echo into and then go from there. So it's all working now. And I've just sent it out to all of the speakers. I sent it out to a few close close friends who are coming to the conference just to get them to like, I bought the, you know, this is the the flow of stress that says, you know, design your badge. And we we like pre generate all of the the open graph images. So we'll generate the image. And the way that I've done that is basically we generate an image using browser shot, which is just like a HTML view that we throw at it, which has like first name last name tick ID and whether you're speaking or attending. And that's it. Here's the, you know, here's the here's the record I have on the database. Here's their Twitter username. Here's their profile. Here's their whatever. Let me render out a HTML view using blade. And then I'm going to browser shot that thing, save that as an image. And that's number set is the OG OG image. Oh, yeah. Yep. Makes sense. And and and so what I was doing was like serving this all through PHP. So we do a check, like, does the image exist on disk? If it does, just return that. Otherwise, do the browser shot thing and then return it. What do I discover that you can do to like bypass serving an image from the disk via PHP is to define a route in my application that matches exactly the path where the image will exist in the public disk. Okay. Okay. I think I'm trying with that. Yep. So so when you have, when you use the storage link for a public disk in Laravel, it will take it will create a Simlink from storage app public and put that into the public folder as a Simlink. Yes. Of storage, right? So my open graph images are all in storage app public OG, which means they will then be referenced at laracon.au/storage/og. So in my route definition, I have route colon colon get slash storage slash OG, slash ticker ID dot PNG. Right. And so if the image does not exist on the disc, it goes through like the engine X configuration, it goes, this is not a real file. Yep. It will then go, yep, I need to generate this image, throw it on disk. The next time you hit that, engine X will go, there is a real file here. Also the image from disk. And because I'm sitting behind Cloudflare, that isn't cached. So I don't have to worry about like this, you know, serving images through PHP, like which works fine, but it's just like a little bit of overhead that doesn't need to be there. And so doing it this way means that, you know, the image just exists on the disk and I don't like I could use Cloud and area. I could use S3 or whatever else to serve these images, but it would mean that I was to have to check does the image exist. Um, so now I just go, yeah, it's, it's either there or it's not and it's a clever little hack around the same. Yeah. So, so when it hits that dot PNG endpoint and it does not exist, you're saying then engine X goes, well, that doesn't exist. What's my fallback route for 404s? Then it goes index.php. So it goes without any sort of, like, without any sort of reference to the previous route, it was attempting to hit. So like, how do you know to generate it then at that point? Well, it still knows, right? So my route matches that same path. So that the route that I have defined in the application is the same as where where it would exist in this in the actual disk as a as a PNG. Okay. Okay. So in the engine X configuration, I get it. I get it. Yes. Yes. So engine X handles the first. Yeah. I got you. I'm sorry. Can I explain what out of you? Yes. Yeah. So like engine X itself has like a block and it's like in its server block, right? A line that says like, yeah, essentially, if there's an image, go check to see if it exists first before doing anything else. And so that's what you're leveraging. You're leveraging that sort of mechanism that says, go determine first if there is an image at this, you know, at this location. So then once it fails that check, it then delivers to your route, your defined route in your application. Yes. Okay. And that defined route then says, Oh, I need to generate this. That route will never get hit in the case that the image already exists. It will just engine X will just default to showing that route. Yes. That'll make sense. Okay. That's a really interesting way to do that. Yeah. Yeah. And then at that point, you get all of the default, like caching headers and things like that. So then when it gets served through Cloudflare, that will then get cached forever, which yeah, can be problematic if you ever want to change that. But with the design is fixed. Like we don't have any differences in the design. It's just everyone gets the same design and either says they're attending or they're speaking. And then we use Twitter's tweet intent against just a URL, you can hit x.com/intense/tweet. You can pass up some text. And so that allows people to then share those. So I'm hoping to, you know, in these last three, four weeks in the lead up to the conference, just get people talking about it, sharing that they're excited, finding out, you know, who else is coming to the conference, make some friends, et cetera, et cetera. So yeah, really, really excited with how that's going to play out. I've seen a few people go through the process already, you know, excited to keep going with that. That's a great idea. I think that one of the other things that is a interesting challenge to solve as well is when you do meet somebody at the conference, how do you then figure out who they are and how I can follow them on Twitter without having to go through a whole rig and roll of like asking, like, what's that, you know, like, how do I follow you sort of deal? So we've talked about before, like having QR code, whatever, where you could, you know, maybe it links to like their pinkery or something like that, that being the idea. And so this, this idea that you're coming up with here is maybe a step further than what my, my previous idea that we were going to do for a conference was. So my, my solution aims to solve the problem of connecting at the conference. And yours is, and yours does solve that problem. It's just solves it in a different way, right? But it also has the ability to be able to, like you said, like you can share it ahead of time. And, you know, you get this nice open graph image that you can share on Twitter that has your profile, all that stuff. So that's pretty cool. Like that's, that's a really interesting idea. I like that. This is similar on that same sort of vein, but the, the idea that I had was, okay, what if that like our booth or something like that, we had these QR codes that we had generated. Now we're working on this application right now called sub-reconnect. And sub-row is the sort of that's the industry we're in. Like if you were dealing with payments, you could say, like, payments is the industry working, like sub-row, like, sub-rogation is what Wilbur does. And we're making this new product called sub-reconnect. So the fact that it has the word connect, and that's what we're trying to do with people sort of plays nice together. So we were going to make these little things that you could throw on your badge because we're not the organizers of the conference. We can't modify the badge, but like what can we do to sort of like add it onto their badge? So we talked about maybe making like a sticker or like a little hanger, like that would go on the bottom of your badge. I would say sub-row connect with me. I was like, oh, that's kind of a cool idea. And then you'd have like a QR code, you could have like them printed ahead of time. And then what that would do is if they scanned that URL, then what it would do is it would link up to a page that would allow them to have, hey, here's my LinkedIn. In this world, it's like not people aren't necessarily doing their stuff on Twitter. It's like they're doing their stuff on LinkedIn. These people are anyway. And so if you scanned it at the very, at the very simplest, if they scanned it, it would go to their LinkedIn profile. And so the idea was like, well, how would we do that? How would we print QR codes ahead of time and associate them after the fact? And so what I was thinking is you would essentially have all these URLs, like these short codes for lack of a better idea, a better like, you know, analog, analog is the right word. It would basically be a short link, right? So I have a short link that then has a QR code, print them all up. And what I would do is when I'm getting ready to hand one of these out, I would like scan the QR code to get the link of it. And then I would just manually associate that with like their LinkedIn username or something like that. Like I'd have them, you know, I'd have them give it to me or sort of however, right? And so I was just in my, in my table on my side of my database, I would just say this short link right here goes to this location. So somebody scans it, it would then just kick them over to the LinkedIn page so they could easily connect with that person and, you know, follow me on LinkedIn or talk like a LinkedIn or whatever sort of deal. So that'd be fun too. But you kind of already have that mechanism built in where you're, you already have this way to like point to a page that they have. So anyway, I don't know. I, you know, I know you, you probably don't have QR codes. The fact that you already have like a Twitter username, I'm assuming on the badge probably negates most of this. Yeah. But yeah, so we're doing, I mean, we're doing that we're not someone did mention the QR codes. And this is, this is the tricky bit. People, people trying to offer good suggestions and me trying to do certain things in secret. So we're not, we're not doing QR codes. We, we are, I think I've mentioned before that we're doing like an app for the conference this year. Oh, yeah. So Mitch, who is talking about building mobile applications using Laravel and, and you know, technologies that we're all familiar with as Laravel developers is actually building out for the conference and app. And we were talking early today, he's like, when are you going to announce it? I guess this is, this is kind of the announcement. This is the announcement. This is the announcement. So we're going to have an app and there's like multiple facets to this application. One is like to show the schedule, we're going to use it for attendee surveys. And like the speakers might want to have some engagement as part of their talk. So they might want to ask questions, they might want to go, like, where do I go from here? Do I take option A option B? We're also going to use it for our Q&A. So people in the audience will be able to ask questions of the speaker, we had an upload downvote, you know, and then I'll do that Q&A with the speaker. So that's, that's part of it. But we're also going to allow people to put like a profile together and share their details in there. And then we're also going to use the app as part of our networking for the event to encourage people to like talk to each other, to take photos with each other, because there will be a game running through the conference, running through the app. That will then lead to some prize at the end of the conference. So yeah, we're really like doubling, tripling, quadrupling down on networking this year in terms of what we're doing, what we're facilitating and what we're like, not going to force people to do it, but, you know, we'll make it really easy for them to engage. So people will be able to fill out their profile in the app and then they'll be able to say, you know, this is my Twitter. This is my pink ray, whatever. Sorry. And yeah, lots of stuff going on there. So then you've got that. Yeah. Yeah. You sort of got that base cover with that one. That's cool. Yeah. That's pretty ambitious. Honestly, that's a lot of stuff. I mean, those sounds like when you're thinking through it and you're like, Oh, yeah, I mean, I could do that. I could, you know, create a table that just has like, give me the, you know, store question, right? But man, there's a lot of considerations we made for something like that. So that's really interesting that he's doing that. Is he building as like a progressive web app sort of deal where it's like, it's a, he's building it as a native app. So there'll be an iOS as a native app, Dane. Okay. Yep. So they'll go into that. That's crazy. That's crazy. He like he's credit to Mitch and Alice software, which is his his company. He's really taken this ball by the horns and he's running with it. And at some point, he's going to have to stop building the app and start, you know, working on his talk about building apps. But he's using this as kind of like a real world case use case of like I built this using Laravel and, you know, react and whatever. And then I've built this mobile app, which is, you know, on hundreds of devices in the audience right now. So yeah, it's a really good show piece for him as part of his talk. Yeah. People raising the bar, dude. It's kind of crazy what folks are doing, you know, like, it does make it like you have to bring your a game. If you're going to be presenting at one of these conferences, and it seems like almost everybody has like a product or a front or a package that they're that they're like promoting as like, Hey, it's not like I'm just giving a talk on something that's a helpful way to do a thing. It's like I've been working for the last nine months on a particular item. And I'm going to show you what I've been working on. And not only that, I'm going to tell you, you know, I'm going to I'm going to create a talk around it as well. So dang, man. Yeah, that's a lot of work props to props to Mitch. That's a very ambitious goal. So that's really cool. That's really, really cool. Yeah, it's going to be a it's going to be a very good, maybe a very good talk, I think. And I'm excited, like, just the stuff that we've we've been going through, like he touches base on this week or so, just to see where he's at, where my head's at, you know, what we want to do, what we can do, what's possible, given given time and all of that. But yeah, very excited with how that's all going to come together and what it's going to facilitate for us as a conference. And with any like, like we'll see it bubble up into into the future as well for maybe some other events. Sure. Yeah, that'd be great. I could see, I mean, it's supposing that that all goes well. I could see reusing that, you know, for other for the other layer cons as well, you know, and just add on to it every year sort of deal. Yep, for sure. They're really interesting. Cool. Well, on my side of things, we are in the middle of building out this platform, I was just talking about CyberConnect. So it's basically a data exchange protocol is what it is. One thing that I've been interested in thinking through is the idea of doing file uploads through an API. And I'm curious if this is something we're talking about. I kind of feel like it is. And I'm curious if it's something that you've done before. But before I get to that, I wanted to let you know that in the case that I have a non fatal, but tragic nonetheless, injury within the next month or so. It's probably due to the fact that I had a friend who talked to me into getting a one wheel. And it has been so freaking fun. It has been a long time since I've been this excited about like a toy. Every night, I ride this thing. It's great. Like I went road like, you know, a couple miles tonight on this thing. It's just a blast. It's awesome. And I have taken a couple of those dives on it. Like the dangerous thing about these one wheels is that if you go too fast, the front end of it like can't keep up with the speed that you're going like you're putting too much weight on it and you're going too fast. And so it just stops basically. This is the front end dives down. And then you're left like facing the pavement with nothing under your feet and you're going, you know, up to 23 miles an hour while having this happen. I have not yet had that specific scenario, but I've had a couple of things close to that. And so I've got, I feel like a kid again, man, I've got like scrapes on my knees and elbows and sort of stupid nonsense like that. But I got to tell you, it has been so fun. So if you do not know what a one wheel is, you should definitely check it out. It's basically like a skateboard with a wheel, one wheel in the middle of it, a really, really big fat tire wheel. But it feels like you're snowboarding. And it's you kind of like can carve on it. And like I said, this one goes really quick. This one's like, I'm too cheap to buy anything like that brand new. And so like I bought it from a dude who had it for a while and wasn't using it. So it's already kind of scratched up a bit anyway, which is fine with me. But this particular model is like the GT model. And it will go, it will go supposedly up to 23 miles an hour. I've had it up to 21. I'm too scared to push it all the way to the top. But I got to tell you, man, it is a blast. It's so fun. So if anybody's looking for a new hobby, let me suggest the one wheel. And I should I literally I should bring it to the next I should bring it to the next layer con. Anybody out there who's like out of one wheel hobby, let's bring our stuff to the next their kind of will have a little one wheel gang that would be super fun. A bunch of old guys and gals riding their one wheels round, but it's it would be fun. A lot of fun. Okay, I drag guys. All right, so APIs. I was trying to think through the the how I would want to do this in the case that I was a person consuming the API that I'm creating. And how I thought about it was rather than having a API that I need to figure out how to use to do a post and then upload an image with I thought to myself like I think I'd rather have like an S3 bucket. You know what I'm saying? Like I feel like there are so many tools that just automatically know how to integrate with or connect to an S3 bucket. And that's it. Like to me, an S3 bucket is the API for storage stuff. Like S3 compatible API, you know, you know, whatever it is if you're using Lervo and a fly system adapter, or if you're using something like a, you know, panics transmit that has an S3, you know, connector or any any other system that moves files anywhere. It's going to have an S3 connector. Not my new bespoke endpoint where you have to do it this one particular way. Like to me, that's how it feels like I would want to do uploads of a file. Do you concur or like, do you feel like, no, like people do uploads with APIs all the time, like file uploads. It's like, man, I just don't feel like I've run across that really where I've needed to put a file somewhere through an API. Yeah, no, no, especially like when I was working in Telco, it was common that we'd have to like, oh, no, I don't want to say common. It was a non zero number of times that we had to like SFTP files, like CSV files onto remote servers and things like that. And those things were over secure ISD and lines and things like that. So it was like, but I'm talking almost 20 years ago. This is not something that I've had to do recently. We've certainly had to FTP things across, but not some of the stuff we're doing at the moment does require us to do things with the box API. Some of the stuff we're doing does require like some lenders require us to send them images of things. And yeah, not how are they doing that, though? So like box API, I get that. That's basically an analogous what's the word I'm looking for? Is that right? Yeah, yeah. Yeah, analogous, whatever, how do you want to say that? It's the same thing is what I'm talking about, really, like whether it's a box API or an S3 point, we're kind of talking about the same thing. Yeah, there is, I am sure that there is like a couple of lenders that require us to say we need to send like a piece of like an identifying document. And we have to send like a request to get an and then they send us back an endpoint with an ID and then we have to send the file there. Like, I'm pretty sure that there is a few lenders that require that, where we are uploading stuff by by API. But it's interesting, very uncommon. But that back and forth dance is a little bit weird, right, where you say like, okay, I you have an endpoint, I'm going to request the I'm going to hit that endpoint and you're going to send back to me a API or a URL, which can be used to send a file to and then I can send the file to it by doing like a, you know, get contents on the thing and then streaming the payload over that thing. Yeah. And I mean, that's it does certainly seem like that would be possible. It just doesn't necessarily seem like anything I would want to do. If I was, if I could pick, if somebody said, Hey, here's the two options. Number one, we can give you an API endpoint, which you can read our documentation and figure out how to put a document at a particular location using this API, maybe belongs to some document or some, you know, some claim on our side. So you say like claim ID, I want to hit and I want to upload a document for it. Okay, either that or you can just upload a document with the primary identifier in our system of a record or resource that you have and we'll pick it up automatically and just dump it where it needs to go. It's like, well, kind of rather have that honestly. And then and then it's like in the case that there's an error. Because I think that's the other sort of annoying part as I'm like, if it doesn't go well, how that I mean, that is the other piece is like, if I'm if I'm giving them an S3 location, you sort of have to do like batch situations. I mean, you could you could probably say like give me a trigger. There's like S3 triggers, right? And so you could say as soon as something uploads there, trigger a new job that kind of goes out and does something. But you can't give like immediate feedback necessarily like you would through an API where you say like, okay, you successfully uploaded the thing. It worked or it didn't like, oh, that's not a valid that's not a valid extension type or looks like this is a locked PDF, like you can't do that sort of deal. So that's the only other challenge that I'm trying to solve. It's like, well, how do I get what's the feedback loop to a person who's uploading something to a bucket rather than somebody who's uploading something to an end point. And I think for me, like, that's just like an email. Hey, it didn't work. Here's an email. Yeah, I think that's probably as best as you get, especially with something happening in the background. Yeah, it's got to be like a an async process. It's just, yeah, we've got your file. We'll do whatever we've got to do with it. And then we'll let you know if it failed and you have to try again kind of thing. Yeah. And I think I think the user story is important too, because it's not like somebody's typically doing like a one-off situation. Like the situation that we're talking about here is where we're saying like there's going to be a large mass of documents that are going to need to be uploaded for like, Hey, these are any new documents that got added to our local system within the last day. Here's a copy of them. And so the story of it is give us your most recent documents for the claims that we're handling for you. And so they're just kind of like, Hey, here they are, dump them up there. And then they're done. Yeah. And to me, that seems like something you'd want to have an S3 buck word, just like, Hey, here's all the stuff, transform over there. Thank you very much. Let me know if anything happened that did not work later. You know, so I think I'm okay with that. If it doesn't sound too crazy or too weird to you, then I think that's probably the way I'll move with it. But if anybody listening has other suggestions, they're like, Oh, no, like posting through an API is totally very relevant, you know, an easy thing to do should not be hard at all. So anyway, that's been an interesting, that's been an interesting one for me. I think that's, that's probably, yeah, the alternative is to hold them in like a, you know, using something like doing a sink, doing a pole, like send to an endpoint and just like white, or it's a matter of, you know, using, what are they called, reverb or, you know, some web socket to just post back when it's done. But like, if they're not hanging around, to see that, then, you know, it probably doesn't really matter too much, does it? And we do have an interface on the front end, where like, if they want to handle something through the front end, they can do that too. So they can say like, I want to create a new batch of documents that I'm gonna upload. So they upload, they click, they click that, it creates a new import batch, and then they just drag all their files onto there. And then it'll, it'll handle that. And it could, you know, that feedback mechanism will be the same where it's like, it's going to, we're going to run through those, we're going to process those. And then we'll tell you if there was any failures on that particular batch by displaying it in the UI. But we'll also, because you might not be hanging around, waiting for all those things to process, we'll also send you an email when it's done to let you know if there was any errors, or if all of them were successful or whatever, you know, so anyway, I think that's the direction we'll go. Where are we at on time? I have one other thing I could talk about real quick, but if we are out of time, then we can wrap it. Where are we at? I think we're at 36. I think we're past a little bit, I think we'll wrap it before we go. This, this has just gone out to social media. I don't know if I can play a video into the podcast, but I'm going to see, I'm going to see if I can, I'm going to click this and tell me, is this playing, is this playing live? I don't know where it's playing. Is it showing you this? Can you see this? It is not, it is not showing me. I cannot see it. Okay, let's find out. Let's see. It says playing live. It's probably buffering. You know, there is... Hey. Did you hear? Did you hear? Laracon AU. Laracon AU is back. Laracon AU is back in 2024. Laracon AU is back in 2024. Back in 2024. Back in 2024. But you're number four. Bringing you more. Bringing you more than ever before. Bringing you more than ever before! Dude, that's awesome. That's going to be so fun. I've had the idea to do this video. It's like a 40 seconds short, right? So if you're listening on the podcast, go and have a look on x.com/LaraconAU, youtube.com/LaraconAU, wherever you're socially following us. But I've had this idea since February where the boys, as part of their season four, like marketing, launch, whatever else, they were, they did a similar style of video. And I'm like, yeah, if I can convince the speakers to do this, then I think we're going to do that. And so that has just gone out at the time of this recording. So people will start to see that. It's gone up as a youtube short, just as a little bit of a conversation piece. For those of you who may be curious, I was very humbled to have Aaron join in on the festivities, but Aaron is definitely not coming. He's not leaving his four children, three and under to come to work on him this year. But yeah, I was very, very pleased that he was happy to take some time out of his day. But that was an absolute mirror of a thing to put together. Because everyone sent me 30 to 40 seconds of video, saying these different phrases and these different things. And then I had to take like little bits and pieces, as you saw, from these 30, 40 second videos and squish it all down to like one 40 second video. And it was like, you know, who do we give it? Like how many people get airtime? Where do they get airtime? Make sure everyone kind of gets squished in there. So it was it was challenging to get, you know, 10 minutes of video down to 40 seconds across all of the speakers. But thank you to all of the speakers who who did take part in that. I hope the community enjoys that as much as I enjoy putting it together. I was just saying, man, your speakers are really working for you this year, man. They're they're doing a great job. That's a lot of like you said, it's a lot of effort, but like it's for your part, but even to just some of those people went like all out, like when it's on a boat and other ones like in a subway, like it's that's pretty cool. Who was the dude that was like out nature? Like like I heard like birds and stuff chirping and whatever. That was that's Mottie. Yeah, that's like he's back yard. Literally, he lives his way. He's like behind him. He's a he's a he's a hill. It's like a rainforest preserve. It was like crazy. Shut up Mottie. That was awesome. I appreciate I appreciate the speakers. You know, I tell them that I want their experience as speakers to be as stress free as possible. We organize like they they book their flights, but we organize their accommodation. We organize their boober to the hotel. You know, even the speakers that are not staying in our speaker hotel. I'm like, I will just make sure you get to your place. I don't want you to worry about anything up to the conference before it's your turn to speak kind of thing. So just you need to focus on on speaking and I'll, you know, focus on the rest. So I appreciate that they put the time in to do these little things, which I think make the whole experience come together. Agreed. That's some that's some pretty sweet concierge service, dude. If you're like, you got Ubers hooked up from the airports to the hotels and all that stuff. That's awesome. It reminds me of like the Disney. Oh, what is it the magical express magical express? I think they used to have this in Orlando, like you'd fly in. If you had magical express passes, when you would get to I think I'm trying to remember the way that it worked. I think from your departing airport, you'd put this special tag on your luggage in that Orlando. If you had that tag on your luggage, they would know where it needed to go. So like from the time you leave, like I would go to Chicago, right? I fly to Chicago. They in advance send me this tag. I, you know, take my luggage and I check my luggage. And I don't see my luggage again until I get to my hotel room and it's waiting for me there. Not that's pretty. It would just they would just they would just take it from the airport at Orlando. They had figured it out. They would take it from the airport and they would take it to your destination location. And then you would so like as with like traveling with four kids, that's a that's a godsend man. Like you would just get out and never had to go to the luggage collection stuff. You would just go straight through and then they had like a whole thing like at the Orlando airport. It's like, Hey, if you're going to Disney magical express this way. And so you'd go there when you get in the queue, the bus was waiting for you. It had like cartoons and stuff to play and like everything the whole way. It was literally the mat truly magical from the time you got off the airport off the airplane in Orlando until you arrived at your hotel room. And it was just so well done. So Michael, we're in a magical express. Yeah. Yeah, it is. I mean, we're not picking up your luggage, but I'm taking notes. We four kids is I can't imagine two two is enough. Re and I went overnight to Sydney for our wedding anniversary on the weekend to go and see Hamilton. And it was great. Re had her overnight bag. I had my overnight bag, we just walked straight through security, sat on the plane, put our bags up, didn't, you know, we paid for the economy, the premium economy seats or whatever it was. So we had more legroom, more space, got out at the airport. We took our bags with us. We walked straight into the Uber, went straight to the hotel, like, I tell you what, I said to Re, we need to get the kids something, like just like a little token of like a toy or something. So when we get back, they're like, Oh, my dad go away. We get a toy when they come back so that they can be like, when's the next time you're going away so that we can do this again? Because, yes, this is, this is the first time that Re and I have been away just the two of us since before Elo was born. So it's been, I can, I can do that seven years. So yeah, yeah, it happens. It happens quick, and it's it's hard. It's hard to make the time to do it just because life gets busy and it's like, Oh, like, we'll just sacrifice. It's fine. We'll always kind of be around. And it's like, yeah, it's important to take time and be away. But it is hard. It is hard. I'm speaking of which I need to plan that for us because it's it's desperately needed right now. We need to get a look for a couple of days. We've certainly made it. We've made an effort this year to like once a month to go and do something. And we, it was kind of in preparation for this trip, like we're going to have the kids start doing sleepovers with with the grandparents so they can get used to being there overnight, whatever else over over nine months, we've got it all planned out. And so like, once a month, we will we will have just a night without the kids, whether it's dinner, movie, last time we just got got some takeout, came home, watched a movie at home. And it was just, you know, nice to just to have that time alone, like to remember that you I said to read the other day, she was like, bitch, please. But I said, it was nice. It was nice to go away just the two of us by ourselves and like realize that we still like spending time with each other, which I think is important. Like when when it's the kids and it's always like, it's usually the kids want mum, right? But it's it's usually that the kids are always around the kids always want something whatever that like, even when you're together, you're not really together. And so really important that that we get to spend the time just the two of us and realize like, yeah, we do still love each other and we do love spending time for sure together. Like that we we're not just we're not just here because of the kids, but we're here because we love each other and we want to spend time with each other. Yeah, it's just that when they're so young, it's it's a lot harder to do because they they do depend on you. So yes. Yeah. Good thoughts, man. Good thoughts. Well, let's wrap this one up. 167 64 164 folks find us showing us the this episode at north meets out the audio slash 164. Hit us up on Twitter at Michael during the ad Jacob Bennett or at north south audio. If you like the show, read it up in your podcast of choice. Five stars will be amazing. Till next time, folks, we will see you later. Peace. Bye. Bye. [Music]