Episode Transcript
1
00:00:00,300 --> 00:00:03,580
-Hey. I'm Michael Dyrynda.
-And I'm Jake Bennett.
2
00:00:03,580 --> 00:00:09,200
And welcome to episode 183 of the North
Meet South Web Podcast.
3
00:00:10,320 --> 00:00:16,720
Hello, friends. It is once again that time
of the week. It is Monday
4
00:00:16,720 --> 00:00:23,420
night, and, uh, it's dark out. And it's
been dark for, like, the last five
5
00:00:23,480 --> 00:00:27,140
hours. I'm not digging this thing. And the
thing is, I know it's gonna get even
6
00:00:27,140 --> 00:00:28,400
worse because
7
00:00:29,040 --> 00:00:33,620
shortly they're gonna change the time to
be an hour... It's gonna start getting
8
00:00:33,620 --> 00:00:35,600
-dark at, like, 4:00 instead of 5:00.
-Mm-hmm.
9
00:00:35,600 --> 00:00:40,720
Oh, I just hate this time of year. No fun,
dude. No fun.
10
00:00:40,720 --> 00:00:41,860
-Are you-
-And y-
11
00:00:41,860 --> 00:00:44,480
Are you getting rid of daylight savings?
Is that what's happening?
12
00:00:44,480 --> 00:00:45,430
-Uh, you know what, man?
-Or is that still-
13
00:00:45,430 --> 00:00:48,150
I feel like they've been put... I feel
like they've been teasing us with this for
14
00:00:48,150 --> 00:00:49,500
-forever.
-Right. Yeah, yeah.
15
00:00:49,500 --> 00:00:52,720
I really wish they would, uh, but I don't
know if they are. I don't know. I feel
16
00:00:52,720 --> 00:00:56,040
like last year was like, "This is the last
year they're gonna do it." And then it
17
00:00:56,040 --> 00:00:59,930
was like, "Ah, psych," or something. I
don't know. We'll find out.
18
00:00:59,930 --> 00:01:01,260
-Yeah, okay.
-We'll find out soon enough.
19
00:01:01,260 --> 00:01:02,990
-Find out when it happens
-But I don't know.
20
00:01:02,990 --> 00:01:07,200
So I guess we... Not this weekend, next
weekend, daylight saving starts here. So
21
00:01:07,200 --> 00:01:10,080
we're, you know, the day is already
getting longer. It's bright when you wake
22
00:01:10,080 --> 00:01:10,240
-up.
-Yup, yup.
23
00:01:10,240 --> 00:01:13,210
It's bright longer into the evening. So
it's
24
00:01:13,900 --> 00:01:17,640
good for us because, you know, obviously
it means you can get up a bit earlier and
25
00:01:17,640 --> 00:01:18,580
-there is some sunlight.
-Yeah.
26
00:01:18,580 --> 00:01:22,140
And you finish work at the end of the day,
and there is still sunlight, so.
27
00:01:22,140 --> 00:01:24,560
-Absolutely. Great.
-But it has been, has been raining, which
28
00:01:24,560 --> 00:01:29,460
is, has made it difficult. Last episode we
talked about my adventures with, uh-
29
00:01:29,460 --> 00:01:32,260
-Hay fever
-... LawnHub. And well, hay fever, yes, but
30
00:01:32,260 --> 00:01:32,880
-LawnHub.
-Mm-hmm.
31
00:01:32,880 --> 00:01:37,640
And I had to, had to go out and spray the
weeds. And it says you're not supposed to
32
00:01:38,620 --> 00:01:42,860
do that if there's going to be rain within
four hours. And when-
33
00:01:42,860 --> 00:01:44,480
-Ah
-... I'm planning this ten days in advance,
34
00:01:44,480 --> 00:01:46,390
it's very hard to tell if there's going
to be rain.
35
00:01:46,390 --> 00:01:48,120
-It is. Yes.
-Because even if they can predict ten days
36
00:01:48,120 --> 00:01:52,020
-in advance, it's never correct.
-Not n- Yeah, exactly. Exactly.
37
00:01:52,020 --> 00:01:55,200
So, you know, I, I got up on that day, and
I look outside, and I'm like, "It doesn't
38
00:01:55,200 --> 00:01:58,880
look like it's gonna rain." And then I
went for a, a run in the morning, or I
39
00:01:58,880 --> 00:02:03,160
went for a walk in the morning, and, and I
got rained on. And I thought, "Okay,
40
00:02:03,160 --> 00:02:09,008
well, this has not bode well." And then I,
I waited a bit and there was no rain. And
41
00:02:09,008 --> 00:02:12,920
I, I checked the, the forecast, and it
said there's no rain due until, you know,
42
00:02:12,920 --> 00:02:15,880
three o'clock in the afternoon. This is
10:00 in the morning. I'm like, "Okay, I'm
43
00:02:15,880 --> 00:02:20,960
gonna go out, and I'll spray the weeds
now." And I got almost finished, and it
44
00:02:20,960 --> 00:02:22,880
-started raining.
-Ah.
45
00:02:22,880 --> 00:02:24,600
-You know, 30 minutes later, I'm like-
-Oh my gosh. Pointless.
46
00:02:24,600 --> 00:02:26,020
-Come on.
-I just wasted all that stuff.
47
00:02:26,020 --> 00:02:27,320
-Come on.
-Yeah.
48
00:02:27,320 --> 00:02:30,740
But, uh, it, it seems to have worked
though, 'cause I went out the next day and
49
00:02:30,740 --> 00:02:32,609
all of the, the weeds that I had sprayed
had started-
50
00:02:32,609 --> 00:02:33,180
Yeah, but it'll still be at least, like,
partially effective
51
00:02:33,180 --> 00:02:36,360
-... drooping and stuff, so.
-Yeah. Yeah, it'll be fine. It'll be fine.
52
00:02:36,360 --> 00:02:39,980
So yeah, the next one is in, in 14 days
when I have to go out and spray the actual
53
00:02:39,980 --> 00:02:43,400
fertilizer on the lawn, will be
interesting. So I'm gonna, I'm gonna see
54
00:02:43,400 --> 00:02:46,840
if I can go and hire a dethatcher or a
scarifier-
55
00:02:46,840 --> 00:02:47,780
-Oh, yeah
-... whatever you call it-
56
00:02:47,780 --> 00:02:50,360
-Yeah, sure. Mm-hmm
-... to go and, like, pull up all of the,
57
00:02:50,360 --> 00:02:53,630
the deadness from the surface of the, of
the-
58
00:02:53,630 --> 00:02:55,300
-Yep
-... lawn before I then go and put down the
59
00:02:55,300 --> 00:02:57,880
fertilizer. And, and hopefully that will
help to rejuvenate it. So-
60
00:02:57,880 --> 00:03:01,180
Are you gonna, are you gonna aerate the
soil too? You gonna pile out, pull out the
61
00:03:01,180 --> 00:03:02,290
-plugs and all that stuff?
-Mm-mm. No, I'm probably-
62
00:03:02,290 --> 00:03:04,380
Dude, you're gonna become one of those
lawn guys?
63
00:03:04,380 --> 00:03:08,420
No, I'm probably not gonna go that far.
The scarifier I would do because it's,
64
00:03:08,420 --> 00:03:11,300
like, you know, a machine that you can
hire that goes through and does it.
65
00:03:11,300 --> 00:03:13,130
-Yep, yep.
-But anything that involves too much manual
66
00:03:13,130 --> 00:03:15,359
labor is something that I'm not that
interested in, so.
67
00:03:15,360 --> 00:03:18,160
-Mm-hmm.
-I have... Like, if, as long as I fertilize
68
00:03:18,160 --> 00:03:22,020
the lawn, it tends to come up okay. It's
when it starts to get cold and wet, and I
69
00:03:22,020 --> 00:03:24,1000
go, "I'm not gonna go out there and mow
the lawn," 'cause it just turns to mush,
70
00:03:25,000 --> 00:03:26,800
-right?
-Yeah. Yeah, absolutely. Uh-huh.
71
00:03:26,800 --> 00:03:30,320
And so, you do that once, and then before
you know it, the weeds grow, you know-
72
00:03:30,320 --> 00:03:31,680
-Yep, yep, yep
-... as high as your knees. And then you go
73
00:03:31,680 --> 00:03:34,640
and, and then you've gotta go and mow it,
like, four times just to get it down to
74
00:03:34,640 --> 00:03:39,580
level. And by that point, it's too late,
and it's just turned into weeds. So
75
00:03:40,580 --> 00:03:42,400
-I'm hoping it should be okay.
-Hey, speaking of Scarify,
76
00:03:42,700 --> 00:03:45,700
speaking of Scarify, Halloween is around
the corner.
77
00:03:45,700 --> 00:03:45,940
Yeah.
78
00:03:46,620 --> 00:03:48,120
-We're transitioning-
-Do you guys do Hallow-
79
00:03:48,120 --> 00:03:49,810
-No
-Do you guys do Halloween? Do you guys do
80
00:03:49,810 --> 00:03:51,880
-Halloween?
-No, although we've been invited to a, a
81
00:03:51,880 --> 00:03:55,420
-Halloween birthday party, which I'm-
-Oh, that sounds fun.
82
00:03:55,420 --> 00:03:55,960
Yeah. So
83
00:03:56,600 --> 00:04:00,840
for, for, uh... How old is he? Uh, uh, uh-
84
00:04:00,840 --> 00:04:02,120
-Nine.
-I can't remember if this is the older
85
00:04:02,120 --> 00:04:04,380
-child or the younger child.
-Eli's hanging out with the older kids
86
00:04:04,380 --> 00:04:05,700
these days. He's moving on up.
87
00:04:06,380 --> 00:04:10,280
Yeah. Yeah, he certainly is. Yeah. I am...
It occurred to me that we were, we... One
88
00:04:10,280 --> 00:04:14,480
of the kids from school that lives, like,
two doors down, he's in the, the year
89
00:04:14,480 --> 00:04:16,469
above Eli. And, um,
90
00:04:17,240 --> 00:04:21,380
we went around... With, with them, we went
to the park. We had, like, a kick of the,
91
00:04:21,380 --> 00:04:24,240
the soccer ball, we played a bit of
basketball, we pushed some kids on the
92
00:04:24,240 --> 00:04:27,820
swings. It was, it was a good bit of fun.
But one of the other kids was there, plays
93
00:04:27,820 --> 00:04:32,180
in Eli's soccer team. And I was trying to
put two and two together, like, how, how
94
00:04:32,180 --> 00:04:36,610
is this child friends with the older kid
when he plays in Eli's soccer team?
95
00:04:36,610 --> 00:04:38,180
-Yeah, sure.
-And it took me a while to realize that he
96
00:04:38,180 --> 00:04:39,340
is actually an older kid
97
00:04:39,980 --> 00:04:40,680
-playing-
-Ah, okay
98
00:04:40,680 --> 00:04:45,480
... down a grade in soccer. So he is in,
in the older kids' year level, so.
99
00:04:45,480 --> 00:04:46,350
-That's fun.
-But, uh-
100
00:04:46,350 --> 00:04:47,940
-Yeah.
-You know, they played, they played
101
00:04:47,940 --> 00:04:51,800
together for two terms before I realized
this.
102
00:04:51,800 --> 00:04:52,500
-That's fun.
-So-
103
00:04:52,500 --> 00:04:55,360
Yeah, no. It's good, probably good for Eli
to play up with, like, a little bit older
104
00:04:55,360 --> 00:04:57,430
-kids and stuff.
-Mm-hmm.
105
00:04:57,430 --> 00:04:59,780
And yeah, I'm sure he gets... You know,
it's like you play to the level of your
106
00:04:59,780 --> 00:05:01,790
competition or of your teammates, I
suppose.
107
00:05:01,790 --> 00:05:03,240
-It's, uh, yeah.
-And so you probably get better as you
108
00:05:03,240 --> 00:05:07,060
play. Yeah. So we, um... Harrison had a
soccer game this last Saturday and scored
109
00:05:07,060 --> 00:05:11,070
two goals. He was practicing his hat trick
dance if he got three goals.
110
00:05:11,070 --> 00:05:12,700
-Ah, yes. If he gets three, yeah.
-And so he, yeah, he had it all planned
111
00:05:12,700 --> 00:05:17,640
out. Oh, he was... He wanted it so bad. He
had a couple, like... He got two goals
112
00:05:17,640 --> 00:05:19,200
-and then he-
-Mm-hmm
113
00:05:19,200 --> 00:05:21,1000
... kicked a third. It was high, it had a
lot of, like, spin on it. Like, hit right
114
00:05:22,000 --> 00:05:23,640
in front of the goal and bounced
backwards.
115
00:05:23,640 --> 00:05:25,980
-Yeah.
-Like, uh, did not go into the goal. Yeah.
116
00:05:25,980 --> 00:05:27,180
-Then he had a couple of those. Anyway-
-Good.
117
00:05:27,180 --> 00:05:30,270
It was fun. He almost made it. It was, it
was the last game of the season, so it was
118
00:05:30,270 --> 00:05:31,130
-like his last chance-
-Mm-hmm
119
00:05:31,130 --> 00:05:37,160
... to get it. But no, it was, it was all
fun. All fun. Um, yeah. Okay. I've... You
120
00:05:37,160 --> 00:05:39,320
know, when we started this, this show
we're like, "What should we talk about?"
121
00:05:39,320 --> 00:05:44,620
Well, I've got a couple things. First of
all, um, have you ever seen these 1Up
122
00:05:44,620 --> 00:05:50,300
Arcade boxes? So, like, they're, like, not
a full arcade cabinet, but, like, it's,
123
00:05:50,300 --> 00:05:55,360
th- they're like mini arcade cabinets, if
you will. So, like, 1Up Arcade, Street
124
00:05:55,360 --> 00:05:58,780
Fighter, they've got whatever. So David
Hemphill and I are big into Street
125
00:05:58,780 --> 00:06:01,840
Fighter. We played, uh, Street Fighter
when we were at Lari: Con this year. That
126
00:06:01,840 --> 00:06:03,560
-was fun. Um-
-Mm-hmm.
127
00:06:03,560 --> 00:06:07,099
But I always wanted a little Street
Fighter box. And so I found one on
128
00:06:07,100 --> 00:06:09,599
Facebook Marketplace, this guy was selling
it for, like, 100 bucks. I'm like, "Why
129
00:06:09,600 --> 00:06:12,560
is he selling it for ch- so cheap?" Well,
turns out he was trying to convert it to,
130
00:06:12,560 --> 00:06:17,450
like, a RetroPie.Which is like a Raspberry
Pi with, like, the software...
131
00:06:17,450 --> 00:06:18,460
-Mm-hmm
-... installed on it that allows you to
132
00:06:18,460 --> 00:06:21,700
download ROMs and then use all the stuff.
So he had done all the conversion on it.
133
00:06:21,700 --> 00:06:25,659
Like, where you have to swap out all the
buttons, you have to buy this, like, LCD,
134
00:06:25,659 --> 00:06:29,640
um, converter that will hook it up to the
port. He bought all the parts, had done
135
00:06:29,640 --> 00:06:33,740
all the things, and could not get the last
step. Could not get it to work, just
136
00:06:33,740 --> 00:06:34,650
didn't have the chops,
137
00:06:35,440 --> 00:06:38,740
and so... Or so I thought. And so I was
like, "Well..."
138
00:06:38,740 --> 00:06:40,320
-Mm-hmm.
-"...I'll figure this out, no big deal."
139
00:06:40,320 --> 00:06:43,969
Well, no, it's been sitting in my basement
for two months and I have not been able
140
00:06:43,969 --> 00:06:47,880
to get it to work. And then I rewatched a
couple tutorials and realized there was a
141
00:06:47,880 --> 00:06:50,130
ribbon cable that was flipped around the
opposite way.
142
00:06:50,130 --> 00:06:51,500
-Wow.
-Turned it around, plugged it in. That was
143
00:06:51,500 --> 00:06:55,780
it, dude, I was, I was off and running.
And so that's been so fun, been playing
144
00:06:55,780 --> 00:06:57,780
-with that, like-
-It's wild they did something so simple.
145
00:06:57,780 --> 00:06:59,840
-Oh, seriously. I mean, it's just-
-But yeah, I suppose if you, if you flip
146
00:06:59,840 --> 00:07:01,610
-the pins, then it's, uh...
-Yes.
147
00:07:01,610 --> 00:07:05,260
But, uh, you know, this is why, uh, PC
cases have always had the little notch so
148
00:07:05,260 --> 00:07:07,400
that you could never get it the other way
around.
149
00:07:07,400 --> 00:07:08,120
-Yes. Yep, not this-
-Because you don't wanna s-
150
00:07:08,120 --> 00:07:10,080
-... not this one.
-You don't wanna r- yeah, you don't wanna
151
00:07:10,080 --> 00:07:13,169
-reverse, uh-
-Yeah, polarity order, yeah
152
00:07:13,169 --> 00:07:14,120
... electricity going to the motherboard,
huh?
153
00:07:14,120 --> 00:07:18,140
Exactly. And so anyway, dude, that's been
so fun, and it's a really fun little,
154
00:07:18,140 --> 00:07:20,010
like, hobby project. Now, the cool thing
is, like-
155
00:07:20,010 --> 00:07:21,520
-Mm-hmm
-... I didn't have to pay $400 for it. I
156
00:07:21,520 --> 00:07:24,070
paid, like, 100 bucks for it, and then
half was already bought.
157
00:07:24,070 --> 00:07:25,919
-Yeah, it's pretty good.
-So yeah, it's, it's been a little, it's
158
00:07:25,919 --> 00:07:28,539
been a lot of fun just playing around with
that. Me and Harrison played some Street
159
00:07:28,539 --> 00:07:32,099
Fighter today, and we both like that game,
and so... Yeah, that's been pretty cool,
160
00:07:32,099 --> 00:07:35,450
so I would suggest that as a fun little
hobby to anybody if they're interested.
161
00:07:35,450 --> 00:07:38,799
There's, uh, there's some cool little mods
you can do out there with it and it's,
162
00:07:38,799 --> 00:07:40,840
-it's pretty fun, so that's been cool.
-All right.
163
00:07:40,840 --> 00:07:43,340
-Um, yeah.
-I can, we can buy these things here, uh-
164
00:07:43,340 --> 00:07:45,440
-Nice, yeah
-... Mortal Kombat, Mortal Kombat Deluxe...
165
00:07:45,440 --> 00:07:45,510
Yes.
166
00:07:45,510 --> 00:07:48,049
Arcade machine has 14 games, Mortal Kombat
1,
167
00:07:48,659 --> 00:07:55,280
2, 3. There's some other Mortal Kombat and
a few other random games on there,
168
00:07:55,280 --> 00:07:59,159
-thousand bucks, plus delivery.
-Yeah.
169
00:07:59,159 --> 00:08:02,400
-All right, good times.
-Yeah. Yep. So this is almost... Yeah
170
00:08:02,400 --> 00:08:04,580
-Lose that before I spend money.
-The- the pri- yeah, exactly. The price was
171
00:08:04,580 --> 00:08:06,360
right. Like, it was, it was way cheap,
and I was...
172
00:08:06,360 --> 00:08:07,640
-Mm-hmm.
-"Yeah, I'll try this out." So that's been,
173
00:08:07,640 --> 00:08:08,510
-that's been kind of fun...
-Yeah
174
00:08:08,510 --> 00:08:10,860
... to just mess around with but, and
finally got it working.
175
00:08:10,860 --> 00:08:13,700
-Love it.
-Um, the other thing that I wanted to talk
176
00:08:13,700 --> 00:08:14,730
about though is
177
00:08:15,919 --> 00:08:18,520
we've talked a lot about the permissions
stuff, right?
178
00:08:18,520 --> 00:08:20,750
-Mm-hmm.
-And so I- I wanna, I wanna sorta share the
179
00:08:20,750 --> 00:08:23,600
saga with you, if I can. Um,
180
00:08:24,419 --> 00:08:27,740
so we talked originally about how we went
through all of our applications, and
181
00:08:27,740 --> 00:08:32,480
previously we only had roles, and we
replaced any place where we are checking a
182
00:08:32,480 --> 00:08:37,1000
role with a named permission. So instead
of saying has role admin or has role
183
00:08:38,000 --> 00:08:41,370
manager, we would say, "Nope, what are we
trying to do in this place? Oh, we're
184
00:08:41,370 --> 00:08:46,300
trying to edit a blog post. Okay, so we're
gonna replace that with a check to say
185
00:08:46,300 --> 00:08:47,100
permission enum
186
00:08:47,980 --> 00:08:49,930
-edit blog post." Right?
-Mm-hmm.
187
00:08:49,930 --> 00:08:51,880
-That's- that's what it was. Um-
-Yeah
188
00:08:51,960 --> 00:08:56,240
... and then we used attributes to
associate active directory group, security
189
00:08:56,240 --> 00:08:59,980
group names with those permissions, and
then in active directory we just set those
190
00:08:59,980 --> 00:09:03,079
permissions, or we set those groups,
those security groups on the particular
191
00:09:03,079 --> 00:09:05,400
users that need those things. It works
great. Works really, really well.
192
00:09:05,400 --> 00:09:06,360
-Yeah.
-It's pretty cool.
193
00:09:06,360 --> 00:09:08,160
-I think.
-We've had some other interesting solutions
194
00:09:08,160 --> 00:09:11,060
around that. Okay, that's the, that's
that side of it.
195
00:09:12,380 --> 00:09:16,540
Um, now, the question has been, where do
we do those permission checks? And all
196
00:09:16,540 --> 00:09:19,260
we're doing with those permission checks
is we're just doing gates, right? We're
197
00:09:19,260 --> 00:09:20,540
-setting up gates...
-Yeah
198
00:09:20,540 --> 00:09:24,960
... um, so that you can use Laravel's
default can. You have can middleware, you
199
00:09:24,960 --> 00:09:27,400
-have a can directive, you have...
-Mm-hmm.
200
00:09:27,400 --> 00:09:30,680
You know, this authorize that you can use
inside of the controller if your
201
00:09:30,680 --> 00:09:35,420
controllers are auth- y- you know, using
the authorizable trait. Um, you can do it
202
00:09:35,420 --> 00:09:39,110
inside of a form request, you can do it,
you know, a bunch of different places.
203
00:09:39,110 --> 00:09:41,860
-Yeah.
-Um, you can, uh,
204
00:09:41,920 --> 00:09:44,900
you know, you could just use the gate
facade. There's all sorts of ways that you
205
00:09:44,900 --> 00:09:48,880
can do this, right? And so the way that
we had previously done it, like, as our
206
00:09:48,880 --> 00:09:53,219
first step is we just replaced any of the
middleware checks, um, in our routes file
207
00:09:53,220 --> 00:09:56,040
with can middleware checks, and, uh, I
mean, totally fine.
208
00:09:57,100 --> 00:10:01,780
But that sort of broke down a little bit.
Um, we ended up having to, like, rearrange
209
00:10:01,780 --> 00:10:04,749
-how our routes files were set up, and...
-Yeah.
210
00:10:04,749 --> 00:10:09,339
... you'd end up having to, like, break
apart different pieces, um, based on-
211
00:10:09,339 --> 00:10:12,900
-Just to get the granularity.
-Exactly. And so, like, you'd have a route
212
00:10:12,900 --> 00:10:15,800
file that would belong with another one,
like, co-located with it that would have
213
00:10:15,800 --> 00:10:19,240
to be, like, further down, and then ended
up being like, there'd be a merge conflict
214
00:10:19,240 --> 00:10:22,440
and somebody, like, fixed the merge
conflict but they accidentally moved one
215
00:10:22,440 --> 00:10:23,270
-out of that group.
-Yeah, yeah.
216
00:10:23,270 --> 00:10:26,360
And so now it was without permissions
because, you know, it's just, like, in the
217
00:10:26,360 --> 00:10:28,040
-routes file, and so-
-Yeah
218
00:10:28,040 --> 00:10:30,260
... I was like, "We can't do that
anymore." Um...
219
00:10:30,260 --> 00:10:32,039
-Mm-hmm.
-We- we've gotta... It- it just did not
220
00:10:32,039 --> 00:10:36,219
feel like it was close enough to the
metal. It just felt like it was so s- sort
221
00:10:36,219 --> 00:10:38,400
-of, like, out there and removed.
-Yeah. Yeah.
222
00:10:38,400 --> 00:10:38,690
Um,
223
00:10:39,660 --> 00:10:43,180
and so, um, so first off, like, do you
identify with that at all? Like, do you
224
00:10:43,180 --> 00:10:46,480
feel that? Like, do you ever feel like if
you're doing a- a middleware check or a
225
00:10:46,480 --> 00:10:50,500
can check out at the edge there on the
routes file, does that ever make you feel
226
00:10:50,500 --> 00:10:53,800
a little bit like, "Eh, feels a little too
fragile"?
227
00:10:53,800 --> 00:10:56,980
I don't know off the top of my head
anywhere where we are doing
228
00:10:58,120 --> 00:11:00,690
an authorization check in our routes file.
229
00:11:00,690 --> 00:11:02,900
-Okay.
-Like, maybe very high level, but- but
230
00:11:02,900 --> 00:11:05,460
-nothing granular. I think all of that-
-Sure
231
00:11:05,460 --> 00:11:07,010
-... granularity...
-Like, are... yeah. Sure, like-
232
00:11:07,010 --> 00:11:10,260
... all those authorization checks will
push down into a form request or into,
233
00:11:10,260 --> 00:11:14,839
like, an action class if we wanna enforce
that behavior deep into the- the business
234
00:11:14,839 --> 00:11:16,810
rules of that behavior.
235
00:11:17,420 --> 00:11:20,520
But- but typically, it'll be in- in the
authorize method of a
236
00:11:21,880 --> 00:11:24,220
form request or inside of, like, an a-
237
00:11:25,079 --> 00:11:25,900
an action class,
238
00:11:26,540 --> 00:11:30,1000
-somewhere where we're authorizing that.
-Okay. So that l- that brought me to my
239
00:11:31,000 --> 00:11:34,700
next step, which was, okay, so if we're
not gonna do it in the middleware, we
240
00:11:34,700 --> 00:11:38,720
have, uh, we can- we can do it inside of
each controller, uh, method.
241
00:11:38,720 --> 00:11:40,460
-Mm-hmm. Mm-hmm.
-Right? So if we're using resourceful
242
00:11:40,460 --> 00:11:43,839
controllers, um, we can just do a
243
00:11:43,900 --> 00:11:46,220
-this authorize, um...
-Yeah
244
00:11:46,220 --> 00:11:48,1000
... or request authorize or whatever it
is, this authorize, and that's gonna pass
245
00:11:49,000 --> 00:11:52,200
in the user, and then you can just pass in
the permissions check, which is fine.
246
00:11:52,200 --> 00:11:54,200
That- that works great. But
247
00:11:54,819 --> 00:11:58,460
it's, like, I sort of hate having to have
those at the top of every controller
248
00:11:58,460 --> 00:12:04,780
method. It sorta sucks. And so you have
some options, right? Um, one option that
249
00:12:04,780 --> 00:12:08,560
was really interesting and attractive to
me was that if you're dealing with a
250
00:12:08,560 --> 00:12:14,339
resource, like a blog post, for example,
instead of having to put that in every
251
00:12:14,339 --> 00:12:19,808
single method...Um, this gate check, this
authorize check, in the constructor you
252
00:12:19,808 --> 00:12:25,348
could say, "This authorize resource," and
then you could point it at the policy that
253
00:12:25,348 --> 00:12:29,458
you had created, if you created a policy,
like a post policy.
254
00:12:29,458 --> 00:12:30,848
-Mm-hmm.
-And then you could do your, your gate
255
00:12:30,848 --> 00:12:36,007
checks in there. So inside of that, you
could just kind of say, you know, um,
256
00:12:36,068 --> 00:12:39,938
"Here are the different a- view any, view,
edit, update, whatever."
257
00:12:39,938 --> 00:12:41,266
-Mm-hmm.
-And you would just say, "Authorize
258
00:12:41,267 --> 00:12:45,708
resource, here's the policy," and it would
automatically apply the correct policy
259
00:12:45,708 --> 00:12:48,418
check to the proper method, which was
amazing.
260
00:12:48,418 --> 00:12:49,747
-Yeah.
-I was like, "This is great." Okay, so
261
00:12:49,747 --> 00:12:52,418
we're gonna move everything to policies
now.
262
00:12:52,418 --> 00:12:54,308
-Mm-hmm.
-Everything to policies, and then we'll do
263
00:12:54,308 --> 00:12:58,448
our, you know, our permission checks
inside of those policies so we know like,
264
00:12:58,448 --> 00:13:00,928
okay, you go to the controller, the
controller's gonna have an authorize
265
00:13:00,928 --> 00:13:03,588
resource. And then at the top you're gonna
click through that, and that's gonna get
266
00:13:03,588 --> 00:13:07,007
you to your policy. And the policy is
gonna define the, the different, you know,
267
00:13:07,007 --> 00:13:09,767
permissions that they need in order to be
able to do these things. Very well
268
00:13:09,767 --> 00:13:12,068
organized, very clean, super nice, loved
it.
269
00:13:12,068 --> 00:13:15,228
-Yeah.
-And then Laravel 12 came along.
270
00:13:16,127 --> 00:13:18,808
And Laravel 12 basically nukes all of
that.
271
00:13:18,808 --> 00:13:20,667
-Mm-hmm.
-It does not use the authorize resource
272
00:13:20,667 --> 00:13:23,828
anymore, it is not in the docs anymore,
and
273
00:13:24,428 --> 00:13:28,208
now it's back to, and all the docs
recommend using
274
00:13:28,808 --> 00:13:34,228
Gate.dodop.authorize inside of every
controller method.
275
00:13:34,228 --> 00:13:36,127
-Mm-hmm.
-And I'm just like, "I hate this.
276
00:13:36,808 --> 00:13:38,988
I really-" "...hate how it looks." And so
I know-
277
00:13:38,988 --> 00:13:41,288
-Mm-hmm
-...what you're saying is you just use a
278
00:13:41,288 --> 00:13:43,068
-form request in that case, right?
-Yeah.
279
00:13:43,068 --> 00:13:47,088
If you want to, if you want to do that
authorization check, you're just gonna
280
00:13:47,088 --> 00:13:50,808
say, "I am, I am going to do that inside
of a form request
281
00:13:51,588 --> 00:13:56,208
for every method inside of all those
controllers," right?
282
00:13:56,208 --> 00:13:57,988
-Yeah.
-Um, is that accurate? Is that how you
283
00:13:57,988 --> 00:14:02,188
-would do it?
-Yeah. And we, we also typically use a lot
284
00:14:02,188 --> 00:14:04,538
-of single action controllers because-
-Mm-hmm
285
00:14:04,538 --> 00:14:10,788
...we are not, like we're not building a
crud, cruddy app really. Um-
286
00:14:10,788 --> 00:14:12,948
-Yeah
-...we have lots of components, and
287
00:14:12,948 --> 00:14:16,637
components make requests to specific
routes.
288
00:14:16,637 --> 00:14:20,507
-Endpoints, yeah, sure.
-Endpoints that are responsible for doing
289
00:14:20,507 --> 00:14:25,988
particular things. So yeah, we, we will
typically have an action that is called,
290
00:14:25,988 --> 00:14:28,767
uh, from a controller that is, um,
291
00:14:29,708 --> 00:14:34,007
past a, a request object which is
responsible for doing the authorization.
292
00:14:34,007 --> 00:14:39,608
And whether, you know, whether it's a, a
get endpoint or an index endpoint where
293
00:14:39,608 --> 00:14:44,137
like, some things don't need to be
authorized, and so the authorize method of
294
00:14:44,137 --> 00:14:47,208
-that form request will just return true.
-Yeah, sure.
295
00:14:47,208 --> 00:14:51,108
But there will be some index methods where
we do need to do tho- those checks in
296
00:14:51,108 --> 00:14:56,108
there. And so we will do the authorization
inside of, you know, a otherwise empty
297
00:14:56,108 --> 00:15:01,828
form request. But it gives us, you know,
extra files around the place, but they are
298
00:15:01,828 --> 00:15:08,468
consistently named and consistently
located. So if we have like a, a
299
00:15:08,468 --> 00:15:13,468
user index controller, for example, then
we would also have a user index request
300
00:15:14,267 --> 00:15:17,528
that goes in, you know, the, the request
folder or whatever. But if you are using
301
00:15:17,528 --> 00:15:22,407
your fuzzy, fuzzy finder in your editor,
you're going to type, you know, user index
302
00:15:22,407 --> 00:15:25,627
and you will see the request and the
controller there, uh, next to each other.
303
00:15:25,627 --> 00:15:28,407
So it's easy enough to find 'em. And then
you'll also have the user index action
304
00:15:28,407 --> 00:15:32,228
perhaps. Um, and so all of this stuff,
because it's, it's got like a
305
00:15:32,848 --> 00:15:37,578
s- a common prefix, it all comes up when
you're searching for it. Um,
306
00:15:39,328 --> 00:15:42,588
your mileage may vary depending on whether
or not you'll, you're navigating the file
307
00:15:42,588 --> 00:15:45,887
-tree or if you're using fuzzy find. Um-
-Sure, sure
308
00:15:45,887 --> 00:15:49,507
...you know, obviously as a VIM user, my
hand's on the keyboard so, uh-
309
00:15:49,507 --> 00:15:52,028
-Yeah, yeah
-...it's, it's more common that I will find
310
00:15:52,028 --> 00:15:56,407
things that way. Um, and that also then
extends to tests, like if you've got a
311
00:15:56,407 --> 00:16:01,127
user index test, for example, um, or a
user index controller test, whatever you
312
00:16:01,127 --> 00:16:05,048
wanna call it, all of these things will
appear, you know, at the top of your
313
00:16:05,048 --> 00:16:06,588
search anyway. So
314
00:16:06,588 --> 00:16:10,208
it makes it easier from that perspective
to locate things rather than having to
315
00:16:10,208 --> 00:16:13,728
traverse the directory tree to look in
like a request folder or a controllers
316
00:16:13,728 --> 00:16:19,548
folder or wherever else. It's all just
there. Um, so yeah, more files but
317
00:16:19,548 --> 00:16:22,167
they're, they're typically very small
files,
318
00:16:22,808 --> 00:16:25,988
but it also then allows us to co-locate
that behavior where it makes the most
319
00:16:25,988 --> 00:16:27,478
-sense. You know, requests-
-Yeah
320
00:16:27,478 --> 00:16:30,948
...and authorization kind of go together.
Controllers are really
321
00:16:31,808 --> 00:16:35,968
just for delegating, you know, taking some
data, passing it to some action and
322
00:16:35,968 --> 00:16:39,528
returning some response. But they're,
they're typically, you know, no more than
323
00:16:39,528 --> 00:16:40,747
five or six lines long.
324
00:16:41,608 --> 00:16:46,247
Right. Yeah, and I think, I think for me,
I get it, like I get... I'm not
325
00:16:46,247 --> 00:16:48,137
necessarily so concerned with
326
00:16:49,088 --> 00:16:53,028
making a new form request for every single
thing, although it does sort of suck,
327
00:16:53,028 --> 00:16:56,647
honestly. Um, and I think it's just
because it's like, how many levels of
328
00:16:56,647 --> 00:16:59,848
indirection do I have to have before I
finally get down to the thing? You know
329
00:16:59,848 --> 00:17:00,578
-what I mean?
-Mm-hmm.
330
00:17:00,578 --> 00:17:03,588
'Cause it's like the reason we organized
it around policies is because we were
331
00:17:03,588 --> 00:17:06,187
like, "Okay great, we're gonna treat them
as resources." Okay, so now we have
332
00:17:06,187 --> 00:17:06,798
-policies.
-Mm-hmm.
333
00:17:06,798 --> 00:17:10,907
Wonderful. But now it's like we're sort of
saying, well, I mean maybe it's a policy
334
00:17:10,907 --> 00:17:13,708
but we're basically gonna have a form
request for every single one of them
335
00:17:13,708 --> 00:17:16,208
every, anyway, so what's the point of
having the policy?
336
00:17:16,208 --> 00:17:18,447
-Mm-hmm.
-Like, now the pol- so, so now I go
337
00:17:19,108 --> 00:17:25,088
route controller, method, form request,
authorize, policy, then permission?
338
00:17:25,088 --> 00:17:25,848
-Mm-hmm.
-I mean, holy crap.
339
00:17:25,848 --> 00:17:27,728
-Mm-hmm.
-That's like seven layers of indirection to
340
00:17:27,728 --> 00:17:28,788
-get down to the actual-
-Yeah
341
00:17:28,788 --> 00:17:32,288
...permission check. It's crazy. And so
it's like, if you're gonna do that, if
342
00:17:32,288 --> 00:17:36,348
you're going to do a form request, it
almost feels like you could do without the
343
00:17:36,348 --> 00:17:39,078
-policy, um, because-
-Mm-hmm
344
00:17:39,078 --> 00:17:42,228
...like, I don't really, I'm not using it
almost anywhere else-
345
00:17:42,228 --> 00:17:44,788
-Yeah
-...except for in the controller. And so-
346
00:17:44,788 --> 00:17:46,388
-Yeah
-...you know, if I'm going to create the
347
00:17:46,388 --> 00:17:50,348
form requests, I almost don't wanna create
the policies because-
348
00:17:50,348 --> 00:17:53,528
-Yeah
-...I don't wanna do one more layer.
349
00:17:54,467 --> 00:17:57,078
Yeah. It also depends. Like if you're very
350
00:17:57,768 --> 00:18:01,998
resource-centric as it seems to be that
you are, then, you know, the policies-
351
00:18:01,998 --> 00:18:05,788
-I mean, sometimes it's-
-...do make sense. But we, we definitely
352
00:18:05,788 --> 00:18:07,128
err on the side of
353
00:18:07,947 --> 00:18:12,548
not having resources. Like we're not
updating people and businesses and
354
00:18:12,548 --> 00:18:17,608
addresses and things like that as commonly
as we are adding a person to application
355
00:18:17,608 --> 00:18:22,388
or add address to person or, you know, all
of this kind of stuff where these actions
356
00:18:22,388 --> 00:18:26,984
kind of dictate what's happening.So, um,
and so whether or not you have access to
357
00:18:26,984 --> 00:18:33,804
do that action is kind of decoupled from
the resource itself. Whereas
358
00:18:33,804 --> 00:18:37,604
you, because you've got the policies and
that kinda stuff, you're- you're more
359
00:18:37,604 --> 00:18:39,254
leaning towards that side of things,
360
00:18:40,344 --> 00:18:45,764
so it probably makes more sense to use the
policies. Um, but I still think, you
361
00:18:45,764 --> 00:18:49,304
know, the form requests just make a- a
consistent... Yeah. Yeah, it's seven
362
00:18:49,304 --> 00:18:54,404
layers and it's more things, et cetera,
but it's always gonna be in the same
363
00:18:54,404 --> 00:18:58,624
place. You don't have to stop and think,
"Oh, hang on. This is an index method.
364
00:18:58,624 --> 00:19:01,394
Where do I authorize this now?" No, it
just goes in the form request.
365
00:19:01,394 --> 00:19:02,124
-Yeah.
-Like-
366
00:19:02,124 --> 00:19:04,934
-Mm-hmm
-... yes, extra file, yes, extra location.
367
00:19:05,544 --> 00:19:10,344
Potentially, like, if you're doing the
policy and, you know... But it, but it
368
00:19:10,344 --> 00:19:14,484
means that you can guard those things
directly as well, using the policies.
369
00:19:15,084 --> 00:19:15,324
Yeah.
370
00:19:15,324 --> 00:19:16,324
-Um, where-
-I guess that's-
371
00:19:16,324 --> 00:19:19,164
... you're not necessarily encapsulating
business logic behind
372
00:19:19,784 --> 00:19:24,524
-a request or an action or whatever else.
-Yeah. Okay, so here's the last piece with
373
00:19:24,524 --> 00:19:28,134
the form request thing. So, like, there
will be... So there are places where we do
374
00:19:28,134 --> 00:19:31,714
have more intensive sort of policy logic.
So for example-
375
00:19:31,714 --> 00:19:34,384
-Mm-hmm
-... I'll have, like, a coaching entry,
376
00:19:34,384 --> 00:19:34,544
right?
377
00:19:35,364 --> 00:19:40,464
And for that, a coaching... And, like, if
somebody... The ability to be able to view
378
00:19:40,464 --> 00:19:46,124
a coaching entry depends on if it is...
Like, if the person that's logged
379
00:19:46,124 --> 00:19:52,544
in, if their user ID is the person that
is, like... They're the coachable team
380
00:19:52,544 --> 00:19:53,404
-member ID-
-Mm-hmm
381
00:19:53,404 --> 00:19:54,464
-... or something like that, right?
-Mm-hmm.
382
00:19:54,464 --> 00:19:57,904
They're the person who's being coached. So
if it belongs to them, they can see it.
383
00:19:57,904 --> 00:20:03,144
Or if it is a person who directly manages
them. So if they're anywhere within... So
384
00:20:03,144 --> 00:20:06,843
indirectly or directly manages them. So if
they're anywhere in the tree of that
385
00:20:06,844 --> 00:20:07,254
-person's-
-Mm-hmm
386
00:20:07,254 --> 00:20:10,724
... purview, they can be seen, right?
Where does that live? That has to live
387
00:20:10,724 --> 00:20:12,904
inside the policy. That's the logical
place for it to live.
388
00:20:12,904 --> 00:20:13,764
-Mm-hmm.
-My question is,
389
00:20:14,564 --> 00:20:21,524
if I'm doing that, um, does the... So,
like, let's say the, uh, the view
390
00:20:21,524 --> 00:20:26,924
coaching entry request, right? Or is it
coaching entry view request? Which one is
391
00:20:26,924 --> 00:20:30,144
it? Coaching entry show request? Is that
what you'd call it?
392
00:20:30,144 --> 00:20:33,563
Yeah, it's show coaching entry request, I
think.
393
00:20:33,563 --> 00:20:37,504
-Okay. So verb and then model and then-
-Mm-hmm. Mm-hmm. Yeah
394
00:20:37,504 --> 00:20:38,424
-... yeah? Okay.
-Yeah.
395
00:20:38,424 --> 00:20:43,264
So show coa- so show coaching entry
request. If I do that, um-
396
00:20:43,264 --> 00:20:44,934
-Mm-hmm
-... does the show coaching entry request
397
00:20:44,934 --> 00:20:49,544
authorize the method, have access to the
ID or to the currently hydrated, eager
398
00:20:49,544 --> 00:20:55,724
loaded, um, model binding, right? Does
that make sense?
399
00:20:55,724 --> 00:20:59,163
Uh, like, yeah, for the, like, for the
relate, for the related entry.
400
00:20:59,164 --> 00:21:02,464
Right. So, like, so when you do, you know,
you have implicit route model binding,
401
00:21:02,464 --> 00:21:02,704
-right?
-Mm-hmm.
402
00:21:02,704 --> 00:21:07,603
So, like, it will, it will automatically
pull the ID. You know, it says, "Here's
403
00:21:07,604 --> 00:21:08,844
-the ID."
-Yep.
404
00:21:08,844 --> 00:21:13,864
Uh, "I'm going to go ahead and grab that
particular type hinted model out of the
405
00:21:13,864 --> 00:21:16,204
-database," or "I'm gonna 404."
-Mm-hmm.
406
00:21:16,204 --> 00:21:21,864
And then you use that in the policy to
then check against, is this current, you
407
00:21:21,864 --> 00:21:25,884
know, is this current, uh, coaching entry?
You know, you inspect it, basically, to
408
00:21:25,884 --> 00:21:29,383
determine if the person who's currently
logged in can see that thing or not.
409
00:21:29,384 --> 00:21:31,084
-Yeah.
-So my question is, does the authorize
410
00:21:31,084 --> 00:21:36,864
method have access to that particular
model? So that when I'm saying, uh, this
411
00:21:36,864 --> 00:21:43,604
arrow authorize post class, comma, or- or
just say, like, view, comma, and then I
412
00:21:43,604 --> 00:21:49,364
-pass in that particular post.
-Yeah. Well, the- the route model binding
413
00:21:49,364 --> 00:21:50,324
stuff is done
414
00:21:51,084 --> 00:21:55,724
up the stack and then passed down into the
request. So you do have access to the
415
00:21:55,724 --> 00:22:00,024
route and all of its bound parameters at
that point. Yeah.
416
00:22:00,024 --> 00:22:03,624
So, yeah, like, in the controller,
typically you have, like, the way that the
417
00:22:03,624 --> 00:22:07,913
implicit route model binding works is in
the controller you have request, you know,
418
00:22:07,913 --> 00:22:10,544
type entered request, dollar sign
request, comma-
419
00:22:10,544 --> 00:22:12,384
-Mm-hmm
-... type entered coaching entry, dollar
420
00:22:12,384 --> 00:22:13,764
-sign coaching entry.
-Mm-hmm. Yeah.
421
00:22:13,764 --> 00:22:14,324
-Right?
-Yeah, yep.
422
00:22:14,324 --> 00:22:17,524
And then in the controller, you have
access to that thing. So what I'm saying
423
00:22:17,524 --> 00:22:21,524
is I don't know how to get access to the
coaching entry, dollar sign coaching
424
00:22:21,524 --> 00:22:23,794
entry, from the authorize method, 'cause I
would need that-
425
00:22:23,794 --> 00:22:25,384
-Yeah, and-
-... in order to be able to do my policy
426
00:22:25,384 --> 00:22:25,684
check.
427
00:22:26,424 --> 00:22:31,604
Yes. La- uh, so typ- previously, you'd
have to do, like, this route and then pass
428
00:22:31,604 --> 00:22:33,564
-it the, the string name.
-Mm-hmm.
429
00:22:33,644 --> 00:22:38,644
I think in Laravel 12, they introduced the
thing so you can use an attribute to then
430
00:22:38,644 --> 00:22:44,043
bind that directly out of the route. So
you can... I think it's pound square
431
00:22:44,043 --> 00:22:48,303
bracket route, and then give it the thing,
and then you can actually inject a
432
00:22:48,304 --> 00:22:50,414
properly typed, um,
433
00:22:51,564 --> 00:22:55,704
class or instance there so that you will
get the completion and you'll get all of
434
00:22:55,704 --> 00:22:59,724
that stuff there, and Laravel will then
handle injecting that from the request
435
00:22:59,724 --> 00:23:02,984
-automatically. From- from the route-
-Because doesn't that feel like... So if
436
00:23:02,984 --> 00:23:06,303
I'm just, I- I'm- I'm discovering the
solution here with you. I'm talking it
437
00:23:06,304 --> 00:23:06,544
-through-
-Mm-hmm
438
00:23:06,544 --> 00:23:09,224
... because I'm interested in- in how it
kinda does work. To me, it feels a little
439
00:23:09,224 --> 00:23:13,344
bit gross that, like, I have it type
entered inside the controller. Like, and I
440
00:23:13,344 --> 00:23:16,604
know the name of it, I know the variable
and all that stuff, but the form request
441
00:23:16,604 --> 00:23:18,183
-does not have that.
-Mm-hmm.
442
00:23:18,184 --> 00:23:22,024
You know, it doesn't know. It doesn't have
any idea of that route model binding
443
00:23:22,024 --> 00:23:24,344
thing. It doesn't know. And so
444
00:23:25,164 --> 00:23:30,704
it's like I have to either, you know,
duplicate that inside of the form request
445
00:23:31,504 --> 00:23:35,664
or I have to somehow pass it in. I just,
like, I'm wondering, you know, what is
446
00:23:35,664 --> 00:23:39,764
Team Laravel doing for this? Like, it
seems like this is not
447
00:23:41,624 --> 00:23:44,944
how I- I would think that it would be
done. Like, it just-
448
00:23:44,944 --> 00:23:47,084
-Yeah
-... it seems too chaotic. I just, I'm
449
00:23:47,084 --> 00:23:50,864
like, "Who..." There- there's gotta be a
way. There... Either there's, A, they're
450
00:23:50,864 --> 00:23:55,084
doing it a certain way that they're not
super stoked with, um, and they're just
451
00:23:55,084 --> 00:23:59,384
sort of doing it. Or, B, they're doing it
a different way that I'm completely
452
00:23:59,384 --> 00:24:00,584
unaware of. Or,
453
00:24:01,544 --> 00:24:04,764
C, I just don't like it and they don't
give a crap. They don't care at all.
454
00:24:04,764 --> 00:24:06,524
-Mm-hmm.
-It's fine. It's fine for them. You know
455
00:24:06,524 --> 00:24:10,524
-what I mean?
-Yeah. Nuno, I think Nuno was posting
456
00:24:10,524 --> 00:24:15,904
something about this the other day. I saw
a screenshot. So they're just calling
457
00:24:15,904 --> 00:24:21,164
request validate, um... Oh, no, this is
the MCP Tools thing. I'm sure I saw that
458
00:24:21,164 --> 00:24:22,844
he tweeted somewhere.
459
00:24:24,444 --> 00:24:28,344
In Laravel MCP, tools, prompts, and
resources share the same API request
460
00:24:28,344 --> 00:24:31,684
handle response. Similar to controllers in
Laravel, you can validate input, dispatch
461
00:24:31,684 --> 00:24:36,934
actions, and more.But this is calling
request validate, this is not talking
462
00:24:36,934 --> 00:24:37,964
about authorization.
463
00:24:38,914 --> 00:24:45,454
I'm, yeah, I'm, I'm certain in one of
Nuno's, um, streams or videos that he
464
00:24:45,454 --> 00:24:49,293
posted, he did talk about how he goes
through this. Which I assume would be very
465
00:24:49,293 --> 00:24:53,494
similar to how they're doing it, uh, in
Laravel Cloud at the very least, 'cause he
466
00:24:53,494 --> 00:24:58,533
had a heavy hand in, in the architecture
of that platform. So, um, it would
467
00:24:58,533 --> 00:25:00,454
definitely be good to, to gauge
468
00:25:01,154 --> 00:25:05,214
some... 'Cause I know that, you know, you
brought this up in, uh, in Cash Money,
469
00:25:05,214 --> 00:25:06,674
-and, and David-
-Yeah
470
00:25:06,674 --> 00:25:11,434
... David Hemphill and I, we've, we're
very much aligned in this in terms of, um,
471
00:25:11,434 --> 00:25:13,734
you know, using form requests for
everything, and, and handling
472
00:25:13,734 --> 00:25:16,674
-authorization that way, so...
-So, so-
473
00:25:16,674 --> 00:25:18,053
-I think-
-Like-
474
00:25:18,053 --> 00:25:20,954
... I think this is where it kinda comes
down to, you know, there are many
475
00:25:20,954 --> 00:25:24,474
different ways of doing these things in
Laravel, and it, and it varies case by
476
00:25:24,474 --> 00:25:29,394
case, app by app. Um, you know, some
things make sense in some context that are
477
00:25:29,394 --> 00:25:34,114
different in others. Uh, and it's hard to
find, like, the one prescribed way of
478
00:25:34,154 --> 00:25:35,314
-doing it.
-Yeah.
479
00:25:35,314 --> 00:25:38,374
-Um, but yeah, I know-
-I just, I just wanna be consistent, and it
480
00:25:38,374 --> 00:25:39,613
-just-
-Yeah.
481
00:25:39,614 --> 00:25:43,033
Every time I feel like I've got it nailed
down, there's, like, some weird edge case
482
00:25:43,033 --> 00:25:44,043
-thing that's like, "Oh-"
-Mm-hmm.
483
00:25:44,043 --> 00:25:46,594
"... except for that, then you have to do
it a different way." And I'm like, "No-"
484
00:25:46,594 --> 00:25:47,894
-Yeah.
-"... dang it all, I don't wanna do it a
485
00:25:47,894 --> 00:25:48,984
-different way. I wanna do it-"
-Yeah.
486
00:25:48,984 --> 00:25:53,293
"... the same way every time." Like, and
it just feels like I can't find that way.
487
00:25:53,934 --> 00:25:56,994
I thought I had. I though- I did, I
actually did have it. When I had that
488
00:25:56,994 --> 00:26:01,194
authorized resource thing, it was working
perfectly. Now I, now it's, now I can't.
489
00:26:01,194 --> 00:26:02,043
-It's, it's-
-Yeah, I mean, that's-
490
00:26:02,043 --> 00:26:03,334
-I'm screwed.
-That's gone from
491
00:26:04,254 --> 00:26:07,574
the controller, because the base
controller is gone, but you can still use
492
00:26:07,574 --> 00:26:10,293
the trait directly if you wanted to. You
can, I mean, you can always bring that
493
00:26:10,293 --> 00:26:10,964
-base controller-
-Well, no-
494
00:26:10,964 --> 00:26:13,063
-... back if you wanted to.
-You can, but-
495
00:26:13,063 --> 00:26:16,754
-Or is it gone?
-... you have to extend, like, if you do
496
00:26:16,754 --> 00:26:21,554
that, the, the, the way that they do the
middle ware on the controllers is also
497
00:26:21,554 --> 00:26:22,664
-different now-
-Right, okay
498
00:26:22,664 --> 00:26:25,813
... because they've, they've removed that
construct middle ware.
499
00:26:25,813 --> 00:26:28,374
-Yeah, 'cause it's a method now.
-Yeah, they've con- removed that. And so
500
00:26:28,374 --> 00:26:31,674
you have to have, like, there's like a
public static function middle ware on
501
00:26:31,674 --> 00:26:37,313
every controller, but the authorized
resource uses that middle ware the way
502
00:26:37,313 --> 00:26:39,614
that it was previously written. Which is
why I think-
503
00:26:39,614 --> 00:26:40,714
-Mm-hmm
-... they removed it from the docs. It was
504
00:26:40,714 --> 00:26:43,094
like, "No, we're not gonna do this
anymore." Like, you have to extend-
505
00:26:43,094 --> 00:26:47,174
-Mm-hmm
-... a different type of, um... I- I looked
506
00:26:47,174 --> 00:26:49,734
into it. It's just, you have to do
something funky. It's definitely not the
507
00:26:49,734 --> 00:26:52,813
direction the framework was going. Which
I'm fine with saying we're gonna stick
508
00:26:52,813 --> 00:26:56,914
with where the c- the framework was going.
I'm fine with changing, I just don't feel
509
00:26:56,914 --> 00:26:59,894
like I have a clear picture of, like, how
it is. And, and again-
510
00:26:59,894 --> 00:27:02,313
-Mm-hmm
-... maybe it's... They are just like, "No,
511
00:27:02,313 --> 00:27:06,014
no, no, there is a clear picture. The
clear picture is do a gate authorize check
512
00:27:06,014 --> 00:27:09,474
in every single controller method." And
I'm just like, "Ick, I don't like that.
513
00:27:09,474 --> 00:27:12,374
-That's still the thing." Um-
-Yeah.
514
00:27:12,374 --> 00:27:15,274
-And so, you know.
-I found, I found Nuno's, uh, tweet about
515
00:27:15,274 --> 00:27:18,914
it. It was from the 29th of January. So
some things just stick in my head better
516
00:27:18,914 --> 00:27:22,313
than others. But he said, "Yes,
authorization on my form request. I
517
00:27:22,313 --> 00:27:27,414
typically test form request on my
controller test." So the... I- I've linked
518
00:27:27,414 --> 00:27:29,654
it to you, I have a link for you in the
show notes. Basically he's got a
519
00:27:29,654 --> 00:27:33,254
controller which has a method that injects
the request, and the assumption is that
520
00:27:33,254 --> 00:27:36,734
the authorization has already happened in
the request, and the validation obviously
521
00:27:36,734 --> 00:27:41,574
then happens in the, uh, form request
implicitly. And then it's just a matter of
522
00:27:41,574 --> 00:27:45,734
calling the action handle method and
returning response from the controller,
523
00:27:45,734 --> 00:27:47,774
-and-
-Okay, so here's, here's my only, this is
524
00:27:47,774 --> 00:27:50,894
my only hang up, right? And you may have
an answer to this, you may not.
525
00:27:52,674 --> 00:27:53,414
If I have
526
00:27:54,894 --> 00:27:55,074
a
527
00:27:56,754 --> 00:27:57,063
item.
528
00:27:58,154 --> 00:28:01,394
If I'm edit, like, so if I'm editing an
item, okay?
529
00:28:01,394 --> 00:28:03,934
-Mm-hmm. Mm-hmm.
-And I am getting that through the
530
00:28:03,934 --> 00:28:09,013
controller method, um, not store, not like
a new one, like I'm-
531
00:28:09,014 --> 00:28:10,634
-Mm-hmm
-... editing or I'm viewing one that
532
00:28:10,634 --> 00:28:12,874
-already exists.
-Mm-hmm.
533
00:28:12,874 --> 00:28:17,554
How can I reference that item that's
coming in in my form request
534
00:28:18,174 --> 00:28:21,334
in the authorize method? That's it. If I
could figure that out, I feel like I'm
535
00:28:21,334 --> 00:28:21,654
good.
536
00:28:22,894 --> 00:28:25,813
And I'm, I want that to be actually a good
answer. Like, I don't want it to be some
537
00:28:25,813 --> 00:28:29,054
janky, like, I have to pull it from the
route thing. Like, I want it to, like...
538
00:28:29,054 --> 00:28:32,554
Yeah. Well this is the, the route
parameter attribute that you would, you
539
00:28:32,554 --> 00:28:32,714
would
540
00:28:33,394 --> 00:28:33,854
hint that
541
00:28:34,533 --> 00:28:38,293
in that authorize method, and it should
inject it for you that way.
542
00:28:39,274 --> 00:28:41,014
-Okay.
-That's how I believe it's meant to work,
543
00:28:41,014 --> 00:28:42,834
so.
544
00:28:44,354 --> 00:28:47,634
Storage, keep that route parameter
attribute. Yeah.
545
00:28:47,634 --> 00:28:52,994
Yeah. Yeah, and I'd say the only piece to
me that still feels incomplete on that is
546
00:28:52,994 --> 00:28:57,994
that I have to have that in both my
controller and my form request, that same
547
00:28:57,994 --> 00:29:02,174
variable. I have to keep it in. I have to
keep it consistent. It, my refactor tools
548
00:29:02,174 --> 00:29:05,994
are not gonna know that those are gonna
need to change together.
549
00:29:05,994 --> 00:29:09,313
No. They won't. Um,
550
00:29:10,793 --> 00:29:11,174
no.
551
00:29:12,174 --> 00:29:15,974
But you, you need... Well, yeah, you need
to put them in both places anyway
552
00:29:17,094 --> 00:29:20,134
if you need both of them to be aware of
it. It's, like, it's no different than
553
00:29:20,134 --> 00:29:24,494
passing it down into an action or sending
it somewhere else. Like, those things just
554
00:29:24,494 --> 00:29:26,994
-need to know about it.
-Well, except for from there, I'm passing
555
00:29:26,994 --> 00:29:30,214
-it from the controller into the action.
-Mm-hmm. Mm-hmm.
556
00:29:30,214 --> 00:29:33,144
Right? And so I can see it in the
controller. It's like it's right there.
557
00:29:33,144 --> 00:29:34,894
-Yeah, yeah.
-I can see the name of the variable. I know
558
00:29:34,894 --> 00:29:37,413
I have that available to me in the
controller.
559
00:29:37,414 --> 00:29:39,414
-Mm-hmm.
-And so then I just... And it's no problem.
560
00:29:39,414 --> 00:29:41,793
-I- I just, it's like it's-
-I mean, if you wanted to
561
00:29:42,534 --> 00:29:46,014
if you wanted to, you could then, you
could then type the route parameter in
562
00:29:46,014 --> 00:29:48,854
both of them rather than relying on the
implicit injection
563
00:29:51,354 --> 00:29:53,434
-into the controller.
-Could I do, could I...
564
00:29:53,434 --> 00:29:55,394
-So rather than just-
-Go ahead.
565
00:29:55,394 --> 00:29:59,614
Yeah, so rather than in your controller
method doing, you know, binding the, the
566
00:29:59,614 --> 00:30:03,813
model directly, you could just say route
parameter. 'Cause this, you can-
567
00:30:03,813 --> 00:30:05,914
-Ah, okay
-... that route parameter attribute
568
00:30:06,614 --> 00:30:11,974
is, a- an attribute that targets
parameters. So you could do it on a, on a
569
00:30:11,974 --> 00:30:13,744
controller's edit method, yeah.
570
00:30:14,614 --> 00:30:16,874
-Mm-hmm.
-But, you know, without running the code,
571
00:30:16,874 --> 00:30:20,313
looking at it, it certainly seems to, to
be the case.
572
00:30:21,254 --> 00:30:24,054
Okay. I need to find the documentation for
that,
573
00:30:24,813 --> 00:30:27,444
for what you're talking about. Is it an
attribute, that route attribute?
574
00:30:27,444 --> 00:30:31,313
Contextual, yeah, contextual, contextual
attributes, I think is what they're called
575
00:30:31,313 --> 00:30:34,994
-in the documentation.
-Okay. Let's look that up.
576
00:30:34,994 --> 00:30:39,534
Contextual attributes, yeah, as part of
the service container documentation.
577
00:30:42,902 --> 00:30:44,002
Contextual attributes.
578
00:30:44,862 --> 00:30:49,742
Route parameter, and then so you say,
like, the route parameter would be, uh,
579
00:30:49,742 --> 00:30:51,402
-coaching-
-Yeah
580
00:30:51,402 --> 00:30:55,332
... as a string, and then you would have
a, you know, coaching,
581
00:30:56,102 --> 00:31:01,182
dollar coaching, you know, and put it put
it in the definition that way.
582
00:31:01,182 --> 00:31:06,522
I'm curious if when I get it that way, if
it's actually going to give me is is it
583
00:31:06,522 --> 00:31:10,121
just going to give me the value, the ID
that's being passed through? So I have to
584
00:31:10,122 --> 00:31:12,462
-look it up again?
-It'll it'll do the casting for you.
585
00:31:12,462 --> 00:31:15,742
-It will do that.
-It's basically an explicit model
586
00:31:16,422 --> 00:31:18,002
binding.
587
00:31:18,762 --> 00:31:25,322
Right? You're saying take this thing
explicitly from the route, right, the the
588
00:31:25,322 --> 00:31:26,362
ID of the coaching
589
00:31:27,002 --> 00:31:30,942
model, and then Mhmm. It will handle
casting that into a coaching
590
00:31:30,942 --> 00:31:33,622
-Oh, I see it
-... model.
591
00:31:33,622 --> 00:31:36,302
Mhmm. Mhmm. Mhmm. Yep.
592
00:31:37,182 --> 00:31:42,142
And it does a container make from the
request and gets that route parameter, and
593
00:31:42,142 --> 00:31:47,902
then you get that back because it's an
attribute that you have now typed as a as
594
00:31:47,902 --> 00:31:53,862
a, method parameter, you'll get the type
of that thing knowing that it is an
595
00:31:53,862 --> 00:31:57,562
instance of whatever it should be out of
the route, which in this case
596
00:31:57,562 --> 00:32:02,072
Interesting. So I could do that I could do
that inside of the, um,
597
00:32:02,942 --> 00:32:05,172
-the form request?
-The form request and the controller. Yeah.
598
00:32:05,172 --> 00:32:10,152
I mean, it it doesn't stop the like, I've
gotta put it in two places. But it makes
599
00:32:10,152 --> 00:32:12,202
-it
-Yeah. Or maybe or maybe it actually I
600
00:32:12,202 --> 00:32:16,222
wonder if it actually also, makes 2
queries.
601
00:32:16,222 --> 00:32:20,322
-That would be the thing to check for.
-Hmm.
602
00:32:20,322 --> 00:32:22,802
I mean, it's pulling it out of the route.
So it's set
603
00:32:23,542 --> 00:32:26,222
-on the route there.
-Yeah.
604
00:32:26,942 --> 00:32:27,822
-Yeah.
-So
605
00:32:28,922 --> 00:32:31,112
worth exploring. Uh, I wouldn't go and
refactor my
606
00:32:31,112 --> 00:32:35,082
I'm still not super yeah. Well so that's
where we're at. It's like we're already
607
00:32:35,082 --> 00:32:38,022
going through the process of refactoring
the code base. So I'm pulling my hair out
608
00:32:38,022 --> 00:32:42,022
trying to figure out, okay, we're doing
this once. How do we wanna do it? And I
609
00:32:42,022 --> 00:32:44,602
just don't feel like I have a good answer.
So
610
00:32:45,422 --> 00:32:47,602
-Yeah. There are
-I might just end up I might just so what I
611
00:32:47,602 --> 00:32:53,662
know what I know I can do is the the easy
way that's ugly is just do the gate
612
00:32:53,662 --> 00:32:56,382
authorize check at the top of every
controller method and call it good. And it
613
00:32:56,422 --> 00:32:59,342
is it is ugly, but it's effective, and it
works every time. Like
614
00:33:00,782 --> 00:33:03,442
-Yeah.
-I mean, there are there are some ugly
615
00:33:03,442 --> 00:33:07,142
things, and there are some paper cuts in
the framework that I don't know that there
616
00:33:07,142 --> 00:33:09,642
are good solutions for. Um,
617
00:33:10,702 --> 00:33:14,842
and, like, I know that Taylor likes to go
through and find these paper cuts and and
618
00:33:14,842 --> 00:33:19,802
clean them up, but there are just some
things that I think can't be cleaned up. I
619
00:33:19,802 --> 00:33:22,902
mean, I say that now, maybe in 6 months,
he will, you know he will have one of
620
00:33:22,902 --> 00:33:28,421
those light bulb moments and figure out
how to do it. But, um, yeah, the the form
621
00:33:28,422 --> 00:33:31,662
request and the controller kind of
different context as well.
622
00:33:31,662 --> 00:33:33,492
-Yeah. Yeah.
-Even though they're coupled. Um,
623
00:33:34,382 --> 00:33:38,662
-yeah.
-Yep. Yep. Yep. Yep. Okay.
624
00:33:38,662 --> 00:33:41,942
Interesting. I'd be interested to to hear
where you land on it though.
625
00:33:41,942 --> 00:33:47,122
Yeah. I think I think if I'm if I'm just
trying to be, like if I'm trying to be as
626
00:33:47,122 --> 00:33:52,042
consistent and as, like, pragmatic as I
would as I could be, I think, ideally, I
627
00:33:52,042 --> 00:33:55,442
would like to put it in the form request.
I would like to just always have a form
628
00:33:55,442 --> 00:34:00,002
request object, always have an authorized
method, and always be checking the policy
629
00:34:00,002 --> 00:34:01,782
-in that spot.
-Yeah.
630
00:34:01,782 --> 00:34:05,242
Um, and then I think the trick the only
trick I have to figure out is how I can
631
00:34:05,242 --> 00:34:11,402
make sure that I have access to that that,
um, model that is bound, you know, the
632
00:34:11,402 --> 00:34:14,662
implicit binding. And if I can figure that
out, then I'm I'm good to go. And I'll
633
00:34:14,662 --> 00:34:16,701
I'll let you know kinda where we where we
land on that.
634
00:34:16,702 --> 00:34:19,902
-Yeah. Excellent.
-Cool.
635
00:34:19,902 --> 00:34:23,362
-It's nice.
-Okay. Yes. Yes. Yes. Alright. We are what
636
00:34:23,362 --> 00:34:26,002
-time are we at here? 34?
-Yeah.
637
00:34:26,002 --> 00:34:29,752
Alright. We got we we got anything else
before wanna talk about before we go or
638
00:34:29,752 --> 00:34:30,110
are we good?
639
00:34:31,722 --> 00:34:35,482
Uh, no. I mean, we talked about the
Salesforce mocking thing, uh, last
640
00:34:35,482 --> 00:34:40,642
episode, which I'm still working my way
through because I realized today that at
641
00:34:40,642 --> 00:34:45,201
some point during the AI writing the code,
it deleted a whole bunch of code that I
642
00:34:45,202 --> 00:34:47,822
-Oh, fun.
-... still had written. So and I'm not sure
643
00:34:47,822 --> 00:34:51,182
like, I don't know if I'd stashed it and
then dropped the stash because I thought I
644
00:34:51,182 --> 00:34:55,942
wasn't working on that anymore. Um, but
it likes to be very verbose. And so
645
00:34:56,622 --> 00:34:58,542
what I have found through this process
646
00:34:59,182 --> 00:34:59,682
is that
647
00:35:00,342 --> 00:35:03,502
a lot of stuff you end up doing multiple
times because you'd like you get the first
648
00:35:03,502 --> 00:35:07,362
cut and then you have to like tidy it up
and then it like starts doing weird
649
00:35:07,362 --> 00:35:12,282
things. Like I said, I want you to bind a
faker instance to the container. So it
650
00:35:12,282 --> 00:35:13,602
went and actually bound
651
00:35:14,542 --> 00:35:17,922
well, I said I wanted to choose dependency
and injection. And so I went and then
652
00:35:17,922 --> 00:35:21,642
bound an instance of faker to the
container rather than just injecting it as
653
00:35:21,642 --> 00:35:22,682
a constructor
654
00:35:23,742 --> 00:35:28,362
property. So this is things like that. I'm
I'm getting to the point where I'm, like,
655
00:35:28,362 --> 00:35:32,202
I would just do this myself. Like, you
have given me enough of the skeleton that
656
00:35:32,202 --> 00:35:35,602
I can go and make the rest of this work.
Otherwise, I'm just gonna keep going round
657
00:35:35,602 --> 00:35:36,482
and round in circles.
658
00:35:37,622 --> 00:35:37,922
So
659
00:35:38,882 --> 00:35:43,762
I did find though, um, I'm using I think
we spoke about open code last time. I'm
660
00:35:43,762 --> 00:35:50,182
using that. They're offering brock code
fast for free for a period of time while
661
00:35:50,182 --> 00:35:53,602
they're testing it out with with their
stuff. And I think
662
00:35:54,222 --> 00:35:59,562
it tends to produce results, like, good
enough results much quicker because it
663
00:35:59,562 --> 00:35:59,982
doesn't
664
00:36:00,742 --> 00:36:04,322
spit out all of the, like, thought process
that it's going through where Claude
665
00:36:04,962 --> 00:36:09,402
and the Sonnet model will say, you know,
I'm doing this. I'm looking at this. Oh,
666
00:36:09,402 --> 00:36:13,502
this didn't work. I'm gonna, like, go and
investigate this. Whatever. Like, it's
667
00:36:13,502 --> 00:36:18,502
very verbose in terms of describing what
it's doing. Brock code seems to just,
668
00:36:18,502 --> 00:36:22,362
like, do it and then go here's the result
at the end, which
669
00:36:23,002 --> 00:36:24,582
depending on who you are
670
00:36:25,302 --> 00:36:26,022
may or may not be
671
00:36:26,722 --> 00:36:30,922
a better option. But I found towards the
end of last week that
672
00:36:31,882 --> 00:36:33,962
that Groq code was
673
00:36:34,842 --> 00:36:39,001
certainly producing results much quicker
where Sonnet kept on timing out. But I
674
00:36:39,002 --> 00:36:42,342
think Claude had some issues last week,
and they made some tweaks to their models
675
00:36:42,342 --> 00:36:45,742
or something like that. So maybe that came
into play because it seems to be working
676
00:36:45,742 --> 00:36:52,714
okay again today.So, anyway, I don't know.
I think our code base is, is
677
00:36:52,714 --> 00:36:57,174
quite large and some of the stuff that's
in there may impair
678
00:36:57,934 --> 00:37:00,424
-more than impact what it's doing.
-Mm-hmm.
679
00:37:00,424 --> 00:37:05,474
And so, yeah. It certainly has gotten
through a lot of the boilerplate and a lot
680
00:37:05,474 --> 00:37:09,134
of the things that I wouldn't wanna do,
like, you know, coming up with mock
681
00:37:09,134 --> 00:37:13,294
responses for Salesforce requests. Like,
it's figured out what they should look
682
00:37:13,294 --> 00:37:13,774
like and
683
00:37:14,394 --> 00:37:18,454
the shape of the responses and generating
all of the, the bodies. So it's been very
684
00:37:18,454 --> 00:37:21,954
good at that. But in terms of tying all
the pieces together, I'm not stoked with
685
00:37:21,954 --> 00:37:23,454
-it, to be honest.
-Yeah.
686
00:37:23,454 --> 00:37:26,734
You know, whether, whether or not that's,
like, the model is not capable of it or
687
00:37:26,734 --> 00:37:29,874
I'm not capable of steering the model at
this stage is
688
00:37:30,594 --> 00:37:35,134
unclear. But it's just a frustrating
thing, and it's, it's turning into a bit
689
00:37:35,134 --> 00:37:38,654
of an abusive relationship now because
every time I say- ... "Nah, this is crap.
690
00:37:38,654 --> 00:37:41,894
I'm not gonna use this anymore. I'm gonna
do it myself," I find my way back to it
691
00:37:41,894 --> 00:37:45,834
and try again anyway. Maybe this time
it'll be different, so.
692
00:37:45,834 --> 00:37:49,634
-You get... You're codependent.
-It's no, it's no good. But I feel-
693
00:37:49,634 --> 00:37:50,734
-There's-
-I, I just, I
694
00:37:51,454 --> 00:37:52,614
-there's-
-There's gonna be a whole industry popping
695
00:37:52,614 --> 00:37:55,814
up around, like, AI, like, relationship
coaching.
696
00:37:55,814 --> 00:38:00,534
Yeah. Yeah. There's, uh, we'll, we'll
probably wrap on this, and maybe I'll get
697
00:38:00,534 --> 00:38:02,674
your opinion on it and then we can wrap.
But
698
00:38:03,394 --> 00:38:05,374
I feel like there's a big push
699
00:38:06,574 --> 00:38:09,714
as an industry. Like, you see it all the
time. Companies are saying, "You've gotta
700
00:38:09,714 --> 00:38:12,894
use AI. We're not hiring any more staff
unless you can show that you've exhausted
701
00:38:12,894 --> 00:38:16,994
all avenues with AI," and, and whatever
else. Like, so there's that whole school
702
00:38:16,994 --> 00:38:20,744
of thought going on. And, um,
703
00:38:22,114 --> 00:38:27,014
I feel like as engineers, as developers
that have been in the game for a long
704
00:38:27,014 --> 00:38:30,894
period of time, that have, like, done all
of the work by hand for a long period of
705
00:38:30,894 --> 00:38:34,814
time, sitting there and watching the
computer write the code for you, it's
706
00:38:34,814 --> 00:38:36,814
like, what am I being paid for now
707
00:38:37,674 --> 00:38:41,414
to, like, sit there and just what? Like, I
feel very dirty about it. Whereas some
708
00:38:41,414 --> 00:38:45,594
people are like, "This is great. I can get
more done," I don't feel like it's made
709
00:38:45,594 --> 00:38:49,454
me quicker. I feel like it has certainly
written more code than I could have over
710
00:38:49,454 --> 00:38:54,394
the same period of time. I don't think
it's produced the same amount of output
711
00:38:54,394 --> 00:38:57,854
and the same amount of value as I could in
that same amount of time, if that makes
712
00:38:57,854 --> 00:38:59,384
-sense.
-Mm. Yeah, so do you-
713
00:38:59,384 --> 00:39:01,014
-Um-
-You feel like it's actually made, made you
714
00:39:01,014 --> 00:39:04,533
less efficient, but it's, it's easier for
you?
715
00:39:04,534 --> 00:39:06,854
-I don't think it's made me more-
-Less produc- not, not less efficient, less
716
00:39:06,854 --> 00:39:07,854
-productive?
-Yeah.
717
00:39:07,854 --> 00:39:11,554
-Do you feel like you're producing less?
-Yeah, I feel like... Yeah, 'cause, like,
718
00:39:11,554 --> 00:39:14,003
I'm not doing it. I'm watching the
computer do it, right?
719
00:39:14,003 --> 00:39:16,014
-Sure.
-But I feel like what it's producing, I
720
00:39:16,014 --> 00:39:20,494
still need to go over, and there's a lot
of untangling going on there. So I'm, I'm
721
00:39:20,494 --> 00:39:25,054
watching the computer write the code for,
you know, hours of a day
722
00:39:25,674 --> 00:39:31,394
or across a week, you know, hours of, of,
of that week. And it's like, well, what,
723
00:39:31,394 --> 00:39:32,814
what am I supposed to be doing while it's
724
00:39:33,834 --> 00:39:36,674
churning out code? And then, oh, it's
finished. Okay, now I've gotta go and look
725
00:39:36,674 --> 00:39:40,394
at it. No, that's no good. Figure out how
we're gonna fix it. Okay, then off it
726
00:39:40,394 --> 00:39:45,554
goes again. It's like... I don't know. As,
as someone who has always written the
727
00:39:45,554 --> 00:39:50,694
code, it's like, I understand that I get,
you know, you get paid to do the work, but
728
00:39:50,694 --> 00:39:53,874
now I'm not doing the work, if that makes
sense. So what-
729
00:39:53,874 --> 00:39:54,563
-Yeah, yeah
-... what, what am I, what am I being paid
730
00:39:54,563 --> 00:39:56,454
-for here?
-Are you, are you using, are you using it
731
00:39:56,454 --> 00:39:58,894
in, like, planning mode first to kinda get
it all set up?
732
00:39:58,894 --> 00:40:00,054
-Yeah.
-And then you... Yeah. Okay.
733
00:40:00,054 --> 00:40:01,494
-Yeah.
-So you're doing it that way. Okay. Yeah.
734
00:40:01,494 --> 00:40:03,474
-Yeah.
-I don't know, dude. I, honestly, I wish I
735
00:40:03,474 --> 00:40:07,614
could tell you. I feel like tomorrow I
actually told Andy Hinkle. I was like,
736
00:40:07,614 --> 00:40:10,194
"Dude, you're gonna do a Teaching Tuesday
for us tomorrow, and you're gonna show us
737
00:40:10,194 --> 00:40:12,234
how you actually go through
738
00:40:12,294 --> 00:40:17,114
with Claude and with, uh, Cursor and, and
how you actually go through. What's your
739
00:40:17,114 --> 00:40:20,474
process, you know? Um, how do you set it
up in planning mode? What are the things
740
00:40:20,474 --> 00:40:22,834
that you're prompting it with?" And
whatever. And there, there are little
741
00:40:22,834 --> 00:40:28,574
things. Like, so today he went through and
was like, "Here are all the strings that
742
00:40:28,574 --> 00:40:33,654
I want to have a passing test for, that it
should have this output. And here are all
743
00:40:33,654 --> 00:40:37,834
the ones that I have strings that should
be ignored, and this is what it should
744
00:40:37,834 --> 00:40:38,804
-be," whatever. And then he said-
-Mm-hmm
745
00:40:38,804 --> 00:40:42,294
... "I need a regex that solves all of
these." And it was like, "Okay. Let me
746
00:40:42,294 --> 00:40:44,954
wri- let me do this." And he's like, "No,
no, no. Start with TDD first. Like, write
747
00:40:44,954 --> 00:40:47,674
the test." It was like, "Okay, I'll write
the test." Then he's like, "Okay. Now
748
00:40:47,674 --> 00:40:51,344
write your regex." And it wrote a single
regex that solved all of those, and it
749
00:40:51,344 --> 00:40:51,624
-passed-
-Mm-hmm
750
00:40:51,624 --> 00:40:53,034
-... all the tests. And it's like, okay.
-Yeah.
751
00:40:53,034 --> 00:40:57,644
Pretty sweet. Like, 'cause Andy's... He's,
he's good with... You know, he... I don't
752
00:40:57,644 --> 00:41:01,934
think he's ever had to use or, like, had
to know exactly what the regex was. Most
753
00:41:01,934 --> 00:41:04,574
of the time, you can just kinda, like,
Google it, and like, "Okay, I need a regex
754
00:41:04,574 --> 00:41:05,293
-for a phone number."
-Yeah. Yeah.
755
00:41:05,294 --> 00:41:07,204
Great. There we go. You know, I don't know
what it means, but whatever.
756
00:41:07,204 --> 00:41:10,814
-He's very good at writing regexes. Yeah.
-Totally. And, like, I love regex stuff.
757
00:41:10,814 --> 00:41:13,514
And so, like, for me, it's very
interesting to kinda see him pull it apart
758
00:41:13,514 --> 00:41:17,194
and whatever. But it's like, does it
really necessary for him to learn all
759
00:41:17,194 --> 00:41:19,414
that, or can he just prompt the AI to do
that? And so it's like-
760
00:41:19,414 --> 00:41:20,514
-Yeah
-... there are instances where it's, like,
761
00:41:20,514 --> 00:41:22,394
-very useful for that sort of stuff. So-
-Mm-hmm.
762
00:41:22,394 --> 00:41:25,454
And it was stupid, it would be stupid for
him to write that code because s- you
763
00:41:25,454 --> 00:41:27,354
-know, it can write it for him. And so-
-Yeah.
764
00:41:27,354 --> 00:41:29,514
-Um, yeah. I don't know.
-For those kinds of things, like, I have
765
00:41:29,514 --> 00:41:33,734
definitely found that it's, it's quite
good at it. Um, especially, you know, when
766
00:41:33,734 --> 00:41:35,804
we've been wanting to figure out... Like,
we have
767
00:41:36,814 --> 00:41:38,234
in the Salesforce library
768
00:41:39,294 --> 00:41:45,174
every- everything that, like, runs a raw
query against the Salesforce endpoint, it
769
00:41:45,174 --> 00:41:50,474
just sends an execute query request. So it
could be a, it could doing a select from
770
00:41:50,474 --> 00:41:54,614
contacts or accounts or, you know,
whatever else. So the only way to kinda
771
00:41:54,614 --> 00:41:58,274
figure out what kind of request is
actually being sent in order for us to be
772
00:41:58,274 --> 00:42:04,194
able to then fake the response is to
inspect the query string. Um, and so,
773
00:42:04,194 --> 00:42:05,354
like, it's kinda figured out
774
00:42:06,094 --> 00:42:09,174
initially that it, it was writing a regex.
I'm like, "I think this is a bit
775
00:42:09,174 --> 00:42:13,394
overkill," 'cause I was looking at this
regex. I'm like that, that looks very
776
00:42:13,394 --> 00:42:17,494
complicated. Uh, let's maybe just use a
string contains here and just look for,
777
00:42:17,494 --> 00:42:21,734
like, if the query string contains from
account, it means that we're doing an
778
00:42:21,734 --> 00:42:24,754
account lookup so we can return the
account if it... You know, all of that
779
00:42:24,754 --> 00:42:25,514
kinda stuff. But
780
00:42:26,514 --> 00:42:30,494
it's... Yeah. There, there are things... I
haven't formulated a concrete opinion on
781
00:42:30,494 --> 00:42:33,894
it yet. There are certainly things that it
can do and does well. Like, I love using
782
00:42:33,894 --> 00:42:37,024
-it to go and fix PHP stand violations.
-Mm.
783
00:42:37,024 --> 00:42:39,214
'Cause it's like, ah, I don't wanna go
through that. Um-
784
00:42:39,214 --> 00:42:41,814
-Yeah
-... especially when you update a, a patch
785
00:42:41,814 --> 00:42:44,554
release and end up with 90 or whatever
786
00:42:45,314 --> 00:42:49,004
stand violations that weren't there before
the update, like I did yesterday.
787
00:42:50,634 --> 00:42:56,986
Um...... but, uh, yeah. There are also
things that, even guided, like, "Okay. I
788
00:42:56,986 --> 00:43:01,025
want a- I want you to create a- a registry
of these things." Or "I want it..." You
789
00:43:01,026 --> 00:43:05,806
know, if you- if you're very specific and
very guided, um, it can go and generate a
790
00:43:05,806 --> 00:43:10,065
lot of code. But then you've gotta go and
look at it, because, um, it doesn't do
791
00:43:10,066 --> 00:43:14,266
things quite as well as I would hope for
code that I want to ship into production.
792
00:43:14,266 --> 00:43:20,186
Because, yeah, the AI may have written it,
but then I have to support it. So...
793
00:43:20,186 --> 00:43:24,026
That's the main thing. Like, you do still
need to understand it in, you know, in a
794
00:43:24,026 --> 00:43:25,686
-professional capacity.
-Yeah.
795
00:43:25,686 --> 00:43:29,726
Like, if you're- if you're a
non-programmer and you're just trying to
796
00:43:29,726 --> 00:43:33,466
bring your ideas to life... I spoke to a
friend the other day who's a- a UX
797
00:43:33,466 --> 00:43:36,586
researcher, and he built this thing, um,
798
00:43:37,366 --> 00:43:38,025
that does
799
00:43:39,006 --> 00:43:41,946
some analysis. I don't wanna go too much
into it, 'cause he's still building it
800
00:43:41,946 --> 00:43:47,746
out. But he built this as, like, a- a next
app, um, and, like, all of his stuff, it-
801
00:43:47,746 --> 00:43:51,256
it does all the analysis, it provides
reports, it shows you all these different
802
00:43:51,256 --> 00:43:57,886
things, that over the last month and a
half, two months, he's built himself. Um,
803
00:43:57,886 --> 00:44:01,226
because he knows, like, what comes out the
other side of it, he knows what he's
804
00:44:01,226 --> 00:44:06,986
expecting there. But if you looked under
the- under the hood of all of that code,
805
00:44:06,986 --> 00:44:10,866
it's not gonna be something that you'd
wanna maintain. For that use case-
806
00:44:10,866 --> 00:44:12,086
-Yeah
-... where you're building something that
807
00:44:12,086 --> 00:44:14,036
-you would not have otherwise had-
-It's... Yeah. You could toss-
808
00:44:14,036 --> 00:44:15,076
-... the time, the capability-
-Yeah
809
00:44:15,076 --> 00:44:19,286
... the money to- to do, you know, it
doesn't matter. But he's pro- providing
810
00:44:19,286 --> 00:44:22,546
-value in the outcomes. So...
-Yeah.
811
00:44:22,546 --> 00:44:26,026
But as a software engi- uh, I keep saying
engineer. As a software developer, I find
812
00:44:26,026 --> 00:44:30,436
myself endlessly frustrated by what it
puts out, um,
813
00:44:31,566 --> 00:44:35,746
-and I'm- I'm not- not convinced by it.
-Yeah.
814
00:44:36,666 --> 00:44:40,166
Yep. Like I said, it's just... It
always... The answer is it depends, right?
815
00:44:40,166 --> 00:44:40,446
Yeah.
816
00:44:40,446 --> 00:44:41,906
-As with anything.
-Yeah.
817
00:44:41,906 --> 00:44:47,566
As with anything. All right, my friends.
Why don't we wrap it there? Uh, this is
818
00:44:47,566 --> 00:44:51,156
-gonna be Episode 183?
-183.
819
00:44:51,156 --> 00:44:51,666
-183?
-Mm-hmm.
820
00:44:51,666 --> 00:44:54,166
Thanks for hang- thanks for hanging out
with us, folks. Find those show notes for
821
00:44:54,166 --> 00:44:59,886
this episode at northmeetsouth.audio/183.
Hit us up on Twitter, on X, on Bluesky,
822
00:44:59,886 --> 00:45:04,006
@MichaelDurant, @JacobBennett, or at North
South Audio. And if you liked the show,
823
00:45:04,006 --> 00:45:07,366
rate it up in your podcatcher of choice.
Five stars would be incredible. Thanks,
824
00:45:07,366 --> 00:45:11,966
-folks. Until next time. We'll see ya.
-Bye.
