WEBVTT

1
00:00:05.719 --> 00:00:10.279
Hey, welcome back to another episode
of the Ruby Grogs podcast. This week,

2
00:00:10.279 --> 00:00:15.480
I'm talking to Mike McQuaid. Mike
is one of the maintainers of Homebrew.

3
00:00:16.679 --> 00:00:19.480
If you have a Mac, you
know, and if you don't have

4
00:00:19.559 --> 00:00:25.440
a Mac then we'll get into what
it is. But yeah, cool stuff

5
00:00:26.079 --> 00:00:29.600
calling in from Scotland. Is that
what you said? Yep, Edinburgh,

6
00:00:29.679 --> 00:00:34.520
Scotland. Very cool. I have
some Scottish in me. I have a

7
00:00:34.520 --> 00:00:39.079
whole bunch of other European countries in
me too. But anyway, do you

8
00:00:39.159 --> 00:00:41.600
want to just jump in and let
us know what else people ought to know

9
00:00:41.600 --> 00:00:45.679
about you before we get rolling?
Hey, folks, this is Charles Maxwell.

10
00:00:45.719 --> 00:00:49.240
I've been talking to a bunch of
people that want to update their resume

11
00:00:49.439 --> 00:00:52.920
and find a better job, and
I figure, well, why not just

12
00:00:52.920 --> 00:00:56.600
share my resume? So you if
you go to topendevs dot com slash resume,

13
00:00:57.520 --> 00:01:00.920
enter your name and email address,
then you get a copy of the

14
00:01:00.960 --> 00:01:06.000
resume that I use, that I've
used through freelancing through most of my career,

15
00:01:06.400 --> 00:01:08.319
as I've kind of refined it and
tweaked it to get me the jobs

16
00:01:08.319 --> 00:01:12.079
that I want. Like I said, top endevs dot com slash resume.

17
00:01:12.159 --> 00:01:15.519
We'll get you that and you can
just kind of use the formatting. It

18
00:01:15.599 --> 00:01:19.480
comes in word and pages formats and
you can just fill it in from there.

19
00:01:22.840 --> 00:01:26.920
Sure. So yeah, as Charles
as I said, I'm Mike McQuaid.

20
00:01:26.480 --> 00:01:30.920
He said my name perfectly, which
is not always something you can rely

21
00:01:30.000 --> 00:01:37.439
on, which is very nice.
So I'm currently working on Humbrew in my

22
00:01:38.079 --> 00:01:42.719
you know, volunteer life, spare
time sort of stuff. Worked on it

23
00:01:42.760 --> 00:01:45.719
for fifteen years since two thousand and
nine I got involved. I think I

24
00:01:45.760 --> 00:01:48.799
was the third person to get a
commit bit on the project, and I'm

25
00:01:49.120 --> 00:01:51.920
oh, wow, I'm still standing
after that time. And I'm like the

26
00:01:51.920 --> 00:01:56.599
project leader, which basically means I'm
sort of an elected like figurehead, slash

27
00:01:56.640 --> 00:02:00.200
tech lead, etc. So yeah, and my kind of outside of my

28
00:02:00.239 --> 00:02:05.760
Homebrew life work wise, I'm working
right now start a company last year with

29
00:02:05.760 --> 00:02:09.960
some ex Getthulb people called work Brew, where we're working on commercializing some stuff

30
00:02:09.960 --> 00:02:15.599
around humbrew and basically building the features
that kind of small, medium large companies

31
00:02:15.680 --> 00:02:19.039
need that Homebrew does not have so
that they can work in the way they

32
00:02:19.080 --> 00:02:23.199
want to work while Homebrew placed nicely
with that and then before I was working

33
00:02:23.199 --> 00:02:27.360
here. I worked at GitHub for
ten years. I left as like a

34
00:02:27.400 --> 00:02:30.599
principal engineer last year, and I
was bounced all over the place there,

35
00:02:30.639 --> 00:02:36.039
but particularly I guess focused on developer
experience stuff and open source scratching my own

36
00:02:36.039 --> 00:02:40.479
itches. Basically very cool. Yeah, I've known a few people who've worked

37
00:02:40.520 --> 00:02:46.400
at GitHub. I also remember way
back in the day when Chris and Tom

38
00:02:46.439 --> 00:02:50.759
put their heads together and started the
thing as kind of a project in a

39
00:02:50.840 --> 00:02:53.560
restaurant or something, And yeah,
it's kind of funny to look at where

40
00:02:53.680 --> 00:03:00.599
it all wound up, with Microsoft
buying them and everything else. Just kind

41
00:03:00.599 --> 00:03:02.680
of start with the fundamentals here.
I did kind of mention that if you

42
00:03:02.680 --> 00:03:05.840
have a Mac, you probably know
what Homebrew is, but do you want

43
00:03:05.879 --> 00:03:08.800
to give people a rundown of what
it is? Sure? So Homebrew is

44
00:03:08.879 --> 00:03:15.520
a open source package manager for Mac
os primarily and also increasingly Linux as well.

45
00:03:15.520 --> 00:03:16.840
Interestingly, oh, really could talk
a little bit more about that layer,

46
00:03:16.840 --> 00:03:22.240
because that's sometimes confusing to particularly Mac
people. But yeah, so basically,

47
00:03:22.280 --> 00:03:25.240
if you you write brew, which
is the kind of shorthand Brew install,

48
00:03:25.439 --> 00:03:30.520
and then pretty much any application you
would want, and you can install

49
00:03:30.520 --> 00:03:36.400
that on your Mac, So it's
I believe them kind of we have some

50
00:03:36.680 --> 00:03:40.039
degree of evidence that you know,
about thirty million people and or bots make

51
00:03:40.120 --> 00:03:45.039
use of Homebrew, and it's yeah, in our opinion, like the best

52
00:03:45.080 --> 00:03:46.879
way of installing open source software your
Mac. Well you may not know as

53
00:03:46.919 --> 00:03:51.639
well. With Homebrew, it started
off just being like building everything from source

54
00:03:51.719 --> 00:03:54.080
package manager for like open source tools, w get, kurl, whatever,

55
00:03:54.439 --> 00:03:59.560
whereas nowadays you can also install like
upstream binaries, so like say like Chrome,

56
00:03:59.639 --> 00:04:03.159
which I'm a diehard Safari guy,
so I'm streaming in Chrome today because

57
00:04:03.800 --> 00:04:09.199
I had my usual sadness of learning
the website didn't support Safari, so I

58
00:04:09.240 --> 00:04:12.599
find up Chrome, but I install
Chrome by just typing brew and still google

59
00:04:12.639 --> 00:04:15.560
Chrome, and then it sticks everything
in my applications folder, sets it all

60
00:04:15.639 --> 00:04:17.839
up and all that type of things. And there's a long taiale of like

61
00:04:18.000 --> 00:04:23.120
ecosystems where you can have like brew
Bundle is another favorite of mind, where

62
00:04:23.120 --> 00:04:27.199
you can have like declarative ways of
telling him Brew what to do and all

63
00:04:27.199 --> 00:04:30.160
this type of stuff. So yeah, that's basically and my my non tech

64
00:04:30.199 --> 00:04:35.519
expansion of rom brew is like a
app store for open source in your terminal,

65
00:04:36.399 --> 00:04:42.839
right, Yeah, you just brew
install whatever you want, and off

66
00:04:42.839 --> 00:04:46.600
it runs and does its thing.
In fact, a lot of tutorials if

67
00:04:46.639 --> 00:04:51.680
you need a particular piece of the
puzzle, a lot of the gems and

68
00:04:51.720 --> 00:04:56.199
things that I use in Ruby,
it'll it'll basically say, oh, Brew

69
00:04:56.240 --> 00:04:59.399
install your blah blah blah, right, and then and then you can run

70
00:04:59.439 --> 00:05:01.839
from there. So yeah, it's
definitely something that I use and I reach

71
00:05:01.920 --> 00:05:05.279
for and I don't even think anymore
that, oh gee, somebody actually made

72
00:05:05.360 --> 00:05:13.319
this, right, It's just part
of life. So anyway, So yeah,

73
00:05:13.319 --> 00:05:15.720
so I'm kind of curious as we
kind of get into this a little

74
00:05:15.759 --> 00:05:18.040
bit, and there's a lot to
talk about, right because I do want

75
00:05:18.040 --> 00:05:23.199
to get into work Crew and what
that's all about. But before we do

76
00:05:23.279 --> 00:05:27.360
that, for those of us who
have used homebrew for a long time and

77
00:05:27.399 --> 00:05:31.879
are excited to see, you know, maybe where it came from and what

78
00:05:32.040 --> 00:05:36.759
all is entailed in it, where
did it come from? You said you

79
00:05:36.800 --> 00:05:41.199
weren't in it from necessarily the beginning, but you've got to commitment pretty early.

80
00:05:41.279 --> 00:05:44.519
So yeah, it was sorry there. I think I got involved about

81
00:05:44.720 --> 00:05:49.160
you know, maybe started using it
four or five months and started contributing pretty

82
00:05:49.160 --> 00:05:53.120
short after when it was prostrated.
It was made in two thousand and nine

83
00:05:53.639 --> 00:05:56.800
by a guy called Max Howell,
who was in one that I think he

84
00:05:56.839 --> 00:06:00.759
was working at last FM at the
time, the blast from the past that

85
00:06:00.040 --> 00:06:04.600
probably still exists but not as widely
used as it once was. So he

86
00:06:05.360 --> 00:06:11.199
had, I have kids younger than
Homebrew, I'm sure. Yeah, I

87
00:06:11.519 --> 00:06:15.279
also have because younger than Humbird's.
And it's distressing when you meet kids who

88
00:06:15.319 --> 00:06:19.680
are the same age as he Brew
and how articulate they are. So he

89
00:06:19.920 --> 00:06:24.240
basically had played around with all the
package managers on the Mac at the time.

90
00:06:24.319 --> 00:06:27.759
You know, there was mac Ports
and Think and oh yeah, I

91
00:06:27.839 --> 00:06:31.279
remember those, yeah coming what the
other one was bats? But yeah,

92
00:06:31.360 --> 00:06:35.040
yeah, mac Ports is probably the
dominant one. And he didn't have a

93
00:06:35.120 --> 00:06:40.000
huge amount of like good time using
mac Ports, felt that it kind of

94
00:06:40.079 --> 00:06:43.839
did too much and he didn't like
the approach, so he built Homebrew,

95
00:06:43.839 --> 00:06:48.399
which was this kind of beer themed
package manager. And yeah, and the

96
00:06:48.439 --> 00:06:53.240
other interesting model is still called casks. Yeah, the packages are still called

97
00:06:53.319 --> 00:06:56.920
like formulating casks, and it's still
got all the beer themes all over the

98
00:06:56.959 --> 00:06:59.519
place. But one of the interesting
things he did as well is it was,

99
00:06:59.639 --> 00:07:01.480
you know, this was I come
remember you probably know Chile's actually what

100
00:07:01.920 --> 00:07:05.040
your GitHub open to the public,
but certainly this was in two thousand and

101
00:07:05.120 --> 00:07:10.399
nine, so GitHub was like relatively
new. I'm pretty sure when humbrew first

102
00:07:10.680 --> 00:07:15.720
got created, the poor request didn't
exist yet. But Max from the outset

103
00:07:15.800 --> 00:07:17.839
had decided like, hey, I
want to make this thing, but I

104
00:07:17.879 --> 00:07:21.439
can't maintain thousands of packages all by
myself, so I'm going to have to

105
00:07:21.519 --> 00:07:26.319
kind of open this up and make
it a community effort to do that.

106
00:07:27.240 --> 00:07:30.079
So yeah, so that's basically what
happened, and more and more people kind

107
00:07:30.079 --> 00:07:31.920
of particularly in the Ruby community,
Like I think the Ruby community was one

108
00:07:31.959 --> 00:07:35.800
of the early adopters of hombrew because
humbrew itself was written and still it is

109
00:07:35.879 --> 00:07:40.959
primarily within Ruby, and yeah,
basically just it kind of grew, more

110
00:07:41.000 --> 00:07:44.959
people got involved, more people contributed, and then you know, people who

111
00:07:45.000 --> 00:07:47.120
contributed lots and ended up doing a
bunch of reviews and stuff like that.

112
00:07:47.439 --> 00:07:51.240
I guess folks like me ended up
kind of becoming maintainers, and then the

113
00:07:51.279 --> 00:07:55.680
project's just sort of grown and growing
over the time. So yeah, it

114
00:07:55.720 --> 00:07:58.839
went from originally like just Max in
two thousand and nine to nowadays, we've

115
00:07:58.839 --> 00:08:03.600
got I think thirty something maintainerous.
We've probably had like fifty total old time,

116
00:08:03.639 --> 00:08:07.439
and then we've had like over ten
thousand people will contribute to some part

117
00:08:07.439 --> 00:08:16.240
of the project at least once.
Very cool. So I have so many

118
00:08:16.360 --> 00:08:22.000
questions. So one of them is
is there there are kind of a bunch

119
00:08:22.000 --> 00:08:26.120
of different pieces to this. Right, you've got the command line interface,

120
00:08:26.199 --> 00:08:28.240
and then you've got the hey,
go grab the thing, and how do

121
00:08:28.279 --> 00:08:31.240
I know how to build the thing? And how do I know where to

122
00:08:31.279 --> 00:08:35.639
put the thing? And how do
we write? And so let's just start

123
00:08:35.639 --> 00:08:41.759
with the command line interface. So
what tools did you start out working with?

124
00:08:41.879 --> 00:08:48.120
And has that changed over the last
what thirteen fourteen years? Yeah?

125
00:08:48.200 --> 00:08:56.039
Yeah, So humbrew was written originally
exclusively in Ruby pretty much, and it's

126
00:08:56.039 --> 00:09:01.399
still primarily Ruby, like the Irony
in homebrew Land, compared to maybe other

127
00:09:01.440 --> 00:09:07.559
bits of Ruby where because we're like
a CLI, because we're we are installing

128
00:09:07.600 --> 00:09:09.879
a bunch of stuff related to compilers
and things, but we can't rely on

129
00:09:09.919 --> 00:09:13.600
the necessarily being there, and we
haven't wanted to ship native binaries for the

130
00:09:13.639 --> 00:09:18.960
application itself. When we want to
make things faster in Homebrew. Often they

131
00:09:18.000 --> 00:09:22.279
are ported from Ruby to Bash.
So an increasing amount of the kind of

132
00:09:22.480 --> 00:09:28.039
very performance intensive bits of Homebrew,
like the bits where like you want to

133
00:09:28.080 --> 00:09:30.919
be able to run a command and
have a response instantly, or you want

134
00:09:30.960 --> 00:09:35.360
to be able to have a command
that you can run every time you open

135
00:09:35.399 --> 00:09:37.240
your shell and it not have too
much overhead. So some of that,

136
00:09:37.440 --> 00:09:41.679
more of that stuff is kind of
ported to like Bash and like the updaters

137
00:09:41.720 --> 00:09:46.799
in Bash. And because Homebrew installs
its own Ruby nowadays, because you know,

138
00:09:46.840 --> 00:09:50.399
we originally used just the whatever rubyship
with mac os and that worked all

139
00:09:50.519 --> 00:09:54.279
right for a pretty long time.
But I think last year we were speaking

140
00:09:54.279 --> 00:09:58.840
to our kind of Apple contacts and
they theoretically deprecated Ruby. I think a

141
00:09:58.840 --> 00:10:01.320
few years ago in the system said
hey, can we get a newer one?

142
00:10:01.799 --> 00:10:03.799
And it's still there. It is
still there, but it's a two

143
00:10:03.840 --> 00:10:07.919
point six. Yeah, it's not
a current version. Yeah, pretty ancient.

144
00:10:09.120 --> 00:10:11.759
And so yeah, so we ended
up we were rolling our own for

145
00:10:11.960 --> 00:10:16.279
really old Macwest versions and for Linux
anyway. So we're just like, well

146
00:10:16.320 --> 00:10:20.399
we can roll around for everyone now
and just make it mandatory. And I

147
00:10:20.399 --> 00:10:22.960
think it's Ruby three point one or
two or something like that, uh huh

148
00:10:24.240 --> 00:10:26.559
nowadays, and yeah, and that's
a much nicer experience for us and makes

149
00:10:26.559 --> 00:10:30.519
everything a bit faster and snappier and
stuff. So yeah, So the main

150
00:10:30.519 --> 00:10:33.600
package manager is all in Ruby,
and then we have I guess two main

151
00:10:33.759 --> 00:10:37.200
repositories. So there's like homebrew Brew
we would call it, which is like

152
00:10:37.240 --> 00:10:41.039
you do com slasher and brew slash
Brew. That's the package manager and that's

153
00:10:41.440 --> 00:10:46.440
that's my personal like favorite happy place
to live and I kind of review pretty

154
00:10:46.519 --> 00:10:52.080
much every pr that is in that
repo. And then there's like Homebrew Slash

155
00:10:52.600 --> 00:10:56.720
Homebrew Core and so that's like the
core formula, like basically everything in there

156
00:10:56.759 --> 00:11:00.360
has to be open source and there's
like six thousand packages or whatever there,

157
00:11:00.840 --> 00:11:03.639
and that again is I think one
of the reasons why Ruby was such a

158
00:11:03.639 --> 00:11:07.679
good pick originally, like is that
the like the the files that kind of

159
00:11:07.679 --> 00:11:13.720
describe how to install something are known
as formula. And again going down the

160
00:11:13.720 --> 00:11:18.840
beer theme, and that is like
a really nice Ruby DSL that kind of

161
00:11:18.279 --> 00:11:22.360
is I would say fairly if you
if you kind of have a basic understanding

162
00:11:22.360 --> 00:11:26.360
of almost like you know, configure, make, make instore, like how

163
00:11:26.799 --> 00:11:30.279
Unix programs are generally built like it's
you can read through that, and it's

164
00:11:30.279 --> 00:11:35.720
pretty obvious how to get started.
And if you've ever had the misfortune of

165
00:11:35.960 --> 00:11:41.159
having to try and package like RPMs
or like dB in packages or whatever,

166
00:11:41.200 --> 00:11:45.799
which are very, very robust,
arguably better than Homebrew once they're there,

167
00:11:45.840 --> 00:11:50.919
But like the actual just process of
going from nothing to something that works is

168
00:11:50.080 --> 00:11:56.600
fairly time consuming in my experience,
whereas in Homebrew you can just you know,

169
00:11:56.840 --> 00:12:01.039
like make a fairly short little thing
and then yourself up and running and

170
00:12:01.039 --> 00:12:05.440
storing applications in a pretty quick time. And I think that's why it's grown

171
00:12:05.480 --> 00:12:09.679
and stayed big, because it's quite
easy for people to contribute and modify and

172
00:12:09.759 --> 00:12:11.799
change things, and it's just you
know, you can do it all on

173
00:12:11.879 --> 00:12:16.399
get help nowadays. Right. So, when I was in college, I

174
00:12:16.039 --> 00:12:22.039
was a systems administrator on mostly red
Hat systems, and so I've written some

175
00:12:22.080 --> 00:12:28.799
fugly pass scripts to do all kinds
of things, and I've also done RPM

176
00:12:28.879 --> 00:12:31.519
packaging and you know later on I
yeah, there are a few things that

177
00:12:31.559 --> 00:12:35.519
I've had to fiddle with and maybe
put into a Debian package, and yeah,

178
00:12:35.519 --> 00:12:39.919
that is not a fun process.
And then you just kind of have

179
00:12:39.000 --> 00:12:43.320
to put it out there and then
pull it in with your package manager or

180
00:12:43.360 --> 00:12:48.480
with some utility that can pull it
in and unpack it and do whatever it

181
00:12:48.519 --> 00:12:52.720
does. And oh man, yeah, Homebrew is pretty nice that way.

182
00:12:52.720 --> 00:12:58.159
Also done plenty of stuff with Make, which is it's a powerful utility,

183
00:12:58.200 --> 00:13:03.600
but it's a little arcane sometime,
and so yeah, I definitely feel you

184
00:13:03.679 --> 00:13:09.720
there. So yeah, so it's
all written in Ruby. Is it pretty

185
00:13:09.919 --> 00:13:13.120
Is it pretty simple? Or are
there are a lot of edge cases you

186
00:13:13.159 --> 00:13:16.639
have to handle or is that mostly
in the packages or the formula or whatever.

187
00:13:16.039 --> 00:13:18.679
Yeah, a bit of both.
Like, I mean, there's I

188
00:13:18.720 --> 00:13:22.120
think with stuff like humbrew is like
a really long tail. So I guess

189
00:13:22.360 --> 00:13:26.600
with the stuff that Max created in
the first place, you know, I

190
00:13:26.799 --> 00:13:31.399
can't know how many packages he's almost
like shipped with to begin with, but

191
00:13:31.039 --> 00:13:35.879
it's one of those things where if
you have one hundred packages, everything seems

192
00:13:35.879 --> 00:13:37.120
pretty simple. If you have a
thousand, things start to get a bit

193
00:13:37.120 --> 00:13:39.840
more complex, and then right you
start getting up to like five six thousand,

194
00:13:39.879 --> 00:13:45.360
it's like it gets really messy.
All the weird and wonderful things that

195
00:13:45.480 --> 00:13:48.600
things do. And as a packager
of software. You have this kind of

196
00:13:48.639 --> 00:13:56.279
weird decision framework where there's often the
way the people who write there the software

197
00:13:56.279 --> 00:14:00.320
originally, I guess we would refer
to them as upstream. The way they

198
00:14:00.559 --> 00:14:03.200
want to release their software is not
necessarily the way your users want to consume

199
00:14:03.240 --> 00:14:07.399
the software, or the way you
want to be keeping it up to date

200
00:14:07.480 --> 00:14:09.759
and stuff. So you're trying to
sort of balance these things. And yeah,

201
00:14:09.759 --> 00:14:13.240
I mean the thing I've enjoyed about
it personally is like I've always been

202
00:14:13.240 --> 00:14:16.639
a bit of a kind of generalist
software ride, so like with Ruby,

203
00:14:16.639 --> 00:14:20.480
particularly when I was just doing a
lot more of the packaging stuff than I

204
00:14:20.519 --> 00:14:22.600
do probably today. You know,
in a given week, you could be

205
00:14:22.639 --> 00:14:28.000
writing Ruby, c C plus plus
Haskell, like having to play around with

206
00:14:28.120 --> 00:14:31.200
like ten to twenty different languages and
frameworks and you kind of develop a sense

207
00:14:31.240 --> 00:14:35.279
of how this stuff plays might see
together, and what the what the edge

208
00:14:35.279 --> 00:14:37.960
cases are and what you need to
watch out for and everything like that.

209
00:14:39.000 --> 00:14:45.360
But yeah, I mean, software
is a wily beast, and packaging it's

210
00:14:45.399 --> 00:14:52.440
no less so interesting. So yeah, so what are your dependencies? I

211
00:14:52.480 --> 00:14:56.480
know that you have to have the
ex Code build tools installed. Does it

212
00:14:56.600 --> 00:15:01.960
pull in the rest of them for
me. Yeah, basically that's on a

213
00:15:01.039 --> 00:15:05.720
map, like that's all you need. You just need to have the excode

214
00:15:05.759 --> 00:15:11.000
like utilities installed. And then even
then, like we've we've sort of tried

215
00:15:11.039 --> 00:15:13.960
in the past, like sometimes to
make them not required, but it's it's

216
00:15:15.000 --> 00:15:18.679
pretty hard, given like the state
of things in Apple Land, to go

217
00:15:18.759 --> 00:15:22.120
completely without that. And you know, every few years Apple introduced some new

218
00:15:22.159 --> 00:15:26.639
requirement which requires using a CLI that
only they provide, and there's no open

219
00:15:26.639 --> 00:15:30.639
source version, and we're kind of
back to square one there. So yeah,

220
00:15:30.720 --> 00:15:33.080
basically just the Explode Comme online tools
are the only dependency. And then

221
00:15:33.679 --> 00:15:37.639
if you're running Homebone Linux, there's
a few other bits and pieces there.

222
00:15:37.679 --> 00:15:41.720
But the bigger one I mentioned before
like Ruby, like we we build our

223
00:15:41.759 --> 00:15:46.480
own kind of statically compile with Ruby, which you can just use anywhere that's

224
00:15:46.519 --> 00:15:50.799
altered install for you and everything.
So I guess some of the something else

225
00:15:50.840 --> 00:15:54.960
that I'm wondering is are you taking
advantage of some of the newer features in

226
00:15:56.080 --> 00:15:58.960
Ruby. So for example, you've
got wygit right that speeds things up quite

227
00:16:00.080 --> 00:16:03.519
a bit, or the other one
is like fiber scheduler and stuff like that

228
00:16:03.519 --> 00:16:07.559
which gives you some level of currency. Are you digging into any of that

229
00:16:07.720 --> 00:16:11.720
or is that kind of upcoming when
you get to it. Yeah, so

230
00:16:11.759 --> 00:16:15.000
we've we've played around with like bits
and pieces around there. Like so it's

231
00:16:15.120 --> 00:16:18.799
it's funny because humbrew is very much
you know that there's been this kind of

232
00:16:18.840 --> 00:16:22.080
meme in the Ruby community for a
while that like people get sad that like

233
00:16:22.840 --> 00:16:29.000
Ruby is associated almost entirely with rails
most of the time, and like Homebrew

234
00:16:29.240 --> 00:16:32.600
is pretty much as far away from
that as you can get, right,

235
00:16:32.679 --> 00:16:34.240
you know, we're not we're not
even a web app. We're not attached

236
00:16:34.240 --> 00:16:40.840
to a database like you're running a
CLI. So it's funny. I guess

237
00:16:41.159 --> 00:16:44.919
a lot of the places from where
the jets come from like never say never,

238
00:16:45.000 --> 00:16:47.639
like it may well make things faster
in the future, but right now,

239
00:16:47.679 --> 00:16:49.279
all of the kind of jet,
different jets we've tried, and the

240
00:16:49.279 --> 00:16:53.360
different jeits sessions we've tried, Like
just the way Homebrew runs, even if

241
00:16:53.399 --> 00:16:59.960
it's doing a relatively complex task like
a the run times are relatively short.

242
00:17:00.000 --> 00:17:03.919
Access only sticks around for you know, at most probably a few minutes,

243
00:17:03.680 --> 00:17:07.640
but then a lot of the time
it's just around for a second, and

244
00:17:08.640 --> 00:17:14.319
there's new data every time, so
you can't necessarily cash things super hard.

245
00:17:14.920 --> 00:17:19.240
And like basically everywhere where humebrew is
slow, and like that's the most common

246
00:17:19.240 --> 00:17:23.720
complaint about Homebrew is that Homebrew is
slow. That almost everywhere it's slow,

247
00:17:23.759 --> 00:17:30.680
it's slow because of the like io
basically like we're either down or something on

248
00:17:30.759 --> 00:17:33.720
the internet, we're write something to
your hard drive, we're reading something from

249
00:17:33.759 --> 00:17:36.160
your hard drive, whatever, and
we can maybe do a little bit more

250
00:17:36.160 --> 00:17:41.200
paralyzation. But again, like in
the past, there's been times where I've

251
00:17:41.440 --> 00:17:45.359
and again some of this may be
changing from spinning platters to SSDs or whatever,

252
00:17:45.400 --> 00:17:48.839
there's been times where I've ripped out
paralyzed code that we have in Homebrew,

253
00:17:49.079 --> 00:17:53.519
and it's actually dramatically faster running to
really than it is parallel. So

254
00:17:53.920 --> 00:17:57.279
yeah, I mean, we we
definitely have a decent amount of like profiling

255
00:17:57.319 --> 00:18:02.359
tools like we rely on, but
basically everything you would expect and wouldby land

256
00:18:02.400 --> 00:18:06.200
stack, corporal, all these types
of things. But yeah, but we

257
00:18:06.240 --> 00:18:10.200
do try and make things as possible
we can, and thegits don't seem to

258
00:18:10.359 --> 00:18:14.319
really be helping much for us at
the moment, but as I say maybe.

259
00:18:17.319 --> 00:18:21.240
Yeah, So I'm going to move
on a little bit too. You

260
00:18:21.279 --> 00:18:26.279
mentioned Homebrew Core, so is that
the list of casks in formulae, So

261
00:18:26.400 --> 00:18:30.599
Homebrew Core is the list of formula. So we have Homebrew cosk and Homebrew

262
00:18:30.680 --> 00:18:37.519
Core. So the difference between casks
and formula are Like Homebrew cosks used to

263
00:18:37.559 --> 00:18:40.680
be a certain like separate project,
and that's the way. That's what you

264
00:18:40.799 --> 00:18:45.200
use for installing like binaries from other
people, so like say like Google Chrome

265
00:18:45.519 --> 00:18:51.400
or one password or whatever, like
if you're installing that basically if the project

266
00:18:51.799 --> 00:18:55.200
is whether it's a source or not, if the main way that that's delivered

267
00:18:56.079 --> 00:18:59.920
is like a pre compiled thing or
like a dot app or DMG or don't

268
00:19:00.960 --> 00:19:03.880
or whatever, then you're installing that
with humbrew cost like the essentially to the

269
00:19:04.000 --> 00:19:07.599
user, the interface is more or
less the same nowadays, like you type

270
00:19:07.599 --> 00:19:11.680
bruinstall Google Chrome, but brewinstall w
GET and it's it looks essentially transparent under

271
00:19:11.680 --> 00:19:15.720
the hoods. But right, yeah, they're they're managed in separate repos Like

272
00:19:15.039 --> 00:19:21.559
this was previously like a requirement due
to some open source political nonsense. But

273
00:19:21.640 --> 00:19:25.839
yeah, so everything in Homebrew Core
is open source software. And everything,

274
00:19:25.920 --> 00:19:30.240
and Homebrew cost has a much looser
requirement basically there and so yeah, they're

275
00:19:30.240 --> 00:19:33.480
managed separately. They have roughly the
sammamulate packages, but then like again,

276
00:19:33.559 --> 00:19:37.480
the the DSL that's used are kind
of slightly different. And hombrew cost is

277
00:19:37.480 --> 00:19:41.279
a bit more friendly to like propriet
your software for guy's whatever. And then

278
00:19:41.359 --> 00:19:45.119
humbrew Core is a bit more friendly
to like CLIs and is all open source

279
00:19:45.119 --> 00:19:52.279
software. I gotcha. So yeah, and see I didn't even know you

280
00:19:52.279 --> 00:19:56.039
could install some of those binaries with
Homebrew because I always just go to the

281
00:19:56.079 --> 00:20:00.559
website and download it and run the
installer and right open the DMG and drag

282
00:20:00.599 --> 00:20:07.279
it to applications or whatever. So
that that's really interesting as you get into

283
00:20:07.319 --> 00:20:11.119
some of the open source stuff in
particular, how do you know how to

284
00:20:11.160 --> 00:20:15.680
build it? Are you always looking
for the make file or is there something

285
00:20:15.680 --> 00:20:19.119
else to it? Or so sometimes
there's instructions in like a GitHub repo or

286
00:20:19.160 --> 00:20:23.680
whatever, or sometimes that's kind of
you know, it's got to make file,

287
00:20:23.799 --> 00:20:27.920
and sometimes you just kind of try
it out and figure it out and

288
00:20:29.839 --> 00:20:33.079
hopefully you can do the right thing. And then two years later the author

289
00:20:33.119 --> 00:20:34.160
pops up and they say, hey, you can building this totally wrong,

290
00:20:34.160 --> 00:20:37.680
and it's like, well, you
didn't tell us what to do, dude,

291
00:20:37.680 --> 00:20:41.000
so like that's that's what's going to
happen. So yeah, it's it's

292
00:20:41.000 --> 00:20:48.839
always a like there's definitely like a
certain amount of kind of trends and traits

293
00:20:48.920 --> 00:20:53.400
of things that behave pretty similarly,
and those projects are very nice to deal

294
00:20:53.440 --> 00:20:57.720
with. And then those projects who
decide, hey, I'm gonna invent my

295
00:20:57.799 --> 00:21:03.200
own build system because all the other
ones saw, and yeah, those are

296
00:21:03.559 --> 00:21:08.160
less fun to deal with. Right. So essentially, if I do a

297
00:21:08.200 --> 00:21:17.079
brew install on something like Google Chrome, it's just gonna pull the binary off

298
00:21:17.119 --> 00:21:22.440
of wherever and it's going to put
it wherever it goes and make sure it's

299
00:21:22.440 --> 00:21:23.960
in my path or whatever whatever it
has to do in order for me to

300
00:21:25.000 --> 00:21:29.519
be able to run it, Yeah
exactly. And then for a formula,

301
00:21:29.720 --> 00:21:33.519
it's going to go through some kind
of build process and it sounds like you

302
00:21:33.559 --> 00:21:37.680
don't like auto detect the build script. You go and you look it up

303
00:21:37.720 --> 00:21:41.319
and you add that to the formula
and tell it how to build it.

304
00:21:41.799 --> 00:21:45.559
Yeah exactly. So what we try
and do like certain bits of what the

305
00:21:45.559 --> 00:21:48.880
in perfection for an end user for
the you know, if you're running Brew

306
00:21:48.880 --> 00:21:52.240
and so on your machine, the
experience is actually kind of similar because you're

307
00:21:52.440 --> 00:21:55.279
still downloading a binary most of the
time. If you're installed hem brew on

308
00:21:55.319 --> 00:21:59.079
like a supported MACROS version, which
is one of the last three, and

309
00:21:59.119 --> 00:22:03.359
they're kind of defaulting location right then
what it will do is essentially, when

310
00:22:03.640 --> 00:22:08.119
someone submits a formula or an update
to a formula, we have our poor

311
00:22:08.119 --> 00:22:11.519
request get hub, our continuous integration
will go and like build that, and

312
00:22:11.559 --> 00:22:17.039
then when that works, we then
have a process that kind of that build

313
00:22:17.319 --> 00:22:21.920
artifact gets uploaded. We call those
like bottles, the binary packages and news

314
00:22:21.960 --> 00:22:26.359
like that. That was my probably
favorite contribution to humbrew is doing that just

315
00:22:26.359 --> 00:22:30.400
for the amount of time, it's
probably saved the world because before that,

316
00:22:30.480 --> 00:22:33.480
you know, if you wanted to
install w get, it would take five

317
00:22:33.519 --> 00:22:38.480
minutes and everyone would essentially spend five
minutes with their CPU fans, you know,

318
00:22:38.480 --> 00:22:42.119
in the days before addle Silicon like
going at one hundred percent to spit

319
00:22:42.200 --> 00:22:47.200
out essentially the same binary at the
end. So yeah, now we kind

320
00:22:47.200 --> 00:22:51.680
of have these binary packages and those
are downloaded on your machine and installed and

321
00:22:51.720 --> 00:22:56.400
it's all nice quick and also it's
way less error prone because with the compilation

322
00:22:56.440 --> 00:23:00.359
stuff, there's always things where you
know, you have some brand them up

323
00:23:00.720 --> 00:23:03.240
utility on your machine and the build
script de text that and then blows up

324
00:23:03.319 --> 00:23:07.920
or whatever. So you don't have
those same issues with the binaries. And

325
00:23:10.440 --> 00:23:12.519
Hey, there, this is Charles
Maxwood. I'm excited because I wanted to

326
00:23:12.599 --> 00:23:17.519
let you know about this thing that
I pulled together that I had just I've

327
00:23:17.519 --> 00:23:21.400
been dying to have this for years
and I never felt like I could,

328
00:23:21.680 --> 00:23:23.640
and then I just realized that there's
no reason why I can't. So I'm

329
00:23:23.640 --> 00:23:27.480
putting together a book club and we're
going to read development focused books, career

330
00:23:27.599 --> 00:23:30.920
books, you know, technical books, whatever. The first book that we're

331
00:23:30.920 --> 00:23:36.440
going to do is going to be
Clean Architecture by Uncle Bob Martin. If

332
00:23:36.480 --> 00:23:38.839
you're not familiar with clean code or
some of the other stuff that Bob has

333
00:23:38.920 --> 00:23:41.599
done, check that out. I've
also talked to him on the Clean Coders

334
00:23:41.640 --> 00:23:45.079
podcast, which is on Top End
Devs. But yeah, we're going to

335
00:23:45.160 --> 00:23:48.440
get on. He's going to show
up to some of our meetings, and

336
00:23:48.440 --> 00:23:52.200
what I'm thinking is we'll probably have
like five or six people part of the

337
00:23:52.240 --> 00:23:56.839
conversation along with Bob and I at
the same time, and we'll just so

338
00:23:56.880 --> 00:24:00.319
somebody can come on, they can
ask their question, and then we'll just

339
00:24:00.680 --> 00:24:03.680
rotate people through, so we'll mute
one person, unmute another person when it's

340
00:24:03.720 --> 00:24:07.480
their turn to come on and be
part of the discussion. So we'll do

341
00:24:07.559 --> 00:24:10.960
that for like an hour hour and
a half. And then the other part

342
00:24:10.960 --> 00:24:14.519
of it that I'm putting together is
just kind of a meet and greet gather

343
00:24:14.680 --> 00:24:19.680
area on Gathertown, And so after
the meetup and the call, we we'll

344
00:24:19.680 --> 00:24:22.759
do as we'll all go over to
gather Town and you can just log in,

345
00:24:22.880 --> 00:24:26.079
walk up to a group and have
a conversation, and that way we

346
00:24:26.119 --> 00:24:30.000
can all kind of get to know
each other and make friends and get to

347
00:24:30.039 --> 00:24:33.039
know people across the world. One
thing that I'm finding is that, yeah,

348
00:24:33.079 --> 00:24:36.680
the meetups are starting to come back, but a lot of people don't

349
00:24:36.720 --> 00:24:38.480
have the opportunity to go to a
meetup. And I really want to meet

350
00:24:38.480 --> 00:24:41.920
you guys and talk to you.
So we're gonna put all that together.

351
00:24:41.000 --> 00:24:44.559
We'll all be part of that book
club. You can go to topendevs dot

352
00:24:44.559 --> 00:24:47.720
com slash book Club to be part
of it, and I'm looking forward to

353
00:24:47.759 --> 00:24:52.200
seeing you there. The first book
club meeting will be in December, the

354
00:24:52.240 --> 00:24:56.799
beginning of December. We're starting the
first week of December, and you'll also

355
00:24:56.799 --> 00:25:00.440
be part of the conversation about which
book we do next. I have one

356
00:25:00.440 --> 00:25:03.480
in mind, but I want to
see where everybody's at. So there you

357
00:25:03.519 --> 00:25:07.559
go. Right, So it looks
at my setup and says, oh,

358
00:25:07.680 --> 00:25:11.440
I know that this bottle's compatible,
So I'm just going to give you the

359
00:25:11.480 --> 00:25:17.079
binary instead of making you build it
totally, and then if it can't for

360
00:25:17.119 --> 00:25:21.359
whatever reason, then it'll do the
build step or the build process. Yeah.

361
00:25:21.559 --> 00:25:26.119
Yeah, and I mean that that
essentially should never happen on you know,

362
00:25:26.200 --> 00:25:29.559
support market support right location. But
yeah, if you're outside of that,

363
00:25:29.680 --> 00:25:33.599
then it will fall back to kind
of building from source and when it

364
00:25:33.680 --> 00:25:37.559
can't do that otherwise. But yeah, but most most things, most of

365
00:25:37.599 --> 00:25:41.440
the time will always be you get
like a binder factage for most users.

366
00:25:41.519 --> 00:25:48.279
So right, So just backing up
a little bit because you mentioned Homebrew Core

367
00:25:48.319 --> 00:25:53.119
and Homebrew casks is kind of the
places where these things live. Is Homebrew

368
00:25:53.160 --> 00:25:59.119
literally going to get hub and cloning
it or like, how does it get

369
00:25:59.119 --> 00:26:03.359
that list. Yeah. Originally,
well until very recently, yes, we

370
00:26:03.720 --> 00:26:08.519
did that to get hub. Yes. So the original updater for Homebrew was

371
00:26:08.599 --> 00:26:17.519
just it had one repo which was
like mxcl which is Max How's GitHub mxcl

372
00:26:17.519 --> 00:26:19.279
slash Homebrew, and that would just
be cloned in a directory and when you

373
00:26:19.359 --> 00:26:23.000
ran brew update to like you know, pull the latest packages, that was

374
00:26:23.079 --> 00:26:27.400
just doing a get pull basically.
So over time that became more and more

375
00:26:27.440 --> 00:26:33.599
sophisticated. As Homebrew grew, that
became slower and slower, Like even the

376
00:26:33.640 --> 00:26:37.599
no up operation of just doing a
get fetch on that repo and it's telling

377
00:26:37.640 --> 00:26:40.880
you you don't need anything. That
was taken like a couple of seconds.

378
00:26:41.000 --> 00:26:44.640
At the time, I worked at
GitHub and I was getting annoyed with how

379
00:26:44.640 --> 00:26:48.960
slow it was, so I actually
added a entry to the GitHub api to

380
00:26:48.279 --> 00:26:55.000
specifically to make Homebrews updates faster,
and like it ended up being used by

381
00:26:55.039 --> 00:26:56.680
a bunch of other cases and package
managers or whatever. Essentially, what you

382
00:26:56.720 --> 00:27:00.839
could do is you could just like
pass the the hash that you have I

383
00:27:02.119 --> 00:27:07.079
have used that the the what's called
the hp eat tag, So you could

384
00:27:07.119 --> 00:27:11.640
pass the get commit hash as the
eat tag and then you would get a

385
00:27:11.880 --> 00:27:15.680
whatever I can vote it is the
status code that says not modified essentially,

386
00:27:15.920 --> 00:27:18.759
so it would you do that,
and it also wouldn't count against your GitHub

387
00:27:18.839 --> 00:27:22.960
rate limit because that was very heavily
cash that operation. So that basically meant

388
00:27:22.960 --> 00:27:26.039
you could get a really really fast
response for like gethub repers and we still

389
00:27:26.039 --> 00:27:32.319
rely on that API to this day. And yeah, so until very recently,

390
00:27:32.359 --> 00:27:33.680
like that was still how it was
done and we would like fetched off

391
00:27:33.720 --> 00:27:37.680
or whatever, but over time that
was getting slower and slower, and also

392
00:27:37.720 --> 00:27:41.519
like GitHub were like, you know, they were pretty nice about it all.

393
00:27:41.519 --> 00:27:45.640
But I think at some point I
believe there was like a dedicated bare

394
00:27:45.720 --> 00:27:49.519
metal server that was essentially just twenty
four to seven serving Homebrew core to people.

395
00:27:51.160 --> 00:27:53.960
Because also the way that that that
reaper had super long history loads or

396
00:27:55.000 --> 00:27:59.960
contributories, right, didn't. I
did a lot of like squash and rebasings

397
00:28:00.200 --> 00:28:06.759
like not very kind like history management, and again like thousands of filesand of

398
00:28:06.799 --> 00:28:11.599
folder which we never reknew when humbrew
is created is extreme. If you have

399
00:28:11.720 --> 00:28:17.519
very deep histories, get gets very
angry and the performance goes to bad places

400
00:28:17.559 --> 00:28:22.640
pretty quick. So yeah, so
as of I think it was a year

401
00:28:22.680 --> 00:28:26.559
and a half, maybe two years
ago, like someone one of the Humbrew

402
00:28:26.559 --> 00:28:33.400
maintainers kind of started a first attempt
at like a little project to see about

403
00:28:33.480 --> 00:28:37.720
Okay, well we can you can
effectively turn pretty much all the hungry packages

404
00:28:37.759 --> 00:28:41.920
into like Jason output anyway, and
when you're just downloading binary packages, you're

405
00:28:41.920 --> 00:28:47.559
basically just downloading I think, off
the Internet and sticking it in like installing

406
00:28:47.599 --> 00:28:49.799
it that way anyway, you don't
need all the kind of sophisticated build information

407
00:28:49.920 --> 00:28:53.680
for every package. So yeah,
so as of yeah, like about a

408
00:28:53.720 --> 00:28:57.279
year ago, I think we've migrated
entirely to what we call our kind of

409
00:28:57.400 --> 00:29:02.519
Jason API, which is downloading just
a single Jason file which provides all the

410
00:29:02.559 --> 00:29:06.759
details for those packages, and then
you just have that single download. You

411
00:29:06.759 --> 00:29:08.680
don't need to have that Git reports
showing your machine anymore, which saves a

412
00:29:08.680 --> 00:29:14.480
bunch of space, and it's like
a lot quicker with downloading. And yeah,

413
00:29:14.519 --> 00:29:18.960
and the implementation of that API is
another disgusting thing. Where So,

414
00:29:18.519 --> 00:29:22.279
perhaps because I'm Scottish and we are
known for such things, or just I

415
00:29:22.319 --> 00:29:26.839
don't know, I don't like pain
for things, and in open source projects

416
00:29:26.880 --> 00:29:34.880
I even less so. Our our
Jason API is actually on GitHub pages and

417
00:29:36.240 --> 00:29:40.680
it's yeah, so it's all like
it's a statically generated API essentially, so

418
00:29:40.720 --> 00:29:44.559
like every fifteen minutes we like regenerate
our packages. And what that means is

419
00:29:44.599 --> 00:29:48.759
that it's really really really fast and
essentially, you know, nigh infinitely scalable

420
00:29:48.799 --> 00:29:52.000
for GitHub to stick a CDN in
front of that and host it that way,

421
00:29:52.400 --> 00:29:56.000
and it's also pretty easy for us
to kind of download and debug,

422
00:29:56.039 --> 00:30:02.039
and we're not maintaining some like complex
and like you know, when I worked

423
00:30:02.039 --> 00:30:07.720
on the api GitHub, like,
maintaining the performance on that thing when you

424
00:30:07.759 --> 00:30:11.640
were at the scales we were out
was not an easy feat. And yeah,

425
00:30:11.680 --> 00:30:12.839
and I saw that, I guess
working brew and I was like,

426
00:30:12.880 --> 00:30:18.640
nope, I'm gonna If I can
make this just entirely static, unauthenticated API,

427
00:30:18.839 --> 00:30:21.440
then let's do that. So that's
the route we went down, and

428
00:30:21.480 --> 00:30:26.839
it's been working pretty well for us. That's awesome. I love that.

429
00:30:27.039 --> 00:30:32.079
It also makes me think a little
bit that sometimes I might be over complicating

430
00:30:32.119 --> 00:30:34.079
my life but trying to make it
work the other way. Right, the

431
00:30:34.160 --> 00:30:37.720
more traditional i'm gonna build, I'm
gonna build an endpoint on rails and it's

432
00:30:37.759 --> 00:30:41.799
gonna give all this stuff and it's
gonna check all these things instead of just

433
00:30:41.839 --> 00:30:45.519
saying, hey, it doesn't matter
if everybody knows this, and it'll be

434
00:30:45.559 --> 00:30:51.839
way faster and it's not that big
a file, so yeah, just go

435
00:30:51.960 --> 00:30:55.319
get it. Yeah, it's funny
because I had this idea for like over

436
00:30:55.359 --> 00:31:00.440
a decade about like building essentially static
APIs where because you know, like static

437
00:31:00.519 --> 00:31:04.640
site. I've used like Jacko and
get hub pages for my page for a

438
00:31:04.680 --> 00:31:08.359
long time. I kind of like
that sort of static site building model,

439
00:31:08.400 --> 00:31:12.079
and you know, the results are
nice and super fast, and it's really

440
00:31:12.160 --> 00:31:17.319
cheap and easy to host and very
non error prone. Right once once you've

441
00:31:17.359 --> 00:31:18.920
generated the files, you're like,
well nothing can go ron no, right

442
00:31:19.440 --> 00:31:23.799
compared to like maintaining a real SAP. But yeah, so I always kind

443
00:31:23.839 --> 00:31:26.279
of liked the idea of having something
a by and I was pleased that I

444
00:31:26.319 --> 00:31:30.640
was actually finely abel to do it
because in cases where essentially you want to

445
00:31:30.640 --> 00:31:33.960
deliver the data to absolutely everyone,
the data is the same, it's not

446
00:31:34.000 --> 00:31:38.920
like user dependent on whatever, and
the data only needs updated like not very

447
00:31:38.920 --> 00:31:42.119
often, like you're not updating like
second by second from some debase, but

448
00:31:42.119 --> 00:31:45.559
you're updating it, like, you
know, a few times an hour.

449
00:31:45.440 --> 00:31:49.200
Then yeah, like this approach has
actually been really quite cool and fun,

450
00:31:49.319 --> 00:31:53.440
and yeah, and encourage others to
play it out, although play around with

451
00:31:53.480 --> 00:31:56.799
the approach, and maybe not on
gaun pages because get on Ganguru. So

452
00:31:59.000 --> 00:32:02.519
well. I can imagine though,
because I'm just thinking through maybe what I

453
00:32:02.559 --> 00:32:07.440
want to do with building an app
for the podcast network, right, and

454
00:32:08.000 --> 00:32:12.839
yeah, like ninety nine percent of
the stuff that I'm putting out there,

455
00:32:13.160 --> 00:32:16.759
it's going to be the same for
everybody, and it's all public and right,

456
00:32:16.799 --> 00:32:20.359
so I don't have to protect it
at all, and so yeah,

457
00:32:20.359 --> 00:32:23.240
why not just have a static file
out there that it can just go,

458
00:32:23.599 --> 00:32:29.240
Oh, you want the list of
podcasts here right Oh you want this podcast

459
00:32:29.279 --> 00:32:32.279
and all of its episodes here right
now. Granted, some of the podcasts

460
00:32:32.279 --> 00:32:36.480
have more than five hundred episodes at
this point, and so you might get

461
00:32:36.480 --> 00:32:39.440
a little longer a Jason file,
but still it's not terribly large, and

462
00:32:40.759 --> 00:32:45.000
you know, you start getting into
it really when you start pulling down images

463
00:32:45.119 --> 00:32:49.000
or audio files. But you know, I can put those in as URLs

464
00:32:49.039 --> 00:32:52.000
on the Jason and just make it
really wicked fast. And then it's okay.

465
00:32:52.039 --> 00:32:55.480
Now I have restricted access from memberships
and stuff like that. That's where

466
00:32:55.519 --> 00:33:00.240
I can, you know, maybe
put a check in front of it,

467
00:33:00.359 --> 00:33:05.480
but still then just have them pick
up a statically generated thing, because once

468
00:33:05.519 --> 00:33:08.319
you're authenticated, that's all the same
too. So yep, killy, I'm

469
00:33:08.359 --> 00:33:13.480
really digging this. Yeah, it's
it's been fun. I think, I

470
00:33:13.519 --> 00:33:15.880
don't know that. This is the
thing I like about working with open source

471
00:33:15.920 --> 00:33:19.359
and stuff like humbrew is that you
know, you get. I guess the

472
00:33:19.400 --> 00:33:22.400
thing I've learned in my career is
the most interesting projects are the ones often

473
00:33:22.480 --> 00:33:28.759
worth any sort of constraints, right, Like the projects would like, you

474
00:33:28.759 --> 00:33:30.039
know, take as long as you
want, you have as many people as

475
00:33:30.039 --> 00:33:32.599
you want, do it whatever you
want, in whatever language you want.

476
00:33:32.680 --> 00:33:37.680
Like they're they're often like maybe I'm
just a masacus, but I find them

477
00:33:37.680 --> 00:33:40.000
often like less fun, whereas the
fun thing was saying our humbrew as well,

478
00:33:40.039 --> 00:33:44.839
it's like you're building humbrews that you're
it's that well we we have Like

479
00:33:45.519 --> 00:33:49.079
I guess the way I describe Humbrew's
financial situation is like not enough to pay

480
00:33:49.119 --> 00:33:52.880
anyone, but too much for stickers. Right, so you have like this

481
00:33:52.039 --> 00:33:59.279
like middle ground of money, and
as a result, like it's this tricky

482
00:33:59.319 --> 00:34:00.240
thing of like, well, I
don't really want to put us in a

483
00:34:00.240 --> 00:34:05.559
situation where we're paying vast hosting bills, so let's try and figure out a

484
00:34:05.599 --> 00:34:07.920
way of doing this for free essentially, but it has to be able to

485
00:34:07.920 --> 00:34:13.519
scale to like, you know,
millions and not tens of millions of people

486
00:34:13.719 --> 00:34:17.239
like using this thing. So yeah, so like that's been a fun kind

487
00:34:17.280 --> 00:34:22.239
of comparison compared to as I say, you know, like get up dates,

488
00:34:22.239 --> 00:34:24.480
where you're scaling to many more people
than that, but you also have,

489
00:34:25.400 --> 00:34:30.920
particularly post Microft acquisition, like many
more resources you disposal in order to

490
00:34:30.440 --> 00:34:35.400
achieve those scales, and you're not
worrying quite as much about the bottom line

491
00:34:35.400 --> 00:34:39.199
as you along. Yeah. Yeah. The other thing that I can I

492
00:34:39.400 --> 00:34:45.119
just went through my head was and
this isn't Jason at XML but RSS feeds

493
00:34:45.400 --> 00:34:52.079
right Oh yeah, yeah, yep. So yeah, all right, so

494
00:34:52.159 --> 00:34:58.159
we've kind of talked through how the
repository works. And let's say that I

495
00:34:58.199 --> 00:35:00.960
decided I wanted to be build the
cl lie and it was moderately complex.

496
00:35:01.800 --> 00:35:07.559
Are there are there things that you
recommend to me as a Ruby developer as

497
00:35:07.639 --> 00:35:13.559
places to get started. I mean, the funny thing is, I wasn't

498
00:35:13.639 --> 00:35:17.679
you know, I realized this.
Maybe I don't know, a controversial take

499
00:35:17.800 --> 00:35:22.039
for the podcast, but like I
mean, nowadays, I probably wouldn't necessarily

500
00:35:22.079 --> 00:35:27.920
reach for Ruby for a CLI,
like it's it's okay for like doing doing

501
00:35:28.079 --> 00:35:30.519
you know, I still think it's
great for doing web apps. But like

502
00:35:30.559 --> 00:35:34.039
you know, I've I've been building
like a new CLI for some of the

503
00:35:34.079 --> 00:35:38.639
stuff we've been doing with work Brew, and like Go feels like a more

504
00:35:38.800 --> 00:35:44.719
I was basically weighing up between like
Go, Rust and Swift basically as like

505
00:35:45.280 --> 00:35:50.320
the Swift for that Well, yeah, I didn't tank Swift at the end

506
00:35:50.440 --> 00:35:52.599
for various reasons, but you know, I ended up going with Go,

507
00:35:52.760 --> 00:35:58.840
which I it's I don't know,
like for me, Go is just it's

508
00:35:58.920 --> 00:36:00.760
good at what it does. It's
such a boring language. I don't have

509
00:36:00.880 --> 00:36:06.440
any fun when I'm writing Go.
But you can ship a single static language.

510
00:36:06.920 --> 00:36:10.000
Yeah, and it's super fast and
for CLI's like it's like the responsiveness

511
00:36:10.039 --> 00:36:14.400
is really great. I think I
think that's the thing that maybe I'm just

512
00:36:14.400 --> 00:36:16.679
burned for like fifteen years of working
in a Ruby Cli. But like there's

513
00:36:16.719 --> 00:36:22.000
a certain amount of people will complain
about the slowness that it's like literally even

514
00:36:22.119 --> 00:36:27.440
like a Ruby interpreter spinning up and
saying hello world is like unacceptably slow to

515
00:36:27.440 --> 00:36:30.400
some people, right, And at
that level, I can't really do anything

516
00:36:30.400 --> 00:36:34.639
to make it it faster. But
I guess if you, if you are

517
00:36:34.840 --> 00:36:37.840
going down the route of almost like
really wanting to get into make it some

518
00:36:37.840 --> 00:36:39.920
sort of Ruby cli or whatever,
I guess I would just say, like,

519
00:36:42.239 --> 00:36:45.000
you know, the beauty of Ruby
is that you can start with like

520
00:36:45.039 --> 00:36:47.480
a single script, right. You
can just have a script stick the shebang

521
00:36:47.519 --> 00:36:51.639
at the top, like the for
those who don't know, that's the thing

522
00:36:51.679 --> 00:36:59.719
where it has like exclamation mark ash
like user bin anyway, like user bin

523
00:36:59.800 --> 00:37:02.480
room or whatever, and then you
can just start writing Ruby code straight away,

524
00:37:02.719 --> 00:37:07.360
right, And like that's that's how
I think is the best way to

525
00:37:07.400 --> 00:37:12.000
maybe get started with like CLIs or
whatever. It's just like rough and almost

526
00:37:12.079 --> 00:37:15.719
like reaching for some option parsing framework
or whatever. No, just go and

527
00:37:15.400 --> 00:37:21.119
just start writing some Ruby and just
read the rg V, which is the

528
00:37:21.239 --> 00:37:23.119
array of like the arguments you pass
into the script, and like just read

529
00:37:23.119 --> 00:37:29.239
that yourself and just you know,
don't don't go too fast, too quickly,

530
00:37:29.559 --> 00:37:31.519
and you'll probably have like a good
time. Because again, like when

531
00:37:31.519 --> 00:37:36.559
you're CLIs if you wanted to distribute
them to other people, like if they

532
00:37:37.280 --> 00:37:38.679
you know, if you start lying
on loads of other gems and stuff,

533
00:37:38.679 --> 00:37:42.880
then it becomes like a little bit
more of a headache to kind of distribute

534
00:37:42.920 --> 00:37:45.880
and use these things and keep them
up to date and whatever. So like,

535
00:37:45.960 --> 00:37:47.440
yeah, I think the beauty of
Ruby is like Ruby has like a

536
00:37:47.440 --> 00:37:52.440
pretty decent broad standard library you could
do a lot with like a single script,

537
00:37:52.440 --> 00:37:54.679
and even like an old version of
Ruby, like the ones that ship

538
00:37:54.719 --> 00:37:59.480
with like nec o s like there's
still you know, it's still a powerful,

539
00:37:59.840 --> 00:38:07.400
like pleasant language to work in.
So yeah, very cool. So

540
00:38:07.519 --> 00:38:13.440
yeah, so is there anything new
coming in Homebrew or yeah, I mean

541
00:38:13.480 --> 00:38:17.440
we're always working on It's funny because
people quite people ask periodically about like the

542
00:38:17.519 --> 00:38:22.920
roadmap for Homebrew and because we're essentially
i mean maybe except for me, now

543
00:38:22.239 --> 00:38:25.679
like essentially almost everyone is like a
volunteer. The room map for Hebrew is

544
00:38:25.760 --> 00:38:30.679
kind of like, well, let's
see what people want to work whatever people

545
00:38:30.719 --> 00:38:34.880
want to work on, right,
And it's like the product management on Homebrew

546
00:38:35.079 --> 00:38:40.679
kind of looks more like nerds attempting
to nerd snipe other maintainers into solving problems

547
00:38:40.679 --> 00:38:45.480
that it does like you know,
building a team and assigning them a six

548
00:38:45.519 --> 00:38:47.559
month project or whatever. So yeah, I mean, I think like a

549
00:38:47.559 --> 00:38:52.079
big thing is like performance, Like
we're continually trying to kind of eke out

550
00:38:52.519 --> 00:38:55.320
better performance where we can. And
then yeah, and I guess like I'm

551
00:38:55.320 --> 00:38:58.840
looking at it from the kind of
work Brew end as well of being like,

552
00:38:58.920 --> 00:39:04.400
okay, well, so if me
and a team of people are actually

553
00:39:04.440 --> 00:39:07.360
able to work on Homebrew full time
or like spend like a decent amount of

554
00:39:07.519 --> 00:39:12.920
our time putting into hombrew like one
of the really big impactful things in Homebrew,

555
00:39:12.960 --> 00:39:15.760
that kind of might people might look
at and say, that's just impossible

556
00:39:16.119 --> 00:39:20.239
that we could do if we have
like a paid team of people who are

557
00:39:20.239 --> 00:39:22.519
working on this stuff full time.
And I don't want to, you know,

558
00:39:22.599 --> 00:39:25.519
I don't want to be too spoilery
with that, but yeah, there's

559
00:39:25.519 --> 00:39:31.400
definitely there's definitely some stuff we're exploring
where if we see that there's interest and

560
00:39:31.480 --> 00:39:35.599
we can kind of pull it off, I think people will really say wow

561
00:39:35.639 --> 00:39:38.679
about but in the short to medium
time, I think there's more along the

562
00:39:38.760 --> 00:39:43.079
lines of yeah, just like making
Homebrew faster, more secure, and making

563
00:39:43.119 --> 00:39:46.280
the contribution process better and just trying
to do everything we do right now like

564
00:39:46.519 --> 00:39:52.280
better basically, Like I mean,
I'm a big fanic GitHub and on Homebrew

565
00:39:52.280 --> 00:39:57.000
of like when I wasn't get helped, that was like reading really really heavily

566
00:39:57.039 --> 00:40:00.719
into automation. So again, like
a lot of what we're trying to do

567
00:40:00.840 --> 00:40:04.800
on Homebrew sometimes is like we've only
got thirty people maintaining the project. But

568
00:40:04.880 --> 00:40:08.039
yeah, the throughput of like prs
we have and it's fairly ridiculous, and

569
00:40:08.079 --> 00:40:12.880
we just try and have so much
automation, leaning more and more and more

570
00:40:12.920 --> 00:40:16.079
heavily into that. And anytime you
know, I catch people doing things that

571
00:40:16.119 --> 00:40:19.400
I'm like a bot could do this, then it's like, right, I

572
00:40:19.440 --> 00:40:22.599
try and write some code and get
the humans down the human things and save

573
00:40:22.639 --> 00:40:29.119
the boat work for the bots.
So I was going to ask about work

574
00:40:29.119 --> 00:40:35.400
Brew. I'm gonna ask about in
a second, but you did mention maintainers,

575
00:40:35.800 --> 00:40:38.000
and so if somebody is like,
oh, I've got a great idea

576
00:40:38.039 --> 00:40:42.480
for Homebrew, or you know,
I use this all the time, and

577
00:40:42.480 --> 00:40:45.239
I'd like to contribute back to it, right, Is there a good way

578
00:40:45.239 --> 00:40:50.280
for people to get started with contributing? Yea, so Homebrew the best way

579
00:40:50.320 --> 00:40:52.960
to get started is like a contribution
section on the read me of the homebrew

580
00:40:53.000 --> 00:40:57.920
brew. So if you go there
then you'll or if you even just search

581
00:40:57.960 --> 00:41:00.320
for like contributing to homebrew, like
the result by results a pretty decent.

582
00:41:00.400 --> 00:41:06.119
I would say our docs are probably
like on the better end for like contribution,

583
00:41:06.760 --> 00:41:08.320
our tooling is probably pretty good.
But like I would say, like

584
00:41:08.800 --> 00:41:15.280
it's a really easy project to get
started with, and we we really try

585
00:41:15.320 --> 00:41:17.679
to kind of cheerlead the people who
want to get involved with the project.

586
00:41:17.800 --> 00:41:22.159
So like, if you're in any
doubt, just try something and we'll help

587
00:41:22.199 --> 00:41:25.639
you out, and you can mention
me by my GitHub handle or whatever if

588
00:41:25.639 --> 00:41:28.719
you say that it's your first PR
and you're struggling, and I'll try and

589
00:41:28.719 --> 00:41:30.599
do what I can to help you
and stuff like that. It's a yeah,

590
00:41:30.760 --> 00:41:34.440
as I say, I think it's
a really good project to kind of

591
00:41:34.559 --> 00:41:37.599
get started with, but as you
know, for some of us at least,

592
00:41:37.599 --> 00:41:44.639
it's also can be fairly addictive at
times, so be wary from that

593
00:41:44.719 --> 00:41:47.880
perspective as well. Yeah, all
right, So the other question I have

594
00:41:49.119 --> 00:41:51.639
then is, yeah, do you
want to talk about work Brew like what

595
00:41:51.760 --> 00:41:55.599
it is and your head and with
that, yeah, So I mean,

596
00:41:55.840 --> 00:41:59.599
as I mentioned earlier with like Homebrew, like, I've been working on humbrew

597
00:41:59.639 --> 00:42:04.599
for fifteen years and for you know, probably ten of those years, there's

598
00:42:04.639 --> 00:42:07.280
been people who have been encouraging me
at various points to oh, you know,

599
00:42:07.320 --> 00:42:10.920
you should make a company doing stuff
around humbrew, and I have been

600
00:42:12.119 --> 00:42:16.559
historically kind of down on this idea
or fairly cynical, but do when I

601
00:42:16.599 --> 00:42:20.039
mean not going to name any names, but you know, there's been various

602
00:42:20.039 --> 00:42:23.679
companies who kind of have done open
source stuff and then you know they can

603
00:42:23.719 --> 00:42:28.599
plain down the line when everyone uses
their software, but they're not making enough

604
00:42:28.639 --> 00:42:30.960
money or whatever it may be.
And right, I guess to me it's

605
00:42:31.000 --> 00:42:36.360
like open source itself is not a
business model. And also like I you

606
00:42:36.360 --> 00:42:38.599
know, I kept like you mentioned
earlier, like you've got you know,

607
00:42:38.719 --> 00:42:43.800
kids younger than Homebrew and stuff like, I also feel like who was kind

608
00:42:43.800 --> 00:42:45.000
of my first child, and I
feel quite precious of it, and I

609
00:42:45.039 --> 00:42:51.519
wouldn't want to you know, like
destroy it or whatever. So it's yeah,

610
00:42:51.559 --> 00:42:52.440
it took a while for me to
get to a place that I was

611
00:42:52.480 --> 00:42:55.360
like, yeah, actually, it
feels like a few things have come together.

612
00:42:55.480 --> 00:43:00.480
So one is like Homebrew feels I
mean even with the Roman stuff,

613
00:43:00.519 --> 00:43:02.079
Like if we'd have this conversation a
year ago or two years ago, I

614
00:43:02.119 --> 00:43:06.119
probably would have said, like more
stuff on the horizon, But it feels

615
00:43:06.159 --> 00:43:10.039
like fairly close to kind of feature
complete at this point without almost like a

616
00:43:10.039 --> 00:43:15.079
big injection of kind of effort and
stuff. But that was one part.

617
00:43:15.119 --> 00:43:17.719
The other part is that we've got
I won't go into all the boring details

618
00:43:17.760 --> 00:43:21.079
of like open source governance, but
you know, but we have an open

619
00:43:21.119 --> 00:43:24.360
collective. We have a like a
leadership committee, we have elections every year,

620
00:43:24.519 --> 00:43:28.920
We have like ways of getting involved
with the project beyond just like corn

621
00:43:29.000 --> 00:43:32.079
dogs and stuff like that. We
have money that we're using to like provide

622
00:43:32.119 --> 00:43:36.599
stipends to some maintainers and pay for
them to kind of come and meet each

623
00:43:36.639 --> 00:43:38.400
other in person and stuff. So
the project feels like it's in a really

624
00:43:38.440 --> 00:43:43.639
good, mature place, and it's
also in a place where no one party

625
00:43:43.679 --> 00:43:45.719
could ever kind of completely take over
oh Brew, even if they wanted to

626
00:43:46.360 --> 00:43:50.559
and so yeah, so, And
it's also in the backdrop of this,

627
00:43:50.639 --> 00:43:52.760
I guess, like, you know, I left GitHub last year and were

628
00:43:52.800 --> 00:43:55.960
sort of looking for a new challenge
and something new. And you know,

629
00:43:57.079 --> 00:44:00.199
again, over the last ten years, there's been various times where companies come

630
00:44:00.239 --> 00:44:02.159
and say, hey, we'd like, you know, Homebrew to do this

631
00:44:02.320 --> 00:44:07.800
or that or whatever. And essentially
what a lot of humbrew features come down

632
00:44:07.800 --> 00:44:09.400
to is, like, do the
volunteers who are mainly working in their spare

633
00:44:09.480 --> 00:44:15.159
time want to build and support this
right and for a lot of like big

634
00:44:15.280 --> 00:44:19.119
enterprise stuff at dinner Charles, if
you ever had the misfortune of reading through

635
00:44:19.159 --> 00:44:22.039
like a samle speck or something like
that before. But you know, once

636
00:44:22.320 --> 00:44:24.639
once you get into this like big
enterprise tech, like, it's often not

637
00:44:24.920 --> 00:44:28.840
very fun and it's not what we
want to spend their evenings and weekends doing.

638
00:44:29.400 --> 00:44:31.559
And I previously worked like before my
Homebrew days, and like an open

639
00:44:31.559 --> 00:44:37.880
source company back when I was a
KDE contributor and this company consulting company,

640
00:44:37.880 --> 00:44:40.119
and they hired more KD contributors than
anyone else, and I worked and I

641
00:44:40.119 --> 00:44:42.960
thought, sweet, I'm going to
be able to work on open source mods

642
00:44:42.960 --> 00:44:45.920
at the time, but I learned
pretty quickly that their open source projects were

643
00:44:45.920 --> 00:44:50.039
actually not super fun because they were
basically stuff that people would play a consulting

644
00:44:50.119 --> 00:44:52.000
company to go and like, hey, like we've got this stuff which we

645
00:44:52.039 --> 00:44:57.000
can't get anyone to do for fun, so will you do this for money?

646
00:44:57.480 --> 00:45:00.360
And then they're like okay, well
fine. So with work Brew,

647
00:45:00.599 --> 00:45:04.360
I kind of see it as being
a similar thing where what we're trying to

648
00:45:04.400 --> 00:45:06.719
do is, you know, there's
a lot of talk about sustainability and open

649
00:45:06.760 --> 00:45:09.880
source and stuff right now, and
I guess that's on my mind. I

650
00:45:09.920 --> 00:45:14.960
worked on the original team of people
who built get up Sponsors and have helped

651
00:45:15.039 --> 00:45:17.400
kind of Humbrew have that open collective, and to me, like this is

652
00:45:17.440 --> 00:45:22.800
the next almost like step in the
evolution of like what sustainability could look like

653
00:45:22.880 --> 00:45:27.719
for Humbrew is having a commercial entity
where we're trying to kind of make a

654
00:45:27.719 --> 00:45:31.920
sustainable like commercial antitee who has an
interest in making money in the Humber ecosystem,

655
00:45:32.199 --> 00:45:37.320
but not charging money directly for Humber
itself. Humber itself will is and

656
00:45:37.400 --> 00:45:40.119
will always remain like free of charge, but we're going to make Humbrew better

657
00:45:40.119 --> 00:45:45.480
by making work grew better and be
providing services to companies in the humbre ecosystem

658
00:45:45.559 --> 00:45:50.400
through our expertise and by building stuff
that tightly integrates with Humbury. So essentially,

659
00:45:50.840 --> 00:45:52.760
the version of work Brew that I
like run on my local machine today

660
00:45:52.960 --> 00:45:58.519
looks and behaves almost exactly the same
as Homebrew, except it's got a little

661
00:45:58.559 --> 00:46:01.920
coffee cup instead of a beer emerge. But it's you know, it's running

662
00:46:01.920 --> 00:46:06.159
in a different way. It's running
in a more isolated like fashion and multi

663
00:46:06.239 --> 00:46:09.480
user fashion. Right, it's like
reporting back to do fleet management, so

664
00:46:09.480 --> 00:46:15.119
someone could upgrade like if I've got
critical vulnerabilities remotely and so that people can

665
00:46:15.159 --> 00:46:19.920
see kind of oh like you've you
haven't updated in six months and we've got

666
00:46:20.079 --> 00:46:22.480
some problems with that or whatever it
may be. So yeah, So essentially

667
00:46:22.519 --> 00:46:24.760
that's what we've tried to do.
We're trying to build something that provides a

668
00:46:24.760 --> 00:46:30.159
better experience for using home brew at
work, but for most hobbyists, I

669
00:46:30.159 --> 00:46:34.320
mean, we very much have the
goal that if you in five or ten

670
00:46:34.400 --> 00:46:37.599
years and we're successful, even if
you've never heard of work Brew, even

671
00:46:37.599 --> 00:46:40.480
if you never interact with work Brew, you will look at essentially roundabout now

672
00:46:40.519 --> 00:46:45.119
as being an inflection point where Homebrew
gets really really good in the next five

673
00:46:45.199 --> 00:46:49.840
or ten years and it gets noticeably
better for everyone using it because we're able

674
00:46:49.840 --> 00:46:54.280
to kind of get involved and improve
the sustainability of the project through the commercialization

675
00:46:54.320 --> 00:47:01.480
of this part of the ecosystem.
That's cool if people want to know a

676
00:47:01.519 --> 00:47:06.920
little bit more about what's going on
with that, like do you have a

677
00:47:06.960 --> 00:47:09.679
mailing list or something, or yeah, so update somehow. Yeah, the

678
00:47:09.679 --> 00:47:13.480
best way of like getting in touch
with us, We've got a contact form

679
00:47:13.480 --> 00:47:15.519
on our website. If you got
to work through dot Com slash contact,

680
00:47:16.360 --> 00:47:21.400
then you can like send us all
your message and then we can go and

681
00:47:21.800 --> 00:47:22.920
get in touch and we'll kind of
send you emails and stuff like that.

682
00:47:22.960 --> 00:47:25.280
And you can also see if you
go to work with dot Com our demo

683
00:47:25.320 --> 00:47:30.360
of what we have in private beta
right now, which is essentially like fleet

684
00:47:30.400 --> 00:47:34.800
management for Homebrew and kind of integrated
with the MDM tools, so that basically

685
00:47:34.840 --> 00:47:39.280
like mac Adminson primarily and you know, security professional developer experience where us can

686
00:47:39.280 --> 00:47:44.840
basically get a nicer experience of using
Homebrew at work. So yeah, so

687
00:47:44.880 --> 00:47:47.519
we're recruiting like design partners for that
right now, which essentially means like people

688
00:47:47.519 --> 00:47:52.760
who will give us lots of feedback
while we make the beta kind of more

689
00:47:52.800 --> 00:47:54.599
to their requirements. So again,
if you're interested in that, best way

690
00:47:54.639 --> 00:47:59.760
is reaching out through the contact form, and if you have any thoughts equally

691
00:47:59.800 --> 00:48:00.960
as well, if it's easier,
if you're one of these people who's get

692
00:48:01.000 --> 00:48:06.159
scooped by contact forms, you can
send me an email. My email address

693
00:48:06.199 --> 00:48:08.000
is pretty easily findable on the internet, so if you do that, or

694
00:48:08.039 --> 00:48:13.320
it's just micut workbow dot com or
at brew dot sh if you want my

695
00:48:13.800 --> 00:48:20.199
open source email, awesome, all
right, Well, if people want to

696
00:48:20.199 --> 00:48:23.599
connect with you on some other level, where do they find you on the

697
00:48:23.599 --> 00:48:31.039
internet. So I'm still I'm basically
read only mainly on Twitter nowadays. I'm

698
00:48:31.320 --> 00:48:36.159
Mike McQuaid on there, but the
best place probably is I'm Mike mccaid at

699
00:48:36.159 --> 00:48:39.280
massive on dot social on like masted
on nowadays, or if you just find

700
00:48:39.280 --> 00:48:44.639
my website at Mike mcad dot com. That's basically got you know my I

701
00:48:44.719 --> 00:48:49.320
try and kind of put if I
write blog posts or like do talks,

702
00:48:49.800 --> 00:48:52.400
and all my contact information is there
and stuff as well. So yeah,

703
00:48:52.519 --> 00:48:58.039
and you'd be surprised how a few
people actually just email me to say hi

704
00:48:58.159 --> 00:49:00.480
or share their opinions. So feel
free to do that for almost anything,

705
00:49:00.480 --> 00:49:04.840
except for saying my herd Bruce broken, please fix it? In which case,

706
00:49:04.960 --> 00:49:08.039
okay, right, all right,
good deal. Well I'm gonna go

707
00:49:08.039 --> 00:49:13.400
ahead and roll us into the picks
here. Have you ever wished that you

708
00:49:13.480 --> 00:49:15.400
had a group of people that were
just as passionate about writing code as you

709
00:49:15.440 --> 00:49:19.599
are? I know I did.
I did that for most of my career.

710
00:49:19.599 --> 00:49:22.400
I'd go to the meetups, I
try and create other opportunities, and

711
00:49:22.440 --> 00:49:24.519
it was just really hard, right
the meetups. I got some of that,

712
00:49:24.599 --> 00:49:28.400
but they were only like once or
twice a month, and it was

713
00:49:28.480 --> 00:49:31.119
just really hard to find that group
of people that I connected with and really

714
00:49:31.159 --> 00:49:35.400
wanted to, you know, talk
about code a lot, right, I

715
00:49:35.400 --> 00:49:37.760
mean, I love writing code.
I think it's the best. And so

716
00:49:38.119 --> 00:49:44.960
I've decided to create this community and
create a worldwide community that we can all

717
00:49:45.000 --> 00:49:47.239
jump in and do it. So
we're going to have two workshops every week.

718
00:49:47.519 --> 00:49:51.079
One of those or two of those
every month are going to be Q

719
00:49:51.199 --> 00:49:52.960
and A calls right where you can
get on you can ask me or me

720
00:49:53.079 --> 00:49:57.360
and another expert questions. The rest
of them are going to be focused on

721
00:49:57.400 --> 00:50:01.400
different aspects of career or or things
like that. Right, So it'll go

722
00:50:01.840 --> 00:50:07.039
anywhere from like deployments and containers all
the way up to managing your four oh

723
00:50:07.079 --> 00:50:10.159
one K and negotiating your benefits package. Well, we'll cover all of it,

724
00:50:10.360 --> 00:50:14.960
okay. And then we're also going
to have meetups every month for your

725
00:50:15.000 --> 00:50:19.440
particular technology area. So we have
shows about JavaScript, React, angular view

726
00:50:19.480 --> 00:50:22.599
and so on. We're gonna have
meetups for all of those things. I'm

727
00:50:22.599 --> 00:50:24.760
going to revive the freelancer show.
We'll have one about that, right,

728
00:50:24.800 --> 00:50:29.079
so you can get started freelancing or
continue freelancing if that's where you're at.

729
00:50:29.559 --> 00:50:35.840
And I'm working on finding authors who
can actually do weekly video tutorials on some

730
00:50:36.159 --> 00:50:39.320
thing for ten minutes. This related
again to those technology areas so that you

731
00:50:39.360 --> 00:50:43.960
can stay current keep growing. So
if you're interested, go to topendevs dot

732
00:50:43.960 --> 00:50:49.599
com slash sign up and you can
get in right now for thirty nine dollars.

733
00:50:49.800 --> 00:50:52.119
When we're done, that price is
going to go up to seventy five

734
00:50:52.159 --> 00:50:58.519
dollars, and the thirty nine dollars
price gets you access to two calls per

735
00:50:58.559 --> 00:51:02.280
week. The the full price at
one hundred and fifty dollars, which is

736
00:51:02.280 --> 00:51:07.239
going to be seventy five dollars over
the next few weeks. That price is

737
00:51:07.280 --> 00:51:09.639
going to get you access to all
of the calls and all of the tutorials

738
00:51:09.679 --> 00:51:14.400
and everything else that we put out
from top Endevs, along with member pricing

739
00:51:14.880 --> 00:51:19.079
for our remote conferences that are coming
up next year. So go check it

740
00:51:19.079 --> 00:51:24.400
out topendevs dot com, slash sign
up and I we usually have the host

741
00:51:24.480 --> 00:51:29.119
go first, so I'll go first. One of the first picks I have.

742
00:51:29.519 --> 00:51:32.920
I always pick a board game when
I when I do my picks,

743
00:51:32.920 --> 00:51:38.159
and so I'm going to pick a
board game called fire Tower. And basically

744
00:51:38.199 --> 00:51:43.440
it's a it was a relatively simple
game. Let me look it up on

745
00:51:43.440 --> 00:51:46.840
board game geep real quick while I
tell you how it's played. But essentially,

746
00:51:47.519 --> 00:51:52.559
all of the players have fire towers
in the corners of the board,

747
00:51:52.400 --> 00:52:00.519
and so what you're trying to do
is you're trying to earn everybody else's tower

748
00:52:00.559 --> 00:52:07.039
down before the fire gets to and
burns your tower down. And so you

749
00:52:07.079 --> 00:52:09.719
can play two to four players.
We played it with four people. It

750
00:52:09.760 --> 00:52:14.480
was a lot of fun board game
Geek rates at a one point seven to

751
00:52:14.480 --> 00:52:19.800
seven. I tell people that it
two is kind of a reasonably complicated game.

752
00:52:19.960 --> 00:52:22.599
It's complicated to be fun, but
not so complicated that it's hard to

753
00:52:22.639 --> 00:52:24.679
pick up. And so, yeah, this is right in there at that

754
00:52:24.800 --> 00:52:29.679
level playing time, it says fifteen
to thirty minutes. I think we played

755
00:52:29.679 --> 00:52:35.519
it forty five, but it was
our first time. Yeah, ten plus

756
00:52:35.559 --> 00:52:39.400
player or ten plus on age.
I honestly think my eight year old could

757
00:52:39.400 --> 00:52:44.960
play this game rights. It's pretty
simple, and after she played it once

758
00:52:45.039 --> 00:52:47.039
or twice, she'd probably get most
of the strategies figured out. Right,

759
00:52:47.440 --> 00:52:53.719
don't have the wind blowed toward your
tower, put down the fire tokens in

760
00:52:53.760 --> 00:52:57.599
a way that gets it closer to
the other people's towers, I mean,

761
00:52:57.679 --> 00:53:04.360
right anyway. So so I'm gonna
go ahead and pick that it was a

762
00:53:04.400 --> 00:53:09.239
super fun game. Really enjoyed it. One other one that I'm gonna pick

763
00:53:09.480 --> 00:53:15.960
is we were talking about some of
the install stuff and Daniel Keho, who's

764
00:53:15.400 --> 00:53:20.400
used to be in the Ruby community
way back in the day. He has

765
00:53:20.440 --> 00:53:23.239
a website Mac dot install Dot Guide, and it walks through how to install

766
00:53:23.360 --> 00:53:29.159
like Ruby and a bunch of other
stuff, and it pretty heavily refers people

767
00:53:29.199 --> 00:53:34.719
to homebrew. So anyway, I'm
going to refer to that just as a

768
00:53:34.800 --> 00:53:44.480
resource that people can go check out. And then I had something else and

769
00:53:44.559 --> 00:53:49.599
I'm just kind of blinking on it. Anyway. The where I talked to

770
00:53:49.679 --> 00:53:54.079
Daniel most recently was when I picked
up the Railscomposer dot com domain from him,

771
00:53:54.159 --> 00:53:59.679
and so I'm working on that.
You can actually watch me build rails

772
00:53:59.679 --> 00:54:04.280
composed and all of the different rails
engines that I plan on putting together for

773
00:54:04.320 --> 00:54:13.679
that on the Rails Clips video series. So just go to topendevs dot com

774
00:54:14.079 --> 00:54:16.280
you can find it. I think
I also own railsclips dot com and I

775
00:54:16.320 --> 00:54:20.519
think that goes to the right place, so go check that out. But

776
00:54:21.719 --> 00:54:27.760
anyway, yeah, good stuff,
Mike. What do you want to pick

777
00:54:27.760 --> 00:54:31.039
on the show. Yeah, okay, I guess I will do three little

778
00:54:31.119 --> 00:54:36.280
picks. So one would be I'm
reading a book right now by a guy

779
00:54:36.280 --> 00:54:39.440
called Alistair Reynolds, and he's a
science fiction author. He's written a lot

780
00:54:39.519 --> 00:54:44.280
kind of space opera stuff. I've
written read all of his books that he's

781
00:54:44.280 --> 00:54:46.440
ever written so far, and he
released a new one a couple of months

782
00:54:46.440 --> 00:54:50.920
ago, which on eighty eight percent
of the way through called Machine Vendetta that

783
00:54:51.039 --> 00:54:54.320
you Penny Arcade talked about it,
and you probably don't want to jump straight

784
00:54:54.360 --> 00:54:59.119
into Machine Vendetta. This has been
a couple of books of preceding it in

785
00:54:59.119 --> 00:55:01.599
the series. You want to deal
with the discussion of hyper pigs in the

786
00:55:01.639 --> 00:55:07.199
first paragraph, which may throw you
off. My second recommendation would be a

787
00:55:07.239 --> 00:55:12.920
band you may or may not be
into their vibe. They're called Ale Storm

788
00:55:13.400 --> 00:55:16.199
like a storm of Beer, and
I guess you can see there's a theme

789
00:55:16.199 --> 00:55:22.960
going on. They are Scottish pirates
metal band. I'm seeing them live next

790
00:55:22.000 --> 00:55:29.440
Sunday in Scotland, but they play
internationally. My kids really like a song

791
00:55:29.559 --> 00:55:34.199
from their latest album called Pirate Party
because it has a moment with a man

792
00:55:34.280 --> 00:55:37.320
drinking from a shoe, which is
apparently very funny when you're four and six

793
00:55:37.360 --> 00:55:40.320
years old. But generally I would
not recommend most of their songs to children,

794
00:55:40.480 --> 00:55:45.679
and as they are very heavily expleted
written in some of them. But

795
00:55:45.840 --> 00:55:50.440
you, you know whatever, they
may work for you or not. And

796
00:55:50.519 --> 00:55:54.519
my final recommendation, I guess on
the theme of open source maintenance in particular

797
00:55:54.679 --> 00:56:00.559
is therapy. I've been doing therapy
intermittally since twenty two and I've something I've

798
00:56:00.599 --> 00:56:07.880
found tremendously helpful personally with all sorts
of things in work, personal life,

799
00:56:07.119 --> 00:56:15.280
my relationships with my friend's family,
kids, wife, and even on occasion

800
00:56:15.360 --> 00:56:19.360
I have sessions where I talk about
particularly difficult person I'm dealing with open source

801
00:56:19.440 --> 00:56:22.559
land in a given therapy session.
So if you're interested, I would highly

802
00:56:22.599 --> 00:56:25.639
recommend it. And I've written a
blog person on my website of like a

803
00:56:25.639 --> 00:56:29.679
step by step guide if that's your
way of doing things, of like how

804
00:56:29.719 --> 00:56:32.639
to find a therapist. So if
you're interested and that's useful to you,

805
00:56:32.679 --> 00:56:37.119
please consider doing that. Oh man, given the last few months that I've

806
00:56:37.119 --> 00:56:43.480
had, I might need that anyway. What was the name of the band

807
00:56:43.480 --> 00:56:45.920
again? And if you can put
a link into the comments, that'd be

808
00:56:45.960 --> 00:56:50.800
great. Yeah, I will drop
a link into the band let me see.

809
00:56:52.679 --> 00:56:54.840
But yeah, we'll go ahead and
wrap up here. One other thing

810
00:56:54.880 --> 00:56:58.079
I was just going to put out
there, This is the thing I forgot,

811
00:56:58.760 --> 00:57:01.880
is that my contract work has slowed
down a bit. So if you're

812
00:57:02.039 --> 00:57:06.920
looking I'm either looking for a full
time job or a contract perfer contract.

813
00:57:06.920 --> 00:57:10.280
But you know, if you've got
an interesting set of problems and you're going

814
00:57:10.320 --> 00:57:13.920
to pay me well to fix them, then I am happy to consider full

815
00:57:13.960 --> 00:57:17.280
time work. You can just email
me Chuck at topendevth dot com. All

816
00:57:17.360 --> 00:57:24.039
right, thanks for coming, Mike, This was really really interesting. Thanks

817
00:57:24.039 --> 00:57:28.039
for having me, Chuck, and
have a good rest today everyone. Yeah

818
00:57:28.119 --> 00:57:32.519
you too, max out everybody.

