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

Michael:

Hey, I'm Michael Dyrynda.

Jake:

And I'm Jake Bennett.

Michael:

And welcome to episode 164 of the North Meet South web podcast.

Jake:

Michael was doing his very best, YouTube cover vid you know, YouTube cover image, where he was like you know, these weird things. You know? I know that those of you not watching the video, almost everyone doesn't get that. But, you know, that's what it was. It was it was pretty funny right before the show started.

Jake:

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.

Jake:

I wanna 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 gonna listen to my AirPods. So I'm here. I'm here.

Michael:

So a while back, I kind of had this idea to allow attendees to Laracon AU to design their own badge. And not design as in, you know, choose the color or choose the composition of where things are, but design insofar as 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 gotta figure out how to capture that information now, and I've got to go back to them and ask them, do you wanna do this?

Michael:

And blah blah blah. And then it was this whole thing. And then I kind of shelved the idea, and I had seen a few people kind of mention it. Like, Joe Tannenbaum had mentioned this. Taylor mentioned it in a podcast, I think, on the Laravel podcast.

Michael:

Marcel mentioned it. Like, there's been a few people that have mentioned it. But sometimes you will meet someone at a conference that you've not met personally before. You know, meeting someone 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.

Michael:

You know, someone will come up to you and they'll start talking to you, and 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.

Jake:

You may

Michael:

have ex 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 met you. We had a conversation.

Michael:

Yeah. So, you know, I kind of went back to it. And and we've got, 4 different badge designs this year. We've got one for attendees, one for speakers, one for sponsors, and one for, staff. And so I went back to the the printer, and I went back to the designers, and I said, hey.

Michael:

Is it possible for us to dynamically put a a Twitter image? Like, can we just do this? Because we can do first and last name easily enough as as a dynamic text on there. And they just, like, mail merge it when they print it. And I went back to them and said, can we do images?

Michael:

Like, can that be a dynamic thing if there's an image printed? If there's not, don't because not everyone has Twitter. Yeah. Yep. We can do it.

Michael:

And I thought, okay.

Jake:

Nice.

Michael:

And I was constantly

Jake:

Variable data printing.

Michael:

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 18th October in order to get them all done in

Jake:

time and whatever else. You got 10 days? A little over a week?

Michael:

10 days. Yep. So I plan I kind of started doing this a while ago, and I was like, okay. I can just go to, like, x.com/jacobbennett/photo.

Jake:

Yep.

Michael:

And and, like, we can scrape the photos that way. You can't do that using, like, the HTTP client from Laravel, because it's Really? Okay. Twitter is a React app. So when you load it, there's no there's nothing on the page.

Michael:

You can't load it

Jake:

Got it.

Michael:

And all of this kind of stuff. And and the API, as you may or may not know

Jake:

Sure. Sure.

Michael:

Is significantly more But lockdown. Right?

Jake:

You can

Michael:

make Yeah. Right. You can make 3 requests to the API every 15 minutes, which is not enough No way.

Jake:

Are you serious?

Michael:

On the on the free one. Right? So which is obviously not enough when you when you need to potentially get 100 of Twitter images. And and so I was like, nah, I'm just not gonna do it. Whatever.

Michael:

Like, it'll be cheaper. It'll 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, just you gotta do it. And I'm like, well, I don't want to.

Michael:

I'd have to I'd have to pay to get, like, elevated access to the API, and it's all it was like $100. I'm like, yeah. Okay. Fine. So I I did it last night.

Michael:

I, like, put it all together. I built, like, this LiveWire can I tell you about this LiveWire component? I'll come back to

Jake:

that. Oh, yes.

Michael:

I built this LiveWire component that's like a Live Designer, where it's like we send you a link, which has got, like, your your badge ID in it, and all we ask for is your Twitter username. Because I I don't even want to begin to think about how I would do this with LinkedIn. You're probably

Jake:

Yeah. Right.

Michael:

You're probably not interacting with people on LinkedIn and whatever else. It's like Twitter. Twitter is the main thing in our sphere right now. And so

Jake:

Yep. Yep.

Michael:

Just put your Twitter image in there. And then so we will go and fetch we'll hit the API. We'll go and find your profile. We'll extract the profile, your URL, the profile image URL, we'll display it to you. So this is like we we put it together roughly as what it's gonna look like.

Michael:

It's not the exact design, but it's enough to give you an idea. You know, this is what my name will look like, this is what the picture will look like, etcetera. And then, you know, we farmed that off. We go on we go on fetch the image. We go and upload it to Cloudinary.

Michael:

We then download it again from Cloudinary as a 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, bless him, was 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 of your thing. So, like, share it on Twitter.

Michael:

Hey. I'm going to lariconau. It gives you a nice little open graph image, nice dynamic page, a 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 to to do, like, have a container that is grid, which is 1 column by 1 column.

Michael:

And then all of your items are just colestart 1, rowstat 1. And it and it's 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. It's just like grid grid grid. And it's like really just

Jake:

sub grid, are you saying? Or or no? You're just saying

Michael:

Just grid. Like, literally, this div with grid, and then, like, grid code is 1, row is 1.

Jake:

Sure. So,

Michael:

like, so what we used to do

Jake:

with, with Twitter was it Bootstrap? Yeah. Bootstrap. Right? Twitter Bootstrap.

Jake:

Mhmm. And so, like, everything the column system. Yeah.

Michael:

Yeah. Yeah. So everything is, like, column 1, row 1, 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 2 of hacking it together just to make it give you some indication of what the badge will look like with your thing on there. It was fine.

Michael:

The thing that took me longer to figure out was why my LiveWire component was not LiveWiring. And I I messaged the cash money about this, and I was like, did you know? I spent like an hour on this. If you because LiveWire expects your component, like your layout component, to have a slot, like a k. Dollar slot in the body somewhere for where the stuff goes.

Michael:

If there's no slot there because I had a traditional layout which had a section, content, and I was, like, yielding the content, whatever. And because my Livewire 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 Livewire docs, like, the getting started, like, the bonehead, go and read the dogs thing. Oh, yeah.

Michael:

You need to have a slot here. And as soon as I put the slot there, it was all working. I'm like, okay.

Jake:

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

Michael:

is? Slot.

Jake:

Yeah. Okay. That is actually very good information to know, because I could totally see myself falling into that exact same trap.

Michael:

Yeah. And because I don't do a lot of front end. Like, I don't do any React or Vue. I don't do any Blade. Like, basically, all of what I do, all I all all of what I have been doing for the last the better part of the last 3 years is back end.

Michael:

I don't 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. I haven't written any HTML for so long. It's it's, it's it's wild.

Michael:

So, yeah, if you if you want to have a a layout for your Livewire components, then what you want is to have somewhere in there a slot for for it to echo into and then go from there. So it's all working now. I've I've just sent it out to all of the speakers. I sent it out to a few, close close friends who are who are coming to the conference just to get them to, like, eyeball the, you know, the the the flow of the

Jake:

stress test.

Michael:

So you get an email that says, you know, design your badge. We we, like, pre generate all of the the Open Graph images. So we'll generate the image. And and the way that I've done that is basically we generate an image using BrowserShot, which is just like a HTML view that we throw at it, which has, like, first name, last name, ticket ID, and whether you're speaking or attending. And and

Jake:

that's just So you just say, like, hey, here's the, you know, here's the call here's the record I have in 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 what I'm gonna set as the OG og image.

Jake:

I would grab it. Yeah. Yep. Makes sense.

Michael:

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 Sure. Do the browser shot thing and then return it.

Michael:

What I discovered 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.

Jake:

Okay. Okay. I think I'm tracking with that. Yep.

Michael:

So so when you have when you use the storage link for a public disk in Laravel, it will take us it will create a symlink from storage app public and put that into the public folder as a symlink

Jake:

Yes.

Michael:

Of storage. Right? So my, Open Graph images are all in storageapppublicog, which means they will then be referenced at laricon.au/storage/og. So in my route definition I have route:get/storage/og/tickerid. Png.

Michael:

Right? And so if the image does not exist on the disk, it goes through like the NGINX configuration, it goes this is not a real file' go to the index. Php, it will then go 'yep, I need to generate this image, throw it on disk'. The next time you hit that, Nginx will go, there is a real file here. I will serve the image from disk.

Michael:

And because I'm sitting behind Cloudflare, that is then 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 Cloudinary, I could use S3 or whatever else to serve these images, but it would mean that I would still have to check, does the image exist? So now I just go, yes.

Michael:

It's either there or it's not. And That's a clever little bit. It's exactly the same.

Jake:

Yeah. Yeah. So so when it hits that dot PNG endpoint and it does not exist, you're saying then NGINX goes, well, that doesn't exist. What's my fallback route for 4 o fours? Sort of

Michael:

And then it goes to index dot PHP. Yep. Then

Jake:

it goes to index dot PHP

Michael:

So it goes to index dot PHP.

Jake:

But 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

Michael:

that same path. So the 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.

Jake:

Okay. Okay.

Michael:

So in the NGINX configuration I get it.

Jake:

I get it. Yes. Yes. So NGINX handles the first yeah. I got you.

Jake:

I'm sorry.

Michael:

Can I can

Jake:

I just

Michael:

get served out of your

Jake:

Yes?

Michael:

You're gone. Gone.

Jake:

Yeah. Yeah. Yeah. So, like, NGINX itself has, like, a block, and it's, like and it's a server block. Right?

Jake:

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 that's what you're leveraging. You're leveraging that sort of mechanism that says, go determine first if there's 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.

Jake:

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 NGINX will just default to showing that route.

Jake:

Yes. That all makes sense. And it Okay. That's that's a really interesting way to do that. Yeah.

Michael:

Yeah. And then at that point, you get all of the default, like, caching headers and things like that. So then Sure. When it gets served through Cloudflare, that will then get cached forever, which Yeah. Can be problematic if you ever want to change that.

Michael:

But with the design is fixed, like, we don't have any differences in design. It's just everyone gets the same design and either says that they're attending or they're speaking. And then we use Twitter's, tweet intent. I guess it's just a euro. You can hit x.com/intent/tweet.

Michael:

You can pass it some text, and so that allows people to then share those. So I'm hoping to, you know, this last 3, 4 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, etcetera, etcetera. So, yeah, really really excited with how that's that's gonna play out. I've seen a few people go through the the process already. You know, excited to keep keep going with that.

Jake:

No. It'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 rigmarole of, like, asking, like, what's the 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 that that that being the idea.

Jake:

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 and yours does solve that problem. It just solves it in a different way. Right? But it 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.

Jake:

So that's pretty cool. Like, that's that's a really interesting idea. I like that. This is sim it's it's 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?

Jake:

No. We're working on this application right now called Subro Connect, and Subro 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 you're working. Like, Subro, like, subrogation is what Wilbur does, and we're making this new product called SubroConnect. 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.

Jake:

So we were gonna 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 could 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. It would say, Sembra Connect with me.

Michael:

I was

Jake:

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 scan to that URL, then what it would do is it would link up to a page that would allow them to have, you know, hey. Here's my LinkedIn.

Jake:

You know, 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 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?

Jake:

How would we print QR codes ahead of time and associate them after the fact? And so what I was thinking is you would you would essentially have all these URLs, like these short codes, for lack of a better idea, a better, like, you know, analog analog isn't the right word. It would basically be a short link. Right? So I have a short link that then has a QR code.

Jake:

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 or so however. Right? And so that would 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.

Jake:

So if 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 to me on LinkedIn or whatever sort of deal. So that that'd be fun too. But you kind of already have that mechanism built in where you're you've you already have this way to, like, point to a page

Michael:

Right.

Jake:

That they have. So, anyway, I don't know. I I 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.

Michael:

But Yeah. So we're doing I mean, we're doing that we're we're not someone did mention the QR codes, and this is this is the 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.

Jake:

Oh, Mitch. I didn't realize that.

Michael:

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 an app. And we were talking earlier today. He's like, when are you going to announce it? I guess this is this is kind of it, the announcement.

Michael:

That

Jake:

that we're doing.

Michael:

This is the announcement. So we're we're going to have an app, and and there's, like, multiple facets to this application. 1 is, like, to show the schedule. We're gonna use it for, attendee surveys. Like, the speakers might wanna have some, engagement as part of their talk, so they might wanna ask questions.

Michael:

They might wanna 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 and a. So people in the audience will be able to ask questions of the speaker, get an upvote, downvote, you know, and then I'll do that q and a with the speaker. So that's that's part of it.

Michael:

But we're also gonna allow people to put, like, a profile together and 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 gonna force people to do it, but, you know, we'll make it really easy for them to to engage.

Michael:

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 inquiry, whatever. So, yeah. Lots lots of stuff going on there. So then you've got

Jake:

that. Yeah. Yeah. You sort of got that base covered with that one. That's that's cool.

Jake:

Yeah. That's pretty ambitious, honestly. That's a lot of stuff. I mean, those sounds like when you're thinking through it in your head, you're like, oh, yeah. I mean, I could do that.

Jake:

I could, you know, create a table that just says, like, give me the, you know, store question. Right? But, man, there's a lot of considerations we made for something like that. So Yeah. That's that's really interesting that he's doing that.

Jake:

Is he building as, like, a progressive web app sort of deal where it's like it's a

Michael:

He's building it as a native app. So there'll be an iOS app.

Jake:

Dang. Okay.

Michael:

Yep. So they'll go into the Apple portal when they're ready and

Jake:

That's crazy.

Michael:

He like, he's credit to Mitch, and Atlas Software, which is his his company. He's really taken this all by the horns and he's running with it. And at some point, he's gonna 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.

Michael:

So, yeah, it's a really good, showpiece for him as part of his talk.

Jake:

Yeah. People raising the bar, dude. It's kinda crazy what what folks are doing. You know? Like, it does make it, like, you you have to bring your a game if you're going to be presenting at one of these conferences.

Jake:

And it seems like almost everybody has, like, a, a product or a frame or a, package that they're that they're, like, promoting as like a, 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 9 months on a particular item, and I'm gonna show you what I've been working on. And not only that, I'm going to tell you you know, I'm gonna I'm gonna create a talk around it as well. So dang, man.

Jake:

Yeah. That's a lot of work. Props to props to Mitch. That's a very ambitious, goal. So that's really cool.

Jake:

That's really, really cool.

Michael:

Yeah. It's gonna be a it's gonna be a very good, it's gonna be a very good talk, I think. And I'm I'm excited, like, just the stuff that we've we've been going through. Like, he touches base once a week or so just to see where he's at, where my head's at, you know, what what we wanna do, what we can do, what's possible given given time and and all of that. But, yeah, very excited with how that's all gonna come together and what it's going to facilitate for us as a conference.

Michael:

And with any luck, like, we'll see it bubble up into, into the future as well for maybe some other events.

Jake:

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 Lyricans as well.

Jake:

Mhmm. You know, and just add on to it every year sort of deal.

Michael:

Yep. For sure.

Jake:

That'd be 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.

Jake:

And I'm curious if this is something worth talking about. I kinda feel like it is, and I'm 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, nonfatal 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. I it has been a long time since I've been this excited about, like, a toy. Every night, I ride this thing.

Jake:

It's great. Like, I went road, like, you know, I don't know, couple miles tonight on this thing. It's just a blast. It's awesome. And I have taken a couple nosedives on it.

Jake:

Like, the dangerous thing about these on 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. Okay. This is the front end dives down, and then you're left, like, facing the pavement with nothing under your feet.

Jake:

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 gotta tell you, it has been so fun. So if you do not know what a onewheel is, you should definitely check it out.

Jake:

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 kinda, 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.

Jake:

So it's already kinda scratched up a bit anyway, which is fine with me. But this particular model is like the GT model, and it would go it would go supposedly up to 23 miles an hour. I've had it up to 21. Mhmm. But too scared to push it all the way to the top.

Jake:

But, I gotta tell you, man, it is a blast. It's so fun. So if anybody's, looking for a new hobby, let me suggest the Onewheel. And, I should I literally I should bring it to the next I I should bring it to the next layer con. Anybody out there who's, like, got a one wheel hobby, let's bring our stuff to the next Lyricon, and we'll have a little one wheel gang.

Jake:

That'd be super fun. Bunch of old guys and gals riding their one wheels around, but it's it'd be fun. It'd be a lot of fun. Okay. I digress.

Jake:

Alright. 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 s 3 bucket. Do you know what I'm saying?

Jake:

Like, I feel like there are so many tools that just automatically know how to integrate with or connect to an s 3 bucket, and that's it. Like, to me, an s 3 bucket is the API for storage stuff, like s 3 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 a, you know, Panix transmit that has an s 3, you know, connector or any Yeah. Any other system that moves files anywhere, it's gonna have an s 3 connector. Not my new bespoke uploads of a file.

Jake:

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, oh, 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.

Jake:

Yeah.

Michael:

No. No. Not especially, like, when I was working in telco, it was common that we'd have to, like oh, no. I don't wanna 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.

Michael:

And those things were over secure ISDN lines and and things like that. So it was like but the I'm talking almost 20 years ago. This is not something that I've had to do recently. Right. Right.

Michael:

We've certainly had to FTP things across, but 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. Yeah. Not

Jake:

How are they doing that though? So, like, Box API, I get that. That's basically an angle an, analogous. What's what's the word I'm looking for? Is that right?

Michael:

Yeah. Yeah.

Jake:

Yeah. Analogous. Whatever. How you wanna say that. It's the same thing.

Jake:

It's what I'm talking about, really. Like, whether it's a box API or an s 3 endpoint, we're kinda talking about the same thing.

Michael:

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 a a piece of like, an identifying document. And we have to send, like, a request to get an and 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 that require that, where we are uploading stuff by by API. But it's it's Interesting.

Michael:

Very uncommon.

Jake:

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 gonna hit that endpoint, and you're gonna send back to me a API or a 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 content on the thing and then streaming the payload over that thing.

Jake:

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.

Jake:

Number 1, we can give you an API endpoint, which you can read our documentation and figure out how to put a a document at a particular location using this API. Maybe it 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 wanna 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.

Jake:

It's like, well, kinda rather have that, honestly. Mhmm. And then and then it's like and if the in the case that there's an error because I think that's the other sort of annoying part is I'm like, if if it doesn't go well, how that I mean, that is the other p piece is, like, if I'm if I'm giving them an s 3 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, s 3 triggers.

Jake:

Right? And so you could say as soon as something uploads there, trigger a new job that kinda 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.

Jake:

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 endpoint? And I think for me, like, that's just like an email.

Jake:

Hey. It didn't work. Here's an email.

Michael:

Yeah. You know

Jake:

what I mean?

Michael:

I think that's probably as as best as you get, especially with something happening in the background. Yeah. It's gotta be like a an async process. It's just yep. We've got your file.

Michael:

We'll we'll do whatever we've gotta do with it, and then we'll let you know if it failed and you have to try again kind of thing.

Jake:

Yeah. And I think I think the, the user story is important too, because it's not like somebody's typically doing, like, a one off situation. Like, this situation that we're talking about here is where we're saying, like, there's gonna be a large mass of documents that are gonna 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.

Jake:

And so the the story of of it is give us your most recent documents for the claims that we're handling for you. And so they're just kinda kinda like, hey. Here they are. Dump them up there, and then they're done. Yeah.

Jake:

And to me, that seems like something that you'd wanna have an s through back where it's like, hey. Here's all the stuff. Transfer them over there. Thank you very much. Let me know if anything happened that did not work later.

Jake:

You know? So Yeah. 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.

Jake:

Like, posting through an API is totally very you know, an easy thing to do. It should not be hard at all. So, anyway, that's been an interesting that's been an interesting one for me.

Michael:

I think that's that's probably yeah. I it the alternative is to hold them in, like, a, you know, using something, like, doing a sync, doing a, a poll, like, send to an end wire and just, like, wait, or or it's a matter of, you know, using, what do they call reverb or, you know, some WebSocket to to just Sure. Post back when it's done. But, like, if they're not hanging around to Right. To see that, then, you know, it probably doesn't really matter too much, does it?

Jake:

And we do have an interface on the front end where, like, if they wanna handle something through the front end, they can do that too. So they can say, like, I wanna create a new batch of documents that I'm gonna upload. So they upload, they click they click that. It it it creates a new import batch, and then they just drag all their files onto there. And then it'll it'll handle that.

Jake:

And it could you know, that feedback mechanism will be the same where it's like, it's gonna we're gonna run through those. We're gonna process those. And then we'll tell you if there's 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's any errors or if all of them were successful or whatever. You know?

Jake:

Yeah. So, anyway, think that's the direction we'll go.

Michael:

Where are

Jake:

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

Michael:

I think we're fast a little bit. I think we'll wrap it. Before 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. I'm gonna see.

Michael:

I'm gonna see if I can I'm gonna click this and, tell me, is this play it says playing live. I don't know where it's playing. Is it showing you this? Can you see this?

Jake:

It does not see it's not showing me. I cannot see it.

Michael:

Okay. Let's find out. Let's see. It says playing live. It's probably buffering.

Michael:

Oh, there isn't it? Hey. Did you hear me? Did you did you hear me? Lyricon AU.

Michael:

Lyricon AU. Lyricon AU.

Jake:

Lyricon AU is back.

Michael:

Lyricon AU is back in 2024. Lyricon AU is back in 2024. Back. In 2024. Back in 2024.

Michael:

The year never before. Bringing you more.

Jake:

Bringing you more. Than ever before.

Michael:

Bringing you more than ever before.

Jake:

Dude, that's awesome. That's gonna be so fun.

Michael:

I've had the idea to do this video. It's like a a 40 second short. Right? So if you're listening on the podcast, go and have a look on x.com/lauriconau, youtube.comlauriconau, wherever you're socially following us. But I've had this idea since February where the boys, as part of their season 4, like, marketing launch and whatever else, they were they did a similar style of video.

Michael:

And I'm like, yeah. If I can convince the speakers to do this, then, I think I think we're gonna do that. And so that 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 I was very humbled to have Aaron join in on on the festivities, but Aaron is definitely not coming.

Michael:

He's not leaving his 4 children, 3 and under, to to come to Marathon AU this year. But, yeah, he I was very very pleased that he was happy to take take some time out of his day. But that was that was, that was, an absolute mayor of a thing to put together. Because everyone sent me, you know, 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, 1 40 second video.

Michael:

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 it was challenging to get, you know, 10 minutes of video down to 40 seconds across all of the speakers.

Michael:

But, thank you to all of the speakers who who did take part in that. I I hope, hope hope the community enjoys that as much as I enjoyed putting it together.

Jake:

I was just saying, man, your speakers are really working for you this year, man. They're they're doing a 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 too, just some of those people went, like, all out. Like, one is on a boat.

Jake:

Another one's, like, in a subway. Like, it's it's Yeah. That's pretty cool. Who who was the dude that was, like, out in nature? Like like, I heard, like, birds and stuff chirping and whatever.

Michael:

That was that's Marty. Yeah. That's, like, his backyard. Literally, he lives in his house.

Jake:

That's crazy.

Michael:

Like, behind him is is a is a is a hill.

Jake:

Like a rainforest preserve. It was, like, crazy. Shout out, Marty. So Nice work, bud. Yeah.

Jake:

That was awesome.

Michael:

I appreciate I appreciate the speakers. You know, I 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, Uber to the hotel. You know, even the speakers that are not staying in in our speaker hotel, I'm like, oh, just make sure you get to your place.

Michael:

I don't want you to worry about anything up to the conference before when it's your turn to speak kind of thing. So just you need to focus on on speaking, and I'll I'll, you know, focus on the rest. So I appreciate that they put the time in to to do these little things, which I I think make the the whole experience come together.

Jake:

Agreed. That's some that's some pretty sweet concierge service, dude. If you're like, you've got Ubers hooked up from the airports to the hotels and all that stuff, that's awesome. Yeah. It reminds me of, like, the Disney, what is it?

Jake:

The Magical Express. Like, a 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 works.

Jake:

I think from your departing airport, you'd put this special tag on your luggage.

Michael:

Mhmm.

Jake:

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 I would go to my my like, I go to Chicago. Right? I fly to Chicago. They, in advance, send me this tag.

Jake:

I 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.

Michael:

Nice. That's pretty neat.

Jake:

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 4 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.

Jake:

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 go there. When you get in the queue, the bus is waiting for you.

Jake:

It had, like, cartoons and stuff to play and, like, everything the whole way. And, like, 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 the Michael Jordan Magical Express.

Michael:

Yeah. Yeah. That is I mean, we're not picking picking up your luggage, but I'm I'm taking notes. Now, we 4 kids is I can't imagine. 22 is enough.

Michael:

Rhea and I went overnight to Sydney for our wedding anniversary on the weekend to go and see Hamilton. And it was great. Rhea 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 the economy the premium economy seats or whatever it was.

Michael:

So we had more labor room, more space. Got out at the airport. We took our bags with us. We walked straight into the Uber. Went straight to the hotel.

Michael:

Like, I tell you what. I said to Ree, 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, mom and 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?

Michael:

So that we can do this again. Because Yes. This is this is the first time that Rhea and I have been away, just the 2 of us, since before Elo was born. So it's been

Jake:

I can I can

Michael:

do that? At least 7 years. So

Jake:

Yep. Yep. It happens. It happens quick. And it does it's it's hard.

Jake:

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 kinda be around. And it's like, yeah, it's important to take time and be away. But it is hard.

Jake:

It is hard. I just speak to you, but you need to plan that for us because it's it's desperately needed right now. We need to get it open for a couple days.

Michael:

We we've certainly made it, we've made a 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 gonna have the kids start doing sleepovers with with the grandparents, so they can get used to that. Being there overnight, whatever else. Over over 9 months, we we've got it all planned out.

Michael:

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 to remember that you I said to Rae the other day, and she, like she was, like, bitch, please. But I I said, it it it was nice it was nice to go away, just the 2 of us, by ourselves and, like, realize that we still like spending time with each other,

Jake:

which I

Michael:

think is important. Like, when when it's the kids and it's always, like, it's usually the kids want mom. Right? But it's it's usually that the kids are always around. The kids always want something, whatever.

Michael:

That, like, even when you're together, you're not really together. And so Yeah. Really important that that we get to spend the time, just the 2 of us, and and realize, like, yeah, we do still love each other, and we and we do love spending time For

Jake:

sure.

Michael:

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 wanna spend time Right. With each other. Yep. 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.

Michael:

So

Jake:

Yes. Yep. Good thoughts, man. Good thoughts. Well, let's wrap this one up.

Jake:

167.

Michael:

Sure. 64.

Jake:

164. Folks, find a show on this this episode at north meets south dot audio slash 164. Hit us up on Twitter at michael dorinda@jacoben or at north south audio. If you like the show, write it up in your podcaster of choice. 5 stars would be amazing.

Jake:

Till next time, folks. We will see you later.

Michael:

Peace.

Creators and Guests

Jake Bennett
Host
Jake Bennett
Christ follower, software dev @wilbergroup using @laravelphp. Co-host of @northsouthaudio and @laravelnews with @michaeldyrynda
Michael Dyrynda
Host
Michael Dyrynda
Dad. @laravelphp Artisan. @LaraconAU organiser. Co-host of @northsouthaudio, @laravelnews, @ripplesfm. Opinions are mine.
Dynamic images, Livewire slots, and API-based file uploads
Broadcast by