Archive.fm

North Meets South Web Podcast

The one with bubbly water

In this episode, Jake and Michael discuss the line between soda and bubbly water, Laracon AU, two-way SMS conversations, and the implications of not knowing maths as a programmer.

Duration:
41m
Broadcast on:
25 Jul 2024
Audio Format:
mp3

In this episode, Jake and Michael discuss the line between soda and bubbly water, Laracon AU, two-way SMS conversations, and the implications of not knowing maths as a programmer.

Hey, I'm Michael Drena and I am Jake Bennett and welcome to episode 159 of the North Meats South Web podcast. Intramusic, cue the intramusic. Hey, everybody. There it is. What are you drinking over there? What's this? Oh boy. I don't even, I literally, my wife knows I'm not drinking soda this year. So she just buys random assortments of like bubbly drinks. I don't even know what they are. I'll just go out and grab something. This one is Mason Parrier, France, forever strawberry sparkling water. Zero calories. So where are you drawing the line on like what is an isn't soda? Because like, we're drinking bubbly water, which like, yes, it's water. Yeah, yeah, yeah. So let me, let me talk about like my goals and maybe my reasoning for even starting this. So what it was is, you know, I don't take lunch with me most days because on Monday, Wednesday, Friday, I work like five minutes from home. And so I just come home for lunch. No big deal. But on Tuesday, Thursday, I'm not disciplined enough to take a lunch with me and I'm 15 minutes from work. And I don't want to come home for lunch and then drive back right back. So I just eat somewhere around there. Well, for a while, it was this little gas station called Casey's, which actually has really good pizza. But I would inevitably end up getting like a, you know, they had a deal for like a pizza in a soda. Yeah. And so twice a week, I was getting like a soda, like a soda, like a 32 ounce or something like that. Yeah, like an American soda. Yeah, like an American correct. Correct. Not like anything. I don't why he complained about that when he was in Australia way back. Yeah. He's like, what is this large? Like this is barely a small American. So like a freakin soda, right? And I'm like, you know, at some point, I was like, this probably isn't a great thing for me. And so at the New Year, I was like, I'm not going to drink soda anymore. And so I will say it is, I have definitely net, I have drink less sugary drinks than I had previously. However, that does not mean that I don't sometimes like substitute things that might even sometimes be worse. Like, like some, you know, drink lemonade lemonade has actually got more sugar than soda does. Like it's not good for you. And so I'm trying to not drink any of that either now. And sort of just so I think really what it's helped me to do is just to be a little bit more intentional with my choices for what I'm drinking. And I know that soda isn't an option. So it's just not it's that's completely off the table. And so it forces me to be a little bit more creative. I'll drink water a lot more now. I'll drink these but these have zero calories, zero sweeteners, like it's just it's something to sip on. It's just something flavored, you know, but yeah, yeah, it's just trying to try something a little bit different. And I think I think it's working for the most part. It's it's allowed me to be successful in my quest of not actually drinking soda. And there've been a couple times where I'm like, Oh, it's not a big deal. I'll just cheat. And then I'm like, no, I'm not going to do it. And so I don't. So like, for example, last week when we were at the theme park, they had like unlimited soda as much as you want for like, I didn't drink any. And so like that was like I would have for sure I would have. But yeah, I didn't drink any. So yeah, it's it's going. Okay. I'm all about the Pepsi Macs or the Coke, sugar, Coke zero, like I look zero, that's good stuff. They've cracked the code. It used to be. But Coke zero is so good. It's funny because every now, like when my mom, my my folks come around the dinner on Friday night, we have McDonald's with the kids and Mac as my mom Mac is my mom is still like full strength coach. She won't won't drink. And so every now and then, every now and then they don't pop, you know, they got the little, the little tabs on the top of the show that tells you, you know, is it so is a diet or whatever? Full strength. Yeah. Yeah. Right. So every now and then they don't do that. And so you've got to sip them all. And we have been on more than one occasion foiled, like here you go. And no wrong one. That was not that was nothing. No sugar one. So one night, a few weeks ago, I mixed it up. And so I gave mom the Coke, no sugar. And I gave me the full strength. Okay. Mom didn't notice. Like for someone who's like, okay, taste of it. I like, I just didn't recognize restraint away. That's like, yeah, they're really strong in the syrup this time. But no, she she got the full strike. I'm like, Oh, yeah. I'm like, Monday, we just leave that. So you're like, Hey, mom, next time, why don't you get the no sugar one? See if you like it. Yeah. Yeah. Yeah. If you know, it's the kind of thing that like, if you know, then right, they've got it so close. And it like, I know in that context of the like post mix stuff at McDonald's, like they've got, you know, it's easy enough to mix them up. But I think they've got it so close now. And I haven't had full strength coke for years and years now for for about four years, five years. But yeah, I'll do I'll do the Pepsi Max. I'll do the coconut sugar. I'll do Mountain Dew. If I can fight hard to find the no sugar Mountain Dew here, but they've got like a major melon one, which is pretty good. Okay. Yeah. So maybe that's what I'll do. Like if I if I sort of come back on to the soda thing at some point, maybe I'll just do some of those other ones where it's like a little bit less of the bad stuff for you, I guess. Yeah. My answer is always like, Oh, this is too bad for you. I'm like, yeah, but what are you going to do? Right. Exactly. Yeah. I got to live my life. I still drink two or three litres of water a day. So and I always try and like wash down the soft drink. Dang, that's a lot of that's a lot of water. Two or three litres. Dang. Like I've got this, this 500 mil bottle and I will fill it up. I will sit down on my desk and before I know it, it's empty. And I'm like, Oh, I'm sure I just filled that up. So it's pretty good. Yeah. Yeah, when it's available, it's amazing how much water you will drink. Yeah. You know, so we've got like filtered water. I drink 500 mil all the time and I'm back in the gym now as well. So, you know, protein, protein shakes and things like that to make up the difference. So it's gone. All right. Nice. Trying to get amped up for a Laracon, a you speaking of her economy. So you got it. You got to tell me what's up with the mask thing. What's I don't I'm not I don't get it. So tell me tell me what's happening here. Is this supposed to be not get it? Okay. So last year, last year, the the Laraval team had like they launched Laraval Pulse at Laracon AU and so we had the the beating heart emoji just like this is I didn't I knew last year I knew probably about a month or two before Laracon AU what it was that they were launching. So Jess just approached me probably about two or three months ago and said is there a spot on the schedule for us? I did see that she got. Yeah, I saw that she got kind of she you just announced her today or I saw a tweet about it. Yeah, yeah. So Jess. Jess is the last of our speaker announcements for which I am very very happy about because I was saying this to the we have like a chat for all the speakers and I was saying yesterday that like it's it's the it's the best and worst part of of running the conference is like keeping the secret and then sharing the secret but then it's also knowing who you've told what and who you can tell what at different times until it's all kind of public. So I I do not know what what Laraval team is working on what they're going to be presenting. I just know that it has been told to me that it will be it is the most ambitious project that the Laraval team have undertaken to date. So if you want to know and they're announcing it at Laracon AU, awesome. And yeah, and I'm very appreciative of that to have the opportunity to have the team to present and to and to you know back to back years have a have a product a Laraval product launched at Laracon AU is pretty special for us from our humble beginnings. And so that's pretty cool. Yeah. Yeah, I've got some ideas now that I kind of know that's what it is. I've got some ideas. So yeah, we put out the the the emoji tease the essay, which was fun because I gave the speakers a bit of a tease. They're like, you really want to see what the announcement is tomorrow for for yesterday's and they're all like, yeah, yeah, we're in there ready for it. And then they saw and they're like, what the hell is this? Like, I told you it was going to be good. I didn't tell you it was going to be a person. I told you it was going to be good. So that's funny. What? So yeah, it's yeah, we've got a bit of stuff going on, you know, the speakers obviously preparing their talks. You know, we're four months out now from Laracon AU. We're doing we're doing the intro videos again that we did last year, which were a lot of fun. And I'm very appreciative about all of our speakers this year, because they're they're humoring me with what we're going to do with the announcement videos this year. So I very much appreciate them. And I can't wait to thank them in person in in November. It's it's going to be good. Still, still more secrets to come. Like I'm not done, but the speaker is more up your sleeve. Yeah, always, always keeping secrets on my sleeve. So I'm very happy about that to have that all out. We'll probably let it simmer for a week or two. We'll publish all of the talk titles at the beginning of August. So everyone will be able to start playing the game of, you know, which speaker is going to give which talk and then probably about probably around the same time, we'll start putting out the speaker announcement videos as well. So we'll be we'll be drawing the line between speaker and topic pretty quickly this year. But yeah, we're we're tracking well for early bird that that runs until the end of August. You haven't haven't got a ticket. I don't know necessarily that all of those tickets will last to the end of August, but once they're gone, they're gone. This year's. Yeah, yep. Get in if you want to design looks. Yeah, all the design is looking really good. The slide the speaker slides or the speaker announcements are all looking great. Love the design. I love. I used to work with nucleus and they've just knocked it out of the park again for us this year. Yeah, really, really grateful to the difference. You know what I mean? A really that layer of polish like just really makes it so much more professional. And like, you know, people take it seriously when it looks good, you know, as silly as that sounds, but it's true. Yeah, we, I mean, I've said before that we have to kind of put in a little bit of effort because we're not, you know, we're not the flagship like we are an official Eric on, of course, but we're not a flagship size or, you know, that kind of event. So, you know, we put in a little bit more effort to like make it known that, you know, we're not, we're not liking around here. So. Absolutely. It's absolutely fun. That's exciting, man. Good. All that hard work coming together. Yeah. Yeah. Certainly, certainly coming up on fast, certainly coming up on us quickly now as well, you know, thinking about it going, oh, it's only four months away. Yeah, we're going to have to start thinking about different things and speakers have been booking flights and we've locked away all the accommodation for everyone and all that kind of stuff. So yeah, just, just excited to keep the ball rolling and, you know, the closer we get to Larragon, the closer we get to warm weather as well, which I'm not a fan of. Yeah, exactly. Do so last week, last week on the 17th, I think would have been a year ago that I arrived at Larragon US ready to go for my talk. But I believe that was like a Sunday or a Monday that I got in. Yeah, maybe it might be Monday. In any case, I didn't speak until a couple days later. But man, it was like, oh boy, I think it was a good choice to not speak this year. It's been very, very, very, very, very busy year. And it would have been very difficult to fit in the time to put a talk together. And so I'm glad I didn't morning it. However, you know, just because it's like, Oh man, it would have been so fun to be able to do that. So it's going to stink not being like at the speaker dinner and not being able to like, you know, basically have that VIP pass, which is so fun. But we'll see maybe next year. I don't know. The thing is it's not like it's a guarantee. You know what I mean? Like you put your talks thing in and like hopefully Taylor likes it and hopefully doesn't have a million other amazing submissions from other people who are really well known and really great speakers. And it's like, I just happened to get on the list last year. I'm not sure. I don't know. I just it just worked out that way. But you know, there's no guarantee that just because I'm putting a talk in next year that I'm going to actually get on the list. So we will see, we will see, but looking forward to there coming up. Yeah, we had like 130 140 submissions. And like even even 140 getting that down to the 17 that we have at the conference is like hard enough. I can imagine the like Europe and the US, the volume of submissions that they get combing through and putting together like a really good comprehensive, you know, covering all the topics and things like. And it's always a balancing act between, you know, who is the audience? Who wants to see what, you know, where are the levels at? How, how do you balance like the, the professional development talks with the technical talks? How how technical do you want those talks to be and things like that? And it's difficult as well from an abstract to tell all of that kind of stuff. So yeah, that's the thing is that you're going to do a really good job writing that abstract to get the person who's looking through those excited. So it's like, yeah, yeah, I'm sure as you looked through like 140, I'm sure some of those abstracts really stood out. And then others were like, yeah, you know what I mean? Like getting it down is like you, you cut it in half. You know, there's, there's the obvious one. There's, so we, we have like a limited budget for the speakers. So, you know, we can cut out a whole bunch of, you know, people that we want to get to speak, but we try and get first time is more from low close to home, you know, more like first time is that our otherwise prominent, you know, Joe Tannenbaum speaking this year, prominent member of the community on the Laravel team as well. So, you know, there are, there are certain things that kind of move you up and down the ranks, but we, you know, we, as much as we would love to have 50 50, we do also need to be mindful that we're trying to focus on, you know, our local community as well. And so where we try and draw the majority of our speakers is from, you know, that local pool, that local community. We try and bring new speakers along for the ride and, and help them out as much as possible. And, and so, you know, getting it from 140 to sort of 50 or 60 is pretty easy realistically. But that last, you know, 50, 60 down to 30 down to, you know, agonizing up to, you know, an hour before I'm sending out the invitations to those 17, you know, it's. And hoping that they're all still able to do it and all that stuff. Yeah, exactly. Yeah. Yeah. It's, it's definitely my, my least favorite part is, is cutting that list down to 17. And then like hoping that the 17 that you pick are the other ones. So I've, yeah, something I don't think about much, honestly, you know, I think I've had a good track record over the last three events, you know, but yeah, I think this is going to be really good. That's awesome. Very cool. Hmm. Well, um, yeah. So Laraconda is coming up for US pretty quick here as well. And next month as well. Well, four weeks away, month away. Yep. Yep. Yep. So we're going to make sure I got everything squared away for that. And, um, you know, excited to kind of go get, go get down there and see everybody say hi, catch up with everyone. Um, in the meantime, though, we've got some fun challenges we're working on here at work. Um, the most recent one that we've been working on is Twilio conversations. So, um, this is like two way chat between, um, you know, our users and our internal team members. And so the cool thing about Twilio conversations is there's like multiple channels that you can use to kick off the conversation. So you can do like Facebook Messenger, you can do WhatsApp, you can do SMS, right? Um, and so they have a mechanism by which you can set up a number, right? And then you can say if anybody texts this number, automatically set up a conversation. But we would really like to use our short code in order to do that. So I'm not sure what they, I'm not sure what you guys have in Australia. If you guys have, so for us, we have, you know, plus one is our international code. And then we have a 10 digit code after that. So it's like a 10 digit long code. We call it 10 DLC, 10 digit long code. Um, and those 10 digit long codes are typically used for, uh, person to person, PGP, right? Um, and so if you're trying to use a 10 digit long code for the purpose of engaging a user, uh, like as a company, it's very frowned upon. There's, that's not, it's pretty much seen as spam almost always. Okay. Unless you register a campaign with that 10 DLC. So it's a, it's a bunch of red tape, all that stuff. However, we also have short codes, which short codes are like five digit, five digit numbers. And they are sort of like, their scene is very trustworthy because they're difficult to get. Um, and so years ago, we were able to secure a short code. And so what we wanted to do is we wanted to use conversations with our short code. However, the challenge is we've been using Twilio messaging with that short code for forever, which is just those API calls that you use to make a message, you know, to send an SMS to somebody. Yes. Now what we have to do is we sort of have to integrate this conversation piece alongside of our messaging piece. Um, and so we've been able to do that. Uh, what you have to do right now is you can manually set up a new conversation. So for example, if somebody hits a dead end, if they, if they text us at our number and we have like an auto responder or some sort of chatbot that's listening for these special keywords, if they hit a dead end, we can say, Oh, you know, you can either call us or type an agent. And then the type in agent that will kick off a conversation. Um, so was just able to get this working today, but the trick now is I have to be able to distinguish between, um, phone numbers that have started a conversation with us and phone numbers that have not started a conversation with us. And then I also have to manage the life cycle of that conversation. So I know when it's begun or when it's ended or when it's been archived or whatever. So then I can kick them back to the old way of doing it. So essentially what I have to do is I have to put an interrupt at the very front of this, uh, web hook that I'm receiving, which is like any incoming text to this phone over gets this web hook call. Uh, but the conversation, uh, endpoint, there's a new web hook conversation, uh, endpoint. And now both of them, what's happening is both of those web hooks are getting that call at the same time. And so I now have to sort of like massage this and figure out how exactly uh, that's going to work, which doesn't seem too terribly difficult when you just think to yourself, like, Oh, I just created a database record. And that's all true. But now what you have to do is you basically have to keep the Twilio conversations in sync with your local representation of those conversations. Or you otherwise have to query out to their API every time you receive an incoming text message and say, am I in a conversation with this phone number now right now? And if I am, don't respond on this messaging web hook over here. Only respond on the conversation web hook over here. Um, so that's one challenge I'm facing, but then there's a whole host of other ones. And there are pre-built solutions for this stuff, right? That's the thing is like, there are million solutions out there that allow you to do, um, you know, two way messaging and things like that. But the problem is in order to use those, if you want to use some sort of like SMS thing, you have to port your short code over to them. And so we can't, we can't really do that. So we kind of have to home roll this thing. Um, what that means is all the things like who is the person assigned to this chat? If they haven't responded in a certain amount of time and the person is still trying to talk with somebody, how do I, you know, escalate it or roll it over to a manager so that somebody can see it? Um, you know, how long do you wait before conversation is seen as not active anymore? Uh, how long do you wait before you close a conversation? Uh, if you close a conversation and they reopen it, do you show the chat history or don't you? Um, you know, all these sorts of things. If we had, if we did do messaging outside of the conversation, like if we previously sent them an automated message through an API, should we show that in the conversation view? And how do we do that? Right? There's all these new complicated problems that we're trying to solve. Uh, but today was just really exciting because was able to finally get a conversation started with our short code, which was back and forth with Twilio sending tickets. You know what I mean? With their support team and you never really know what you're going to get or which agent you're going to get on the other side. Are they going to be competent? Are they, are they going to be a newbie? Uh, and so thankfully this is the script where they're actually going to go. Yeah, exactly. This is the third ticket I've submitted. And this one, I got a really smart person. And, uh, they were with by the third message. They were like, try this. I was like, boom, nailed it. Got it. It was it. That was all I needed to do. And so, uh, yeah, anyway, that's what we're working on right now. Really exciting, but also lots and lots of problems to solve, which I love. I love solving those, those problems. It's fun. Um, let's just gotta spend a lot of time thinking through and discussing those things and making decisions about, uh, about that stuff because, you know, when you're building it on your own, you gotta, you gotta think through all those things. All the things that the other companies who have built it with a team of engineers of, you know, 50, yeah, I got to do it with a team of five. So yeah, it's fun. Yeah, I've, uh, I've been working through advertising, um, schedule like calculator for the last week or so, which you would think is fairly straightforward, but, um, there's, there's like 10 or so, like explicit inputs into this calculator. And then from those 10 explicit inputs, you then have all of these derived inputs with things like brokerage can be either a percentage or a dollar amount and, or, or balloon payment could be a percentage or a dollar amount. And then based on, you know, whether it is percentage or dollar amount, you have to then calculate the other value. So if you say, you know, this is $10,000, we have to figure out what $10,000 is as a percentage of the amount being funded and, and vice versa. Um, so this is just all of this kind of stuff. And it's, and it looks very simple when you look at the spreadsheet that has been given to you that you like taking the spreadsheet and turning it into a web thing. It's like, yeah, it is simple there because you can just like click around and do all this stuff. Whereas in code, you've got to think, okay, which things need to go in which order, you know, some things have to exist before, uh, because there's, you know, there's these dependent inputs and things like that. You have to figure out what is an input and what is a derived input you have to then. And the thing that's been really getting me tripped up is, okay, we've got the front end, which has a whole bunch of fields. The front end then comes in as a form request. The form request then gets converted into a DTO, which is the input DTO. And then you figure out, okay, how much of this is just like static values, how much then gets passed into the actual calculator to then calculate different bits and pieces. And then the results of the calculator gets spat out as another detail that is out there, which then, which then gets sent back because we did this once before where like the form request kind of became, went into the DTO and then the input kind of became the calculator, which also kind of became the output. And it makes it a little bit finicky to test to, you know, separate all the different pieces and things like that. So we're trying really, really hard to like figure out where we draw the lines. So I haven't even touched the output yet while I'm trying to figure out the calculations. And then it's like, you know, this is a five year term. Well, how many periods are in it? Well, the periods change. Is it a weekly payment? Is it a fortnightly, you know, a two weekly payment, a monthly payment, a quarterly payment, a half yearly payment, a yearly payment? Like, so then you got to figure out the periods. And then the date math is funky. PHP has date period and date intervals. Yeah. So you can kind of say, like, how many date intervals do I have in a date period? So in this five year period, go and figure out all of the the intervals within that. And then kind of working with all of this and then looping through that to then figure out, okay, what is the actual calculation to figure out the payment amounts of each, each step? And then looking at, you know, the spreadsheet, it's I typed the formula into row one. And then I clicked, you know, the little magic handle and I dragged it down and just like increments everything by one. So you go, you know, A one, B one, C one, all the way down to wherever. And it's like, all right, that works in the spreadsheet. How do I turn this into a formula that I can like iterate over in like this calculator? So and we've got a fairly tight deadline on it. So it's like, part of me wants to do it properly. So we don't get ourselves in trouble with it later. And part of me goes, you know, there is serious time constraints here that we've got to get this out the door. So And did you see that tweet the other day? Somebody said like, like, basically didn't realize they needed to remember math in order to know how to do programming. Yeah, I didn't see that. I'm sitting here relearning math. And then he said, they do need to know math in order to do programming. And then the next tweet, he said, no, no, you don't. And I'm like, you kind of do the kind of do like, you don't have to know everything. But like, you have to have a basic understanding of how these things work. Like, I remember at one point, I asked somebody who was new on my team to do like an average. And they were like, okay, and then they went away and did the thing and I'm like, are you done with that like average thing? And they were like, well, I'm working on it. I'm thinking like, how long does it take to do an average? I mean, like, what are we, what are we doing here? And then went in and realized like, they don't know what an average is. They don't know the formula to find average. Now, if you just go in an Excel sheet and see equals average, and you sum the column and do the thing, then they did fine. Yeah. But they didn't know how to do an average. And I'm like, okay, there, there is like this basic level of understanding that you kind of have to know in order to be able to operate. And like, you need to know percentage means like, you know, you move the decimal over to if you're, you know, and that's, that's, you know, yeah, that's what you have. And so like, you don't know that you're missing a big piece of how this works. And so you have to know some stuff, you don't know about everything. But man, the more you know, the more helpful there is a level like the stuff that, yeah, the stuff that I was looking at for this amortization stuff, there are some like, I was looking at the calculations, and I was like, that is a level of math. I never thought I would see outside of like structured learning. And I was like, sure, sure, someone has written a library that does this for me. And like, it was a library that doesn't thank God, but it's yeah, thank God, you know, there's like the percentage thing is true. As humans, we look at percentage, and we say like 5.25. And in a spreadsheet, if you put 5.25%, Excel, Google sheets, whatever, knows that you had to operate with that. When you're doing a MPHP, and you want to calculate like 5.25% of 100, it's not 100 times 5.25%. It's no 100 times 0.0525. Exactly. And I'm looking at this going, why am I off by? Oh, yeah, okay. So then you have to decide, all right, at what point do I divide by 100? Do I take the user input of 5.25 and immediately convert it to 0.0525. But at some point, I'm going to have to present that back to the user as 5.25. So I do do I leave it as 5.25 divided by 100 when I need to do operations with it, so that I all so that I don't have to remember, okay, I need to return this as 5.25 at the end or like, and so you've got to make all these decisions and you've got to keep this all in your hand, and you've got to make sure that like you do it all at the right time. So this is where testing is very good because you write all the tests first, you say, okay, given these inputs, these are the outputs that I expect, you know, if I want to see 5.25 at the start and I want to see 5.25 at the end, I know that somewhere in the middle there, I'm going to have to divide by 100 to make sure that I get the correct value in there. Otherwise, you're going to be off by a factor of 100 and then you're going to know enough, you have to know enough to be able to like have these things pass the smell test. Do you know what I mean when I say that, like, like you look at that number and you're like, mmm, that's not right. That's not the right number. And if you don't know enough math to know that, then yeah, you can get yourself as a pretty big trouble pretty fast. And you know, juggling with scale as well. So unfortunately, I have like our product team was like, here is the spreadsheet that we need to. So I can look at that and say, these are all the inputs. And I know, like, when I write my tests, given this, this set of inputs, these are the output. This is an excel sheet they've been using for five years. They know these, this input, this is the output. So I need to write a test that does that, make sure it matches and then go through. Yeah. And I said to the product team, I'm like, I don't know if what you have given me is correct. What I do know, what I do know. That's what yours did. Yeah. What I do know is that what I give you is going to produce the same results as what you have. That's what you gave me. Yeah. And so, you know, and then it's what we're using the, the brick math library. So we've got things like rationalism, big decidimals and all. So it handles like rounding, but there are like certain situations where you can specify, you know, if you do need to round, round up or round down or round halves up or down and things like that. And there are other situations where if it cannot round it without losing precision, it will just throw an exception and there is nothing you can do about it. Correct. Yep. I mean, that is, that's the thing. Like the more times you lose precision, by the time you get three steps later, you're way off, way off. And like with these things, you got to be penny perfect. I mean, you cannot be off when you're talking about banking stuff, because like I said, at scale, you slide it from $100 to a million. And now your mistake that was off by a dollar is now off by a lot more than that. And so you got to be exactly perfect. And it is, I mean, that's why this is why you always store money in the smallest amount that you can, right? So sense, right? Lessons learned the hard way. If you can't store it in sense, you're in for a world of hurt because you're going to have to start rounding sense in order to get there and it's just not going to work well. And so it's, it is a difficult beast to tame. And one that I think everybody should have to do at some point in their lives, in their programming journey, dealing with percents and dealing with money. It's, it's a fun one. And unfortunately dealing with money in typical financial systems, but especially in, you know, US and Australia, we're dealing in up to two decimal places of precision. So if you're doing all of your work, the stuff we're doing is like five or six decimal places. And that's just because that was what this spreadsheet was said to. So that's what we've decided. We'll work in five or six. So that way, you'll loss of precision and your rounding errors are in a way out there. Yeah. Yeah. It's five or six decimal places down. You don't have to worry about it because you're just going to chomp at two decimal places today. At the very last second, it's like at the very last second, that's when we can actually do it. But like up to that point, you can't, you can't lose anything. You got to keep it all there. Yep. Yep. And so good stuff to remember. And then, oh, I wanted to talk about one other thing, which is it's not super related, but I guess maybe a little bit, which is that when you're upgrading from level 10 to level 11, it's also upgrading from carbon two to carbon three. Because this is the one other thing I was going to say, which is like, you know, when you're dealing with money and precision and floats and things like that, you got to be careful. And then when you're dealing with like sub month, ad month, and, you know, you have more than 28 days in a month and you do sub month and like sticks a weird month, the overflow stuff, yeah, all that. You got to be really careful with that when you're dealing with those. And then this one other thing bit me recently, which is upgrading from carbon two to carbon three, or actually level 10 to level 11. I should go look at the upgrade notes and see if it says anything about this. But one of the functions that we use in carbon all the time is diff in, and then there's a million other thing, you know, different seconds, different minutes, different hours, different time, you know, different weeks, different years, yeah, diff in anything like that. So what has happened is it used to give you an integer value always. So if I said now, add days six, and then said, different time, or sorry, diff in days, now, it would give me six or whatever, right? Whatever it is. However, if there was a, if the hours did not add up to exactly 20, you know, six 24 hour periods, it would just give you five. Well, now it actually gives you a float, not an integer, it gives you like five dot, whatever. And if the time is not, it's not giving you a absolute value of the difference in time, it's giving you the negative or positive version. Did you go backwards? Or did you go forwards? And so it's no longer just five. Now it's negative five point two, right? Yeah. And so really goofy. And so if you're using that stuff, you have to intentionally make sure your codebase is specifying cast this to an integer, which will take care of the negative and will take care of rounding it, not a problem. Or you can pass as a second argument, you pass true, which will take all it'll give you the absolute value version of it, but then you still have to take care of the integer portion of it. So it may be a positive that it's got more precision and maybe a negative, but what I will tell you is that if your tests are not being careful about how that that's being handled, you will end up with some pain. And that's exactly what happened to us. And we were dealing with payment stuff. And so thankfully, it was just how often a type of payment was recurring. And it wasn't actually setting how often it was recurring. It was just basically trying to determine how often it was recurring based on the dates of the payments. So we didn't screw up anybody's stuff, but it was like the displays were weird, because we were dipping in days and then it was not working the same as it used to. So just something to be aware of, upgrading from 10 to 11, or just from carbon two to carbon three, watch out for that one, because it'll bite you. Yeah, it is. It is definitely in the in the upgrade guide. It says that Lara Bo 11 supports both carbon two and carbon three. And then it talks about the differences with the diff in methods that they now return floating point numbers and may return negative values to indicate time direction, which is a significant change. So the framework itself will support both. So if it's if it's a big enough breaking change for you to upgrade to carbon three, and you can't go through and realistically update all of your usage to account for the floats and the directional time values, then you can just use carbon two and everything will just keep working as it is. If it's like a few things here and there, then yeah, go ahead and upgrade. You know, keeping up to date is generally the preferred mode of operation for Lara Bo. So yeah, I think I need to reset reach out to Jason McCurry on this on Mr. J. Mac. Because I think this is I should have looked at the upgrade guide. I can't blame him because like he did all the work for me to get the shift to 11. But I think that's I typically just sort of think like, well, if there's anything worth knowing, he's going to let me know exactly. And he probably has updated it by now. But that's I didn't I didn't see it in there in the upgrade guide. I should have looked there first. But that's that's what bit me. And so anyway, we're going back through our applications now, anything that we upgraded to 11 and being like, hey, go look for anything that says diff in and then go check to see if it's working correctly, because I want to make sure there wasn't a bunch of other stuff that we missed along the way that was causing some issues. So anyway, my last thing before we wrap up here, I have the pipeline has now finished running on a branch that I opened or a PR that I opened back in February, which haven't really had time to get around to it. But this is to upgrade dependencies to support PHP 8.3 in our application. So that's all shipped. We've been we've been running 8.3 in production. We've been running 8.3 in our new like containerized production environment for about a month, even though we've been running like 8.2 dependencies. So now that that's available, we're just going to merge that send it to production. And then the next thing to do will be the lower of 11 upgrade, which nice should be mostly straightforward. I did it back when it was like a beta, beta shift and worked through some things with JMac, but yeah, it should be good to go now. There has been. Yeah. So I think maybe I shifted too soon. I say that, I don't know, like when they were when we were first talking about a layer of our news and all that stuff, all the hotness was like, slim your application files, like delete all the configs, like condense everything into this one bootstrap app dot PHP. I don't know if that's the recommendation anymore. Honestly, I don't think they're slimming configs. I don't think they're necessarily doing all the removing of the service providers. I don't I'm not sure at least when I've done a layer of all new. I think for 11, it's got all the config files in there. They're also there. And it's like, okay, it's interesting. So I think there's been a little bit of a change course on that one back and forth on that. And yeah, yeah, there was there was. And so I like, I went all in. I'm like, dude, let's frickin slim this thing down to nothing. And we did. I mean, we took ever all the config files are gone. Almost all the app service providers are gone. Or you know, all of our service providers were gone. We slimmed everything into that bootstrap slash app dot PHP. It's fine. It's fine. It's just much different. And yeah, it's much different. When you've got 10 years under your belt, you know, since the version five days of the, you know, this is where everything is. This is where providers are. This is how to manipulate things. This is where to change things when you then get to this point of 10 years of doing it like that. And like, I don't think it's good or bad necessarily because I haven't used it one way or another. But I think the fact that it is drastically different means that you actually need to go and think, like, how do I do this? And it's not. Yeah. And like I said, I don't think it's good or bad. It's just you haven't learned how to do it in this new way. Yeah. And so you do have to think about what you're doing a little bit more to figure out where is the appropriate price to do this place to do this. For sure. Yeah. For sure. Like when you're like, hey, I need to register a new like routes thing. Like, yeah, we're not about service provider anymore. Yeah. You don't do that there. Like, I need to, you know, modify a global middleware. Well, you don't go to the HTTP kernel anymore. It's not there. You know what I mean? So it's like, you just got to know it is a little bit of like moving around. It's not too bad now. Now that I've done it with, we've probably got like eight apps running a layer of 11. It's not too bad. I typically can find exactly what I need. But there is sort of just like, I guess the other thing too is like sometimes the documentation on it is a little bit like they haven't decided either. Sometimes it assumes you have it the new way, I think. Most of the time it does. But I don't know. When you're looking at the old documentation, like for 10 or something like that, you know, it's like, oh, yeah, it doesn't work like that anymore. Although all the tutorials are out of date for like, hey, here's how you added the middleware. It's that doesn't stop there anymore. So that sort of sucks. Whatever. I'll get over it. But it'll be fine. It'll be fine. It'll be fine. All right. What up? So 159. Is that right? Yeah, it is. Thanks for hanging out with us. 159 shown us at Laura's law law law law. Show notes at Northmead South dot audio slash 159. Head us up on Twitter at Jacob Ben at Michael Jordan or North South audio. And if you'd like to show rated up in your podcast or choice, five stars would be incredible. Amazing. Awesome. And wonderful. If you're going to be at Larecon US, I will see you there in a few weeks. And if you're going to Larecon AU, you know, start buying your warm summer clothes, because it's going to be hot. Make sure you pack a large cup so that you can fill up your soda with American sized sodas. And if you don't have tickets, you're just certainly by some. All right, folks. Till next time. We'll see you. [Music]