WEBVTT

1
00:00:04.839 --> 00:00:09.240
Hey, folks, welcome to another
episode of the Ruby Rogues podcast. This

2
00:00:09.359 --> 00:00:11.839
week, I'm your host, Charles
max Wood, and I am talking to

3
00:00:12.199 --> 00:00:16.920
Elliott Winkler. Elliott, Now,
do you want to introduce yourself real quick?

4
00:00:17.000 --> 00:00:20.719
Let people know who you are and
why are we talking? Sure?

5
00:00:20.760 --> 00:00:24.640
I can? Yeah, Yeah,
my name is Elliott. I guess I've

6
00:00:24.640 --> 00:00:30.559
been I don't know, doing doing
programming stuff, turn abub stuff for gosh,

7
00:00:30.600 --> 00:00:34.560
I don't know, like fifteen years
at least, since I was in

8
00:00:34.679 --> 00:00:38.719
high school, I guess, really
so, and yeah, I worked.

9
00:00:38.880 --> 00:00:47.039
I worked at different consultancies and product
companies, you know, doing doing wreading

10
00:00:47.119 --> 00:00:50.880
Ruby mainly in the past, but
also like as a I don't know,

11
00:00:50.920 --> 00:00:56.479
a few years ago kind of writing
more like uh diavascript typescript that kind of

12
00:00:56.479 --> 00:01:00.600
stuff, okay, but by kind
of just doing full STUF in general,

13
00:01:00.759 --> 00:01:06.120
so uh huh so yeah, and
then also maintaining some open source libraries on

14
00:01:06.159 --> 00:01:11.359
the side A good deal. Yeah. I think we got this lined up

15
00:01:11.359 --> 00:01:15.640
because typically what I do is I
have a virtual assistant that I'm like,

16
00:01:15.640 --> 00:01:18.719
hey, projects like this, So
you know, if people are watching on

17
00:01:18.719 --> 00:01:22.640
the live stream, it says should
a matchers, you know, we'll probably

18
00:01:22.640 --> 00:01:26.920
go into a few things here,
but yeah, so I probably handed off

19
00:01:26.959 --> 00:01:27.959
and said, hey, I want
someone to talk about should A matcher,

20
00:01:29.000 --> 00:01:33.760
So we'll probably go into that.
But you know, yeah, it looks

21
00:01:33.799 --> 00:01:37.079
like you're maintaining a couple of other
open source libraries. I think we're also

22
00:01:37.120 --> 00:01:38.680
interesting to get into, and so
we'll just kind of see where this goes.

23
00:01:38.719 --> 00:01:42.519
And anyway, it's it's always interesting
to see where people are at.

24
00:01:42.599 --> 00:01:47.959
So, yeah, why did you
start us off with just how you got

25
00:01:48.120 --> 00:01:52.120
into working on some of these projects
like SHOULDA or you also mentioned super diff

26
00:01:52.599 --> 00:01:56.159
Yeah, yeah, sure, yes, I can start with SHOULDA. Yeah,

27
00:01:56.200 --> 00:02:04.519
so I worked at thought Bot,
I think between two thousand and thirteen

28
00:02:04.799 --> 00:02:09.680
and twenty sixteen. There we got
it's a little while back, but but

29
00:02:09.680 --> 00:02:14.159
when I was but when I joined, you know, one of the things

30
00:02:14.159 --> 00:02:17.919
that they had and they might have
that they might still have this now,

31
00:02:17.960 --> 00:02:23.960
but they kind of had like a
twenty percent time sort of similar like how

32
00:02:23.000 --> 00:02:25.159
Google has or maybe they used to
have. I don't know if they still

33
00:02:25.199 --> 00:02:30.759
have that now, but but yeah, every every I guess every other friday,

34
00:02:32.520 --> 00:02:37.360
we would you know, get a
chance to work on something that was

35
00:02:37.400 --> 00:02:43.360
valuable to the company. So so
I saw that we had developed should A

36
00:02:43.919 --> 00:02:47.560
should have matters, should A context, those kind of this kind of triumph

37
00:02:47.960 --> 00:02:53.439
fire ate of of gems there.
So yeah, that was interesting to me.

38
00:02:53.520 --> 00:02:58.719
So and I wanted to get more
involved in open source. So I

39
00:02:58.800 --> 00:03:05.280
just began submitting poor requests, you
know. And yeah, at the time,

40
00:03:05.280 --> 00:03:08.719
I think it was maintained by by
two or three people, and they

41
00:03:08.759 --> 00:03:13.039
were you know, they were open
to the to the contributions, and then

42
00:03:14.199 --> 00:03:15.879
you know, they didn't really want
to take it over anymore. I think

43
00:03:15.879 --> 00:03:17.159
they kind of were interested other things. So I was I volunteer, and

44
00:03:17.199 --> 00:03:22.280
I was like, okay, I'll
take this over. And so I,

45
00:03:22.360 --> 00:03:25.560
you know, it just began kind
of making more changes, responding to people

46
00:03:27.000 --> 00:03:31.439
you know that were uh, submitted
bug reports or whatever. And yeah,

47
00:03:31.479 --> 00:03:36.159
and then I just kind of actually
ended up maintaining that for quite a while,

48
00:03:36.240 --> 00:03:40.080
like even after I left that bot, probably you know, five or

49
00:03:40.120 --> 00:03:45.719
so years after that or even longer, I'm not sure. I kept maintaining

50
00:03:45.719 --> 00:03:49.719
it just because it was just a
fun thing to work on. Yep.

51
00:03:49.840 --> 00:03:53.319
Cool. So for those that aren't
familiar with it, should A matchers just

52
00:03:53.360 --> 00:04:00.360
give you a convenient syntax for asserting
things are the way you want them to

53
00:04:00.400 --> 00:04:06.319
be right, and it's usually a
something should something else. And so anyway,

54
00:04:06.360 --> 00:04:10.039
that's kind of where the name comes
from. Is that a fair summary

55
00:04:10.080 --> 00:04:14.800
you think? Or yeah, no, I can. Yeah, So trying

56
00:04:14.800 --> 00:04:17.000
to think about the history a little
bit of the project. So I think

57
00:04:18.160 --> 00:04:21.319
initially it was just our respect only, but I think now it was both.

58
00:04:21.720 --> 00:04:25.439
It does. But well I think
I think even initially it was it

59
00:04:25.480 --> 00:04:28.240
was test unit. I want to
say, really, yeah, there was

60
00:04:28.279 --> 00:04:30.439
a time so when I first joined
thought but I think they were like going

61
00:04:30.439 --> 00:04:33.480
through a transition period where they were
they were transitioning or maybe they had just

62
00:04:33.519 --> 00:04:41.839
transitioned from Testing unit to prospects okay
and so so these and so they so

63
00:04:41.879 --> 00:04:44.759
it started out with with should uh. I think that was like the original

64
00:04:44.800 --> 00:04:47.959
gym that came out and it was
a way and so and and you know

65
00:04:48.040 --> 00:04:53.000
for for people to use testing it. You know it's like now they have

66
00:04:53.120 --> 00:04:57.040
well now, well, I say, now it's been a while. It's

67
00:04:57.040 --> 00:04:59.959
been it's been seven years, many
years, but you know they have like

68
00:05:00.040 --> 00:05:02.639
test back and so you can write
your tests just similar to respect. But

69
00:05:02.680 --> 00:05:06.920
I mean, but I but back
then I believe that is in Texas even

70
00:05:06.959 --> 00:05:11.240
new or maybe hadn't come out yet. So so you know, people thought

71
00:05:11.240 --> 00:05:14.959
about were like, what can we
do to improve test units? So they

72
00:05:14.959 --> 00:05:19.360
made kind of a syntax on top
of test unit and so you could and

73
00:05:19.360 --> 00:05:24.199
and so you could you could write
your tests kind of in a more uh

74
00:05:24.839 --> 00:05:29.839
expressive way. And then and so
that that's a macros. So it's like

75
00:05:29.879 --> 00:05:32.160
you could you could certainly, you
know, you could have your contexts.

76
00:05:33.240 --> 00:05:38.000
Uh, you know, you could
have your IT blocks. But then you

77
00:05:38.000 --> 00:05:42.839
can also you could also define define
some macros and so you could say,

78
00:05:43.000 --> 00:05:46.839
you know, should validate presence.
It's been a while, I'll have to

79
00:05:46.839 --> 00:05:48.279
look at the right, but I
believe, yeah, I believe that they

80
00:05:48.279 --> 00:05:54.839
would just define its like class methods
within within like the test unit class or

81
00:05:54.879 --> 00:05:57.800
something like that. Then within your
test class, I should say, uh

82
00:05:57.839 --> 00:06:00.480
huh. And then later on ours
came out and there and and so they

83
00:06:00.480 --> 00:06:04.399
started transitioning those two arspect matchers,
and so they kind of broke apart,

84
00:06:04.560 --> 00:06:11.680
like the context part that was adding
the syntax on top of and then that

85
00:06:11.720 --> 00:06:16.600
should and then the matchers that were
first I think designed to work with ourspect

86
00:06:16.639 --> 00:06:23.000
and then I think we're added like
support was added to also use them in

87
00:06:23.079 --> 00:06:28.480
testing it as well. And so
yeah, so the matchers were added,

88
00:06:28.480 --> 00:06:30.800
I think because they wanted to,
you know, they wanted a way to

89
00:06:32.120 --> 00:06:36.680
you know, we want we wanted
a way to just verify that associations work

90
00:06:36.720 --> 00:06:41.199
correctly, validations work correctly, you
know, because all all the code you're

91
00:06:41.199 --> 00:06:45.920
adding to that, you're like,
you know, when you add a validation

92
00:06:46.000 --> 00:06:51.040
to a model, Yes, you're
using RAILS and you and you know RAILS

93
00:06:51.079 --> 00:06:55.800
gives you these nice ways DSL doing
that obviously, right, code you're adding

94
00:06:55.839 --> 00:06:59.879
to the model, like you need
to test that code because some people have

95
00:07:00.040 --> 00:07:02.399
said, oh, well aren't you
testing rails, Like when you when you're

96
00:07:02.439 --> 00:07:08.040
testing with these associations are validations and
it's like, I mean, in some

97
00:07:08.079 --> 00:07:12.199
ways it is a layer on top
of that, but also like you're the

98
00:07:12.199 --> 00:07:15.120
code you're adding is your code,
that's that's kind of the custom to your

99
00:07:15.319 --> 00:07:17.360
your application, and so you need
to test that. I so, and

100
00:07:17.399 --> 00:07:21.639
so it was kind of designed to
fill in this gap right in a way

101
00:07:21.720 --> 00:07:26.319
that that mimicked the syntax. So
it's like you know, if you go

102
00:07:26.399 --> 00:07:30.959
and add you know, belongs to
food or whatever, you know, to

103
00:07:31.040 --> 00:07:36.959
your U to your model or you
know, has many whatevers, then the

104
00:07:36.959 --> 00:07:42.600
the corresponding test looks similar, so
that you can kind of just easy.

105
00:07:42.639 --> 00:07:46.720
It's kind of easy to translate that
a long description there, but but yeah,

106
00:07:46.920 --> 00:07:51.040
no, but it makes sense.
Yeah. Well, and like on

107
00:07:51.079 --> 00:07:55.199
some of the code that I've been
writing lately, I wrote some code around

108
00:07:55.199 --> 00:07:59.040
the validations. I didn't use show
to matches, right, and so when

109
00:07:59.079 --> 00:08:01.720
I when I pulled it in,
it was okay, create a model with

110
00:08:01.839 --> 00:08:05.600
this, or you know, maybe
I'm using another bought project factory bot,

111
00:08:07.439 --> 00:08:09.839
right, and so maybe I use
the factory to generate it, right.

112
00:08:11.319 --> 00:08:15.560
And so then I'm testing the validations
and yeah, you know, I have

113
00:08:15.680 --> 00:08:20.920
to set up the model and then
you know assert you know, model thought

114
00:08:20.000 --> 00:08:24.680
valid, question mark, and I
have to do that over and over again

115
00:08:24.759 --> 00:08:28.600
as I kind of moved through things, and so yeah, it's a convenient

116
00:08:28.639 --> 00:08:31.000
way, you know. I came
back to it and I was like,

117
00:08:31.000 --> 00:08:33.519
oh, this is kind of nice. I should be using it, but

118
00:08:33.519 --> 00:08:37.600
I'm not. And so that was
pretty convenient. But the other thing is

119
00:08:37.600 --> 00:08:41.600
is, especially on validations, so
most of the associations are pretty straightforward,

120
00:08:41.639 --> 00:08:45.919
right. It either has it or
it doesn't or has many of them or

121
00:08:45.919 --> 00:08:50.399
it doesn't right, and so you
know, testing that that exists. Yeah,

122
00:08:50.480 --> 00:08:54.679
maybe that's not super helpful. I
don't know. You get into scopes

123
00:08:54.720 --> 00:08:58.120
and then, you know, then
it starts to get a little bit more

124
00:08:58.120 --> 00:09:03.759
involved there with your associations, but
with the validations. Some of the validations

125
00:09:03.840 --> 00:09:09.279
like presence or you know, things
like that, yeah, you know,

126
00:09:09.840 --> 00:09:13.240
the name is either blank or it's
not. But when you start getting into

127
00:09:13.759 --> 00:09:20.960
email formats or password length or password
composition or password confirmation or things like that,

128
00:09:22.039 --> 00:09:24.799
right, then all of a sudden, the validation is a little bit

129
00:09:24.799 --> 00:09:31.120
more involved. And so you know, having some of these matches kind of

130
00:09:31.120 --> 00:09:33.399
give you a convenient way of saying, no, I should match this,

131
00:09:33.919 --> 00:09:37.960
Yeah exactly, Yeah, I think
most of I think, if anything,

132
00:09:37.960 --> 00:09:39.720
it just help. It just gets
you to start thinking about them. It's

133
00:09:39.759 --> 00:09:45.480
like, even if you have to
kind of drop down to a lower level,

134
00:09:46.279 --> 00:09:48.840
right and if you have to test
the validation yourself, it gets you

135
00:09:48.879 --> 00:09:52.000
to think about, like, oh, I should be testing these, And

136
00:09:52.080 --> 00:09:54.360
even if you do have to drop
down, I mean, yes, we

137
00:09:54.480 --> 00:10:00.600
have you know, there are matchers
for testing you know, basic about the

138
00:10:00.679 --> 00:10:03.480
validations that are built in the rails. But there's also Yeah, you mentioned,

139
00:10:03.720 --> 00:10:05.720
you know, email email for writing. Let's say, you know,

140
00:10:05.840 --> 00:10:09.600
so let's say that you wanted to
test that, you know, as long

141
00:10:09.639 --> 00:10:13.879
as there's an AD sign or something
in the email address, then this email

142
00:10:13.879 --> 00:10:20.080
address should pass validation. Right,
There's a there's a matcher called allow value

143
00:10:20.399 --> 00:10:24.879
that's in should have matches and so
that that kind of lets you be a

144
00:10:24.919 --> 00:10:31.159
little more flexible, I guess with
how your how you're testing. Yep,

145
00:10:31.240 --> 00:10:37.960
absolutely, but yeah, it's kind
of a convenient anyway. It's a convenient

146
00:10:37.960 --> 00:10:41.039
way to kind of get at least
the fundamentals tested through so that you know

147
00:10:41.080 --> 00:10:46.519
what it's doing. Are there other
things that the should the matchers do besides

148
00:10:46.679 --> 00:10:52.960
sort of the associations and validations.
Yeah, so let's see. Yeah,

149
00:10:52.960 --> 00:10:58.240
so there's there's also matchers that relate
to controllers. Oh right, yep,

150
00:10:58.320 --> 00:11:03.320
so you can you can test if
you're writing controller trusts. I'm not you

151
00:11:03.360 --> 00:11:07.799
know, uh, some people write
them, some people don't. But you

152
00:11:07.840 --> 00:11:09.279
know, if you if you do, then you know, you can test

153
00:11:09.480 --> 00:11:16.519
things. You can you can verify
you know, things that like you can

154
00:11:16.559 --> 00:11:20.720
test that the response status is a
certain thing. You can test that like

155
00:11:20.840 --> 00:11:24.320
maybe maybe you want to double check
that certain values get added to the session

156
00:11:24.440 --> 00:11:31.080
or whatever like that, you can
write that you can also test, uh,

157
00:11:31.840 --> 00:11:37.639
double check routes as well, So
that is that's using so a lot

158
00:11:37.639 --> 00:11:41.759
of these matchers you just kind of
built things that are built into rails anyway.

159
00:11:41.879 --> 00:11:48.159
So so so the routes the routes
is no exception there. But yeah,

160
00:11:48.200 --> 00:11:50.720
that's just double checking that certain routes
are defined and that kind of thing.

161
00:11:50.919 --> 00:11:56.039
So yeah, cool. Yeah,
it also is outlined and the if

162
00:11:56.080 --> 00:12:00.799
you look at the read me for
showing yeah, there's there's a section on

163
00:12:01.000 --> 00:12:07.320
kind of what h the list of
all the matches that are contained m yep.

164
00:12:09.279 --> 00:12:13.519
So we also mentioned super diff and
I'm going to ask you, Yeah,

165
00:12:13.600 --> 00:12:16.559
let's go into super Differ for a
minute, and then I kind of

166
00:12:16.559 --> 00:12:20.240
want to talk about how these and
maybe some of the other gems that you've

167
00:12:20.320 --> 00:12:24.559
used kind of inform your philosophy on
what you test and what you don't how

168
00:12:24.600 --> 00:12:30.919
you test it. Sure, sure, so super diff So what's kind of

169
00:12:30.919 --> 00:12:35.879
the deal there. Yeah, so
so this came out of, Yeah,

170
00:12:35.919 --> 00:12:37.720
it's interesting that you mentioned testing,
because this does relate to that for sure.

171
00:12:37.759 --> 00:12:43.200
So this kind of came out of
some I guess frustrations I had with

172
00:12:43.840 --> 00:12:52.159
testing API responses specifically. So you
know, let's say that you have some

173
00:12:52.559 --> 00:12:58.360
code that is that is making it, yeah, making any API requests,

174
00:13:00.039 --> 00:13:05.279
and you just want to double check
that the response that comes back is a

175
00:13:05.320 --> 00:13:09.519
certain thing. So you can do
that, but the response may be very

176
00:13:09.600 --> 00:13:15.240
large, and you know, our
spect does give you a way like if

177
00:13:15.240 --> 00:13:18.440
you use what I guess whatever matter
you use, but you could use equal

178
00:13:18.519 --> 00:13:24.080
or whatever. It does give you
a representation I guess a little bit of

179
00:13:24.080 --> 00:13:28.000
of like what's different between what you
what you gave and what was actually the

180
00:13:28.039 --> 00:13:33.600
real API response. But it's not
very easy to see. I think I

181
00:13:33.600 --> 00:13:37.840
think they just use a naive algorithm
there to just convert. If I'm not

182
00:13:37.879 --> 00:13:41.720
mistaken, I think they convert the
the object into a string or something and

183
00:13:41.759 --> 00:13:48.000
just do a simple string dift or
something like that, right, and yeah,

184
00:13:48.039 --> 00:13:50.320
and so I just I just found, you know, just kind of

185
00:13:50.320 --> 00:13:52.279
frustrating. Now is I had to
spend some time looking through that dip to

186
00:13:52.320 --> 00:13:58.600
see or you know, what what
you might do is like spit out the

187
00:13:58.440 --> 00:14:03.159
object and and then you visually compare
it yourself. Just too a lot of

188
00:14:03.159 --> 00:14:09.679
time. So so I actually posted
a tweet I think in twenty eleven.

189
00:14:09.240 --> 00:14:11.840
I just kind of posted it on
Twitter and I was like, you know,

190
00:14:13.759 --> 00:14:16.559
you know, there should be a
way to to do that. I

191
00:14:16.600 --> 00:14:18.759
wish I could actually bring up the
original tweet. I didn't. I didn't

192
00:14:18.759 --> 00:14:22.120
look to that well in the in
the in the well, but yeah,

193
00:14:22.159 --> 00:14:28.559
I just kind of posted on Twitter. And then I think David from from

194
00:14:28.559 --> 00:14:33.879
ourspect he he he kind of posted
a reply to that or retweeted it or

195
00:14:33.919 --> 00:14:37.360
something like that, and so I
was like, oh, that's interesting,

196
00:14:37.399 --> 00:14:43.879
you know, he noticed, you
noticed what I said, and so but

197
00:14:45.000 --> 00:14:46.720
so I kind of sat on that
for a bit and I was thinking about

198
00:14:46.720 --> 00:14:48.480
like how should I do this?
And I think I made it even like

199
00:14:48.519 --> 00:14:54.519
a prototype or something, and it
didn't quite work well and so so yeah,

200
00:14:54.639 --> 00:14:56.559
so I kind of didn't know what
to do with it, and then

201
00:14:56.559 --> 00:15:01.600
I revisited it a few years later, I think, and thought of a

202
00:15:01.600 --> 00:15:07.679
new design for how for how that
should work and so yeah, so the

203
00:15:07.720 --> 00:15:11.960
way that it works now is it
will it will compute like an intelligent diff

204
00:15:11.200 --> 00:15:18.799
of the differences between two objects two
data structures, so they could be hashes

205
00:15:18.919 --> 00:15:24.240
they could be arraysed, they could
be actual objects themselves. And then it

206
00:15:24.279 --> 00:15:28.320
gives you a diff and it and
it descends recursively into the into the data

207
00:15:28.320 --> 00:15:31.120
structure. So it knows like if
you're comparing two objects, it knows like,

208
00:15:31.200 --> 00:15:35.919
okay, and and the keys and
the keys are the same, sorry,

209
00:15:35.960 --> 00:15:39.720
two hashes and the keys are the
same. Then you know, it

210
00:15:39.759 --> 00:15:43.519
can see that, and I can
tell you, okay, well the values

211
00:15:43.559 --> 00:15:46.759
are different in this way. Or
if it's an array, let's say that

212
00:15:46.799 --> 00:15:48.720
you're comparing it, it knows,
okay, you've just shifted these values around

213
00:15:48.840 --> 00:15:54.039
or you know, whatever happens to
me. And there's and there's specific algorithms

214
00:15:54.039 --> 00:15:58.879
for differ for certain kinds of objects. And then you can customize that the

215
00:15:58.919 --> 00:16:00.919
diffing algorithm, you know, if
you have a you know, if you

216
00:16:00.919 --> 00:16:07.360
have your own object or whatever.
So yeah, so that way, so

217
00:16:07.399 --> 00:16:10.279
that yeah, So that that ended
up helping a lot with with with this

218
00:16:10.320 --> 00:16:12.320
problem that I had with the A
P A with with comparing the API responses,

219
00:16:12.360 --> 00:16:18.519
because it will it's it was able
to highlight, you know, only

220
00:16:18.559 --> 00:16:22.000
the differences that I that I cared
about in the in the in the expected

221
00:16:22.080 --> 00:16:25.879
versus the actual data and helped me
kind of narrow down what I needed to

222
00:16:25.919 --> 00:16:27.399
change or what was wrong with my
test or whatever whatever the case be.

223
00:16:29.399 --> 00:16:36.960
Right, cool, So how does
how does all of this kind of come

224
00:16:37.000 --> 00:16:44.039
together to inform how you test stuff? Yeah? I mean did you want

225
00:16:44.039 --> 00:16:48.000
to just know like kind of how
like what's my approach to testing? Or

226
00:16:48.399 --> 00:16:51.200
yeah, yeah, go ahead and
start there and then yeah, do you

227
00:16:51.279 --> 00:16:56.840
actually use these in your own day
to day things? Yeah? I mean

228
00:16:57.240 --> 00:17:02.120
so, I guess, yeah,
I mean when it comes to testing.

229
00:17:02.759 --> 00:17:06.799
Yeah, so, like definitely on
every Ruby project I've worked on, like

230
00:17:06.880 --> 00:17:11.599
I've I've always added this gym because
because you know, even if it's even

231
00:17:11.599 --> 00:17:15.440
if even if I'm not adding working
with API responses, because it just helps

232
00:17:15.519 --> 00:17:22.599
it just helps to know, like
right what it helps to come of meet

233
00:17:22.960 --> 00:17:26.200
helped me to write test faster,
I guess in a way because I don't

234
00:17:26.200 --> 00:17:30.559
have to spend so much time figuring
out you know, what what the uh

235
00:17:32.039 --> 00:17:36.119
what's wrong with the tests or what's
wrong with the code. But yeah,

236
00:17:36.319 --> 00:17:40.440
in terms of you know, testing
in general, I mean I I I

237
00:17:40.440 --> 00:17:42.359
write tests. I like tests.
You know, sometimes there are pains,

238
00:17:42.440 --> 00:17:51.039
right, but they are very useful, you know, It's one of those

239
00:17:51.039 --> 00:17:55.079
things where I don't know, like
and sometimes I'll write the test first and

240
00:17:55.119 --> 00:17:59.279
sometimes I won't, kind of depending
on on the on the problem there.

241
00:18:00.599 --> 00:18:03.880
Sometimes I kind of like to do
it the more exploratory thing and then kind

242
00:18:03.880 --> 00:18:10.559
of come back and write test later, right. But but for the most

243
00:18:10.559 --> 00:18:15.799
case, for the most part,
I you know, I tend to write

244
00:18:15.799 --> 00:18:19.079
my code and write my tests kind
of at the same time. And and

245
00:18:19.160 --> 00:18:23.880
also I tend to make my pieces
of code small so that writing reading the

246
00:18:23.920 --> 00:18:30.079
test for those pieces, you know, is easy as well. So I

247
00:18:30.240 --> 00:18:33.079
yeah, I guess I could go
into more detail about like other other aspects,

248
00:18:33.119 --> 00:18:37.200
but I guess that's kind of like
my general approach to testing, at

249
00:18:37.240 --> 00:18:40.920
least at least unit testing. I
mean, there's other kinds of testing as

250
00:18:40.920 --> 00:18:48.640
well. But yeah, cool,
So you said that these days you're kind

251
00:18:48.640 --> 00:18:55.119
of working more in the typescript front
end land as opposed to the ruby and

252
00:18:55.480 --> 00:18:59.160
rails and back end land. So
so yeah, so what what's kind of

253
00:18:59.160 --> 00:19:03.720
the story there was? What's your
history with all that? Yeah, I

254
00:19:03.720 --> 00:19:10.880
mean I've always been interested in in
javascripts anyway, and you know, or

255
00:19:10.920 --> 00:19:15.880
all things front and I should say
I never really shied away from you know,

256
00:19:15.200 --> 00:19:22.599
travascript, CSS all that stuff.
So I always enjoyed writing that and

257
00:19:22.720 --> 00:19:30.519
you know, with with with with
JavaScript and type script in general. Yeah,

258
00:19:30.519 --> 00:19:33.680
I guess in past jobs, I
never really you know, I was,

259
00:19:34.039 --> 00:19:37.839
yeah, I was kind of doing
mixed I guess of of JavaScript and

260
00:19:37.000 --> 00:19:44.319
Ruby. And then yeah, this
this this job I work out now.

261
00:19:45.279 --> 00:19:49.000
So I worked for a company called
meta Mask. They're there, they're in

262
00:19:49.000 --> 00:19:52.839
the crypto space. But I'm not
a you know, I'm not a crypto.

263
00:19:52.880 --> 00:19:57.440
I'm not here to shield crypto or
anything like that. But but I

264
00:19:57.480 --> 00:20:00.640
think I used them. At one
point, I had a browser plug in

265
00:20:00.920 --> 00:20:04.440
for a wallet or something I can't
remember. Yeah, yeah, it's yeah,

266
00:20:04.440 --> 00:20:07.839
it's it's a it's a well,
yeah exactly, that's what it is.

267
00:20:07.279 --> 00:20:11.519
It's a browser plug in for a
while. And yeah, and so

268
00:20:11.680 --> 00:20:18.440
that's all written in JavaScript. So
that's when that's been interesting because it's just

269
00:20:18.519 --> 00:20:21.440
you know, it's just it's a
whole in the world, you know,

270
00:20:21.480 --> 00:20:30.359
different different ecosystem there, and and
I mean the languages are have similar enough

271
00:20:30.400 --> 00:20:33.720
things to where the transition from you
know, from Ruby to JavaScript isn't isn't

272
00:20:33.759 --> 00:20:38.720
so bad. There are some slightly
different names for things. But but for

273
00:20:38.759 --> 00:20:42.119
the most part, that's it's.
It's it's. I found it pretty easy

274
00:20:44.440 --> 00:20:47.279
to kind of go back, go
back and forth, you know if I

275
00:20:47.319 --> 00:20:52.400
need to. So yeah, Well, though on occasion, you know,

276
00:20:52.039 --> 00:20:56.279
if I work on something and Ruby
on the side, I might get you

277
00:20:56.279 --> 00:20:59.920
know, confused where it's like,
let's say that you want to take a

278
00:21:00.119 --> 00:21:04.559
uh that's say that you want to
convert something to Jason so right, you

279
00:21:04.559 --> 00:21:08.079
know Ruby, that's Chase on dot
generate, but in shopscripts Chason dot string

280
00:21:08.160 --> 00:21:15.720
if I So, sometimes I'm mixed, right, but yeah, so yeah,

281
00:21:15.720 --> 00:21:19.319
I mean, I mean these days
I pretty much code in uh in

282
00:21:19.480 --> 00:21:22.720
typescript for my jobs. I don't
do much Ruby, but I mean I

283
00:21:22.759 --> 00:21:26.920
still I still like writing Ruby,
so I think it's a nice language.

284
00:21:29.119 --> 00:21:32.359
Yeah. So, and I still
use some some for my side projects.

285
00:21:32.799 --> 00:21:36.839
Gotcha. So it looks like you're
still maintaining some open source in Ruby.

286
00:21:37.359 --> 00:21:41.519
So how how does that balance out, I guess in your life and your

287
00:21:41.519 --> 00:21:45.880
career and what is it like,
I guess if it's not your primary language

288
00:21:45.920 --> 00:21:51.440
these days, Yeah, I mean, I guess, I guess these days.

289
00:21:51.480 --> 00:21:53.359
Yeah, these days it's just like
you know, I I work on

290
00:21:57.279 --> 00:22:00.440
Well, I still you know,
I still want to I still want to

291
00:22:00.480 --> 00:22:00.839
keep it up for sure. Right, It's like, you know, it's

292
00:22:00.839 --> 00:22:04.640
still a language I find useful,
so I don't want to I don't want

293
00:22:04.680 --> 00:22:10.039
to forget how to use it.
I'm definitely not looking to like kind of

294
00:22:11.200 --> 00:22:18.200
put it aside or anything like that. And so yeah, I still I

295
00:22:18.279 --> 00:22:29.960
still, I guess maintain side things. Yeah, I don't know, it's

296
00:22:29.960 --> 00:22:37.519
still something that I enjoy using.
I guess cool. Was there anything else

297
00:22:37.559 --> 00:22:45.279
you wanted to go into on the
on the show or yeah, I don't

298
00:22:45.279 --> 00:22:51.400
know. I mean, I guess
nothing. I guess nothing can come to

299
00:22:51.440 --> 00:22:56.640
mind from myself. But yeah,
I don't know if there's any other topics

300
00:22:56.640 --> 00:23:02.240
that you wanted to and not on
my list. So yeah, the way

301
00:23:02.279 --> 00:23:03.799
we kind of wrap the show up
as we do picks. I don't know

302
00:23:03.799 --> 00:23:07.880
if you're familiar with picks, but
we just shout out about stuff we like.

303
00:23:07.000 --> 00:23:11.480
So I'm gonna throw out a few
picks and then you can go ahead

304
00:23:11.480 --> 00:23:15.160
and do the same, and then
we'll just wrap it up. The first

305
00:23:15.200 --> 00:23:18.319
pick that I'm going to throw out, I always do a board game pick

306
00:23:18.480 --> 00:23:21.680
or in this case of card game. And this is a card game that

307
00:23:21.759 --> 00:23:26.359
I play with my kids, specifically
my youngest daughter. She's eight and you

308
00:23:26.400 --> 00:23:33.079
know, and so we she's starting
to get into the more involved games.

309
00:23:33.119 --> 00:23:34.880
But one game that we've played with
her for the last few years that we

310
00:23:34.920 --> 00:23:38.440
got for her for Christmas when I
think she was six, it's called Sleeping

311
00:23:38.519 --> 00:23:41.920
Queens two. Now there's a Sleeping
Queens and then there's Sleeping Queens two,

312
00:23:42.000 --> 00:23:47.119
right, So in Sleeping Queens,
you're trying to get kings and the kings

313
00:23:47.160 --> 00:23:51.799
go and you know, wake up
the queens and rescue them. In Sleeping

314
00:23:51.839 --> 00:23:53.279
Queens, too, it's the other
way around. You're getting queens that are

315
00:23:53.319 --> 00:23:59.640
now rescuing the kings, and you
know, the different decks have different cards,

316
00:23:59.880 --> 00:24:03.759
like to steal cards from other players, or put queens back to sleep

317
00:24:03.839 --> 00:24:07.200
or put kings back to sleep and
things like that. So Sleeping Queens is

318
00:24:07.240 --> 00:24:12.079
a little simpler than Sleeping Queens too, but not terribly. You know,

319
00:24:12.119 --> 00:24:18.680
they're both pretty approachable for kids,
I think they say they're eight eight years

320
00:24:18.680 --> 00:24:21.799
plus. But we were playing it
with her at you know, six or

321
00:24:21.839 --> 00:24:26.880
whatever, and she'd get this cackle
every time she'd steal a king or whatever.

322
00:24:26.960 --> 00:24:32.640
But anyway, board game Geek has
it rated as a one point five.

323
00:24:33.920 --> 00:24:38.079
Now, as I generally point out, a lot of your kind of

324
00:24:38.559 --> 00:24:48.200
complicated enough to be interesting but approachable
for the general not Deep Gamer is about

325
00:24:48.200 --> 00:24:52.960
a two on the Board Game Geek
weight. And so if I had to

326
00:24:53.559 --> 00:24:57.279
recommend it to people, it's a
little simple to play with your adult friends,

327
00:24:57.680 --> 00:25:03.000
it's about right to play with your
kids. So anyway, it's it's

328
00:25:03.039 --> 00:25:06.119
fun game. It's like a twenty
minute game, right, and so if

329
00:25:06.119 --> 00:25:07.200
you have an hour to kill,
you can play two or three of them,

330
00:25:07.559 --> 00:25:11.160
right, or maybe even four of
them. And so I'm gonna throw

331
00:25:11.200 --> 00:25:17.319
that one out there a couple of
other things that I'm just gonna push as

332
00:25:17.319 --> 00:25:23.319
far as picks go. So lately
I've been on my phone. I picked

333
00:25:23.400 --> 00:25:27.720
up a new app that's my new
thing that I'm into right now. I've

334
00:25:27.759 --> 00:25:33.160
been wanting to learn Japanese forever,
and so I picked up dual Lingo on

335
00:25:33.200 --> 00:25:36.759
my phone. And I'm sure everybody's
going, oh, du a lingo,

336
00:25:36.960 --> 00:25:40.720
right, I've used that. It
feels like everybody knew about it before I

337
00:25:40.720 --> 00:25:44.400
did, but I didn't know that
there it was free, right, you

338
00:25:44.440 --> 00:25:47.519
can pay to have Duo Lingo,
super due a Lingo or whatever they call

339
00:25:47.559 --> 00:25:52.519
it. But anyway, I've just
been using it for free and it's been

340
00:25:52.559 --> 00:25:56.200
awesome. And so initially I picked
it up and I started learning Japanese,

341
00:25:56.279 --> 00:26:00.119
right, and I'm still going through
the ordering food the first lesson. Right

342
00:26:02.240 --> 00:26:03.960
when I was a kid, they
taught us in elementary school to count to

343
00:26:04.039 --> 00:26:07.680
ten in Japanese. Right, so
there you go, folks, I can

344
00:26:07.759 --> 00:26:14.839
say about eight food words and then
like and and please and anyway. But

345
00:26:14.960 --> 00:26:18.279
yeah, so I'm gonna pick it
up slowly, but I'm gonna pick it

346
00:26:18.359 --> 00:26:23.000
up, and I'm really enjoying it. But then I realized that one of

347
00:26:23.000 --> 00:26:26.200
the places that I've always wanted to
travel is to France. My grandmother was

348
00:26:26.240 --> 00:26:32.759
French. She immigrated to the US. She actually met my grandpa in Montreal.

349
00:26:32.799 --> 00:26:36.960
He grew up in Alberta, Canada. But yeah, so I've always

350
00:26:36.960 --> 00:26:40.799
wanted to go see some of these
places, right. I don't know that

351
00:26:40.880 --> 00:26:45.079
I didn't necessarily go see anything that
has a direct tie to my grandmother or

352
00:26:45.119 --> 00:26:51.559
my great grandmother in France, but
just kind of to have that connection,

353
00:26:51.680 --> 00:26:53.359
right, And so I was like, okay, well, I took French

354
00:26:53.359 --> 00:26:56.480
in high school, so I'll pick
it up on Duolingo. So I added

355
00:26:56.519 --> 00:27:02.359
French, and so you know,
every day I do a Japanese and a

356
00:27:02.440 --> 00:27:07.440
French. And then I was chatting
with this guy online who I don't even

357
00:27:07.440 --> 00:27:11.200
remember how we got connected, but
he's a member of the Church of Jesus

358
00:27:11.279 --> 00:27:15.880
Christ the Latter day Saints, as
am I. And we were talking about

359
00:27:15.039 --> 00:27:21.000
church missions. And I served my
church mission in not Japan, not France,

360
00:27:21.319 --> 00:27:25.799
in Italy. And so I speak
Italian fluently, especially if you want

361
00:27:25.839 --> 00:27:32.200
to talk about church, but my
vocabulary is kind of thin in some other

362
00:27:32.680 --> 00:27:36.680
important areas. Right, I could
go to the grocery store and buy food

363
00:27:36.720 --> 00:27:38.559
and not think about what I was
trying to say, Right, And I

364
00:27:38.599 --> 00:27:44.079
could go out and I could talk
to people about kind of lifestyle stuff in

365
00:27:44.160 --> 00:27:48.920
general, right, And I had
the vocabulary for that, but I mean

366
00:27:48.960 --> 00:27:52.160
there were some words that I just
never learned, right. And so I

367
00:27:52.960 --> 00:27:56.599
was chatting with this guy and I
was like, huh, I wonder if

368
00:27:56.640 --> 00:28:00.599
I could put this into duo lingo
and make that work. And so I

369
00:28:00.599 --> 00:28:04.160
put it in and I basically said
yeah, because let's just say, how

370
00:28:04.279 --> 00:28:07.640
how good are you at it?
Right. So I dragged it all the

371
00:28:07.640 --> 00:28:11.440
way to I speak this fluently right, and I'll have to admit that the

372
00:28:11.519 --> 00:28:17.359
lessons are still pretty rudimentary. But
my vocabulary has been expanding, which has

373
00:28:17.400 --> 00:28:22.200
been fun. And so I learned
words for like exercise, which was something

374
00:28:22.240 --> 00:28:25.960
that I had never right, I'd
never had to say on my mission.

375
00:28:26.000 --> 00:28:29.240
And so anyway, that's been a
ton of fun. So I've really really

376
00:28:29.240 --> 00:28:33.240
been liking Dual Lingo, and like
I said, you can get it on

377
00:28:33.079 --> 00:28:37.279
I have it on my iPhone and
you can use it for free, and

378
00:28:37.359 --> 00:28:38.839
it looks like you can use it
for free forever. Now. I keep

379
00:28:38.880 --> 00:28:42.240
getting ads in the app, saying
and that's part of the deal. So

380
00:28:42.240 --> 00:28:45.680
I'll get the ads in the app
for like, hey, play this pirate

381
00:28:45.720 --> 00:28:48.720
game or whatever right after I finish
a lesson, and then as soon as

382
00:28:48.799 --> 00:28:52.079
that I click out of that,
right it's like nope, nope, nope,

383
00:28:52.079 --> 00:28:55.920
nope. Then it plays the hey
get super dual Lingo and make the

384
00:28:55.960 --> 00:28:57.200
ads go away, and I,
you know, nope, nope, nope,

385
00:28:57.279 --> 00:29:02.440
nope. But so far as been
awesome, So I've been enjoying that.

386
00:29:02.519 --> 00:29:04.680
I try not to do the lessons
back to back to back because I

387
00:29:04.759 --> 00:29:08.759
don't want to cross the streams with
any of the languages, if that makes

388
00:29:08.799 --> 00:29:15.759
sense, And French and Italian are
close enough, like a lot of the

389
00:29:15.799 --> 00:29:19.160
words are different, but the structure
is very similar. What I'm finding in

390
00:29:19.240 --> 00:29:25.599
Japanese is they they structure their language
different, very differently, and so that's

391
00:29:25.799 --> 00:29:30.200
less of a thing. But anyway, so I'm gonna pick do a lingo,

392
00:29:30.279 --> 00:29:33.359
and since I talked about it for
so long, I'm just gonna plug

393
00:29:33.400 --> 00:29:37.359
go check out Ruby Geniuses at rubygeniuses
dot com if you want to be on

394
00:29:37.400 --> 00:29:44.440
a regular basis talking to people about
Ruby and rails and that kind of stuff.

395
00:29:45.240 --> 00:29:49.240
You know, Elliott mentioned that he's
doing JavaScript and typescript. I'm also

396
00:29:49.279 --> 00:29:55.319
starting up JavaScript Geniuses here pretty quick. So anyway, what are your picks?

397
00:29:56.359 --> 00:29:59.559
That's awesome, that's call. Yeah, I guess I don't have many

398
00:29:59.720 --> 00:30:07.039
picks, but I just so.
I recently went to a concert. So

399
00:30:07.119 --> 00:30:12.319
it was by this artist named JAKB. Collier, and he's just an artist

400
00:30:12.319 --> 00:30:15.319
I've been following for a while.
If you may not already, if you're

401
00:30:15.319 --> 00:30:19.720
like in the music scene, but
if you're not, it's kind of a

402
00:30:19.799 --> 00:30:25.160
kind of interesting. I don't know, he's pretty I don't know, he's

403
00:30:25.200 --> 00:30:29.000
just a genius when it comes to
when it comes to music, and you

404
00:30:29.039 --> 00:30:33.880
know, he has you can look
up his like early YouTube videos and it's

405
00:30:33.880 --> 00:30:41.920
interesting how he can just combine his
like different melodic ideas and different just late

406
00:30:41.000 --> 00:30:45.720
kind of layers vocals on top of
each other and things like that. That

407
00:30:45.799 --> 00:30:47.960
was kind of his signature, I
guess earlier on. And now he's kind

408
00:30:47.960 --> 00:30:52.839
of expanded and did different musical genres
and things like that. He's collaborated like

409
00:30:52.920 --> 00:30:57.319
all kinds of artists across different different
things and so and he and he puts

410
00:30:57.359 --> 00:31:00.519
on a pretty great show as well. So you know, if it comes

411
00:31:00.519 --> 00:31:04.839
to your city, definitely definitely check
him out. And you and you're you're

412
00:31:04.880 --> 00:31:10.519
and you're into music, of course
check him out. Yeah, So you

413
00:31:10.640 --> 00:31:14.519
know that's that's that's my pick,
I guess based on Yeah. All right,

414
00:31:14.599 --> 00:31:15.279
well I'm gonna go ahead and wrap
it up here. I know this

415
00:31:15.359 --> 00:31:18.160
is a little shorter episode than people
used to, but that's totally fine.

416
00:31:18.920 --> 00:31:22.440
Thanks for coming, Elliott, Yeah, thanks for having me. All right,

417
00:31:22.480 --> 00:31:25.960
folks, we're gonna wrap it up
till next time. Max Out

