North Meets South Web Podcast

In this episode, Jake and Michael discuss large file uploads without double-handling them, generating API documentation for your app, and the mad rush of the last two weeks before this year's Laracon AU

Show links

Creators & Guests

Host
Jake Bennett
Christ follower, web dev designer @wilbergroup and @laravelphp fanboi. Co-host of @northsouthaudio and @laravelnews with @michaeldyrynda
Host
Michael Dyrynda
Dad. @laravelphp Artisan. @LaraconAU organiser. Co-host of @northsouthaudio, @laravelnews, @ripplesfm. Opinions are mine.

What is North Meets South Web Podcast?

Jake Bennett and Michael Dyrynda conquer a 14.5 hour time difference to talk about life as web developers

Michael:

Hey. I'm Michael Dyrynda.

Jake:

And I'm Jake Bennett.

Michael:

And welcome to take 3 of episode 165 of the Northmead South web podcast.

Jake:

Yay. We did it. No one will be able to appreciate how much work went into getting that intro music in there without having to do an edit. Meaning, that happened live just now on the show as Michael pushed a button on his brand new shiny soundboard, I think. So Michael, I gotta know about the soundboard.

Jake:

I gotta know why you bought it. What's what's going on with the soundboard thing? What's the deal here?

Michael:

We, I'm planning for for Laracon AU to record some interviews. I guess, a bit of a behind the scenes with speakers and things like that. Just to build a bit of content around what the experience of speaking at a conference is like. And also, Matt Stauffer, who's coming coming down to speak, is going to be doing some recording as well. And I figured rather than him lugging recording equipment and all that kind of stuff down here, from the US, I would just get some equipment that will allow him to, hopefully, much more easily than what we just experienced, get set up and do some recordings.

Michael:

So I I got a a RODE RODEcaster Duo, which does like multitrack onboard recording and things like that. I've got these podcast mics, which is just like a holdy thing for the RODE Wireless Go.

Jake:

Nice.

Michael:

Like, you know, the classic influencer, little clip on your shirt thing. And and so the idea being that he'll be able to record straight to the soundboard. He won't have to worry about plugging in the computer or anything like that. And I can just hand him the multitrack recording at the end of it, and then he can do whatever he needs to do with it. So that's that's why it's here.

Michael:

I am hoping that the, like, carry bag case thing that I bought for this comes in time. When I purchased it, it said it would arrive on the 31st October. So I don't think it's actually shipped yet. So fingers crossed, this still says that it will be here on the 31st October. It's coming from Amazon Germany, but it was the only place that had this in stock.

Michael:

It hasn't shipped yet, but the last time I got something from Amazon Germany, it shipped on the Monday and I got it on the Thursday. So

Jake:

not too bad. Yeah. When it arrives? That's pretty good turnaround.

Michael:

Otherwise, I I guess I would just have to shove it in my bag in some bubble wrap.

Jake:

Not too bad.

Michael:

And take

Jake:

it with Not too bad. Yeah. You could figure that out.

Michael:

It will be fine. Yeah.

Jake:

Absolutely. Absolutely. Yeah.

Michael:

Yeah. This whole this whole process of, like, me using this thing to record with you, and trying to get the audio to go through Riverside, so that I can hear you and me. And at the moment, I can hear myself twice, because I've got the

Jake:

Yeah.

Michael:

Monitor on. So in order to be able to actually hear you, I think I could probably take those off now, actually, and and survive without it. And I'll still be able to hear you because your audio is coming through my AirPods Gotcha. And it's not going through that thing. So

Jake:

You couldn't hear that. How about Yeah. You couldn't hear the sound effects without that thing.

Michael:

I couldn't hear the sound effects without the monitor on. So there's some setting that I need to do. I don't know if I have to plug in a separate, like, a second USB cable and to get, like, the channel to come back or what, but I will figure that out another time. Because we are short on time. I have 20 minutes of recording left before I have to go and collect my son from school.

Jake:

So Yep. Absolutely understand. This will

Michael:

be a short, sharp, and shiny.

Jake:

Yeah. Yeah. I'm actually if if you're not one of the folks who wants another piece of hardware on your desk, you can also try Rogue Amoeba's, Loopback, which is a software, no cable audio routing sort of deal. The equivalent to the, soundboard sort of deal, if that's all you're wanting, is a Rogue Amoeba's second product. Another product they have called Farrago, I think is what it's called.

Jake:

So you could do like a sound board through that. However, as Michael explained, the entire reason is not actually because he wants a sound board or because he wants multi track audio coming through his, through his computer. It's to be used without a computer. So I understand why you're going through the trouble of setting it up. But just for those of you who are out there who are thinking like, you know, it'd be fun to have like a soundboard.

Jake:

Well, I'm like on my computer doing recordings or like you're in a Zoom meeting with your team and you want applause because they're not giving you any after shipping this amazing feature you've been working for weeks on, you can applaud yourself. And so like that. Exactly like that. Yeah. So Rogue Amoeba, that is the ticket.

Jake:

So anyway, hashtag no sponsor. We should have the sponsors, but no sponsorship there. Actually, I should. I should literally be like, hey. We talked about your thing on the show last week.

Jake:

You wanna hook us up with some licenses, and we'll give them out to

Michael:

our listeners. Yeah.

Jake:

Yeah. Maybe I'll reach out to somebody. Or not respond? Yeah. We should do that.

Jake:

Anyway, man, yeah. I was going to say the last time we talked, you chatted about some really clever implementations you had for NGINX and for some Laravel routing stuff. Got some feedback on Twitter, which never happens. So thank you for reaching out. If you want to figure out who those people were, we can give them a quick shout on the show and say thank you.

Jake:

But it was fun just to hear from somebody to be like, oh, yeah. They really enjoyed your clever, idea for how you how you could, route something to Laravel application or, you know, route it to a asset that's already been generated. So that's that's pretty cool. That's good.

Michael:

Yeah. I it was nice to get some feedback on it. I think, you know, in all of my abundance of of free time, I will try and maybe record a quick video. Because it's not, you know, not too in-depth, not too crazy what what it is that we're doing. And I think it's something that people have probably done in the past.

Michael:

Like, check if a file exists, and if it exists, like serve the file. Otherwise, generate the file and then serve the same thing. So it just kind of removes a step from the PHP land, and lets you kind of just deal with it in, in the server side, like in NGINX, which is which is nice. But go and check out the previous episode. We don't need to rehash that

Jake:

Yep. Yep. Indeed.

Michael:

Right now.

Jake:

Hey. Speaking of files and clever workarounds for things, I was reminded that and maybe we've talked about this in the show before, but maybe we have not. When you're dealing with, like, large file uploads and you just need to get them to a location, sometimes it's annoying to have to push them through your server. Right? If you ever had this issue, maybe, maybe not.

Jake:

But, like, we deal with, like, a lot of, like I'm sorry?

Michael:

The the double upload, basically. They upload to you and then you have to upload. And so

Jake:

it takes

Michael:

not really twice as long, because obviously, the server is typically gonna be much have a a much quicker upload connection than whoever upload. But, yeah, the the fact that you've got to upload it to yourself and then you then have to upload it into s 3 or whatever means that it's being done twice.

Jake:

Yeah. Exactly. That. Yeah. So, what we've been doing, and we just reimplemented this again recently, is we've been using Filepond JS, and they've got a really great interface.

Jake:

Works works well. And, you know, it can do previews. It shows, like, you can do multi upload where it will show, like, the little uploading indicator. It's open source and it's free and all that good stuff. But what we've been doing is we've been using, the AWS SDK and similar to how you can create a temporary URL to download a file, to location, you know, from a location.

Jake:

So you have a private bucket. Yeah. And then you can say, no, I want to give temporary access. It will give me a signed URL that has a timestamp that only allows it to do it for up to like 7 hours or something like that. Right?

Jake:

You can do the same thing to allow someone to upload to a specific location on a s three bucket. Did you know this? Mhmm.

Michael:

Yeah. Yep. I've, I've gone through this process before in the past. I think Yaz has been doing this stuff with his, 50 Squared, image hosting service as well recently, where he's had to do that for Cloudflare's r two service.

Jake:

Yeah. It's really handy. And so, yeah, I've not used Cloudflare's r two service, like, so I can't speak to that. But essentially what we're doing is we're using, Laravel's file systems dot PHP, and we're grabbing one of the disks and we're basically feeding it in and then setting a path and saying, give me a temporary upload URL to that location. And then we just pass that through to the front end.

Jake:

And it doesn't really matter if you pass it through to the front end because it only allows them access to that one folder that they, that you have granted them access to. And so you can set, you know, you can have that access to that location for 6 hours or whatever. Right? And they can upload anything they want to upload to that location for 6 hours. And now I have it.

Jake:

Like I have access to that location through Laravel and I didn't have to stream any of those uploads, which has been really sweet. So I don't know. Maybe I should, you know, you were talking about maybe in my spare time, I'll make a video. I can probably make a video of that pretty quick too or just share the code because it's really not that hard. We have one class called pre signed upload.

Jake:

I think we have it called pre signed URL uploader or something like that. That's what our class is. And, again, you just basically pass it a disk and a location, and it does, like, 3 or 4 things, and away you go. It's really, really simple, and I love it. It's it's great.

Jake:

And so I don't have to pay Yeah. For any of that, you know, the CPU cycles to actually get it up there. And, there's no there's no file size limit on my side either. Right? So, like, I don't have to like, on my side, my server might say there was a you know, there's a 20 megabyte limit.

Jake:

Well, it's like Yeah. What if they want to upload a a 1 gig file? Like, well, s 3 can handle that, you know. So you can just point it there and it'll it'll work. So pretty sweet.

Jake:

Works really well.

Michael:

Yeah. Yeah. We we went through that process a while back when I was doing some freelance work. We had to do the same thing to to get a endpoint to upload from, and then basically take that so that people could upload their, like, Vimeo videos. They would upload the raw video to s 3,

Jake:

and we

Michael:

would then transcribe it and things like that. Before, we were using Vimeo. Now we just upload straight to to Vimeo on that on that particular project. But, yeah. I think Taylor and I spoke about this years years ago.

Michael:

Like, this was before Vapor existed and went through it, and there's like, I wrote about doing this kind of thing on my blog, you know, when I was still writing on my blog. And I'm pretty sure this is the way that, Laravel Nova handles uploads. Livewire does the same thing now with its file upload thing, where it will go and generate that endpoint that you can basically patch directly into s 3 or whatever your, object storage is, and and go that way.

Jake:

Nice. Had it realized. It can overdo that automatically. Yeah.

Michael:

Yeah. Yep. That's how it does it. Because it puts it in, like, that temporary directory, and then it, like, moves it across or whatever it is. So all of that stuff gets handled, in that way, through, like, the Vue components and things like that.

Michael:

And this is typically how you would handle the file uploads with with JavaScript on the front end, is you would go and get this endpoint to upload, like, it gives you the signed URL. Right.

Jake:

It's like this file goes to

Michael:

this endpoint, and you can only do it for, you know, however long. 7 hours or whatever. As long as the as long as the upload starts within that expiration time. Yeah. You know, it doesn't matter how how long it takes.

Michael:

You just won't be able to start again if it if it's past the expiration. So, yeah, definitely definitely the way to go. Interesting. If you're doing that kind of stuff.

Jake:

Yeah. That's very nice. Yeah. I love that. So that's been something we've been working on.

Jake:

I'm trying to think if there was, one other thing, but, we've already discussed some of the stuff we've talked about with our tenant discs. We've just gone kind of another step past it. You know, we talked about, like, how we wanted to secure those different locations and we basically said we're just gonna have a single bucket. That way we can sort of transport it around if we needed to put it in different regions or clone it's like, you know, have multiple instances of it in different regions for, like, high availability or for, like, serving it from the edge or something like that. It's just 1 bucket we have to replicate rather than 1 bucket per vendor, and then we're just protecting those things with the policies.

Jake:

So we've been doing that recently. We actually created, because the last time we talked about it, we were like, how exactly do we want to do that? We talked about having them all defined in file systems dot PHP. But what we did is we also added on a macro to storage that is called tenant disk. And then what it does is it inspects the currently logged in user and then grabs the disk off of the team that they belong to, and then it uses that.

Jake:

So now in Arch, we're just testing to say, like, there should never really be storage used without having to have something like tenant disk on there. So we can protect it from saying, like, we're not interested in doing, what is happening here? Sorry. One second. Oh, my word.

Jake:

One second. Okay. You know how I was playing with loopback? Yeah. It just decided to stop working, because it was on, like, a trial version.

Jake:

It started hissing white noise in my ears, like, as a hey. We're done. Anyway, Yeah. So that's been actually going pretty well, and, we've had good success with that. And so, I feel I feel good about it.

Jake:

Like, I feel pretty protected. Like, whatever the whatever the team the current user is logged into, there's really no way for them to get access to any disc other than the one that's associated to the team that they're on. Mhmm. So that's been good, but we've had a lot of a whole lot of, like, tenant stuff, that we've been working on. And, yeah.

Jake:

No more new, like, like, huge revelations or discoveries necessarily. A lot of it literally just dealing with that storage stuff. Then the other thing I was going to possibly talk about real quick, and then if you have anything else you're thinking about too, is the whole API debacle, like we talked about on Laravel News last time.

Michael:

Yes.

Jake:

And so basically, you know, what we were trying to find is what is the correct solution, for generating an open API spec and or auto generated docs and or something like Swagger UI? You know, how do you do all that? And so the one that was like the API platform, which Taylor retweeted not too long ago, and we just found that it's like absolute garbage. Not absolute garbage. It just is not tuned to work with Laravel.

Jake:

It's tuned to work with Symphony.

Michael:

It's not artisanal.

Jake:

No. It's not artisanal at all. And so what is artisanal is Scramble, and Scramble is very nice. And if you have Scramble Pro, it works with SPAZY's data objects and the filtering, query filtering stuff, and everything else is plain Laravel. And it creates docs with Stoplight.

Jake:

Have you ever used Stoplight before?

Michael:

Yeah. Yeah. The API, like, documentation Right. Authoring tool.

Jake:

Yep. Yeah. Exactly. There's also, however, an option for VitePress. VitePress has a thing that will generate docs straight off of an open API spec as well.

Jake:

So it's just a little plugin, and it reads your open API spec and then builds you out documentation based on based on that, which is really cool. And the reason why I like that actually is because we could use VitePress for the rest of our docs that are non API related and then just throw our API stuff in there. So Stoplight is a little bit better on the API docs side of thing than VitePress is, but VitePress is better on the rest of the documentation side than the API stuff is. So it's like we're trying to, we're trying to figure out which, you know, which we're going to do. I think we're going to end up probably doing VitePress for all of our docs and then use, use the stoplight stuff just for API docs for now.

Jake:

It doesn't really matter if it's super consistent because nobody's using the app product yet. Anyway, so Mhmm. Yeah. Should be good.

Michael:

Nice.

Jake:

Should be good. So what's going on in your world, my friend?

Michael:

Well, we we are very we're 2 weeks away today from Laricon AU 2024. So that's all, you know, full steam ahead. We're just finalizing, you know, printing and signage. And after dark, I had a had a call with the venue a little bit earlier just to finalize numbers and things like that. We're finalizing venue quote details and and things like that for the conference itself and catering.

Michael:

So it's all all systems go, just kinda trying to keep track of everything that's happening there. You know, sponsors sending swag to the venue, making sure that, like, the expectation and the all of that is clear. They, you know, if their stuff isn't there on time, we won't be able to put it in the bags. Because last year, we had this situation where we had people just kind of bringing their swag in throughout the day before, as we're sending. So we thought we'd finish packing all the bags, and then another sponsor had brought stuff.

Michael:

So then we had to go and repack all the bags again. So I'm like, if it's not there by 9 AM, we're not doing it. Like, I'm not repacking bags again. So hopefully, we can get through all of it really quickly. There's not heaps that we need to set up.

Michael:

It's just packing the bags, making sure the t shirts are are put to, you know, where they need to be, that all the badges are ready, that all of that kind of stuff is good to go. And, we're gonna put all the swag bags in the theater in front of the seats, so everything's kind of just, you know, going. You don't have to, like, wander around with this bag and trying to figure out what to do with during the registration process. Like, just get in and and, start mingling, have some breakfast and things like that. So, yeah.

Michael:

All just hectic, busy money going out. You know, you spend 9 months. All the money comes in very slowly, and then it all disappears very quickly.

Jake:

Yeah. Exactly.

Michael:

Which is okay. So we're just we're just finalizing, like, the last things now, and it's nice seeing all of the the lists in my budget go from, like, tentative to green, because we've like finalized it. This is the final amount. This is what it's gonna be. So we've got a good picture of of where we're gonna end up at the at the end of it.

Michael:

So, yeah. All all very exciting. You know, people will be on planes, next weekend, at the time of this recording. So that's that's all very exciting. Finalizing doing I'm doing the Rotor Laracon again.

Michael:

For those of you who who don't remember, this was a podcast that I did back in 2020. And and it was like just a 10 minute short form podcast, interviewing the speakers, talking about their taste in music and things like that. So I've got 10 episodes in the bag there. I've got 3 more that I need to record, with a few more speakers. And then, you know, if there's any stragglers end of next week to get that done.

Michael:

And then we'll we'll put those out end of next week, so people can have a listen to the playlist and and, the podcast and things like that as they're actually traveling traveling to Laracon, which will be nice. What else? I've been running. I am

Jake:

I've been

Michael:

posting in a thread on, on Twitter that, you know, my goal was to to get to a 7 kilometer run, which is probably about 5 miles, I guess. 7.77 kilometers in miles.

Jake:

It's 4.34 miles.

Michael:

35. Yeah. So, yeah. My goal is to be able to run 7 kilometers uninterrupted at a 6 minute average, and I Dang.

Jake:

6 minute average? Holy crap, dude. That's flying. Yeah.

Michael:

So I don't know how that translates.

Jake:

Six minute average? Wait per kilometer, you're saying?

Michael:

Per kilometer. Yeah. Yeah. So I ran it on Sunday.

Jake:

Well, that

Michael:

seems low 40.

Jake:

Because that's 0.62 miles. And so okay. Alright. I need to convert that.

Michael:

Yeah. One kilometer is 0.66, I think, from memory. So, yes. So I I ran it in 552 average, which was like exceeded my expectations. But I went for a run today and I ran 5 k and I just pushed it just to see how quickly I could do 5 and I ran it at a 525.

Michael:

So definitely got my feedback under me in terms of running. I've been eating well. I've been losing weight. It's been, it's been a journey, but I'm I'm it's it's all been like, I wanna I had my goal of, like, this is where I wanna be by Laracon, and I've I've been the running goal by by 2 weeks, and I've I think I've come close to my weight goal, but close enough is good enough and it's

Jake:

When you're building all that muscle, it's hard to hit those weight goals, you know. You're just gonna be a beast.

Michael:

Well, I've I haven't I haven't lifted any weight.

Jake:

You don't need to tell anybody that.

Michael:

3 months.

Jake:

You don't need to tell anybody that. You just tell them it's the muscle. It's why I couldn't

Michael:

hit that. It's like it because you can't see. That's right. The muscle hasn't grown. The fats disappeared.

Michael:

So That's right. I'm all all all going all going to plan, but, I'm actually 10 kilos lighter this year than I was last year. But last year, my goal was to to gain muscle and and and that, and this year it was just like, how much can I lose?

Jake:

So

Michael:

Yep. It's been going well. Happy with that, but yeah. You know, when you're standing on stage for for 2 days, and photos, and cameras, and whatever else, you wanna I wanna look my best, so Yep. That'll be it.

Jake:

Yep. Just gotta get that hair

Michael:

under control.

Jake:

Yep. Exactly. Gotta get

Michael:

the hair

Jake:

under control. For those of you

Michael:

who are watching the the podcast, you can see I'd I I mean, I was wearing a hat when I went for a for a run, so my hair is just

Jake:

And you've and you've also got

Michael:

I'm getting it done again. I'm getting it done again.

Jake:

Nice. Are you? And you've also got some new ink.

Michael:

Yep. I've, I went ahead had a tattoo done yesterday, so I took the day off work. I've, it took me 3 years to kind of figure out what it was that I wanted to put on my skin in perpetuity. It took me a year to find an artist. Like, not that I was looking for a year, but it

Jake:

took me

Michael:

another year after I decided what I wanted to to find someone to to do the work. And we had, like, a concept, and they sent it to me. And I was like, yeah, that's pretty good. And then I went to see them, and then we we decided, it's like, this is not actually what I want to have tattooed. So I went went away.

Michael:

We we had a talk. Went through exactly what it was that I wanted, what I want it to look like, how I want it to look like. He sent me the and like when he when the when he sent me this final design, I was like, yeah. I had like a smile from ear to ear.

Jake:

Nice. I

Michael:

was genuinely excited to have it done. So sat in the chair for 5 hours yesterday as he, you know, stepped away with the Dang. Five hours, Cortell. Yeah. It was it was not too bad.

Michael:

There was like some of the fleshy bits at the back. I I won't show because it's a bit, I don't know. For the for those of you who haven't had a tattoo, it looks great straight away, because it's like fresh. The ink is like real sharp. Then the the redness sets in, because, you know, you're stabbing the skin for an hours at a time, and then, like, you put a wrap over it to stop like anything from getting in there infected.

Michael:

You want the plasma to heal the skin and things like that. So the ink kind of seeps out a little bit and there's like all of it. So it looks a bit murky. So I just leave this thing on for a couple of days, and then put some aftercare on it, and then should should look pretty good. But I posted on Instagram because I didn't think that kind of stuff for for Twitter.

Michael:

But, yeah. It's on on my Instagram. It's you can find me at the same place. You can find me anywhere if you're interested in that. But, yeah.

Michael:

Happy that I got it done. Theoretically, it will be all healed up nicely in in time for Laracon. So, yeah. That's that's me. That's whirlwind of what's been happening, what's happening, what's going to happen.

Michael:

Excited to see I mean, the next time we're due to record this show, I will be in Brisbane for Laracon. So we won't we'll we'll miss that week. Because I I I would just won't find the time. There's gonna be so much going on. But for those of you that that are coming, I'm excited to share with you what it is that I've been planning for the last 10 months.

Michael:

Hope hope everyone enjoys, like, come and say hello, don't be a stranger. I've purposely worked really hard to make sure that I'm not like hidden away out the back like I was last year. And and, you know, I I want the opportunities to mingle and things like that. So more details to come, next week, in terms of like, watering holes. We've done we've talked about, you know, after parties, after dark and high tide.

Michael:

We've, you know, and there's lots of secrets still to be had

Jake:

Of course.

Michael:

To be shared.

Jake:

Would be good there to come without secrets.

Michael:

Yeah. I agree attendees, only for the people that are there. So I love I love keeping secrets. Excited to see the talks. Excited to see the speakers.

Michael:

Excited to catch up with friends. Excited to catch up with people that I've been, you know, that you meet online and that, you know, you see once a year. So new friends, old friends, you know, people that I haven't seen for years. I haven't seen Matt Stalfos since 2019. I haven't seen Taylor, like, these people coming over.

Michael:

I've never met Joe Tannenbaum. I haven't seen Dave. So excited to to get the band back together and and spend a a few days together. I said to Matt, you will be sick of me by the end of end of the end of the week, but, I'm making the most of the gap. So, yeah, that is that is it.

Michael:

That is it.

Jake:

Love it, dude. Love it. Well, I know you gotta go in just a minute here. So let's wrap this one up. 165.

Jake:

Is that right?

Michael:

Mhmm.

Jake:

And, hey, I don't wanna waste an opportunity to just tell you as a friend, I'm so proud of you for doing Laracon AU. I know it's a ton of work, and I'm so excited that you get to hang out with all the people over there in AU. And I I can't imagine myself ever having the guts or the gumption to pull off something of this scale. And so as a friend, I am very proud of you for doing it. Not as like a weird dad thing, but like literally just I can't I can't believe you could do that stuff.

Jake:

I I would never trust myself to make that happen. So well done. I'm I'm glad it's finally coming to fruition and the things are getting checked off the list and things are going from red to yellow to green. I'm stoked for you. It's gonna be awesome, and I can't wait to hear how everything goes.

Jake:

So anyway, there we go. Episode 165. Thanks everybody for tuning in. You can find show notes for this episode at northmeetsouth.audio/165. If you liked it, rate us up in your pod catcher of choice.

Jake:

5 stars would be amazing. And like you did last week, we'd love to hear from you on Twitter at Michael Dura at Jacobent or at North South Audio. Until next time, friends, and until we figure out our audio boards, once again, we'll see you later. Peace.