Remote pairing around rounding errors with a pint

Michael:

Hey. This is Michael Dyrynda.

Jake:

And this is Jake Bennett.

Michael:

And welcome to episode 161 of the North Meet South Web Podcast.

Jake:

Your camera's looking extra spicy today. Looking good. Spicy is not the right word maybe, but extra clear, clean, crisp.

Michael:

That's good. It's always good for it to be clean and crisp. But the downside, as I have just just noticed, is that because it is crisp, it picks up everything. Like, stray hairs, dust, and lint, and like, you know,

Jake:

you spend 30 seconds. Yeah.

Michael:

Gotta spend 30 seconds before every recording, like, scrubbing all the lint off the brim of my cap because it's been cold.

Jake:

So I haven't worn

Michael:

it for ages. It's just collecting dust.

Jake:

We need, like, a makeup artist, you know. Do you think the podcast could afford that, makeup artists for us on Tuesday nights? No. Not even. Oh, well.

Jake:

Maybe we need to get more more more sponsors or something. I don't know. Any sponsors probably. Probably be Any sponsors.

Michael:

We just do it. We do it for the love. We do it for the Mhmm. Sake of catching up and

Jake:

It's true.

Michael:

Sharing Very true. Amusing stories. Like, my laptop earlier today locked up, and I thought, oh, while it's rebooting, I will go and fill up my water bottle my water over here. And I picked it up, not realizing that I had not remembering that I had just filled it up. So it was full.

Michael:

And you know when you pick something up and you're expecting it to be light and it's and it's heavy, or you're expecting it

Jake:

to be

Michael:

heavy and it's light, and you just missed it? So it slipped out of my hand, dropped, water went, and it all over my keyboard.

Jake:

Oh my gosh.

Michael:

Oh my gosh. So I'm like, oh, boy. So I had to pull apart the keyboard. I had to take all the keys off, cleaned it all off because there's, like, water in there. It's and, like, it was due a cleaning.

Jake:

You didn't fry it though?

Michael:

Blew it all out. Well, I thought it was fine. I put it all back together, put all the keys back on, turned it on, and everything seemed fine until I typed, like, c, and then c and v pressed together, and v and b pressed together, and then b would double press. Like, oh, no. So there's obviously water that's got into the keyboard, into the PCB that's causing it to, like, register across both.

Michael:

So I had to take all the keys off again. I had to unscrew the case so I could get in there,

Jake:

but the

Michael:

PCB is is glued to the top of the case, so I couldn't separate it to, like, clean it out. You

Jake:

couldn't separate it till I cleaned it. Yeah.

Michael:

Not to press air maybe or something? Yeah. I tried blowing air through. It didn't work. So what I did was I got Ray's Dyson hair dryer and just blasted that for a couple of minutes with warm air, hoping that it would cause it to evaporate.

Michael:

And fortunately, it did. So

Jake:

Nice. Good call. Yeah.

Michael:

It's, it's clean. I was

Jake:

gonna say pop it in the oven for a few minutes and

Michael:

Yeah. Something like that. I don't have a bag big enough to put it in a bag with rice. So

Jake:

Yeah.

Michael:

It's, yeah. Just just hit it with a bit of hot air for a couple of minutes, enough to kind of dry it out without without melting anything. And, it's been fine. And it looks good as new now, which is nice because, you know, you get it is it is disgusting how many crumbs and things get into

Jake:

your keyboard. Don't even wanna know. I I know. It's like I see my keyboard at work, and now now that you're saying it, I'm probably gonna have to go in and pull all my keys off tomorrow and just go although, I mean, like, what am I gonna do? I'll hit it with spray.

Jake:

I'll hit it with canned air. I need to probably be good enough good enough. I need to see, like, just underneath my keycaps. Because, like, I've got one of the charges.

Michael:

Air blower things?

Jake:

Yes. Oh, nice. Does it work pretty good?

Michael:

The yeah. Well, it did, except it it went flat.

Jake:

Wow. I couldn't

Michael:

I couldn't use it while it was charging. So I'm, like, charge it a little bit, blow some air. Oh, it's flat again. Charge it a bit more, which is why I went and got the license again. So

Jake:

Yeah. Yeah. I need something. So, like, my keyboard is so I got a Keychron k 11 pro RGB and white backlit. Got 2 different ones.

Jake:

1 at my north location office, 1 at my south location office. And, the keyboard itself is like an aluminum frame and then the the keys, like, sit above it. You know what I mean? They're like floating. So it's not like it's inside there.

Jake:

And so you can kinda get under the keys, which is nice, because they're low profile caps. Yeah. And so I feel like I could get under them pretty easily if I had a little tool or something that I could use to kinda just, like, get under the under the keys. So that might be maybe I don't even have to get them on.

Michael:

It's the same one?

Jake:

It's exact exactly. That's the same one. Do it with the same keyword?

Michael:

I think you got it because I got it.

Jake:

Oh, I probably did. I probably did. Well, I think Hempel also recommended it because it was the Alice layout. Mhmm. Yeah.

Jake:

So I got my I got one of my other developers a k 15 pro, which is like a 75 percenter. Mhmm. So it doesn't have the numpad or anything like that because I figured, like, he won't have to go through all the pain of, like, remapping escape and things like that. Like, he's not up for that probably. I don't I don't think so.

Jake:

It still has the, you know, the function keys, I think, and the number keys and all that stuff. And so he should it should feel pretty familiar, pretty close to home. Yeah. But he had a, Apple magic keyboard, like, full one, you know, the full size one. It was a black one.

Jake:

It was really nice, but the 4 key wouldn't work. And as luck would have it, 4 is the dollar sign. And in PHP, that's pretty important. And so it was he had to push, like, really hard on it in order to get that one to work. So I'm like, all right.

Jake:

I'll just buy another keyboard. So so anyway, yeah, we'll see how that one goes for him, but, I'm still loving my keyboard. It's still it's still kicking, and I really love the customizations. This caps caps lock for escape is the best thing ever. Mhmm.

Michael:

It

Jake:

is. It took me a while to get used to it, but it is really nice. Escape and super key. And so, loving that.

Michael:

I don't

Jake:

Really still like that. I don't

Michael:

have to do it often, but any anytime I have to use, like, someone else's keyboard or do something on someone, I'm like, why is why is this not working? What

Jake:

Yep. What kind of Caps lock. I hit caps lock so many times, like, literally. And I'm like, oh, that's right. It doesn't do anything.

Jake:

And so, anyway, it's, it's fine. It's fine. But it does it does take a little bit of, like, adjustment when you get on somebody else's machine and Yeah. Start messing with it. And, so, anyway hey.

Jake:

You know what we've been using recently is we've been using Tupelo a lot, actually.

Michael:

Right. Yes. Good.

Jake:

Yeah. Use it all the time now. And so the guys had convinced me. They're like, Slack sucks for screen sharing. They said the resolution is always absolutely horrible.

Jake:

Yeah. And they complained enough that I was finally like, okay. Fine. Let's do try let's try Tupelo. I said, if we don't absolutely love it in a month, I'm canceling.

Jake:

I was like, you guys are gonna have to convince me it's really worth it because, you know, it's not the it's not the least expensive thing, I'll say. It's not the most expensive because it's certainly not the least expensive thing. And so I freaking love it. It's awesome, And I am a believer. So I think the drawing on the screen is the biggest.

Jake:

Like, it's number 1, the resolution is really good, but the drawing on the screen is really, really nice. It's so fluid, and

Michael:

I use it all

Jake:

the time.

Michael:

When you sit next to someone, you can point at their screen and say, oh, you know Yes. This thing here. But it's not I think I think Slack Huddles has it now, but it's not quite as good. And you're fighting, like, the quality

Jake:

Sounds good.

Michael:

Yeah. And and it and the audio never works the first time, and you've got to, like, oh, the the screen share didn't work. I've got to stop it and start it again. All kinds of, like, just weird little paper cuts. But Tupelo just always works.

Michael:

It's always high quality, sounds great, video works, screen sharing works. I like that you can, like because I'm on an ultra wide screen. So when I have to share stuff at work, when we're using Slack or Google Meet, it's like I can share a window, but then you wanna swap windows. We gotta stop sharing, and then you gotta share the other window. Whereas

Jake:

I know exactly what you're saying. You got it. It's one of

Michael:

my favorite things. I just wanna here's my my 16 by 9 section of the screen and go from there. For for any of the

Jake:

stuff that I have

Michael:

to do for work using Google Meet, I've got better display, and I and I have, like, a picture in picture virtual display that is a 16 by 9 that I just, like, drag what I whatever I need to in there. But it's just and it's fine now that it's set up. It's just a pain to to do that kind of stuff.

Jake:

Yeah. So, like, on Tupelo yeah. That's honestly, like, 22 of my favorite features. Okay. Okay.

Jake:

So let's just talk base features real quick here. And this is not a paid ad Tupelo, but if you wanted to pay us, we would take it. We got makeup artists to pay for after all. So the yes. Video quality is great.

Jake:

Being able to draw on the screen, awesome. I love the little animations they have, like ship it or like the little dog in the fire. You've seen that before? Like, you kinda like have you ever seen those? No.

Jake:

Like, they're like reactions. They're reactions. So, like, you know, like, a big hand will come across the page and, like, stamp the screen and it says ship it. That's pretty funny. So they have those little things.

Jake:

Those those are fun too. But, yes, sharing the screen I'm on the ultra wide as well, and so sharing half my screen is the only thing I ever share. And it's, like you said, it's so nice to not have to share your whole screen, but to be able to share, like, half your screen and just drag things in and out of there. It's so nice. And then I can have, like, my documentation or whatever I'm looking at over on the right hand side of my screen, which is super, super handy.

Jake:

And I can draw on my own screen. I think that's the other thing. With Slack, I don't think you can draw on your own screen, but with this one you can, which is really great. So the only one paper cut complaint I have about this is you can't there's no easy way to start a meeting with, like, sharing half the screen. There's a shortcut to share your screen, but there's not a shortcut to share partial screen.

Jake:

It says p, but I don't think it works like that. So anyway, that I wrote that in actually as one of the things. What was oh, and then the other thing is AppVeil. Have you used that before on Twopel?

Michael:

Haven't used it, but I have I'm

Jake:

familiar with it. Yeah. My gosh. Game changer. Huge.

Jake:

Okay. So for instance, it's the most embarrassing thing if you are sharing your screen and then all of a sudden you have, like, a private message Slack channel thing that you were messaging somebody about that's not really anybody else's information. Not that it's like anything super private, but, like, there's just things that you wouldn't necessarily want the whole team to see that you've been it could even be something as innocent as, like, PTO. Like or, like, oh, sorry to hear that's happening. Like, yeah.

Jake:

Like, no problem if you're off on Friday. You know, it's just it's nobody else's business. And so or Yeah. Or, you know, you have, like, messages, like Imessage, like a personal message from, like, hey. Can you pick Graham up from soccer practice or whatever today?

Jake:

You know, that sort of stuff. It's like nobody else needs to be able to see that. And with AppVille, you don't ever have to worry about that being a thing. Like you set up AppVail, then you can say, these are all the things that should never be shown on my screen ever. So I have messages.

Jake:

I have Outlook. I have Slack, even my Notion Notion. But and then what you can do is you can throw it onto the screen. It'll show it with a, little thing that says like, hey, this is being hidden. This is being, veiled on your screen.

Jake:

And then the bottom right corner has a little eye and you can say reveal. And so you can reveal it just for that session. It's huge. I can't tell you how many times that has saved me from just like an awkward, annoying interaction that I don't I don't have to be I don't I used to have, like, anxiety about that. Like, oh, I'm gonna get some notification that's gonna pop up that somebody's gonna it's like never does that happen anymore because Appvail also will veil any notifications or any windows that belong to that that thing.

Michael:

Yeah.

Jake:

It's huge. And I don't think anything else has that.

Michael:

Very thoughtfully introduced feature. Like, it didn't always exist. And I think I think that part of the catalyst was, like, maybe Adam Wylen complaining to to Ben about it at some stage. Like, I just wish I could hide stuff. And they found a a a really good way of implementing it where it has a bunch of sensible defaults.

Michael:

And and it makes it really easy to and obvious, you know, when something is veiled as well. So, you know, 1 password and messages and all that could probably be nice

Jake:

if there was this kind of

Michael:

functionality if for for people that are streaming. Like, the amount of times that that I have seen someone's streaming video that has, like, revealed a secret or something that they shouldn't have and things

Jake:

like that. So Totally. I mean, honestly, it it is sort of mind blowing that nobody else has done this. I haven't seen anybody else do this ever. Yeah.

Jake:

It is such a huge problem, and nobody else is doing it. So, big, big, big key differentiator there. And like you said, it really is super well done. The way that they've decided to so when somebody else is looking at it, it just says this app is veiled. That's all it says.

Jake:

And then the fact that it shows me that it's veiled and then gives me an option to reveal it, like, it's just really well done. And the thing is, like, as a designer, as a developer, you know how hard it is, how many iterations you have to go through to get to that, like, perfect, like, oh, that's it. That's what it should be. And it just feels right. It just feels exactly like how it should be.

Jake:

And so I'm sure they went through a ton of iterations on that, but they nailed it. Freaking nailed it. And so I love that. So, anyway, I'm a 2 people convert, probably never going back to anything else, but it's really great.

Michael:

Yeah. I think by default I mean, obviously, it's only gonna avail the apps that are installed on your computer. But by default, it has a list of things, obviously, that it knows that it should be hiding. So 1 password, keychain access, messages, signal, telegram, like, all of those things

Jake:

Yeah.

Michael:

Are always always set by default. So yeah. Very, very good. And, So

Jake:

do you guys use that at work then? You guys use Tuple at work?

Michael:

Yeah. I mean, sometimes it's easier, unfortunately, just to use Slack.

Jake:

Whatever it is. Yeah.

Michael:

We're all already in Slack. And sometimes it's just like a quick 5 minute thing. So we won't triple. But, I I I do use it on occasion, especially if there's gonna be, like, some more in-depth or a longer session or we're actually doing some pairing that that we need to, you know, go back and forth on things. It just makes it much easier, especially because, like, I'm on an ultrawide and and ultrawide's at work and things like that.

Michael:

So you'd think it would be okay, but you don't necessarily wanna share your whole screen, which, it's like doesn't allow you to do. It's like you can do a window or you can do a or a screen, and and that's basically it. You can't do a portion of the screen. So, you know, the ultrawide is good because you can put stuff to the side and have reference elsewhere that, you know, no one else sees. But if you can't can't share it

Jake:

Well, it's okay. Well, you're halfway. It doesn't matter.

Michael:

Yeah.

Jake:

Yeah.

Michael:

Like, I need my editor up, and I need my browser up. And I can't can't do both. So, yeah, we do more in-depth stuff.

Jake:

Yeah. Yeah. So, for us, we use Slack too at work, but we just have the pairing room that's kind of always open in 2 pools. So you can have, like, rooms that are set up. Right?

Jake:

And so we've got, like, a pairing lounge, a stand up. Let's see here. Yeah. Pairing lounge, stand up, and then water cooler. I'm actually in I'm actually in the pairing lounge right now.

Jake:

I just left. I was in it that whole time. But, so then if anybody's in the pairing lounge, they're just like, hey. They're working on something. Everybody wants to jump in, kinda jump in here.

Jake:

But, like, what I'll do is in Slack, I'll start the I'll I'll go to the, to the stand up room, and then I'll copy the link. And then in the main channel, just do at here, and then paste the tuple link, and then everybody can jump in that way. So that works that works well.

Michael:

Yeah. We're kind of skirting it because I I have had, like, a personal license.

Jake:

Paying for it probably is the deal. Right? So, like Yeah. Right. That's that's the issue.

Jake:

Yeah. And that was our issue. It was like someone else had it, but most of us didn't.

Michael:

Yeah. I've I've always had a personal license, and I pay, like, once a year, whatever that is, plus the exchange rate is terrible now. But, you know, I use it often enough that it's worthwhile. And so the people at work, if we do need to do some more in-depth stuff, I've just added them as, like, a guest. And so they don't

Jake:

have to

Michael:

pay for it. Kind of like Screen Hero, which was the spiritual predecessor of Tuborg.

Jake:

Yes. I remember that.

Michael:

Like, it had that as well, where one person would pay and you could have as many guests as you want and invite them into your sessions and things like that. So, but we don't yeah. We don't it it's not a work thing. It's just it's it's a much more convenient tool for that kind of thing. And I know that, Mitchell is doing work with, like, Laramates and and trying to make, other Laravel developers more discoverable, you know, and and putting open slots.

Michael:

Like, I am I'm free to pair. I you know, I have experience with these packages and things like that. So you can reach out to people and and connect and do the screen shares and things like that. So it's it's a really convenient way, like, just to jump on a video chat. We use Riverside for the the podcast for this one for Laravel News.

Michael:

I use it for ripples. And it and it just makes it easy to get anyone on without having to install any software or remember to, like, open QuickTime and record things like that. Like, it all just works. But in terms of software that just sits there and you can just jump into a pairing session with anyone, Drupal is is certainly the the preferred. Because you don't have to worry about I mean, other than sending them the invite and having them install the client on their computer, it's not like you have to invite them into a Slack or, you know, set up a Google Meet or, you know, do a a Telegram video or whatever.

Michael:

It's it's all just, like, there to go.

Jake:

Yep. Okay. One more thing for those of you who are dealing with teams and are, you know, doing screen share things. Here's a huge culture tip for you. If you do not play a game daily with your team, you should.

Jake:

May I recommend 1? The only reason I say this is because we play this game every day, and it's so freaking fun. And it is a great team spirit sort of thing. It sounds so dumb. It takes probably 5 minutes every day.

Michael:

Yeah.

Jake:

But we are so competitive in this game, and it is a blast. It's like one of those culture things. You know what I'm saying? Yeah. Like, it's just funny.

Jake:

Like, different teams have different things that they do. I know, like, the Laravel team, like, it is, you know, morning. I think it's, like, one of the things, like, Taylor puts out, like or maybe it's just like a sunrise or something or, like, you know, just the different emojis you have throughout the day or that you've kind of, you know, those inside jokes sort of things. This is one of those things. And we were using this, this application before we used Tuple.

Jake:

So it's called Around. Have you ever used that before?

Michael:

I've heard of it. I think you mentioned it before.

Jake:

It's screen sharing app called Around, and it's okay. It it works fine. Like, we used it for a long time, but one of the things they have in there is they have games that you can play. And the game that we play every day is called Boom Party, and it is so fun. So it's Bomberman.

Jake:

It's like old school Bomberman where you kind of there's a bunch of boxes on a screen, and there's this little, like, map with, like, a maze sort of configuration, and everybody starts in, like, a different corner. And then you start with 1 bomb, and that's it. And so you blow up boxes as you thanks, Apple. Give me a thumbs up, reaction there. You blow up boxes and get additional power ups, and then you kind of go and try and take out the other players.

Jake:

Right? And so we play 3 rounds, and at the end of each day, at the end of each game, after we played 3 rounds, we will put emojis into the main channel. Everybody everybody's face every every person has their own emoji with their face on it. So we'll put their face and then we'll put how many rounds they won. And if somebody happens to win all 3 rounds in one day, which is very rare because everybody knows that by the time they've won 2 of them, everybody's out for blood on 3rd round.

Jake:

Right? And, if everybody happens to win that 3rd round, you get a crown, you get the crown, and then your face underneath it. So you, like, you win the crown for the day. It is a coveted possession, that crown, and it is a big, big deal. And it is so fun.

Jake:

I love playing that game. It's literally I look forward to it every day, and all the guys on the team say the same thing. They're like, it's like one of my favorite parts of the day. It's so fun. And so you should try it.

Jake:

It's free. Around is free to try, and, just try the game with your team. Try it for a week. And I promise you, once you start doing it, everybody wanna keep doing it. It's so fun.

Jake:

And I know Wilbur Powrie, he suggested it to his team at Givebutter, I think, and they play it every day now, I think. Or not every day. They don't have a stand up every day. They have, you know, every time they do have a stand up though, a big stand up, they they all play together. And so it's super fun.

Jake:

If you happen to have a daily stand up, great. If you don't, maybe you should have one just for the sake of having Boom Party. But any case, it's a blast. You should try it sometime. A lot of fun.

Michael:

We'll, we'll have to check that out. Yes. I'll I'll be rolling in the, over there.

Jake:

I have

Michael:

no idea why. I've lost my voice again.

Jake:

Gotta eat that water, dude. Oh, my gosh. You got a frog in your throat. Got a kangaroo in your throat. It's still there.

Jake:

Holy cow.

Michael:

Back. Alright. Oh, my word. Something went the wrong way.

Jake:

Oh, that's so

Michael:

yeah. I'll put a link in the show notes. It looks looks good. Looks like they've been, I don't know how recently, but they have been recently acquired by, Miro.

Jake:

Yeah. They were acquired a while ago.

Michael:

Yeah. Okay.

Jake:

And so it's probably over a year ago. And so but I still have a free tier. Yeah. It's still a free tier. It works it works fine.

Jake:

We use it for, you know,

Michael:

like, this business. Whiteboarding. Whiteboarding.

Jake:

Yeah. That's right.

Michael:

Calabrio's whiteboarding. Yeah. Yeah.

Jake:

Yep. Absolutely.

Michael:

We'll check that out.

Jake:

Very good.

Michael:

Hey. Good.

Jake:

So now that we've, covered kind of like our intro here, I was going to say that I had one other thing we could talk about. But if you have anything on your docket, I would love to hear about it before I start jabbering.

Michael:

I've just been in, like, rounding error hell for the last 3 weeks, which I think maybe I mentioned last time, and I don't really wanna talk about it. But if anyone has to deal with, like, currency and rounding and any of that stuff, it's all awful, especially when you're trying to compare, like, the output of what you have done with an Excel spreadsheet. And if you'd ever looked closely at what an Excel spreadsheet does, it is kind of grim because it hides all of the decimal places when you're working with currency.

Jake:

Yes. Oh, gosh.

Michael:

And it shows you, like, 2. And sometimes the actual value that has been obfuscated has got 5 decimal places, and sometimes it will have 3, and sometimes it will have 4. And so just trying to get anything to

Jake:

match that. Is there, like, any sort of standard agreement on how many decimal places are significant, like, when you're dealing with banking and and numbers? Like,

Michael:

I mean, we a a long time ago, we we worked with, like, 4 decimal places so that any of the rounding would happen on the 3rd decimal place. And so any of it would be insignificant in the context of a system of, you know, dollars and cents, where it's typically 2 decimal places.

Jake:

Sure. Sure.

Michael:

The problem is when you're trying to match with 3rd party systems, and they say, like Mhmm. They show you the rounded value, but you don't know how many decimal places they've worked with to arrive at that

Jake:

Yeah. Yeah.

Michael:

Situation. It's just a meh. So but no. That that has been a lot of my last 2, 3, probably even close to 4 weeks, which I'm but I don't like it. The solution is not to work in cents in this scenario because there's, like, multiplication and we're calculating interest.

Michael:

So it doesn't even matter if you start with cents because eventually you end up with decimal places. We've tried with, like, rational numbers as well. There is the brick math library and the brick money library that works with, you know, rational money and rational

Jake:

Define for me. What do you mean by rational numbers, rational money?

Michael:

What what is like, you don't have those

Jake:

rational values?

Michael:

Yeah. So essentially, it it doesn't have how am I gonna explain this? It doesn't work in dollars and cents. It it basically takes integer values and says, like, this is, a 100. Right?

Michael:

So a $100 becomes 10,000¢. Right?

Jake:

And then

Michael:

is that right?

Jake:

Or is it

Michael:

a 1,000?

Jake:

Yeah. That's right. That's right. 10,000¢.

Michael:

Yep. They have 10,000¢, and then it's got, like, a an order I think it's called an ordinal. I don't know. And it's like slash 1,000 or slash 100. So you know that this is, like, actually a $100.

Michael:

So all of these total calculations are done with, like, whole values to, like, maintain that precision. And then at the

Jake:

end, you do Okay. Rational numbers. Yeah. So, like, rational meaning ratio. Right?

Jake:

So, like, number over a number. Right?

Michael:

That's a

Jake:

rational number, I suppose. Right? Yeah. Okay. Sorry.

Jake:

Go ahead.

Michael:

So we use those rather than floats or anything like that in order to kind of

Jake:

Yeah.

Michael:

Maintain the precision until the very end

Jake:

of it,

Michael:

then round that for display. Which is fine, except when you've got, like, a schedule of of payment amounts. And so everything is fine. But then for presentation, obviously, you need to round it

Jake:

to 2 decimal places.

Michael:

And then if you add all those columns up, they don't balance from top to bottom. Yeah. Because the because the because the the fractional values are different. So if you say, like, if you start with I'm sorry. Jesus.

Michael:

Financial calculation. So if you're saying Jesus. Like, I've borrowed $50,000 and you calculate your principal repayments and your interest repayments and all that kind of stuff, like, the the the total of all of those individual principal amounts should not exceed $50,000 But because of rounding and presentation and stuff, if you take all that stuff, throw it into Excel, and then you do a sum on the columns, you might find, like, it's a few cents more than 50,000 or a few cents less than 50,000. But it but it has to be exactly 50,000. If you do the same thing in Excel, because it's showing you to 2 decimal places, but it's actually doing it in 4 or 5 or 6.

Michael:

You add all those things up, and yes, it does match up. And so you're trying to compare and you're going crazy. And it took me, like, a few days to realize that this was happening, that, you know, Excel is showing 2 decimal places, but it's working in multiple.

Jake:

And Right. Yep.

Michael:

Then, you know, all of those fractions of a cent do add up to the very round number

Jake:

Actual cents.

Michael:

A1000. Yes.

Jake:

Yeah. Right.

Michael:

So, you know, where we've arrived is and this as best as Did you arrive

Jake:

at, like, putting a disclaimer on it, which says, like, don't throw this in an Excel spreadsheet and add them up?

Michael:

Well, I said, like, why don't we just put a disclaimer on here that says these are indicative values only or whatever? But that that apparently is not good enough. The I think what we have arrived at is the generally accepted practice is to take is to balance, basically, the final payment. So make sure that the sum of all of your payments add up to

Jake:

whatever it is,

Michael:

and then take any overage and apply it to the interest. And so it's the interest the interest amount will be, you know, plus or minus 3¢ of the calculated value. But the principal, which is the amount that you have borrowed, will never exceed. Like, you will always be exactly correct. And you just take that, extra and move move it to the interest payment.

Jake:

Dude, that's hilarious. I wonder how many board meetings that took to determine that. You know what I mean? That's a really interesting way. So it's like a final number, like the final check sum.

Jake:

It's like, okay. This one will just make up for all the other odd pieces.

Michael:

Yeah. Generally speaking, in my experience with that kind of stuff, like, when calculating sales tax and things like that, the the general expect accepted, behavior is that you can expect values across a row to match up. So, like, the the the tax exclusive amount, the tax the tax amount will add up to the total. Like, that left to right will add up.

Jake:

Yeah. Sure. Yeah.

Michael:

Or top to bottom, you can expect things to add up, but they will never go in both directions. Mhmm. You will get a rounding error one way or the other. So there's there's yeah. It's it's it's just it's all fun and games.

Michael:

And and, like, so the accepted practice generally from an and I'm not an accountant, but my understanding is that the generally accepted practice from an accounting point of view is to be consistent with whatever decision you make. Like, if you choose to make sure that things add up correctly this way

Jake:

That makes sense.

Michael:

Then make sure everywhere, everything always adds up this way. If you choose to make sure it adds up this way, make sure it always adds up this way. And and that's If it's

Jake:

not on a convention, then stick with it. Yeah.

Michael:

Yep. And, you know, the the the tricky thing is because we're, like, putting these schedule payment schedules together and comparing it against external systems. Like, different lenders will do it different ways. And so it's very hard to kind of marry up, because there's no consensus. Like, one lender might round up, one might round down, one might just chop the value and not round at all.

Jake:

Truncate. Yeah.

Michael:

Yeah. So they just truncate, you know, 0.556 instead of making it 0.56 or making it 0.5 that they'll just, like, chop that 6 off and make it 0.55 and leave it at that. So yeah. It's Yeah. It's probably dependent

Jake:

on where trade's going. Right? Yeah. Yeah. So it's like Yeah.

Michael:

And is it like and and and in some situations, you would round in the favor of the person receiving the payment, and sometimes you round in favor of the person making the payment.

Jake:

Correct. Yes. Like, which way is the payment going? Yeah. Exactly.

Jake:

Yeah. Boy, that is some freaking tough problems to deal with. The rational stuff sounds really interesting. That sounds really cool actually. And that's I've never thought of using that as a way to preserve the, you know, actual values until the last second, which is really smart.

Jake:

The other thing that I read recently is some guy was talking about comparing float values, and he was like, you don't ever compare equality with floats. He's you subtract them, and then you look at the difference and determine if it's within an acceptable range to be equal. Like so he's like, I'll subtract the 2 floats. If they're if the difference between the two floats is less than 0.0001, they are the same. You know?

Jake:

So he never compares equality. He's, like, because there's just these weird errors where you're gonna end up with them not being exactly equal. And he's, like, that's okay. Sometimes that's fine. Sometimes it doesn't matter.

Jake:

He's, like, you have to, you know, you have to determine what sig what a significant decimal place is and then compare the 2 the difference between the 2 of them and see if it's less than that difference. And if it is, they are equal. So I was like, oh, that's smart. That's a cool way to do that.

Michael:

Yeah. Where Wes Boss has been talking about this on on Twitter recently

Jake:

as well.

Michael:

And he's like, you know, if you do 0.1 plus 0.2, it may or may not equal 0.3, depending on what language you're working in. Like, in PHP, I think it's 0.000 no. 0 point 0 three zero zero zero zero zero zero zero zero zero four. So

Jake:

Oh, gosh. Seriously? That's crazy. Yeah. So, I mean, that's that's, I think, the reason.

Jake:

Right? So that's why you do the difference and then and then calculate is because it's, you know, you can't guarantee that they're gonna be exactly equal. So, anyway, fun times. Fun times. Okay.

Jake:

I will keep this part brief. I will launch into my quick little discovery today of what we discovered when we were trying to use Pint, Laravel Pint

Michael:

Mhmm.

Jake:

Or Pint, depending on how you want to call it, but I'm pretty sure it's Pint, for your code linting. So we have a new project, and we are setting up new tests and CI stuff. So we have our PES tests, and then we have PHP sorry. LaravelPaint for our code style, and then we have PHP, Stan, sorry, for our static analysis stuff. Okay.

Jake:

Great. So all fine and good. Whatever. Well, in the if you go to Laravel Pine's documentation, at the very end, they have a GitHub that you can copy and paste into your into your, you know, your YAML file. And and what it'll do is it will run on your pull request commits.

Jake:

And if the text changes that need to be made, it will auto commit those changes to a new commit on that pull request. Mhmm. Cool. That works great. However, the action that is being used to commit those changes to the pull request has a known thing on the readme where it says, if you use this action to make a commit, commits created by GitHub actions will not invoke a new workflow, a new GitHub workflow.

Jake:

And the reason why is because it would be possible for you to accidentally create a loop where you are committing and then making a change and then running a new workflow, and then it is committing and making a change and running a new work and you get into this infinite loop and you eat up all your GitHub minutes in a matter of a day. Right? And so it does not allow it to kick off a new workflow on purpose. However, the way around that is to create a personal access token and then store that in a your repository as a secret an action secret. And then you reference that secret when you are doing the checkout action, the checkout step at the very top of your flow.

Jake:

You have to say token and then you have to use the secrets dot personal access token. And then if you do that, when it does the commit, it will allow the commit to invoke a new workflow. Okay. So that was the first discovery. So that was interesting.

Jake:

And, then I was like, well, it's kind of annoying to do that anyway, honestly. I don't really like that. It it happens on a very regular basis where you push code and then there's a new commit upstream, and you don't realize it. And so you make a bunch of changes on your local, and you go to push it again, and you have to rebase. Happens all the time.

Jake:

All the time. And not just on this project, a lot of projects where we're using style CI and things like that. So the the auto commit thing up on the the master or sorry, up on your pull request that just auto commits it, it just is really annoying, honestly. So what's the solution to this? Well, you can do like a pre commit hook, like a git hook.

Jake:

Right? But those are always a bit unreliable because how do you sync those across your team. Right? You can't like you you can't do like dot git slash hooks. You can't commit that into your repository.

Jake:

So what's the what's the guy to do? Couple options. You could use Husky, which is a node dependent, package that will allow you to sort of sync those Git hooks across your teams, by committing it to the repository. Or you can use Whiskey, which is Lynn Woodward's implementation of it using PHP. So you don't have to have a node dependency for a strictly PHP project, although that's almost not ever going to be a thing anymore, especially if you're using Laravel.

Jake:

You're always gonna have some sort of node dependencies, but, Whiskey works really cool. So it creates a Whiskey dot JSON file, where you can define all the different, you know, Git, events, I think is what they'd be called. Right?

Michael:

Mhmm.

Jake:

And then you can specify particular scripts that should run when, one of those things happens. Okay. So so far we've got figured out how to GitPine auto committing. Sort of said, don't really like that, but how would I get around that? Okay.

Jake:

Well, let's run some stuff locally. You know, let's run let's run pint locally. When, when somebody does a pre it does a pre commit hook. Right? It'll do it'll do pint.

Jake:

Okay. So what we're gonna do is we're gonna continue to leave that, styles that that CI action in there, but now instead of it committing anything, it's just going to fail. So instead of using PHP sorry. Instead of using pint repair or whatever it is, we're just gonna use pint test. And pint test will just return a non zero error in the case that it doesn't work.

Jake:

And so, it's up to the developer then to fix that problem. And so yeah, that's that's how it works. Now what I will say is there's there's 2 things. There's 2 ways that you can run there's a lot of different ways you can run Python. One of them will fix the error, but it will return a 0 from the action.

Jake:

So it just shows you, like, a green thumbs up. Everything worked, and we changed made these changes. The only issue with that is if you do that as a pre commit hook, you make your you know, so, like, I'm getting ready to make a commit and push this. Blah blah blah blah. Here's my changes.

Jake:

Git add all git commit. It runs its pre commit hook and changes 2 files. And then I guess say git push. Right? Because I don't realize that there's 2 files out there that it just changed that I need to also commit.

Michael:

Yeah.

Jake:

Right? Yeah. So if I do that, I get push it and what happens? Well, it fails in production again. Dang it all.

Jake:

That's not what I wanted. Like, so what I'm doing now is instead of having the pre commit hook be like, hey, just repair it and return it with a 0, I'm gonna do the non zero based thing. So if there is a change, it won't actually commit. It'll wait. It'll say, nope.

Jake:

You gotta add these 2, and then you can commit. So it's a little more obvious that there was files that changed, like failed. You know what I mean? Yeah. So you have to add them and then, and then you can commit and push them.

Jake:

So that's it. But what I will say is Whiskey is pretty sweet. So because, because you install it with Composer and because any of your developers when they merge in the main branch are gonna have to run composer install, you have the, composer stuff that after you have a, you know, update or you have a after an install, you just run whiskey update. And when you run whiskey update, it runs the whiskey stuff and then uses that whiskey dot JSON to update their git hooks. So anybody who's in who installs automatically gets those things updated on their git hooks, and so it's easy to manage those things across the team.

Jake:

So it works really well, and, we're gonna try it out. We'll see how it goes Yeah. And I will report back if we have any issues, but that's been that's been cool. I was, that was really kind of a fun little side quest today. Got that all figured out.

Jake:

Mhmm.

Michael:

Yeah. Like, I mean, we we would just fail CI, like, the whole whole thing if there is, static analysis failures or if there is PINT failures. And and then it's up to the developer to, you know, run that stuff. I, in theory, like the idea of a pre commit thing, but I commit a lot. And I it would be agitating to to have Pint run on every commit.

Michael:

And and I also like the idea of running tests because we often will forget to run tests or we will change some code here and it will affect something over there unrelated in some unexpected way. And so the only time that you will see that is when it fails in CI.

Jake:

Yeah.

Michael:

But it in CI, it takes, you know, 10 minutes, 12 minutes for the test to run. Locally, in parallel, it still takes 5 minutes. So you can't really have a pre commit hook that is running tests in this code base every time you commit. Because Yeah. It's it's just there are trade offs to be made at any and every junction of of, you know, what you're willing to to do.

Michael:

And, like, if I'm changing some significant stuff, I will, you know, make all of those changes and then run the full test suite and then, you know, just go get a drink of water, whatever else, for for 5 minutes and come back and and see how it's all gone. But, yeah, it's it's it's funny how many times you get someone open a pull request, say this is good for review while CI is still running. And then by the time you get to looking at it, you're like, is it is it good for review? Did you run the test that you wrote? Because there is a failure here that is part of the code that you have just introduced.

Jake:

Yeah. So I have 3 other trade offs that we actually made that that helped with some of those. So the first one is conditional job running. So we have a conditional at the very top of our job that says, like, if this PR is in draft status still, do not run this job. Right?

Jake:

So we do that. That helps. So, like, we're not actually running our CI stuff on every single commit and wasting all those minutes. It's, like, only when they say it's ready to go are we running that. And so that saves, you know, they'll probably have 20 commits before they actually end up hitting any of those.

Jake:

So that's one. The second thing is on the pre commit hook. We are running pint, only on the dirty files. So you do dash dash dirty, and that does save a lot of time because it doesn't run it across your entire code base. It just says you have 3 files that changed and it's lightning fast, super, super fast.

Jake:

And so, that's helpful. And then the last thing that we do is in the do in the case you do have a lot of commits that you're kind of pushing and, you're maybe you're in a status where, like, you're not in a draft status anymore. And and, you know, you have a a test that's or, you know, one of your CI things that's failing. So this happened to me today. 1 of my CI things failed.

Jake:

The one that returned the fastest failed, Pint, and then I pushed up another commit. Well, I noticed the old jobs were still running. The jobs for the previous commit were still running even though I had a new commit on after that. And so there was one other thing I discovered today. It was on GitHub actions, you have a thing called concurrency.

Jake:

And so you can define like a workflow key that will say if there's any other workflow keys that look like this, then you can cancel. You can cancel any previous workflows. And so, what that does is it it turns a little like, next to your commit, you'll have either a checkbox or a yellow if it's currently running or you'll have an x if they were canceled. And so if you make a new commit while the other ones are running, it will cancel out those previous workflows and, that saves you your GitHub minutes and, stops you from running multiple tests, you know, chewing up your, your concurrency limits as well, because you can only run so many types at the same time, you know? So you, you can hit that pretty quick if you have a bunch of developers working on a bunch of different things across your organization.

Michael:

That was a good that was

Jake:

a good deep dive today. I should write something up about that. There's a lot of stuff I learned today. I should write that up. Yeah.

Jake:

Make a video. Something.

Michael:

Do something. Put some put some content into the world.

Jake:

Absolutely. Abso freaking lutely. Alright, dude. That's all I got today.

Michael:

Excellent. Well, we should you're off to Laracon, what, Sunday?

Jake:

You're in Monday? Indeed. Yeah. So I'm getting in Monday. I'm leaving Monday morning, bright and early.

Jake:

I'll get down there about 9 o'clock in the morning. Mhmm. And then, I'll be there Monday, Tuesday, Wednesday, and then heading out Thursday afternoon. So should get a little bit of pre Laracon time, a little bit of post Laracon time, hoping to get to hang out with the homies a bit. It should be should be fun.

Jake:

And, I need to get one of those, like, cutouts of, like, your head. You know what I mean? How they put, like, the end you know, at the games, you know, like, the basketball games and stuff

Michael:

like that. In the crowd?

Jake:

Yep. Exactly. I just need to get a cutout of your head on one of those. Just take it with me. Be like, Michael's here in spirit.

Michael:

I'll send you a photo. You can do it do it.

Jake:

Dude, that would be hilarious. I literally should. That would be awesome. It'd be so funny. People would lose their minds.

Michael:

Hang on. Here we go.

Jake:

You're gonna send it to me? Nice. I love it. Good good idea, though. Right?

Jake:

I mean, come on. We should do that. I mean, I could flat pack it. Just put it in the back, but, you know, put it in the suitcase. No big deal.

Jake:

I'm trying to get pictures with you I can get pictures with you and me and and other people. Like, the whole cash money co work or whatever, I could get, like, a picture with all of us. That'd be great. That would be so funny.

Michael:

That would be that would be amusing.

Jake:

Yes.

Michael:

I wanna see photos from from Laragon with just

Jake:

Yeah. With Michael.

Michael:

A dumb head of mine.

Jake:

Eric, you mean Eric. I mean, Eric Barnes, that'd be great. The lyric at the lower level.

Michael:

I'm sure Yaz will will take some photos for us.

Jake:

Yeah. That'll be fun. So he's gonna be there this year again, He wasn't there last year.

Michael:

He's coming. I don't

Jake:

think so.

Michael:

Yeah. He's he's coming. He's taking photos as as far as I as far as I know. So

Jake:

Yeah. Beau Kondo was there last year.

Michael:

Running around? Yeah.

Jake:

That'd be good.

Michael:

Yeah. Yeah.

Jake:

That will be good.

Michael:

That's good value. Well, enjoy. Looking like it's going to be a very big event, you know, not just the number of people, but also the the hype around everything that is gonna be announced and released and

Jake:

and competitions

Michael:

and and the basketball game, you know, I'll probably catch

Jake:

Okay. So tell me about this basketball game, because I've heard things. I don't know what is going on with the basketball game. So if there's a basketball game going on, I'm taking my shoes.

Michael:

So I I think you've you've missed you've missed the I think I think you've missed the Yeah. Right. The trial.

Jake:

Like, somebody's not gonna show up and, like, not need a sub or something. I guarantee it.

Michael:

Alright. So Century is, like, running this thing now. It's like this this big thing. It is the terminal terminal coffee lads said, you know, we we should have a open source basketball game. And so, Adam I don't I don't know his last name, but Adam, who's, like, runs stat or created statmuse and and things like that.

Michael:

Like, he does a lot of content these days. He he used to play, like, varsity hoops. So there's, like, some serious serious, chops in in this game. It's not just, I don't know what they're playing for, but it but it's gonna be on at, like, 4:30 AM my time. So hopefully, I can stop talking.

Jake:

It's like it's like a so so you're saying it's not like just a bunch of guys playing pickup basketball. This is, like, serious people playing basketball.

Michael:

Serious people. It's like, there's tickets for it. Wes Bos and, Scott's team What the heck?

Jake:

Where is this at? Where am I have I been missing this on Twitter? Yeah. Yeah. Yeah.

Jake:

Yeah. Or is this like Hang on.

Michael:

We'll include a link in the show notes. Twitter, Century, alexis. Twitter.com/century. X.com/century. No.

Michael:

Century IO, maybe? What are they? No? Oh, my god. I might be able to find it now.

Michael:

Here you go. Sentry. It's they've got, like, this branding for all of it. It's presented by Sentry. It's called Put

Jake:

me in Telegram.

Michael:

Star 2024. I'll send you this link. But, yeah. Wes and

Jake:

Sorry. People who are watching the livestream, my my screen is, like, jumping all over the place because my keyboard is on my, you know, monitor and it's going wild.

Michael:

So, yeah. There is. Where is it at? They're hosting this, like, on a call. It's gonna be refer like, it's gonna be refereeing.

Jake:

Oh, okay. So they challenged Laravel PHP, like the actual well, is that the community or the actual team?

Michael:

I I don't I don't know who the team is, to be honest. I haven't I don't like, there's been talk about different people saying they're involved, but I I don't think they've put the actual lineup in. But they're like, they've got a court. It's a community basketball event, so there's gonna be, like, a 3 point shootout. There's an inflatable dunk competition.

Michael:

They have an open court. The the they're streaming it. Like, there's there's a whole whole thing. We'll put the link to all of this stuff in the in the show notes. Yeah.

Michael:

I'm I'm sad. It's I I planted the seed with with Ray. I'm like, next year, this would be a business expense for me to go to Laracon US.

Jake:

Mhmm.

Michael:

I should definitely go to learn how to run a conference before I run any more conferences kind of things. But but the Liv will have just started school around, you know, Laracon time, July, August next year. So may not may not be practical, but, I'm hoping that who knows what will happen next year? Like, it's gonna be a completely different thing. But, yeah.

Michael:

It's just crazy. There's all of this

Jake:

stuff going on. Because there's not a lot of, like, advertisement around this. Like, it got a 151 likes and 45 retweets, but there's only 13 replies and there's

Michael:

Hey. But that's just Twitter being Twitter these days. Like, the algorithm algorithm's busted. It doesn't show anything to anyone. You miss things all the time.

Michael:

So anyway, I'm on the I'm on the invite list. I'm on

Jake:

the invite list for for it. So

Michael:

there will be a link in the show notes. You can check it out.

Jake:

It says there's 75 people going. Okay. Well, should be fun. Should be a freaking great time. So I'm putting it on my calendar here.

Michael:

Hopefully, no one gets injured. Everyone would definitely warm up and and have a great time and, you know, you know the deal.

Jake:

You know, honestly, dude, I you know, I so I was actually thinking about this. I was, like because I had heard, Daniel and Caleb talking about this on No Plans to Merge. And I was like, is there really a basketball game going on? Like, is this a thing? Like, I would actually love to play.

Jake:

And then I remembered, like, I was playing on Sunday night and, like, this last, like, what, 2 days ago and, like, got slightly injured. And also, I have a very difficult time turning off my competitive, like, bone. And I and so, like, I'm afraid people would be like, dude's a douchebag. Like, can't, like like you know what I mean? Like, you'd hate to, like, body somebody under the hoop and, like, hurt somebody and then, like, you're known as the guy.

Jake:

You know what I mean? So I was like, man.

Michael:

And it'll be strange. Like, it'll be seen. Everyone will know.

Jake:

Yeah. Probably better than the top of the play.

Michael:

I'm not play anymore.

Jake:

Yeah. I I don't it's probably not a good idea anyway. So but you know how it is. It's the FOMO. You know the FOMO.

Michael:

You know

Jake:

how it is. It's like if there's anything fun going on, it's like you wanna be I am. Believe me, dude. I know the FOMO.

Michael:

Be a FOMO. I started my own conference. Okay? I know Oh my gosh. But I can't play.

Michael:

And and when I like, I went in and I had the scans done, I went and saw the surgeon, and he's like, look. Do whatever you want. If you don't pull up after it, maybe don't do that again. I will at some point have to have surgery. It's just like, will it be in 3 months or will it be in 10 years kind of thing.

Michael:

So stopping basketball, unfortunately. And I told a friend of mine this, he goes, you know that there's, like, walking basketball in here? No.

Jake:

No. Is it for real?

Michael:

It's walking basketball. And I'm, like, no. Absolutely not. Like, I cannot. If you're not gonna play to the, like, the full extent of your ability, then then, like Yeah.

Jake:

If you have to change the rules to play, just don't. Just don't play.

Michael:

Yeah. Yeah. Nah. None of it. I mean, none of It's

Jake:

like that Netball. Have you seen that Netball? Not Basketball, Netball. Have you seen that?

Michael:

Net yeah. We've got Netball. Netball is is I don't

Jake:

understand the game.

Michael:

No. It's a it's a much higher skilled, sometimes more brutal sport than than what basketball is.

Jake:

Really?

Michael:

Now our yeah. Our state team actually won the championship this year, the in the local, like, Nepal like, the Australian Nepal competition. So, yeah. Nepal is is apparently not very popular over there. If you've you're saying it's like you've just discovered it, but it's like it's a very competitive sport.

Michael:

And Australia and New Zealand are 2 of the top teams in the world. So

Jake:

Yeah. No. I think everybody sees it as a joke over here. At least, I've that's sort of how it's been presented. It's just like, oh, yeah.

Jake:

It's like No. It's basketball, out of backboard, and absolute, like, pansy version of basketball. Apparently not. Not much.

Michael:

Apparently not.

Jake:

I just need to watch some more videos.

Michael:

Yeah. There's no there's no safety. There's no backboard. Like, you miss, you miss. That's it.

Jake:

Yeah. Yeah. Gotcha. Okay. I'll have to check that out.

Michael:

We gotta wrap this up. This is

Jake:

We do.

Michael:

This has gone far too long.

Jake:

What episode are we on? 161. 161. Hey, everybody. Thanks for hanging out with us.

Jake:

Northmeet south dot audio slash 161. Find show notes there. Hit us up on Twitter at jacobennett@michaeldurinda@northsouthaudio. Rate us up and put your podcast of choice. 5 stars would be amazing.

Jake:

And if you happen to see me at Laracon US, please say hi, and you can sign my Michael Dorinda face poster board. That'll be great. And then I'll send it to you. Fun. Good times.

Jake:

Alright, everybody. We will see you in 2 weeks. Take it easy. Bye.

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.
Remote pairing around rounding errors with a pint
Broadcast by