WEBVTT
X-TIMESTAMP-MAP=MPEGTS:900000,LOCAL:00:00:00.000

0
00:01:56.300 --> 00:01:58.199
Hello. Hey folks.

1
00:01:58.370 --> 00:02:01.849
Happy Thanksgiving to the Americans.

2
00:02:02.319 --> 00:02:05.709
I mean, everybody can have a Happy Thanksgiving. They probably just don't care.

3
00:02:09.298 --> 00:02:10.169
So,

4
00:02:12.050 --> 00:02:17.309
so it's not gonna be a giant long nine hour opus or anything because we are having,

5
00:02:18.960 --> 00:02:23.320
oh my God, we're having eight people for dinner. So, including us. That's 10.

6
00:02:23.330 --> 00:02:25.539
So there is still plenty of prep to do,

7
00:02:25.820 --> 00:02:28.639
but I wanted to keep up the stream schedule of.

8
00:02:29.750 --> 00:02:32.089
So, speaking of the stream,

9
00:02:32.289 --> 00:02:34.889
this is Lobster's office hours

10
00:02:37.809 --> 00:02:40.070
and let's grab the browser up.

11
00:02:42.270 --> 00:02:43.130
So the first thing,

12
00:02:43.710 --> 00:02:45.830
so Lobsters is a

13
00:02:47.770 --> 00:02:50.869
social media website where people can talk to each other

14
00:02:51.830 --> 00:02:52.600
and,

15
00:02:54.949 --> 00:02:55.380
hey,

16
00:02:55.850 --> 00:02:56.559
Gaua, good morning.

17
00:03:01.419 --> 00:03:02.660
And what a funny morning.

18
00:03:02.809 --> 00:03:03.360
Um,

19
00:03:04.050 --> 00:03:04.820
so, uh

20
00:03:07.619 --> 00:03:10.679
I saw on the news, where would I just see that?

21
00:03:10.990 --> 00:03:11.839
Was it? Um

22
00:03:14.699 --> 00:03:16.039
Let's pull it off of here.

23
00:03:16.589 --> 00:03:19.440
Oh, no, it wasn't here. It was.

24
00:03:20.270 --> 00:03:22.460
Yeah, I don't have one in candy. Do I

25
00:03:23.910 --> 00:03:26.520
really prepared? Totally professional.

26
00:03:34.899 --> 00:03:36.360
So I was gonna grab the

27
00:03:38.080 --> 00:03:39.639
wild bit of news.

28
00:03:40.139 --> 00:03:41.279
This was the, uh,

29
00:03:44.210 --> 00:03:45.429
I saw a couple of links

30
00:03:46.429 --> 00:03:48.779
and uh pop up aside. This was the

31
00:03:49.490 --> 00:03:50.990
most interesting version.

32
00:03:51.649 --> 00:03:53.190
Yeah, I really like that. Um

33
00:03:54.080 --> 00:03:55.320
If you haven't seen

34
00:03:56.139 --> 00:03:58.080
HCR News. Um,

35
00:03:58.240 --> 00:03:59.970
I don't know how I found it

36
00:04:01.839 --> 00:04:03.259
but it's basically

37
00:04:05.839 --> 00:04:08.039
a filtered version of

38
00:04:08.179 --> 00:04:09.940
what we would call slash newest.

39
00:04:12.580 --> 00:04:13.279
And

40
00:04:17.209 --> 00:04:18.309
I don't know, it's, um,

41
00:04:19.558 --> 00:04:24.859
I really like that. It has the horizontal line for, here's where you last read.

42
00:04:26.459 --> 00:04:31.459
Although it is possible for things to pop in under it, it's uncommon

43
00:04:31.690 --> 00:04:33.630
and they pop in under it because,

44
00:04:33.859 --> 00:04:37.480
you know, you view at 10 a.m. and then at 10:05 a.m.

45
00:04:38.000 --> 00:04:43.040
they make it to the front page and then you come back at 11. And so the line will be

46
00:04:43.709 --> 00:04:44.359
or wait,

47
00:04:46.290 --> 00:04:47.829
maybe I'm saying this backwards.

48
00:04:51.700 --> 00:04:53.160
So after your view,

49
00:04:55.850 --> 00:04:59.040
uh anyways, the the order is based on when they're posted,

50
00:04:59.049 --> 00:05:00.890
not when they made it to the front page.

51
00:05:00.899 --> 00:05:01.630
And so

52
00:05:02.609 --> 00:05:05.989
it is occasionally possible for things to be under the line

53
00:05:06.160 --> 00:05:08.019
and new, but it's pretty rare

54
00:05:09.140 --> 00:05:09.799
and

55
00:05:12.010 --> 00:05:16.320
the uh I go on about that horizontal line because here on stream,

56
00:05:16.329 --> 00:05:18.579
a couple of months ago, I added the

57
00:05:19.010 --> 00:05:21.260
horizontal last red line to

58
00:05:21.390 --> 00:05:22.779
slash newest

59
00:05:23.019 --> 00:05:25.059
and that was pretty straight based on

60
00:05:26.000 --> 00:05:29.970
this front page for hacker news. I like it a bunch. It um

61
00:05:33.579 --> 00:05:34.920
It also just

62
00:05:35.690 --> 00:05:39.019
keeps me from refreshing the front page of hacker news.

63
00:05:39.029 --> 00:05:41.829
I'm aware I nominally run a competitor,

64
00:05:42.109 --> 00:05:44.320
maybe it's a nominal competitor.

65
00:05:44.589 --> 00:05:46.760
There's not a lot of actual competition in social

66
00:05:46.769 --> 00:05:49.559
media because everybody could be active on multiple sites.

67
00:05:49.570 --> 00:05:49.970
But

68
00:05:50.119 --> 00:05:51.709
people kind of assume that there is

69
00:05:53.429 --> 00:05:54.040
uh

70
00:05:57.380 --> 00:06:02.540
also it was a, an actual competition. Lobsters would be losing very, very badly

71
00:06:02.850 --> 00:06:04.059
or something like

72
00:06:04.200 --> 00:06:07.040
1% or less on, on any metric.

73
00:06:07.049 --> 00:06:10.600
You care to count like traffic or number of stories or anything.

74
00:06:11.869 --> 00:06:12.450
Um,

75
00:06:13.510 --> 00:06:14.489
but I enjoy reading

76
00:06:14.959 --> 00:06:16.959
hacker news and occasionally post there

77
00:06:17.720 --> 00:06:18.660
and, uh,

78
00:06:20.109 --> 00:06:21.359
I like the uh

79
00:06:22.170 --> 00:06:26.700
the slash newest kind of approach because it keeps me from just rereading the

80
00:06:26.709 --> 00:06:30.269
homepage or digging back into stories to see more comments and more comments.

81
00:06:32.500 --> 00:06:34.239
It's also why I mostly read Lobsters by

82
00:06:34.459 --> 00:06:37.350
Newest and Active and the mod dashboard.

83
00:06:38.589 --> 00:06:39.559
So yeah, g so

84
00:06:39.700 --> 00:06:42.450
this other, this other link, um

85
00:06:44.429 --> 00:06:48.329
I pulled up hacker news at the start there because that was where I first saw it.

86
00:06:48.609 --> 00:06:50.670
And then I found this link that was a

87
00:06:50.679 --> 00:06:53.959
little bit better and the most valuable thing that

88
00:06:54.940 --> 00:06:56.670
man, I am not the,

89
00:06:56.799 --> 00:06:58.279
the king of journalism,

90
00:06:58.649 --> 00:07:02.079
I mean, not that I ever was, but I have actually worked in journalism.

91
00:07:02.679 --> 00:07:06.440
And so my pet peeve is if you are going to talk about a law

92
00:07:07.070 --> 00:07:08.790
or talk about a court case,

93
00:07:09.670 --> 00:07:12.420
you have to link to it for the love of Pete.

94
00:07:14.489 --> 00:07:15.170
So

95
00:07:15.559 --> 00:07:16.290
this one,

96
00:07:18.190 --> 00:07:19.010
the uh

97
00:07:19.579 --> 00:07:20.420
uh where did it go?

98
00:07:21.880 --> 00:07:25.679
That was kind of bookkeeping stuff. So I'm real,

99
00:07:25.940 --> 00:07:29.910
I'm real cautious of playing lawyer, especially cross country

100
00:07:30.700 --> 00:07:31.760
because

101
00:07:32.160 --> 00:07:34.720
so much stuff that just looks like regular words

102
00:07:34.730 --> 00:07:38.839
turns out to be legal jargon and has special meaning

103
00:07:39.910 --> 00:07:40.690
and

104
00:07:44.559 --> 00:07:46.209
so many laws

105
00:07:46.880 --> 00:07:50.660
and contracts assume some basic knowledge of

106
00:07:52.380 --> 00:07:54.220
some legal precept

107
00:07:54.510 --> 00:07:56.160
that I'm oblivious to.

108
00:07:56.459 --> 00:08:00.559
And so it's really easy to be like, well, why don't you ask or to miss

109
00:08:01.380 --> 00:08:02.709
that? Something is implied.

110
00:08:02.720 --> 00:08:04.399
I don't have a great example off the top of my

111
00:08:04.410 --> 00:08:07.070
head because I'm talking about things I don't know about.

112
00:08:07.079 --> 00:08:07.459
But

113
00:08:07.730 --> 00:08:09.369
I've seen it enough times that,

114
00:08:10.230 --> 00:08:12.559
you know, I've asked a lawyer, can we include this clause?

115
00:08:12.570 --> 00:08:15.130
And they're like, no, that's illegal under the so,

116
00:08:15.329 --> 00:08:16.890
so active

117
00:08:17.250 --> 00:08:19.079
whoever and I'm like, well,

118
00:08:19.369 --> 00:08:20.570
really and they're like, yes.

119
00:08:20.579 --> 00:08:23.730
And then also it was litigated in Smith versus Ferguson. And

120
00:08:24.880 --> 00:08:26.489
you know, you just don't know this stuff.

121
00:08:27.429 --> 00:08:28.170
But the,

122
00:08:30.250 --> 00:08:33.140
the gist of this one is pretty short

123
00:08:35.669 --> 00:08:36.467
and

124
00:08:37.590 --> 00:08:38.250
all

125
00:08:38.380 --> 00:08:39.630
commentators,

126
00:08:40.080 --> 00:08:47.450
whether they are legal or journalist or otherwise seem to all be saying wtf at this.

127
00:08:49.979 --> 00:08:53.609
So I'm not super freaked out because it, there's a like

128
00:08:54.039 --> 00:08:55.520
we are ordering our ourselves.

129
00:08:55.530 --> 00:08:58.989
What I believe is ourselves the government to come up with guidelines

130
00:08:59.090 --> 00:09:01.590
for reasonable steps to prevent

131
00:09:02.729 --> 00:09:07.070
when it says age restricted, it means 16 and under or I'm sorry, it means under 16

132
00:09:07.719 --> 00:09:11.289
from having accounts with age restricted social media platforms.

133
00:09:11.299 --> 00:09:14.989
That is a, a new term this bill makes up and says

134
00:09:16.830 --> 00:09:19.380
it means anything that this bill applies to

135
00:09:20.609 --> 00:09:23.109
and that's the, the meat of it

136
00:09:23.630 --> 00:09:27.109
is right here and this part is pretty small.

137
00:09:29.140 --> 00:09:29.859
So

138
00:09:30.380 --> 00:09:34.030
the term it invents it age restricted social media platform.

139
00:09:35.309 --> 00:09:38.080
And if the sole purpose or a significant purpose of the

140
00:09:38.090 --> 00:09:42.580
service is to enable social interaction between two or more users.

141
00:09:42.590 --> 00:09:44.599
That that's certainly true of lobsters.

142
00:09:45.250 --> 00:09:47.799
The service allows end users, which

143
00:09:51.260 --> 00:09:54.159
why are they called end users instead of just users?

144
00:09:54.890 --> 00:09:55.469
I don't know,

145
00:09:57.020 --> 00:10:01.460
allows users to link to or interact with some of the other end users.

146
00:10:02.989 --> 00:10:04.969
I mean, that's a like yes,

147
00:10:05.210 --> 00:10:07.049
social interaction

148
00:10:07.530 --> 00:10:10.729
is interacting. So this one's kind of redundant but yes,

149
00:10:11.710 --> 00:10:15.080
the service allows users to post material on the service.

150
00:10:15.619 --> 00:10:18.809
Well, I mean, yes, you can leave stories and comments and

151
00:10:19.559 --> 00:10:21.859
even direct messages on lobster. So yes,

152
00:10:22.770 --> 00:10:26.119
such conditions if any are set out in the legislative rules,

153
00:10:26.830 --> 00:10:31.169
I I don't know what this means. Maybe this is a, we're gonna punt it to a uh

154
00:10:34.090 --> 00:10:34.950
what's it called?

155
00:10:35.140 --> 00:10:35.840
Um

156
00:10:36.299 --> 00:10:38.349
the government office for

157
00:10:38.849 --> 00:10:41.159
making every forum into a nightclub,

158
00:10:41.929 --> 00:10:46.030
whatever that bit about, you know, set up guidelines was earlier. So I don't know,

159
00:10:46.830 --> 00:10:48.409
I I am admitting right up front.

160
00:10:48.419 --> 00:10:51.679
I don't know what part of this means and this could be a pretty big escape hatch.

161
00:10:52.840 --> 00:10:56.320
But this is so weird of we're just gonna assume that

162
00:10:56.619 --> 00:10:59.140
social media is bad for people under 16.

163
00:11:02.979 --> 00:11:03.909
And uh

164
00:11:05.299 --> 00:11:06.119
where is it?

165
00:11:06.559 --> 00:11:07.869
Oh, yeah, there's a bunch of,

166
00:11:14.330 --> 00:11:16.909
so it's in legal jargon here

167
00:11:17.280 --> 00:11:19.390
of 500 penalty units,

168
00:11:20.960 --> 00:11:23.260
which sounds very, very video gamey.

169
00:11:23.489 --> 00:11:23.969
But

170
00:11:25.500 --> 00:11:26.979
the important bit is

171
00:11:27.919 --> 00:11:34.320
that translates to a Australian $50 million fine, which is $32 million.

172
00:11:34.330 --> 00:11:35.179
United States

173
00:11:36.099 --> 00:11:40.919
if they don't take reasonable steps to stop people under 16 from having accounts.

174
00:11:42.969 --> 00:11:43.390
That's

175
00:11:44.729 --> 00:11:46.510
so the penalty unit thing,

176
00:11:48.159 --> 00:11:50.809
my guess would be like, it sounds a little silly,

177
00:11:50.820 --> 00:11:53.750
but my guess is it's a way of standardizing

178
00:11:55.039 --> 00:11:59.710
penalties across legislation. Like this is just an abstraction. This is

179
00:11:59.950 --> 00:11:59.960
a,

180
00:12:00.530 --> 00:12:02.429
the legal equivalent of a variable

181
00:12:03.020 --> 00:12:04.750
I've thought for a long time that

182
00:12:05.479 --> 00:12:07.530
the law looks a lot like code

183
00:12:08.299 --> 00:12:09.880
if code had,

184
00:12:11.979 --> 00:12:15.159
if you could argue with the compiler because it was just a guy

185
00:12:16.570 --> 00:12:21.390
and if you had basically no tooling and 400 years of legacy code to deal with.

186
00:12:25.349 --> 00:12:26.080
So

187
00:12:28.260 --> 00:12:29.229
this is like

188
00:12:30.530 --> 00:12:32.789
from civil penalties import

189
00:12:34.030 --> 00:12:34.750
unit.

190
00:12:39.190 --> 00:12:39.380
Yes,

191
00:12:46.719 --> 00:12:48.210
I suppose that'll um

192
00:12:48.500 --> 00:12:49.179
I don't know.

193
00:12:49.549 --> 00:12:50.020
I'm

194
00:12:51.109 --> 00:12:52.280
maybe there's a uh

195
00:12:53.799 --> 00:12:55.429
maybe they shouldn't have written the whole penalty

196
00:12:55.440 --> 00:12:57.039
unit thing and there's a Yagi thing,

197
00:12:57.049 --> 00:12:57.340
but

198
00:12:57.520 --> 00:13:00.539
maybe it'll be really, really helpful if they ever have to uh

199
00:13:00.830 --> 00:13:02.919
replace their currency entirely.

200
00:13:04.280 --> 00:13:07.440
They're gonna drop Australian dollars and switch to the yen or something,

201
00:13:09.039 --> 00:13:12.210
then all they have to do is update that one define

202
00:13:12.219 --> 00:13:15.219
and I'm sure none of their legacy code will break.

203
00:13:19.070 --> 00:13:20.289
So this one's not

204
00:13:20.659 --> 00:13:22.090
super urgent.

205
00:13:23.020 --> 00:13:24.020
There's um

206
00:13:24.890 --> 00:13:28.780
like a year before it takes effect and there's this stuff about

207
00:13:30.580 --> 00:13:31.440
where the

208
00:13:31.679 --> 00:13:34.000
link to the PDF go and put that in the notes.

209
00:13:37.340 --> 00:13:40.320
There's that stuff about we're gonna pass it off to the other

210
00:13:41.609 --> 00:13:46.090
government department for research and implementation and guidelines and stuff.

211
00:13:46.099 --> 00:13:47.549
So, we'll see what this looks like.

212
00:13:48.270 --> 00:13:52.169
But it's just so weird. I had to mention it.

213
00:13:53.270 --> 00:13:55.530
I'm aware that this is politics and I try and stay

214
00:13:55.539 --> 00:13:59.729
out of politics but this one very directly affects the site.

215
00:14:03.250 --> 00:14:04.510
The whole thing where, uh,

216
00:14:08.320 --> 00:14:09.619
some random government

217
00:14:10.780 --> 00:14:11.799
decides that

218
00:14:12.400 --> 00:14:17.239
it's going to make a law that applies to every website in every country is,

219
00:14:19.940 --> 00:14:21.559
it's not scaling well,

220
00:14:25.090 --> 00:14:28.179
and it's not that Australia. I mean, Australia is the size of

221
00:14:28.580 --> 00:14:30.700
population wise, is the size of

222
00:14:30.950 --> 00:14:32.460
a medium US state.

223
00:14:33.830 --> 00:14:35.210
So this isn't, you know,

224
00:14:37.049 --> 00:14:39.280
a small Pacific Atoll or something.

225
00:14:44.520 --> 00:14:46.340
Ah, the whole thing is very strange.

226
00:14:47.440 --> 00:14:50.969
I would like to not ban Australia. I would miss Australians.

227
00:14:55.289 --> 00:14:56.549
So, all that aside,

228
00:14:58.989 --> 00:14:59.010
I

229
00:14:59.140 --> 00:15:01.969
wanted to do, uh, some pull request review.

230
00:15:02.849 --> 00:15:05.150
Oh, you know, let's swap that around,

231
00:15:05.460 --> 00:15:06.830
do a little out of order.

232
00:15:07.419 --> 00:15:10.750
I can do the other, uh, small bit, which is, this is Thanksgiving

233
00:15:12.690 --> 00:15:14.849
the, uh US holiday with,

234
00:15:15.650 --> 00:15:19.030
I mean, every US holiday everywhere has a complicated history.

235
00:15:19.950 --> 00:15:22.489
So we're gonna skip the meaning of the holiday

236
00:15:22.880 --> 00:15:25.750
and talk about the practical meaning of the holiday which is,

237
00:15:25.909 --> 00:15:27.390
have nice food with folks.

238
00:15:27.669 --> 00:15:30.489
Try and remember to, uh, enjoy things in your life.

239
00:15:31.760 --> 00:15:32.580
Don't ask

240
00:15:33.820 --> 00:15:37.080
lots of historical questions because you probably won't like the answers.

241
00:15:38.859 --> 00:15:39.239
Hm.

242
00:15:42.239 --> 00:15:45.260
So hopping back here to code,

243
00:15:47.539 --> 00:15:51.479
there was no movement on this one since the last stream. That's OK.

244
00:15:52.919 --> 00:15:53.809
And then

245
00:15:53.960 --> 00:15:56.669
action mailbox, you might remember

246
00:15:57.099 --> 00:15:58.289
a week ago.

247
00:15:58.500 --> 00:16:02.739
I left a review for this one. So I wanted to check in on this because

248
00:16:03.900 --> 00:16:06.390
GM had a minute to

249
00:16:07.169 --> 00:16:08.830
look at my couple of comments.

250
00:16:09.530 --> 00:16:13.309
I have glanced, but I didn't actually read

251
00:16:13.969 --> 00:16:15.349
his replies.

252
00:16:15.919 --> 00:16:17.270
So there was the one,

253
00:16:20.109 --> 00:16:23.409
ok. It says outdated. So presumably he incorporated that change

254
00:16:26.340 --> 00:16:29.469
and then I would suppose he rebased because

255
00:16:30.429 --> 00:16:32.289
there is a bunch of stuff here.

256
00:16:32.630 --> 00:16:34.530
Yeah, force pushed. Sure.

257
00:16:36.010 --> 00:16:37.309
So let's give it a quick scan.

258
00:16:37.320 --> 00:16:40.669
The other thing, I don't see the comment but it must have been rebased out

259
00:16:41.080 --> 00:16:45.070
was there was a to do comment left in the middle of the mailbox code.

260
00:16:45.640 --> 00:16:47.789
And if that is gone or explained,

261
00:16:48.260 --> 00:16:49.510
I will go ahead and

262
00:16:54.250 --> 00:16:58.950
yeah. So the to do was right here and I guess there wasn't anything extra.

263
00:17:00.809 --> 00:17:04.479
So we figure out if it's a comment, we figure out if the parent is a comment,

264
00:17:07.708 --> 00:17:09.769
if stuff is broken,

265
00:17:10.939 --> 00:17:13.800
we'll just kinda drop it in the bounced queue.

266
00:17:16.338 --> 00:17:17.739
We have to look at the

267
00:17:18.368 --> 00:17:19.118
oh man,

268
00:17:20.578 --> 00:17:22.198
years ago I

269
00:17:24.698 --> 00:17:26.279
made a

270
00:17:27.650 --> 00:17:30.800
ruby project to process mailing list archives

271
00:17:30.810 --> 00:17:32.510
because occasionally I like to read them.

272
00:17:32.949 --> 00:17:34.770
And so it would take a directory,

273
00:17:35.109 --> 00:17:36.349
well, take

274
00:17:36.699 --> 00:17:38.689
email in a bunch of forms and then try

275
00:17:38.699 --> 00:17:41.469
and figure out the threading which was fairly complicated.

276
00:17:41.800 --> 00:17:44.109
Yes, I've seen JW Z's algorithm.

277
00:17:44.670 --> 00:17:47.069
It is imperfect but a great start.

278
00:17:48.189 --> 00:17:49.010
And then

279
00:17:51.150 --> 00:17:52.930
every email client in the world.

280
00:17:53.130 --> 00:17:54.829
It's funny. Email is one of those

281
00:17:56.300 --> 00:17:57.579
long live standards.

282
00:17:57.589 --> 00:18:00.140
Where as soon as you open up the hood on something where you're like,

283
00:18:00.150 --> 00:18:01.469
this should be reasonable

284
00:18:02.310 --> 00:18:05.959
if you click reply in an email, how do I know which email you're replying to?

285
00:18:05.969 --> 00:18:08.390
And then you just immediately fall into

286
00:18:09.290 --> 00:18:13.260
40 years of legacy compatibility. Actually, it's longer with email.

287
00:18:13.270 --> 00:18:14.459
It's gotta be about 50 now.

288
00:18:18.819 --> 00:18:20.319
Asynchronous slack.

289
00:18:21.550 --> 00:18:22.329
Oh man,

290
00:18:25.609 --> 00:18:28.229
Slack is a Slack is one of those apps.

291
00:18:28.239 --> 00:18:31.469
I find a different bug in every single time I use it.

292
00:18:32.650 --> 00:18:34.000
They dragged me up the wall.

293
00:18:34.520 --> 00:18:35.109
Um

294
00:18:37.520 --> 00:18:38.020
It uh

295
00:18:39.319 --> 00:18:42.859
they keep putting all of their energy into weird collaboration

296
00:18:42.869 --> 00:18:46.349
features and then the actual but it's a chat room.

297
00:18:46.359 --> 00:18:48.010
I should be able to chat with people,

298
00:18:48.930 --> 00:18:51.390
the chatting features just don't work

299
00:18:52.349 --> 00:18:53.439
and her buggy

300
00:18:55.010 --> 00:18:55.560
and like

301
00:18:56.689 --> 00:18:58.479
I can just watch the UI

302
00:18:58.819 --> 00:19:00.420
slide around the app

303
00:19:01.260 --> 00:19:04.199
taking 200 milliseconds at a time to

304
00:19:04.560 --> 00:19:08.560
like update three or four times as I change from one channel to the other.

305
00:19:09.420 --> 00:19:10.079
It's just,

306
00:19:11.339 --> 00:19:15.199
it is the weirdest case of management prioritization where

307
00:19:16.619 --> 00:19:21.589
I I expect that they just keep wanting headline features to close deals instead of

308
00:19:22.800 --> 00:19:25.089
making the core thing work

309
00:19:30.489 --> 00:19:32.849
provided you use it in the browser. No, I can,

310
00:19:34.060 --> 00:19:35.849
I've seen so many browser bugs.

311
00:19:39.180 --> 00:19:40.079
Their app is

312
00:19:42.180 --> 00:19:42.469
Janer.

313
00:19:43.510 --> 00:19:44.810
I agree the app is Janer

314
00:19:44.949 --> 00:19:46.410
than the browser version but

315
00:19:48.189 --> 00:19:48.560
uh

316
00:20:00.510 --> 00:20:02.380
that's a totally reasonable couple of

317
00:20:03.079 --> 00:20:04.369
regular expressions

318
00:20:07.689 --> 00:20:11.099
looking at these. I just reread that classic. Um

319
00:20:14.489 --> 00:20:17.390
Actually, that would be a good one. If you have the day off,

320
00:20:22.010 --> 00:20:23.510
here's a classic,

321
00:20:23.819 --> 00:20:28.280
classic five year old, but still just such an excellent blog post

322
00:20:28.449 --> 00:20:29.260
about

323
00:20:30.260 --> 00:20:31.530
structure and code.

324
00:20:32.030 --> 00:20:34.109
It's probably a little more complicated than

325
00:20:35.229 --> 00:20:37.569
you could read while listening to me burble along.

326
00:20:37.579 --> 00:20:39.910
So just mute me if you wanna read it right now.

327
00:20:40.250 --> 00:20:42.000
But otherwise save it for the,

328
00:20:42.750 --> 00:20:44.170
it's a great holiday read.

329
00:20:46.410 --> 00:20:47.420
I put it on the,

330
00:20:48.180 --> 00:20:49.719
let's bring the show notes back up.

331
00:20:58.300 --> 00:20:59.670
She just um

332
00:21:00.119 --> 00:21:04.119
really nails with some clear examples. Um

333
00:21:05.439 --> 00:21:06.369
a great

334
00:21:06.979 --> 00:21:10.500
idea for how to think about code. And it's one of those where

335
00:21:12.479 --> 00:21:14.869
as I've interacted with junior developers a

336
00:21:15.219 --> 00:21:16.430
bunch of times

337
00:21:16.770 --> 00:21:20.239
they say, oh well, you know, I'm writing X and in my head,

338
00:21:20.790 --> 00:21:23.680
I can see like eight ways to write it and then I can't

339
00:21:23.689 --> 00:21:27.339
explain why I like one over the other and working with junior developers,

340
00:21:27.349 --> 00:21:31.310
which I started doing more of maybe 15 years ago, forced me to

341
00:21:33.099 --> 00:21:34.640
introspect a lot more

342
00:21:35.089 --> 00:21:38.890
and think about what it is that I like about a design versus another design.

343
00:21:38.900 --> 00:21:40.359
And how do I explain that?

344
00:21:40.819 --> 00:21:41.430
And

345
00:21:42.869 --> 00:21:45.849
explaining that forced me to get more rigorous about it and

346
00:21:46.050 --> 00:21:48.430
clear about the values even to myself.

347
00:21:48.439 --> 00:21:48.630
So,

348
00:21:48.640 --> 00:21:52.329
working with junior developers really made me a better programmer and this led to

349
00:21:53.430 --> 00:21:56.260
mostly that led to the Rails con talk I gave in.

350
00:21:56.390 --> 00:21:57.640
What was that? 2015?

351
00:21:58.959 --> 00:21:59.619
Um

352
00:22:00.520 --> 00:22:01.650
And this uh

353
00:22:02.099 --> 00:22:03.979
Lexi's Post here is

354
00:22:06.319 --> 00:22:08.339
exactly in that same vein. Of

355
00:22:08.810 --> 00:22:12.000
let's think through explicitly

356
00:22:12.199 --> 00:22:14.939
what's going on with this intuitive design decision.

357
00:22:15.640 --> 00:22:18.260
So I, I just love that post. It's a favorite.

358
00:22:21.270 --> 00:22:22.329
All right. So this is,

359
00:22:22.770 --> 00:22:26.189
this is the wild regular expression feature that I suggested. So

360
00:22:27.349 --> 00:22:28.130
that's in,

361
00:22:29.420 --> 00:22:30.349
that's fine.

362
00:22:33.599 --> 00:22:36.699
I occasionally get tempted to uncommon action text. And

363
00:22:38.130 --> 00:22:39.420
if we weren't a uh

364
00:22:40.719 --> 00:22:43.310
website that is aimed at programmers who are,

365
00:22:43.540 --> 00:22:44.780
I feel like mark down is

366
00:22:45.609 --> 00:22:48.859
ubiquitous enough that pretty much every programmer is comfortable with it.

367
00:22:50.729 --> 00:22:52.380
But action text is a little tempting,

368
00:22:54.790 --> 00:22:55.540
right? So

369
00:22:56.109 --> 00:22:56.939
there's that

370
00:22:57.739 --> 00:22:58.709
there's this

371
00:23:05.270 --> 00:23:06.810
active storage attachments.

372
00:23:13.160 --> 00:23:13.849
Oh,

373
00:23:14.119 --> 00:23:16.199
there's a topic um

374
00:23:18.660 --> 00:23:20.060
didn't put it on the um

375
00:23:20.239 --> 00:23:21.839
the stream topic list.

376
00:23:22.530 --> 00:23:26.189
So I'll think about this. I'll put it down for after

377
00:23:26.660 --> 00:23:27.339
um

378
00:23:29.989 --> 00:23:31.910
might be worth talking about Rail's credentials.

379
00:23:33.250 --> 00:23:36.959
So I see a few viewers have picked up real quiet here on a holiday. But

380
00:23:37.219 --> 00:23:41.420
since this is lobster's office hours, if you have any questions about the

381
00:23:42.020 --> 00:23:46.829
site or the community or the code base, feel free to

382
00:23:47.439 --> 00:23:48.790
ask any kind of questions.

383
00:23:50.079 --> 00:23:51.579
And even if you wanna,

384
00:23:53.270 --> 00:23:55.849
I should probably put it in the channel description, right? Like

385
00:23:56.209 --> 00:23:57.369
the queries thing of

386
00:23:58.050 --> 00:24:00.469
if you want to run queries against a production database,

387
00:24:01.959 --> 00:24:02.900
we can even do that.

388
00:24:05.199 --> 00:24:08.189
All right, then these tests are all

389
00:24:08.680 --> 00:24:11.349
the same. This is great. This is ready to go.

390
00:24:11.579 --> 00:24:12.709
There's that get help thing.

391
00:24:46.050 --> 00:24:47.150
This is actually

392
00:24:50.839 --> 00:24:53.939
thinking about this. This is safe to merge down, right?

393
00:24:54.359 --> 00:24:56.380
Because until

394
00:24:57.119 --> 00:24:58.060
I

395
00:24:59.459 --> 00:25:02.910
go in the answerable repo and change over the

396
00:25:06.849 --> 00:25:08.469
G sorry, any chance you're here

397
00:25:08.890 --> 00:25:09.709
or I'm sorry.

398
00:25:09.849 --> 00:25:10.780
Uh GM

399
00:25:11.459 --> 00:25:12.959
so many G's, I actually

400
00:25:13.510 --> 00:25:15.930
have a hard time remembering the difference between G

401
00:25:16.050 --> 00:25:16.119
so

402
00:25:16.290 --> 00:25:18.109
GM and G Wozniak.

403
00:25:22.030 --> 00:25:22.569
All right.

404
00:25:23.079 --> 00:25:26.890
Yeah, I can just merge this down because until I wire up

405
00:25:27.619 --> 00:25:30.319
post fix to deliver emails into it,

406
00:25:30.640 --> 00:25:32.270
it's just gonna sit here and hang out

407
00:25:33.209 --> 00:25:34.030
and then

408
00:25:34.420 --> 00:25:35.979
also

409
00:25:36.300 --> 00:25:39.390
I can test it from the command line myself.

410
00:25:40.189 --> 00:25:41.050
Bye.

411
00:25:42.839 --> 00:25:44.709
Putting an email in the post fix.

412
00:25:45.430 --> 00:25:45.439
Uh

413
00:25:46.400 --> 00:25:48.130
No, go a step higher.

414
00:25:49.439 --> 00:25:51.579
Yeah. So I contested in Prague before

415
00:25:53.069 --> 00:25:55.349
and I don't think there's anything wrong with this poor quest.

416
00:25:55.359 --> 00:25:57.930
It's just before I change over, I would really like to

417
00:25:58.239 --> 00:26:02.369
see it work because there's always, there's always those prod plumbing issues

418
00:26:03.329 --> 00:26:04.270
that was the uh

419
00:26:05.060 --> 00:26:08.920
the work from a previous stream I deployed that I just remembered a minute ago was

420
00:26:09.930 --> 00:26:12.469
I occasionally joke about how some of these raise the

421
00:26:12.479 --> 00:26:14.520
hair on the back of my neck or feel like they're

422
00:26:14.630 --> 00:26:16.469
more likely to break in prod

423
00:26:17.229 --> 00:26:17.949
and

424
00:26:18.189 --> 00:26:19.739
had a funny experience where

425
00:26:20.050 --> 00:26:22.930
the one I thought was gonna break prod was totally fine.

426
00:26:23.219 --> 00:26:24.849
And then the other one did

427
00:26:25.050 --> 00:26:26.119
break prod a bit.

428
00:26:27.449 --> 00:26:28.140
That's ok.

429
00:26:51.699 --> 00:26:52.959
Um Not very

430
00:26:53.270 --> 00:26:54.119
good but

431
00:27:02.140 --> 00:27:02.920
great.

432
00:27:04.680 --> 00:27:05.760
This is so nice

433
00:27:06.209 --> 00:27:07.339
to have this um

434
00:27:09.939 --> 00:27:11.150
rails plumbing done.

435
00:27:12.079 --> 00:27:14.609
It's funny, a big theme of

436
00:27:20.040 --> 00:27:24.609
a big theme of these recent

437
00:27:29.119 --> 00:27:31.119
pull request has been

438
00:27:31.989 --> 00:27:34.579
leaning more and more into rails features

439
00:27:34.890 --> 00:27:37.800
because Rails has picked up features for

440
00:27:38.930 --> 00:27:41.270
things that we had to do custom

441
00:27:43.979 --> 00:27:44.680
and

442
00:27:49.979 --> 00:27:52.040
as much as I've been pushing hard for it,

443
00:27:52.050 --> 00:27:58.119
the one place I really am increasingly tempted to lean away from it is Flex.

444
00:28:02.170 --> 00:28:03.709
Flex is a

445
00:28:03.939 --> 00:28:09.229
and it's a beta. The 2.0 release candidate just came out a couple of days ago.

446
00:28:09.589 --> 00:28:11.550
I know I've mentioned this on stream before.

447
00:28:14.800 --> 00:28:15.380
It's,

448
00:28:18.930 --> 00:28:19.790
let's see.

449
00:28:20.760 --> 00:28:22.589
How did I put it in that other?

450
00:28:25.300 --> 00:28:27.780
So it is a, a templating library

451
00:28:28.500 --> 00:28:29.319
or

452
00:28:33.550 --> 00:28:36.560
Ruby that allows you to

453
00:28:39.599 --> 00:28:40.459
just sort of

454
00:28:41.500 --> 00:28:43.599
uh it would replace er B

455
00:28:43.819 --> 00:28:47.859
and er B is a big pile of strings and not

456
00:28:48.180 --> 00:28:49.119
in a great way.

457
00:28:50.109 --> 00:28:52.640
So I said it over on, on blue sky that

458
00:28:53.969 --> 00:28:56.510
there was this thread I really liked. Let's

459
00:28:56.670 --> 00:28:59.660
just, I'll grab this, I'll share this so folks can click around.

460
00:29:00.150 --> 00:29:04.430
Uh Joel Draper here is the primary author of Flax

461
00:29:05.209 --> 00:29:05.869
and

462
00:29:08.099 --> 00:29:11.400
I said it's just Ruby all the right ways where

463
00:29:11.699 --> 00:29:12.520
it has

464
00:29:13.119 --> 00:29:16.280
less mental overhead because there's less stuff happening.

465
00:29:16.290 --> 00:29:20.180
You're not like context switching between strings in multiple languages.

466
00:29:20.699 --> 00:29:24.599
It's composable because it's Ruby, it's reusable because it's Ruby

467
00:29:25.030 --> 00:29:27.719
the tooling. Like instead of

468
00:29:29.099 --> 00:29:31.130
we get no linting on our

469
00:29:31.459 --> 00:29:35.439
b, I've been hesitant to add it because it's really complicated and

470
00:29:36.599 --> 00:29:38.489
the value is maybe not there.

471
00:29:39.310 --> 00:29:40.160
And then

472
00:29:40.689 --> 00:29:45.010
uh Joel also had a talk about safety where because

473
00:29:46.660 --> 00:29:53.160
Flex really does not work by slapping strings together in the way er B does.

474
00:29:57.010 --> 00:29:59.920
Flex allows a lot

475
00:30:00.239 --> 00:30:02.869
better safety around

476
00:30:03.119 --> 00:30:04.310
cross site scripting.

477
00:30:06.949 --> 00:30:07.619
So

478
00:30:08.189 --> 00:30:09.930
let me jump in. Um

479
00:30:11.900 --> 00:30:12.479
come here,

480
00:30:13.760 --> 00:30:14.849
where is my

481
00:30:16.890 --> 00:30:18.319
always hate this floating

482
00:30:20.060 --> 00:30:22.010
headers and footers that cover the page.

483
00:30:22.959 --> 00:30:23.560
So

484
00:30:23.930 --> 00:30:27.500
Flex has no dependencies. It's 2100 lines of standard ruby

485
00:30:28.709 --> 00:30:31.150
EB is not 2150 lines

486
00:30:31.530 --> 00:30:32.449
and it is not

487
00:30:34.199 --> 00:30:36.010
small and straightforward.

488
00:30:36.020 --> 00:30:39.849
I've gone into the air B code base a couple of times and it's, it's not bad.

489
00:30:39.859 --> 00:30:41.079
I'm not trying to insult it

490
00:30:41.699 --> 00:30:43.689
but it is complicated. It is

491
00:30:44.520 --> 00:30:45.969
a little bit of a climb

492
00:30:46.150 --> 00:30:49.030
and I've read a little bit of the flex code and it's just,

493
00:30:50.510 --> 00:30:52.410
there's very, very little magic.

494
00:30:53.550 --> 00:30:54.300
And

495
00:30:54.569 --> 00:30:56.300
so this person

496
00:30:56.459 --> 00:30:58.959
came along and had a couple of questions around

497
00:31:02.989 --> 00:31:07.880
what things look like. So they wrote themselves a helper called Simple Table

498
00:31:09.209 --> 00:31:12.680
or maybe this is from some gem I've never heard of called Simple Table.

499
00:31:12.689 --> 00:31:13.550
It doesn't matter

500
00:31:14.329 --> 00:31:17.030
where they passed in some records and then

501
00:31:17.900 --> 00:31:19.359
I guess they have columns.

502
00:31:19.540 --> 00:31:23.359
This is the list of columns and then it's gonna iterate over the records and print,

503
00:31:24.020 --> 00:31:28.890
you know, for each record call, record dot employee or record dot unit price

504
00:31:29.229 --> 00:31:30.719
and then build up a table

505
00:31:31.150 --> 00:31:32.030
which,

506
00:31:32.500 --> 00:31:33.560
ok, like

507
00:31:34.119 --> 00:31:35.670
this is fine,

508
00:31:37.689 --> 00:31:38.619
but it's sort of

509
00:31:39.369 --> 00:31:44.290
like, is this really er B at this point? No, this is pretty much just straight ruby.

510
00:31:44.300 --> 00:31:47.579
The only er B feature that's getting used here is

511
00:31:49.849 --> 00:31:52.239
we're gonna call these functions and slap them together.

512
00:31:52.250 --> 00:31:54.979
You will be almost might not as well be used here,

513
00:31:54.989 --> 00:31:58.150
but you have to have this special syntax before and after.

514
00:32:03.609 --> 00:32:04.859
Uh yeah, it's

515
00:32:05.069 --> 00:32:05.079
a

516
00:32:06.890 --> 00:32:07.670
partial.

517
00:32:08.260 --> 00:32:08.949
So this is

518
00:32:09.709 --> 00:32:10.359
he says you

519
00:32:10.500 --> 00:32:12.250
be, but he means

520
00:32:12.969 --> 00:32:15.780
action view here because this whole thing with

521
00:32:16.459 --> 00:32:19.109
how render builds on this stuff is

522
00:32:23.229 --> 00:32:24.760
happening in action view, not

523
00:32:25.000 --> 00:32:25.410
B

524
00:32:26.280 --> 00:32:26.939
and so

525
00:32:27.739 --> 00:32:30.420
Joel kind of ported his thing to,

526
00:32:30.949 --> 00:32:31.280
all right.

527
00:32:31.290 --> 00:32:34.569
Well, like if you just made a simple table component in flex,

528
00:32:34.579 --> 00:32:35.949
this is what it would look like.

529
00:32:37.500 --> 00:32:39.280
And it's basically the same code

530
00:32:42.640 --> 00:32:45.670
where it's like, OK, well, we have all these records, we're gonna loop them,

531
00:32:45.680 --> 00:32:47.099
we're gonna call the block for each.

532
00:32:48.160 --> 00:32:50.459
You can imagine what this is gonna look like. He doesn't

533
00:32:50.900 --> 00:32:51.739
give the

534
00:32:52.589 --> 00:32:53.729
components. But

535
00:32:55.050 --> 00:32:59.750
once you've read the 101 for Flex, you can kind of write them in your head

536
00:33:02.670 --> 00:33:03.609
and he gave

537
00:33:05.010 --> 00:33:06.170
maybe a slightly

538
00:33:06.750 --> 00:33:08.390
better example where

539
00:33:11.650 --> 00:33:14.420
this is what the Flex would look like and this is what the

540
00:33:14.530 --> 00:33:15.560
B would look like.

541
00:33:15.910 --> 00:33:18.449
And I think that he likes it in the

542
00:33:18.709 --> 00:33:19.349
B,

543
00:33:20.359 --> 00:33:24.540
you're just directly writing the html. It's kind of nice to be direct.

544
00:33:25.030 --> 00:33:26.900
But then again, you have to know

545
00:33:27.150 --> 00:33:29.939
this syntax and you have to know this syntax

546
00:33:30.439 --> 00:33:31.810
and all of this is string

547
00:33:31.949 --> 00:33:34.880
munging. And so like right here, either

548
00:33:35.180 --> 00:33:36.369
action view

549
00:33:37.430 --> 00:33:38.000
and

550
00:33:40.369 --> 00:33:41.550
Brakeman

551
00:33:41.760 --> 00:33:43.369
protect you from

552
00:33:45.219 --> 00:33:46.560
CS S injection

553
00:33:48.229 --> 00:33:49.300
or they don't

554
00:33:50.079 --> 00:33:52.550
and it's not at all visible and they have

555
00:33:52.560 --> 00:33:55.140
to know the context and you're kind of guessing that

556
00:33:56.010 --> 00:33:58.989
cause this percent equals, you could use it here

557
00:33:59.849 --> 00:34:00.300
in

558
00:34:00.540 --> 00:34:03.810
html text or you could use it here in like, you know,

559
00:34:03.819 --> 00:34:06.280
tr class equals column dot whatever.

560
00:34:09.040 --> 00:34:09.580
And so

561
00:34:10.629 --> 00:34:12.668
Joel did this really clever

562
00:34:13.688 --> 00:34:17.309
comparison where on the left here is the flex version of,

563
00:34:17.688 --> 00:34:19.618
well, if you kinda uncross your eyes,

564
00:34:19.628 --> 00:34:23.018
what actual feature is happening on these lines and you can see that

565
00:34:23.830 --> 00:34:25.570
these method calls

566
00:34:26.139 --> 00:34:27.770
and the IVAR look up

567
00:34:28.399 --> 00:34:29.280
and the block,

568
00:34:29.989 --> 00:34:31.050
these match

569
00:34:31.610 --> 00:34:32.610
that list of

570
00:34:33.270 --> 00:34:35.580
T head T RT D at

571
00:34:36.469 --> 00:34:37.250
column

572
00:34:38.458 --> 00:34:39.989
dot each with a block,

573
00:34:40.850 --> 00:34:41.350
right?

574
00:34:41.478 --> 00:34:43.750
You can see the, the shape of it matches

575
00:34:45.418 --> 00:34:48.197
and he says, well, there's one language, it's Ruby,

576
00:34:48.358 --> 00:34:50.158
you don't change to another language.

577
00:34:50.768 --> 00:34:51.829
It's a little bit of

578
00:34:51.958 --> 00:34:56.079
fib, you gotta know that you're output html, but that's, that's OK. That's fine.

579
00:34:57.419 --> 00:35:00.600
I have our look up, you do one of those, you have some method calls

580
00:35:01.300 --> 00:35:06.159
so you're not using a lot of language features. This is a smaller vocabulary.

581
00:35:07.010 --> 00:35:11.790
And then on the right here's the er B version that Gregory gave where

582
00:35:12.310 --> 00:35:14.290
there's the raw string, the raw string.

583
00:35:14.919 --> 00:35:15.550
Then

584
00:35:16.360 --> 00:35:19.280
after this syntax, you're changing into

585
00:35:19.810 --> 00:35:24.739
this er B context and you have to know that er B can handle

586
00:35:27.000 --> 00:35:28.580
what's effectively

587
00:35:29.800 --> 00:35:32.419
a string of Ruby that's gonna get

588
00:35:32.780 --> 00:35:33.100
veiled.

589
00:35:33.870 --> 00:35:34.570
And then

590
00:35:34.850 --> 00:35:36.370
this end down here,

591
00:35:38.530 --> 00:35:41.189
you know, if you've never looked at the er B source,

592
00:35:41.199 --> 00:35:45.070
it's worth looking at because something very clever is happening

593
00:35:45.620 --> 00:35:47.139
to make it possible

594
00:35:47.320 --> 00:35:47.850
to

595
00:35:48.659 --> 00:35:49.070
like

596
00:35:49.290 --> 00:35:50.159
email code

597
00:35:50.879 --> 00:35:53.969
with a raw string in the middle and run this all together.

598
00:35:55.899 --> 00:35:56.719
If you haven't,

599
00:35:57.379 --> 00:35:59.439
I it's, it's really worth a read.

600
00:35:59.449 --> 00:36:01.149
I don't wanna deep dive it now cause I'm

601
00:36:01.159 --> 00:36:03.199
trying to keep this stream short cause I've got

602
00:36:03.399 --> 00:36:03.840
like

603
00:36:04.850 --> 00:36:07.629
put some buns in the oven and that kind of stuff, but

604
00:36:10.370 --> 00:36:13.989
just an enormous amount goes on under the hood to make that work.

605
00:36:14.000 --> 00:36:18.340
And it's weird to look at where you're switching languages

606
00:36:19.100 --> 00:36:21.120
and I think Joel correctly

607
00:36:21.659 --> 00:36:23.000
highlights it here.

608
00:36:24.620 --> 00:36:28.459
Uh Well, you're working in two languages and I think you were before but

609
00:36:28.659 --> 00:36:30.639
you change in and out of the languages a bunch

610
00:36:30.649 --> 00:36:33.179
of times you use a whole bunch of different elements,

611
00:36:33.189 --> 00:36:35.179
you got different syntax, you've got

612
00:36:35.649 --> 00:36:39.879
the same amount of eye bars and lookups, but you've got all this extra stuff on top.

613
00:36:42.129 --> 00:36:43.429
So as much as I'm

614
00:36:45.850 --> 00:36:46.209
Yas

615
00:36:46.399 --> 00:36:47.739
finding the uh

616
00:36:50.840 --> 00:36:54.320
app more and more to be closer and closer to just

617
00:36:54.739 --> 00:36:56.060
stock rails,

618
00:36:56.810 --> 00:36:58.780
I keep getting tempted by flex.

619
00:37:08.750 --> 00:37:11.979
One of the things that's really impressive about flex is

620
00:37:12.739 --> 00:37:14.350
and I've, I've played with this a bit.

621
00:37:14.780 --> 00:37:16.270
It's really easy

622
00:37:16.850 --> 00:37:17.320
to,

623
00:37:17.679 --> 00:37:19.800
you don't have to do a big bang migration.

624
00:37:20.100 --> 00:37:24.870
You can do a partial migration like one component at a time.

625
00:37:26.899 --> 00:37:30.399
So that is the, the Siren song that keeps singing to me

626
00:37:31.199 --> 00:37:32.820
and pulling me away from

627
00:37:33.729 --> 00:37:38.909
rails aside from the general annoyance with rails. And that one guy who

628
00:37:41.639 --> 00:37:42.870
keeps wanting attention,

629
00:37:44.739 --> 00:37:46.399
not gonna rant about him on stream.

630
00:37:48.959 --> 00:37:49.770
So,

631
00:37:51.459 --> 00:37:55.320
got two pull requests from a first time contributor,

632
00:37:56.229 --> 00:37:57.479
Ashwin 47.

633
00:38:00.330 --> 00:38:01.679
Oh, what a super for.

634
00:38:02.850 --> 00:38:04.989
Turn your Discord into an open form.

635
00:38:05.570 --> 00:38:06.389
Oh, interesting.

636
00:38:11.669 --> 00:38:13.280
And I guess it's something that

637
00:38:14.000 --> 00:38:15.800
he is actively working on.

638
00:38:18.030 --> 00:38:18.899
That's pretty clever.

639
00:38:21.419 --> 00:38:24.360
I suppose he likes forums if he's over here contributing.

640
00:38:26.689 --> 00:38:28.469
So I picked today as pull requests

641
00:38:30.570 --> 00:38:31.260
and

642
00:38:34.820 --> 00:38:37.159
this first one is,

643
00:38:39.800 --> 00:38:40.610
it's searching

644
00:38:42.229 --> 00:38:43.110
where

645
00:38:44.419 --> 00:38:46.169
it's kind of a parsing hassle.

646
00:38:47.300 --> 00:38:48.379
But I've been trying to,

647
00:38:48.389 --> 00:38:53.639
to throw in different shapes of feature requests and bug fixes to the

648
00:38:53.949 --> 00:38:55.080
issue tracker

649
00:38:58.209 --> 00:38:59.310
cause a lot of stuff,

650
00:39:01.310 --> 00:39:05.840
a lot of stuff just hangs out here and people don't pick it up. But the things that are

651
00:39:06.780 --> 00:39:10.030
kind of plumbing shaped or have interesting

652
00:39:10.219 --> 00:39:13.320
CS puzzles seem people seem to pick up and like them.

653
00:39:13.840 --> 00:39:17.459
So I'm trying to post more of those. So this one was,

654
00:39:17.739 --> 00:39:19.989
it would be neat if when you search for stuff,

655
00:39:20.219 --> 00:39:22.520
it had mark tags around it to highlight it.

656
00:39:23.729 --> 00:39:24.310
But

657
00:39:26.060 --> 00:39:27.949
there is one big hassle

658
00:39:28.199 --> 00:39:29.909
and I wrote about it here. A corner case

659
00:39:31.110 --> 00:39:32.760
if you search for

660
00:39:33.639 --> 00:39:35.979
not a single term but a quoted term

661
00:39:38.600 --> 00:39:41.620
that ignores punctuation that are in the original markdown,

662
00:39:41.750 --> 00:39:42.580
let alone

663
00:39:43.689 --> 00:39:45.189
output in the html.

664
00:39:48.449 --> 00:39:51.010
So if you search for a phrase that

665
00:39:51.449 --> 00:39:53.149
is split across

666
00:39:55.100 --> 00:39:56.040
elements,

667
00:39:56.610 --> 00:39:59.080
it would be really nice to still highlight that.

668
00:39:59.540 --> 00:40:01.340
And so the search engine can't

669
00:40:01.479 --> 00:40:02.580
just be

670
00:40:04.629 --> 00:40:06.530
find the text and the page and

671
00:40:06.830 --> 00:40:07.570
highlight it.

672
00:40:14.989 --> 00:40:15.899
However,

673
00:40:16.760 --> 00:40:18.250
Ashwin left a comment that

674
00:40:19.020 --> 00:40:20.600
they missed that corner case.

675
00:40:21.129 --> 00:40:21.860
And so they,

676
00:40:22.439 --> 00:40:24.320
he did do the

677
00:40:24.770 --> 00:40:26.320
kind of naive version of it.

678
00:40:34.080 --> 00:40:36.159
So, you know, painting the bike shed

679
00:40:38.090 --> 00:40:41.909
a less nuclear color would be nice. That's fine. That's not a big deal.

680
00:40:43.580 --> 00:40:45.969
I like to be soft in the corners on it though.

681
00:40:50.760 --> 00:40:54.000
So basically he takes the search terms

682
00:40:54.639 --> 00:40:56.870
and he makes a regular expression

683
00:40:57.219 --> 00:40:58.120
out of them

684
00:41:08.439 --> 00:41:09.199
and then

685
00:41:10.050 --> 00:41:12.550
join stuff together

686
00:41:12.979 --> 00:41:15.070
so that he gets one regular expression,

687
00:41:15.959 --> 00:41:20.689
which all right, this is, this is pretty reasonable. I'm

688
00:41:22.699 --> 00:41:22.709
a

689
00:41:22.860 --> 00:41:27.189
little suspicious of this and would wanna see a test or two that

690
00:41:27.939 --> 00:41:29.600
punctuation would work.

691
00:41:32.129 --> 00:41:34.179
It really encodes a

692
00:41:35.330 --> 00:41:36.919
assumption about terms,

693
00:41:38.989 --> 00:41:43.199
I suppose, Redex dot escape handles it. But then there was something else that

694
00:41:43.939 --> 00:41:44.590
didn't.

695
00:41:45.969 --> 00:41:49.419
So we added this highlight search terms helper.

696
00:41:55.530 --> 00:41:55.939
Mm

697
00:41:58.879 --> 00:42:01.459
And then there's a bunch of stuff to thread it through

698
00:42:02.790 --> 00:42:03.800
the uh

699
00:42:04.209 --> 00:42:05.820
the various functions

700
00:42:06.459 --> 00:42:08.010
or the various templates.

701
00:42:13.169 --> 00:42:16.820
And it really, it caught my eye that he calls strip operators. Here.

702
00:42:17.719 --> 00:42:17.739
I

703
00:42:17.840 --> 00:42:19.610
gotta go look at the search model.

704
00:42:21.310 --> 00:42:21.929
So

705
00:42:25.979 --> 00:42:26.000
I

706
00:42:26.110 --> 00:42:27.229
started the darn

707
00:42:28.500 --> 00:42:30.959
them from the wrong buffer. Come here.

708
00:42:32.020 --> 00:42:35.610
I'm not gonna chase that around all stream. That's my uh my blog directory

709
00:42:35.770 --> 00:42:37.560
mean to start from the

710
00:42:39.600 --> 00:42:40.810
lobster source code.

711
00:42:50.590 --> 00:42:52.290
So we have a

712
00:42:52.770 --> 00:42:57.689
search parser that kind of parses an A ST out of the search to find operators like

713
00:42:58.050 --> 00:42:59.129
searching in the title

714
00:43:02.979 --> 00:43:06.439
and it splits things out into like terms and quoted

715
00:43:06.659 --> 00:43:09.479
which are the the parts of the search for, how to search them.

716
00:43:10.389 --> 00:43:10.929
And then

717
00:43:11.080 --> 00:43:14.969
strip operators is my least favorite part of the code.

718
00:43:14.979 --> 00:43:17.050
So I was really surprised to see it mentioned

719
00:43:17.830 --> 00:43:18.810
because

720
00:43:25.610 --> 00:43:26.709
this is

721
00:43:28.239 --> 00:43:30.889
not the same abstraction

722
00:43:31.139 --> 00:43:31.750
as

723
00:43:34.360 --> 00:43:35.449
I mean, this is the

724
00:43:35.770 --> 00:43:36.659
Oh Hey Hegy.

725
00:43:37.510 --> 00:43:42.689
So I was talking about one of the things I liked about flex is it can do context aware

726
00:43:43.469 --> 00:43:44.260
escaping.

727
00:43:45.310 --> 00:43:48.169
And this is sort of the opposite of that where

728
00:43:49.370 --> 00:43:49.860
it's

729
00:43:50.649 --> 00:43:53.070
just kind of slapping strings around.

730
00:43:54.290 --> 00:43:55.219
And so

731
00:43:56.419 --> 00:44:00.979
I'm just trying to match the databases ideas of what characters have to

732
00:44:00.989 --> 00:44:04.429
be escaped when you are searching in a string in boolean mode.

733
00:44:04.800 --> 00:44:07.110
And then it's nested inside of quotes.

734
00:44:08.879 --> 00:44:10.899
It is so hard to trust this code.

735
00:44:11.409 --> 00:44:12.250
I've put it off

736
00:44:13.080 --> 00:44:16.419
tests around it that I'm comfortable with it in production,

737
00:44:17.979 --> 00:44:21.379
but that it's actually an unusually large amount of tests

738
00:44:21.709 --> 00:44:23.419
for our code base.

739
00:44:23.709 --> 00:44:24.320
And

740
00:44:27.419 --> 00:44:28.030
I just,

741
00:44:30.070 --> 00:44:33.850
I hate that sequel is a string instead of a structured thing.

742
00:44:37.399 --> 00:44:40.060
If somebody would like to port link

743
00:44:40.370 --> 00:44:42.260
to Ruby, that would be very nice.

744
00:44:42.649 --> 00:44:45.459
That's almost Ruby object mapper.

745
00:44:46.070 --> 00:44:46.459
But

746
00:44:47.709 --> 00:44:48.090
yeah,

747
00:44:52.679 --> 00:44:56.860
so I was really surprised that he calls that strip operators.

748
00:44:57.709 --> 00:44:59.729
I think he's trying to get

749
00:45:00.909 --> 00:45:01.459
to,

750
00:45:02.000 --> 00:45:05.520
to switch between. What is the user searching

751
00:45:06.419 --> 00:45:06.959
input.

752
00:45:07.939 --> 00:45:08.479
Yeah,

753
00:45:08.969 --> 00:45:09.290
I mean,

754
00:45:09.300 --> 00:45:13.689
my favorite part of C# is how they keep stealing functional programming ideas from

755
00:45:16.010 --> 00:45:16.840
F sharp.

756
00:45:18.820 --> 00:45:20.709
All right. Not stealing, obviously

757
00:45:20.919 --> 00:45:22.899
boarding, migrating, translating

758
00:45:24.669 --> 00:45:27.370
and link is one of those. And it is such a good idea.

759
00:45:36.649 --> 00:45:39.550
I suppose this is the one place in the code.

760
00:45:44.090 --> 00:45:45.830
So it tracks

761
00:45:45.939 --> 00:45:49.360
the input that's cue the query variable,

762
00:45:50.909 --> 00:45:54.929
but it doesn't really have an internal abstraction layer of

763
00:45:57.669 --> 00:46:02.189
how that translates into a query. This class kind of is that abstraction layer.

764
00:46:03.419 --> 00:46:06.560
So I guess that makes sense that he called strip operators

765
00:46:07.929 --> 00:46:11.219
to know what's the thing that's gonna actually end up in the query?

766
00:46:17.840 --> 00:46:18.260
Just

767
00:46:19.560 --> 00:46:22.449
there's something about it that rubs me the wrong way seeing.

768
00:46:31.050 --> 00:46:32.649
So let's think about what it's gonna do.

769
00:46:33.169 --> 00:46:35.540
So if somebody searches for

770
00:46:49.250 --> 00:46:50.659
it translates

771
00:46:51.520 --> 00:46:53.340
or I guess it escapes,

772
00:46:53.520 --> 00:46:54.340
what do we call it

773
00:46:55.469 --> 00:46:56.409
formats?

774
00:46:58.669 --> 00:47:00.590
FDF

775
00:47:01.320 --> 00:47:02.860
kind of build up a table here.

776
00:47:03.989 --> 00:47:07.370
Like if you have an input with nothing interesting, it's just translated.

777
00:47:07.699 --> 00:47:08.850
You have, can't

778
00:47:09.530 --> 00:47:11.709
let me get rid of these quotes or this is gonna become

779
00:47:13.139 --> 00:47:13.840
confusing

780
00:47:17.139 --> 00:47:18.629
that still becomes can't.

781
00:47:19.850 --> 00:47:21.590
But if you search for

782
00:47:23.969 --> 00:47:25.439
like food

783
00:47:26.280 --> 00:47:27.159
bar

784
00:47:27.770 --> 00:47:28.750
that turns into

785
00:47:29.000 --> 00:47:29.189
a boo

786
00:47:29.439 --> 00:47:30.219
bar,

787
00:47:33.639 --> 00:47:36.179
we do not pass that punctuation through.

788
00:47:36.370 --> 00:47:37.659
And then obviously the

789
00:47:38.199 --> 00:47:41.939
the scary one is something more like this where

790
00:47:42.709 --> 00:47:47.489
if someone passed a single quote or a double quote through, we really,

791
00:47:48.159 --> 00:47:52.139
we don't even wanna try matching the perfect level of escaping,

792
00:47:52.300 --> 00:47:55.060
especially because it's just gonna get thrown away.

793
00:48:02.679 --> 00:48:05.139
And so when we're choosing what to highlight,

794
00:48:14.360 --> 00:48:16.969
when we're choosing what to highlight on the page.

795
00:48:19.120 --> 00:48:19.739
If

796
00:48:21.139 --> 00:48:21.709
come here,

797
00:48:23.620 --> 00:48:25.010
let's go look at the uh

798
00:48:27.820 --> 00:48:30.479
text here again. Now, I would like to see my example.

799
00:48:39.870 --> 00:48:43.290
So someone searched for types, comma whatever

800
00:48:49.429 --> 00:48:51.620
or they just searched for types comma

801
00:48:53.110 --> 00:48:56.689
the actual search executed would only look for the word types.

802
00:48:59.540 --> 00:49:02.699
And I think it's better to highlight

803
00:49:02.850 --> 00:49:04.479
and not include the comma

804
00:49:07.610 --> 00:49:10.070
cause we're not actually using it anyways.

805
00:49:12.530 --> 00:49:14.479
So here in my demo

806
00:49:15.399 --> 00:49:20.050
and I generated this demo by just editing the html in the inspector.

807
00:49:22.810 --> 00:49:24.939
You know, there's another possibility there

808
00:49:25.120 --> 00:49:25.830
of

809
00:49:28.689 --> 00:49:32.780
what is making some of these recent issues more attractive than others.

810
00:49:34.209 --> 00:49:38.550
And I guess one of the issues or one of the differences here is not just

811
00:49:39.080 --> 00:49:41.689
you're playing with the parser, it's kind of a CS problem,

812
00:49:42.310 --> 00:49:43.229
but also

813
00:49:44.129 --> 00:49:48.300
there's mock ups. It is very clear what the output is going to be.

814
00:49:50.719 --> 00:49:55.780
So I made this by hand and I highlighted the period just because it was there.

815
00:49:55.790 --> 00:49:57.060
And I was thinking of,

816
00:49:57.510 --> 00:49:57.719
well,

817
00:49:57.729 --> 00:49:59.979
if you found the start of the search term and then you found the

818
00:49:59.989 --> 00:50:02.939
end of the search term and you highlighted everything between you'd be fine.

819
00:50:03.679 --> 00:50:07.530
But if they had highlighted just correctly and sometimes

820
00:50:09.500 --> 00:50:12.780
it's a little funny that that period would be hanging out here.

821
00:50:12.790 --> 00:50:14.719
And if we imagine that um

822
00:50:15.560 --> 00:50:19.750
they were quoting a fellow Gen Xer who ended with a ellipse,

823
00:50:19.870 --> 00:50:21.580
you know, so if this ended dot dot dot

824
00:50:22.389 --> 00:50:25.090
It would be a little more obvious that the dot is

825
00:50:26.459 --> 00:50:28.439
not getting highlighted but

826
00:50:28.600 --> 00:50:30.679
that would be fine.

827
00:50:33.209 --> 00:50:35.840
It doesn't feel like it's incorrect or misleading.

828
00:50:35.850 --> 00:50:38.840
We're, we're kind of indicating what actual search happened.

829
00:50:40.189 --> 00:50:44.320
I think I'm talking myself into the use of strip operators being ok.

830
00:50:44.989 --> 00:50:46.209
And the result of

831
00:50:47.060 --> 00:50:49.080
finding these terms without.

832
00:50:51.219 --> 00:50:51.590
Yeah.

833
00:50:58.310 --> 00:50:58.989
Yeah. OK.

834
00:51:03.250 --> 00:51:04.050
All right. So if

835
00:51:06.620 --> 00:51:09.370
strip operators is fine,

836
00:51:10.629 --> 00:51:12.600
a little weird but fine,

837
00:51:24.600 --> 00:51:25.419
then I see.

838
00:51:27.570 --> 00:51:28.620
Why would the

839
00:51:30.010 --> 00:51:31.330
rent the seas get

840
00:51:33.129 --> 00:51:34.030
highlighted

841
00:51:38.919 --> 00:51:42.260
cause they get escaped but these get thrown away.

842
00:51:44.770 --> 00:51:46.379
Yeah, I don't understand that test

843
00:51:47.479 --> 00:51:48.719
and I have to come back to that.

844
00:51:56.149 --> 00:51:57.850
Yeah, I think my only gripe is

845
00:52:03.280 --> 00:52:05.360
guest strip operators is public.

846
00:52:08.219 --> 00:52:09.719
It feels weird.

847
00:52:10.590 --> 00:52:10.969
Yeah.

848
00:52:14.879 --> 00:52:15.739
All right. So

849
00:52:18.370 --> 00:52:19.550
I'll take the

850
00:52:20.320 --> 00:52:21.649
search model

851
00:52:21.889 --> 00:52:22.530
said it

852
00:52:23.280 --> 00:52:24.379
exposes,

853
00:52:32.530 --> 00:52:35.010
I guess the thing that confuses me here is

854
00:52:36.139 --> 00:52:36.959
it's using

855
00:52:37.469 --> 00:52:40.360
poems very directly instead of

856
00:52:41.629 --> 00:52:42.770
instead of using

857
00:52:45.370 --> 00:52:46.159
the

858
00:52:52.300 --> 00:52:53.570
search dot QE

859
00:52:54.320 --> 00:52:56.600
and it is readable. So yeah,

860
00:52:57.649 --> 00:52:59.399
let's just go ahead and make that a suggestion.

861
00:53:00.780 --> 00:53:02.169
I guess the part that really

862
00:53:02.629 --> 00:53:05.080
there's like so many layers of abstraction happening

863
00:53:14.070 --> 00:53:15.659
and then does it make sense

864
00:53:16.199 --> 00:53:16.929
or?

865
00:53:25.340 --> 00:53:27.409
So strip operators works on a single

866
00:53:29.870 --> 00:53:33.800
works on a single string. You can't actually pass in an array like

867
00:53:34.080 --> 00:53:34.889
he does.

868
00:53:44.689 --> 00:53:45.110
Yeah.

869
00:54:08.270 --> 00:54:09.489
Yeah. I guess the thing that

870
00:54:10.000 --> 00:54:13.889
most bugs me is he's kind of recreating some of the search work.

871
00:54:16.479 --> 00:54:18.939
So here we build up this terms array

872
00:54:19.419 --> 00:54:21.189
when we're doing a comment search

873
00:54:21.610 --> 00:54:23.689
because there are many kinds of operator.

874
00:54:24.820 --> 00:54:27.360
And I think what we actually want is to say,

875
00:54:32.419 --> 00:54:35.050
let's loop the parse tree

876
00:54:37.649 --> 00:54:38.419
and

877
00:54:40.540 --> 00:54:42.760
for the term or catchalls

878
00:54:43.330 --> 00:54:44.800
we'll call strip on it.

879
00:54:46.270 --> 00:54:47.139
And then, yeah.

880
00:54:48.959 --> 00:54:49.560
So

881
00:55:03.739 --> 00:55:06.320
what was the name of that function? I can see it off screen.

882
00:55:41.320 --> 00:55:41.500
Hm.

883
00:55:47.020 --> 00:55:47.050
Ok.

884
00:56:03.389 --> 00:56:03.459
I

885
00:56:04.199 --> 00:56:04.489
hope

886
00:56:06.719 --> 00:56:08.139
actually this should just be on the,

887
00:56:08.959 --> 00:56:09.379
yeah,

888
00:57:34.469 --> 00:57:35.580
operators.

889
00:57:36.510 --> 00:57:37.020
All right.

890
00:58:25.139 --> 00:58:25.919
Maybe.

891
00:58:36.699 --> 00:58:37.439
Yeah,

892
00:58:37.590 --> 00:58:39.229
I'll let him come up with his own name.

893
00:58:54.790 --> 00:58:55.459
Here we are.

894
00:58:56.290 --> 00:58:58.729
Hopefully that kind of nudges him towards a uh

895
00:58:59.070 --> 00:59:00.389
functional style.

896
00:59:02.750 --> 00:59:06.850
I don't think I need to be explicit because I can see a few ways to do this

897
00:59:07.399 --> 00:59:10.290
and if it's got a good obstruction on it, it is. OK.

898
01:00:08.969 --> 01:00:09.629
Here we go.

899
01:00:11.090 --> 01:00:12.139
I'm trying to,

900
01:00:12.699 --> 01:00:18.110
I am hedging a little to avoid saying you have to deal with quoted for this pr versus

901
01:00:18.820 --> 01:00:22.760
I will take it without, I'm not totally ready to commit because I can't

902
01:00:23.399 --> 01:00:26.439
imagine yet what the whole thing will look like.

903
01:00:31.600 --> 01:00:34.419
This is. This is a pretty decent start.

904
01:01:15.389 --> 01:01:15.879
I know

905
01:01:17.189 --> 01:01:18.360
strip note that

906
01:01:19.110 --> 01:01:20.090
punctuation.

907
01:01:29.219 --> 01:01:29.590
So

908
01:03:03.919 --> 01:03:05.229
yeah, I guess part of this is

909
01:03:05.879 --> 01:03:06.959
let me say that

910
01:03:36.320 --> 01:03:38.340
the understanding

911
01:03:40.550 --> 01:03:42.830
uh search syntax

912
01:03:43.060 --> 01:03:47.060
and how to format term stays within the search.

913
01:03:51.280 --> 01:03:54.379
I can hear my spouse starting to knock around in the kitchen. So we're

914
01:03:55.229 --> 01:03:59.149
immediately starting to wind up towards the end of this stream.

915
01:03:59.159 --> 01:04:03.510
Even if it's only been an hour, I'm not gonna hang up in the next five minutes,

916
01:04:03.520 --> 01:04:05.649
but in the next 30.

917
01:04:06.699 --> 01:04:07.719
So let me.

918
01:04:09.699 --> 01:04:10.199
Yeah.

919
01:04:12.479 --> 01:04:13.120
OK.

920
01:04:19.290 --> 01:04:20.100
I think

921
01:04:20.800 --> 01:04:24.550
if I look at the spec for the search model,

922
01:04:32.719 --> 01:04:34.500
I think the other thing would be,

923
01:04:36.500 --> 01:04:36.989
yeah,

924
01:04:38.590 --> 01:04:41.129
this uh doesn't permit sequel injection.

925
01:04:47.379 --> 01:04:51.040
This was such an unfun test to write because

926
01:04:51.590 --> 01:04:58.459
I am searching for inserting quotes into a string that is quoted multiple times and

927
01:04:58.469 --> 01:05:03.239
then in the spec I have to write quotes around my search and so it's just

928
01:05:04.129 --> 01:05:06.270
how many layers of escaping are there?

929
01:05:08.969 --> 01:05:08.989
Yeah.

930
01:05:16.649 --> 01:05:17.310
This one

931
01:05:18.129 --> 01:05:19.090
as a fun

932
01:05:19.439 --> 01:05:20.040
uh

933
01:05:20.310 --> 01:05:25.149
Actually all these 30 I even left a comment. These are real things.

934
01:05:25.159 --> 01:05:28.770
People run vulnerability scanners against lobsters all the time.

935
01:05:29.620 --> 01:05:30.840
And the way the

936
01:05:30.989 --> 01:05:34.520
vulnerability scanner works is it sees a box with

937
01:05:34.530 --> 01:05:37.229
the word search nearby and it starts stuffing random

938
01:05:38.399 --> 01:05:39.100
uh

939
01:05:39.889 --> 01:05:41.110
strings into it

940
01:05:42.850 --> 01:05:44.270
and it includes

941
01:05:44.709 --> 01:05:46.909
so it's trying to do sequel injection here.

942
01:05:48.209 --> 01:05:48.860
And these,

943
01:05:48.879 --> 01:05:51.689
the thing that's happening with these random

944
01:05:51.699 --> 01:05:54.669
strings like this or these random values

945
01:05:55.540 --> 01:05:56.229
R

946
01:05:57.949 --> 01:06:00.969
the bot is checking to see if

947
01:06:02.780 --> 01:06:06.760
on the page that comes back from the submitting the search form.

948
01:06:07.090 --> 01:06:08.540
Do any of these appear?

949
01:06:10.149 --> 01:06:12.290
Because if they appear, it's

950
01:06:12.820 --> 01:06:15.409
it kind of implies or that

951
01:06:17.209 --> 01:06:18.969
you have mis parched the query.

952
01:06:25.260 --> 01:06:27.189
Yeah. Yeah. Here's the other one. Pu

953
01:06:28.000 --> 01:06:28.580
So

954
01:06:30.080 --> 01:06:31.739
on the other hand, it also makes your

955
01:06:31.939 --> 01:06:34.600
queries really, really stand out

956
01:06:35.020 --> 01:06:35.739
in the

957
01:06:35.949 --> 01:06:38.530
weblog when I see you searching for gibberish,

958
01:06:42.709 --> 01:06:46.209
I understand some of this is just the background radiation of the internet.

959
01:06:46.219 --> 01:06:47.489
But also this is

960
01:06:49.070 --> 01:06:52.010
we're at nerd oriented site. And so nerds are like,

961
01:06:52.320 --> 01:06:55.090
I need an example site. So we get a lot of like

962
01:06:56.129 --> 01:06:58.449
the first web crawler someone has ever written

963
01:06:58.689 --> 01:07:00.500
with no rate limiting, no

964
01:07:00.899 --> 01:07:02.979
robots. TXT, no anything.

965
01:07:03.879 --> 01:07:03.949
Uh,

966
01:07:04.969 --> 01:07:07.840
and we get people who are like, what's a vulnerability scanner?

967
01:07:07.850 --> 01:07:10.270
Oh, I just installed one. How do I use it?

968
01:07:10.370 --> 01:07:10.560
Oh,

969
01:07:10.570 --> 01:07:13.570
let me run it against this website that I was just looking at

970
01:07:13.580 --> 01:07:15.879
in any other tab and then they run it against our prod,

971
01:07:16.620 --> 01:07:17.229
which is,

972
01:07:18.290 --> 01:07:19.419
it's real rude.

973
01:07:19.800 --> 01:07:21.489
That's also a good way to get your IP band.

974
01:07:27.959 --> 01:07:29.699
And I'm real aggressive about

975
01:07:31.510 --> 01:07:33.969
if production throws an exception, I'm gonna fix it.

976
01:07:34.590 --> 01:07:37.689
There isn't because our site traffic is low enough that, you know,

977
01:07:37.699 --> 01:07:39.669
I don't really worry about the,

978
01:07:39.830 --> 01:07:41.330
is it a one in a million

979
01:07:42.090 --> 01:07:45.439
ram got hit by a cosmic ray kind of error?

980
01:07:45.590 --> 01:07:47.070
That thing happens at scale

981
01:07:47.969 --> 01:07:49.639
doesn't happen at lobster scale.

982
01:07:50.860 --> 01:07:52.830
Although I have seen one or two things that were,

983
01:07:54.780 --> 01:07:57.979
it's strongly indicative of hardware failure on the client.

984
01:08:04.169 --> 01:08:06.739
So at this point, vulnerability scanners don't

985
01:08:07.399 --> 01:08:08.689
throw five hundreds.

986
01:08:10.580 --> 01:08:12.350
They do make me annoyed if I see them though.

987
01:08:30.660 --> 01:08:32.080
Yeah, I don't want this here.

988
01:08:33.509 --> 01:08:34.060
All right.

989
01:08:42.799 --> 01:08:42.850
OK.

990
01:09:00.269 --> 01:09:00.809
Well,

991
01:09:01.358 --> 01:09:03.328
does he need any for sequel injection

992
01:09:04.368 --> 01:09:05.417
for highlighting?

993
01:09:06.759 --> 01:09:08.890
No, as long as strip operators happens internally,

994
01:09:08.899 --> 01:09:11.339
I think that's fine because this is just,

995
01:09:11.709 --> 01:09:12.799
this is just highlighting.

996
01:09:13.709 --> 01:09:14.160
Yeah.

997
01:09:17.839 --> 01:09:18.529
Hey, chill.

998
01:09:18.810 --> 01:09:21.990
Uh so I am reviewing this pull request

999
01:09:22.220 --> 01:09:23.109
right now,

1000
01:09:24.099 --> 01:09:25.249
which is

1001
01:09:25.389 --> 01:09:28.758
my own feature request for highlighting search terms.

1002
01:09:28.769 --> 01:09:30.398
Is there supposed to be music?

1003
01:09:30.809 --> 01:09:32.398
No. Why do you hear some?

1004
01:09:38.339 --> 01:09:39.350
Oh I think

1005
01:09:43.620 --> 01:09:48.310
Chill. You're like a popular streamer, aren't you? As opposed to you know me a yacht?

1006
01:09:49.099 --> 01:09:51.979
I think I started following you on Twitch recently

1007
01:09:51.988 --> 01:09:54.559
cause I heard a podcast interview with you.

1008
01:09:58.169 --> 01:10:00.839
Was that you or was that somebody else? Were you on the

1009
01:10:01.240 --> 01:10:04.390
Dead Code podcast? No, it's just mentioned in the rules.

1010
01:10:04.770 --> 01:10:05.240
OK.

1011
01:10:06.040 --> 01:10:07.649
But you do stream code, right?

1012
01:10:19.620 --> 01:10:20.240
OK.

1013
01:10:20.899 --> 01:10:22.080
Yeah, I've clicked over.

1014
01:10:22.290 --> 01:10:24.729
I have an offscreen browser. I've clicked over your,

1015
01:10:25.200 --> 01:10:26.399
I see you do um

1016
01:10:29.240 --> 01:10:32.979
a bunch of stuff. You're on maternity leave.

1017
01:10:34.959 --> 01:10:38.029
You aren't the person I just heard on the now I have to find it.

1018
01:10:42.660 --> 01:10:47.620
So I ran into Jared Norman earlier this year at Madison Ruby.

1019
01:10:52.609 --> 01:10:53.560
No. OK.

1020
01:10:54.379 --> 01:10:55.439
Yeah, this is you.

1021
01:10:55.810 --> 01:10:56.680
I did just hear

1022
01:10:56.819 --> 01:10:59.439
a, an interview with you. This is why I was following you.

1023
01:10:59.689 --> 01:11:00.290
Uh

1024
01:11:00.660 --> 01:11:04.600
is you were just on this podcast and talking about how

1025
01:11:05.779 --> 01:11:08.970
streaming has meant a bunch of opportunities in your career.

1026
01:11:09.859 --> 01:11:14.240
This was a really nice, let's, let's share this in the chat and I'll stick it in the um

1027
01:11:14.979 --> 01:11:15.839
show notes.

1028
01:11:16.660 --> 01:11:18.040
Anyways, thanks for dropping in.

1029
01:11:18.879 --> 01:11:19.439
Uh

1030
01:11:25.040 --> 01:11:29.399
you know, it's not just a very black metal piece of podcast art.

1031
01:11:29.410 --> 01:11:35.359
He actually commissioned a musician to make a little like metal bumper.

1032
01:11:36.069 --> 01:11:38.390
And so it has someone doing the screamy metal

1033
01:11:38.399 --> 01:11:41.169
voice saying like Dead Code and then like playing

1034
01:11:41.439 --> 01:11:44.209
really heavy distorted guitar.

1035
01:11:45.000 --> 01:11:46.140
So uh

1036
01:11:49.729 --> 01:11:55.600
the first couple of episodes, he didn't know what a compressor was yet. I think.

1037
01:11:56.109 --> 01:12:00.669
So. The first couple, like the first three or four episodes,

1038
01:12:01.479 --> 01:12:03.740
his metal intro is a little bit loud.

1039
01:12:04.439 --> 01:12:08.339
Uh I mentioned if you're sensitive to that and then he started working with

1040
01:12:09.750 --> 01:12:12.950
um Mandy Moore who is a

1041
01:12:14.120 --> 01:12:15.399
sort of famous

1042
01:12:15.879 --> 01:12:16.680
tech, I mean,

1043
01:12:16.790 --> 01:12:17.620
to me,

1044
01:12:18.029 --> 01:12:21.799
a tech podcast producer and as soon as she came on board,

1045
01:12:21.810 --> 01:12:23.959
his audio took a step up in quality.

1046
01:12:24.620 --> 01:12:26.359
Yeah. Yeah, it does slap. Oh

1047
01:12:27.060 --> 01:12:27.069
I

1048
01:12:27.180 --> 01:12:28.120
actually have,

1049
01:12:29.689 --> 01:12:32.370
I think I have desktop audio wired up

1050
01:12:32.870 --> 01:12:35.500
and I could probably play it. But I, I will just

1051
01:12:36.000 --> 01:12:37.120
let's see if it works.

1052
01:12:37.540 --> 01:12:39.700
So if I unmute that

1053
01:12:40.290 --> 01:12:41.140
and that,

1054
01:12:45.459 --> 01:12:46.020
I think it'll

1055
01:12:46.680 --> 01:12:50.049
actually notice that you, you choose the advent of code.

1056
01:12:50.060 --> 01:12:51.759
If you ever want help with your,

1057
01:12:52.069 --> 01:12:55.709
if you like the box in the corner, you can put like a little excerpt.

1058
01:12:56.930 --> 01:12:59.120
It was real nice if you could just sweep it

1059
01:12:59.279 --> 01:13:00.919
and you could like the chat in there.

1060
01:13:01.580 --> 01:13:02.140
Maybe

1061
01:13:02.669 --> 01:13:03.189
he's pretty over

1062
01:13:03.290 --> 01:13:03.540
late.

1063
01:13:04.819 --> 01:13:06.080
Good idea. Good idea.

1064
01:13:07.330 --> 01:13:08.620
So it's the um

1065
01:13:09.149 --> 01:13:14.589
it is definitely not wired up correctly because you are hearing,

1066
01:13:15.279 --> 01:13:18.049
especially if that was faint. You were hearing the

1067
01:13:22.330 --> 01:13:25.779
my monitor is playing the audio and then my microphone

1068
01:13:25.790 --> 01:13:28.279
is picking it up as it reflects off of me.

1069
01:13:28.970 --> 01:13:33.850
So I'm not gonna debug audio on stream. That's a little too painful.

1070
01:13:34.770 --> 01:13:36.910
Also, it's gotta be a trip for

1071
01:13:37.779 --> 01:13:39.089
uh jail codes to

1072
01:13:39.830 --> 01:13:40.549
hear me

1073
01:13:40.899 --> 01:13:42.930
playing an interview with her. So

1074
01:13:43.959 --> 01:13:45.169
in any case, uh

1075
01:13:45.750 --> 01:13:51.140
where I was going with that trail is uh if you wanna start streaming after me,

1076
01:13:51.149 --> 01:13:55.540
let me know and cause I'm getting towards wrapping up in like 1520 minutes

1077
01:13:56.439 --> 01:13:59.339
and I will throw over to you or raid.

1078
01:14:00.129 --> 01:14:02.439
Yeah, when I had to start,

1079
01:14:04.200 --> 01:14:08.819
when I uh, like, started giving conference talks and I was like, ok, well,

1080
01:14:08.830 --> 01:14:11.930
now you have to watch your own conference talks so that you can improve.

1081
01:14:12.350 --> 01:14:12.370
Ah,

1082
01:14:12.490 --> 01:14:13.609
that's such a trip.

1083
01:14:14.330 --> 01:14:14.990
And

1084
01:14:19.870 --> 01:14:21.990
doing it with streams is even worse.

1085
01:14:22.000 --> 01:14:25.620
Cuz it's just me talking to an empty room for hours.

1086
01:14:25.629 --> 01:14:27.419
I've watched one or two of those streams.

1087
01:14:29.560 --> 01:14:31.740
Oh, that's ok. Your baby can code on stream.

1088
01:14:33.799 --> 01:14:36.299
Congrats. I hope you're having a good holiday. Actually,

1089
01:14:38.209 --> 01:14:38.990
I am.

1090
01:14:39.000 --> 01:14:41.160
So I'm gonna roll out in a bit because we are

1091
01:14:41.169 --> 01:14:44.229
also hosting a Thanksgiving and there's plenty of prep to do,

1092
01:14:44.450 --> 01:14:48.439
although we did most of it over the last couple of days. I feel so adult.

1093
01:14:48.549 --> 01:14:50.270
Like, we weren't up all night

1094
01:14:50.490 --> 01:14:52.310
the night before a big dinner party.

1095
01:14:54.669 --> 01:14:55.129
All right.

1096
01:14:59.700 --> 01:15:04.160
Ah, no, I have to watch my talk so that I can get better at them and I don't watch

1097
01:15:05.250 --> 01:15:08.629
all of my stream playbacks because it's like, all right, if I'm doing, like,

1098
01:15:08.640 --> 01:15:09.850
six hours of stream a week,

1099
01:15:09.859 --> 01:15:13.669
that's already kind of a full work day of streaming every week.

1100
01:15:14.180 --> 01:15:15.470
I don't need to double that,

1101
01:15:16.439 --> 01:15:16.979
but

1102
01:15:17.160 --> 01:15:17.919
I do

1103
01:15:18.580 --> 01:15:22.299
watch bits of it to make sure that stuff came across. Or

1104
01:15:22.750 --> 01:15:26.899
if I remember that, I sounded particularly funny. I wanna hear what that sounds like

1105
01:15:28.660 --> 01:15:33.439
or I'm just debugging my stream archives and then I have to like click play on things.

1106
01:15:35.910 --> 01:15:36.350
Yeah.

1107
01:15:38.720 --> 01:15:39.979
All right. So this is,

1108
01:15:40.910 --> 01:15:41.970
this is really nice.

1109
01:15:41.979 --> 01:15:44.509
I should make more screenshots in my future requests

1110
01:15:44.520 --> 01:15:46.370
cause maybe that's the thing that people are like.

1111
01:15:46.379 --> 01:15:46.770
Yeah,

1112
01:15:47.009 --> 01:15:48.720
I understand what this person wants.

1113
01:15:55.140 --> 01:15:59.290
I almost wonder if they should pass in the search object instead of

1114
01:16:00.240 --> 01:16:02.379
extracting stuff and passing it in.

1115
01:16:03.419 --> 01:16:04.439
I'll leave it as a No.

1116
01:16:51.810 --> 01:16:52.339
Great.

1117
01:16:55.649 --> 01:16:57.029
That's what I'm gonna say.

1118
01:16:58.370 --> 01:16:59.870
Let's request some changes

1119
01:17:23.479 --> 01:17:23.549
which

1120
01:17:24.580 --> 01:17:24.600
um

1121
01:17:33.459 --> 01:17:33.470
I,

1122
01:18:11.680 --> 01:18:14.100
I don't, I guess they are term terms,

1123
01:18:14.490 --> 01:18:16.459
not yet quoted term. Yeah. All right.

1124
01:18:36.729 --> 01:18:37.350
Oh Chill.

1125
01:18:37.359 --> 01:18:40.669
You know, if this is your first time tuning in, maybe I should have answered though.

1126
01:18:40.680 --> 01:18:42.790
What are you doing a little more broadly of

1127
01:18:43.819 --> 01:18:48.450
I run Lobsters, which is a big web form for discussing programming. So we are

1128
01:18:50.250 --> 01:18:52.629
reviewing code to search

1129
01:18:53.069 --> 01:18:54.169
a site about code

1130
01:18:54.830 --> 01:18:55.379
very meta

1131
01:18:59.009 --> 01:19:04.060
and on these streams also on off, they are kind of lobsters office hours.

1132
01:19:04.069 --> 01:19:07.750
There is a link under the description to

1133
01:19:08.220 --> 01:19:12.029
my web page where I kind of introduce things and have the archive for the stream

1134
01:19:12.970 --> 01:19:13.790
and

1135
01:19:15.069 --> 01:19:15.540
good.

1136
01:19:15.779 --> 01:19:16.479
That's so great.

1137
01:19:20.970 --> 01:19:21.950
All right. So

1138
01:19:22.279 --> 01:19:26.390
Ashwin, Ashwin actually opened two poll requests

1139
01:19:27.060 --> 01:19:28.259
and this one,

1140
01:19:28.549 --> 01:19:29.640
where am I on time?

1141
01:19:32.640 --> 01:19:34.890
I think we can take a look at it. So

1142
01:19:35.930 --> 01:19:39.740
as I mentioned, I like to make sure the site doesn't throw exceptions in prod.

1143
01:19:41.620 --> 01:19:43.700
Oh, as long as I'm between poll requests,

1144
01:19:43.709 --> 01:19:47.100
I am saying the bumper thing the same amount of times, but you know,

1145
01:19:48.020 --> 01:19:50.669
four times in 90 minutes instead of four times in

1146
01:19:51.109 --> 01:19:52.040
three hours.

1147
01:19:52.629 --> 01:19:55.640
But if anybody has any questions about the site, the community,

1148
01:19:56.339 --> 01:19:57.399
the guidelines,

1149
01:19:58.290 --> 01:19:59.859
why things are the way they are

1150
01:20:01.040 --> 01:20:04.700
happy to talk about those happy to run queries against the Proud Database

1151
01:20:06.200 --> 01:20:12.020
or otherwise, I do code review and try and keep the code base moving and in good shape

1152
01:20:12.709 --> 01:20:13.640
or at least

1153
01:20:14.350 --> 01:20:15.850
break it less.

1154
01:20:17.250 --> 01:20:18.029
So

1155
01:20:19.379 --> 01:20:21.490
something broke the

1156
01:20:22.129 --> 01:20:24.810
stats page which has our nice graphs on it.

1157
01:20:27.750 --> 01:20:31.810
So if I start up my rail server in the background

1158
01:20:31.959 --> 01:20:33.770
and let's go to

1159
01:20:39.129 --> 01:20:41.129
this will probably throw 500

1160
01:20:43.899 --> 01:20:45.879
I mean production is. So

1161
01:20:47.509 --> 01:20:49.720
um stats also,

1162
01:20:49.859 --> 01:20:50.830
yeah, there we go

1163
01:20:50.930 --> 01:20:53.689
is cashed because these are big queries that are like,

1164
01:20:53.700 --> 01:20:56.000
let's look at every comment in the database.

1165
01:20:56.009 --> 01:20:57.970
Let's look at every story in the database.

1166
01:21:00.009 --> 01:21:01.709
And as long as we're gonna write

1167
01:21:02.879 --> 01:21:04.959
giant complicated queries,

1168
01:21:05.410 --> 01:21:06.819
let's not add any tests.

1169
01:21:09.279 --> 01:21:11.689
I'm a little embarrassed that I didn't even have a

1170
01:21:11.700 --> 01:21:13.979
smoke test to see that the stats page loads.

1171
01:21:14.649 --> 01:21:16.990
So this is probably related to

1172
01:21:18.370 --> 01:21:19.299
a recent

1173
01:21:21.270 --> 01:21:25.529
change I asked for replacing, execute with select all.

1174
01:21:25.839 --> 01:21:26.689
So, I wonder

1175
01:21:26.910 --> 01:21:29.890
if I change this back to execute?

1176
01:21:33.939 --> 01:21:35.720
Will this immediately go away?

1177
01:21:39.540 --> 01:21:40.149
Um,

1178
01:21:47.779 --> 01:21:49.100
yeah, still thinking about it.

1179
01:21:52.060 --> 01:21:55.990
If it is thinking longer it's probably working. Yeah.

1180
01:21:56.200 --> 01:21:59.080
So this is what the stats page is supposed to look like.

1181
01:22:08.439 --> 01:22:09.799
So it is.

1182
01:22:12.259 --> 01:22:14.250
Yeah, I don't think I need to add that. So then

1183
01:22:15.100 --> 01:22:16.439
the fix that

1184
01:22:17.500 --> 01:22:18.520
Ashwin maid,

1185
01:22:19.839 --> 01:22:21.649
I'm a little suspicious of it.

1186
01:22:24.209 --> 01:22:26.149
So there's a thing

1187
01:22:26.250 --> 01:22:28.910
I've talked about how sometimes I look at code and I'm like,

1188
01:22:28.919 --> 01:22:30.629
ah a junior developer wrote that

1189
01:22:30.810 --> 01:22:33.029
this one pinged that sense where

1190
01:22:35.270 --> 01:22:39.890
instead of trying to fix the query or

1191
01:22:40.890 --> 01:22:43.109
fix something downstream

1192
01:22:45.439 --> 01:22:46.979
and say, OK, well,

1193
01:22:47.270 --> 01:22:49.799
the query is gonna output a slightly different format.

1194
01:22:49.810 --> 01:22:51.970
Let's change the way it consumes

1195
01:22:52.149 --> 01:22:52.740
data.

1196
01:22:53.779 --> 01:22:54.870
It says, well,

1197
01:22:54.879 --> 01:22:57.779
let's loop over all of the data and inspect it and

1198
01:22:57.790 --> 01:23:00.319
tweak things and then put it back and pass it off

1199
01:23:02.149 --> 01:23:03.450
and it's such a

1200
01:23:03.700 --> 01:23:03.709
a,

1201
01:23:06.529 --> 01:23:10.080
it's a thing that Junior devs do often where

1202
01:23:10.209 --> 01:23:14.109
they don't try and find the root cause of something or change

1203
01:23:14.629 --> 01:23:17.919
the output one place. They just kind of look at

1204
01:23:18.060 --> 01:23:21.189
data and munch it where the exception happens

1205
01:23:21.359 --> 01:23:22.629
to it occur.

1206
01:23:35.689 --> 01:23:37.609
The exception occurs

1207
01:23:38.919 --> 01:23:41.290
line 90

1208
01:23:42.839 --> 01:23:43.649
it was 90.

1209
01:23:46.669 --> 01:23:50.649
So we grab all the data, we turn it into an array and we flatten it.

1210
01:23:51.680 --> 01:23:52.379
Is this

1211
01:23:52.859 --> 01:23:53.660
all right? Hang on.

1212
01:23:54.490 --> 01:23:58.229
So let's grab a console and let's say, what's the model here

1213
01:23:58.870 --> 01:23:59.910
user? All right,

1214
01:24:03.870 --> 01:24:08.169
cause I think this might be as simple as is stuff coming back as a hash or an array.

1215
01:24:18.209 --> 01:24:20.990
What do you mean user out from users?

1216
01:24:23.390 --> 01:24:23.930
Fucking?

1217
01:24:31.930 --> 01:24:31.939
I

1218
01:24:32.040 --> 01:24:32.250
get it. So

1219
01:24:32.720 --> 01:24:36.729
this is like a weird trilogy thing where it doesn't play well with my pager.

1220
01:24:50.100 --> 01:24:52.129
And so I get just useless.

1221
01:24:52.509 --> 01:24:53.879
Ask the art stuff.

1222
01:24:54.859 --> 01:24:56.390
Julia Evans just had a great

1223
01:24:58.870 --> 01:25:01.399
a string of posts on blue sky about

1224
01:25:02.240 --> 01:25:04.080
how it is a like

1225
01:25:04.689 --> 01:25:09.169
guideline of writing shell stuff that you're supposed to detect. If your pager is

1226
01:25:13.120 --> 01:25:16.060
not a person and then strip out your

1227
01:25:17.120 --> 01:25:19.640
export pager equals

1228
01:25:19.979 --> 01:25:21.319
see if this wants to do it.

1229
01:25:28.120 --> 01:25:29.020
All right. That's better.

1230
01:25:32.000 --> 01:25:34.140
So it comes back as a result

1231
01:25:34.899 --> 01:25:38.709
and then it has rows and this is an array of arrays.

1232
01:25:40.410 --> 01:25:41.509
If I said

1233
01:25:41.939 --> 01:25:42.910
select

1234
01:25:44.089 --> 01:25:45.810
oh part of that is

1235
01:25:46.430 --> 01:25:48.770
I should just say select one because I care about the structure.

1236
01:25:48.779 --> 01:25:50.100
I don't care how many I get.

1237
01:25:50.810 --> 01:25:52.250
So select all

1238
01:25:52.660 --> 01:25:53.709
gets me

1239
01:25:55.000 --> 01:25:56.089
a result

1240
01:25:56.299 --> 01:25:57.640
with the columns one.

1241
01:25:58.709 --> 01:26:01.089
And if I say each

1242
01:26:05.830 --> 01:26:05.850
the

1243
01:26:08.370 --> 01:26:10.069
I get hashes back,

1244
01:26:11.609 --> 01:26:12.200
OK?

1245
01:26:12.750 --> 01:26:14.259
But if I say execute,

1246
01:26:16.339 --> 01:26:17.870
I get an array back. So

1247
01:26:19.479 --> 01:26:21.379
this is not a pull request,

1248
01:26:21.390 --> 01:26:23.020
I'm gonna accept because what happened is

1249
01:26:23.029 --> 01:26:25.899
we switched from execute to select all because

1250
01:26:26.029 --> 01:26:29.259
rails, plumbing works a little different. We don't need to blow out the

1251
01:26:30.379 --> 01:26:31.049
cash.

1252
01:26:34.379 --> 01:26:36.390
But having made this change,

1253
01:26:40.770 --> 01:26:42.109
this is never gonna get

1254
01:26:44.089 --> 01:26:45.490
an array back anymore.

1255
01:26:48.109 --> 01:26:49.700
It shouldn't be possible.

1256
01:27:09.970 --> 01:27:12.120
So if it's always gonna come back as

1257
01:27:13.839 --> 01:27:14.799
an array,

1258
01:27:25.649 --> 01:27:27.520
it's always going to come back as an

1259
01:27:28.990 --> 01:27:29.299
right?

1260
01:27:30.319 --> 01:27:32.439
No, it's always gonna come back as a hash.

1261
01:27:33.229 --> 01:27:35.250
Do I wanna just call values on everything?

1262
01:27:35.569 --> 01:27:36.890
Would that fix this?

1263
01:27:40.240 --> 01:27:41.120
All right. So

1264
01:27:41.629 --> 01:27:43.330
put it back into this state

1265
01:27:44.540 --> 01:27:46.589
and then down here

1266
01:27:51.709 --> 01:27:54.180
yield should grab the results.

1267
01:28:08.240 --> 01:28:08.560
So

1268
01:28:16.750 --> 01:28:17.660
like I might need

1269
01:28:17.919 --> 01:28:21.740
an extra layer of two A dot values dot flatten, but

1270
01:28:24.660 --> 01:28:26.339
it's something more like that

1271
01:28:26.740 --> 01:28:27.700
rather than,

1272
01:28:29.259 --> 01:28:31.990
yeah, for an instance of active record result.

1273
01:28:32.859 --> 01:28:34.470
So I'm gonna tweak that to say

1274
01:28:36.040 --> 01:28:36.990
to a

1275
01:28:37.589 --> 01:28:39.990
and then that should get me an array of hashes.

1276
01:28:47.560 --> 01:28:47.609
OK.

1277
01:28:54.040 --> 01:28:57.529
As I look at this, I'm not even sure what the flat is doing there knowing

1278
01:28:59.459 --> 01:29:00.540
and breaking things,

1279
01:29:15.790 --> 01:29:17.979
a defined method for an instance of array.

1280
01:29:20.020 --> 01:29:21.660
But the problem is that it's

1281
01:29:28.689 --> 01:29:30.950
so this is gonna throw an exception. I just wanna see the

1282
01:29:32.589 --> 01:29:33.240
glasses.

1283
01:29:34.200 --> 01:29:35.939
So these are all arrays.

1284
01:30:52.609 --> 01:30:52.640
OK?

1285
01:30:53.229 --> 01:30:53.259
OK.

1286
01:30:56.330 --> 01:30:57.930
This give me multiple roads,

1287
01:30:59.779 --> 01:31:00.240
huh?

1288
01:31:05.540 --> 01:31:05.669
It will,

1289
01:31:17.660 --> 01:31:19.399
this gets me two hashes.

1290
01:31:30.430 --> 01:31:30.490
Wait a

1291
01:31:30.759 --> 01:31:30.819
moment,

1292
01:31:32.270 --> 01:31:33.930
this gets me to a race.

1293
01:31:38.870 --> 01:31:40.430
So why does this not?

1294
01:31:45.160 --> 01:31:47.830
This goes and selects this stuff out?

1295
01:32:16.359 --> 01:32:17.419
Let's go into a bugger

1296
01:32:22.020 --> 01:32:22.370
like

1297
01:32:22.569 --> 01:32:23.209
this is

1298
01:32:23.390 --> 01:32:25.169
I'm clearly wasting time for de

1299
01:32:25.270 --> 01:32:25.790
debugging

1300
01:32:27.250 --> 01:32:27.879
debug.

1301
01:32:28.080 --> 01:32:28.520
Uh

1302
01:32:32.790 --> 01:32:33.330
There we go.

1303
01:32:34.450 --> 01:32:35.939
It's data class.

1304
01:32:36.819 --> 01:32:37.790
It's a hash.

1305
01:32:52.180 --> 01:32:52.209
OK.

1306
01:32:53.640 --> 01:32:55.180
Yeah. And I'm, I'm such a

1307
01:32:55.759 --> 01:32:58.729
old school din line guy that I rarely remember

1308
01:32:58.919 --> 01:33:00.810
to just drop into a debugger.

1309
01:33:01.669 --> 01:33:03.549
There was a really nice talk at

1310
01:33:04.779 --> 01:33:06.370
Rocky Mountain ruby.

1311
01:33:06.500 --> 01:33:07.200
I think.

1312
01:33:07.879 --> 01:33:08.689
Where was that?

1313
01:33:12.520 --> 01:33:13.540
If you wanna write.

1314
01:33:14.180 --> 01:33:14.879
Um,

1315
01:33:16.069 --> 01:33:17.129
a bunch of,

1316
01:33:18.649 --> 01:33:19.379
let's see.

1317
01:33:19.770 --> 01:33:20.910
I make sure I'm muted.

1318
01:33:28.310 --> 01:33:29.209
Where was this?

1319
01:33:29.649 --> 01:33:31.759
Oh, this must be a year or something ago.

1320
01:33:33.660 --> 01:33:34.200
Come here.

1321
01:33:36.270 --> 01:33:37.720
Where is the actual

1322
01:33:41.350 --> 01:33:42.850
try until you die? Here you go.

1323
01:33:43.609 --> 01:33:45.839
This was a nice talk about

1324
01:33:46.020 --> 01:33:47.770
features in pride.

1325
01:33:49.080 --> 01:33:52.310
And I started watching it and then I learned like five things and I went,

1326
01:33:52.319 --> 01:33:53.040
my brain is full.

1327
01:33:53.049 --> 01:33:54.939
I can't actually learn five things at once.

1328
01:33:58.979 --> 01:34:00.279
Uh, So I have to

1329
01:34:01.180 --> 01:34:02.669
come back and watch that again.

1330
01:34:08.810 --> 01:34:09.870
All right. So

1331
01:34:11.770 --> 01:34:12.589
that's it. Right.

1332
01:34:13.779 --> 01:34:15.129
Could not parse time.

1333
01:34:25.509 --> 01:34:27.149
Yeah, I don't understand. I'm

1334
01:34:28.020 --> 01:34:30.600
kind of dinking around cause I'm trying to,

1335
01:34:33.270 --> 01:34:35.759
I'm just gonna get that. Why am exception? Aren't I?

1336
01:34:36.729 --> 01:34:39.080
Cause this is what the coat already is? Yeah.

1337
01:34:47.310 --> 01:34:48.850
So this is not all right.

1338
01:34:49.350 --> 01:34:52.020
That's enough to say that this pull request isn't gonna do it.

1339
01:34:52.029 --> 01:34:56.069
Let's just punt it back. I like I look at these things and I want to tweak it, but

1340
01:35:15.470 --> 01:35:19.399
I gotta get it up on screen so I can actually say it correctly.

1341
01:35:22.740 --> 01:35:22.759
So

1342
01:35:24.049 --> 01:35:25.509
the race and

1343
01:35:26.600 --> 01:35:29.580
select all returns and array

1344
01:35:30.310 --> 01:35:31.290
hatches.

1345
01:35:37.919 --> 01:35:39.009
Thanks for

1346
01:35:42.509 --> 01:35:43.459
Tinker a

1347
01:35:43.560 --> 01:35:44.330
bit

1348
01:35:45.370 --> 01:35:48.450
and learn that this is bad. This is death.

1349
01:35:54.589 --> 01:35:56.580
This isn't going to be

1350
01:35:58.549 --> 01:35:59.680
changing the

1351
01:36:23.060 --> 01:36:25.830
today, the data of

1352
01:36:27.830 --> 01:36:28.439
the

1353
01:36:29.020 --> 01:36:32.049
class of the array elements

1354
01:36:37.109 --> 01:36:38.399
should always be

1355
01:36:39.089 --> 01:36:39.790
ashes.

1356
01:36:43.049 --> 01:36:47.990
Don't like this style of inspecting data in the middle

1357
01:36:48.910 --> 01:36:49.580
and

1358
01:36:51.270 --> 01:36:52.660
we came back

1359
01:36:53.890 --> 01:36:55.109
is either

1360
01:36:59.250 --> 01:37:01.270
either update the

1361
01:37:03.560 --> 01:37:04.339
query

1362
01:37:04.979 --> 01:37:06.379
and I don't wanna tell him to

1363
01:37:24.220 --> 01:37:24.839
There we go.

1364
01:37:27.109 --> 01:37:28.850
I feel like a very,

1365
01:37:29.819 --> 01:37:32.819
I hope I am being a competent open source maintainer

1366
01:37:33.069 --> 01:37:35.359
by saying like, hey, yeah, you got this.

1367
01:37:36.919 --> 01:37:41.020
It's really tempting, especially with this kind of like, oh, I almost have it bug.

1368
01:37:41.029 --> 01:37:45.339
Like I did not mean to rabbit hole for five or 10 minutes and try and fix it myself.

1369
01:37:45.720 --> 01:37:48.729
What I should have said to encourage a contributor is just like,

1370
01:37:50.000 --> 01:37:52.770
yeah, the styles off, you're mostly there. Why don't you?

1371
01:37:52.850 --> 01:37:54.870
I could have written this comment 10 minutes ago.

1372
01:37:55.669 --> 01:37:57.870
As soon as I saw the difference between execute and

1373
01:37:57.879 --> 01:38:00.330
select all I should have just come back and said,

1374
01:38:01.100 --> 01:38:02.100
please keep going.

1375
01:38:03.279 --> 01:38:04.370
It's the

1376
01:38:04.819 --> 01:38:06.569
uh the wanting to do it myself.

1377
01:38:07.259 --> 01:38:09.419
I am trying to get away from that and

1378
01:38:09.430 --> 01:38:12.080
encourage more people to contribute to the code base.

1379
01:38:12.089 --> 01:38:14.319
It is a heck of a lot more scalable than

1380
01:38:15.600 --> 01:38:17.310
me trying to do everything myself.

1381
01:38:18.970 --> 01:38:19.549
All right.

1382
01:38:20.259 --> 01:38:21.439
So with that,

1383
01:38:22.100 --> 01:38:25.339
I am gonna roll out. This is gonna be a very short stream.

1384
01:38:25.370 --> 01:38:29.259
Um Unless anybody has any last minute questions about

1385
01:38:29.750 --> 01:38:32.000
the lobster site or code base.

1386
01:38:32.930 --> 01:38:36.419
Uh And I understand from tail codes that she's gonna

1387
01:38:36.430 --> 01:38:39.189
start writing rails and contributing to the code base.

1388
01:38:41.740 --> 01:38:44.430
Oops, why is this bug still first, still open?

1389
01:38:45.479 --> 01:38:46.149
This is done

1390
01:38:49.819 --> 01:38:50.509
and

1391
01:38:53.009 --> 01:38:59.680
given that we have 100 and 26 issues open and she has a baby in her arms.

1392
01:38:59.689 --> 01:39:02.109
Probably she's only gonna close half of them today.

1393
01:39:02.250 --> 01:39:03.149
That seems reasonable.

1394
01:39:05.950 --> 01:39:06.350
No.

1395
01:39:08.669 --> 01:39:09.649
So, anyways, uh,

1396
01:39:09.660 --> 01:39:15.890
I hope everybody has a nice holiday and if you don't celebrate Thanksgiving

1397
01:39:16.160 --> 01:39:17.779
because you're not an American,

1398
01:39:18.459 --> 01:39:19.049
uh,

1399
01:39:19.060 --> 01:39:21.279
the most important part of it is eating too

1400
01:39:21.290 --> 01:39:23.649
much food and hanging out with your family.

1401
01:39:23.919 --> 01:39:25.450
So I hope you can do that.

1402
01:39:28.910 --> 01:39:30.069
That's about it.

1403
01:39:31.229 --> 01:39:33.899
Oh, you already write rails and you're considering contributing well,

1404
01:39:33.910 --> 01:39:36.899
then I will try and not actually like, put you on the spot.

1405
01:39:36.910 --> 01:39:39.430
I hope I don't put you off. I'm just being silly

1406
01:39:39.890 --> 01:39:41.299
but um

1407
01:39:41.640 --> 01:39:42.250
I am

1408
01:39:42.979 --> 01:39:47.359
very welcoming to contributors if any of this stuff interests you.

1409
01:39:47.830 --> 01:39:50.339
I mean, I break stuff on the site all the time.

1410
01:39:50.569 --> 01:39:53.080
There is lots of stuff that's tagged good first issue.

1411
01:39:53.089 --> 01:39:55.279
So you don't have to know much about the code base

1412
01:39:56.109 --> 01:39:57.000
and

1413
01:39:59.000 --> 01:40:00.250
if you uh

1414
01:40:00.700 --> 01:40:02.799
want an invite to the site,

1415
01:40:02.939 --> 01:40:06.450
just let me know and I will email you one so that you can poke around.

1416
01:40:06.990 --> 01:40:08.649
Uh I just have to get

1417
01:40:09.399 --> 01:40:11.620
an email address for you. If you're not already on the site.

1418
01:40:14.589 --> 01:40:16.419
That is true for anybody,

1419
01:40:16.640 --> 01:40:18.819
please please help me fix my bugs.

1420
01:40:20.379 --> 01:40:21.000
Alrighty.

1421
01:40:22.220 --> 01:40:23.209
Have a good holiday.

1422
01:40:23.950 --> 01:40:24.549
Take care.
