WEBVTT

1
00:00:04.879 --> 00:00:08.439
<v Speaker 1>Hey, folks, Welcome back to another episode of the Ruby

2
00:00:08.519 --> 00:00:12.080
<v Speaker 1>Rogues podcast. This week, I'm your host, Charles max Wood,

3
00:00:12.080 --> 00:00:13.880
<v Speaker 1>and we are talking to Mike McQuaid.

4
00:00:14.199 --> 00:00:15.400
<v Speaker 2>Mike, you came on before.

5
00:00:15.439 --> 00:00:20.120
<v Speaker 1>We talked about homebrew and building Homebrew and work brew.

6
00:00:19.719 --> 00:00:21.519
<v Speaker 2>And all the stuff you were doing at the time.

7
00:00:21.839 --> 00:00:23.719
<v Speaker 1>Is there anything else you want people to know about

8
00:00:23.760 --> 00:00:25.440
<v Speaker 1>by way of introduction or yeah?

9
00:00:25.559 --> 00:00:28.359
<v Speaker 3>Not really all the same old stuff, Like I'm not

10
00:00:28.760 --> 00:00:31.359
<v Speaker 3>kind of doing as much stuff on work brew nowadays.

11
00:00:31.359 --> 00:00:34.039
<v Speaker 4>I'm doing even more stuff on Homebrew nowadays. So yeah,

12
00:00:34.119 --> 00:00:36.799
<v Speaker 4>all good stuff. Nothing really has changed.

13
00:00:36.920 --> 00:00:37.399
<v Speaker 2>Good deal.

14
00:00:37.479 --> 00:00:39.960
<v Speaker 1>I use work or not work Brew, I use Homebrew

15
00:00:39.960 --> 00:00:43.840
<v Speaker 1>all the time. So yeah, glad, pretty handy. It runs

16
00:00:43.880 --> 00:00:45.799
<v Speaker 1>on Linux too, I think I think I wound up

17
00:00:45.840 --> 00:00:47.039
<v Speaker 1>using it there somewhere.

18
00:00:47.719 --> 00:00:50.880
<v Speaker 3>Yeah, yeah, it runs on Linux, and I guess because

19
00:00:50.880 --> 00:00:52.679
<v Speaker 3>it's Linux. But we've still got a little a few

20
00:00:52.679 --> 00:00:55.359
<v Speaker 3>tweaks there as well, on like WSL on Windows as well,

21
00:00:55.640 --> 00:00:57.079
<v Speaker 3>so I've ended up playing wrong with it all my

22
00:00:57.479 --> 00:01:02.240
<v Speaker 3>Windows gaming machine, which until recently been unsullied by Homebrew.

23
00:01:02.399 --> 00:01:05.640
<v Speaker 2>Un slowly. I love it. Yeah. We we talked quite a.

24
00:01:05.560 --> 00:01:09.000
<v Speaker 1>Bit about Homebrew and how it works last time, and

25
00:01:09.120 --> 00:01:11.799
<v Speaker 1>I thought it'd be interesting because I find myself sometimes

26
00:01:12.359 --> 00:01:15.120
<v Speaker 1>fiddling with like writing scripts or things like that on

27
00:01:15.159 --> 00:01:18.719
<v Speaker 1>my on my machine and then thinking, you know, it

28
00:01:18.719 --> 00:01:22.200
<v Speaker 1>wouldn't be too bad to kind of parlay this or

29
00:01:22.239 --> 00:01:25.840
<v Speaker 1>these set the scripts into like a CLI. And so

30
00:01:26.159 --> 00:01:28.400
<v Speaker 1>I was just curious, I don't even know where to

31
00:01:28.439 --> 00:01:31.599
<v Speaker 1>start with that. But since you've kind of built a

32
00:01:31.599 --> 00:01:33.879
<v Speaker 1>CLI that a lot of people use, I know you

33
00:01:33.920 --> 00:01:37.439
<v Speaker 1>had other contributors, but yeah, let's say that I'm sitting

34
00:01:37.480 --> 00:01:39.719
<v Speaker 1>on some stuff that I think belongs in the CLI.

35
00:01:40.079 --> 00:01:42.719
<v Speaker 2>Where would you even start with something like that? Yeah?

36
00:01:42.799 --> 00:01:45.280
<v Speaker 3>I think that's it's really good question because I think

37
00:01:45.400 --> 00:01:48.879
<v Speaker 3>the a lot of this depends on I guess, like

38
00:01:48.920 --> 00:01:51.959
<v Speaker 3>a lot of stuff in tech, right is like what

39
00:01:52.159 --> 00:01:54.599
<v Speaker 3>does your scaling story look like? Right to be one

40
00:01:54.640 --> 00:01:57.239
<v Speaker 3>of those boring people of like if it's just something

41
00:01:57.319 --> 00:01:59.239
<v Speaker 3>that you're writing.

42
00:01:58.959 --> 00:02:01.599
<v Speaker 4>For yourself to run it once and throw it away.

43
00:02:01.760 --> 00:02:05.680
<v Speaker 3>Then you know, thinking about like the language you use,

44
00:02:05.920 --> 00:02:08.159
<v Speaker 3>like you just want to reach for whatever is the

45
00:02:08.199 --> 00:02:11.240
<v Speaker 3>most familiar to you, or I guess in personally nowadays,

46
00:02:11.280 --> 00:02:15.680
<v Speaker 3>like whatever you think chat chpt can one shot a

47
00:02:15.960 --> 00:02:17.319
<v Speaker 3>reasonable approximation of.

48
00:02:17.240 --> 00:02:18.840
<v Speaker 4>What you want it to do, and then you can

49
00:02:19.400 --> 00:02:20.759
<v Speaker 4>tweak it before you run it.

50
00:02:20.800 --> 00:02:22.719
<v Speaker 2>But yeah, so like that way more than I care

51
00:02:22.719 --> 00:02:23.159
<v Speaker 2>to admit.

52
00:02:23.400 --> 00:02:24.000
<v Speaker 4>Oh for sure.

53
00:02:24.120 --> 00:02:26.120
<v Speaker 3>I mean it's great because I feel like there's a

54
00:02:26.159 --> 00:02:28.439
<v Speaker 3>lot of stuff around that where there's like scripts that

55
00:02:28.479 --> 00:02:32.280
<v Speaker 3>previously we just wouldn't have written. And then now just

56
00:02:32.319 --> 00:02:33.599
<v Speaker 3>being like, hey, I want to pull the state from

57
00:02:33.599 --> 00:02:36.159
<v Speaker 3>the getab api and previously being like, oh, that's possible,

58
00:02:36.199 --> 00:02:38.560
<v Speaker 3>but I really want to spend like two hours on this,

59
00:02:38.680 --> 00:02:41.879
<v Speaker 3>and then it's not like well, I'll spend twenty seconds

60
00:02:42.000 --> 00:02:44.719
<v Speaker 3>asking chat CHPT and look at the output and if

61
00:02:44.719 --> 00:02:46.840
<v Speaker 3>it's wrong and then it doesn't matter. But yeah, so

62
00:02:47.719 --> 00:02:50.759
<v Speaker 3>I guess that's the first thing. Is like, so for

63
00:02:50.879 --> 00:02:55.240
<v Speaker 3>me personally, like I tend to reach for like the smallest, dirtiest,

64
00:02:55.319 --> 00:03:00.319
<v Speaker 3>filthiest scripts for Bash because I'm pretty comfortable in Bash.

65
00:03:00.479 --> 00:03:02.840
<v Speaker 3>There's Bash has like a huge amount of gotchas though,

66
00:03:02.960 --> 00:03:06.759
<v Speaker 3>so as soon as it becomes even slightly load bearing,

67
00:03:06.800 --> 00:03:08.719
<v Speaker 3>even for you, you probably want to go to like

68
00:03:08.759 --> 00:03:12.840
<v Speaker 3>a no offense Bash authors like a real language, and

69
00:03:13.319 --> 00:03:16.520
<v Speaker 3>at that point, you know, stuff's pretty interchangeable, like if

70
00:03:17.240 --> 00:03:19.759
<v Speaker 3>we're on a Ruby podcast, So like Ruby is really

71
00:03:19.800 --> 00:03:25.199
<v Speaker 3>good for like yeah, standalone single file cli script. That's

72
00:03:25.240 --> 00:03:27.560
<v Speaker 3>what I would tend to kind of go for straight away.

73
00:03:27.599 --> 00:03:30.000
<v Speaker 3>If you're a Python person. Python's pretty good for that

74
00:03:30.080 --> 00:03:32.520
<v Speaker 3>type of stuff as well. I think, like, you know,

75
00:03:32.560 --> 00:03:35.240
<v Speaker 3>if people don't have familiarity with those, I'd be surprised

76
00:03:35.280 --> 00:03:38.560
<v Speaker 3>if they listen to a Brewery podcast. But then, you know,

77
00:03:39.319 --> 00:03:42.360
<v Speaker 3>I'm sure you can probably do equivalent stuff in C

78
00:03:42.599 --> 00:03:44.479
<v Speaker 3>sharp and various.

79
00:03:44.080 --> 00:03:46.599
<v Speaker 4>Other right more obscure languages.

80
00:03:46.639 --> 00:03:48.639
<v Speaker 3>But like, I guess that's where I would tend to

81
00:03:48.680 --> 00:03:51.039
<v Speaker 3>go next is just be almost like, okay, how can

82
00:03:51.080 --> 00:03:53.159
<v Speaker 3>I put in a single script and you can do

83
00:03:53.240 --> 00:03:56.639
<v Speaker 3>some kind of neat stuff with Most people are familiar

84
00:03:56.680 --> 00:04:00.599
<v Speaker 3>with Bungler for installing dependencies, but then most people are

85
00:04:00.639 --> 00:04:03.080
<v Speaker 3>also like, okay, like bundler, I have to do like

86
00:04:03.120 --> 00:04:04.960
<v Speaker 3>bundling stoll and bundle exec and.

87
00:04:04.879 --> 00:04:05.759
<v Speaker 4>All this type of stuff.

88
00:04:06.159 --> 00:04:07.960
<v Speaker 3>But actually you can do some cool stuff with bundler

89
00:04:08.000 --> 00:04:12.520
<v Speaker 3>where you can actually define a gem file inside the

90
00:04:12.560 --> 00:04:15.639
<v Speaker 3>script itself, so the first thing it does is shouts

91
00:04:15.639 --> 00:04:18.040
<v Speaker 3>fall its dependencies installs them all, so that that can

92
00:04:18.120 --> 00:04:21.120
<v Speaker 3>be again quite a nice way of extending some little

93
00:04:21.439 --> 00:04:22.959
<v Speaker 3>basic scripts.

94
00:04:23.439 --> 00:04:25.120
<v Speaker 1>Yeah, I just want to back up on that for

95
00:04:25.160 --> 00:04:28.000
<v Speaker 1>a minute, because I ran into that somewhere I can't

96
00:04:28.000 --> 00:04:30.920
<v Speaker 1>remember where, but yeah, it's just its own little syntax

97
00:04:31.000 --> 00:04:31.639
<v Speaker 1>in there, isn't it.

98
00:04:32.079 --> 00:04:33.839
<v Speaker 2>What exactly do you have to do in order to.

99
00:04:34.079 --> 00:04:36.639
<v Speaker 3>Yeah, I can't remember the exact syntax with top my head,

100
00:04:36.680 --> 00:04:39.199
<v Speaker 3>but yeah, basically, like, I mean, that's the nice thing

101
00:04:39.199 --> 00:04:42.560
<v Speaker 3>about the state of Bundler and Ruby in twenty twenty

102
00:04:42.600 --> 00:04:45.360
<v Speaker 3>five is if you're installing an even vaguely modern Ruby,

103
00:04:45.720 --> 00:04:48.519
<v Speaker 3>it's going to come with a vaguely modern Ruby gems

104
00:04:48.600 --> 00:04:52.040
<v Speaker 3>and Bundler out of the box, and then everything essentially

105
00:04:52.040 --> 00:04:53.639
<v Speaker 3>you can do through the CLI you can also do

106
00:04:53.759 --> 00:04:57.759
<v Speaker 3>through the Rubia guys instead. And that means that essentially

107
00:04:57.759 --> 00:05:00.800
<v Speaker 3>every input that you would previously have poss as a parameter,

108
00:05:00.920 --> 00:05:03.959
<v Speaker 3>you can poss in as a string or like your

109
00:05:04.000 --> 00:05:06.040
<v Speaker 3>gem file instead of reading it from disc you can

110
00:05:06.160 --> 00:05:08.560
<v Speaker 3>like have that be like a here doc in your

111
00:05:08.879 --> 00:05:10.600
<v Speaker 3>Ruby script or whatever it might be.

112
00:05:11.120 --> 00:05:13.959
<v Speaker 4>Yeah, Like so that's a nice way of getting there.

113
00:05:14.000 --> 00:05:16.199
<v Speaker 3>So like, that's what I will tend to do is

114
00:05:16.199 --> 00:05:17.439
<v Speaker 3>have like a little bit at the top of maybe

115
00:05:17.480 --> 00:05:19.160
<v Speaker 3>one of my scripts that's like, hey, if I need

116
00:05:19.160 --> 00:05:22.360
<v Speaker 3>this particular gem, then install this gem at the first

117
00:05:22.360 --> 00:05:24.240
<v Speaker 3>time it's run, and then I don't need to like

118
00:05:24.360 --> 00:05:28.000
<v Speaker 3>carry along the script and a gem file and whatever.

119
00:05:28.240 --> 00:05:30.279
<v Speaker 3>I can just run it wherever I need to and

120
00:05:30.319 --> 00:05:30.959
<v Speaker 3>however I need to.

121
00:05:31.160 --> 00:05:35.160
<v Speaker 1>Yeah, I did find it. You require a bundler inline

122
00:05:36.199 --> 00:05:39.560
<v Speaker 1>and then you do gem file do and then you

123
00:05:39.680 --> 00:05:41.959
<v Speaker 1>basically put all your gem file stuff in there.

124
00:05:41.959 --> 00:05:45.399
<v Speaker 2>So you do your source which is probably RubyGems.

125
00:05:44.920 --> 00:05:47.680
<v Speaker 1>Dot org, and then you gem whatever and yeah, you

126
00:05:47.759 --> 00:05:51.759
<v Speaker 1>just use your the domain specific language for the butler

127
00:05:51.800 --> 00:05:54.399
<v Speaker 1>for the gem file. Yeah, and off it goes.

128
00:05:54.879 --> 00:05:55.639
<v Speaker 2>It's pretty cool.

129
00:05:55.759 --> 00:05:58.519
<v Speaker 3>So then when your script's getting a little bit more

130
00:05:59.079 --> 00:06:01.160
<v Speaker 3>I guess load bearing, as we were saying as well,

131
00:06:01.720 --> 00:06:03.639
<v Speaker 3>like that might be when you want to be like, hey,

132
00:06:03.720 --> 00:06:06.600
<v Speaker 3>I want to have some like options parsing, and like

133
00:06:06.680 --> 00:06:08.720
<v Speaker 3>the most basic way of doing that is just you know,

134
00:06:09.240 --> 00:06:12.680
<v Speaker 3>you've got the rg V like array and you can

135
00:06:12.680 --> 00:06:13.000
<v Speaker 3>go and.

136
00:06:12.920 --> 00:06:15.079
<v Speaker 4>Say, okay, what's the first parameter, second parameter. But if

137
00:06:15.079 --> 00:06:17.279
<v Speaker 4>you want to handle flags.

138
00:06:16.800 --> 00:06:19.120
<v Speaker 3>And switches and being passed in different orders, there's like

139
00:06:19.160 --> 00:06:22.160
<v Speaker 3>the Ruby again part of the standard library. There's the

140
00:06:22.199 --> 00:06:25.319
<v Speaker 3>Ruby kind of option parser library, which is pretty good,

141
00:06:25.360 --> 00:06:27.720
<v Speaker 3>pretty easy to use. If you're still in bashland, there's

142
00:06:27.759 --> 00:06:30.120
<v Speaker 3>like sort of a Bash equivalent, but in my mind,

143
00:06:30.120 --> 00:06:33.079
<v Speaker 3>even by the time I start getting towards like multiple

144
00:06:33.199 --> 00:06:36.160
<v Speaker 3>argument parsing, it's like, that's again a nice sign that

145
00:06:36.160 --> 00:06:38.560
<v Speaker 3>I probably want to go into Ruby, and yeah, use

146
00:06:38.600 --> 00:06:41.360
<v Speaker 3>that kind of richer library. And there's also various gems

147
00:06:41.360 --> 00:06:45.160
<v Speaker 3>that provide different dsls for whatever your preferences are in

148
00:06:45.160 --> 00:06:45.519
<v Speaker 3>that area.

149
00:06:45.720 --> 00:06:47.439
<v Speaker 1>Yeah, that makes sense. I know a lot of people

150
00:06:47.519 --> 00:06:50.079
<v Speaker 1>also use Optimist. You used to be called trollo.

151
00:06:50.639 --> 00:06:50.839
<v Speaker 2>Yep.

152
00:06:51.040 --> 00:06:54.040
<v Speaker 1>If you're been around for a while, and it's like optimists,

153
00:06:54.560 --> 00:06:55.240
<v Speaker 1>it's the same thing.

154
00:06:55.639 --> 00:06:57.120
<v Speaker 2>Yeah, so do you have this reference.

155
00:06:58.480 --> 00:07:01.000
<v Speaker 4>It's funny because I tend to.

156
00:07:02.439 --> 00:07:06.079
<v Speaker 3>I tend to like not I tend to use just

157
00:07:06.240 --> 00:07:08.800
<v Speaker 3>the most basic, like I'm going to pull stuff out

158
00:07:08.800 --> 00:07:13.279
<v Speaker 3>of rg V until it hurts. I think it's also

159
00:07:13.439 --> 00:07:16.120
<v Speaker 3>because I've been around in Homebrew and Ruby and whatever,

160
00:07:16.319 --> 00:07:18.439
<v Speaker 3>like long enough it's like I'm aware of all of

161
00:07:18.480 --> 00:07:22.560
<v Speaker 3>the kind of educases that you get there, and like

162
00:07:23.120 --> 00:07:25.759
<v Speaker 3>if you delete a random part of r V, or

163
00:07:25.800 --> 00:07:28.439
<v Speaker 3>if you jup it, or if you check for inclusion,

164
00:07:28.600 --> 00:07:29.759
<v Speaker 3>like what.

165
00:07:29.600 --> 00:07:30.600
<v Speaker 4>The various gotches are.

166
00:07:30.680 --> 00:07:34.439
<v Speaker 3>So like I wouldn't necessarily recommend other people do what

167
00:07:34.879 --> 00:07:38.920
<v Speaker 3>I do, but yeah, but I guess I don't have

168
00:07:39.000 --> 00:07:42.720
<v Speaker 3>a particular library of that I prefer for this stuff

169
00:07:42.759 --> 00:07:46.399
<v Speaker 3>and Homebrew because for a very long time, Homebrew kind

170
00:07:46.439 --> 00:07:51.399
<v Speaker 3>of couldn't really by design use any Ruby libraries without fully.

171
00:07:51.160 --> 00:07:53.079
<v Speaker 4>Vendoring them all, which was a big pain for us.

172
00:07:53.560 --> 00:07:57.240
<v Speaker 3>Like Homebrew basically built its own argument parser and stuff

173
00:07:57.279 --> 00:08:00.600
<v Speaker 3>like that. Even today, like Homebrew were a little bit

174
00:08:00.639 --> 00:08:03.240
<v Speaker 3>I wouldn't say suspicious of other libraries, but it's like

175
00:08:03.839 --> 00:08:06.800
<v Speaker 3>the we care. I guess this is a nice segue

176
00:08:06.800 --> 00:08:08.279
<v Speaker 3>to the next thing you might start caring about with

177
00:08:08.319 --> 00:08:11.079
<v Speaker 3>the CLI, which is like Homebrew nowadays, we really care

178
00:08:11.079 --> 00:08:11.759
<v Speaker 3>about like the.

179
00:08:12.279 --> 00:08:14.399
<v Speaker 4>Run time and almost like how long is.

180
00:08:14.360 --> 00:08:17.920
<v Speaker 3>It going to take to essentially, you know, do the

181
00:08:17.959 --> 00:08:20.279
<v Speaker 3>thing that you want it to do, So like how

182
00:08:20.319 --> 00:08:22.279
<v Speaker 3>long how long until you can print a Hello World

183
00:08:22.399 --> 00:08:25.680
<v Speaker 3>once you have all your libraries loaded and everything like that.

184
00:08:25.720 --> 00:08:28.560
<v Speaker 3>And I think that's the type of thing where like

185
00:08:28.639 --> 00:08:30.480
<v Speaker 3>if you have a script that you run once a

186
00:08:30.480 --> 00:08:32.720
<v Speaker 3>month and it takes thirty seconds to run, you probably

187
00:08:32.720 --> 00:08:34.879
<v Speaker 3>don't care if it takes five seconds or thirty seconds

188
00:08:35.000 --> 00:08:37.120
<v Speaker 3>or a minute, right like it's but if you have

189
00:08:37.159 --> 00:08:39.559
<v Speaker 3>a script that you're running in your shell, prompts say,

190
00:08:39.639 --> 00:08:43.080
<v Speaker 3>and then your shell's not going to be print your

191
00:08:43.080 --> 00:08:46.240
<v Speaker 3>shell prompts, not getting it printed until the script completes.

192
00:08:46.480 --> 00:08:49.200
<v Speaker 4>All of a sudden, you maybe don't want to require

193
00:08:49.559 --> 00:08:50.200
<v Speaker 4>that library.

194
00:08:50.240 --> 00:08:51.879
<v Speaker 3>You may be want to do it by hand so

195
00:08:51.919 --> 00:08:54.600
<v Speaker 3>that you can just boost it, or you may well

196
00:08:54.600 --> 00:08:58.279
<v Speaker 3>be getting to the wards the point which Homebrew is.

197
00:08:58.720 --> 00:08:59.600
<v Speaker 4>Not quite able to do.

198
00:08:59.679 --> 00:09:02.919
<v Speaker 3>But some the other CLIs I've built more recently, I guess,

199
00:09:03.000 --> 00:09:06.159
<v Speaker 3>like at work Brew and at GitHub or whatever, it's like, okay,

200
00:09:06.240 --> 00:09:08.240
<v Speaker 3>you maybe want to reach for another language at this point.

201
00:09:09.000 --> 00:09:12.279
<v Speaker 3>So Ruby is really good language. There's been a lot

202
00:09:12.279 --> 00:09:15.039
<v Speaker 3>of performance optimization work that's gone into Ruby in the

203
00:09:15.080 --> 00:09:17.720
<v Speaker 3>last five or ten years, but a lot of that

204
00:09:17.759 --> 00:09:21.080
<v Speaker 3>comes from the shopifys and the gethubs, who are not

205
00:09:21.200 --> 00:09:23.360
<v Speaker 3>focused on how can I make a CLI run as

206
00:09:23.440 --> 00:09:25.320
<v Speaker 3>fast as I possibly can? But they're focused on like,

207
00:09:25.480 --> 00:09:29.360
<v Speaker 3>how can I have a long lived Ruby process realistically

208
00:09:29.399 --> 00:09:32.399
<v Speaker 3>running probably rails of Sinatra or whatever, which can serve

209
00:09:32.440 --> 00:09:33.519
<v Speaker 3>as many requests.

210
00:09:33.200 --> 00:09:35.440
<v Speaker 4>As possible as quickly as possible.

211
00:09:35.480 --> 00:09:40.120
<v Speaker 3>Right, So that has more performance implications around like memory

212
00:09:40.159 --> 00:09:43.200
<v Speaker 3>management and garbage collection and JITs and stuff like that,

213
00:09:43.240 --> 00:09:47.720
<v Speaker 3>and things which rewards the longer execution of the application,

214
00:09:47.919 --> 00:09:51.240
<v Speaker 3>which is the exact opposite of what CLI does. Unfortunately,

215
00:09:51.279 --> 00:09:53.200
<v Speaker 3>some things like Ruber Coop have kind of got around

216
00:09:53.240 --> 00:09:56.039
<v Speaker 3>that by having I forget what they call it, but

217
00:09:56.080 --> 00:09:58.120
<v Speaker 3>there's basically a mode when you can essentially have Ruber

218
00:09:58.120 --> 00:09:59.960
<v Speaker 3>cops sitting in the background and you end up sending

219
00:10:00.759 --> 00:10:04.120
<v Speaker 3>requests to an already running process. I guess we could

220
00:10:04.120 --> 00:10:06.039
<v Speaker 3>maybe a take that approach with Homebrew one day, but

221
00:10:06.080 --> 00:10:09.000
<v Speaker 3>we've not yet. So instead we're generally concerned about like,

222
00:10:09.039 --> 00:10:11.360
<v Speaker 3>how can you how can you shave that time down?

223
00:10:11.440 --> 00:10:14.519
<v Speaker 3>How can you require as little as possible and push

224
00:10:14.559 --> 00:10:17.840
<v Speaker 3>some logic into maybe Bash in home Brew's case. But

225
00:10:17.879 --> 00:10:19.799
<v Speaker 3>when you're writing like a prophecy, a lie and that's

226
00:10:19.879 --> 00:10:22.360
<v Speaker 3>you know, that looks like maybe nowadays probably the best

227
00:10:22.679 --> 00:10:25.279
<v Speaker 3>choices would be something like gut rust or go, depending

228
00:10:25.279 --> 00:10:26.000
<v Speaker 3>on your preferences.

229
00:10:26.039 --> 00:10:28.320
<v Speaker 4>Like go, for example, is.

230
00:10:29.240 --> 00:10:32.080
<v Speaker 3>If you're used to Ruby, it's a very sad language

231
00:10:32.159 --> 00:10:34.240
<v Speaker 3>I think to write because it's you cannot be.

232
00:10:34.279 --> 00:10:36.679
<v Speaker 2>Expressive, IM go right now?

233
00:10:36.759 --> 00:10:39.840
<v Speaker 4>So yeah, so how have your experience has been with that?

234
00:10:39.919 --> 00:10:42.720
<v Speaker 3>About like going from the delights of ruby Land to

235
00:10:43.159 --> 00:10:44.159
<v Speaker 3>go land with the stuff?

236
00:10:44.639 --> 00:10:44.919
<v Speaker 2>Yeah?

237
00:10:45.000 --> 00:10:47.759
<v Speaker 1>Yeah, I don't love it. I mean I'm just barely

238
00:10:47.799 --> 00:10:52.120
<v Speaker 1>getting into it. They use it at work, so yeah,

239
00:10:52.159 --> 00:10:56.200
<v Speaker 1>back end engineer encompasses Ruby and go. Yeah, and mostly

240
00:10:56.240 --> 00:10:58.559
<v Speaker 1>I get away with not doing a lot of Go,

241
00:10:58.879 --> 00:11:02.799
<v Speaker 1>but yeah, they kind of expect and need you to.

242
00:11:03.080 --> 00:11:07.440
<v Speaker 3>So yep, yeah, it's you. I feel like there's there's

243
00:11:07.440 --> 00:11:14.000
<v Speaker 3>definitely been several schools of languages where the underlying methodology

244
00:11:14.159 --> 00:11:18.960
<v Speaker 3>is like stop people from doing stupid stuff, and Ruby

245
00:11:19.080 --> 00:11:21.360
<v Speaker 3>feels like it's almost as far in the other extreme

246
00:11:21.399 --> 00:11:23.240
<v Speaker 3>as you can do, where it's like you can I mean,

247
00:11:23.240 --> 00:11:27.080
<v Speaker 3>I'm sure you've reviewed some absolutely heenous Ruby code of

248
00:11:27.120 --> 00:11:32.200
<v Speaker 3>the years where people have metaprogramming to an absurd yeah

249
00:11:32.360 --> 00:11:35.240
<v Speaker 3>Goldberg level where it's impossible to figure out what's going on,

250
00:11:35.679 --> 00:11:39.440
<v Speaker 3>but that also allows you to build incredible the powerful

251
00:11:39.519 --> 00:11:41.840
<v Speaker 3>rails and all of this stuff, right and go.

252
00:11:42.440 --> 00:11:44.240
<v Speaker 4>I'm sure you have the same Charles. I just end

253
00:11:44.279 --> 00:11:44.960
<v Speaker 4>up feeling like.

254
00:11:45.840 --> 00:11:48.240
<v Speaker 3>You know, this like twenty line switch statement could be

255
00:11:48.480 --> 00:11:51.440
<v Speaker 3>one line of coding Ruby, but you know you don't

256
00:11:51.519 --> 00:11:53.440
<v Speaker 3>let me have the you know, you've taken away the

257
00:11:53.480 --> 00:11:55.559
<v Speaker 3>keys to this particular car, So I guess I have

258
00:11:55.559 --> 00:11:56.759
<v Speaker 3>to write the twenty line switch tament.

259
00:11:57.840 --> 00:12:00.279
<v Speaker 1>Yeah, I just have to say, I mean to a

260
00:12:00.279 --> 00:12:03.480
<v Speaker 1>certain extent like control flow and things like that.

261
00:12:03.519 --> 00:12:04.279
<v Speaker 2>It's all the same.

262
00:12:04.559 --> 00:12:07.639
<v Speaker 1>You know, there's some funky stuff with like very variable

263
00:12:07.639 --> 00:12:10.799
<v Speaker 1>assignment and functions and things like that, But yeah, it

264
00:12:10.840 --> 00:12:12.799
<v Speaker 1>doesn't light up my soul like ruthe does.

265
00:12:13.600 --> 00:12:13.799
<v Speaker 4>Yeah.

266
00:12:14.159 --> 00:12:16.879
<v Speaker 3>Yeah, Like Go feels in many ways to me like

267
00:12:16.919 --> 00:12:21.159
<v Speaker 3>a sort of much less verbost Java. Yeah, Like I

268
00:12:21.159 --> 00:12:22.720
<v Speaker 3>wrote a bunch of Java back in the day when

269
00:12:22.720 --> 00:12:27.440
<v Speaker 3>it was peak Java enterprise beans, and you know all

270
00:12:27.559 --> 00:12:31.080
<v Speaker 3>this like accessive boiler plate, and there's a lot less

271
00:12:31.080 --> 00:12:31.919
<v Speaker 3>at the boiler plate and Go.

272
00:12:32.080 --> 00:12:35.080
<v Speaker 4>But it still feels like this non zero amounts. But yeah,

273
00:12:35.120 --> 00:12:35.879
<v Speaker 4>so I'd say.

274
00:12:35.960 --> 00:12:38.360
<v Speaker 3>I would still consider reaching for Go for a CLI

275
00:12:38.919 --> 00:12:40.720
<v Speaker 3>if you really care about that.

276
00:12:40.639 --> 00:12:42.559
<v Speaker 4>Like execution performance.

277
00:12:42.679 --> 00:12:44.919
<v Speaker 3>So for example, I guess when I was at work

278
00:12:44.960 --> 00:12:51.360
<v Speaker 3>group previously, I was working on the CLI there, which

279
00:12:51.600 --> 00:12:52.960
<v Speaker 3>wrapped around Homebrew Cli.

280
00:12:53.120 --> 00:12:55.639
<v Speaker 4>So we wanted to provide as little overhead as possible.

281
00:12:55.720 --> 00:12:58.960
<v Speaker 3>And the amount of stuff you can do in zero

282
00:12:59.000 --> 00:13:01.799
<v Speaker 3>point one of a second on modern hardware and Go

283
00:13:01.960 --> 00:13:05.480
<v Speaker 3>compared to Ruby is like fairly spectacular. Like in Ruby

284
00:13:06.159 --> 00:13:11.559
<v Speaker 3>you're really trying to make sure you avoid like any

285
00:13:11.600 --> 00:13:14.720
<v Speaker 3>IO or significant significant computation or anything like that.

286
00:13:14.840 --> 00:13:16.120
<v Speaker 4>Ross Road just just.

287
00:13:16.080 --> 00:13:18.600
<v Speaker 3>Because of the virtues of it being like a natively

288
00:13:18.639 --> 00:13:20.440
<v Speaker 3>compiled language.

289
00:13:20.080 --> 00:13:23.039
<v Speaker 4>You can just do an awful lot of stuff much faster.

290
00:13:23.200 --> 00:13:26.240
<v Speaker 3>And that the multi threatened story as well, is like

291
00:13:27.039 --> 00:13:29.360
<v Speaker 3>because it's not the global interprets of walk or a

292
00:13:29.440 --> 00:13:32.799
<v Speaker 3>come that's the Ruby name, but whatever the Ruby equipment is. Yeah,

293
00:13:32.840 --> 00:13:35.000
<v Speaker 3>you can you can afford to just leading into the

294
00:13:35.000 --> 00:13:36.080
<v Speaker 3>concurrency a lot harder.

295
00:13:36.200 --> 00:13:37.039
<v Speaker 2>Yeah, that makes sense.

296
00:13:37.519 --> 00:13:40.200
<v Speaker 1>So let's say that I want to build a CLI

297
00:13:41.000 --> 00:13:44.559
<v Speaker 1>and I'm trying to think of like a super fun example.

298
00:13:44.519 --> 00:13:46.320
<v Speaker 1>Let let's say that I'm gonna, you know, I'm gonna

299
00:13:46.360 --> 00:13:50.080
<v Speaker 1>get an open ai ap apike and I'm gonna you know,

300
00:13:50.120 --> 00:13:53.679
<v Speaker 1>I'm gonna make it talk to whatever, right, so you know,

301
00:13:53.799 --> 00:13:56.360
<v Speaker 1>maybe it'll talk to multiple services there. Right, So I'm

302
00:13:56.360 --> 00:13:59.679
<v Speaker 1>doing stuff maybe with the podcasts, which is kind of

303
00:13:59.679 --> 00:14:02.879
<v Speaker 1>what I'm imagining, right, So I hand.

304
00:14:02.600 --> 00:14:03.120
<v Speaker 2>Off my.

305
00:14:04.679 --> 00:14:08.120
<v Speaker 1>Audio or video to whisper and it bought I being

306
00:14:08.759 --> 00:14:12.600
<v Speaker 1>I got a transcript, right, and then maybe I hand

307
00:14:12.600 --> 00:14:15.159
<v Speaker 1>the transcript off to d LLM and it does some stuff.

308
00:14:15.720 --> 00:14:17.519
<v Speaker 1>A lot of this stuff I mean you would put

309
00:14:17.559 --> 00:14:19.320
<v Speaker 1>on the back of like a rails app or anything

310
00:14:19.320 --> 00:14:22.039
<v Speaker 1>else too, right, But you know, I want a command

311
00:14:22.039 --> 00:14:24.159
<v Speaker 1>line interface just to make it super easy for me

312
00:14:24.240 --> 00:14:26.000
<v Speaker 1>to kind of navigate through some of this stuff.

313
00:14:26.039 --> 00:14:27.440
<v Speaker 2>Where would you recommend I start?

314
00:14:27.559 --> 00:14:30.440
<v Speaker 3>Yeah, I mean, like for me with stuff like that

315
00:14:30.960 --> 00:14:34.679
<v Speaker 3>tend to in some ways, that's a kind of general question.

316
00:14:34.759 --> 00:14:36.519
<v Speaker 3>We like, how do you bolde software right? And I'm

317
00:14:36.519 --> 00:14:40.120
<v Speaker 3>sure everyone has different ways, but like the way I've

318
00:14:40.120 --> 00:14:43.840
<v Speaker 3>always liked to do it is essentially just try and

319
00:14:44.000 --> 00:14:48.840
<v Speaker 3>write the Well, I'll give my pre ai answer first.

320
00:14:49.360 --> 00:14:53.679
<v Speaker 3>My pre aions is essentially just right the filthiest, hockiest code,

321
00:14:53.840 --> 00:14:56.039
<v Speaker 3>assuming that no one will ever read it, to just

322
00:14:56.320 --> 00:14:58.159
<v Speaker 3>get the core thing done.

323
00:14:58.279 --> 00:15:00.360
<v Speaker 4>So I guess in your case, it's like, okay, I

324
00:15:00.360 --> 00:15:00.799
<v Speaker 4>want I.

325
00:15:00.799 --> 00:15:03.000
<v Speaker 1>Would write a script and I would point there. I'm

326
00:15:03.039 --> 00:15:04.240
<v Speaker 1>not going to do any argument.

327
00:15:04.279 --> 00:15:06.759
<v Speaker 3>If I'm just going to assume an argument has been passed.

328
00:15:06.799 --> 00:15:09.480
<v Speaker 3>I'm going to pull out the first argument. I'm gonna

329
00:15:09.720 --> 00:15:12.039
<v Speaker 3>get the file, maybe the MP three file or whatever

330
00:15:12.080 --> 00:15:14.759
<v Speaker 3>from the podcast on disc. I'm then going to load

331
00:15:14.799 --> 00:15:16.919
<v Speaker 3>that into memory and then going to pass that off

332
00:15:16.919 --> 00:15:17.720
<v Speaker 3>to Opening.

333
00:15:17.440 --> 00:15:19.039
<v Speaker 4>Eyes Transcription API.

334
00:15:19.559 --> 00:15:21.360
<v Speaker 3>I'm then going to pull down the result of that

335
00:15:21.879 --> 00:15:24.120
<v Speaker 3>as like Jason or whatever. Then I'm going to immediately

336
00:15:24.159 --> 00:15:27.879
<v Speaker 3>get that not store anywhere, stick that inter opreenning guys

337
00:15:28.000 --> 00:15:31.200
<v Speaker 3>like im API do something with that, bring that down

338
00:15:31.360 --> 00:15:35.279
<v Speaker 3>and then print the output right and essentially build it

339
00:15:35.320 --> 00:15:37.039
<v Speaker 3>in such a way that there's no air handling. If

340
00:15:37.080 --> 00:15:40.320
<v Speaker 3>anything is in any way not the happy path, then

341
00:15:40.360 --> 00:15:42.759
<v Speaker 3>it will fail with a completely incomprehensible whatever message.

342
00:15:42.840 --> 00:15:42.960
<v Speaker 4>Right.

343
00:15:43.240 --> 00:15:45.559
<v Speaker 3>So, like generally that's the way I like to feel

344
00:15:45.559 --> 00:15:49.360
<v Speaker 3>out how to do things initially, And like I think

345
00:15:50.120 --> 00:15:52.360
<v Speaker 3>sometimes with like CLIs and stuff like that, it can

346
00:15:52.399 --> 00:15:54.399
<v Speaker 3>be tempting to be like, oh, I'm going to add

347
00:15:54.440 --> 00:15:57.360
<v Speaker 3>the options first, you know, because that's if you're almost

348
00:15:57.399 --> 00:15:59.559
<v Speaker 3>like thinking from like top to bottom. That might be

349
00:15:59.600 --> 00:16:01.799
<v Speaker 3>how you would think about it. But actually, like that's

350
00:16:02.279 --> 00:16:04.759
<v Speaker 3>not really Probably the thing you cared the most about.

351
00:16:04.799 --> 00:16:08.600
<v Speaker 3>You're trying to figure out is this thing even viable

352
00:16:08.720 --> 00:16:11.600
<v Speaker 3>or useful or whatever. And every minute you spend fiddling

353
00:16:11.600 --> 00:16:14.159
<v Speaker 3>with options is a minute you're not figuring that.

354
00:16:14.159 --> 00:16:17.799
<v Speaker 2>Out right, right, not doing the quarteine that makes sense?

355
00:16:18.679 --> 00:16:21.080
<v Speaker 1>And then so one thing that I'm looking at is

356
00:16:21.320 --> 00:16:23.279
<v Speaker 1>so then do you just build the CLI around it

357
00:16:23.320 --> 00:16:28.440
<v Speaker 1>so that you can say transcribe file nan yeah or exportant.

358
00:16:29.320 --> 00:16:31.600
<v Speaker 3>So I again with this type of stuff, like I

359
00:16:31.720 --> 00:16:34.799
<v Speaker 3>tend to go for like, keep everything in one file

360
00:16:35.240 --> 00:16:38.240
<v Speaker 3>like until it starts falling over, right. And I would

361
00:16:38.320 --> 00:16:42.080
<v Speaker 3>again to start with not even necessarily use any methods

362
00:16:42.200 --> 00:16:45.840
<v Speaker 3>until I'm thinking about making things kind of dry and

363
00:16:46.240 --> 00:16:48.279
<v Speaker 3>you know, I'm having to call the same thing multiple

364
00:16:48.320 --> 00:16:50.639
<v Speaker 3>times or whatever. Right, So I just would tend to

365
00:16:50.639 --> 00:16:53.720
<v Speaker 3>do that until it feels like it's getting too much.

366
00:16:53.799 --> 00:16:55.440
<v Speaker 3>I don't know what that is, whether that's you know,

367
00:16:55.440 --> 00:16:58.639
<v Speaker 3>a couple hundred lines, five hundred lines, one thousand lines whatever, right,

368
00:16:58.679 --> 00:17:00.679
<v Speaker 3>and then start splitting up. You said, if you had

369
00:17:00.720 --> 00:17:03.799
<v Speaker 3>commands like say you're passing like a transcribed command to

370
00:17:03.840 --> 00:17:08.079
<v Speaker 3>do this, or like a read out loud command or

371
00:17:08.880 --> 00:17:11.680
<v Speaker 3>you know, start a chat command or whatever, then that

372
00:17:11.759 --> 00:17:13.880
<v Speaker 3>might be when I'm like, okay, well, logically there's like

373
00:17:14.039 --> 00:17:18.240
<v Speaker 3>three different things this is doing. Probably the code between

374
00:17:18.279 --> 00:17:21.039
<v Speaker 3>them is not actually that similar.

375
00:17:21.119 --> 00:17:22.720
<v Speaker 4>So maybe these could all split out into.

376
00:17:22.640 --> 00:17:26.200
<v Speaker 3>Separate files that are stored a bit separately and included

377
00:17:26.319 --> 00:17:31.079
<v Speaker 3>separately and whatever. And again that's one of the pros

378
00:17:31.119 --> 00:17:34.160
<v Speaker 3>and cons of kind of Ruby and Go and stuff

379
00:17:34.200 --> 00:17:38.400
<v Speaker 3>like that, because in Ruby, okay, you've got those different files,

380
00:17:38.440 --> 00:17:41.920
<v Speaker 3>but you've now once you've slit into multi files like

381
00:17:41.960 --> 00:17:44.079
<v Speaker 3>if someone else is like, oh cool scripts, how can

382
00:17:44.119 --> 00:17:46.880
<v Speaker 3>I use it? Then it goes from being like here's

383
00:17:46.960 --> 00:17:49.599
<v Speaker 3>literally like the copy and pasted script contents to being like,

384
00:17:50.079 --> 00:17:51.480
<v Speaker 3>you need to clone this repo.

385
00:17:51.880 --> 00:17:53.240
<v Speaker 2>And here's how you want to ask this.

386
00:17:53.839 --> 00:17:56.200
<v Speaker 3>Yeah exactly, So like okay, you could but make it

387
00:17:56.200 --> 00:17:58.079
<v Speaker 3>a GEM and then they could gem install it. But

388
00:17:58.240 --> 00:18:02.160
<v Speaker 3>like I'm showing my Homebrew maintainer bias here, but I've

389
00:18:03.079 --> 00:18:07.640
<v Speaker 3>I personally I really like Ruby jams and equivalent to

390
00:18:07.680 --> 00:18:11.119
<v Speaker 3>other languages. For like I want to library I'm writing Ruby.

391
00:18:11.240 --> 00:18:13.720
<v Speaker 3>I want to library for Ruby. Right, I kind of

392
00:18:13.759 --> 00:18:15.880
<v Speaker 3>resent it when I'm like, I want to install a

393
00:18:16.000 --> 00:18:18.400
<v Speaker 3>tool that just happens to be written Ruby. I don't

394
00:18:18.400 --> 00:18:20.559
<v Speaker 3>actually care what language this tool is written in, right,

395
00:18:20.680 --> 00:18:23.559
<v Speaker 3>And I have to use MPM with JAM or pip

396
00:18:23.680 --> 00:18:26.319
<v Speaker 3>whatever to install some run to cli. Like for me,

397
00:18:26.400 --> 00:18:29.640
<v Speaker 3>I would always either reach for Homebrew or if it's

398
00:18:29.680 --> 00:18:32.200
<v Speaker 3>just something my mate wrote, ideally, my mate just like

399
00:18:32.319 --> 00:18:35.279
<v Speaker 3>sends me the script and I have like a dumping

400
00:18:35.279 --> 00:18:37.319
<v Speaker 3>ground repo and I just like copying paste that file

401
00:18:37.319 --> 00:18:39.759
<v Speaker 3>in's by report and then I can run it or

402
00:18:39.799 --> 00:18:41.160
<v Speaker 3>modify it as I choose in future.

403
00:18:41.359 --> 00:18:44.480
<v Speaker 1>Right, So that was that Yeah, you're you're talking around

404
00:18:44.519 --> 00:18:46.039
<v Speaker 1>one of the things that I was going to ask, right,

405
00:18:46.079 --> 00:18:49.200
<v Speaker 1>Because if it's just one file, it's like, Okay, stick

406
00:18:49.240 --> 00:18:53.759
<v Speaker 1>this in your path, make it executable, bam, you're done, right,

407
00:18:54.000 --> 00:18:56.440
<v Speaker 1>But if it's multiple files, yeah, I was trying to

408
00:18:56.440 --> 00:18:58.000
<v Speaker 1>figure out, Okay, how do you package that?

409
00:18:58.519 --> 00:19:00.319
<v Speaker 2>And I guess, yeah, you could use some thing like

410
00:19:00.359 --> 00:19:01.319
<v Speaker 2>Homebrew or Yeah.

411
00:19:01.319 --> 00:19:03.200
<v Speaker 1>I agree with you on the I mean, if it's

412
00:19:03.240 --> 00:19:06.240
<v Speaker 1>a Ruby specific tool like Rake, I don't really have

413
00:19:06.319 --> 00:19:09.279
<v Speaker 1>a problem with it being in Ruby gems. But yeah,

414
00:19:09.519 --> 00:19:12.599
<v Speaker 1>like the I've used other CLIs. I think it's like

415
00:19:12.640 --> 00:19:15.799
<v Speaker 1>the Heroku CLI or the Stripe cl I can't remember,

416
00:19:16.079 --> 00:19:17.920
<v Speaker 1>but one or two of those. It was like, yeah,

417
00:19:17.920 --> 00:19:20.799
<v Speaker 1>I had to go NPM install it, and I'm going, yeah,

418
00:19:20.799 --> 00:19:24.480
<v Speaker 1>but this is not a code tool, yep. And that's yeah,

419
00:19:24.519 --> 00:19:26.920
<v Speaker 1>I agree with you there. It's like, no, this this

420
00:19:27.039 --> 00:19:32.200
<v Speaker 1>belongs in Homebrew or apt or YOUM or you know

421
00:19:32.240 --> 00:19:35.480
<v Speaker 1>whatever whatever your package manager is for your operating system,

422
00:19:35.839 --> 00:19:37.519
<v Speaker 1>where it's going to pull it in and say, hey,

423
00:19:37.519 --> 00:19:41.640
<v Speaker 1>this is a utility you're going to use for other things. Right,

424
00:19:41.759 --> 00:19:45.599
<v Speaker 1>it's an application essentially that runs on top of your OS.

425
00:19:47.079 --> 00:19:49.079
<v Speaker 4>I just yah, Ruby podcast, it feels like a safe

426
00:19:49.079 --> 00:19:49.839
<v Speaker 4>space to admit this.

427
00:19:49.960 --> 00:19:52.480
<v Speaker 3>But yeah, like I my one is like NPM, where

428
00:19:52.519 --> 00:19:55.559
<v Speaker 3>it's like I ideally I don't have no Jetz on

429
00:19:55.599 --> 00:19:58.400
<v Speaker 3>my system at any given time, right, So like when

430
00:19:58.519 --> 00:20:00.640
<v Speaker 3>when something sayss like, oh, the way to do this

431
00:20:00.759 --> 00:20:03.440
<v Speaker 3>next step like step one NPM stall x and so well,

432
00:20:03.440 --> 00:20:06.000
<v Speaker 3>actually there was a step zero which was installed no.

433
00:20:06.000 --> 00:20:09.759
<v Speaker 4>J I and given this thing.

434
00:20:09.960 --> 00:20:11.720
<v Speaker 3>That you're asking me to do is nothing to do

435
00:20:11.720 --> 00:20:14.119
<v Speaker 3>the JavaScript, Like, I don't see why I have to

436
00:20:14.160 --> 00:20:17.000
<v Speaker 3>do that, right, So often I'm like, Okay, I then

437
00:20:17.079 --> 00:20:18.039
<v Speaker 3>go looking and I'm.

438
00:20:17.880 --> 00:20:19.839
<v Speaker 4>Like, oh, is this is this already in Homebrew?

439
00:20:19.880 --> 00:20:22.079
<v Speaker 3>And if not, maybe I package it and homebrew my

440
00:20:22.119 --> 00:20:24.400
<v Speaker 3>own benefit and other people in future or whatever.

441
00:20:24.480 --> 00:20:27.960
<v Speaker 4>But yeah, I've always felt that that's that.

442
00:20:28.200 --> 00:20:30.480
<v Speaker 3>Yeah, the kind of I think that's a You've brought

443
00:20:30.559 --> 00:20:32.640
<v Speaker 3>up a bigger question there about almost like distribution, and

444
00:20:32.720 --> 00:20:35.759
<v Speaker 3>I think that's that's a bit more kind of messy

445
00:20:35.759 --> 00:20:39.200
<v Speaker 3>and complicated because it ends up being like, well, what is.

446
00:20:39.119 --> 00:20:40.000
<v Speaker 4>The distribution method?

447
00:20:40.039 --> 00:20:43.559
<v Speaker 3>And Homebrew somewhat infamously, I think it might be one

448
00:20:43.599 --> 00:20:45.599
<v Speaker 3>of the first, maybe even the first to the whole

449
00:20:45.640 --> 00:20:48.559
<v Speaker 3>like cold to bash install the script that everyone is

450
00:20:48.799 --> 00:20:52.559
<v Speaker 3>much the rides, but like, you know what, if you're

451
00:20:52.599 --> 00:20:55.720
<v Speaker 3>installing something exactly, it works. But also like if you're

452
00:20:55.759 --> 00:20:58.640
<v Speaker 3>trying to install something that's kind of like non trivial,

453
00:20:58.680 --> 00:21:02.319
<v Speaker 3>like homebrew that involves cloning a pot and you know, again,

454
00:21:02.359 --> 00:21:05.160
<v Speaker 3>it's like the MPAM install. Like we could say, okay,

455
00:21:05.160 --> 00:21:07.519
<v Speaker 3>well step one get cloned, and so well I don't

456
00:21:07.519 --> 00:21:09.319
<v Speaker 3>have GET on my machine. It's like, okay, well you

457
00:21:09.359 --> 00:21:11.000
<v Speaker 3>need to still get. How do I do that? Well

458
00:21:11.039 --> 00:21:13.920
<v Speaker 3>it's you whoops.

459
00:21:14.160 --> 00:21:18.599
<v Speaker 1>Yeah, I guess that's my issue, right is I generally

460
00:21:18.640 --> 00:21:22.480
<v Speaker 1>have noted NPM on my machine. Right I'm working in rails,

461
00:21:22.640 --> 00:21:24.640
<v Speaker 1>you know, I need some kind of JavaScript run time,

462
00:21:24.759 --> 00:21:27.000
<v Speaker 1>and so it's like, Okay, this feels weird, but I'll

463
00:21:27.000 --> 00:21:29.799
<v Speaker 1>do it. But yeah, if it's a PIP install because

464
00:21:29.839 --> 00:21:32.640
<v Speaker 1>I I never touched Python, or you know, if if

465
00:21:32.640 --> 00:21:34.599
<v Speaker 1>it requires Go or something like that.

466
00:21:34.720 --> 00:21:36.920
<v Speaker 2>Now these days I'm working on Go.

467
00:21:37.039 --> 00:21:39.279
<v Speaker 1>But yeah, it's like, why do I have to install

468
00:21:39.359 --> 00:21:43.079
<v Speaker 1>a programming language in order to get my tool when

469
00:21:43.119 --> 00:21:46.079
<v Speaker 1>it doesn't really have anything to do with the programming language.

470
00:21:46.160 --> 00:21:51.000
<v Speaker 2>And so yeah, just getting into you know that step.

471
00:21:51.119 --> 00:21:54.119
<v Speaker 1>I guess some of these come like self packaged or

472
00:21:54.359 --> 00:21:57.000
<v Speaker 1>when you do the install, then it'll you know, behind

473
00:21:57.079 --> 00:21:59.799
<v Speaker 1>the scenes, it'll install either a standalone version of the

474
00:21:59.839 --> 00:22:02.160
<v Speaker 1>laneguage or give you some way of building it on

475
00:22:02.200 --> 00:22:05.640
<v Speaker 1>your machine, or sometimes it's just an executable that's pre

476
00:22:05.799 --> 00:22:09.680
<v Speaker 1>built that you know, it has reasonable assumptions about what's

477
00:22:09.759 --> 00:22:15.079
<v Speaker 1>already there. Yep, and so so that works. But yeah,

478
00:22:15.119 --> 00:22:19.640
<v Speaker 1>so let's say that I am building a CLI. I

479
00:22:19.680 --> 00:22:22.279
<v Speaker 1>write it in Ruby, you know, Yeah, I mean I

480
00:22:22.319 --> 00:22:24.880
<v Speaker 1>can tell my friend to go get clone it, right

481
00:22:24.880 --> 00:22:28.559
<v Speaker 1>if they're a programmer, and you know, and then it's like, okay,

482
00:22:28.640 --> 00:22:31.759
<v Speaker 1>here's the command to run it. But yeah, let's say

483
00:22:31.799 --> 00:22:34.119
<v Speaker 1>that it's something that's getting wider adoption and it needs

484
00:22:34.200 --> 00:22:36.160
<v Speaker 1>that distribution right where it's.

485
00:22:36.440 --> 00:22:38.079
<v Speaker 2>Hey, you know you're going to go run this on

486
00:22:38.119 --> 00:22:38.920
<v Speaker 2>your own machine.

487
00:22:39.000 --> 00:22:43.240
<v Speaker 1>Right, Maybe it's a fancy CLI that cleans up large

488
00:22:43.880 --> 00:22:45.960
<v Speaker 1>files on my hard drive or something like that. Right,

489
00:22:45.960 --> 00:22:49.440
<v Speaker 1>it's some other utility that does some of these other things.

490
00:22:49.480 --> 00:22:51.519
<v Speaker 1>You know, it's helpful, and I don't need a UI

491
00:22:51.559 --> 00:22:54.559
<v Speaker 1>for it, or at least not a complicated UI, big

492
00:22:54.599 --> 00:22:55.519
<v Speaker 1>graphical UI.

493
00:22:55.759 --> 00:22:58.000
<v Speaker 2>Yeah, how do I begin to package that up?

494
00:22:58.519 --> 00:22:58.759
<v Speaker 4>Yeah?

495
00:22:58.839 --> 00:23:03.200
<v Speaker 3>So again, probably unsurprisingly, my natural response to that is

496
00:23:03.279 --> 00:23:06.519
<v Speaker 3>like Homebrew is pretty good, yeah, distributing software, right, So

497
00:23:06.839 --> 00:23:09.559
<v Speaker 3>with Homebrew you can kind of stick it in a

498
00:23:09.599 --> 00:23:14.119
<v Speaker 3>repo and then call like Brew, create dashtash, Ruby, point

499
00:23:14.119 --> 00:23:16.480
<v Speaker 3>that at the repo and then humbrew will try its

500
00:23:16.519 --> 00:23:20.119
<v Speaker 3>best to figure things out. But then you know, if

501
00:23:20.160 --> 00:23:22.720
<v Speaker 3>it can't, you can fiddle with that and hombur can

502
00:23:22.720 --> 00:23:24.880
<v Speaker 3>help you with that. And you know, if this is

503
00:23:24.920 --> 00:23:28.920
<v Speaker 3>a thing that's pretty widespread use and you're packaging someone

504
00:23:28.920 --> 00:23:30.599
<v Speaker 3>else's software or whatever, then you could submit it to

505
00:23:30.640 --> 00:23:34.119
<v Speaker 3>the main repository and ChIL It'll be accepted fairly quickly

506
00:23:34.160 --> 00:23:36.680
<v Speaker 3>and then everyone can benefit that. If not, we have

507
00:23:36.759 --> 00:23:40.079
<v Speaker 3>this thing called called taps, which are like third party repositories.

508
00:23:40.119 --> 00:23:43.720
<v Speaker 3>Basically that you can run a command Brew tap new,

509
00:23:43.880 --> 00:23:45.279
<v Speaker 3>which basically will create a new.

510
00:23:45.200 --> 00:23:46.079
<v Speaker 4>Tap for you.

511
00:23:45.599 --> 00:23:47.680
<v Speaker 3>You can then push that up to get hub as

512
00:23:47.680 --> 00:23:51.559
<v Speaker 3>a repo, and we spit out some nice CI workflows

513
00:23:51.599 --> 00:23:54.319
<v Speaker 3>so you can use those free public repo actions minutes

514
00:23:54.359 --> 00:23:56.720
<v Speaker 3>to put them to use, and then you could use

515
00:23:56.759 --> 00:23:59.759
<v Speaker 3>that as your distribution method if you want instead, and

516
00:23:59.799 --> 00:24:01.480
<v Speaker 3>then that could be a nice way of you know,

517
00:24:02.079 --> 00:24:03.319
<v Speaker 3>regardless of what language you.

518
00:24:03.240 --> 00:24:05.960
<v Speaker 4>Write it in, if you're doing Ruby or Python.

519
00:24:05.680 --> 00:24:08.799
<v Speaker 3>Or Go or whatever. Then you can distribute your software

520
00:24:08.839 --> 00:24:09.720
<v Speaker 3>that way pretty easily.

521
00:24:09.880 --> 00:24:12.279
<v Speaker 1>So if there's any kind of setup or build step

522
00:24:12.359 --> 00:24:14.880
<v Speaker 1>or anything like that, is there some version of like

523
00:24:14.880 --> 00:24:17.279
<v Speaker 1>an install script or something that it runs or yeah.

524
00:24:17.400 --> 00:24:20.839
<v Speaker 3>Yeah, So there's like in Homebrew's Ruby formula, which is

525
00:24:20.920 --> 00:24:25.039
<v Speaker 3>kind of like our DSL for like building and installing software.

526
00:24:25.079 --> 00:24:28.039
<v Speaker 3>Basically there's yeah, there's like an install method and basically

527
00:24:28.119 --> 00:24:30.440
<v Speaker 3>you can much like a normal Ruby you can run

528
00:24:30.440 --> 00:24:33.359
<v Speaker 3>a bunch of system commands in there. Like we try

529
00:24:33.400 --> 00:24:36.000
<v Speaker 3>and do a reasonable guess of like, hey, if it's

530
00:24:36.000 --> 00:24:38.279
<v Speaker 3>a Ruby project, you probably want to run like bundle

531
00:24:38.319 --> 00:24:41.759
<v Speaker 3>install and then you know, stick a Ruby file in

532
00:24:41.799 --> 00:24:44.279
<v Speaker 3>a bin directory somewhere and that probably gets you most

533
00:24:44.279 --> 00:24:46.480
<v Speaker 3>of the way there. But yeah, but it's basically just

534
00:24:46.519 --> 00:24:49.519
<v Speaker 3>like little nice dsls that can kind of help you

535
00:24:49.839 --> 00:24:52.640
<v Speaker 3>get that software onto your machine. And it's I think

536
00:24:52.640 --> 00:24:55.680
<v Speaker 3>one of the nice things about Homebrew is it's definitely

537
00:24:55.720 --> 00:24:59.200
<v Speaker 3>of most of the packaging systems I've ever intacted with,

538
00:24:59.240 --> 00:25:01.039
<v Speaker 3>and from what I hear from people, it's one of

539
00:25:01.079 --> 00:25:04.640
<v Speaker 3>the easiest to just get started with like an existing

540
00:25:04.640 --> 00:25:07.920
<v Speaker 3>piece of software, because essentially you're just like, Okay, run

541
00:25:08.000 --> 00:25:10.920
<v Speaker 3>some commands which you can try yourself in Bash and

542
00:25:10.960 --> 00:25:13.519
<v Speaker 3>then move stuff from one place or another, and then

543
00:25:13.720 --> 00:25:14.079
<v Speaker 3>that's you.

544
00:25:14.319 --> 00:25:17.799
<v Speaker 1>So I mean, in the case of Ruby, Homebrew already

545
00:25:17.839 --> 00:25:20.079
<v Speaker 1>runs Ruby. But let's say that I reach for something

546
00:25:20.119 --> 00:25:25.240
<v Speaker 1>like Go or Rust or maybe I'm using Python, right,

547
00:25:25.440 --> 00:25:28.720
<v Speaker 1>and so I can't assume that the person whose machine

548
00:25:28.799 --> 00:25:32.759
<v Speaker 1>is going to get installed on has you know, the

549
00:25:32.839 --> 00:25:34.880
<v Speaker 1>language or language tools that I need in order to

550
00:25:34.880 --> 00:25:37.359
<v Speaker 1>build and run it. How do you manage that kind

551
00:25:37.400 --> 00:25:37.799
<v Speaker 1>of a thing.

552
00:25:38.240 --> 00:25:40.519
<v Speaker 4>Yeah, so in Homebrew, that's we just have like a

553
00:25:41.119 --> 00:25:42.720
<v Speaker 4>long line again with DSL.

554
00:25:43.039 --> 00:25:45.400
<v Speaker 3>Depends on where you can basically say, okay, I need

555
00:25:46.039 --> 00:25:48.519
<v Speaker 3>Ruby or this particular version of Ruby or whatever it

556
00:25:48.559 --> 00:25:48.880
<v Speaker 3>may be.

557
00:25:49.000 --> 00:25:50.799
<v Speaker 2>Where against all that globally?

558
00:25:51.359 --> 00:25:54.839
<v Speaker 3>Yeah, yeah, so it install that, but Homebrew keeps track

559
00:25:54.920 --> 00:25:58.440
<v Speaker 3>of Okay, did did you ask me to install Let's

560
00:25:58.480 --> 00:26:01.519
<v Speaker 3>just say, say we have or openly night transcription thing,

561
00:26:01.640 --> 00:26:05.319
<v Speaker 3>call it transcribey or whatever, right, and you might install

562
00:26:05.359 --> 00:26:09.799
<v Speaker 3>it with Bruins School transcribe, So that would install Ruby

563
00:26:10.279 --> 00:26:12.640
<v Speaker 3>automatically because that's what you said. But then in a

564
00:26:12.720 --> 00:26:15.599
<v Speaker 3>year you're like, ah, you know, Ruby sucks or whatever.

565
00:26:15.680 --> 00:26:17.559
<v Speaker 4>I'm going to rewrite this and go and then you

566
00:26:17.640 --> 00:26:18.440
<v Speaker 4>switch your.

567
00:26:18.279 --> 00:26:22.000
<v Speaker 3>Packaging to Go, then Homebrew knows when you ran Bruins

568
00:26:22.039 --> 00:26:26.160
<v Speaker 3>School Truscribbe you weren't saying, hey, can I have Ruby

569
00:26:26.200 --> 00:26:28.720
<v Speaker 3>and transcribing. You were just I just care about truanscriby.

570
00:26:28.720 --> 00:26:30.079
<v Speaker 3>I don't care what trubscribey is written in.

571
00:26:30.200 --> 00:26:31.240
<v Speaker 4>Right, So then if it.

572
00:26:31.240 --> 00:26:34.519
<v Speaker 3>Changes in the future to Go, then Homebrew that knows like,

573
00:26:34.559 --> 00:26:35.880
<v Speaker 3>oh well you never asked for Ruby.

574
00:26:35.880 --> 00:26:36.839
<v Speaker 4>We don't need Ruby anymore.

575
00:26:36.960 --> 00:26:39.200
<v Speaker 3>Let's give it a Ruby, right, And again the fun

576
00:26:39.240 --> 00:26:41.960
<v Speaker 3>thing to Go as an example is like, and this

577
00:26:42.000 --> 00:26:44.319
<v Speaker 3>is where it gets slightly different. I won't go into

578
00:26:44.319 --> 00:26:47.559
<v Speaker 3>the details unless you're really interested of like if you're

579
00:26:47.799 --> 00:26:50.920
<v Speaker 3>you're building it yourself versus if Homebrew builds it for you.

580
00:26:51.119 --> 00:26:53.160
<v Speaker 3>But if humbrew builds it for you, then the nice

581
00:26:53.200 --> 00:26:56.119
<v Speaker 3>thing about Go is because Go spits out binaries, then

582
00:26:56.519 --> 00:26:58.920
<v Speaker 3>you don't even need to install GO on your system, right,

583
00:26:59.000 --> 00:27:00.960
<v Speaker 3>you can probably use the finery that we have built

584
00:27:00.960 --> 00:27:03.079
<v Speaker 3>for you, so then you can get it Ruby.

585
00:27:03.119 --> 00:27:03.680
<v Speaker 4>You don't need Go.

586
00:27:03.839 --> 00:27:05.799
<v Speaker 3>We need to instill GO when we're building it for

587
00:27:05.880 --> 00:27:08.799
<v Speaker 3>you in our service, But on your system you don't

588
00:27:08.799 --> 00:27:11.680
<v Speaker 3>need GO unless you're building a right from source as

589
00:27:11.720 --> 00:27:12.240
<v Speaker 3>we would.

590
00:27:12.039 --> 00:27:15.359
<v Speaker 2>Say, right, similar with Rust, Yeah, exactly.

591
00:27:16.759 --> 00:27:19.240
<v Speaker 1>And it seems like with the approach that we're taking

592
00:27:19.240 --> 00:27:22.480
<v Speaker 1>with Ruby or Python or something that's not compiled that way,

593
00:27:23.400 --> 00:27:26.200
<v Speaker 1>or Node as another example, right, if it's running on

594
00:27:26.240 --> 00:27:28.960
<v Speaker 1>any of those, the install node or install Python or

595
00:27:28.960 --> 00:27:33.480
<v Speaker 1>install Ruby approach works fine on Linux or Mac or

596
00:27:33.519 --> 00:27:38.240
<v Speaker 1>in the u SSL, yeah, WSL, whatever it is. I

597
00:27:38.599 --> 00:27:40.920
<v Speaker 1>am not a Windows I help my wife with Windows,

598
00:27:40.960 --> 00:27:46.119
<v Speaker 1>but she's not using the Linux emulator. So but yeah,

599
00:27:46.160 --> 00:27:48.680
<v Speaker 1>so that works fine there. And then if you need

600
00:27:48.680 --> 00:27:52.319
<v Speaker 1>to package it up for something like Windows, then then

601
00:27:52.319 --> 00:27:56.119
<v Speaker 1>you're looking at another tool that's going to essentially package

602
00:27:56.160 --> 00:27:59.079
<v Speaker 1>your language. Right, It's going to put your Ruby VM

603
00:27:59.240 --> 00:28:01.759
<v Speaker 1>in the execute the ball so that you can run.

604
00:28:02.440 --> 00:28:04.039
<v Speaker 3>Yeah, so that's when it starts to get a bit

605
00:28:04.039 --> 00:28:07.079
<v Speaker 3>more messy, and different languages are optimized for that. So again,

606
00:28:07.160 --> 00:28:10.720
<v Speaker 3>like going right back to our original, like I'm writing

607
00:28:10.720 --> 00:28:13.319
<v Speaker 3>a CLI, so I think like one of the first

608
00:28:13.599 --> 00:28:16.279
<v Speaker 3>questions I would probably have is like, what are the

609
00:28:16.400 --> 00:28:19.039
<v Speaker 3>chances are that you're going to want to ship this

610
00:28:19.160 --> 00:28:20.160
<v Speaker 3>to Windows users?

611
00:28:20.240 --> 00:28:20.400
<v Speaker 4>Right?

612
00:28:20.839 --> 00:28:24.720
<v Speaker 3>And if unless the chance is definitely not, then Ruby

613
00:28:24.759 --> 00:28:27.680
<v Speaker 3>and Python and even more so things like Bash are

614
00:28:28.119 --> 00:28:31.279
<v Speaker 3>you know, very easy to get started across when there's

615
00:28:31.880 --> 00:28:35.480
<v Speaker 3>sorry across Linux and mac Os from the outset. But

616
00:28:35.559 --> 00:28:37.960
<v Speaker 3>then when you have like a Windows story, that's when

617
00:28:38.000 --> 00:28:41.440
<v Speaker 3>it starts to get a bit more messy. Like Windows ADS. Again,

618
00:28:41.599 --> 00:28:43.759
<v Speaker 3>like plenty of PACKGEP managers and stuff like that, but

619
00:28:44.440 --> 00:28:47.720
<v Speaker 3>your average Windows user is not going to be familiar

620
00:28:47.720 --> 00:28:51.319
<v Speaker 3>with those, and even a lot of Windows developers don't

621
00:28:51.359 --> 00:28:56.720
<v Speaker 3>necessarily use like package management as widespread as it is

622
00:28:56.799 --> 00:28:59.559
<v Speaker 3>in the Linux and mac Os worlds. So that's when

623
00:28:59.559 --> 00:29:02.799
<v Speaker 3>I would say, like the story that Go for example

624
00:29:02.799 --> 00:29:04.920
<v Speaker 3>can do for you is I'm less clued up on

625
00:29:05.039 --> 00:29:07.039
<v Speaker 3>Rust in this way, So I might excuse me any

626
00:29:07.160 --> 00:29:10.240
<v Speaker 3>Rustians who are listening that I might not know quite

627
00:29:10.279 --> 00:29:12.200
<v Speaker 3>as much about what Ross people are, but certainly I know.

628
00:29:12.279 --> 00:29:14.599
<v Speaker 3>With Go, the nice thing is you can just build

629
00:29:14.640 --> 00:29:18.240
<v Speaker 3>a single binary which you can then have run on

630
00:29:18.279 --> 00:29:21.279
<v Speaker 3>a Windows machine and that will work as expected.

631
00:29:21.400 --> 00:29:21.599
<v Speaker 2>Right.

632
00:29:21.920 --> 00:29:23.559
<v Speaker 3>But the other nice thing with Go is it's the

633
00:29:23.640 --> 00:29:26.720
<v Speaker 3>cross compilation story is very easily is very easy. So

634
00:29:27.359 --> 00:29:29.559
<v Speaker 3>even if you only have access to a Mac machine,

635
00:29:29.599 --> 00:29:33.119
<v Speaker 3>you can build the binary on your Mac for all

636
00:29:33.240 --> 00:29:37.599
<v Speaker 3>mac OS versions essentially and Linux and Windows. And if

637
00:29:37.599 --> 00:29:39.920
<v Speaker 3>you don't have access to those operating systems. You can

638
00:29:40.000 --> 00:29:44.519
<v Speaker 3>have a reasonable degree of confidence that, unless you're doing

639
00:29:44.559 --> 00:29:47.640
<v Speaker 3>kind of wackys specific stuff, that that binary will just

640
00:29:47.759 --> 00:29:50.680
<v Speaker 3>run fine on all three HOSS and like that. That's

641
00:29:50.680 --> 00:29:52.880
<v Speaker 3>a pretty appealing thing if you're building a CLI that

642
00:29:52.960 --> 00:29:54.640
<v Speaker 3>you want to be used cross platform.

643
00:29:54.759 --> 00:30:00.240
<v Speaker 1>Yeah, that makes sense. I'm a little curious getting into

644
00:30:00.680 --> 00:30:03.920
<v Speaker 1>running it on Mac versus Linux? Like are it seems

645
00:30:03.960 --> 00:30:06.559
<v Speaker 1>like for the most part things just generally work the

646
00:30:06.559 --> 00:30:10.400
<v Speaker 1>same way. Are there meaningful differences that you need to

647
00:30:10.400 --> 00:30:11.759
<v Speaker 1>be aware of in certain cases?

648
00:30:12.319 --> 00:30:12.599
<v Speaker 4>Yes?

649
00:30:13.039 --> 00:30:15.440
<v Speaker 3>I think most of the time you don't need to

650
00:30:15.480 --> 00:30:19.160
<v Speaker 3>think too hard about things, and I think it's it's

651
00:30:19.200 --> 00:30:22.119
<v Speaker 3>often relatively obvious when you're sort of starting to get

652
00:30:22.160 --> 00:30:26.319
<v Speaker 3>a little bit more detailed. So, for example, one difference

653
00:30:26.359 --> 00:30:29.799
<v Speaker 3>would be the you know, we're gonna really nerd out

654
00:30:29.880 --> 00:30:34.319
<v Speaker 3>some nice os well like high level ors internals here.

655
00:30:34.519 --> 00:30:39.720
<v Speaker 3>But you know, like mac os and Linux run different kernels, right,

656
00:30:39.759 --> 00:30:42.680
<v Speaker 3>there's the Linux kernel and the mac os Darwin kerdile

657
00:30:43.119 --> 00:30:45.359
<v Speaker 3>and then there's the stuff in user space as well,

658
00:30:45.440 --> 00:30:49.119
<v Speaker 3>so like because yeah, like as you mentioned, like macOS

659
00:30:49.240 --> 00:30:53.640
<v Speaker 3>came from like a BSD kernel land like most of

660
00:30:53.680 --> 00:30:56.599
<v Speaker 3>the user space applications or BSD and on Linux, most

661
00:30:56.599 --> 00:30:58.480
<v Speaker 3>of the user space applications.

662
00:30:58.240 --> 00:31:00.000
<v Speaker 4>Might be g do once.

663
00:31:01.279 --> 00:31:04.119
<v Speaker 3>And Apple won't do so because of GPLC three, which

664
00:31:04.119 --> 00:31:07.319
<v Speaker 3>is a whole other, long and boring conversation. But yeah,

665
00:31:07.519 --> 00:31:12.480
<v Speaker 3>So basically, like if you're calling out to various say

666
00:31:12.519 --> 00:31:16.279
<v Speaker 3>like even Gret, right, Gret has arguments that will work

667
00:31:16.599 --> 00:31:20.200
<v Speaker 3>on maquest and they will not work on Linux in

668
00:31:20.240 --> 00:31:23.160
<v Speaker 3>the same way, and vice versa. So you might if

669
00:31:23.200 --> 00:31:25.400
<v Speaker 3>you're shelling out to Gret, you might need to have

670
00:31:25.960 --> 00:31:30.720
<v Speaker 3>like conditional logic based on the OS you're on. Or alternatively,

671
00:31:30.720 --> 00:31:32.839
<v Speaker 3>instead of shelling out to Gret, you just say, Okay,

672
00:31:32.920 --> 00:31:36.920
<v Speaker 3>I'm gonna instead like get all the lines and I'm

673
00:31:36.960 --> 00:31:39.440
<v Speaker 3>going to iterate off the lines in Ruby and do

674
00:31:39.559 --> 00:31:42.839
<v Speaker 3>things that way too. So I think with with like

675
00:31:42.920 --> 00:31:47.440
<v Speaker 3>writing Ruby itself, like Ruby and Python are both generally

676
00:31:47.440 --> 00:31:51.200
<v Speaker 3>written in such a way that like pretty much everything

677
00:31:51.200 --> 00:31:53.000
<v Speaker 3>you would ever try and do is going to be

678
00:31:53.119 --> 00:31:56.880
<v Speaker 3>cross platformed by default, Right, it's just various little gotcha's

679
00:31:57.000 --> 00:32:00.640
<v Speaker 3>like shelling out or again, I can't remember this is

680
00:32:00.640 --> 00:32:02.640
<v Speaker 3>still the case in twenty twenty five, I'm pretty sure

681
00:32:02.640 --> 00:32:05.519
<v Speaker 3>it is. But like, by default, the next generally ships

682
00:32:05.519 --> 00:32:09.440
<v Speaker 3>with a Letussure ship with a case sensitive file system

683
00:32:09.559 --> 00:32:11.960
<v Speaker 3>and Macwest ships with a case insensitive file system. So

684
00:32:12.000 --> 00:32:14.160
<v Speaker 3>if you're doing all your development on Mac and you

685
00:32:14.240 --> 00:32:17.480
<v Speaker 3>have like some file that you read in from your

686
00:32:17.519 --> 00:32:21.839
<v Speaker 3>repository or whatever, and it's uppercase a you know, Anti

687
00:32:21.920 --> 00:32:23.839
<v Speaker 3>TERB with an opper case versus antique with a lyric

688
00:32:23.839 --> 00:32:28.039
<v Speaker 3>ASA that will watch just final mac os if you're inconsistent.

689
00:32:27.480 --> 00:32:31.559
<v Speaker 4>Between the repo data on disc and how you've written

690
00:32:31.599 --> 00:32:32.759
<v Speaker 4>in your source codes.

691
00:32:32.880 --> 00:32:35.359
<v Speaker 3>But then on the next that my plot right, So

692
00:32:35.799 --> 00:32:38.000
<v Speaker 3>like these are types of little things that you need

693
00:32:38.039 --> 00:32:41.039
<v Speaker 3>to care about when you're doing cross platform development.

694
00:32:41.119 --> 00:32:41.519
<v Speaker 2>Gotcha.

695
00:32:41.680 --> 00:32:44.279
<v Speaker 1>So yeah, I'm just trying to think through the rest

696
00:32:44.319 --> 00:32:46.799
<v Speaker 1>of it. I'm imagining that. Yeah, if I split things

697
00:32:46.880 --> 00:32:49.720
<v Speaker 1>up into files, what it's going to do is it's

698
00:32:49.880 --> 00:32:52.599
<v Speaker 1>going to put all of my files into one place,

699
00:32:53.119 --> 00:32:56.119
<v Speaker 1>put the executable in the path somewhere, and then the

700
00:32:56.119 --> 00:32:58.720
<v Speaker 1>executable is going to be aware of where the things

701
00:32:58.759 --> 00:33:01.400
<v Speaker 1>are and just have that in the load path essentially

702
00:33:01.519 --> 00:33:02.640
<v Speaker 1>exactly exactly.

703
00:33:05.880 --> 00:33:08.160
<v Speaker 2>Now, with testing.

704
00:33:08.200 --> 00:33:10.880
<v Speaker 1>Are there specific things that you do when you test

705
00:33:10.920 --> 00:33:13.000
<v Speaker 1>them or do you just kind of test the internal

706
00:33:13.000 --> 00:33:15.599
<v Speaker 1>logic and assume that your flags and stuff work.

707
00:33:15.799 --> 00:33:18.960
<v Speaker 3>Yeah, so that's a good question as well, because I think,

708
00:33:19.319 --> 00:33:22.240
<v Speaker 3>particularly we've never really written a CLI before, you would

709
00:33:22.440 --> 00:33:26.559
<v Speaker 3>probably think, particularly once you get to like the multiple

710
00:33:26.599 --> 00:33:28.519
<v Speaker 3>files level of like, Okay, I'm going to write a

711
00:33:28.519 --> 00:33:32.000
<v Speaker 3>bunch of unit tests for the internals and make sure

712
00:33:32.000 --> 00:33:32.519
<v Speaker 3>that they work.

713
00:33:33.200 --> 00:33:35.920
<v Speaker 4>My experience as a you know, longtime.

714
00:33:35.720 --> 00:33:40.359
<v Speaker 3>CLIR is that like, actually, that is going to cause

715
00:33:40.400 --> 00:33:42.240
<v Speaker 3>you a lot of pain unless you have at least

716
00:33:42.240 --> 00:33:46.000
<v Speaker 3>some tests that are actually shelling out and running the

717
00:33:46.039 --> 00:33:52.480
<v Speaker 3>script externally, right And we I guess relatively recently in Humbrew,

718
00:33:52.519 --> 00:33:55.480
<v Speaker 3>which in my mind is probably like ten years ago,

719
00:33:55.559 --> 00:33:57.640
<v Speaker 3>but that's recent as far as I'm conturned.

720
00:33:57.720 --> 00:33:58.759
<v Speaker 4>Yeah, So we used to have.

721
00:33:58.680 --> 00:34:01.920
<v Speaker 3>A lot of tests that would just you know, unit tests,

722
00:34:01.960 --> 00:34:04.319
<v Speaker 3>and then we would just find that like really core

723
00:34:04.480 --> 00:34:09.400
<v Speaker 3>functionality would break because all the internals, all the internal

724
00:34:09.440 --> 00:34:12.159
<v Speaker 3>APIs we're working, you know, it's it's the tailors all

725
00:34:12.199 --> 00:34:14.320
<v Speaker 3>the time with like unit test versus integration test, right of,

726
00:34:14.480 --> 00:34:17.159
<v Speaker 3>like you can have all of your internal APIs working

727
00:34:17.199 --> 00:34:21.000
<v Speaker 3>perfectly and are beautifully tested, but then when you fit

728
00:34:21.039 --> 00:34:23.559
<v Speaker 3>them all together, things explode. So as a result, like

729
00:34:23.760 --> 00:34:27.840
<v Speaker 3>I've always found with CLIs in particular, like really taking

730
00:34:27.880 --> 00:34:32.239
<v Speaker 3>that sort of outside in testing approach is really nice

731
00:34:32.360 --> 00:34:35.719
<v Speaker 3>to ensure that you're like, okay, so say again, we're

732
00:34:35.719 --> 00:34:40.119
<v Speaker 3>talking about this opening CLI type thing. Like if I

733
00:34:40.159 --> 00:34:42.960
<v Speaker 3>was writing a CI pipeline to test that, I would

734
00:34:43.000 --> 00:34:47.960
<v Speaker 3>probably give giob actions my like either my or test

735
00:34:48.119 --> 00:34:50.760
<v Speaker 3>open ei key, and I would have it in CI

736
00:34:50.960 --> 00:34:54.519
<v Speaker 3>like actually trying to run a transcribe command on maybe

737
00:34:54.559 --> 00:34:57.719
<v Speaker 3>like a single word or some very short amount of

738
00:34:57.719 --> 00:35:02.920
<v Speaker 3>input data and actually making sure that as close to

739
00:35:03.039 --> 00:35:07.320
<v Speaker 3>a real use of that application is actually being tested

740
00:35:07.519 --> 00:35:10.280
<v Speaker 3>and working as expected, because all the kind of clever,

741
00:35:10.920 --> 00:35:13.519
<v Speaker 3>like all the cleverer unit tests you might have will

742
00:35:13.599 --> 00:35:16.320
<v Speaker 3>just otherwise fall over when you need them the most.

743
00:35:16.519 --> 00:35:20.920
<v Speaker 2>Yeah, I like it makes sense. I'm gonna oh, go ahead.

744
00:35:21.159 --> 00:35:23.119
<v Speaker 3>I was just gonna say, so another thing you might find,

745
00:35:23.159 --> 00:35:25.320
<v Speaker 3>I guess as I've been talking about, like CLI performance,

746
00:35:25.320 --> 00:35:28.039
<v Speaker 3>because it's sorts in front of my mind with this stuff.

747
00:35:28.079 --> 00:35:29.559
<v Speaker 4>So there's a guy.

748
00:35:29.400 --> 00:35:34.239
<v Speaker 3>Who's written loads of really helpful little CLIs and rust

749
00:35:34.360 --> 00:35:35.719
<v Speaker 3>I forget his name off the top of my head,

750
00:35:35.719 --> 00:35:37.840
<v Speaker 3>but we can find him Google him later or whatever.

751
00:35:38.119 --> 00:35:40.639
<v Speaker 3>So he's got a really nice tool he's built called

752
00:35:40.760 --> 00:35:46.400
<v Speaker 3>hyper Fine, which is a CLI benchmarking tool. Basically it

753
00:35:46.440 --> 00:35:48.639
<v Speaker 3>does a bunch of other things, but that's what I've

754
00:35:48.719 --> 00:35:50.679
<v Speaker 3>found it most useful for. So what that does is

755
00:35:50.719 --> 00:35:53.159
<v Speaker 3>it takes this sort of outside and approach and you

756
00:35:53.199 --> 00:35:55.199
<v Speaker 3>can say like, hey, I want you to run this

757
00:35:55.280 --> 00:35:59.480
<v Speaker 3>command this many times and then tell me like what

758
00:35:59.519 --> 00:36:02.079
<v Speaker 3>the performance characteristics are, or I want you to run

759
00:36:02.119 --> 00:36:04.519
<v Speaker 3>this command and this command and tell me the difference

760
00:36:04.519 --> 00:36:07.199
<v Speaker 3>between the two. So quite often when I'm doing like

761
00:36:07.280 --> 00:36:10.480
<v Speaker 3>Homebrew performance work, the way I will measure the performance

762
00:36:10.480 --> 00:36:14.039
<v Speaker 3>differences is like that command could include like checking out

763
00:36:14.039 --> 00:36:16.159
<v Speaker 3>a brunch, or you can you should specify that as

764
00:36:16.280 --> 00:36:19.199
<v Speaker 3>like preparatory command or whatever. So I'll say, okay, check

765
00:36:19.199 --> 00:36:22.760
<v Speaker 3>out this brunch, run this Homebrew command, then check out

766
00:36:22.760 --> 00:36:25.280
<v Speaker 3>this brunch, run this homboric command, and then it just

767
00:36:25.400 --> 00:36:27.760
<v Speaker 3>has a nice little display of almost like well, when

768
00:36:27.800 --> 00:36:30.719
<v Speaker 3>you run this command, it's one point four times faster

769
00:36:30.840 --> 00:36:34.719
<v Speaker 3>on average, and that varies by like two percent like

770
00:36:34.840 --> 00:36:37.679
<v Speaker 3>across the iterations, and it will I think everyone's at

771
00:36:37.719 --> 00:36:39.920
<v Speaker 3>ten times by default, but you can you could say

772
00:36:40.199 --> 00:36:43.280
<v Speaker 3>run this a thousand times or two times or whatever,

773
00:36:43.360 --> 00:36:45.480
<v Speaker 3>and there's like as you might expect for kind of

774
00:36:45.480 --> 00:36:49.360
<v Speaker 3>a beautiful like proper cli.

775
00:36:49.039 --> 00:36:50.039
<v Speaker 4>Nerd cli like this.

776
00:36:50.639 --> 00:36:53.280
<v Speaker 3>You know, there's like so many different options to twiddle

777
00:36:53.280 --> 00:36:55.559
<v Speaker 3>every possible knob to get it to work exactly how

778
00:36:55.599 --> 00:36:57.440
<v Speaker 3>you want it to. But yeah, but if you're ever

779
00:36:57.599 --> 00:36:59.679
<v Speaker 3>in a world where you're like I really care about

780
00:36:59.679 --> 00:37:02.880
<v Speaker 3>the perform Morman's implications of my cli, like that is

781
00:37:03.360 --> 00:37:06.239
<v Speaker 3>the best tool I've ever used and works basically exactly

782
00:37:06.239 --> 00:37:09.480
<v Speaker 3>how i want it to because it does that inside

783
00:37:09.519 --> 00:37:14.079
<v Speaker 3>out testing right of like actually running the actual process

784
00:37:14.239 --> 00:37:17.639
<v Speaker 3>and then measuring the actual time that like it runs forth.

785
00:37:17.920 --> 00:37:19.840
<v Speaker 4>So big shout out the hyper fine.

786
00:37:19.960 --> 00:37:22.079
<v Speaker 2>Yeah, the I found it on GitHub.

787
00:37:22.079 --> 00:37:26.920
<v Speaker 1>It's David Peter and or shark dp is his gethub handle,

788
00:37:27.519 --> 00:37:31.599
<v Speaker 1>And yeah, yeah, looks like a cool tool because.

789
00:37:31.400 --> 00:37:33.239
<v Speaker 2>I wanted to switch gears a little bit.

790
00:37:33.440 --> 00:37:35.079
<v Speaker 4>Yeah please, So I was.

791
00:37:35.360 --> 00:37:38.119
<v Speaker 1>I wound up on your blog when I was getting

792
00:37:38.119 --> 00:37:40.800
<v Speaker 1>ready for the episode, and you have an article on

793
00:37:40.920 --> 00:37:45.440
<v Speaker 1>here and we've wound up talking about AI, and it

794
00:37:45.440 --> 00:37:47.880
<v Speaker 1>seems like it's still the hot topic. It's funny because

795
00:37:47.920 --> 00:37:50.119
<v Speaker 1>over the last i don't know, three four or five months,

796
00:37:50.519 --> 00:37:54.079
<v Speaker 1>I've really started to use AI quite a bit. Sometimes

797
00:37:54.079 --> 00:37:57.760
<v Speaker 1>I use it essentially to write most of the code,

798
00:37:57.800 --> 00:38:00.280
<v Speaker 1>and then I have people, you know, get concern learned

799
00:38:00.440 --> 00:38:03.119
<v Speaker 1>about whether AI is going to take people's jobs and

800
00:38:03.159 --> 00:38:05.599
<v Speaker 1>things like that, which you address in your article here

801
00:38:05.599 --> 00:38:08.440
<v Speaker 1>it says open source maintainers thrive in the LM era.

802
00:38:08.679 --> 00:38:10.159
<v Speaker 1>You know, you address some of that, and you talk

803
00:38:10.199 --> 00:38:12.679
<v Speaker 1>about how people are using lms and things like that.

804
00:38:13.360 --> 00:38:17.239
<v Speaker 1>I'm just wondering, like, what's your experience using LLLM tools

805
00:38:17.280 --> 00:38:20.639
<v Speaker 1>like Cursor or Copilot. And then the other question I

806
00:38:20.679 --> 00:38:23.599
<v Speaker 1>have is, and you kind of address it here, is

807
00:38:23.599 --> 00:38:25.280
<v Speaker 1>is there any hope for the people that are freaked

808
00:38:25.280 --> 00:38:27.679
<v Speaker 1>out that AI is going to take their programming job?

809
00:38:27.880 --> 00:38:31.840
<v Speaker 3>Yeah, so I guess I'll make sure I get to

810
00:38:31.920 --> 00:38:35.159
<v Speaker 3>both of those. But yeah, I guess the experience wise,

811
00:38:35.960 --> 00:38:38.679
<v Speaker 3>I've been probably using some sorts of tools and some

812
00:38:38.760 --> 00:38:42.880
<v Speaker 3>cost of capacity since the very early days. So like

813
00:38:43.119 --> 00:38:48.280
<v Speaker 3>back when Copilot was still an internal alpha, I get

814
00:38:48.320 --> 00:38:50.159
<v Speaker 3>help based on I.

815
00:38:50.039 --> 00:38:52.159
<v Speaker 4>Think GPT too to start with.

816
00:38:52.360 --> 00:38:55.400
<v Speaker 3>Yeah, and opening I had publicly not really done anything

817
00:38:55.400 --> 00:38:58.800
<v Speaker 3>except released a bunch of papers. Yeah, Like I was

818
00:38:58.840 --> 00:39:02.480
<v Speaker 3>asked to test it internally essentially, and like I was

819
00:39:02.559 --> 00:39:05.320
<v Speaker 3>known for being the type of person who was good

820
00:39:05.679 --> 00:39:08.239
<v Speaker 3>if you wanted honest opinions of the things. I was

821
00:39:08.239 --> 00:39:11.320
<v Speaker 3>testing because regardless of the political consequences, if you asked

822
00:39:11.320 --> 00:39:12.320
<v Speaker 3>me to test some thing and I thought it was

823
00:39:12.360 --> 00:39:14.679
<v Speaker 3>all trash, try to be nice about it, but like

824
00:39:14.719 --> 00:39:16.960
<v Speaker 3>I would not tell you that it was great. I

825
00:39:16.960 --> 00:39:19.559
<v Speaker 3>would tell you that it was not great. But yeah,

826
00:39:19.639 --> 00:39:22.440
<v Speaker 3>So I remember trying this and being like this will

827
00:39:22.719 --> 00:39:26.400
<v Speaker 3>because I'm sure people it's almost hard to even remember.

828
00:39:26.480 --> 00:39:29.400
<v Speaker 3>But like if you put yourself back in whatever this

829
00:39:29.679 --> 00:39:32.760
<v Speaker 3>was like twenty twenty one or something like that, Like

830
00:39:33.079 --> 00:39:35.679
<v Speaker 3>you know, if someone had described what you're able to

831
00:39:35.719 --> 00:39:38.079
<v Speaker 3>do now with Copola or Cursor and they said I

832
00:39:38.159 --> 00:39:40.119
<v Speaker 3>built a thing that does this, you would be like

833
00:39:40.559 --> 00:39:42.360
<v Speaker 3>your eyes would roll out your head and then you'd

834
00:39:42.360 --> 00:39:44.960
<v Speaker 3>be like okay, like yeah, whatever. Like I've seen a

835
00:39:45.000 --> 00:39:48.800
<v Speaker 3>lot of autocomplete, like right, it always sucks. It just

836
00:39:48.840 --> 00:39:51.079
<v Speaker 3>gets in the way. It's annoying, it's not useful. Like

837
00:39:51.159 --> 00:39:54.039
<v Speaker 3>I write Ruby now, the auto complaint in Ruby sucks.

838
00:39:54.079 --> 00:39:55.719
<v Speaker 3>I don't really care and I don't really miss it

839
00:39:55.760 --> 00:39:58.960
<v Speaker 3>anymore because I've got used to it and whatever. This

840
00:39:59.119 --> 00:40:02.039
<v Speaker 3>is just yeah, nothing that I care about, right, and

841
00:40:02.079 --> 00:40:05.320
<v Speaker 3>I try to and like my almost immediate reaction was

842
00:40:05.360 --> 00:40:08.519
<v Speaker 3>like even in when it was way more limited, was like, wow,

843
00:40:08.719 --> 00:40:12.440
<v Speaker 3>this is this is not like radically transformative yet, this

844
00:40:12.559 --> 00:40:16.760
<v Speaker 3>is not incredibly workflow changing yet, but this is really good.

845
00:40:16.679 --> 00:40:18.320
<v Speaker 4>And this is a lot better than I expected.

846
00:40:18.400 --> 00:40:22.559
<v Speaker 3>And ironically, you could build a pretty damn good autocomplete

847
00:40:23.159 --> 00:40:26.480
<v Speaker 3>without any specific knowledge of Ruby as a language, but

848
00:40:26.639 --> 00:40:29.639
<v Speaker 3>just using this kind of LM technology. And I said

849
00:40:29.679 --> 00:40:31.800
<v Speaker 3>to the team, I was like, yeah, I assumed this

850
00:40:31.840 --> 00:40:36.000
<v Speaker 3>would be complete garbage and it's actually good, well done,

851
00:40:36.039 --> 00:40:38.280
<v Speaker 3>Like can I keep using this please? So yeah, So

852
00:40:38.360 --> 00:40:41.320
<v Speaker 3>I guess I went from that to use and copolitive.

853
00:40:41.400 --> 00:40:43.719
<v Speaker 1>I just want to chime in that lines up with

854
00:40:43.760 --> 00:40:45.719
<v Speaker 1>my early experience with a lot of it, where it

855
00:40:45.760 --> 00:40:48.519
<v Speaker 1>was it was a little beyond autocomplete, and it didn't

856
00:40:48.559 --> 00:40:50.880
<v Speaker 1>always give me what I wanted, Like sometimes it was

857
00:40:50.920 --> 00:40:54.199
<v Speaker 1>like you are assuming that I am doing something wildly

858
00:40:54.280 --> 00:40:57.559
<v Speaker 1>drastically different from what I'm doing, but it was it

859
00:40:57.639 --> 00:41:01.239
<v Speaker 1>was right often enough to where it was like, Okay,

860
00:41:01.559 --> 00:41:03.079
<v Speaker 1>I definitely want this turned on.

861
00:41:03.960 --> 00:41:05.320
<v Speaker 3>And I think that's the thing like in the early

862
00:41:05.400 --> 00:41:08.719
<v Speaker 3>days particularly, and I think maybe some people who tried

863
00:41:08.760 --> 00:41:10.960
<v Speaker 3>stuff out too early of over index on this. I

864
00:41:11.719 --> 00:41:14.960
<v Speaker 3>think it was very personal in terms of like what

865
00:41:14.960 --> 00:41:18.480
<v Speaker 3>what's the hit rate? Because I mean, I find this

866
00:41:18.480 --> 00:41:20.440
<v Speaker 3>with self engineers in general. Right, is there some selfware

867
00:41:20.440 --> 00:41:27.159
<v Speaker 3>engineers I know who will completely genuinely, without any sense

868
00:41:27.159 --> 00:41:31.480
<v Speaker 3>of irony, will express but this only solves the customer

869
00:41:31.519 --> 00:41:34.920
<v Speaker 3>problem ninety nine percent at the time. Therefore it's pointless

870
00:41:35.320 --> 00:41:37.559
<v Speaker 3>one percent of the time. Why would you ever do that?

871
00:41:37.639 --> 00:41:40.679
<v Speaker 3>And so well, actually, for most people, if this makes

872
00:41:40.719 --> 00:41:43.239
<v Speaker 3>things one hundred times faster ninety nine percent at the time,

873
00:41:43.239 --> 00:41:45.360
<v Speaker 3>which I'm not saying AI does, but like in some

874
00:41:46.079 --> 00:41:50.079
<v Speaker 3>declative software cases, things do, that's probably an enormous amount

875
00:41:50.079 --> 00:41:52.360
<v Speaker 3>of business value for a lot of people, right, Right,

876
00:41:52.400 --> 00:41:54.599
<v Speaker 3>But there's we have and I don't think it necessarily

877
00:41:54.639 --> 00:41:56.639
<v Speaker 3>a bad thing, but we tend to have a streak

878
00:41:56.760 --> 00:42:00.800
<v Speaker 3>as a you know, we're literally the people of zeros

879
00:42:00.800 --> 00:42:03.239
<v Speaker 3>and ones, right, So it's like we want things to

880
00:42:03.239 --> 00:42:05.519
<v Speaker 3>be perfect, and when things are perfect, it's easy to

881
00:42:05.599 --> 00:42:08.360
<v Speaker 3>kind of fawardto the like, well one did I bother, like,

882
00:42:08.599 --> 00:42:11.159
<v Speaker 3>you know, what's the point? Yeah, And I definitely think

883
00:42:11.159 --> 00:42:15.239
<v Speaker 3>there's only lms, like the only copilot, it's like the

884
00:42:15.320 --> 00:42:18.599
<v Speaker 3>autocompletion was you know, if that's wrong fifty.

885
00:42:18.239 --> 00:42:19.079
<v Speaker 4>Percent of the time.

886
00:42:19.599 --> 00:42:21.760
<v Speaker 3>There's a lot of people who just find it really

887
00:42:21.920 --> 00:42:23.840
<v Speaker 3>really annoying, Whereas I'm the type.

888
00:42:23.639 --> 00:42:26.079
<v Speaker 2>Of person, yeah, but it sped me way up.

889
00:42:26.039 --> 00:42:29.559
<v Speaker 3>Exactly, Like Whereas I think I'm lazy enough that I'm

890
00:42:29.599 --> 00:42:31.800
<v Speaker 3>like if fifty percent of the time I can just

891
00:42:32.199 --> 00:42:34.280
<v Speaker 3>like I'm a reasonably fast type or I was never

892
00:42:34.320 --> 00:42:37.480
<v Speaker 3>one of those like hyper fast. I've switched to the

893
00:42:37.559 --> 00:42:41.320
<v Speaker 3>Vorac because it gets me an extra ten per second whatever,

894
00:42:41.800 --> 00:42:45.199
<v Speaker 3>like VIM keyboard warrior types. So for me, like I'm like, oh, yeah,

895
00:42:45.239 --> 00:42:47.800
<v Speaker 3>you know, like half as much typing some of the

896
00:42:47.840 --> 00:42:50.400
<v Speaker 3>time is well worth it for me, right, and I

897
00:42:50.679 --> 00:42:52.840
<v Speaker 3>can I feel able.

898
00:42:52.599 --> 00:42:55.440
<v Speaker 4>To ignore the visual noise of it always.

899
00:42:55.119 --> 00:42:57.440
<v Speaker 3>Trying to prompt me to do the wrong thing, right,

900
00:42:58.119 --> 00:43:00.559
<v Speaker 3>And some people wait that and I guess it right,

901
00:43:00.719 --> 00:43:02.320
<v Speaker 3>But yeah, I guess I would say if you're one

902
00:43:02.320 --> 00:43:04.800
<v Speaker 3>of those people who I hated that in you know,

903
00:43:05.199 --> 00:43:08.320
<v Speaker 3>maybe even six to twelve months ago, like you should

904
00:43:08.360 --> 00:43:11.400
<v Speaker 3>check back in because things are changing, yeah very fast.

905
00:43:11.599 --> 00:43:11.760
<v Speaker 2>Right.

906
00:43:12.840 --> 00:43:16.519
<v Speaker 1>Yeah, So kind of getting into the question that I'm asking,

907
00:43:17.079 --> 00:43:18.960
<v Speaker 1>I'm enjoying this, right, I'm not saying you didn't get

908
00:43:19.000 --> 00:43:22.039
<v Speaker 1>to the point, of course. What I'm saying is so

909
00:43:22.199 --> 00:43:24.079
<v Speaker 1>like this morning, right or last night, I think it

910
00:43:24.159 --> 00:43:26.159
<v Speaker 1>was last night I started it, and then this morning

911
00:43:26.159 --> 00:43:30.199
<v Speaker 1>I finished it. But you know, I'm expanding my podcast

912
00:43:30.280 --> 00:43:34.119
<v Speaker 1>hosting system which also does courses in summits and coaching

913
00:43:34.199 --> 00:43:37.840
<v Speaker 1>and podcasts and screencasts, right, because that's all stuff I

914
00:43:37.840 --> 00:43:40.599
<v Speaker 1>want to offer off of the back of the podcasts.

915
00:43:40.719 --> 00:43:40.880
<v Speaker 2>Right.

916
00:43:41.039 --> 00:43:43.280
<v Speaker 1>I was like, okay, well, I've got this multi tenant

917
00:43:43.320 --> 00:43:45.280
<v Speaker 1>setup going, and so I need people to be able

918
00:43:45.320 --> 00:43:47.440
<v Speaker 1>to sign up, right and actually pay me to use

919
00:43:47.480 --> 00:43:49.599
<v Speaker 1>the system. And so I said, hey, I need a

920
00:43:49.639 --> 00:43:53.199
<v Speaker 1>sign up for him. And I mean, it wrote all

921
00:43:53.199 --> 00:43:55.480
<v Speaker 1>the views and rails, It wrote all the management and

922
00:43:55.519 --> 00:43:59.239
<v Speaker 1>the admin system, It wrote you know, and and it

923
00:44:00.079 --> 00:44:02.000
<v Speaker 1>basically worked. I mean I had to tweak a couple

924
00:44:02.079 --> 00:44:05.000
<v Speaker 1>of things because you know, it was like, okay, you

925
00:44:05.000 --> 00:44:05.480
<v Speaker 1>you know, you.

926
00:44:05.559 --> 00:44:06.360
<v Speaker 2>Got this wrong.

927
00:44:06.760 --> 00:44:08.199
<v Speaker 1>And then when I asked to do something else, it

928
00:44:08.320 --> 00:44:10.039
<v Speaker 1>changed it back and I had to go in and say, no,

929
00:44:10.239 --> 00:44:12.079
<v Speaker 1>actually you did it wrong the first time.

930
00:44:12.599 --> 00:44:15.719
<v Speaker 2>But I mean it it.

931
00:44:15.719 --> 00:44:17.800
<v Speaker 1>Would have taken me a day or so to figure out,

932
00:44:17.920 --> 00:44:20.840
<v Speaker 1>you know, to actually build it out on my own, right,

933
00:44:20.960 --> 00:44:24.559
<v Speaker 1>go in and put everything together. It's all pretty basic stuff,

934
00:44:25.559 --> 00:44:27.559
<v Speaker 1>but it I mean, it just wrote it in like

935
00:44:27.719 --> 00:44:30.920
<v Speaker 1>twenty minutes, right, and then and then the tweaking took

936
00:44:30.960 --> 00:44:34.760
<v Speaker 1>me probably another forty five minutes, and so I can

937
00:44:34.800 --> 00:44:35.880
<v Speaker 1>see people looking.

938
00:44:35.679 --> 00:44:38.079
<v Speaker 2>At it and going, this thing is going to take

939
00:44:38.079 --> 00:44:38.519
<v Speaker 2>my job.

940
00:44:39.440 --> 00:44:43.039
<v Speaker 3>Yeah, And I understand why people think that, and I guess, like,

941
00:44:43.239 --> 00:44:47.239
<v Speaker 3>to me, it would be when someone with your level

942
00:44:47.280 --> 00:44:51.920
<v Speaker 3>of experience, Charles, is able to do that and there

943
00:44:52.000 --> 00:44:55.639
<v Speaker 3>is zero tweaking, and like, I've done this one hundred

944
00:44:55.679 --> 00:44:58.239
<v Speaker 3>times in the last two weeks and never any point

945
00:44:58.239 --> 00:45:01.679
<v Speaker 3>if I had to change a single character like that

946
00:45:01.719 --> 00:45:05.039
<v Speaker 3>would be when I would be more concerned about being like, well,

947
00:45:05.280 --> 00:45:08.239
<v Speaker 3>you know, maybe I still think the job of being

948
00:45:08.239 --> 00:45:11.159
<v Speaker 3>a software engineer wouldn't go away in that case, because

949
00:45:11.719 --> 00:45:16.039
<v Speaker 3>I think we are even outside of the programming. Right,

950
00:45:16.320 --> 00:45:20.679
<v Speaker 3>my was cooking some sweet potato in the air fryer yesterday, right,

951
00:45:20.760 --> 00:45:23.199
<v Speaker 3>and my wife and I both use Chattypata, and I

952
00:45:23.280 --> 00:45:27.000
<v Speaker 3>transcribed at using voice, and she heard the way in

953
00:45:27.039 --> 00:45:29.719
<v Speaker 3>which I speak to CHATCHYPT and the amount of context

954
00:45:29.800 --> 00:45:32.480
<v Speaker 3>I gave it about like here's some facts about my

955
00:45:32.599 --> 00:45:35.639
<v Speaker 3>particular sweet potato and how I like it, here's some

956
00:45:35.639 --> 00:45:37.159
<v Speaker 3>facts about my air fryer and whatever.

957
00:45:37.159 --> 00:45:39.519
<v Speaker 4>And she was like, wow, like you you said a

958
00:45:39.559 --> 00:45:39.960
<v Speaker 4>lot of.

959
00:45:39.880 --> 00:45:43.400
<v Speaker 3>Stuff there, whereas I would just be like cook sweet

960
00:45:43.400 --> 00:45:46.239
<v Speaker 3>potato in air fryer, right, and the proplet she would

961
00:45:46.239 --> 00:45:48.800
<v Speaker 3>get back would be pretty poor, And the prop that

962
00:45:48.840 --> 00:45:49.960
<v Speaker 3>I get back is amazing, Right.

963
00:45:50.000 --> 00:45:51.079
<v Speaker 4>So I guess some.

964
00:45:51.039 --> 00:45:53.800
<v Speaker 3>People talk about like prompt engineering or context engineering or whatever,

965
00:45:53.880 --> 00:45:55.960
<v Speaker 3>but like, I think there's more to it than that,

966
00:45:56.039 --> 00:45:59.880
<v Speaker 3>and I think there's a reason why the experts in

967
00:46:00.039 --> 00:46:03.480
<v Speaker 3>prompt engineering or context engineering don't just happen to be

968
00:46:03.639 --> 00:46:09.199
<v Speaker 3>like international tennis players or philosophers or whatever. Like there's

969
00:46:09.239 --> 00:46:12.760
<v Speaker 3>mostly software engineers, or at least software adjacent people, because like,

970
00:46:13.440 --> 00:46:16.559
<v Speaker 3>this is still talking to computers, and computers still like

971
00:46:16.599 --> 00:46:19.079
<v Speaker 3>to be talked to in a like LM's like to

972
00:46:19.119 --> 00:46:20.960
<v Speaker 3>be talked to in a different way to you know,

973
00:46:21.000 --> 00:46:21.599
<v Speaker 3>your CPU.

974
00:46:22.079 --> 00:46:24.360
<v Speaker 4>But it's still sort of an art and a craft

975
00:46:24.400 --> 00:46:24.840
<v Speaker 4>in that way.

976
00:46:24.880 --> 00:46:28.199
<v Speaker 3>And like I can definitely imagine almost the worst case

977
00:46:28.199 --> 00:46:30.880
<v Speaker 3>scenario of when you're gonna be writing a lot less

978
00:46:30.920 --> 00:46:33.400
<v Speaker 3>code by hand than you ever were before, and for

979
00:46:33.400 --> 00:46:35.519
<v Speaker 3>some people that really bums them out and freaks them out.

980
00:46:36.079 --> 00:46:39.119
<v Speaker 3>But I still think that job of like I take

981
00:46:39.239 --> 00:46:43.239
<v Speaker 3>customer requirements and turn them into software, that's still a job, right,

982
00:46:43.320 --> 00:46:45.920
<v Speaker 3>And that's still a hard job, and it's still a

983
00:46:46.000 --> 00:46:49.480
<v Speaker 3>job that someone like yourself, with a lot of experience

984
00:46:50.079 --> 00:46:53.039
<v Speaker 3>you are able to work with LMS dramatically more effectively

985
00:46:53.159 --> 00:46:56.079
<v Speaker 3>than a random person who started coding two months ago.

986
00:46:56.199 --> 00:46:57.960
<v Speaker 2>Right, Yeah, I agree.

987
00:46:58.920 --> 00:47:01.559
<v Speaker 1>There are a couple of things you kind of talked

988
00:47:01.599 --> 00:47:03.679
<v Speaker 1>through that I want to touch on. I mean, one

989
00:47:03.679 --> 00:47:08.320
<v Speaker 1>of them is, yeah, you figure out what essentially what

990
00:47:08.360 --> 00:47:11.199
<v Speaker 1>context you have to give it, right, so you give

991
00:47:11.199 --> 00:47:13.079
<v Speaker 1>it all of the information it needs so it can

992
00:47:13.119 --> 00:47:16.679
<v Speaker 1>break it down and go okay that this is this

993
00:47:16.760 --> 00:47:19.440
<v Speaker 1>is what I'm working with, and then yeah, it'll give

994
00:47:19.440 --> 00:47:21.639
<v Speaker 1>you a much better response. One other thing that I

995
00:47:21.760 --> 00:47:24.719
<v Speaker 1>found that just kind of comes with experience with the

996
00:47:25.000 --> 00:47:27.440
<v Speaker 1>LLMS is that and this came up today, like I

997
00:47:27.480 --> 00:47:30.000
<v Speaker 1>forgot to tell it I'm not using device on my

998
00:47:30.119 --> 00:47:33.599
<v Speaker 1>Rails app, and so it actually said right because I

999
00:47:33.639 --> 00:47:35.480
<v Speaker 1>told it. I was like, you need to send an

1000
00:47:35.480 --> 00:47:39.079
<v Speaker 1>email confirmation when people sign up for the system, right,

1001
00:47:39.239 --> 00:47:41.360
<v Speaker 1>not just a welcome email, because I need to confirm

1002
00:47:41.400 --> 00:47:44.360
<v Speaker 1>that their email works. And so it turned around and

1003
00:47:44.400 --> 00:47:48.159
<v Speaker 1>it said I see that you're using device confirmable and

1004
00:47:48.480 --> 00:47:50.719
<v Speaker 1>I immediately had to get in and stop it and

1005
00:47:50.760 --> 00:47:54.159
<v Speaker 1>say I am not using device right then, and then

1006
00:47:54.199 --> 00:47:55.360
<v Speaker 1>it did the right thing, and so.

1007
00:47:55.360 --> 00:47:56.320
<v Speaker 2>You know, I had to remember that.

1008
00:47:56.400 --> 00:47:58.800
<v Speaker 1>And so some of that with the prompt engineering, Yeah,

1009
00:47:58.840 --> 00:48:01.360
<v Speaker 1>you figure out what context it needs in order to

1010
00:48:01.400 --> 00:48:03.760
<v Speaker 1>make the right decision, and then you give it to it.

1011
00:48:04.039 --> 00:48:06.079
<v Speaker 1>And a lot of it, too, is just being thorough

1012
00:48:06.159 --> 00:48:10.119
<v Speaker 1>right so that it doesn't make any assumptions. I know,

1013
00:48:10.159 --> 00:48:13.239
<v Speaker 1>we're kind of answerpromorphizing the LM and it's just a

1014
00:48:13.280 --> 00:48:16.159
<v Speaker 1>predictive language model, but you know, yeah, it doesn't make

1015
00:48:16.159 --> 00:48:20.360
<v Speaker 1>any assumptions on what you want. And so yeah, some

1016
00:48:20.480 --> 00:48:23.360
<v Speaker 1>of it's going to just boil down to, yeah, I'm

1017
00:48:23.400 --> 00:48:26.079
<v Speaker 1>the human that's giving it a proper prompt that gives

1018
00:48:26.119 --> 00:48:29.480
<v Speaker 1>me better outputs. But the other thing is is that, yeah,

1019
00:48:29.480 --> 00:48:31.480
<v Speaker 1>I still find that I have to tweak it, or

1020
00:48:31.480 --> 00:48:33.519
<v Speaker 1>at least I have to verify it right. Even if

1021
00:48:33.559 --> 00:48:35.119
<v Speaker 1>I didn't have to touch it, I have to verify

1022
00:48:35.159 --> 00:48:38.039
<v Speaker 1>that it does the thing right. I have to spin

1023
00:48:38.159 --> 00:48:40.599
<v Speaker 1>up my app and go and click through it or

1024
00:48:40.639 --> 00:48:42.480
<v Speaker 1>write or if it's a CLI, you know, I have

1025
00:48:42.519 --> 00:48:44.119
<v Speaker 1>to run it a couple of different ways to make

1026
00:48:44.159 --> 00:48:45.679
<v Speaker 1>sure that it's still doing what I want.

1027
00:48:46.480 --> 00:48:47.960
<v Speaker 2>And so there's that too.

1028
00:48:48.119 --> 00:48:49.800
<v Speaker 1>And then the last thing that I'm going to just

1029
00:48:49.840 --> 00:48:53.639
<v Speaker 1>point out is like, I'm not seeing companies laying people

1030
00:48:53.679 --> 00:48:57.920
<v Speaker 1>off saying, well, you know, we're using the LLMS to

1031
00:48:58.280 --> 00:49:01.519
<v Speaker 1>enhance the capabilities of our programmers and so we don't

1032
00:49:01.559 --> 00:49:02.639
<v Speaker 1>need half of them anymore.

1033
00:49:03.079 --> 00:49:03.920
<v Speaker 2>We're not seeing yet.

1034
00:49:03.960 --> 00:49:06.639
<v Speaker 1>What we're seeing is we're seeing companies go, we can

1035
00:49:06.679 --> 00:49:08.880
<v Speaker 1>get ten times the work done or you know, five

1036
00:49:08.920 --> 00:49:11.800
<v Speaker 1>times the work done, are double the work done by

1037
00:49:11.840 --> 00:49:14.400
<v Speaker 1>having the engineers that we have use the tools.

1038
00:49:14.480 --> 00:49:16.960
<v Speaker 2>And I think that just accelerates.

1039
00:49:17.360 --> 00:49:19.880
<v Speaker 1>And I think any company that's shortsighted enough to turn

1040
00:49:19.880 --> 00:49:22.599
<v Speaker 1>around and go, we're going to lay off half of

1041
00:49:22.639 --> 00:49:26.360
<v Speaker 1>our technical workforce, their competitors are going to come in

1042
00:49:26.360 --> 00:49:27.119
<v Speaker 1>and eat them alive.

1043
00:49:27.559 --> 00:49:27.880
<v Speaker 2>Yeah.

1044
00:49:28.000 --> 00:49:31.559
<v Speaker 3>Yeah, I think that's some people that speculate that's the case,

1045
00:49:31.639 --> 00:49:33.639
<v Speaker 3>some companies hint towards that being the case, But I

1046
00:49:33.639 --> 00:49:35.960
<v Speaker 3>don't think it's. I think what you are seeing, and again,

1047
00:49:36.000 --> 00:49:38.480
<v Speaker 3>I think if we're talking about things that you can

1048
00:49:38.519 --> 00:49:41.400
<v Speaker 3>be freaked out about, is like, there's definitely been a

1049
00:49:41.440 --> 00:49:45.159
<v Speaker 3>big drop in hiring for juniors, right, like this measurable

1050
00:49:45.840 --> 00:49:49.719
<v Speaker 3>decrease in junior engineering positions. And I think there is

1051
00:49:49.760 --> 00:49:52.599
<v Speaker 3>this outstanding question of like, again, you and I have

1052
00:49:52.639 --> 00:49:55.559
<v Speaker 3>touched upon this already right, Like I say in that post.

1053
00:49:55.760 --> 00:49:57.480
<v Speaker 3>One of the reasons why I talk about like why

1054
00:49:57.519 --> 00:49:59.960
<v Speaker 3>I think open source maintainers are well clout for they

1055
00:50:00.559 --> 00:50:04.480
<v Speaker 3>for the llm ROR. Right, is that conversation you mentioned before,

1056
00:50:05.559 --> 00:50:08.119
<v Speaker 3>if you were talking about building something an open source project,

1057
00:50:08.280 --> 00:50:11.360
<v Speaker 3>you could have equally been describing almost identically, some.

1058
00:50:11.400 --> 00:50:13.280
<v Speaker 4>Contributor you've never worked with before.

1059
00:50:13.480 --> 00:50:15.639
<v Speaker 3>Right, It's like, oh, well, you know what, I opened

1060
00:50:15.679 --> 00:50:17.800
<v Speaker 3>an issue and then overnight some random person I never

1061
00:50:17.840 --> 00:50:19.239
<v Speaker 3>met before appeared.

1062
00:50:19.239 --> 00:50:21.760
<v Speaker 4>They made a pr like it was mostly.

1063
00:50:21.519 --> 00:50:23.360
<v Speaker 3>All right, I had to make some tweaks, and then

1064
00:50:23.360 --> 00:50:26.480
<v Speaker 3>I emerged it right like, And I actually think the

1065
00:50:26.559 --> 00:50:30.000
<v Speaker 3>trust and verification process looks very similar, right for someone

1066
00:50:30.079 --> 00:50:33.079
<v Speaker 3>like yourself with a lot of experience, someone like me

1067
00:50:33.159 --> 00:50:35.239
<v Speaker 3>with a lot of experience, particularly if you have a

1068
00:50:35.239 --> 00:50:37.480
<v Speaker 3>lot of experience with one code base you've worked with

1069
00:50:37.519 --> 00:50:39.800
<v Speaker 3>for a long period of time, like you're able to

1070
00:50:39.800 --> 00:50:44.360
<v Speaker 3>provide probably very in depth review of a relatively large

1071
00:50:44.400 --> 00:50:46.599
<v Speaker 3>amount of code in a very short amount of time

1072
00:50:47.159 --> 00:50:50.079
<v Speaker 3>in a way that makes these tools valuable to you.

1073
00:50:50.199 --> 00:50:52.559
<v Speaker 3>Right if you were you were unable to do that

1074
00:50:52.599 --> 00:50:54.840
<v Speaker 3>either because you lack the experience, you lack the contact

1075
00:50:54.880 --> 00:50:57.639
<v Speaker 3>with the codebase, you lack the program and buility yourself.

1076
00:50:57.880 --> 00:50:59.559
<v Speaker 4>Then all of a sudden you get end up in.

1077
00:50:59.480 --> 00:51:02.159
<v Speaker 3>This pre care position where it's like, okay, either I

1078
00:51:02.159 --> 00:51:04.960
<v Speaker 3>go one hundred miles an hour and like if this

1079
00:51:05.000 --> 00:51:08.760
<v Speaker 3>stuff breaks, I wonder how to fix it, and I

1080
00:51:08.800 --> 00:51:12.039
<v Speaker 3>won't know even really how to describe to the LLM,

1081
00:51:12.199 --> 00:51:15.360
<v Speaker 3>like what's gone wrong beyond just copy pasting error messages

1082
00:51:15.360 --> 00:51:18.239
<v Speaker 3>and when when that fails, like I'm just shit out lunk, right,

1083
00:51:19.079 --> 00:51:23.320
<v Speaker 3>or I slow down and I say, okay, I just I'm.

1084
00:51:23.119 --> 00:51:25.199
<v Speaker 4>Going to learn software the same way everyone learns software

1085
00:51:25.199 --> 00:51:26.360
<v Speaker 4>before LMS.

1086
00:51:26.519 --> 00:51:29.760
<v Speaker 3>Right, And then the people that I have to kind

1087
00:51:29.760 --> 00:51:32.559
<v Speaker 3>of have a bit of the FOMO or even potentially

1088
00:51:32.679 --> 00:51:35.679
<v Speaker 3>my management chain being like, hey, all the seniors are

1089
00:51:35.679 --> 00:51:38.960
<v Speaker 3>like twenty five or fifty percent more productive, now why

1090
00:51:39.000 --> 00:51:43.559
<v Speaker 3>aren't you? And it's I'm glad I'm not responsible for

1091
00:51:43.599 --> 00:51:46.599
<v Speaker 3>social engineering or whatever, because like I think that's a

1092
00:51:46.679 --> 00:51:50.239
<v Speaker 3>really hard question of like what are we going to

1093
00:51:50.239 --> 00:51:52.960
<v Speaker 3>do as an industry, because we can't just say we

1094
00:51:53.000 --> 00:51:56.360
<v Speaker 3>don't hire more juniors anymore, because that's not going to work.

1095
00:51:56.599 --> 00:51:57.920
<v Speaker 3>But at the same time, I don't think we have

1096
00:51:57.960 --> 00:52:01.960
<v Speaker 3>a really good answer for like what the juniors should definitely.

1097
00:52:01.480 --> 00:52:03.800
<v Speaker 4>Do to scale up, right.

1098
00:52:03.760 --> 00:52:06.800
<v Speaker 1>Like, Yeah, it's hard, Yeah, I like, I like, I

1099
00:52:06.800 --> 00:52:09.280
<v Speaker 1>completely agree with you. I think kind of reading between

1100
00:52:09.280 --> 00:52:11.960
<v Speaker 1>the lines on your blog post, it seems like part

1101
00:52:12.000 --> 00:52:16.119
<v Speaker 1>of the answer is having juniors or people who are

1102
00:52:16.159 --> 00:52:19.400
<v Speaker 1>at that level doing open source with you, right, because

1103
00:52:19.400 --> 00:52:22.440
<v Speaker 1>then it's not you don't have your boss or your

1104
00:52:22.519 --> 00:52:26.480
<v Speaker 1>company or the deadlines or things like that where people

1105
00:52:26.519 --> 00:52:30.079
<v Speaker 1>are going, why are you taking so long? And then

1106
00:52:30.239 --> 00:52:32.360
<v Speaker 1>the other thing is is that if you do take

1107
00:52:32.400 --> 00:52:35.039
<v Speaker 1>the extra minute, even if you're still generating the code

1108
00:52:35.039 --> 00:52:38.480
<v Speaker 1>with AI, to then ask the LM okay, explain to me.

1109
00:52:38.440 --> 00:52:39.079
<v Speaker 2>What you just did.

1110
00:52:39.960 --> 00:52:43.840
<v Speaker 1>Yep, right, you can start to get context for what

1111
00:52:43.880 --> 00:52:45.840
<v Speaker 1>it did and why it did it. Now it may

1112
00:52:45.880 --> 00:52:49.519
<v Speaker 1>not be giving you the best practice, but it's giving

1113
00:52:49.559 --> 00:52:52.360
<v Speaker 1>you at least some context for what it's working with,

1114
00:52:52.960 --> 00:52:54.639
<v Speaker 1>and in some cases it is.

1115
00:52:54.559 --> 00:52:56.760
<v Speaker 2>Going to be best practice or at least common practice.

1116
00:52:57.360 --> 00:53:00.000
<v Speaker 3>So and you're seeing that even with LMS now right now,

1117
00:53:00.119 --> 00:53:03.000
<v Speaker 3>like the kind of study mode and chat GPT and

1118
00:53:03.039 --> 00:53:05.320
<v Speaker 3>things like that, where I've played with that a little

1119
00:53:05.320 --> 00:53:08.679
<v Speaker 3>bit myself when I've been kind of trying to learn

1120
00:53:08.719 --> 00:53:11.679
<v Speaker 3>new things that I don't want to overlylean on the LM,

1121
00:53:11.800 --> 00:53:13.800
<v Speaker 3>and you know, it's kind of trying to do a

1122
00:53:13.840 --> 00:53:16.400
<v Speaker 3>bit of Socratic method stuff and all this sort of thing.

1123
00:53:16.960 --> 00:53:18.760
<v Speaker 3>But even with I think it's a great point for

1124
00:53:18.800 --> 00:53:20.960
<v Speaker 3>the open source where you know, there's a bunch of

1125
00:53:21.119 --> 00:53:24.800
<v Speaker 3>talented homer maintainers I know who are in some cases

1126
00:53:24.840 --> 00:53:26.760
<v Speaker 3>haven't had a tech job yet, are still in college

1127
00:53:27.000 --> 00:53:30.760
<v Speaker 3>or relatively recently out of college, and like their code

1128
00:53:30.760 --> 00:53:34.960
<v Speaker 3>reviewabilities for typical expectations of like a new engineer are

1129
00:53:34.960 --> 00:53:37.320
<v Speaker 3>like completely off the charts. Like some of them are

1130
00:53:37.440 --> 00:53:40.760
<v Speaker 3>dramatically better at code review than I am, having done it,

1131
00:53:40.960 --> 00:53:42.639
<v Speaker 3>you know, probably ten times as.

1132
00:53:42.559 --> 00:53:46.039
<v Speaker 4>Long as they have, but they've had a lot of

1133
00:53:46.079 --> 00:53:46.800
<v Speaker 4>experience doing this.

1134
00:53:46.840 --> 00:53:48.880
<v Speaker 3>And I think that might be part of the junior

1135
00:53:48.920 --> 00:53:52.519
<v Speaker 3>story is that I think we cycle we sort of

1136
00:53:52.519 --> 00:53:54.119
<v Speaker 3>had a little bit of an attitude I think for

1137
00:53:54.159 --> 00:53:56.719
<v Speaker 3>a while, at least in some cultures of companies I've

1138
00:53:56.760 --> 00:53:59.800
<v Speaker 3>seen where it's like, well, okay, we'll get everyone to

1139
00:54:00.119 --> 00:54:03.679
<v Speaker 3>view a bit of code, but really like the more

1140
00:54:03.719 --> 00:54:06.639
<v Speaker 3>senior people are going to be more responsible for doing

1141
00:54:06.679 --> 00:54:11.519
<v Speaker 3>the more in depth hardcore code review of like gnarly stuff, right,

1142
00:54:11.679 --> 00:54:13.960
<v Speaker 3>And that might be the culture that needs to change,

1143
00:54:13.960 --> 00:54:16.280
<v Speaker 3>but we're actually like, okay, rather than saying to the

1144
00:54:16.320 --> 00:54:18.519
<v Speaker 3>junior is like, hey, you just spend ninety five percent

1145
00:54:18.559 --> 00:54:20.679
<v Speaker 3>of your sign coding. Don't worry about this code review

1146
00:54:20.679 --> 00:54:22.880
<v Speaker 3>stuff too much. You'll figure it out as you go along.

1147
00:54:23.119 --> 00:54:25.079
<v Speaker 3>Maybe we need to flip around and be like, actually,

1148
00:54:25.760 --> 00:54:27.400
<v Speaker 3>you should spend ninety five percent of your time doing

1149
00:54:27.440 --> 00:54:30.639
<v Speaker 3>code review and don't worry about this coding stuff too much.

1150
00:54:30.880 --> 00:54:33.440
<v Speaker 3>If you read enough of other people's code, you're going

1151
00:54:33.519 --> 00:54:36.440
<v Speaker 3>to figure that out, right, And maybe that's where we go.

1152
00:54:36.519 --> 00:54:39.360
<v Speaker 3>And certainly that that would be an attitude that would

1153
00:54:39.400 --> 00:54:43.239
<v Speaker 3>make you more qualified with working with LMS better for sure.

1154
00:54:43.880 --> 00:54:46.719
<v Speaker 1>Right, you brought up code reviews and that that kind

1155
00:54:46.760 --> 00:54:48.679
<v Speaker 1>of reminded me of another thing, since we're talking about

1156
00:54:48.719 --> 00:54:51.480
<v Speaker 1>AI and things like that. So yesterday I put in

1157
00:54:51.519 --> 00:54:53.880
<v Speaker 1>a PR at work, and I asked some folks to

1158
00:54:53.920 --> 00:54:56.119
<v Speaker 1>review it, and I got on this morning and it

1159
00:54:56.239 --> 00:54:58.760
<v Speaker 1>still hadn't been reviewed. Whenever people get in and they

1160
00:54:58.760 --> 00:55:00.880
<v Speaker 1>see the message, I'm sure it'll get done. Anyway, When

1161
00:55:00.920 --> 00:55:02.880
<v Speaker 1>I checked it, get how asked me if I wanted

1162
00:55:02.920 --> 00:55:04.519
<v Speaker 1>Copilot to review my PR?

1163
00:55:05.360 --> 00:55:06.519
<v Speaker 2>So, how do you feel about that?

1164
00:55:07.480 --> 00:55:13.519
<v Speaker 3>Yeah, I've actually at work brew and now at Homebrew

1165
00:55:13.760 --> 00:55:17.639
<v Speaker 3>and some companies have done contracting with have enabled. In fact,

1166
00:55:17.679 --> 00:55:19.280
<v Speaker 3>I don't know if I've done this on humbrew actually,

1167
00:55:19.360 --> 00:55:23.000
<v Speaker 3>but basically, whenever I can, I enable enable copilot review

1168
00:55:23.000 --> 00:55:28.760
<v Speaker 3>of prs by default, and I think good. It's sort

1169
00:55:28.800 --> 00:55:33.719
<v Speaker 3>of so it has definitely caught a bunch of stuff

1170
00:55:33.719 --> 00:55:36.920
<v Speaker 3>that humans have not caught on my prs. Again, the

1171
00:55:37.000 --> 00:55:40.599
<v Speaker 3>false positive rate is like pretty high, but if what

1172
00:55:40.639 --> 00:55:43.079
<v Speaker 3>you're concerned about is like, hey, I want to make

1173
00:55:43.119 --> 00:55:47.039
<v Speaker 3>sure that someone is going to catch my typos again.

1174
00:55:47.119 --> 00:55:49.239
<v Speaker 3>Like another blog post I wrote a long time ago,

1175
00:55:49.280 --> 00:55:52.000
<v Speaker 3>and at this time, you know, this was whatever twenty

1176
00:55:52.000 --> 00:55:54.079
<v Speaker 3>eighteen or something, so we weren't even talking about AI

1177
00:55:54.119 --> 00:55:55.719
<v Speaker 3>and LMS, but I think it still kind of holds

1178
00:55:55.760 --> 00:55:57.880
<v Speaker 3>up is I wrote about like I called it like

1179
00:55:58.079 --> 00:56:01.719
<v Speaker 3>robot pedantry human empathy basically, And what I compared in

1180
00:56:01.719 --> 00:56:04.519
<v Speaker 3>that post was like, on the one side, like people

1181
00:56:04.599 --> 00:56:07.519
<v Speaker 3>are like ruber Cup, you can set to be like

1182
00:56:07.719 --> 00:56:12.159
<v Speaker 3>hyper anal right and like really really pedantic and people

1183
00:56:12.320 --> 00:56:14.679
<v Speaker 3>could actually be fairly tolerant of that. I actually quite

1184
00:56:14.679 --> 00:56:16.559
<v Speaker 3>like that when it's dial up to eleven like that.

1185
00:56:17.039 --> 00:56:20.320
<v Speaker 3>But if you, as a human give the same code

1186
00:56:20.320 --> 00:56:22.519
<v Speaker 3>review feedback as a ruber cup up to eleven.

1187
00:56:23.039 --> 00:56:24.719
<v Speaker 4>All your coworkers will hate you.

1188
00:56:25.519 --> 00:56:28.599
<v Speaker 3>Yeah, often, even if you have agreed on these coding

1189
00:56:28.639 --> 00:56:31.440
<v Speaker 3>guidelines as a group or whatever. There's something about like

1190
00:56:31.519 --> 00:56:35.119
<v Speaker 3>that level of pedantry, about like if someone typo something

1191
00:56:35.159 --> 00:56:37.440
<v Speaker 3>ten times going through and every single time being like

1192
00:56:37.719 --> 00:56:40.599
<v Speaker 3>typo typo, typo, typo typo, even if you use the

1193
00:56:40.599 --> 00:56:42.599
<v Speaker 3>gat up suggestion, so it's one click for them to

1194
00:56:42.599 --> 00:56:45.400
<v Speaker 3>fix it. Like, people don't like that. They really hate

1195
00:56:45.400 --> 00:56:47.119
<v Speaker 3>it when humans do that to them. But that's the

1196
00:56:47.199 --> 00:56:50.320
<v Speaker 3>expectation that robots will do that. So that's one thing

1197
00:56:50.320 --> 00:56:53.679
<v Speaker 3>I found is like useful on that side. But then again,

1198
00:56:53.800 --> 00:56:56.360
<v Speaker 3>like I said in that post, so part of why

1199
00:56:56.400 --> 00:56:58.320
<v Speaker 3>I wrote the post of the time is like there'd

1200
00:56:58.360 --> 00:57:00.719
<v Speaker 3>be more and more moved like ultimate shown and stuff

1201
00:57:00.760 --> 00:57:02.599
<v Speaker 3>like that, which I thought was really healthy and like CEI,

1202
00:57:03.159 --> 00:57:05.199
<v Speaker 3>but you were starting to see people being like, oh,

1203
00:57:05.239 --> 00:57:08.000
<v Speaker 3>the first time someone makes a poll request on my repo,

1204
00:57:08.639 --> 00:57:10.880
<v Speaker 3>we should congratulate that person, So let's write a bot

1205
00:57:10.880 --> 00:57:13.760
<v Speaker 3>to congratulate them. And I remember talking to a bunch

1206
00:57:13.800 --> 00:57:15.480
<v Speaker 3>of people and they were saying like, yeah, it just

1207
00:57:15.840 --> 00:57:20.320
<v Speaker 3>it feels completely meaningless when a bot says well done,

1208
00:57:20.360 --> 00:57:22.800
<v Speaker 3>good job, you are rockstar. Now it's like, you know,

1209
00:57:22.920 --> 00:57:25.480
<v Speaker 3>it's like I'm in some empty room by myself, and

1210
00:57:26.039 --> 00:57:28.360
<v Speaker 3>you know, over the Tanoi came a robotic voice saying

1211
00:57:28.400 --> 00:57:28.960
<v Speaker 3>you are great.

1212
00:57:29.159 --> 00:57:29.360
<v Speaker 4>You know.

1213
00:57:29.400 --> 00:57:33.039
<v Speaker 3>It's like whereas if a human says to you, hey, right,

1214
00:57:33.400 --> 00:57:34.239
<v Speaker 3>well done.

1215
00:57:34.239 --> 00:57:37.360
<v Speaker 4>Like I'm Pumpedy or here, like, that actually has an impact.

1216
00:57:37.440 --> 00:57:40.519
<v Speaker 3>So that's and I think this is the same thing

1217
00:57:40.599 --> 00:57:42.840
<v Speaker 3>with with kind of code of View and Copilot and

1218
00:57:42.840 --> 00:57:45.320
<v Speaker 3>these tools and whatever. Now it's just like, you know,

1219
00:57:45.719 --> 00:57:48.760
<v Speaker 3>like Copilot can give you a review where it points

1220
00:57:48.800 --> 00:57:50.519
<v Speaker 3>out your typo is more effectively than a human can,

1221
00:57:50.679 --> 00:57:54.360
<v Speaker 3>but Copilot can't say, wow, that was really cool, Like

1222
00:57:54.360 --> 00:57:55.920
<v Speaker 3>do you solve this in half the lines of code?

1223
00:57:55.920 --> 00:57:58.320
<v Speaker 4>I thought it's possible, Like this is a really elegant solution.

1224
00:57:59.039 --> 00:58:00.239
<v Speaker 4>Great job, right like.

1225
00:58:00.360 --> 00:58:05.039
<v Speaker 3>And that's again much as like the stuff about humans

1226
00:58:05.039 --> 00:58:07.519
<v Speaker 3>and jobs and whatever, right like, most of us are

1227
00:58:07.519 --> 00:58:10.440
<v Speaker 3>probably not going to be okay with spending forty hours

1228
00:58:10.480 --> 00:58:13.039
<v Speaker 3>a week exclusively communicating to an LM, Like we want

1229
00:58:13.079 --> 00:58:15.519
<v Speaker 3>to deal with humans who say nice things that they

1230
00:58:15.519 --> 00:58:18.559
<v Speaker 3>actually mean that are not in the prompt right like,

1231
00:58:18.679 --> 00:58:21.800
<v Speaker 3>and that does have more of an impact and that's

1232
00:58:22.000 --> 00:58:23.800
<v Speaker 3>I feel the same way with like code review, where

1233
00:58:23.800 --> 00:58:26.719
<v Speaker 3>it's like these are complementary tools, and the human code

1234
00:58:26.719 --> 00:58:29.039
<v Speaker 3>review and the code of view are sort of doing

1235
00:58:29.039 --> 00:58:31.360
<v Speaker 3>different things, but I'm glad that they're both there, and

1236
00:58:31.400 --> 00:58:33.400
<v Speaker 3>I wouldn't use one to entirely replace the oiler.

1237
00:58:33.519 --> 00:58:35.360
<v Speaker 1>So I guess the other question that I was asking

1238
00:58:35.519 --> 00:58:38.000
<v Speaker 1>is what AI tools are you using these days?

1239
00:58:38.480 --> 00:58:42.320
<v Speaker 3>Yeah, So for me, I'm mainly using like cursor as

1240
00:58:42.400 --> 00:58:46.800
<v Speaker 3>my kind of in editor like code completion thing, and

1241
00:58:46.880 --> 00:58:50.159
<v Speaker 3>like their agent modes kind of sporadically by again, I

1242
00:58:50.239 --> 00:58:52.360
<v Speaker 3>use it kind of in the in editor fashion. I

1243
00:58:52.440 --> 00:58:55.440
<v Speaker 3>still use chat GPT mainly for stuff where I'm just

1244
00:58:55.480 --> 00:58:57.920
<v Speaker 3>like asking it things where I'm going to probably write

1245
00:58:57.920 --> 00:59:00.519
<v Speaker 3>the code myself or with a bit of health, but

1246
00:59:00.559 --> 00:59:03.239
<v Speaker 3>like I basically use that insteady Google. And then the

1247
00:59:03.280 --> 00:59:07.800
<v Speaker 3>thing that has been interesting to me recently is so

1248
00:59:08.039 --> 00:59:10.599
<v Speaker 3>I started everyone was being like all my kind of

1249
00:59:10.840 --> 00:59:13.239
<v Speaker 3>AI forward friends were like, oh, you need to use

1250
00:59:13.280 --> 00:59:16.159
<v Speaker 3>cloud code, cloud code, so sign up play on cloud code.

1251
00:59:16.199 --> 00:59:17.760
<v Speaker 4>I was like, Okay, this is quite good. I can

1252
00:59:17.800 --> 00:59:18.360
<v Speaker 4>see the appeal.

1253
00:59:18.960 --> 00:59:21.719
<v Speaker 3>But I think just because I'm an open source maintainer,

1254
00:59:21.800 --> 00:59:27.079
<v Speaker 3>like there's this GitHub agent pr thing where you can Now,

1255
00:59:27.159 --> 00:59:29.960
<v Speaker 3>if you have Copilot for your organization or whatever, I'm

1256
00:59:29.960 --> 00:59:31.760
<v Speaker 3>not quite sure how the pricing and the enabling works

1257
00:59:31.800 --> 00:59:34.519
<v Speaker 3>or whatever, but it works on Humbrew essentially.

1258
00:59:34.559 --> 00:59:35.559
<v Speaker 4>So what you can do is.

1259
00:59:35.480 --> 00:59:39.039
<v Speaker 3>You can just assign an issue to Copilot and then

1260
00:59:39.039 --> 00:59:42.280
<v Speaker 3>it will just open a pr that's like, okay, I've

1261
00:59:42.280 --> 00:59:44.880
<v Speaker 3>tried to solve this issue for you, right, And this

1262
00:59:44.960 --> 00:59:46.800
<v Speaker 3>is good that we're having this conversation today because it's

1263
00:59:46.800 --> 00:59:49.079
<v Speaker 3>fairly timely because in the last week Humbrew had I

1264
00:59:49.119 --> 00:59:52.920
<v Speaker 3>think eight open bugs on the main kind of package

1265
00:59:52.960 --> 00:59:55.599
<v Speaker 3>manager repo that I review everything on. I was like,

1266
00:59:55.679 --> 00:59:57.800
<v Speaker 3>I'm just going to sign all of them to Copilot

1267
00:59:57.880 --> 01:00:01.119
<v Speaker 3>and see what happens. Right, And it's similar to the

1268
01:00:01.159 --> 01:00:03.760
<v Speaker 3>thing you described earlier right where it was like in

1269
01:00:03.880 --> 01:00:06.679
<v Speaker 3>most in a couple of cases it was like literally

1270
01:00:07.159 --> 01:00:08.440
<v Speaker 3>spot on first time.

1271
01:00:08.920 --> 01:00:11.519
<v Speaker 4>In most of the cases it required me to do

1272
01:00:11.559 --> 01:00:12.360
<v Speaker 4>the last.

1273
01:00:12.280 --> 01:00:14.800
<v Speaker 3>Like ten percent of the code right, and then in

1274
01:00:14.840 --> 01:00:17.679
<v Speaker 3>a couple of cases it was like twenty five percent

1275
01:00:17.719 --> 01:00:19.119
<v Speaker 3>of the way. They are pretty broken. I had to

1276
01:00:19.119 --> 01:00:21.119
<v Speaker 3>have quite a bit back and forth. I ended up

1277
01:00:21.199 --> 01:00:23.280
<v Speaker 3>kind of rewriting half of myself. But even then it

1278
01:00:23.360 --> 01:00:26.400
<v Speaker 3>sort of solved the empty page problem for me, And

1279
01:00:26.480 --> 01:00:28.199
<v Speaker 3>I think it's just something about me is like an

1280
01:00:28.199 --> 01:00:32.039
<v Speaker 3>open source maintainer that it feels good and nice to

1281
01:00:32.239 --> 01:00:37.239
<v Speaker 3>just be like assign issue PR, review PR, check out PR,

1282
01:00:37.280 --> 01:00:39.639
<v Speaker 3>to finish it off, march PR, and like that's the

1283
01:00:39.679 --> 01:00:42.159
<v Speaker 3>flow instead of like this thing that lives in my

1284
01:00:42.239 --> 01:00:44.679
<v Speaker 3>terminal that I need to check and whatever.

1285
01:00:45.599 --> 01:00:48.079
<v Speaker 1>Yeah, I like, I like you you brought up the

1286
01:00:48.119 --> 01:00:50.679
<v Speaker 1>empty page situation that that's a really good way of

1287
01:00:50.719 --> 01:00:54.119
<v Speaker 1>putting right, because I'll sit there and Okay, how do

1288
01:00:54.159 --> 01:00:57.000
<v Speaker 1>I need to put this? Okay, and then I kind

1289
01:00:57.039 --> 01:00:58.840
<v Speaker 1>of have an idea of how I wanted to go,

1290
01:00:59.119 --> 01:01:01.239
<v Speaker 1>and so I start kind of fiddle in with it, right,

1291
01:01:01.639 --> 01:01:03.679
<v Speaker 1>And instead I can just I can prompt the AI

1292
01:01:04.039 --> 01:01:07.440
<v Speaker 1>this is what I'm building. And sometimes I'll ask, you know,

1293
01:01:07.639 --> 01:01:09.840
<v Speaker 1>how should I start, And sometimes I'll just tell it

1294
01:01:09.880 --> 01:01:10.480
<v Speaker 1>to go for it.

1295
01:01:11.039 --> 01:01:12.760
<v Speaker 2>Yeah, I'm sure.

1296
01:01:12.760 --> 01:01:15.400
<v Speaker 3>And I found this as well, like sometimes when it's

1297
01:01:15.679 --> 01:01:17.280
<v Speaker 3>even when it's completely wrong.

1298
01:01:17.480 --> 01:01:18.960
<v Speaker 4>Yeah, you probably heard.

1299
01:01:18.840 --> 01:01:21.360
<v Speaker 3>That, like a comber who said this ages ago that

1300
01:01:21.440 --> 01:01:25.760
<v Speaker 3>like the quickest way to get a stack overflow answer

1301
01:01:26.440 --> 01:01:29.199
<v Speaker 3>is to answer your questions with the wrong answer.

1302
01:01:29.360 --> 01:01:31.960
<v Speaker 4>Yeah, and then everyone will jump in and be like, no,

1303
01:01:32.000 --> 01:01:34.039
<v Speaker 4>that questions wrong. Let me tell you how it actually is.

1304
01:01:34.480 --> 01:01:36.519
<v Speaker 3>Sometimes I feel like the same way with the LM stuff,

1305
01:01:36.519 --> 01:01:39.239
<v Speaker 3>where I'm like, yeah, sometimes it goes off and it

1306
01:01:39.280 --> 01:01:40.880
<v Speaker 3>doesn't completely fucking terrible.

1307
01:01:40.639 --> 01:01:41.760
<v Speaker 4>And I'm like, no, that's not how you do it.

1308
01:01:41.800 --> 01:01:43.679
<v Speaker 4>You obviously do it like this, and I'm like, oh, yeah,

1309
01:01:43.800 --> 01:01:44.880
<v Speaker 4>I figured out how to do it.

1310
01:01:45.159 --> 01:01:45.360
<v Speaker 2>Well.

1311
01:01:45.360 --> 01:01:47.400
<v Speaker 1>What's funny is that there were there were a couple

1312
01:01:47.440 --> 01:01:50.039
<v Speaker 1>of things that I was working on with the because

1313
01:01:50.039 --> 01:01:53.239
<v Speaker 1>I'm using Curser and agent mode. The main reason is

1314
01:01:53.239 --> 01:01:57.440
<v Speaker 1>is because my employer provides us with credits on co

1315
01:01:57.559 --> 01:02:00.760
<v Speaker 1>Pilot YEP on vs Code, which is what I'd kind

1316
01:02:00.760 --> 01:02:03.119
<v Speaker 1>of gotten used to, but I don't want to use

1317
01:02:03.239 --> 01:02:06.440
<v Speaker 1>works co Pilot credits on my personal stuff, and so

1318
01:02:06.480 --> 01:02:08.920
<v Speaker 1>I use Cursor for my personal stuff and Copilot for

1319
01:02:08.960 --> 01:02:11.760
<v Speaker 1>their stuff because I'm using the same gethub account for both.

1320
01:02:11.800 --> 01:02:14.960
<v Speaker 1>And so anyway, there have been a couple of times

1321
01:02:15.000 --> 01:02:16.559
<v Speaker 1>where I've pulled it to do something and it sits

1322
01:02:16.559 --> 01:02:18.679
<v Speaker 1>there and it flails right, It's like, yeah, I'm going

1323
01:02:18.760 --> 01:02:20.880
<v Speaker 1>to do this. Oh wait, I think I have a

1324
01:02:20.880 --> 01:02:22.960
<v Speaker 1>better approach, So I'm going to delete everything I just

1325
01:02:23.000 --> 01:02:24.719
<v Speaker 1>did and do it this way, and they'll do like

1326
01:02:24.760 --> 01:02:27.519
<v Speaker 1>two or three things and yeah, I'll finally just step

1327
01:02:27.559 --> 01:02:29.719
<v Speaker 1>in and say I've been watching you and actually I

1328
01:02:29.760 --> 01:02:31.639
<v Speaker 1>just want you to do it this way, and it'll

1329
01:02:31.679 --> 01:02:34.320
<v Speaker 1>just turn around that. Of course, it tells me I'm

1330
01:02:34.360 --> 01:02:38.320
<v Speaker 1>smart for saying that, right, And again it's like you're

1331
01:02:38.360 --> 01:02:41.599
<v Speaker 1>a machine, you know, but do it my way. And yeah,

1332
01:02:42.159 --> 01:02:44.519
<v Speaker 1>and so just because it gets it wrong doesn't mean

1333
01:02:44.519 --> 01:02:46.000
<v Speaker 1>that it can't get it right if you give it

1334
01:02:46.039 --> 01:02:47.360
<v Speaker 1>just a little more a direction.

1335
01:02:47.639 --> 01:02:51.679
<v Speaker 3>And to just speculate widely from a minute, I also

1336
01:02:51.840 --> 01:02:56.079
<v Speaker 3>have hypolthesis that maybe the reason why junior hiring could

1337
01:02:56.079 --> 01:02:58.559
<v Speaker 3>be done is the people who were previously responsible from

1338
01:02:58.679 --> 01:03:03.719
<v Speaker 3>entering those juniors are now essentially mentoring their lms because

1339
01:03:03.760 --> 01:03:07.760
<v Speaker 3>like again that flow you described earlier about like with

1340
01:03:07.920 --> 01:03:09.840
<v Speaker 3>rails and oh they thought I was using device and

1341
01:03:09.840 --> 01:03:13.039
<v Speaker 3>I wasn't like that. Again, ten years ago, you could

1342
01:03:13.039 --> 01:03:16.400
<v Speaker 3>have described some new talented junior person that you hired,

1343
01:03:16.800 --> 01:03:19.199
<v Speaker 3>right and oh wow, they saved me so much time

1344
01:03:19.199 --> 01:03:20.400
<v Speaker 3>and I had to do the last a little bit

1345
01:03:20.440 --> 01:03:22.880
<v Speaker 3>to help them over the line and whatever. I think

1346
01:03:22.960 --> 01:03:27.360
<v Speaker 3>the flow and also like the stuff you like and

1347
01:03:27.440 --> 01:03:30.079
<v Speaker 3>the stuff that's really frustrating and exhausting about it is

1348
01:03:30.199 --> 01:03:34.039
<v Speaker 3>kind of the same. And I personally couldn't imagine a

1349
01:03:34.159 --> 01:03:38.199
<v Speaker 3>day where I spend half my days supervising agentic AI

1350
01:03:38.320 --> 01:03:41.880
<v Speaker 3>workflows and then the other half doing the same thing

1351
01:03:41.960 --> 01:03:44.880
<v Speaker 3>with like junior folks who are struggling in the same way,

1352
01:03:45.400 --> 01:03:47.840
<v Speaker 3>or the worst of both worlds, which we're seeing in

1353
01:03:48.000 --> 01:03:50.679
<v Speaker 3>open source now, which is someone who is junior who

1354
01:03:50.719 --> 01:03:53.719
<v Speaker 3>is trying to use an AI agent to create a

1355
01:03:53.719 --> 01:03:57.679
<v Speaker 3>pull request. And obviously you can't really prove this, but

1356
01:03:57.800 --> 01:04:00.599
<v Speaker 3>like I had a PR today where which round a

1357
01:04:00.599 --> 01:04:03.440
<v Speaker 3>review they were responding, and then they would paste something

1358
01:04:03.440 --> 01:04:07.320
<v Speaker 3>into an issue comment with like the slash and characters

1359
01:04:07.320 --> 01:04:09.239
<v Speaker 3>in there rather than you lines, which makes it look

1360
01:04:09.280 --> 01:04:11.159
<v Speaker 3>like it was automated, And then I would ask.

1361
01:04:11.280 --> 01:04:12.880
<v Speaker 4>I'd be like, give a bunch of comments.

1362
01:04:12.880 --> 01:04:15.400
<v Speaker 3>But then one of the comments would be like, hey, like,

1363
01:04:15.679 --> 01:04:17.760
<v Speaker 3>you've added two extra options to the CLI.

1364
01:04:18.280 --> 01:04:20.679
<v Speaker 4>Which one of those are you using? Do you need

1365
01:04:20.719 --> 01:04:22.920
<v Speaker 4>both this functionality or just the functionality for one?

1366
01:04:23.039 --> 01:04:24.719
<v Speaker 3>Because if we just say the functionality, if you only

1367
01:04:24.760 --> 01:04:27.000
<v Speaker 3>you need for one, and they would just completely ignore

1368
01:04:27.039 --> 01:04:29.360
<v Speaker 3>these questions and just turn it into more code. And

1369
01:04:29.440 --> 01:04:31.599
<v Speaker 3>I had that AI feel that I'm sure you're familiar

1370
01:04:31.599 --> 01:04:34.480
<v Speaker 3>with Charles of just like more code every time.

1371
01:04:34.559 --> 01:04:35.079
<v Speaker 4>Every time.

1372
01:04:35.440 --> 01:04:37.840
<v Speaker 3>The solution is we're just going to add more code, right,

1373
01:04:38.280 --> 01:04:39.639
<v Speaker 3>And it got to the point where I was like,

1374
01:04:40.079 --> 01:04:44.360
<v Speaker 3>I'm just speaking to someone's cloud code through If I

1375
01:04:44.400 --> 01:04:46.639
<v Speaker 3>wanted that, I would be using cloud code.

1376
01:04:46.440 --> 01:04:47.760
<v Speaker 4>Myself, so I couldn't prove it.

1377
01:04:47.800 --> 01:04:50.360
<v Speaker 3>But I just closed the PR because I was like, sorry,

1378
01:04:50.599 --> 01:04:52.679
<v Speaker 3>feels like I'm speaking to an AI, not human. And

1379
01:04:52.960 --> 01:04:55.599
<v Speaker 3>I thought to myself, I'll probably just assign this issue

1380
01:04:55.599 --> 01:04:57.719
<v Speaker 3>to compile later and see how it does, and it's

1381
01:04:57.719 --> 01:04:59.840
<v Speaker 3>probably going to be easier than what we're doing.

1382
01:05:00.119 --> 01:05:00.800
<v Speaker 2>Oh gotcha.

1383
01:05:01.119 --> 01:05:03.280
<v Speaker 1>All right, Well, I've got to start wrapping up, so

1384
01:05:03.440 --> 01:05:05.360
<v Speaker 1>let's go ahead and do some picks and then we'll

1385
01:05:05.519 --> 01:05:07.800
<v Speaker 1>call it good. Before we do that, if people want

1386
01:05:07.840 --> 01:05:11.159
<v Speaker 1>to connect with you, if they have questions about Homebrew,

1387
01:05:11.400 --> 01:05:14.519
<v Speaker 1>or it sounds like you will help people out for

1388
01:05:14.599 --> 01:05:17.000
<v Speaker 1>hire or at least you used to, so if there's a

1389
01:05:17.039 --> 01:05:18.920
<v Speaker 1>place for people to hire you.

1390
01:05:18.840 --> 01:05:19.960
<v Speaker 2>I'd love to have that too.

1391
01:05:19.960 --> 01:05:22.519
<v Speaker 1>But yeah, how do people connect with you on any

1392
01:05:22.559 --> 01:05:23.440
<v Speaker 1>of those levels?

1393
01:05:23.639 --> 01:05:23.840
<v Speaker 2>Yeah?

1394
01:05:23.880 --> 01:05:26.239
<v Speaker 3>Sure, The best place for me is my website at

1395
01:05:26.280 --> 01:05:27.400
<v Speaker 3>Mike mccaid dot com.

1396
01:05:27.440 --> 01:05:29.039
<v Speaker 4>If you go there, that's called links to all my

1397
01:05:29.079 --> 01:05:29.679
<v Speaker 4>social media.

1398
01:05:29.960 --> 01:05:32.719
<v Speaker 3>It's got all my email, it's got talks or art

1399
01:05:32.760 --> 01:05:34.840
<v Speaker 3>schools and all the type of stuff anything you might

1400
01:05:34.880 --> 01:05:35.480
<v Speaker 3>want to know about me.

1401
01:05:35.599 --> 01:05:37.800
<v Speaker 4>That's basically the best kickoff point.

1402
01:05:37.840 --> 01:05:40.000
<v Speaker 1>They're awesome, all right, Well let's go ahead and do

1403
01:05:40.039 --> 01:05:42.559
<v Speaker 1>some pics. I will get us started. Boy, it's been

1404
01:05:42.559 --> 01:05:44.400
<v Speaker 1>a while since I've done this. I'm trying to think

1405
01:05:44.440 --> 01:05:46.599
<v Speaker 1>of what games I've been playing lately. Here's one that

1406
01:05:46.679 --> 01:05:50.639
<v Speaker 1>I'll do. So, I don't know if you do board

1407
01:05:50.639 --> 01:05:55.159
<v Speaker 1>games much, but yeah, I do a little, not huge amounts.

1408
01:05:55.559 --> 01:05:57.000
<v Speaker 2>Have you ever played.

1409
01:05:56.960 --> 01:05:59.519
<v Speaker 4>Again, like a couple of times. I've never been a

1410
01:05:59.599 --> 01:06:00.039
<v Speaker 4>DM or.

1411
01:06:00.760 --> 01:06:05.719
<v Speaker 1>Okay, So there's a game out there called Betrayal at

1412
01:06:05.760 --> 01:06:08.920
<v Speaker 1>House on the Hill, and I think that there's a

1413
01:06:08.960 --> 01:06:12.119
<v Speaker 1>book or a movie or something that related to it.

1414
01:06:12.239 --> 01:06:12.639
<v Speaker 2>Anyway.

1415
01:06:12.760 --> 01:06:16.519
<v Speaker 1>Essentially, you take your Scooby Dooe gang into a haunted

1416
01:06:16.559 --> 01:06:19.519
<v Speaker 1>house and you go explore the house until the how

1417
01:06:19.719 --> 01:06:25.119
<v Speaker 1>haunt starts and then you yeah, one of you becomes

1418
01:06:25.199 --> 01:06:29.440
<v Speaker 1>the trader and so then it's the Trader against the

1419
01:06:29.480 --> 01:06:33.000
<v Speaker 1>explorers until one of you wins, right, and so it

1420
01:06:33.039 --> 01:06:35.360
<v Speaker 1>gives you you know, and there are two books. There's

1421
01:06:35.360 --> 01:06:39.320
<v Speaker 1>the Trader's home, and there's the Explorer's Manual, and so

1422
01:06:39.519 --> 01:06:42.599
<v Speaker 1>the Explorer's Manual explains to them how they win, and

1423
01:06:42.679 --> 01:06:45.639
<v Speaker 1>the Trader's tom explains to the trader how they win.

1424
01:06:45.880 --> 01:06:48.440
<v Speaker 1>And the reason there are two books is because there's

1425
01:06:48.480 --> 01:06:51.000
<v Speaker 1>some things that the trader has to know that the

1426
01:06:51.039 --> 01:06:55.239
<v Speaker 1>explorers don't need to know, or it will let help

1427
01:06:55.280 --> 01:06:57.880
<v Speaker 1>them win if they knew. Anyway, so it does that. Well,

1428
01:06:57.880 --> 01:07:00.719
<v Speaker 1>there's a version of this called Betrayal of Balder's Gate.

1429
01:07:01.679 --> 01:07:05.559
<v Speaker 1>Balder's Gate is there's a video game, yeah, Balder's Gate,

1430
01:07:06.079 --> 01:07:10.800
<v Speaker 1>but Balder's Gate is a D and D location, and

1431
01:07:10.840 --> 01:07:13.239
<v Speaker 1>so if you ever look at anything that's Balder's Gate,

1432
01:07:13.280 --> 01:07:15.480
<v Speaker 1>you'll notice it's Wizards of the Coast, which is the

1433
01:07:15.519 --> 01:07:19.119
<v Speaker 1>company that does D and D and so anyway, so

1434
01:07:19.239 --> 01:07:23.159
<v Speaker 1>Betrayal at Balder's Gate is Betrayal at House on the

1435
01:07:23.239 --> 01:07:26.360
<v Speaker 1>Hill with the D and D elements from Balder's Gate.

1436
01:07:26.800 --> 01:07:32.440
<v Speaker 1>And so instead of exploring rooms, you're exploring areas. And

1437
01:07:32.559 --> 01:07:38.039
<v Speaker 1>you have the city like the streets, you have indoor areas,

1438
01:07:38.079 --> 01:07:42.320
<v Speaker 1>and then you've got the catacombs underneath the city, and

1439
01:07:42.400 --> 01:07:45.280
<v Speaker 1>so you can kind of explore or whatever you want

1440
01:07:45.360 --> 01:07:47.960
<v Speaker 1>and there's some differences, but yeah, the rest of the

1441
01:07:48.000 --> 01:07:50.199
<v Speaker 1>elements are the same. And so if you're kind of

1442
01:07:50.280 --> 01:07:53.519
<v Speaker 1>like that, it doesn't have like strong story elements. It

1443
01:07:53.559 --> 01:07:56.760
<v Speaker 1>really is just a you know, an explore and then

1444
01:07:57.119 --> 01:08:01.400
<v Speaker 1>you know, fight off the monsters game. But it's fun

1445
01:08:01.440 --> 01:08:04.000
<v Speaker 1>and yeah, I played it with my guys group a

1446
01:08:04.000 --> 01:08:06.599
<v Speaker 1>couple of weeks ago. Board game geek waits it at.

1447
01:08:06.679 --> 01:08:10.960
<v Speaker 1>I have six so you know, your casual gamers. It's

1448
01:08:11.000 --> 01:08:16.039
<v Speaker 1>mildly complicated, but not so complicated that, you know, folks

1449
01:08:16.039 --> 01:08:18.960
<v Speaker 1>that just like you know, a casual board game among friends,

1450
01:08:19.319 --> 01:08:22.600
<v Speaker 1>wouldn't just pick it up nice. So I'm going to

1451
01:08:22.640 --> 01:08:25.079
<v Speaker 1>pick that up. I'm going to pick that it came

1452
01:08:25.079 --> 01:08:27.319
<v Speaker 1>out in twenty seventeen. I don't know if it's still

1453
01:08:27.319 --> 01:08:29.319
<v Speaker 1>in print. That's the only caveat I have on that.

1454
01:08:29.560 --> 01:08:34.039
<v Speaker 1>And then on the other picks, yeah, I've really gotten

1455
01:08:34.039 --> 01:08:39.439
<v Speaker 1>into using the agent mode on Cursor, and so I'm

1456
01:08:39.439 --> 01:08:42.239
<v Speaker 1>going to pick that as well. Incidentally, I was just

1457
01:08:42.359 --> 01:08:45.479
<v Speaker 1>kind of goofing around and I thought, Okay, well, how

1458
01:08:45.560 --> 01:08:48.279
<v Speaker 1>much work would it be to get it to essentially

1459
01:08:48.399 --> 01:08:53.479
<v Speaker 1>vibe code React native app, a podcast subscription app.

1460
01:08:54.039 --> 01:08:55.640
<v Speaker 2>And I have to say that it did pretty good.

1461
01:08:55.840 --> 01:08:58.039
<v Speaker 1>It doesn't have all the features I want in it yet,

1462
01:08:58.760 --> 01:09:02.520
<v Speaker 1>but it's good enough to where I'm starting to think

1463
01:09:02.520 --> 01:09:04.399
<v Speaker 1>about whether or not I actually want to release the

1464
01:09:04.439 --> 01:09:08.760
<v Speaker 1>sucker onto the app stores. And so you know, and

1465
01:09:08.800 --> 01:09:12.560
<v Speaker 1>I'm not a React Native developer by any means though, again,

1466
01:09:12.600 --> 01:09:15.119
<v Speaker 1>that's another technology I want to pick up because we

1467
01:09:15.239 --> 01:09:17.640
<v Speaker 1>use it at work. So anyway, so I'm gonna I'm

1468
01:09:17.640 --> 01:09:20.560
<v Speaker 1>gonna pick that as well. And then within React Native,

1469
01:09:20.560 --> 01:09:21.399
<v Speaker 1>I'm using Expo.

1470
01:09:21.600 --> 01:09:25.920
<v Speaker 2>Yeah. Pretty cool. But yeah, Mike, what picks do you have?

1471
01:09:26.479 --> 01:09:30.399
<v Speaker 3>Yeah, so I guess my game related pick would probably

1472
01:09:30.439 --> 01:09:34.680
<v Speaker 3>be avowed. So that was recommended to be by don't

1473
01:09:34.680 --> 01:09:37.079
<v Speaker 3>know he's been on this pod before, but certainly legend

1474
01:09:37.199 --> 01:09:41.359
<v Speaker 3>of the Ruby community justin Searles. Oh yeah, sort of

1475
01:09:41.439 --> 01:09:45.319
<v Speaker 3>like you know, it's made by Obsidian. It's like a

1476
01:09:45.439 --> 01:09:50.680
<v Speaker 3>kind of Bethesda esque like story driven RPG and it's just,

1477
01:09:51.279 --> 01:09:53.439
<v Speaker 3>I don't know, like if you liked all those old

1478
01:09:53.439 --> 01:09:57.479
<v Speaker 3>school rpugs like Oblivion and Skyrim and whatever, it's got

1479
01:09:57.479 --> 01:10:00.720
<v Speaker 3>that vibe, but like lots of nice like quality of

1480
01:10:00.760 --> 01:10:03.199
<v Speaker 3>life things like, so if a character ever uses a

1481
01:10:03.199 --> 01:10:04.840
<v Speaker 3>sort of bit of jargon, you can just press a

1482
01:10:04.880 --> 01:10:07.119
<v Speaker 3>button and then a glossary pops up that sort of

1483
01:10:07.119 --> 01:10:10.560
<v Speaker 3>defines a specific bit of jargon they used, and I'm like, yeah,

1484
01:10:10.600 --> 01:10:13.600
<v Speaker 3>I want this in every RPG now, And like, you know,

1485
01:10:13.680 --> 01:10:16.079
<v Speaker 3>if you're a made you have a wand that casts

1486
01:10:16.760 --> 01:10:19.880
<v Speaker 3>stuff and it doesn't require man and you know, like

1487
01:10:20.000 --> 01:10:22.239
<v Speaker 3>lots of just like little things that have annoyed me

1488
01:10:22.279 --> 01:10:25.159
<v Speaker 3>in other games. So yeah, I'm enjoying just exploring that.

1489
01:10:25.199 --> 01:10:26.640
<v Speaker 3>I imagine it's one of those games I' probably gone

1490
01:10:26.720 --> 01:10:29.520
<v Speaker 3>hundred percent just because like the world is interesting enough.

1491
01:10:30.239 --> 01:10:31.600
<v Speaker 2>Yeah, what's it called again.

1492
01:10:31.840 --> 01:10:38.680
<v Speaker 3>It's called Avowed avowe D. And then my, I guess

1493
01:10:38.680 --> 01:10:41.800
<v Speaker 3>if you're not gamer like TV wise, we've been watching

1494
01:10:41.880 --> 01:10:45.119
<v Speaker 3>Tokyo Vice, which is pretty interesting about this guy who's

1495
01:10:45.159 --> 01:10:46.920
<v Speaker 3>a journalist and kind of lots of stuff with like

1496
01:10:47.039 --> 01:10:52.079
<v Speaker 3>organized crime in Japan. That's kind of what network it's

1497
01:10:52.119 --> 01:10:53.880
<v Speaker 3>on or whatever. But that's been good, so only two

1498
01:10:53.880 --> 01:10:56.000
<v Speaker 3>seasons of that. We're about halfway through the second season.

1499
01:10:56.079 --> 01:10:56.800
<v Speaker 3>Enjoying that a lot.

1500
01:10:57.439 --> 01:11:01.359
<v Speaker 4>And then I guess on the computer land.

1501
01:11:01.520 --> 01:11:03.279
<v Speaker 3>I guess, yeah, I mentioned it already, but I would

1502
01:11:03.319 --> 01:11:08.039
<v Speaker 3>probably say the copilot agent mode where you can assign

1503
01:11:08.079 --> 01:11:10.239
<v Speaker 3>it from assign it an issue and it will then

1504
01:11:10.319 --> 01:11:12.680
<v Speaker 3>create a pr there's a bunch of rough edges there,

1505
01:11:12.680 --> 01:11:16.760
<v Speaker 3>but there's something about the workflow that feels pretty different

1506
01:11:16.800 --> 01:11:19.560
<v Speaker 3>to like running agents locally, and has a different trust

1507
01:11:19.600 --> 01:11:22.199
<v Speaker 3>model in a good way in that like you can

1508
01:11:22.399 --> 01:11:24.760
<v Speaker 3>let it just run arbitrary commands and it's running in

1509
01:11:24.760 --> 01:11:26.800
<v Speaker 3>some random dog continuing and get ups infratructure that you

1510
01:11:26.840 --> 01:11:29.640
<v Speaker 3>don't care about compared to your local machine.

1511
01:11:30.119 --> 01:11:32.079
<v Speaker 4>But yeah, but for if you're someone who lives in

1512
01:11:32.119 --> 01:11:33.359
<v Speaker 4>prs all of the time.

1513
01:11:33.239 --> 01:11:36.199
<v Speaker 3>Then it might be worth seeing if that's an agent

1514
01:11:36.239 --> 01:11:38.399
<v Speaker 3>flow that works for you more than like some term

1515
01:11:38.479 --> 01:11:41.079
<v Speaker 3>or lap or some window in your right idea or whatever.

1516
01:11:41.319 --> 01:11:43.560
<v Speaker 2>Cool. Well, thanks for coming. This was fun.

1517
01:11:44.199 --> 01:11:47.239
<v Speaker 4>Yeah, thanks for having me always your fun line.

1518
01:11:47.560 --> 01:11:50.199
<v Speaker 1>Yeah, I'm gonna go ahead and wrap us up until

1519
01:11:50.239 --> 01:11:51.680
<v Speaker 1>next time, folks max out
