WEBVTT

1
00:00:04.599 --> 00:00:07.679
<v Speaker 1>Hey everybody, Welcome back to another episode of the Ruby

2
00:00:07.759 --> 00:00:12.080
<v Speaker 1>Rogues podcast. This week, on our panel we have yush Nuwatya.

3
00:00:13.519 --> 00:00:13.720
<v Speaker 2>Hello.

4
00:00:13.919 --> 00:00:18.239
<v Speaker 1>No, I'm Charles max Wood from top End Devs. And

5
00:00:18.320 --> 00:00:22.640
<v Speaker 1>this week we have a special guest. We have Mohammed Hassan. Mohammad,

6
00:00:23.320 --> 00:00:26.079
<v Speaker 1>you built light stack, which is pretty cool. What else

7
00:00:26.120 --> 00:00:27.000
<v Speaker 1>doul people know about you?

8
00:00:28.480 --> 00:00:32.119
<v Speaker 2>Well, I've been doing Ruby for for a long one now,

9
00:00:32.159 --> 00:00:34.280
<v Speaker 2>I guess, I guess two thousand and five or something.

10
00:00:35.560 --> 00:00:38.079
<v Speaker 2>I've been been in this industry for for a long while.

11
00:00:38.119 --> 00:00:40.439
<v Speaker 2>I go by the handle old Mo for a reason.

12
00:00:40.799 --> 00:00:47.119
<v Speaker 2>I think, yeah, it's it's literally old Mo, and I've

13
00:00:47.119 --> 00:00:53.119
<v Speaker 2>been I've been doing computers since nineteen ninety something, so yeah,

14
00:00:53.399 --> 00:00:55.759
<v Speaker 2>I have have a lot of work that has been

15
00:00:55.759 --> 00:00:59.439
<v Speaker 2>done in the Ruby land, especially in concurrency. I've released

16
00:00:59.439 --> 00:01:02.479
<v Speaker 2>the library long ago if anyone remembers, was called never

17
00:01:02.520 --> 00:01:08.040
<v Speaker 2>block once fibers started, and uh yeah, I got fascinated

18
00:01:08.120 --> 00:01:11.959
<v Speaker 2>by by this idea of like high concurrency and and

19
00:01:12.359 --> 00:01:16.280
<v Speaker 2>doing high performance stuff in Ruby. And then afterwards I

20
00:01:17.200 --> 00:01:21.920
<v Speaker 2>also got into got in love with with embedded databases

21
00:01:22.120 --> 00:01:26.079
<v Speaker 2>Siquo light to be specific. So basically I'm marrying the two.

22
00:01:26.280 --> 00:01:32.280
<v Speaker 2>So like high performance Ruby, high performance embedded database siqual

23
00:01:32.359 --> 00:01:35.799
<v Speaker 2>Light in particular, and I've been I've been doing that

24
00:01:36.120 --> 00:01:41.159
<v Speaker 2>with my own work in my own startups and looking

25
00:01:41.560 --> 00:01:44.959
<v Speaker 2>forward now to actually deliver something to the community that

26
00:01:45.079 --> 00:01:50.879
<v Speaker 2>will you know, spread this, uh this value to everyone

27
00:01:51.079 --> 00:01:52.760
<v Speaker 2>that is using both Ruby and siqual Light.

28
00:01:54.879 --> 00:01:59.719
<v Speaker 1>Cool. So I looked at it and it and you

29
00:01:59.719 --> 00:02:01.280
<v Speaker 1>can reckon me where I'm wrong. I didn't have a

30
00:02:01.359 --> 00:02:04.280
<v Speaker 1>chance to try it because my life is absolutely nuts.

31
00:02:05.120 --> 00:02:06.719
<v Speaker 1>You think the kids get out of school, your life

32
00:02:06.760 --> 00:02:11.960
<v Speaker 1>gets lets the nuts, It doesn't. So yeah, I'm looking

33
00:02:12.000 --> 00:02:13.919
<v Speaker 1>at it, and I'm sitting here thinking well, because I

34
00:02:13.960 --> 00:02:15.840
<v Speaker 1>remember back in the day, sequel Light was kind of

35
00:02:15.879 --> 00:02:19.960
<v Speaker 1>the not serious database. You know, you use it development

36
00:02:20.039 --> 00:02:23.400
<v Speaker 1>and then you'd use a real database like post ris ql.

37
00:02:25.599 --> 00:02:29.800
<v Speaker 1>But with light stack it looks like you provide the database,

38
00:02:29.840 --> 00:02:31.960
<v Speaker 1>which is kind of obvious, but then you're also pulling

39
00:02:32.000 --> 00:02:37.639
<v Speaker 1>in stuff like cashing and jobs, and yeah, do you

40
00:02:37.680 --> 00:02:40.400
<v Speaker 1>want to just talk about all of this because yes,

41
00:02:40.439 --> 00:02:42.879
<v Speaker 1>you pull in just one gem and it does all

42
00:02:42.919 --> 00:02:43.479
<v Speaker 1>this stuff.

43
00:02:44.360 --> 00:02:47.479
<v Speaker 2>Yes, I think. I think one one the biggest issue

44
00:02:47.479 --> 00:02:50.919
<v Speaker 2>here was was the amount of dependencies you need when

45
00:02:51.000 --> 00:02:54.199
<v Speaker 2>you start a new rails app like you need, you

46
00:02:54.280 --> 00:02:58.879
<v Speaker 2>need like a database naturally, yeah, and then you need

47
00:02:58.919 --> 00:03:02.639
<v Speaker 2>some some cash sover and and and then things go

48
00:03:03.120 --> 00:03:06.439
<v Speaker 2>a little bit crazy and you make a cluster of

49
00:03:06.479 --> 00:03:10.280
<v Speaker 2>those cash servers. And then you need a job processor,

50
00:03:10.960 --> 00:03:12.840
<v Speaker 2>and you need a queue for that job processor. So

51
00:03:12.879 --> 00:03:16.039
<v Speaker 2>you have read this for example, and then uh a

52
00:03:16.159 --> 00:03:19.719
<v Speaker 2>process for sidekick or something like that. And then you

53
00:03:19.759 --> 00:03:26.159
<v Speaker 2>need full tech search, so you use something like elastic

54
00:03:26.400 --> 00:03:32.319
<v Speaker 2>or open search. And then you need like uh cable

55
00:03:32.560 --> 00:03:36.680
<v Speaker 2>uh capabilities, so you need a pop sub server and

56
00:03:36.719 --> 00:03:39.479
<v Speaker 2>you have usually read this for that as well, or

57
00:03:39.520 --> 00:03:42.360
<v Speaker 2>postographs and and and you end up with so many

58
00:03:42.400 --> 00:03:45.800
<v Speaker 2>dependencies and so many moving parts in your application. And

59
00:03:45.840 --> 00:03:48.960
<v Speaker 2>I was I was thinking of like, yeah, like making

60
00:03:49.080 --> 00:03:53.840
<v Speaker 2>making Siquo light your your database is nice, but like

61
00:03:53.960 --> 00:03:57.520
<v Speaker 2>limiting it to just database means it's only limited to

62
00:03:57.560 --> 00:04:01.879
<v Speaker 2>smallish applications that only require database. Actually, sequel Light, due

63
00:04:01.879 --> 00:04:05.479
<v Speaker 2>to its latency characteristics, is capable of a lot more.

64
00:04:06.120 --> 00:04:08.800
<v Speaker 2>And I went out to try and see if I

65
00:04:08.879 --> 00:04:11.879
<v Speaker 2>can actually prove that it is capable of a lot more.

66
00:04:12.479 --> 00:04:19.360
<v Speaker 2>And so yeah, database, cash, pops up, que, job processor,

67
00:04:20.759 --> 00:04:25.480
<v Speaker 2>full tex search, everything you'd need for not everything, but

68
00:04:25.560 --> 00:04:29.600
<v Speaker 2>almost everything. You'd need for your application, and currently in

69
00:04:29.720 --> 00:04:32.639
<v Speaker 2>the rapport but not released is like ID which is

70
00:04:33.120 --> 00:04:37.399
<v Speaker 2>greatest basically reported to sequel light, so you won't need

71
00:04:37.920 --> 00:04:42.279
<v Speaker 2>for your key data another separate process running somewhere in

72
00:04:42.319 --> 00:04:43.120
<v Speaker 2>your infrastructure.

73
00:04:45.120 --> 00:04:50.040
<v Speaker 1>Very cool, I have to say, like I switched over

74
00:04:50.120 --> 00:04:58.480
<v Speaker 1>to what is it the caching and queueing that? Yeah,

75
00:04:58.600 --> 00:05:02.199
<v Speaker 1>solid cash and solid cute that came out with. Sorry, folks,

76
00:05:02.240 --> 00:05:04.439
<v Speaker 1>I'm a little slow. I am under the weather big time,

77
00:05:05.040 --> 00:05:07.759
<v Speaker 1>but this looks so cool. I just wanted to talk

78
00:05:07.759 --> 00:05:12.240
<v Speaker 1>through it, and so I was super excited to get

79
00:05:12.319 --> 00:05:16.040
<v Speaker 1>rid of rettis right, because I haven't been using action

80
00:05:16.160 --> 00:05:21.519
<v Speaker 1>Cable a ton, so yeah, I kind of like the

81
00:05:21.560 --> 00:05:24.040
<v Speaker 1>idea of And I've also been using Melee search and

82
00:05:24.079 --> 00:05:26.480
<v Speaker 1>I've been trying to move that into my Postgress database

83
00:05:26.480 --> 00:05:31.480
<v Speaker 1>as well, just use Postgress full tech search. So so

84
00:05:31.600 --> 00:05:33.800
<v Speaker 1>this appeals to me a lot, because I, you know,

85
00:05:33.879 --> 00:05:35.399
<v Speaker 1>my stack gets a lot simpler.

86
00:05:36.319 --> 00:05:39.920
<v Speaker 2>Yes, definitely. I think I think there are two dimensions here.

87
00:05:40.079 --> 00:05:42.560
<v Speaker 2>One of them is simplifying the stack, and one of

88
00:05:42.600 --> 00:05:46.120
<v Speaker 2>them is actually realizing the use potential in having an

89
00:05:46.160 --> 00:05:49.399
<v Speaker 2>embitted database. So one way to simplify the stack is

90
00:05:49.439 --> 00:05:52.240
<v Speaker 2>to move everything to posgress posts is very capable, it's

91
00:05:52.319 --> 00:05:56.759
<v Speaker 2>very solid, and it's been there since forever and you

92
00:05:56.839 --> 00:06:00.279
<v Speaker 2>can rely on it. But what I'm my thing is

93
00:06:00.680 --> 00:06:05.519
<v Speaker 2>there is a new dimension of performance when you go embedded,

94
00:06:05.879 --> 00:06:10.240
<v Speaker 2>like a complete a completely different thing. I think in Brighton,

95
00:06:10.279 --> 00:06:12.879
<v Speaker 2>ruge I presented what it takes for a query to

96
00:06:12.959 --> 00:06:18.920
<v Speaker 2>run if you go through like client server stack versus

97
00:06:19.000 --> 00:06:22.279
<v Speaker 2>an embedded stack, and what do that is? Basically you're

98
00:06:22.319 --> 00:06:24.800
<v Speaker 2>you're doing for most treats, you're doing a memory call

99
00:06:25.759 --> 00:06:32.360
<v Speaker 2>and and and that's that's a huge advancement in performance

100
00:06:32.439 --> 00:06:35.160
<v Speaker 2>that you'll only appreciate it if you see it. Once

101
00:06:35.240 --> 00:06:37.839
<v Speaker 2>you see that your Rail's application is able to able

102
00:06:37.879 --> 00:06:43.759
<v Speaker 2>to deal with like potentially thousands of concurrent connections and

103
00:06:43.759 --> 00:06:48.279
<v Speaker 2>then responding to them very quickly, you'll you'll, you'll you'll

104
00:06:48.279 --> 00:06:49.120
<v Speaker 2>have to see it to believe it.

105
00:06:49.160 --> 00:06:52.319
<v Speaker 1>Basically very cool. Are usually you played with this?

106
00:06:53.079 --> 00:06:55.560
<v Speaker 3>I haven't actually had a chance to play with it.

107
00:06:56.079 --> 00:06:59.720
<v Speaker 3>Sequel Light and Rails has been something that's been on

108
00:06:59.800 --> 00:07:03.040
<v Speaker 3>my do list for a while, but well, life gets

109
00:07:03.040 --> 00:07:07.439
<v Speaker 3>in the way. I think my next project is almost

110
00:07:07.439 --> 00:07:10.279
<v Speaker 3>definitely going to be my next side project is definitely

111
00:07:10.279 --> 00:07:15.399
<v Speaker 3>going to be a sequel light rather than postgress. But yes,

112
00:07:15.439 --> 00:07:21.000
<v Speaker 3>I just I just want to get very clear in

113
00:07:21.040 --> 00:07:24.519
<v Speaker 3>my head about on the gotcha's with sequel light. And

114
00:07:25.639 --> 00:07:29.759
<v Speaker 3>let's start with just what light stock actually does in

115
00:07:29.879 --> 00:07:34.759
<v Speaker 3>certain things like with light job and sorry, with light

116
00:07:34.839 --> 00:07:39.600
<v Speaker 3>cable and like like Katie he said, like like like

117
00:07:39.800 --> 00:07:43.519
<v Speaker 3>cable used like pub sub it's like a drop in replacement,

118
00:07:43.600 --> 00:07:46.920
<v Speaker 3>right and like Katie replicates credits that are these building

119
00:07:46.959 --> 00:07:51.519
<v Speaker 3>on like native sequel light features off like pub sub

120
00:07:51.519 --> 00:07:52.839
<v Speaker 3>in a key value store or.

121
00:07:54.720 --> 00:07:58.360
<v Speaker 2>Is a little blend then than that, so it doesn't

122
00:07:58.399 --> 00:08:04.120
<v Speaker 2>have like something like notify in in postgress. And I

123
00:08:04.240 --> 00:08:06.959
<v Speaker 2>like I had to build this functionality into Syqul light

124
00:08:07.800 --> 00:08:10.079
<v Speaker 2>on top of Syqul itself, but on top of native

125
00:08:10.079 --> 00:08:12.839
<v Speaker 2>sequel light. So by the way, the solid family of

126
00:08:13.439 --> 00:08:16.040
<v Speaker 2>products like Solid cash, slid C they have they do

127
00:08:16.120 --> 00:08:19.279
<v Speaker 2>have sequel light support, but the problem is they do

128
00:08:19.399 --> 00:08:24.800
<v Speaker 2>deliver that on through active record, which is like an

129
00:08:24.879 --> 00:08:31.519
<v Speaker 2>order of man nude more abstracted then going native with

130
00:08:31.639 --> 00:08:35.919
<v Speaker 2>sycuolight like directly and hence the siqal light performance. If

131
00:08:35.960 --> 00:08:38.000
<v Speaker 2>if you go directly to the metal, it's it's a

132
00:08:38.080 --> 00:08:42.200
<v Speaker 2>much much faster and the nice thing about about what

133
00:08:42.279 --> 00:08:44.960
<v Speaker 2>we have in in light stack is that we have

134
00:08:45.200 --> 00:08:50.159
<v Speaker 2>the seql code completely the coupled from the from the

135
00:08:50.240 --> 00:08:55.480
<v Speaker 2>Ruby logic, so you can optimize that independently and work

136
00:08:55.519 --> 00:08:59.639
<v Speaker 2>on ensuring gas every call is through an index. You're

137
00:08:59.679 --> 00:09:05.080
<v Speaker 2>not working, uh, you're not walking tables or doing any

138
00:09:05.080 --> 00:09:10.279
<v Speaker 2>table scans things of that sort. So it's uh, I guess,

139
00:09:10.320 --> 00:09:12.799
<v Speaker 2>I guess it's. It's it's implemented, but the functionality is

140
00:09:12.840 --> 00:09:17.559
<v Speaker 2>not that hard. I guess it's it's really straightforward getting

141
00:09:17.600 --> 00:09:21.240
<v Speaker 2>a cable and getting it to perform the problem that

142
00:09:21.320 --> 00:09:24.039
<v Speaker 2>your core issue would be to get it to perform

143
00:09:24.120 --> 00:09:28.600
<v Speaker 2>correctly under like concurrent operation, which is which is tricky

144
00:09:28.759 --> 00:09:31.559
<v Speaker 2>and because you don't know whether the application would run

145
00:09:31.600 --> 00:09:35.879
<v Speaker 2>in in threads, run fibers, multiple processes or not. And

146
00:09:35.919 --> 00:09:41.039
<v Speaker 2>this is I think the core contribution of light stack,

147
00:09:41.080 --> 00:09:44.279
<v Speaker 2>which it abstracts all this and and make sure any

148
00:09:44.279 --> 00:09:47.200
<v Speaker 2>component can be brought up very quickly, like I built

149
00:09:47.240 --> 00:09:50.919
<v Speaker 2>like cable in one hour. Oh wow, okay, because because

150
00:09:51.039 --> 00:09:57.279
<v Speaker 2>all the machinery there for for like making sure that

151
00:09:59.480 --> 00:10:05.919
<v Speaker 2>like uh, pulling of connections, threads don't go into these

152
00:10:06.000 --> 00:10:09.080
<v Speaker 2>conditions and and proceeds are not affecting each other that

153
00:10:09.279 --> 00:10:13.519
<v Speaker 2>was there already, so you only get to implement the

154
00:10:13.559 --> 00:10:17.240
<v Speaker 2>logic of the higher level of course one hour with bugs.

155
00:10:17.279 --> 00:10:20.799
<v Speaker 2>But but then I had a working for the type

156
00:10:21.279 --> 00:10:25.720
<v Speaker 2>and and and unlikely you was not much harder. It

157
00:10:25.799 --> 00:10:29.480
<v Speaker 2>was done in two days, so and then it was

158
00:10:29.519 --> 00:10:31.919
<v Speaker 2>mostly the functionality, a lot of functionality, a lot of

159
00:10:32.000 --> 00:10:36.320
<v Speaker 2>logic on top of the connection. So I guess, I

160
00:10:36.320 --> 00:10:39.679
<v Speaker 2>guess that's that's what light stack is able to do,

161
00:10:39.799 --> 00:10:44.000
<v Speaker 2>bring up those features quickly, and I implement as much

162
00:10:44.240 --> 00:10:46.399
<v Speaker 2>of them as possible in sequel land rather than in

163
00:10:46.519 --> 00:10:49.840
<v Speaker 2>rugby land, for for performance reasons from one side, and

164
00:10:49.840 --> 00:10:54.679
<v Speaker 2>and also for portability and separation of concerns as well.

165
00:10:55.600 --> 00:10:58.240
<v Speaker 3>Yeah, I think that that's a great approach. I've kind

166
00:10:58.279 --> 00:11:02.919
<v Speaker 3>of been uh, blissfully unaware of sequel up to a

167
00:11:03.000 --> 00:11:06.360
<v Speaker 3>point because Actor record kind of handles it for me.

168
00:11:06.440 --> 00:11:08.399
<v Speaker 3>But for the client I'm working with at the moment,

169
00:11:09.279 --> 00:11:11.200
<v Speaker 3>we've had to do some really advanced stuff and I

170
00:11:11.240 --> 00:11:14.080
<v Speaker 3>have been getting my hands dirty with seql and the

171
00:11:14.120 --> 00:11:17.519
<v Speaker 3>power that it has has blown me away a little bit.

172
00:11:18.000 --> 00:11:22.960
<v Speaker 3>So yeah, I completely get your approach there. So yeah,

173
00:11:23.000 --> 00:11:25.519
<v Speaker 3>just for personal curiosity, could you talk about how you

174
00:11:26.720 --> 00:11:29.799
<v Speaker 3>how you did pops up with just like SEQL and

175
00:11:29.919 --> 00:11:34.120
<v Speaker 3>database features without having something like notify at your disposal.

176
00:11:34.519 --> 00:11:37.799
<v Speaker 2>Yes. So the idea is when when you do a

177
00:11:37.879 --> 00:11:43.399
<v Speaker 2>database calls it in the traditional sense it goes through

178
00:11:43.679 --> 00:11:46.600
<v Speaker 2>the network to the server and back, but in in

179
00:11:46.600 --> 00:11:50.720
<v Speaker 2>in the sequel like sense, it's just a mess of coal,

180
00:11:51.039 --> 00:11:53.840
<v Speaker 2>a mess a call to a local memory address, especially

181
00:11:53.840 --> 00:11:57.600
<v Speaker 2>if you if you're looking at some page that is

182
00:11:57.639 --> 00:12:02.039
<v Speaker 2>definitely in the cash because it is like access, it's

183
00:12:02.120 --> 00:12:06.159
<v Speaker 2>hot in the hot section of your data. So basically

184
00:12:06.240 --> 00:12:09.440
<v Speaker 2>it's a pulling it. It's pulling happening from from Ruby.

185
00:12:10.200 --> 00:12:16.759
<v Speaker 2>Like each thread that is that is subscribed to the

186
00:12:16.799 --> 00:12:21.679
<v Speaker 2>pops up would constantly pull the database and ask it

187
00:12:21.759 --> 00:12:26.600
<v Speaker 2>for for data. And and in benchmarking like four proceeds

188
00:12:26.840 --> 00:12:30.600
<v Speaker 2>constantly writing and constantly pulling. I'm able to get around

189
00:12:30.759 --> 00:12:34.120
<v Speaker 2>like one hundred and twenty thousand messages retired per second.

190
00:12:34.919 --> 00:12:39.120
<v Speaker 2>So yeah, this is this and that's not on very

191
00:12:39.159 --> 00:12:42.720
<v Speaker 2>high end hardware, so it is capable. And now I

192
00:12:42.759 --> 00:12:45.840
<v Speaker 2>was even able to do faster than some some IPC

193
00:12:47.480 --> 00:12:51.960
<v Speaker 2>cross process solutions that are tried at first as an optimization,

194
00:12:52.000 --> 00:12:54.759
<v Speaker 2>but then it ended up like siquolites faster.

195
00:12:54.799 --> 00:12:59.039
<v Speaker 3>Still, Yeah, I think when you eliminate the network from

196
00:12:59.080 --> 00:13:02.720
<v Speaker 3>the equation of the performance speed up you get is

197
00:13:02.879 --> 00:13:06.480
<v Speaker 3>just hard to comprehend because you're any AUTHO removing so

198
00:13:06.600 --> 00:13:09.759
<v Speaker 3>much complexity from the call. Right, You're not opening a

199
00:13:09.799 --> 00:13:12.720
<v Speaker 3>network connection, you're not sending anything over a wire.

200
00:13:13.759 --> 00:13:18.120
<v Speaker 2>You're not data from from buffers to like the network

201
00:13:18.159 --> 00:13:21.120
<v Speaker 2>stack in the OS. There are so many, so many

202
00:13:21.159 --> 00:13:24.759
<v Speaker 2>things that are eliminated, and your your life becomes a

203
00:13:24.799 --> 00:13:25.399
<v Speaker 2>lot easier.

204
00:13:26.159 --> 00:13:29.360
<v Speaker 1>I'm in some cases, I think I kind of feel this,

205
00:13:29.600 --> 00:13:33.039
<v Speaker 1>you know, because I've used some of the cloud databases, right,

206
00:13:33.240 --> 00:13:37.240
<v Speaker 1>so you know, even if I'm pulling a you know,

207
00:13:37.399 --> 00:13:40.320
<v Speaker 1>a database on Linode and a server on Linode or

208
00:13:40.360 --> 00:13:45.080
<v Speaker 1>Digital Ocean or whatever, you know, pick a poison like those.

209
00:13:45.200 --> 00:13:49.159
<v Speaker 1>I feel like I felt that more than when I

210
00:13:49.320 --> 00:13:52.480
<v Speaker 1>have you know, to virtual servers that I've set up

211
00:13:52.480 --> 00:13:56.519
<v Speaker 1>in the same network, you know, on Digital Otion and stuff,

212
00:13:56.519 --> 00:14:01.279
<v Speaker 1>because all of that stuff is it's I think, it's

213
00:14:01.279 --> 00:14:04.600
<v Speaker 1>all software and it's fast, right, and.

214
00:14:04.960 --> 00:14:06.799
<v Speaker 2>It is fast, but it's not free.

215
00:14:07.720 --> 00:14:09.960
<v Speaker 1>No, that's fair, and it will never be free. You

216
00:14:10.200 --> 00:14:12.840
<v Speaker 1>don't get that for free. But yeah, I think I

217
00:14:12.840 --> 00:14:15.120
<v Speaker 1>think there are different levels to this, right, I don't

218
00:14:15.120 --> 00:14:19.080
<v Speaker 1>know that, but completely convinced that you know, it's gonna

219
00:14:19.120 --> 00:14:23.279
<v Speaker 1>be that noticeable depending on what your setup is. Yeah,

220
00:14:23.399 --> 00:14:25.240
<v Speaker 1>you should be under the circumstances.

221
00:14:25.480 --> 00:14:28.600
<v Speaker 2>Yeah, yeah, definitely you should. You should try actually to

222
00:14:28.679 --> 00:14:32.720
<v Speaker 2>go through the Like I'm all the benchmarks that they

223
00:14:32.720 --> 00:14:35.159
<v Speaker 2>have for light stack. By the way, on on the

224
00:14:35.200 --> 00:14:39.480
<v Speaker 2>GitHub ripple, these are run against postglass on the same machine.

225
00:14:40.240 --> 00:14:42.159
<v Speaker 1>Okay, so you put mostgress on the same machine and

226
00:14:42.200 --> 00:14:44.559
<v Speaker 1>run not even on a versus I think.

227
00:14:44.639 --> 00:14:48.440
<v Speaker 2>Okay, Like all these are run through against postgress on

228
00:14:48.480 --> 00:14:52.279
<v Speaker 2>the same very same machine, on the same space, same everything.

229
00:14:52.440 --> 00:14:54.120
<v Speaker 1>Well that changes my argument a little bit.

230
00:14:54.840 --> 00:15:00.639
<v Speaker 2>Yeah, so I like the point is how how much

231
00:15:00.759 --> 00:15:03.759
<v Speaker 2>of the overhead? How much is the overhead compared to

232
00:15:04.120 --> 00:15:08.440
<v Speaker 2>the actual work that you're doing, and it there is

233
00:15:08.480 --> 00:15:10.799
<v Speaker 2>a spectrum here, not not all queries would be much

234
00:15:10.840 --> 00:15:13.360
<v Speaker 2>faster and sequal lighte Like, if you're doing heavy io,

235
00:15:13.480 --> 00:15:15.919
<v Speaker 2>if you hit the desk, then they will both be

236
00:15:16.360 --> 00:15:20.559
<v Speaker 2>both be a lot slower. Then in that case, the

237
00:15:21.759 --> 00:15:24.759
<v Speaker 2>savings that you had by not going through the network

238
00:15:24.799 --> 00:15:28.759
<v Speaker 2>stack will be very un noticeable. They will not exist.

239
00:15:28.799 --> 00:15:32.240
<v Speaker 2>Basically because reading a single block from disk is much

240
00:15:32.320 --> 00:15:36.399
<v Speaker 2>much more expensive, like orders of magnitude more expensive. So like,

241
00:15:36.720 --> 00:15:39.519
<v Speaker 2>if you're talking about quis that are fulfilled from the

242
00:15:39.559 --> 00:15:45.159
<v Speaker 2>page cash, then the difference would be really not If

243
00:15:45.159 --> 00:15:51.399
<v Speaker 2>you have complex queries that will require disk access, then

244
00:15:51.440 --> 00:15:55.600
<v Speaker 2>the difference will be less. But in no situation will

245
00:15:55.639 --> 00:15:59.080
<v Speaker 2>siquo light bill will be slower than post aggress in

246
00:15:59.159 --> 00:16:03.559
<v Speaker 2>reed scenarios, given, of course, the quity plan that was

247
00:16:03.600 --> 00:16:08.240
<v Speaker 2>provided by both databases. Both have very advanced quity planners,

248
00:16:08.399 --> 00:16:12.120
<v Speaker 2>and they should produce for most in the most case,

249
00:16:12.519 --> 00:16:16.360
<v Speaker 2>similar plans for the quities. But in case they're producing

250
00:16:16.360 --> 00:16:20.200
<v Speaker 2>the similar plan, definitely Sequolite will be either as fast

251
00:16:20.279 --> 00:16:23.799
<v Speaker 2>or much faster than like in a spectrum between fast

252
00:16:23.840 --> 00:16:28.919
<v Speaker 2>and as fast and much faster than prosrogress. That's three equities, right,

253
00:16:29.039 --> 00:16:30.840
<v Speaker 2>It is a completely different story.

254
00:16:31.960 --> 00:16:34.519
<v Speaker 1>Right. So my question then is, because yeah, I'm looking

255
00:16:34.519 --> 00:16:38.360
<v Speaker 1>at these benchmarks and it's pretty impressive, what if you

256
00:16:38.440 --> 00:16:40.240
<v Speaker 1>have to reach it over the network? Right, So, what

257
00:16:40.279 --> 00:16:43.879
<v Speaker 1>if you've got enough traffic to where you've spread your

258
00:16:43.919 --> 00:16:47.000
<v Speaker 1>application servers out over multiple servers, and then I'll have

259
00:16:47.000 --> 00:16:49.360
<v Speaker 1>to hit the same source of truth, right, the same

260
00:16:49.440 --> 00:16:52.279
<v Speaker 1>database that way, How does that change the equation.

261
00:16:52.440 --> 00:16:55.720
<v Speaker 2>So siquolite is not designed for this scenario like scaling

262
00:16:55.720 --> 00:17:00.000
<v Speaker 2>out and connecting from multiple application servers to the same

263
00:17:00.159 --> 00:17:03.840
<v Speaker 2>node database node is not what sequal light is designed for.

264
00:17:04.000 --> 00:17:07.680
<v Speaker 2>Sickle Light is designed generally for virtical scaling rather than

265
00:17:07.720 --> 00:17:12.920
<v Speaker 2>horizontal scaling, so you get a better, bigger machine or

266
00:17:12.960 --> 00:17:16.359
<v Speaker 2>a VM basically, and in that case you can serve

267
00:17:16.839 --> 00:17:21.799
<v Speaker 2>more from the same resources. But there's many attempts to

268
00:17:23.200 --> 00:17:29.200
<v Speaker 2>actually enable enable this level of scaling. But but then

269
00:17:29.920 --> 00:17:35.400
<v Speaker 2>the point would be a little bit moved, like why

270
00:17:35.440 --> 00:17:39.480
<v Speaker 2>not use postal glass. I'm working myself on a solution

271
00:17:39.680 --> 00:17:44.799
<v Speaker 2>that that is midway, so it only transmits rights, but

272
00:17:44.839 --> 00:17:47.720
<v Speaker 2>all reads are local, so you have multiple nodes, each

273
00:17:47.759 --> 00:17:51.160
<v Speaker 2>one has a complete copy of the database and rights

274
00:17:51.160 --> 00:17:55.680
<v Speaker 2>are distributed. I've written about that on my blog and

275
00:17:55.920 --> 00:17:58.559
<v Speaker 2>still didn't open source it yet. But I'm not surely

276
00:17:58.559 --> 00:18:00.200
<v Speaker 2>if I'm going to open source it, or maybe you

277
00:18:00.240 --> 00:18:03.519
<v Speaker 2>just try to build the service around it. But but

278
00:18:03.599 --> 00:18:05.640
<v Speaker 2>you get a copy of the database of full copy

279
00:18:05.640 --> 00:18:08.599
<v Speaker 2>of database locally and you can do all reads locally,

280
00:18:08.799 --> 00:18:11.039
<v Speaker 2>so you get those benefits for reds and you get

281
00:18:11.279 --> 00:18:15.039
<v Speaker 2>slight extralatency for rights.

282
00:18:16.200 --> 00:18:19.319
<v Speaker 1>Yeah, but yeah, I mean I have to admit most

283
00:18:19.359 --> 00:18:22.480
<v Speaker 1>of the time when I'm scaling, Yeah, I just go

284
00:18:22.519 --> 00:18:25.640
<v Speaker 1>into lin ode or Digital Lotion or wherever I'm hosting,

285
00:18:25.680 --> 00:18:28.799
<v Speaker 1>and I say I want more RAM and a little

286
00:18:28.799 --> 00:18:31.160
<v Speaker 1>more disk space, and it goes okay, and then my

287
00:18:31.200 --> 00:18:34.319
<v Speaker 1>website's down for a minute. So what you're talking about

288
00:18:34.440 --> 00:18:35.200
<v Speaker 1>that makes sense to me.

289
00:18:36.079 --> 00:18:42.359
<v Speaker 2>Yeah, yeah, because it simplifies yourself, like because once you

290
00:18:42.440 --> 00:18:45.160
<v Speaker 2>go out of that, you you have to consider, okay,

291
00:18:45.440 --> 00:18:50.160
<v Speaker 2>what about like a little balancing, what if it note fails,

292
00:18:50.359 --> 00:18:52.480
<v Speaker 2>what happens here, what happened there? Then then you have

293
00:18:52.640 --> 00:18:55.880
<v Speaker 2>so many moving parts and they keep just growing exponentially

294
00:18:56.000 --> 00:18:57.960
<v Speaker 2>as as you add complexity to resist them.

295
00:18:58.160 --> 00:18:58.480
<v Speaker 1>Right.

296
00:19:00.319 --> 00:19:03.960
<v Speaker 3>I think in twenty twenty four, the amount of traffic

297
00:19:04.000 --> 00:19:08.400
<v Speaker 3>you can serve with one single beefy sell. Yeah, it's

298
00:19:08.480 --> 00:19:12.720
<v Speaker 3>just bloody unreal. I think horizontal scaling, If you need

299
00:19:12.799 --> 00:19:16.559
<v Speaker 3>horizontal scaling, you will have enough money to pay people

300
00:19:16.559 --> 00:19:20.319
<v Speaker 3>to get you off sequel light and on the postgress exactly.

301
00:19:20.440 --> 00:19:24.000
<v Speaker 2>That's I think. I think that the point is, or

302
00:19:24.119 --> 00:19:29.599
<v Speaker 2>or the point that I'm trying to to spread, is

303
00:19:30.759 --> 00:19:35.680
<v Speaker 2>it is unwise to scale more than what you need

304
00:19:35.880 --> 00:19:40.200
<v Speaker 2>initially in your small or starting projects. You can get

305
00:19:40.240 --> 00:19:43.759
<v Speaker 2>a lot more a lot more value in like eliminating

306
00:19:44.279 --> 00:19:49.319
<v Speaker 2>overheads and increasing performance and eliminating like moving parts by

307
00:19:49.680 --> 00:19:53.039
<v Speaker 2>moving to an embedded solution. And sycolitis is one heck

308
00:19:53.079 --> 00:19:57.440
<v Speaker 2>of an embedded solution. It's an amazing solution. It just works.

309
00:19:57.720 --> 00:20:03.359
<v Speaker 2>And Yeah, my advice would be, don't focus on your infrastructure,

310
00:20:03.440 --> 00:20:08.680
<v Speaker 2>don't have DevOps, focus on your application, and it will

311
00:20:08.720 --> 00:20:11.640
<v Speaker 2>carry you a long way. And once you're in a

312
00:20:11.680 --> 00:20:14.039
<v Speaker 2>position where you need to, you really need to move

313
00:20:14.079 --> 00:20:17.920
<v Speaker 2>out of this exactly what you said, Like, you have

314
00:20:17.960 --> 00:20:20.359
<v Speaker 2>the money and the funds to move out of this.

315
00:20:20.599 --> 00:20:23.920
<v Speaker 2>Either either you're getting a lot of money or you

316
00:20:24.000 --> 00:20:29.039
<v Speaker 2>have enough external funding to get out of this given

317
00:20:29.079 --> 00:20:31.720
<v Speaker 2>that you have that amount of user activity.

318
00:20:32.640 --> 00:20:35.480
<v Speaker 1>Yeah, DHH actually said I'm trying to find the tweet,

319
00:20:36.200 --> 00:20:38.920
<v Speaker 1>but he said in a tweet that if you bought

320
00:20:38.960 --> 00:20:42.039
<v Speaker 1>like I think it was thirty two or sixty four

321
00:20:42.079 --> 00:20:49.279
<v Speaker 1>gigabyte Hetzner level thing, that you at this point could

322
00:20:49.279 --> 00:20:54.039
<v Speaker 1>have run the entirety of base camp a few years ago. Right,

323
00:20:54.440 --> 00:21:00.359
<v Speaker 1>And so yeah, yeah, I'm really kind of yeah, I'm

324
00:21:00.400 --> 00:21:02.559
<v Speaker 1>liking the way that this looks.

325
00:21:03.039 --> 00:21:06.319
<v Speaker 2>And then look at at things now like this camp

326
00:21:06.359 --> 00:21:09.119
<v Speaker 2>now is a beast. It's a huge application and so

327
00:21:09.240 --> 00:21:13.480
<v Speaker 2>many subscriptions. But and they had to go through a

328
00:21:13.519 --> 00:21:17.559
<v Speaker 2>lot of pain to scale that. But if you're starting

329
00:21:17.839 --> 00:21:21.119
<v Speaker 2>something like that, now you've got like at least five

330
00:21:21.160 --> 00:21:23.799
<v Speaker 2>to six years of growth within a single box.

331
00:21:25.400 --> 00:21:29.799
<v Speaker 3>Yeah, I think, I said when they first started back

332
00:21:29.839 --> 00:21:32.559
<v Speaker 3>in like the mid two thousands or whatever, for a

333
00:21:32.759 --> 00:21:36.720
<v Speaker 3>number of years they were running on one physical server. Yeah,

334
00:21:36.799 --> 00:21:39.559
<v Speaker 3>not even virtualization back then, because this is two thousand

335
00:21:39.599 --> 00:21:43.759
<v Speaker 3>and four. So yeah, I'm fully on board with this.

336
00:21:44.079 --> 00:21:47.240
<v Speaker 3>Just rent the VM approach.

337
00:21:48.519 --> 00:21:50.400
<v Speaker 1>Yeah, he said, you're right here. He said, you can

338
00:21:50.440 --> 00:21:52.880
<v Speaker 1>rent a dedicated forty eight cores two hundred and fifty

339
00:21:52.880 --> 00:21:56.880
<v Speaker 1>six gig two terror by AMD epic server from Heatzner

340
00:21:57.400 --> 00:21:59.759
<v Speaker 1>at two hundred and thirty six dollars a month or

341
00:22:00.079 --> 00:22:04.759
<v Speaker 1>undred and thirty six euros a month. Yeah. I mean,

342
00:22:04.799 --> 00:22:07.480
<v Speaker 1>I've I've never had an application that got so much

343
00:22:07.519 --> 00:22:09.480
<v Speaker 1>traffic that that wasn't enough.

344
00:22:10.839 --> 00:22:12.920
<v Speaker 2>Yeah, and those four the eight courses like translate to

345
00:22:13.119 --> 00:22:17.880
<v Speaker 2>ninety six course in cloud speak. So yeah, that's that's

346
00:22:17.920 --> 00:22:21.759
<v Speaker 2>a lot more than many many applications and and a

347
00:22:21.759 --> 00:22:25.400
<v Speaker 2>lot cheaper, h Yeah, than than what what deployments we

348
00:22:25.400 --> 00:22:26.079
<v Speaker 2>see on the cloud.

349
00:22:27.839 --> 00:22:30.119
<v Speaker 3>Yeah, it's crazy how much money you can save when

350
00:22:30.119 --> 00:22:36.440
<v Speaker 3>you cut out complexity. Well, let's let's dig into a

351
00:22:36.480 --> 00:22:39.759
<v Speaker 3>little bit just about sequel Light and its use and

352
00:22:39.960 --> 00:22:43.240
<v Speaker 3>in a web application. So putting light stack and all

353
00:22:43.240 --> 00:22:46.119
<v Speaker 3>the amazing stuff that does, let's put that to one side.

354
00:22:46.160 --> 00:22:50.240
<v Speaker 3>And if I wanted to use sequel light directly with rails,

355
00:22:50.640 --> 00:22:53.440
<v Speaker 3>I know there are some gotchas backups being one main

356
00:22:53.480 --> 00:22:55.680
<v Speaker 3>thing is how do I back up and not lose

357
00:22:55.720 --> 00:22:59.160
<v Speaker 3>my file? And the second thing is I've been looking

358
00:22:59.200 --> 00:23:03.160
<v Speaker 3>through the campfire a code base which is obviously sequel

359
00:23:03.200 --> 00:23:07.680
<v Speaker 3>light ones product from Petty Sound Signals, And the only

360
00:23:07.839 --> 00:23:11.200
<v Speaker 3>thing I could find in there that was like specifically

361
00:23:11.920 --> 00:23:14.440
<v Speaker 3>to do with sequel light in terms of like initialization

362
00:23:14.519 --> 00:23:16.880
<v Speaker 3>and set up with something called a busy handler. So

363
00:23:16.960 --> 00:23:19.400
<v Speaker 3>could you talk what that is and why that's necessary.

364
00:23:20.000 --> 00:23:26.759
<v Speaker 2>Okay, So, originally sequal Light is configured for like really

365
00:23:26.799 --> 00:23:30.079
<v Speaker 2>really embedded use cases, So it is for usage on

366
00:23:30.119 --> 00:23:33.079
<v Speaker 2>a phone and probably between the three of us, like

367
00:23:33.160 --> 00:23:36.960
<v Speaker 2>we have like maybe at least one hundred sequel Light

368
00:23:37.000 --> 00:23:40.680
<v Speaker 2>instances running at this very moment on our phones and computers.

369
00:23:41.079 --> 00:23:45.400
<v Speaker 2>But but this use cases is completely different from the

370
00:23:45.440 --> 00:23:51.519
<v Speaker 2>web application that requires like multiple users accessing it at

371
00:23:51.519 --> 00:23:53.880
<v Speaker 2>the same time as much as possibly as fast as possible.

372
00:23:54.400 --> 00:23:58.279
<v Speaker 2>So there are a few caveats and a few knobs

373
00:23:58.319 --> 00:24:01.759
<v Speaker 2>that he that should be set. What light stack does

374
00:24:01.799 --> 00:24:06.880
<v Speaker 2>it It completely does that by default when it's publishing

375
00:24:06.920 --> 00:24:12.359
<v Speaker 2>its own like Siicula driver to active record and what

376
00:24:13.559 --> 00:24:18.000
<v Speaker 2>there are other gems like fact un minded with Stephen Mark,

377
00:24:18.599 --> 00:24:22.279
<v Speaker 2>he goes, yeah, he has a lot of effort done

378
00:24:22.319 --> 00:24:25.640
<v Speaker 2>in that in that area, and and I think I

379
00:24:25.680 --> 00:24:28.599
<v Speaker 2>think he is helping a lot like the Vanilla's equal

380
00:24:28.640 --> 00:24:32.680
<v Speaker 2>light experience for rails. By the way, one one thing

381
00:24:32.680 --> 00:24:35.079
<v Speaker 2>about let's stack light Steck is not just trailed. It's

382
00:24:35.319 --> 00:24:38.000
<v Speaker 2>basically you can use light stack with Anami and use

383
00:24:38.039 --> 00:24:43.039
<v Speaker 2>it with with Sinatra whatever bring more cute like. But

384
00:24:43.119 --> 00:24:47.400
<v Speaker 2>let us get back to the configuration. So basically what

385
00:24:47.559 --> 00:24:49.799
<v Speaker 2>you need is the following. You need to ensure that

386
00:24:50.559 --> 00:24:53.039
<v Speaker 2>you can do rights while you can do reads. The

387
00:24:53.079 --> 00:24:58.119
<v Speaker 2>default configuration can only either do rights or reads. So

388
00:24:58.240 --> 00:25:00.920
<v Speaker 2>you change the journal in mode from the default which

389
00:25:00.960 --> 00:25:04.160
<v Speaker 2>is delete, to well which is right ahead log. So

390
00:25:04.480 --> 00:25:07.920
<v Speaker 2>in that case you're you can have a writer and

391
00:25:08.160 --> 00:25:11.000
<v Speaker 2>either at the same time, actually an unlimited number of

392
00:25:11.000 --> 00:25:13.559
<v Speaker 2>readers and a writer at the same time. That's the

393
00:25:13.599 --> 00:25:18.480
<v Speaker 2>first configuration. The second thing is which is a little

394
00:25:18.559 --> 00:25:23.119
<v Speaker 2>bit uh tricky, like when when when when connections are

395
00:25:23.119 --> 00:25:26.480
<v Speaker 2>trying to capture the lock on the database, they will

396
00:25:27.000 --> 00:25:29.559
<v Speaker 2>either succeed in getting the lock or fail because another

397
00:25:29.640 --> 00:25:33.680
<v Speaker 2>process capture the lock. And if it fails, then it

398
00:25:33.759 --> 00:25:36.599
<v Speaker 2>will return to you, like ah, siqual Light busy error,

399
00:25:37.480 --> 00:25:39.400
<v Speaker 2>and hence we need to have a busy handler, and

400
00:25:39.440 --> 00:25:41.880
<v Speaker 2>that busy handler what will will do It will capture

401
00:25:41.920 --> 00:25:45.400
<v Speaker 2>that error and not propagated to the application and it

402
00:25:45.400 --> 00:25:48.960
<v Speaker 2>will try again later to capture the lock, which is

403
00:25:49.000 --> 00:25:52.839
<v Speaker 2>basically what what a central server like postrogress would do

404
00:25:53.519 --> 00:25:55.720
<v Speaker 2>in in locking. Of course, its locks are a lot

405
00:25:55.759 --> 00:25:59.240
<v Speaker 2>more fine grained than siqual Light, which is like a

406
00:25:59.279 --> 00:26:02.039
<v Speaker 2>single lock for the all database. And and then you

407
00:26:02.119 --> 00:26:06.720
<v Speaker 2>also have something in the in the transaction type. Sickle

408
00:26:06.799 --> 00:26:09.880
<v Speaker 2>Light has multi transaction types. It has like the the

409
00:26:09.920 --> 00:26:14.799
<v Speaker 2>default which is deferred transactions, and the there's the immediate

410
00:26:15.000 --> 00:26:18.319
<v Speaker 2>and the exclusive transaction. What we do also for the

411
00:26:18.400 --> 00:26:21.799
<v Speaker 2>driver in to run a web application properly is to

412
00:26:22.000 --> 00:26:25.880
<v Speaker 2>make all transactions immediates. What that means is a deferred

413
00:26:25.880 --> 00:26:29.200
<v Speaker 2>transaction is a re transaction that you can midway upgrade

414
00:26:29.240 --> 00:26:32.240
<v Speaker 2>to a right transaction. And and the problem with that

415
00:26:32.440 --> 00:26:36.119
<v Speaker 2>is that if you do this and another transaction has

416
00:26:37.440 --> 00:26:39.960
<v Speaker 2>if you attempt to upgrade the lock and another transaction

417
00:26:40.079 --> 00:26:44.039
<v Speaker 2>already has written to the database, this operation will fail

418
00:26:44.319 --> 00:26:50.240
<v Speaker 2>with a busy like sickle Light busy error. But if

419
00:26:50.279 --> 00:26:52.480
<v Speaker 2>you start with an immediate transaction, then you will have

420
00:26:52.519 --> 00:26:55.440
<v Speaker 2>a right lock right from the beginning of the transaction,

421
00:26:56.240 --> 00:26:59.000
<v Speaker 2>and then you will not have this error again anymore.

422
00:26:59.799 --> 00:27:00.039
<v Speaker 1>So.

423
00:27:00.039 --> 00:27:05.480
<v Speaker 2>So basically the for configuring Siquelight, I think there are

424
00:27:05.519 --> 00:27:08.880
<v Speaker 2>like four main things to do. Change the journey motu al,

425
00:27:10.079 --> 00:27:16.039
<v Speaker 2>set a busy handler, and also configure your memory map

426
00:27:16.559 --> 00:27:19.240
<v Speaker 2>to have like a shared cash across all processes rather

427
00:27:19.279 --> 00:27:25.000
<v Speaker 2>than a cash pair connection. And yeah, and and and

428
00:27:25.400 --> 00:27:28.079
<v Speaker 2>that's it and and set your transactions to medio. These

429
00:27:28.119 --> 00:27:31.119
<v Speaker 2>are the four things that need to be done. Let's

430
00:27:31.160 --> 00:27:35.599
<v Speaker 2>Tack does that automatically. There is also the sequel light

431
00:27:35.720 --> 00:27:41.319
<v Speaker 2>JAM sycal light adapter JAM from Steven also does that.

432
00:27:41.920 --> 00:27:44.519
<v Speaker 2>And I think these some of these are being merged

433
00:27:44.559 --> 00:27:50.960
<v Speaker 2>into into the upstream sickle Light driver for active records.

434
00:27:53.440 --> 00:27:55.799
<v Speaker 3>How do you make these changes? Do you do it?

435
00:27:55.799 --> 00:27:59.640
<v Speaker 3>At Ruby level to run some sequel or how how's

436
00:27:59.680 --> 00:28:01.039
<v Speaker 3>this gon figuration done?

437
00:28:01.559 --> 00:28:05.240
<v Speaker 2>Like in lightstack, it's it's done by by overriding the

438
00:28:05.759 --> 00:28:11.839
<v Speaker 2>sequal light driver and applying these at initialization, making sure

439
00:28:11.880 --> 00:28:14.759
<v Speaker 2>all connections share these attributes.

440
00:28:15.400 --> 00:28:18.839
<v Speaker 1>So this is on the the rails end or the

441
00:28:18.920 --> 00:28:22.039
<v Speaker 1>SEQL end or whatever, not on the sequel light end.

442
00:28:23.119 --> 00:28:25.559
<v Speaker 2>It's it's on the sequel light adapter end or sickle

443
00:28:25.640 --> 00:28:26.400
<v Speaker 2>light driver end.

444
00:28:27.119 --> 00:28:31.640
<v Speaker 1>Basically, so in database to do anything different, you're telling

445
00:28:31.640 --> 00:28:34.920
<v Speaker 1>the application it has to manage its connection this way.

446
00:28:35.880 --> 00:28:39.039
<v Speaker 2>More or less. Yeah, but but at the end of

447
00:28:39.079 --> 00:28:43.359
<v Speaker 2>the day, Raid itself is not aware of that. It's

448
00:28:43.440 --> 00:28:46.240
<v Speaker 2>not it doesn't see that this is happening, that the

449
00:28:46.319 --> 00:28:49.039
<v Speaker 2>changes that are we're going to go upstream will will

450
00:28:49.079 --> 00:28:50.880
<v Speaker 2>bring that knowledge to the rails driver.

451
00:28:51.400 --> 00:28:53.000
<v Speaker 1>Mm hm. That makes sense.

452
00:28:54.960 --> 00:28:59.640
<v Speaker 3>And regarding backups, like is light stream power light stock

453
00:28:59.720 --> 00:29:00.400
<v Speaker 3>or is that no?

454
00:29:00.559 --> 00:29:02.759
<v Speaker 2>Light stream is not part of lightstack, you can use

455
00:29:02.839 --> 00:29:06.720
<v Speaker 2>light stream aside from using lightstack, light Stream is a

456
00:29:06.880 --> 00:29:09.759
<v Speaker 2>very nice tool you can you can basically back up

457
00:29:09.920 --> 00:29:16.000
<v Speaker 2>the database like incrementally and put that on S three.

458
00:29:18.519 --> 00:29:22.559
<v Speaker 2>Like I personally use a different method which I'm trying

459
00:29:22.720 --> 00:29:26.680
<v Speaker 2>to spread as not just possible, but like in in

460
00:29:26.920 --> 00:29:30.240
<v Speaker 2>in in most situations when when you have a VPS

461
00:29:30.480 --> 00:29:32.839
<v Speaker 2>or like a VM on on something like line Ode

462
00:29:32.960 --> 00:29:36.519
<v Speaker 2>or or Digital Ocean or anything, my accommendation would be

463
00:29:36.599 --> 00:29:40.279
<v Speaker 2>to put the database on a replicated volume rather than

464
00:29:40.599 --> 00:29:44.880
<v Speaker 2>on the VM directly. And in that case you have

465
00:29:45.079 --> 00:29:50.039
<v Speaker 2>you have the whole database living in in on the

466
00:29:50.119 --> 00:29:53.799
<v Speaker 2>network basically, and and then if you have a file

467
00:29:53.880 --> 00:29:58.680
<v Speaker 2>system that supports copy on write UH semantics like like

468
00:29:59.559 --> 00:30:02.599
<v Speaker 2>better S or XS, then you can have a backup

469
00:30:02.880 --> 00:30:07.480
<v Speaker 2>in of the whole database in under too many seconds

470
00:30:07.839 --> 00:30:11.119
<v Speaker 2>by just copying the file. And you can have as

471
00:30:11.200 --> 00:30:13.799
<v Speaker 2>many backups of these as you want, like you can

472
00:30:13.880 --> 00:30:16.480
<v Speaker 2>have like a chron that is doing a backup every second,

473
00:30:17.119 --> 00:30:20.039
<v Speaker 2>or all you need to do is open a like

474
00:30:20.319 --> 00:30:23.839
<v Speaker 2>read transactions, take a backup, and it will be consistent.

475
00:30:25.160 --> 00:30:27.240
<v Speaker 2>I have also written about that. I have a blog

476
00:30:27.279 --> 00:30:30.119
<v Speaker 2>post about backup strategies, and I explain some of these,

477
00:30:30.359 --> 00:30:32.839
<v Speaker 2>including light stream, but I don't go deep in there,

478
00:30:33.200 --> 00:30:35.880
<v Speaker 2>but I also explain some of the other options. If

479
00:30:35.960 --> 00:30:42.559
<v Speaker 2>you have like a COW file system, so like if

480
00:30:42.640 --> 00:30:43.599
<v Speaker 2>I was if.

481
00:30:43.480 --> 00:30:48.359
<v Speaker 3>I didn't really care about having like every second of

482
00:30:48.519 --> 00:30:50.880
<v Speaker 3>data like backup, if I wrote like a crown job

483
00:30:50.920 --> 00:30:54.559
<v Speaker 3>to back up the entire database file like every hour

484
00:30:54.720 --> 00:30:56.559
<v Speaker 3>or something like that and upload it to our S

485
00:30:56.599 --> 00:30:59.920
<v Speaker 3>three or some remote storage. That's basically a viable back

486
00:31:00.079 --> 00:31:01.480
<v Speaker 3>cup solution because it's just.

487
00:31:01.559 --> 00:31:05.480
<v Speaker 2>Yes, yeah, but but like let's swim will be even

488
00:31:05.519 --> 00:31:09.599
<v Speaker 2>better here because it does just an incremental update, so

489
00:31:09.839 --> 00:31:14.240
<v Speaker 2>not every second. It just sends the the changes or

490
00:31:14.759 --> 00:31:17.000
<v Speaker 2>as as I as I mentioned on a volume on

491
00:31:17.000 --> 00:31:20.119
<v Speaker 2>applicated volume. Then you have your data applicated across the

492
00:31:20.519 --> 00:31:23.559
<v Speaker 2>data center. You don't need even S three. You just

493
00:31:23.839 --> 00:31:27.359
<v Speaker 2>make a copy a copy CP of the file and

494
00:31:27.480 --> 00:31:29.880
<v Speaker 2>it will be a copy on right and it will

495
00:31:30.039 --> 00:31:34.160
<v Speaker 2>it will, it will. If you have gigs of information,

496
00:31:34.279 --> 00:31:36.799
<v Speaker 2>it will take like two to four milli seconds to copy.

497
00:31:37.519 --> 00:31:40.920
<v Speaker 1>Wow, transactions have completed.

498
00:31:41.559 --> 00:31:44.200
<v Speaker 2>No no, no, It then unrelated to transactions because you

499
00:31:44.640 --> 00:31:47.759
<v Speaker 2>open you open a read transaction and you copy, you

500
00:31:47.799 --> 00:31:51.920
<v Speaker 2>don't get you get snapped. Okay, you get a valid

501
00:31:51.960 --> 00:31:53.240
<v Speaker 2>snapshot of the database.

502
00:31:53.920 --> 00:31:54.240
<v Speaker 1>Okay.

503
00:31:55.599 --> 00:31:58.880
<v Speaker 2>I'm planning to add some some functionality in lightstack that

504
00:31:58.960 --> 00:32:03.559
<v Speaker 2>would do that for you, like open the transaction and

505
00:32:03.640 --> 00:32:06.200
<v Speaker 2>issue the right copy command. But it will not work

506
00:32:06.319 --> 00:32:10.440
<v Speaker 2>if you don't have it will not work efficiently if

507
00:32:10.519 --> 00:32:12.880
<v Speaker 2>you don't have like an XS or better f s

508
00:32:13.480 --> 00:32:14.039
<v Speaker 2>or zfs.

509
00:32:15.839 --> 00:32:20.119
<v Speaker 3>Are there any like other gotchas that someone coming from

510
00:32:20.200 --> 00:32:25.039
<v Speaker 3>a postgraph background. If I'm writing a rails app or

511
00:32:25.039 --> 00:32:28.200
<v Speaker 3>any any web ap, let's not any web app with

512
00:32:28.359 --> 00:32:30.799
<v Speaker 3>sequel Light as a database. Is there anything else I

513
00:32:30.920 --> 00:32:32.279
<v Speaker 3>need to be aware of?

514
00:32:34.799 --> 00:32:38.640
<v Speaker 2>Definitely? And and And that's the biggest concern when when

515
00:32:38.680 --> 00:32:42.359
<v Speaker 2>you're dealing with a database that is not I like

516
00:32:42.559 --> 00:32:45.480
<v Speaker 2>to call it a decentralized embittered database because it doesn't

517
00:32:45.519 --> 00:32:51.480
<v Speaker 2>have a server to coordinate actions, which is basically right

518
00:32:51.599 --> 00:32:58.319
<v Speaker 2>performance and specifically things like creating an index on launch

519
00:32:58.400 --> 00:33:02.240
<v Speaker 2>table and things like that. Because of its nature, Sequelight

520
00:33:02.319 --> 00:33:06.279
<v Speaker 2>will will always take like a lock on the whole

521
00:33:06.359 --> 00:33:09.400
<v Speaker 2>database whenever it's doing the right operation, so only one

522
00:33:09.440 --> 00:33:15.680
<v Speaker 2>writer at a time. Keeping keeping your rights small and

523
00:33:16.119 --> 00:33:19.119
<v Speaker 2>untidy will mean that you get very fast rights like

524
00:33:19.240 --> 00:33:21.480
<v Speaker 2>you can do like tens of thousands of rights per

525
00:33:21.599 --> 00:33:25.200
<v Speaker 2>second and on a syquo light database, and it will

526
00:33:25.359 --> 00:33:30.480
<v Speaker 2>beat any any other database. But if you have really

527
00:33:30.599 --> 00:33:34.279
<v Speaker 2>large rights, any other database on a on a like

528
00:33:34.400 --> 00:33:37.799
<v Speaker 2>a reasonable configuration on the same configuration like a single note.

529
00:33:38.400 --> 00:33:41.079
<v Speaker 2>But if you have really large right transactions that do

530
00:33:41.160 --> 00:33:42.839
<v Speaker 2>a lot of things, especially if you're trying to do

531
00:33:42.960 --> 00:33:47.680
<v Speaker 2>things within the transaction like going to a server or something,

532
00:33:48.640 --> 00:33:51.720
<v Speaker 2>then you're you're hurting the syco light performance a lot,

533
00:33:52.400 --> 00:33:55.759
<v Speaker 2>and and that would while this will degrade other solutions

534
00:33:55.759 --> 00:33:59.519
<v Speaker 2>as well, including postrogression by sequel, they will be a

535
00:33:59.559 --> 00:34:03.839
<v Speaker 2>lot more graceful at providing a chance for other transactions

536
00:34:03.920 --> 00:34:06.640
<v Speaker 2>to run at the same time. Siquo Light will not

537
00:34:06.799 --> 00:34:09.320
<v Speaker 2>be able to do so. So if if you have

538
00:34:09.519 --> 00:34:11.880
<v Speaker 2>like threally large transactions that are trying to do a

539
00:34:11.920 --> 00:34:16.599
<v Speaker 2>lot in writing, you should hopefully avoid that and break

540
00:34:16.599 --> 00:34:21.000
<v Speaker 2>it down, or you will suffer from like queueing right

541
00:34:21.239 --> 00:34:25.039
<v Speaker 2>requests because only one writer at the time. That's one thing.

542
00:34:25.280 --> 00:34:29.000
<v Speaker 2>The other thing is some some some of these are unescapable,

543
00:34:29.519 --> 00:34:34.199
<v Speaker 2>like creating an index. When you create an index, you

544
00:34:34.400 --> 00:34:37.320
<v Speaker 2>have to wait until the index is finished, and it

545
00:34:37.440 --> 00:34:42.880
<v Speaker 2>has to have like a snapshot like a correct state

546
00:34:43.199 --> 00:34:45.840
<v Speaker 2>of the database well being created, so it cannot allow

547
00:34:45.920 --> 00:34:48.679
<v Speaker 2>other writers to write at the same time, even to

548
00:34:48.760 --> 00:34:54.639
<v Speaker 2>other tables. So in that case, creating a creating an

549
00:34:54.679 --> 00:34:58.360
<v Speaker 2>index on the large table, really large table, can actually

550
00:34:59.039 --> 00:35:02.679
<v Speaker 2>take your to debase flying briefly, and is I.

551
00:35:02.719 --> 00:35:06.559
<v Speaker 3>Think I don't know if I am completely making this

552
00:35:06.760 --> 00:35:10.320
<v Speaker 3>up or if I read it somewhere, but is like

553
00:35:10.519 --> 00:35:12.679
<v Speaker 3>N plus one query is a feature rather than a

554
00:35:12.760 --> 00:35:14.480
<v Speaker 3>bug when it comes to sequel.

555
00:35:14.199 --> 00:35:18.880
<v Speaker 2>Life, Yeah, it's it's it's not a feature, per see. Basically,

556
00:35:19.400 --> 00:35:22.159
<v Speaker 2>here's the thing. The overhead of running equity on sequel

557
00:35:22.199 --> 00:35:26.920
<v Speaker 2>light is way way less than running a call across

558
00:35:27.000 --> 00:35:31.800
<v Speaker 2>the network stack, whether locally or remotely. So if you

559
00:35:31.920 --> 00:35:35.960
<v Speaker 2>have en plus ones, they're not as expensive. Of course,

560
00:35:36.079 --> 00:35:39.280
<v Speaker 2>having one running one query instead of like n plus

561
00:35:39.400 --> 00:35:44.440
<v Speaker 2>one queries is cheaper, but the difference is not as

562
00:35:44.760 --> 00:35:48.280
<v Speaker 2>big as with client server database. It's a lot less,

563
00:35:48.840 --> 00:35:51.039
<v Speaker 2>like it could be like fifty percent more or something

564
00:35:51.079 --> 00:35:57.079
<v Speaker 2>depending on end. So in that case, if doing an

565
00:35:57.199 --> 00:36:02.400
<v Speaker 2>en plus one would actually make your call nicer, just

566
00:36:02.480 --> 00:36:06.360
<v Speaker 2>go for it because because it's not as penalizing to

567
00:36:06.480 --> 00:36:12.199
<v Speaker 2>your system as it is with something like uh, something

568
00:36:12.320 --> 00:36:16.000
<v Speaker 2>like my sequel or postrogress. The authors of sequel Light,

569
00:36:16.840 --> 00:36:19.719
<v Speaker 2>they use M plus one intentionally in some cases on

570
00:36:19.800 --> 00:36:25.719
<v Speaker 2>their website and on the Fossil sem system because it

571
00:36:25.920 --> 00:36:32.280
<v Speaker 2>makes things a lot easier and and it makes encapsulation

572
00:36:32.360 --> 00:36:32.760
<v Speaker 2>a lot.

573
00:36:34.679 --> 00:36:37.199
<v Speaker 1>Like I had that beaten out of me. I swear.

574
00:36:39.400 --> 00:36:42.800
<v Speaker 2>Yeah, like I think about it, it's it's an optimization

575
00:36:43.000 --> 00:36:46.400
<v Speaker 2>like eliminating M plus one is an optimization. It's not

576
00:36:46.559 --> 00:36:50.599
<v Speaker 2>something that would make your code look better, right, Actually

577
00:36:50.639 --> 00:36:51.679
<v Speaker 2>it's another way out.

578
00:36:53.239 --> 00:36:56.800
<v Speaker 1>Well, and and it still works, right, it's just fast.

579
00:36:58.480 --> 00:37:03.280
<v Speaker 2>Yes, the the idea in siquolizes is not that big deal.

580
00:37:03.320 --> 00:37:06.760
<v Speaker 2>It's not an issue like of mice for for your

581
00:37:07.320 --> 00:37:10.559
<v Speaker 2>code organization and installation better right.

582
00:37:12.400 --> 00:37:15.280
<v Speaker 3>Yeah, just a different mental model, isn't it, Because yeah,

583
00:37:15.559 --> 00:37:19.440
<v Speaker 3>suddenly database is local.

584
00:37:20.280 --> 00:37:25.840
<v Speaker 2>Imagine if you cannot do partials in in in views,

585
00:37:26.119 --> 00:37:30.159
<v Speaker 2>like you'll have to have those read and do all

586
00:37:30.239 --> 00:37:33.840
<v Speaker 2>the partials inside in line. It's it's exactly the same.

587
00:37:33.960 --> 00:37:38.880
<v Speaker 2>Bushis are more expensive, but but you don't go there

588
00:37:39.039 --> 00:37:41.679
<v Speaker 2>because because then it's a nightmare. Good vice.

589
00:37:43.000 --> 00:37:47.239
<v Speaker 3>True. Yeah, So let's let's pick up on something we're

590
00:37:47.239 --> 00:37:52.440
<v Speaker 3>actually briefly discussing before the show started. But so I

591
00:37:52.880 --> 00:37:56.280
<v Speaker 3>have done a fair amount of work on search and

592
00:37:56.400 --> 00:38:02.360
<v Speaker 3>postgrass the postgas native full tack search, and for the

593
00:38:02.440 --> 00:38:04.320
<v Speaker 3>client I'm working with at the moment, I've altered on

594
00:38:04.480 --> 00:38:09.159
<v Speaker 3>quite elastic search. What what is the search story on

595
00:38:09.280 --> 00:38:12.239
<v Speaker 3>sequel light and does light stock have anything kind of

596
00:38:12.280 --> 00:38:13.039
<v Speaker 3>building upon that.

597
00:38:14.119 --> 00:38:19.000
<v Speaker 2>Yeah. So like syco Light has its own native search

598
00:38:19.039 --> 00:38:22.719
<v Speaker 2>implementation which is called FTS. There are multiple versions of

599
00:38:22.800 --> 00:38:27.159
<v Speaker 2>that three, four, and five. Five is the currently the

600
00:38:27.280 --> 00:38:35.199
<v Speaker 2>most maintained version. So cycle light does have an FDS story.

601
00:38:36.000 --> 00:38:38.480
<v Speaker 2>The problem with the FTS story in Sequo light is

602
00:38:38.639 --> 00:38:42.000
<v Speaker 2>that it is slightly rigid, so you have you have

603
00:38:42.280 --> 00:38:45.760
<v Speaker 2>to have a table that maps to another table in

604
00:38:45.840 --> 00:38:50.400
<v Speaker 2>the database, and the mapping has to be static. If

605
00:38:50.440 --> 00:38:52.360
<v Speaker 2>you change a column you want to add it to

606
00:38:52.559 --> 00:38:56.039
<v Speaker 2>the index, you have to rebuild the whole index. Things

607
00:38:56.079 --> 00:38:59.920
<v Speaker 2>of that sort. In light Stack, we have a light

608
00:39:00.079 --> 00:39:04.599
<v Speaker 2>search component which builds on top off the FTS five

609
00:39:05.079 --> 00:39:08.559
<v Speaker 2>but it also brings a lot of dynamism to it,

610
00:39:09.039 --> 00:39:13.800
<v Speaker 2>so it actually implements like a dynamic layer. It's a lot.

611
00:39:14.519 --> 00:39:18.239
<v Speaker 2>The interface is a lot like mini search, so if

612
00:39:18.280 --> 00:39:20.760
<v Speaker 2>you if you use that, you do the same, you

613
00:39:21.199 --> 00:39:25.199
<v Speaker 2>do define your index almost the same. But then all

614
00:39:25.320 --> 00:39:29.800
<v Speaker 2>this is going down into an FTS five database and

615
00:39:30.360 --> 00:39:34.320
<v Speaker 2>FTI is five module. I'm sorry, so there is I

616
00:39:34.400 --> 00:39:37.920
<v Speaker 2>guess there is a strong search story there and the

617
00:39:38.000 --> 00:39:42.960
<v Speaker 2>performance is amazing. Like you have to see I have

618
00:39:43.119 --> 00:39:47.519
<v Speaker 2>that blog comparing Mini Search to and then you have

619
00:39:47.599 --> 00:39:50.280
<v Speaker 2>that in the benchmarks as well on the rippot Meli

620
00:39:50.320 --> 00:39:53.960
<v Speaker 2>search to FTS five and I kept repeating the benchmarks

621
00:39:53.960 --> 00:39:58.920
<v Speaker 2>because they couldn't couldn't believe the results. Like uh, Emali

622
00:39:59.000 --> 00:40:01.719
<v Speaker 2>searches has a lot more functionality, I would say, so

623
00:40:02.000 --> 00:40:06.239
<v Speaker 2>Vanilla FTS five doesn't have, for example, like something like

624
00:40:06.960 --> 00:40:10.159
<v Speaker 2>type of tolerance, and and you need to add some

625
00:40:10.320 --> 00:40:15.199
<v Speaker 2>modules in order to support multiple languages. But aside from

626
00:40:15.440 --> 00:40:20.639
<v Speaker 2>multiple languages and type of tolerance, the performance difference is

627
00:40:22.440 --> 00:40:24.079
<v Speaker 2>like it has to be seen to be.

628
00:40:24.119 --> 00:40:29.440
<v Speaker 3>Believed, okay, uh And is that like just in like

629
00:40:30.360 --> 00:40:34.880
<v Speaker 3>performance as in time, the time it takes. How the

630
00:40:34.960 --> 00:40:38.880
<v Speaker 3>performance with regards accuracy accuracy.

631
00:40:39.199 --> 00:40:44.519
<v Speaker 2>That's that's a different thing. Yeah, yeah, that's that's a

632
00:40:44.639 --> 00:40:48.800
<v Speaker 2>lot harder to measure. But but at the same time,

633
00:40:49.920 --> 00:40:53.119
<v Speaker 2>it's it's an own quantity. Like working in l P

634
00:40:53.519 --> 00:40:57.960
<v Speaker 2>is has like this. The industry has been has been

635
00:40:58.000 --> 00:41:00.159
<v Speaker 2>done that for long and then the tools to to

636
00:41:00.280 --> 00:41:05.000
<v Speaker 2>produce those are already there. So while while type of

637
00:41:05.039 --> 00:41:08.239
<v Speaker 2>toolerance is not there by default, you can actually implement

638
00:41:08.320 --> 00:41:14.440
<v Speaker 2>that there is. There is stemming using the traditional stemmers

639
00:41:14.519 --> 00:41:19.280
<v Speaker 2>from snowballs like porter and others, and and these are

640
00:41:19.440 --> 00:41:22.599
<v Speaker 2>mostly the stammers that are used by almost all implementations.

641
00:41:22.639 --> 00:41:28.159
<v Speaker 2>If we're talking about Latin based languages and Latin alphabets,

642
00:41:28.199 --> 00:41:34.559
<v Speaker 2>basically and and and and and then aside aside from that,

643
00:41:34.679 --> 00:41:38.079
<v Speaker 2>it's just typeotolerance that's the difference. So you get you get,

644
00:41:39.000 --> 00:41:42.119
<v Speaker 2>you get near search, you get race search, you get

645
00:41:42.400 --> 00:41:44.760
<v Speaker 2>like you can mix and match and or and and

646
00:41:45.119 --> 00:41:48.360
<v Speaker 2>things like that. You have perfect search all all the

647
00:41:49.119 --> 00:41:55.960
<v Speaker 2>all the known suspects basically, So from a search quality perspective,

648
00:41:56.039 --> 00:42:00.920
<v Speaker 2>I believe it's a The biggest difference is type, type

649
00:42:00.920 --> 00:42:05.320
<v Speaker 2>of tolerance and fuzzy support, which is basically are basically

650
00:42:05.440 --> 00:42:05.760
<v Speaker 2>the same.

651
00:42:06.159 --> 00:42:06.840
<v Speaker 1>This is not there.

652
00:42:07.440 --> 00:42:09.960
<v Speaker 2>But aside from that, you get you get, you get

653
00:42:10.039 --> 00:42:13.679
<v Speaker 2>everything that you would get with the typical search engine

654
00:42:14.960 --> 00:42:19.840
<v Speaker 2>like plastic Mealy or swings or things like that.

655
00:42:20.559 --> 00:42:22.719
<v Speaker 3>That's a pretty solid story, to be honest, I wasn't

656
00:42:22.760 --> 00:42:24.119
<v Speaker 3>expecting it to be that solid.

657
00:42:25.519 --> 00:42:29.719
<v Speaker 2>It is. It is a very it's strange like the

658
00:42:30.239 --> 00:42:35.760
<v Speaker 2>sique Light team, all two of them, they produce very

659
00:42:36.039 --> 00:42:39.920
<v Speaker 2>very solid software and components, and they build so many

660
00:42:40.000 --> 00:42:47.199
<v Speaker 2>things from scratch it's it's mind boggling. And yeah, I

661
00:42:47.239 --> 00:42:49.039
<v Speaker 2>would love more people to actually use these.

662
00:42:50.360 --> 00:42:55.239
<v Speaker 1>So what I'm curious about is and and It's funny

663
00:42:55.280 --> 00:42:57.679
<v Speaker 1>because you mentioned you've been doing this since two thousand

664
00:42:57.679 --> 00:43:00.880
<v Speaker 1>and five, and I got into Ruby and Rails in

665
00:43:00.920 --> 00:43:03.800
<v Speaker 1>two thousand and six, so I've kind of seen a

666
00:43:03.840 --> 00:43:06.599
<v Speaker 1>lot of the same stuff come and go. What changed, right,

667
00:43:06.639 --> 00:43:10.199
<v Speaker 1>because back then, sequel light, yeah, it was the default

668
00:43:10.239 --> 00:43:13.599
<v Speaker 1>when you ran Rails without any flag for the database,

669
00:43:14.159 --> 00:43:17.880
<v Speaker 1>but it was essentially understood that, yeah, you're probably going

670
00:43:18.000 --> 00:43:21.679
<v Speaker 1>to replace this with another database. So what changed to

671
00:43:21.760 --> 00:43:24.599
<v Speaker 1>the point where now people are realistically looking at this

672
00:43:24.719 --> 00:43:27.159
<v Speaker 1>and going, huh, I could run this in production?

673
00:43:27.920 --> 00:43:31.360
<v Speaker 2>Yeah, I guess. I guess this impression that sequel light

674
00:43:31.559 --> 00:43:35.920
<v Speaker 2>is just like something to start with or even to

675
00:43:36.039 --> 00:43:39.119
<v Speaker 2>use just for testing was the norm, and it was

676
00:43:39.280 --> 00:43:42.440
<v Speaker 2>understandable because many of the features that we're talking about,

677
00:43:42.840 --> 00:43:48.559
<v Speaker 2>they happened over the years. So, right, headlog mode was

678
00:43:48.639 --> 00:43:50.840
<v Speaker 2>not there. I'm not sure if it was there on

679
00:43:50.920 --> 00:43:53.360
<v Speaker 2>two thousand and five. I guess it was, but many

680
00:43:53.440 --> 00:43:56.239
<v Speaker 2>of the other features around it were not. And now

681
00:43:56.800 --> 00:44:01.880
<v Speaker 2>you see how how those features came together and made

682
00:44:02.079 --> 00:44:06.360
<v Speaker 2>Siquolide that rich. By the way, it also when you

683
00:44:06.440 --> 00:44:09.159
<v Speaker 2>build it, it comes with a geopoly database and like

684
00:44:10.000 --> 00:44:12.679
<v Speaker 2>you can you can do like distance calculations, and stuff

685
00:44:12.679 --> 00:44:15.760
<v Speaker 2>like that. And this is based indexes and many other

686
00:44:15.840 --> 00:44:19.320
<v Speaker 2>features like it's it's it has grown a lot and

687
00:44:19.760 --> 00:44:23.199
<v Speaker 2>is now capable a lot, and I think people are

688
00:44:23.239 --> 00:44:26.559
<v Speaker 2>starting to realize that, yeah, I might not need a

689
00:44:26.639 --> 00:44:31.000
<v Speaker 2>lot more than that, especially with the advancement in hardware

690
00:44:31.199 --> 00:44:34.559
<v Speaker 2>that is happening in parallel. So you get these two.

691
00:44:34.639 --> 00:44:37.199
<v Speaker 2>Now you can have like a single box that can

692
00:44:37.280 --> 00:44:39.519
<v Speaker 2>do a lot and a piece of software that is

693
00:44:39.599 --> 00:44:43.880
<v Speaker 2>capable of like managing all your data and your data requirements.

694
00:44:44.320 --> 00:44:46.199
<v Speaker 2>And and what I'm trying to do with light stack

695
00:44:46.320 --> 00:44:49.679
<v Speaker 2>is to build that layer between both, like your data

696
00:44:49.760 --> 00:44:53.199
<v Speaker 2>layer and your application that is friction free, like no

697
00:44:53.320 --> 00:44:55.920
<v Speaker 2>configuration required, you don't need to do anything.

698
00:44:56.280 --> 00:44:59.679
<v Speaker 1>Yeah, that makes sense, and it's it's kind of exciting

699
00:44:59.800 --> 00:45:03.119
<v Speaker 1>just to see that, Yeah, somebody could really reliably come

700
00:45:03.159 --> 00:45:05.960
<v Speaker 1>in and and do a lot of this stuff. It's

701
00:45:06.119 --> 00:45:08.480
<v Speaker 1>it's funny too because and then I'm working on a

702
00:45:08.519 --> 00:45:11.599
<v Speaker 1>different layer than you are. But I've been working on

703
00:45:11.679 --> 00:45:17.719
<v Speaker 1>pulling together rails Composer, which I actually got the domain

704
00:45:17.800 --> 00:45:20.119
<v Speaker 1>from Daniel Keho, and I've been working on pulling this together.

705
00:45:20.199 --> 00:45:23.239
<v Speaker 1>It's the same idea, right, It's I need these areas

706
00:45:23.280 --> 00:45:26.559
<v Speaker 1>of functionality in my application, and so right, I pull

707
00:45:26.639 --> 00:45:28.880
<v Speaker 1>in one gem and then I can just run generators

708
00:45:28.960 --> 00:45:32.599
<v Speaker 1>and have it right, Yes, exactly, And so you know

709
00:45:32.719 --> 00:45:34.639
<v Speaker 1>with this it's the same deal where it's I pull

710
00:45:34.719 --> 00:45:38.679
<v Speaker 1>in light Stack and then I immediately have the capabilities

711
00:45:38.719 --> 00:45:41.159
<v Speaker 1>I need to run a modern Ruby on rails app.

712
00:45:42.159 --> 00:45:46.519
<v Speaker 2>Yeah, almost almost all your data requirements are already fulfilled.

713
00:45:47.360 --> 00:45:50.800
<v Speaker 2>Google a great application. And don't bother about the infrastructure,

714
00:45:51.000 --> 00:45:57.039
<v Speaker 2>don't pay for DevOps like eliminate all these points of

715
00:45:57.320 --> 00:46:01.760
<v Speaker 2>like pain, headache and and and mon uh spending.

716
00:46:02.159 --> 00:46:05.280
<v Speaker 1>So are there people out there currently running their production

717
00:46:05.440 --> 00:46:08.079
<v Speaker 1>apps in with light stack?

718
00:46:08.559 --> 00:46:11.239
<v Speaker 2>Some some I know, yes, uh, and and some are

719
00:46:11.320 --> 00:46:14.239
<v Speaker 2>are running light stack on no staging like I know

720
00:46:14.360 --> 00:46:19.719
<v Speaker 2>of a large, large Ruby app that uh their environment

721
00:46:20.079 --> 00:46:23.679
<v Speaker 2>staging environment was switched to light stack overnight without even

722
00:46:23.719 --> 00:46:27.960
<v Speaker 2>the developers knowing. And they they didn't know except after

723
00:46:29.039 --> 00:46:30.719
<v Speaker 2>pondering why everything is much faster.

724
00:46:33.440 --> 00:46:35.400
<v Speaker 3>That is a sales prige and a half.

725
00:46:36.079 --> 00:46:38.119
<v Speaker 1>I was gonna say, you're making me feel stupid for

726
00:46:38.239 --> 00:46:40.320
<v Speaker 1>not trying this. Yeah, I think.

727
00:46:40.400 --> 00:46:44.280
<v Speaker 2>I think the idea is if if you're if you're

728
00:46:44.360 --> 00:46:48.920
<v Speaker 2>if you're building something and starting, it's really unwise to

729
00:46:49.079 --> 00:46:53.960
<v Speaker 2>add to to go on a more complex path, you

730
00:46:54.000 --> 00:46:57.079
<v Speaker 2>should you should go with the least resistance path until

731
00:46:57.199 --> 00:47:01.360
<v Speaker 2>it starts resisting you. And hopefully it will never resist you.

732
00:47:01.960 --> 00:47:03.920
<v Speaker 2>We'll never show you that fiction.

733
00:47:05.440 --> 00:47:07.760
<v Speaker 1>Yeah, you're speaking my language here. I mean, this is

734
00:47:08.679 --> 00:47:11.000
<v Speaker 1>where and I picked some of this up from reading

735
00:47:11.039 --> 00:47:17.199
<v Speaker 1>Ayush's book The Rails and hot Wire Codex, where essentially,

736
00:47:17.320 --> 00:47:19.760
<v Speaker 1>right he walks you through I mean the first what third,

737
00:47:19.920 --> 00:47:22.480
<v Speaker 1>almost half of the book is you know, building the

738
00:47:22.519 --> 00:47:25.719
<v Speaker 1>authentication piece. But you know, I got through it and

739
00:47:25.800 --> 00:47:30.079
<v Speaker 1>I was just like, this, this is not as hard

740
00:47:30.159 --> 00:47:33.360
<v Speaker 1>as I thought. And right, I kind of get all

741
00:47:33.440 --> 00:47:35.400
<v Speaker 1>of the niceties that I want out of it because

742
00:47:35.440 --> 00:47:40.760
<v Speaker 1>I understand it. And you know, yeah, anyway it appeals

743
00:47:40.800 --> 00:47:42.880
<v Speaker 1>to me in that same way because I'm looking at

744
00:47:42.920 --> 00:47:46.079
<v Speaker 1>it and going, Okay, you know the underlying engine for

745
00:47:46.119 --> 00:47:49.880
<v Speaker 1>this thing, which is essentially rack and the database, you know,

746
00:47:50.239 --> 00:47:54.000
<v Speaker 1>that's stuff that I don't want to fiddle with, right, Yeah,

747
00:47:54.119 --> 00:47:56.119
<v Speaker 1>and I can just rest everything on top.

748
00:47:55.960 --> 00:48:00.480
<v Speaker 2>Of it, exactly pushing that complexity away from you and

749
00:48:00.639 --> 00:48:06.679
<v Speaker 2>hiding it completely versus exposing every complexity. Like if you're

750
00:48:06.920 --> 00:48:11.119
<v Speaker 2>trying to deal with the traditional app you'll have to

751
00:48:11.320 --> 00:48:14.719
<v Speaker 2>think of many things, including like where should I put

752
00:48:14.760 --> 00:48:18.719
<v Speaker 2>my cash, where should I put my Do I have

753
00:48:18.840 --> 00:48:21.519
<v Speaker 2>a single radius incense for all of these or do

754
00:48:21.639 --> 00:48:24.679
<v Speaker 2>I have to split them? And how now that I'm

755
00:48:24.719 --> 00:48:28.239
<v Speaker 2>scaling anyways, how do I scale these components as well?

756
00:48:28.840 --> 00:48:32.360
<v Speaker 2>Because you can add application servers, but then your database

757
00:48:32.760 --> 00:48:36.519
<v Speaker 2>will need to scale. So the nice thing with with

758
00:48:36.719 --> 00:48:40.400
<v Speaker 2>vertically scaling that you scale both together. You don't scale everything,

759
00:48:41.000 --> 00:48:44.960
<v Speaker 2>but but with with like a client server architecture, you

760
00:48:45.159 --> 00:48:47.159
<v Speaker 2>have to separately scale each one.

761
00:48:48.559 --> 00:48:53.960
<v Speaker 3>Does so again coming from my postgrap postgrass brain, like

762
00:48:54.280 --> 00:48:58.840
<v Speaker 3>that's what my background is in. So yeah, two questions again,

763
00:48:58.920 --> 00:49:01.559
<v Speaker 3>trying to find equivalent for postgress. Is there is that

764
00:49:01.679 --> 00:49:05.360
<v Speaker 3>like a Jason Bee column and sequel light or any equivalent.

765
00:49:07.559 --> 00:49:11.599
<v Speaker 2>Yes, but it's a different formats. It's equal its own format.

766
00:49:11.760 --> 00:49:13.960
<v Speaker 2>So you cannot get a jacon b record from here

767
00:49:14.000 --> 00:49:15.719
<v Speaker 2>and just put it there. You have to convert it

768
00:49:15.760 --> 00:49:19.119
<v Speaker 2>to jason first. But but yeah, it has it has.

769
00:49:19.159 --> 00:49:24.119
<v Speaker 1>J befo serialize it and then serialize it in the

770
00:49:24.199 --> 00:49:24.840
<v Speaker 1>other database.

771
00:49:25.239 --> 00:49:27.880
<v Speaker 2>But but but almost all the jacent functions that you'd

772
00:49:28.000 --> 00:49:31.719
<v Speaker 2>expect are there for both the adjacent text format and

773
00:49:31.760 --> 00:49:32.719
<v Speaker 2>the JCNB format.

774
00:49:33.360 --> 00:49:35.519
<v Speaker 3>Oh wow, so you can like query for stuff that's

775
00:49:35.880 --> 00:49:37.880
<v Speaker 3>inside and you.

776
00:49:37.920 --> 00:49:40.760
<v Speaker 2>Can create an index on an a adjacent field and

777
00:49:41.039 --> 00:49:42.679
<v Speaker 2>you can Yeah.

778
00:49:42.800 --> 00:49:46.400
<v Speaker 3>Nice. And another thing I use quite often, especially to

779
00:49:46.559 --> 00:49:49.880
<v Speaker 3>like just like filter stuff in a UI is UH

780
00:49:50.639 --> 00:49:53.280
<v Speaker 3>like and I like queries, and I use the program

781
00:49:53.440 --> 00:49:58.719
<v Speaker 3>program indexes and UH in postgress speed those up. So yeah,

782
00:49:58.760 --> 00:50:01.440
<v Speaker 3>we spoke about full texa. But like, is trigram a

783
00:50:01.559 --> 00:50:03.760
<v Speaker 3>thing in one One of.

784
00:50:03.800 --> 00:50:09.119
<v Speaker 2>The one of the UH tokenizers available by default is

785
00:50:09.199 --> 00:50:12.079
<v Speaker 2>the trigram togonizer in FTS five. So you can have

786
00:50:12.159 --> 00:50:13.039
<v Speaker 2>a trigram.

787
00:50:13.159 --> 00:50:15.519
<v Speaker 3>Okay, and that will help it like with like, and

788
00:50:15.639 --> 00:50:19.719
<v Speaker 3>I like es exactly. Why don't I you equal light again?

789
00:50:23.639 --> 00:50:26.679
<v Speaker 1>So yeah, here's another Oh go ahead.

790
00:50:27.119 --> 00:50:29.159
<v Speaker 2>Yeah, I wanted to mention that I also have an

791
00:50:29.159 --> 00:50:33.199
<v Speaker 2>extension for sequel light that uses roaring bit maps, so

792
00:50:33.360 --> 00:50:38.519
<v Speaker 2>you can create facets for your search results. Like you

793
00:50:38.679 --> 00:50:42.000
<v Speaker 2>have like a search index, and you want to generate

794
00:50:42.679 --> 00:50:46.440
<v Speaker 2>distributions of results. So you have like you get your

795
00:50:46.480 --> 00:50:48.440
<v Speaker 2>social books, for example, and you want to see see

796
00:50:48.519 --> 00:50:50.880
<v Speaker 2>in that search how many of those books are in

797
00:50:51.199 --> 00:50:54.639
<v Speaker 2>watch contigorties and this this, this can be done using

798
00:50:55.039 --> 00:50:57.400
<v Speaker 2>maps in like a blink of an eye, like under

799
00:50:57.519 --> 00:51:01.559
<v Speaker 2>under ten milli seconds, you get get so many statistics

800
00:51:01.760 --> 00:51:05.519
<v Speaker 2>stuff like you see on Amazon, like those things and

801
00:51:05.599 --> 00:51:07.519
<v Speaker 2>how many of those are red, and how many are blue?

802
00:51:07.760 --> 00:51:10.800
<v Speaker 2>How many are at that price, so many of that price.

803
00:51:11.280 --> 00:51:14.320
<v Speaker 2>All these those things can be done like almost matterally

804
00:51:14.400 --> 00:51:17.039
<v Speaker 2>in sequel light very cool.

805
00:51:17.199 --> 00:51:19.760
<v Speaker 1>So I'm wondering. You mentioned that there was a company

806
00:51:19.840 --> 00:51:23.679
<v Speaker 1>that switched over to light stack overnight, and I'm wondering

807
00:51:23.760 --> 00:51:26.039
<v Speaker 1>what that process looks like. I mean, I would imagine that,

808
00:51:26.800 --> 00:51:28.639
<v Speaker 1>you know, kind of the queueing and things like that,

809
00:51:28.960 --> 00:51:34.159
<v Speaker 1>but you know, are probably pretty easy, right because the

810
00:51:34.280 --> 00:51:36.760
<v Speaker 1>job's either been run or it's not, so you know,

811
00:51:37.239 --> 00:51:40.320
<v Speaker 1>pull the job from something else. But I'm looking at

812
00:51:41.559 --> 00:51:44.159
<v Speaker 1>like my data on some of my apps, and some

813
00:51:44.320 --> 00:51:47.639
<v Speaker 1>of it's kind of hairy, and so I'm wondering, Okay,

814
00:51:47.760 --> 00:51:49.119
<v Speaker 1>you know, what would it take for me to go

815
00:51:50.199 --> 00:51:52.880
<v Speaker 1>in and do you mean my.

816
00:51:56.440 --> 00:51:58.719
<v Speaker 2>Sequel in table like like table.

817
00:51:58.880 --> 00:52:02.480
<v Speaker 1>Yeah, I guess it's the state of my models that

818
00:52:02.519 --> 00:52:04.960
<v Speaker 1>I'm not happy with, not necessarily the state of the data.

819
00:52:05.239 --> 00:52:09.559
<v Speaker 2>Yeah, that that's one one level above. Yeah, the problem

820
00:52:09.599 --> 00:52:13.880
<v Speaker 2>we're dealing with. It's completely opaque for the models. So

821
00:52:14.000 --> 00:52:22.360
<v Speaker 2>you just you that's an option, yes, somehow, and you

822
00:52:22.480 --> 00:52:24.840
<v Speaker 2>can do a sequel lump and and and just copy

823
00:52:24.960 --> 00:52:27.760
<v Speaker 2>that over, or you can do a What what I'm

824
00:52:28.079 --> 00:52:30.679
<v Speaker 2>trying to work on is to do an import export

825
00:52:30.840 --> 00:52:34.199
<v Speaker 2>at the active record level so that you can easily

826
00:52:34.800 --> 00:52:37.159
<v Speaker 2>pointed to that database and that detabaate and then the

827
00:52:37.239 --> 00:52:41.960
<v Speaker 2>data gets migrated with active record semantics, so any any

828
00:52:42.039 --> 00:52:46.159
<v Speaker 2>potential compatibility issues are just washed away.

829
00:52:47.400 --> 00:52:48.480
<v Speaker 1>Oh wow, that would be cool.

830
00:52:49.320 --> 00:52:53.320
<v Speaker 2>Yeah, like like active record does have this machinery already,

831
00:52:53.559 --> 00:52:59.199
<v Speaker 2>or just need to do it together, right, or you

832
00:52:59.280 --> 00:53:01.719
<v Speaker 2>can dump. But the way you can dump in active

833
00:53:01.760 --> 00:53:09.039
<v Speaker 2>record h format basically huh, and and the store after

834
00:53:09.119 --> 00:53:09.920
<v Speaker 2>you change the driver.

835
00:53:10.760 --> 00:53:12.840
<v Speaker 1>Yeah. The only other thing that I'm thinking about with

836
00:53:13.000 --> 00:53:17.400
<v Speaker 1>my setup is so I've been using camal to deploy

837
00:53:17.719 --> 00:53:23.400
<v Speaker 1>and it puts the traffic load balancer the way I

838
00:53:23.480 --> 00:53:25.559
<v Speaker 1>haven't set up. I have a traffic load balancer in

839
00:53:25.599 --> 00:53:30.159
<v Speaker 1>front of two application nodes, so effectively I would have

840
00:53:30.239 --> 00:53:32.159
<v Speaker 1>to get rid of one of those. I wouldn't need

841
00:53:32.199 --> 00:53:33.039
<v Speaker 1>traffic anymore.

842
00:53:34.039 --> 00:53:37.519
<v Speaker 2>Right, yes, but but if if they are on the

843
00:53:37.599 --> 00:53:40.440
<v Speaker 2>same machine, then you can have a volume.

844
00:53:40.880 --> 00:53:43.719
<v Speaker 1>Right you volume for the doctor containers.

845
00:53:43.840 --> 00:53:47.599
<v Speaker 2>Yeah, and they can share it but it's it's much

846
00:53:47.760 --> 00:53:51.000
<v Speaker 2>much more straightforward to guys you just have one.

847
00:53:51.440 --> 00:53:51.639
<v Speaker 1>Yeah.

848
00:53:53.800 --> 00:53:58.199
<v Speaker 2>The nice thing about having two is it makes like

849
00:53:59.480 --> 00:54:05.079
<v Speaker 2>zero down to deployment is easier, but it is double

850
00:54:05.119 --> 00:54:08.920
<v Speaker 2>still with one, and that's something we Yeah, that's a

851
00:54:09.000 --> 00:54:11.159
<v Speaker 2>topic that I want to add ass at one point.

852
00:54:11.880 --> 00:54:13.199
<v Speaker 1>You can address it now if you want.

853
00:54:13.519 --> 00:54:19.280
<v Speaker 2>No, I mean there's I mean condition yes, yeah, yeah, yeah,

854
00:54:20.480 --> 00:54:22.760
<v Speaker 2>like maybe maybe a light deploy of something.

855
00:54:24.039 --> 00:54:26.480
<v Speaker 1>That'd be interesting because.

856
00:54:27.000 --> 00:54:34.280
<v Speaker 2>Almost almost almost all modern applications of support like zero

857
00:54:34.360 --> 00:54:38.760
<v Speaker 2>down time deployments, right and zero downtime resorts. So you

858
00:54:39.079 --> 00:54:42.920
<v Speaker 2>definitely lose some of the web socket connections, but that's it.

859
00:54:44.360 --> 00:54:45.880
<v Speaker 2>Even other connections can can.

860
00:54:45.880 --> 00:54:49.400
<v Speaker 1>Remain not well, especially if you're using something like camal

861
00:54:49.559 --> 00:54:52.480
<v Speaker 1>with doctor base. Right, you just wait till the other

862
00:54:53.320 --> 00:54:55.920
<v Speaker 1>the other I wanted the same machine the other container

863
00:54:56.039 --> 00:54:59.960
<v Speaker 1>is running, yeah, and then it's okay, now everything new

864
00:55:00.159 --> 00:55:01.639
<v Speaker 1>goes to this one and when the other one's done,

865
00:55:01.679 --> 00:55:02.280
<v Speaker 1>you just kill it.

866
00:55:02.719 --> 00:55:04.880
<v Speaker 2>And I think I think that's one of the nice

867
00:55:04.960 --> 00:55:08.239
<v Speaker 2>things about this setup that yeah, many many of the

868
00:55:08.360 --> 00:55:13.000
<v Speaker 2>issues that people thought they're gonna face with with similar

869
00:55:13.440 --> 00:55:19.039
<v Speaker 2>setups are actually addressed. And yeah, I would definitely recommend

870
00:55:20.079 --> 00:55:24.599
<v Speaker 2>giving giving that smallish stack a go and then see

871
00:55:24.599 --> 00:55:27.480
<v Speaker 2>if if it works for you. And if you're starting

872
00:55:27.519 --> 00:55:30.840
<v Speaker 2>something new, just just don't just don't bother, don't bother

873
00:55:30.920 --> 00:55:33.159
<v Speaker 2>with the complex that is.

874
00:55:33.199 --> 00:55:35.519
<v Speaker 3>There is there a use case where you would say,

875
00:55:36.599 --> 00:55:39.199
<v Speaker 3>don't start it's equel light or light stack.

876
00:55:40.639 --> 00:55:43.920
<v Speaker 2>Let me think, so, maybe if there is a use

877
00:55:44.000 --> 00:55:46.920
<v Speaker 2>case where there's something that is someone that is writing

878
00:55:47.119 --> 00:55:52.159
<v Speaker 2>huge records in a database, uh and and like we're

879
00:55:52.199 --> 00:55:57.199
<v Speaker 2>talking gigabytes, maybe some people do that, some people and

880
00:55:57.360 --> 00:56:00.000
<v Speaker 2>and and that's like the core of what they're doing,

881
00:56:01.079 --> 00:56:04.159
<v Speaker 2>then definitely you need something that can spread that data

882
00:56:04.400 --> 00:56:08.920
<v Speaker 2>over a larger surface in terms of files. If you're

883
00:56:08.960 --> 00:56:12.280
<v Speaker 2>doing like a network or even a distributed database eventually,

884
00:56:12.840 --> 00:56:15.159
<v Speaker 2>but syco light will not be the database for you.

885
00:56:15.960 --> 00:56:16.400
<v Speaker 1>This is not.

886
00:56:19.000 --> 00:56:23.159
<v Speaker 2>Or not necessarily gigabytes or you're like treading in that area,

887
00:56:23.280 --> 00:56:28.920
<v Speaker 2>like eight hundred megabyte filees still very large. Other than that,

888
00:56:29.159 --> 00:56:34.880
<v Speaker 2>I think, I think it it could be a case

889
00:56:34.920 --> 00:56:37.599
<v Speaker 2>by case basis. But if you also have an application

890
00:56:37.639 --> 00:56:40.559
<v Speaker 2>where so many people are writing at the same time

891
00:56:40.960 --> 00:56:46.679
<v Speaker 2>something big relatively that or doing like complex right transaction,

892
00:56:47.159 --> 00:56:49.159
<v Speaker 2>syco light is a NOG But if you have so

893
00:56:49.280 --> 00:56:53.199
<v Speaker 2>many people doing smallest transactions. Cycle light is smare than enough.

894
00:56:54.159 --> 00:56:57.559
<v Speaker 2>It would be even faster than the typical solutions. So yeah,

895
00:56:57.800 --> 00:57:01.360
<v Speaker 2>I would. I would. I would say, like you'd need

896
00:57:01.519 --> 00:57:05.000
<v Speaker 2>to have a strong case against using Syqule light to

897
00:57:05.119 --> 00:57:05.960
<v Speaker 2>not use Siquo light.

898
00:57:06.199 --> 00:57:08.880
<v Speaker 1>So do you see this becoming kind of the thing

899
00:57:08.960 --> 00:57:10.960
<v Speaker 1>that people reach for in the future by default?

900
00:57:11.920 --> 00:57:14.440
<v Speaker 2>I hope that would be the case, Like that's the

901
00:57:14.679 --> 00:57:19.400
<v Speaker 2>that's the future. I see that. Yeah, Like why why

902
00:57:19.519 --> 00:57:23.000
<v Speaker 2>go through the complex route if if I have something simpler?

903
00:57:24.119 --> 00:57:28.880
<v Speaker 2>And I think it just makes sense to simplify things,

904
00:57:29.199 --> 00:57:34.480
<v Speaker 2>like this industry has suffered a lot from breeding complexity,

905
00:57:35.239 --> 00:57:39.760
<v Speaker 2>Like we've been doing really really complex setups, especially in

906
00:57:39.960 --> 00:57:44.280
<v Speaker 2>in the front end. Then infrastructure domains just because people

907
00:57:44.360 --> 00:57:47.599
<v Speaker 2>wanted to play with with different stuff. And I think

908
00:57:47.679 --> 00:57:51.880
<v Speaker 2>it's it's about time we and it's it's it's helping

909
00:57:51.960 --> 00:57:56.280
<v Speaker 2>that the VC money is drying, So I guess I

910
00:57:56.320 --> 00:57:59.480
<v Speaker 2>guess it's it's it's about time to to realize that

911
00:57:59.599 --> 00:58:03.719
<v Speaker 2>we need build applications, not not build resumes, and focus

912
00:58:03.840 --> 00:58:06.719
<v Speaker 2>on on what we're trying to deliver the value that

913
00:58:06.800 --> 00:58:10.840
<v Speaker 2>we're trying to deliver that rather than this is my stack,

914
00:58:11.039 --> 00:58:14.840
<v Speaker 2>this is my front end like stack and things like that.

915
00:58:15.280 --> 00:58:17.719
<v Speaker 2>This is not this is not what what people should

916
00:58:17.719 --> 00:58:20.760
<v Speaker 2>be bothered with. And if your engineering team is actually

917
00:58:20.840 --> 00:58:24.239
<v Speaker 2>focused on what type of stack they're building of consulted

918
00:58:24.320 --> 00:58:26.440
<v Speaker 2>with a lot of teams, and I've seen teams that

919
00:58:26.559 --> 00:58:28.679
<v Speaker 2>would would talk to me about the technologies they are

920
00:58:28.760 --> 00:58:32.840
<v Speaker 2>using rather than what value they're they're delivering or building.

921
00:58:33.440 --> 00:58:35.199
<v Speaker 2>Then then you're you're in the wrong place.

922
00:58:36.360 --> 00:58:37.119
<v Speaker 3>Yeah, I've been there.

923
00:58:37.599 --> 00:58:40.039
<v Speaker 2>Yeah, Yeah, it's it's it's it's not fun like seeing

924
00:58:40.239 --> 00:58:42.920
<v Speaker 2>seeing really complex stacks and you ask how many users

925
00:58:42.960 --> 00:58:44.760
<v Speaker 2>do you have and they tell you we have two

926
00:58:44.840 --> 00:58:49.360
<v Speaker 2>hundred and and then why bother? Like why all this? Then?

927
00:58:49.760 --> 00:58:52.119
<v Speaker 2>Why not focus on actually getting the business off the

928
00:58:52.199 --> 00:58:55.519
<v Speaker 2>ground and then and running with it. And once once

929
00:58:55.599 --> 00:58:58.559
<v Speaker 2>you have ten million users, maybe you can talk like

930
00:58:58.679 --> 00:59:03.519
<v Speaker 2>I I hosted millions of users on the databases, and

931
00:59:05.000 --> 00:59:08.280
<v Speaker 2>like I had a situation when a friend was asking

932
00:59:08.360 --> 00:59:13.199
<v Speaker 2>me about their they're hosting costs because they ballooned they

933
00:59:13.239 --> 00:59:15.800
<v Speaker 2>were paying at the time it was a lot like

934
00:59:15.840 --> 00:59:20.199
<v Speaker 2>two thousand, five hundred a month at AWS and they

935
00:59:20.280 --> 00:59:24.679
<v Speaker 2>had almost half our user base or even less, and

936
00:59:25.039 --> 00:59:28.000
<v Speaker 2>they were asking it was gaming gaming sort of both

937
00:59:28.039 --> 00:59:30.239
<v Speaker 2>of us. And they were asking how much we pay

938
00:59:30.320 --> 00:59:33.519
<v Speaker 2>every month and I was really really like embarrassed to

939
00:59:33.559 --> 00:59:40.559
<v Speaker 2>tell them that we're paying seventy five dollars. So, yeah,

940
00:59:40.639 --> 00:59:44.119
<v Speaker 2>people need to realize they can they can get a

941
00:59:44.159 --> 00:59:47.239
<v Speaker 2>lot of value by by removing complexity and removing redundancy

942
00:59:47.320 --> 00:59:49.480
<v Speaker 2>and moving abstractions and indirection.

943
00:59:50.480 --> 00:59:54.760
<v Speaker 3>Right, it's pretty mad that computers are like an order

944
00:59:54.800 --> 00:59:59.000
<v Speaker 3>of magnitude faster than they were twenty years ago. But yeah,

945
00:59:59.159 --> 01:00:01.480
<v Speaker 3>software seems slower than it's ever been.

946
01:00:02.679 --> 01:00:05.960
<v Speaker 2>Yeah, it's it's it's stuck with it. Where like it

947
01:00:07.039 --> 01:00:12.679
<v Speaker 2>because because computers are being faster, softlow is getting faster naturally.

948
01:00:13.159 --> 01:00:16.639
<v Speaker 2>But it's it's it's not trying to do things differently.

949
01:00:17.039 --> 01:00:19.559
<v Speaker 2>It's not No one has come up and said, like,

950
01:00:20.000 --> 01:00:22.199
<v Speaker 2>let's make use of the capacity now that we have

951
01:00:22.280 --> 01:00:23.079
<v Speaker 2>in a single machine.

952
01:00:24.800 --> 01:00:28.119
<v Speaker 1>Yeah, I was going to say, and and this was

953
01:00:28.239 --> 01:00:30.679
<v Speaker 1>kind of came to me when DHH was doing his

954
01:00:30.800 --> 01:00:33.800
<v Speaker 1>keynote at Rails World last year and he points out,

955
01:00:34.000 --> 01:00:36.760
<v Speaker 1>you know, we're we have solid Q and solid cash

956
01:00:36.880 --> 01:00:40.960
<v Speaker 1>because disc speeds have you know, grown in this way, right,

957
01:00:41.519 --> 01:00:46.480
<v Speaker 1>And he was basically pointing out, yeah, you know we're

958
01:00:46.719 --> 01:00:51.519
<v Speaker 1>going to take advantage of this. And yeah, it drove

959
01:00:51.599 --> 01:00:55.559
<v Speaker 1>home to me that the the limiting factor isn't the technology,

960
01:00:55.679 --> 01:00:59.880
<v Speaker 1>it's the mindset, right, because I'm still stuck in you

961
01:01:00.079 --> 01:01:02.760
<v Speaker 1>know when I started programming in two thousand and well,

962
01:01:03.159 --> 01:01:05.440
<v Speaker 1>I started programming in high school in the nineties, but

963
01:01:05.800 --> 01:01:08.239
<v Speaker 1>when I started doing rails apps into in two thousand

964
01:01:08.239 --> 01:01:13.360
<v Speaker 1>and six, Yeah, you know, I'm looking at it and going, oh,

965
01:01:13.400 --> 01:01:15.239
<v Speaker 1>I've got to account for all this stuff, and so

966
01:01:15.440 --> 01:01:17.639
<v Speaker 1>I have to go wrangle all of these things to

967
01:01:17.719 --> 01:01:21.519
<v Speaker 1>make it work. And and so the limitation was the

968
01:01:21.599 --> 01:01:24.920
<v Speaker 1>way I thought about applications being built, not not the hardware,

969
01:01:25.039 --> 01:01:28.079
<v Speaker 1>the technology that was available to me. And then I

970
01:01:28.159 --> 01:01:29.960
<v Speaker 1>think that's what you're saying, Mohammad.

971
01:01:29.920 --> 01:01:33.079
<v Speaker 2>Yes, exactly exactly like people, people like we have we

972
01:01:33.159 --> 01:01:37.280
<v Speaker 2>have been conditioned to do things a certain way, like

973
01:01:37.960 --> 01:01:40.440
<v Speaker 2>you need you need cash, you put in this inostance,

974
01:01:40.519 --> 01:01:45.360
<v Speaker 2>you need job, you put the incense and the job

975
01:01:45.480 --> 01:01:47.840
<v Speaker 2>runner and stuff like that, and people think this is

976
01:01:48.000 --> 01:01:50.960
<v Speaker 2>this is the best they can get. And I would

977
01:01:51.119 --> 01:01:56.039
<v Speaker 2>challenge anyone, anyone. I want to see a faster read

978
01:01:57.519 --> 01:02:04.639
<v Speaker 2>cash reet performance from any any adapter for UH, for

979
01:02:04.920 --> 01:02:10.519
<v Speaker 2>for rails UH then then light stacks cash. Of course

980
01:02:10.639 --> 01:02:12.639
<v Speaker 2>solid cash is is fast as well, but it's not

981
01:02:12.719 --> 01:02:15.519
<v Speaker 2>as fast because it relies on active record. But once

982
01:02:15.599 --> 01:02:17.760
<v Speaker 2>you hit sequel light, there is nothing faster than this.

983
01:02:18.159 --> 01:02:21.559
<v Speaker 2>Like you're reading literally from memory. It's an order of

984
01:02:21.639 --> 01:02:23.199
<v Speaker 2>magnitude faster than a radios at.

985
01:02:23.599 --> 01:02:26.880
<v Speaker 1>Oh hang on, hang on, time out. You're you're saying

986
01:02:27.079 --> 01:02:31.719
<v Speaker 1>that you built the light cash and it is the

987
01:02:31.800 --> 01:02:34.440
<v Speaker 1>queuing this way as well. Yes, so you're not relying

988
01:02:34.480 --> 01:02:36.920
<v Speaker 1>on active record, You're you're just going straight to the

989
01:02:37.000 --> 01:02:39.800
<v Speaker 1>database and going, huh, what's in the cash?

990
01:02:40.719 --> 01:02:44.960
<v Speaker 2>Exactly exactly, because because the nice thing about RAILS is

991
01:02:45.000 --> 01:02:49.360
<v Speaker 2>that it has these really nice interfaces for active job

992
01:02:49.559 --> 01:02:54.079
<v Speaker 2>and for active source cash and for a light cable,

993
01:02:54.320 --> 01:02:57.039
<v Speaker 2>for active action cable and sorry, and and what you

994
01:02:57.119 --> 01:02:59.920
<v Speaker 2>do is you provide an adapter that does the job

995
01:03:00.519 --> 01:03:04.480
<v Speaker 2>rather than going one level up and and relying on

996
01:03:04.559 --> 01:03:08.800
<v Speaker 2>active records that you you you you just delivered the

997
01:03:08.840 --> 01:03:15.320
<v Speaker 2>functionality directly. It ends up being very fast, like really

998
01:03:15.440 --> 01:03:19.639
<v Speaker 2>really very fast. Not much faster than of course, having

999
01:03:19.719 --> 01:03:22.840
<v Speaker 2>the active record abstraction top of you and actual records

1000
01:03:22.880 --> 01:03:29.159
<v Speaker 2>buys you a lot of things like like distributed databases

1001
01:03:29.239 --> 01:03:33.800
<v Speaker 2>and like you know, having multiple database for the same

1002
01:03:34.440 --> 01:03:39.440
<v Speaker 2>like the same application, talking to multiple databases and shouting

1003
01:03:39.480 --> 01:03:42.000
<v Speaker 2>and stuff like that. You don't need that to sique light. Yeah,

1004
01:03:42.039 --> 01:03:44.039
<v Speaker 2>it's it's one database on the same machine, so you

1005
01:03:44.079 --> 01:03:44.760
<v Speaker 2>don't need all of this.

1006
01:03:45.440 --> 01:03:46.000
<v Speaker 1>You're making me.

1007
01:03:46.079 --> 01:03:51.159
<v Speaker 3>Think, Yeah, it's really hard to kind of change your

1008
01:03:51.239 --> 01:03:55.239
<v Speaker 3>mental models once I get set. Like, like, my background

1009
01:03:55.360 --> 01:03:58.760
<v Speaker 3>is in uh was in mobile development when I started

1010
01:03:59.280 --> 01:04:02.880
<v Speaker 3>working as a professional software developer, started off as an

1011
01:04:03.079 --> 01:04:06.679
<v Speaker 3>iOS and Android developer, so was twenty fourteen and I

1012
01:04:06.760 --> 01:04:10.519
<v Speaker 3>only switched to RAILS in twenty twenty. And I remember, like,

1013
01:04:11.079 --> 01:04:14.280
<v Speaker 3>when you're in a mobile app, going to the disc

1014
01:04:14.480 --> 01:04:17.480
<v Speaker 3>is considered slow. So when you launch the app, you

1015
01:04:17.599 --> 01:04:20.760
<v Speaker 3>basically load up whatever you can in memory, and if

1016
01:04:20.760 --> 01:04:22.039
<v Speaker 3>you're going to go to the disk, you have to

1017
01:04:22.119 --> 01:04:24.119
<v Speaker 3>kind of really think about the coreer writing because you

1018
01:04:24.119 --> 01:04:26.440
<v Speaker 3>don't want to lock up the UI. So I have

1019
01:04:26.559 --> 01:04:28.559
<v Speaker 3>this drilled in me. Going to the discus slow. Going

1020
01:04:28.599 --> 01:04:30.559
<v Speaker 3>to the disc is slow. So when I came to

1021
01:04:30.760 --> 01:04:34.440
<v Speaker 3>RAILS and I was trying to understand Russian doll caching

1022
01:04:34.480 --> 01:04:39.400
<v Speaker 3>in RAILS, I couldn't understand why there was a benefit

1023
01:04:39.480 --> 01:04:41.239
<v Speaker 3>because we still had to go to the database to

1024
01:04:41.280 --> 01:04:45.239
<v Speaker 3>get the updated app value of the record. I couldn't

1025
01:04:45.320 --> 01:04:49.880
<v Speaker 3>understand that in a web context, rendering the HTML is

1026
01:04:49.920 --> 01:04:52.800
<v Speaker 3>the slow part. It took me months and I'm not

1027
01:04:53.119 --> 01:04:57.039
<v Speaker 3>exaggerating months to change that mental model. So I completely

1028
01:04:57.239 --> 01:04:59.679
<v Speaker 3>get that people have been doing this for decades, have

1029
01:04:59.840 --> 01:05:03.480
<v Speaker 3>this models set about how you structure and appy the

1030
01:05:03.519 --> 01:05:06.719
<v Speaker 3>database hour and stuff, and now they're just like, it's

1031
01:05:06.840 --> 01:05:08.440
<v Speaker 3>really hard to just change that.

1032
01:05:10.599 --> 01:05:12.719
<v Speaker 2>Yeah, I'm glad, I'm glad you brought that up. Because

1033
01:05:13.000 --> 01:05:15.360
<v Speaker 2>one of the really nice things about switching to light

1034
01:05:15.440 --> 01:05:18.280
<v Speaker 2>stack or not nice actually the bad things about switching

1035
01:05:18.320 --> 01:05:22.880
<v Speaker 2>to light stack that it mhm suddenly highlights how slow

1036
01:05:22.960 --> 01:05:26.960
<v Speaker 2>your front end is, like the rendering path, like the

1037
01:05:27.360 --> 01:05:30.880
<v Speaker 2>view layer. Basically it's really highlighted because you eliminate a

1038
01:05:30.920 --> 01:05:33.800
<v Speaker 2>lot of the buttonnecks at the database layer, and now

1039
01:05:33.880 --> 01:05:37.440
<v Speaker 2>your bottleneck, your core bottle neck is rendering whether you're

1040
01:05:37.440 --> 01:05:42.679
<v Speaker 2>rending the Jason or rending like htmail in your app.

1041
01:05:43.039 --> 01:05:47.920
<v Speaker 2>So it just highlights it very very fast, and you

1042
01:05:48.079 --> 01:05:51.559
<v Speaker 2>now have to do with this level if you want

1043
01:05:51.599 --> 01:05:53.880
<v Speaker 2>to keep up with the with how fast back and

1044
01:05:53.960 --> 01:05:57.239
<v Speaker 2>this has become I think I think the other the

1045
01:05:57.320 --> 01:06:01.119
<v Speaker 2>other thing here is like rains has a lot of

1046
01:06:01.760 --> 01:06:04.320
<v Speaker 2>or Ruby itself had a lot of progress lately in

1047
01:06:04.480 --> 01:06:12.440
<v Speaker 2>the Jet compiler. So Ruby code is is gonna run faster,

1048
01:06:12.559 --> 01:06:14.960
<v Speaker 2>and it's getting faster and faster, which is really nice.

1049
01:06:15.119 --> 01:06:19.840
<v Speaker 2>We're looking at like fifty percent plus yeah, speed.

1050
01:06:19.559 --> 01:06:22.599
<v Speaker 1>Improvement depending on what your app is doing, yeh, but

1051
01:06:22.679 --> 01:06:23.280
<v Speaker 1>but yeah.

1052
01:06:23.159 --> 01:06:25.559
<v Speaker 2>I'm looking at something like Lobster for example. It's almost

1053
01:06:25.599 --> 01:06:30.000
<v Speaker 2>fifty percent faster in the benchmarks that the Shop of

1054
01:06:30.039 --> 01:06:33.159
<v Speaker 2>five team is sharing, which is really nice. It's it's

1055
01:06:33.159 --> 01:06:37.400
<v Speaker 2>a full fledged trade application. Now imagine this is one

1056
01:06:37.440 --> 01:06:40.719
<v Speaker 2>botle neck computation. Now the other bottle neck is IO.

1057
01:06:41.480 --> 01:06:44.920
<v Speaker 2>Now imagine if you also get even an er boost

1058
01:06:45.000 --> 01:06:48.920
<v Speaker 2>in that that regard. So, actually, by the way, moving

1059
01:06:48.960 --> 01:06:55.800
<v Speaker 2>to light stack doesn't just improve performance like I think.

1060
01:06:55.880 --> 01:06:58.559
<v Speaker 2>Think about your situation where you have two vms talking

1061
01:06:58.639 --> 01:07:03.199
<v Speaker 2>to a single database. You'd probably end up with one

1062
01:07:03.280 --> 01:07:06.960
<v Speaker 2>VM the same size and getting almost the same performance

1063
01:07:07.239 --> 01:07:10.039
<v Speaker 2>from your application, especially if you don't have a huge

1064
01:07:10.079 --> 01:07:13.559
<v Speaker 2>bottleneck in the view layer. If you do, then yeah,

1065
01:07:13.679 --> 01:07:18.400
<v Speaker 2>you need basically as computational power as you had in

1066
01:07:18.920 --> 01:07:22.920
<v Speaker 2>the previous setup. But still you're saving a lot of

1067
01:07:23.000 --> 01:07:27.679
<v Speaker 2>cycles that you otherwise would have wasted in the communication

1068
01:07:27.800 --> 01:07:33.280
<v Speaker 2>over the network stack. You'd save that for other competition needs.

1069
01:07:34.719 --> 01:07:36.480
<v Speaker 1>Very cool. We're getting toward the end of our time.

1070
01:07:36.679 --> 01:07:38.360
<v Speaker 1>Is there anything else you want to add or maybe

1071
01:07:38.480 --> 01:07:41.519
<v Speaker 1>just summarize where we're at with sequal light and light Stack.

1072
01:07:42.880 --> 01:07:47.559
<v Speaker 2>Yeah, so I would say there is a big update

1073
01:07:47.800 --> 01:07:51.320
<v Speaker 2>coming soon, hopefully like the next version of light Stack,

1074
01:07:51.679 --> 01:07:55.519
<v Speaker 2>which will have the light kid officially released. And I'm

1075
01:07:55.559 --> 01:08:01.920
<v Speaker 2>hoping also to bring one other major advancement, which is

1076
01:08:02.000 --> 01:08:07.559
<v Speaker 2>concurrent queries in Ruby. One of the issues of siquilight

1077
01:08:07.719 --> 01:08:12.159
<v Speaker 2>that it's a Sea extension and see extensions. Basically, as

1078
01:08:12.199 --> 01:08:15.039
<v Speaker 2>you're running Sea code, it takes over the process. The

1079
01:08:15.119 --> 01:08:18.680
<v Speaker 2>Ruby process doesn't allow other things to happen why it

1080
01:08:18.880 --> 01:08:23.479
<v Speaker 2>is running. So that results if you're doing a red

1081
01:08:23.560 --> 01:08:26.000
<v Speaker 2>query or quity, whatever the type of the query you're doing,

1082
01:08:26.079 --> 01:08:28.279
<v Speaker 2>if it's a long one, it will lock the process

1083
01:08:28.399 --> 01:08:32.760
<v Speaker 2>until it's finished. And the thing that I'm trying to

1084
01:08:34.119 --> 01:08:36.840
<v Speaker 2>to bring forth in the current next version is the

1085
01:08:36.960 --> 01:08:41.119
<v Speaker 2>ability to run multiple queries even in a single threaded

1086
01:08:41.119 --> 01:08:43.760
<v Speaker 2>application if you're losing fibers, or in different threads if

1087
01:08:43.760 --> 01:08:46.960
<v Speaker 2>you're dosing threads, so they will run concurrently next to

1088
01:08:47.039 --> 01:08:50.439
<v Speaker 2>each other and allow the application to be a lot

1089
01:08:50.479 --> 01:08:53.479
<v Speaker 2>more responsive even if you hit a daily slow query.

1090
01:08:54.079 --> 01:08:55.199
<v Speaker 1>Cool, very cool.

1091
01:08:55.760 --> 01:08:59.359
<v Speaker 2>Yeah, and I'm hoping I'm hoping to also make the

1092
01:08:59.479 --> 01:09:04.239
<v Speaker 2>other aspects of the story solid deployment backups and if

1093
01:09:04.359 --> 01:09:08.479
<v Speaker 2>if that, yeah, well once we're there. I I really

1094
01:09:08.680 --> 01:09:11.640
<v Speaker 2>think it makes a lot more sense to go with

1095
01:09:11.760 --> 01:09:12.560
<v Speaker 2>the simpler solution.

1096
01:09:13.439 --> 01:09:13.800
<v Speaker 1>Mm hmm.

1097
01:09:13.880 --> 01:09:16.520
<v Speaker 2>Regardless of what you're doing, it makes a lot more

1098
01:09:16.600 --> 01:09:18.840
<v Speaker 2>sense to go with the simpler solution. And hopefully this

1099
01:09:18.920 --> 01:09:20.000
<v Speaker 2>will be the simpler solution.

1100
01:09:22.119 --> 01:09:24.680
<v Speaker 1>Nice, all right, Okay, on.

1101
01:09:24.760 --> 01:09:26.359
<v Speaker 2>One final thing I want to I want to say, like,

1102
01:09:26.680 --> 01:09:31.199
<v Speaker 2>I'm really I'm offering basically a free consultation for anyone

1103
01:09:31.239 --> 01:09:34.960
<v Speaker 2>who wants to migrate to light Stack. So just ping me,

1104
01:09:35.359 --> 01:09:38.960
<v Speaker 2>and I'm happy to to help and and and and

1105
01:09:39.119 --> 01:09:42.600
<v Speaker 2>help you like gain the performance benefits and and and

1106
01:09:43.279 --> 01:09:45.840
<v Speaker 2>an opportunity for me to learn also about what could

1107
01:09:45.880 --> 01:09:47.640
<v Speaker 2>happen the wild in the process.

1108
01:09:48.760 --> 01:09:49.000
<v Speaker 3>Nice.

1109
01:09:49.319 --> 01:09:50.760
<v Speaker 1>How do people reach it for that?

1110
01:09:51.600 --> 01:09:54.199
<v Speaker 2>I'm available on on X so you can d M

1111
01:09:54.279 --> 01:09:59.359
<v Speaker 2>me at any time and also you can you can

1112
01:09:59.479 --> 01:10:02.000
<v Speaker 2>send me a emails. I'm not sure if I can

1113
01:10:02.239 --> 01:10:07.520
<v Speaker 2>share my email here or not. Yeah, basically it's old

1114
01:10:07.600 --> 01:10:10.880
<v Speaker 2>mo same handle like x at Gmail.

1115
01:10:10.920 --> 01:10:14.159
<v Speaker 1>Look what were you saying, Ayush?

1116
01:10:15.000 --> 01:10:16.680
<v Speaker 3>I was asking the exact same question as you.

1117
01:10:16.840 --> 01:10:21.760
<v Speaker 1>Okay, good deal, All right, well let's go ahead and

1118
01:10:21.840 --> 01:10:25.159
<v Speaker 1>do our picks are usual? You want to start us off?

1119
01:10:25.960 --> 01:10:28.079
<v Speaker 3>I didn't thought about. Does it completely forgotten me?

1120
01:10:28.199 --> 01:10:28.560
<v Speaker 1>Do these?

1121
01:10:29.760 --> 01:10:30.800
<v Speaker 3>Do you want to go first?

1122
01:10:30.840 --> 01:10:36.640
<v Speaker 1>While I'm thinking sure, I'll throw a few out. So

1123
01:10:37.640 --> 01:10:40.399
<v Speaker 1>it's been a few weeks since we recorded. Just because

1124
01:10:40.800 --> 01:10:44.399
<v Speaker 1>life is insane. Yeah, So I played a game with

1125
01:10:44.760 --> 01:10:47.039
<v Speaker 1>some of my friends that I hadn't played before. It's

1126
01:10:47.039 --> 01:10:50.720
<v Speaker 1>a really really simple game. It's called six nim. It's

1127
01:10:50.760 --> 01:10:52.640
<v Speaker 1>got a bunch of other names too, so you might

1128
01:10:52.720 --> 01:10:56.640
<v Speaker 1>have played it. I think it's also called like Take five.

1129
01:10:58.640 --> 01:11:02.359
<v Speaker 1>Not sure, let me look it up on Board game Geek. Yeah,

1130
01:11:02.640 --> 01:11:06.439
<v Speaker 1>it's called Take five or Category five or anyway. So

1131
01:11:06.520 --> 01:11:09.199
<v Speaker 1>what you do is you have numbered cards. It's super simple.

1132
01:11:09.279 --> 01:11:11.880
<v Speaker 1>Board game Geek has a weight of one point one nine,

1133
01:11:12.520 --> 01:11:16.600
<v Speaker 1>which means that it's a casual game that is pretty simple,

1134
01:11:17.800 --> 01:11:20.359
<v Speaker 1>and they say that eight and older can play at

1135
01:11:20.439 --> 01:11:24.520
<v Speaker 1>night as probably fair. It'll play up to ten players.

1136
01:11:24.640 --> 01:11:27.680
<v Speaker 1>Two to ten players. I think it took us a

1137
01:11:27.720 --> 01:11:30.760
<v Speaker 1>half hour to play a full round. Anyway, the cards

1138
01:11:30.760 --> 01:11:34.239
<v Speaker 1>are numbered zero or one. I can't remember. Start at one,

1139
01:11:34.319 --> 01:11:36.800
<v Speaker 1>but it goes up to one hundred, No, it goes

1140
01:11:36.840 --> 01:11:39.439
<v Speaker 1>past one hundred, but anyway, So what you do is

1141
01:11:40.520 --> 01:11:44.199
<v Speaker 1>everybody plays a card out face down. You flip the

1142
01:11:44.239 --> 01:11:47.279
<v Speaker 1>card over, and then the lowest card gets put out

1143
01:11:47.960 --> 01:11:52.760
<v Speaker 1>on top of the stack that it most closely matches to. Right.

1144
01:11:52.920 --> 01:11:55.079
<v Speaker 1>So if the top card on any of the four

1145
01:11:55.119 --> 01:11:57.439
<v Speaker 1>stacks you've got in front of you is seven, and

1146
01:11:57.560 --> 01:12:01.279
<v Speaker 1>you put out ten, unless the eight or nine are

1147
01:12:01.319 --> 01:12:02.880
<v Speaker 1>on top of any of the other stacks, you're going

1148
01:12:02.920 --> 01:12:05.439
<v Speaker 1>to put it on the seven, right, and then the

1149
01:12:05.560 --> 01:12:10.319
<v Speaker 1>next one goes and so on. You take the stack

1150
01:12:10.479 --> 01:12:14.560
<v Speaker 1>if you play the sixth card on the stack, and

1151
01:12:14.680 --> 01:12:16.920
<v Speaker 1>then the rest of the game is is let's say

1152
01:12:16.960 --> 01:12:18.640
<v Speaker 1>that the lowest one is a seven and you play

1153
01:12:18.720 --> 01:12:22.359
<v Speaker 1>a three. Then you get to pick which stack you take,

1154
01:12:22.439 --> 01:12:25.119
<v Speaker 1>and you're trying to get the fewest points possible, and

1155
01:12:25.560 --> 01:12:28.479
<v Speaker 1>different cards different numbers are worth different number of points.

1156
01:12:28.880 --> 01:12:30.600
<v Speaker 1>Some of the cards are worth one, some are worth two,

1157
01:12:30.720 --> 01:12:33.680
<v Speaker 1>some are worth three, and some worth five, And so

1158
01:12:33.920 --> 01:12:35.399
<v Speaker 1>you just play it til all the cards are gone,

1159
01:12:35.439 --> 01:12:37.560
<v Speaker 1>and then you tally it to score. That's the whole game.

1160
01:12:38.760 --> 01:12:42.239
<v Speaker 1>It was really fun, just kind of a you know,

1161
01:12:42.479 --> 01:12:46.039
<v Speaker 1>an interesting filler game. And so my first pick is

1162
01:12:46.119 --> 01:12:48.640
<v Speaker 1>going to be six nim I'll put a board game

1163
01:12:48.720 --> 01:12:52.760
<v Speaker 1>geek link and an Amazon affiliate link into the chat

1164
01:12:53.439 --> 01:12:58.640
<v Speaker 1>or into the comments a couple of other picks. My

1165
01:12:58.920 --> 01:13:03.560
<v Speaker 1>son and I went and saw a quiet place day

1166
01:13:03.640 --> 01:13:09.359
<v Speaker 1>one last night, and it was good. I've only seen

1167
01:13:09.439 --> 01:13:11.319
<v Speaker 1>a quiet place. I haven't seen a quiet place too,

1168
01:13:14.079 --> 01:13:15.920
<v Speaker 1>but still it was good. It wasn't as good as

1169
01:13:16.000 --> 01:13:18.319
<v Speaker 1>a quiet place, but it was it was definitely, you know,

1170
01:13:18.479 --> 01:13:25.720
<v Speaker 1>something that was worth seeing in theater. And yeah, I

1171
01:13:25.800 --> 01:13:27.600
<v Speaker 1>guess the only other thing that I'm just gonna let

1172
01:13:27.640 --> 01:13:29.279
<v Speaker 1>people know about if you want to follow me on

1173
01:13:30.479 --> 01:13:35.079
<v Speaker 1>Twitter or Instagram or something like that, I'm gonna be

1174
01:13:35.159 --> 01:13:39.039
<v Speaker 1>posting videos about doing AI. So I've been pulling a

1175
01:13:39.119 --> 01:13:43.720
<v Speaker 1>lot more AI stuff into top end devs. I got

1176
01:13:43.800 --> 01:13:47.880
<v Speaker 1>really inspired by the episode we did with Obie Fernandez

1177
01:13:48.199 --> 01:13:53.800
<v Speaker 1>about building AI agents, and so this is this is

1178
01:13:53.920 --> 01:13:55.560
<v Speaker 1>not on the level of Hey, I'm going to train

1179
01:13:55.600 --> 01:13:58.479
<v Speaker 1>all this data into a model and then use my model.

1180
01:13:58.960 --> 01:14:02.039
<v Speaker 1>It's it's a level above that where it's okay, I've

1181
01:14:02.119 --> 01:14:04.880
<v Speaker 1>got a large language model. You know what can I

1182
01:14:04.960 --> 01:14:05.720
<v Speaker 1>make it do for me?

1183
01:14:06.359 --> 01:14:10.600
<v Speaker 2>Yeah, I'd love to. I'm sorry, go ahead, no, go ahead. Yeah.

1184
01:14:10.600 --> 01:14:12.560
<v Speaker 2>I wanted just to have a shout out for Obi,

1185
01:14:12.760 --> 01:14:16.239
<v Speaker 2>like he's he's been one of my hoovie heroes for yeah,

1186
01:14:16.359 --> 01:14:17.039
<v Speaker 2>since so long.

1187
01:14:17.359 --> 01:14:20.479
<v Speaker 1>Yeah, yeah, And I guess he's getting ready to release

1188
01:14:20.560 --> 01:14:23.520
<v Speaker 1>the Rails eight way whenever that comes out, Rails eight does,

1189
01:14:24.119 --> 01:14:30.239
<v Speaker 1>which should be in a couple of months, but yeah, I.

1190
01:14:30.279 --> 01:14:32.359
<v Speaker 3>Think I think Rails it's going to be early next

1191
01:14:32.439 --> 01:14:34.239
<v Speaker 3>year because I think seven point two is going to

1192
01:14:34.279 --> 01:14:36.279
<v Speaker 3>come out like now, or maybe it's just out.

1193
01:14:37.319 --> 01:14:39.159
<v Speaker 1>Yeah. I know that they were looking to try and

1194
01:14:39.319 --> 01:14:41.239
<v Speaker 1>get it out around Rails World, which is gonna be

1195
01:14:41.279 --> 01:14:44.079
<v Speaker 1>in September, but I don't know what the timelines look

1196
01:14:44.199 --> 01:14:46.399
<v Speaker 1>like now because I haven't talked to David in a while.

1197
01:14:47.439 --> 01:14:52.800
<v Speaker 1>But anyway, yeah, so he got me excited about that.

1198
01:14:52.960 --> 01:14:55.199
<v Speaker 1>I've kind of been looking at Olympia AI which is

1199
01:14:55.239 --> 01:14:58.920
<v Speaker 1>the company that he put together, but I'm looking at

1200
01:14:58.960 --> 01:15:01.760
<v Speaker 1>building an ai I assistant or set of assistants that

1201
01:15:01.920 --> 01:15:08.239
<v Speaker 1>effectively are focused on podcasters. Right, So it's you know,

1202
01:15:08.520 --> 01:15:10.840
<v Speaker 1>it does a lot of the work of well, I

1203
01:15:10.920 --> 01:15:12.760
<v Speaker 1>want so many of these kind of episodes and so

1204
01:15:12.800 --> 01:15:16.439
<v Speaker 1>many of those kind of episodes, or hey, go invite

1205
01:15:16.840 --> 01:15:20.000
<v Speaker 1>such and such a person, you know, go invite Mohammed

1206
01:15:20.079 --> 01:15:23.199
<v Speaker 1>to come talk about light stack. Right, so it is

1207
01:15:23.279 --> 01:15:26.479
<v Speaker 1>smart enough to go make some web calls, go scrape

1208
01:15:26.520 --> 01:15:29.479
<v Speaker 1>the internet, go find your email address and then send

1209
01:15:29.520 --> 01:15:32.920
<v Speaker 1>you an email, right kind of thing. Or hey, we

1210
01:15:33.000 --> 01:15:37.039
<v Speaker 1>didn't record this week, put out an episode that we

1211
01:15:37.159 --> 01:15:42.479
<v Speaker 1>haven't you know, re released within the last year. Right,

1212
01:15:42.560 --> 01:15:44.079
<v Speaker 1>And so then it can go and it can say, well,

1213
01:15:44.119 --> 01:15:46.399
<v Speaker 1>these are the top ones, and right, it's smart enough

1214
01:15:46.439 --> 01:15:50.920
<v Speaker 1>to figure all that stuff out, you know, or even

1215
01:15:50.960 --> 01:15:55.760
<v Speaker 1>to the level of, you know, I usually said this,

1216
01:15:56.159 --> 01:15:59.239
<v Speaker 1>you know, and then he he kind of thought better

1217
01:15:59.319 --> 01:16:01.560
<v Speaker 1>of it afterwards. Right, it's like I shouldn't have said

1218
01:16:01.600 --> 01:16:04.800
<v Speaker 1>that because my client doesn't want me to reveal these

1219
01:16:04.880 --> 01:16:08.439
<v Speaker 1>certain things about Right, so I can go tell the bot, hey,

1220
01:16:08.520 --> 01:16:10.680
<v Speaker 1>go take out when I usually talked about this, this

1221
01:16:11.039 --> 01:16:14.720
<v Speaker 1>and this, Right, and then it'll go in and actually

1222
01:16:14.880 --> 01:16:19.199
<v Speaker 1>have the tools to go and extract it, right, you know,

1223
01:16:19.319 --> 01:16:21.960
<v Speaker 1>and my editor does a terrific job. But it'd be

1224
01:16:22.079 --> 01:16:23.920
<v Speaker 1>interesting just to see how far we can take it

1225
01:16:24.000 --> 01:16:27.479
<v Speaker 1>with that stuff. Right where it's cleaning up that kind

1226
01:16:27.520 --> 01:16:32.279
<v Speaker 1>of a thing, right, just tell it, Hey, we recorded

1227
01:16:32.319 --> 01:16:35.159
<v Speaker 1>a new episode, so it logs into stream yard and

1228
01:16:35.239 --> 01:16:39.279
<v Speaker 1>downloads the files and kind of does some preliminary cleanup

1229
01:16:39.359 --> 01:16:43.680
<v Speaker 1>on them. Right. So anyway, it's it's that level of stuff.

1230
01:16:44.680 --> 01:16:46.800
<v Speaker 1>I think it'd be way fun. So I'm working on that.

1231
01:16:47.000 --> 01:16:51.560
<v Speaker 1>And then I'm pulling together because I know a lot

1232
01:16:51.600 --> 01:16:53.920
<v Speaker 1>of other people want to learn it. I'm looking to

1233
01:16:54.000 --> 01:16:56.000
<v Speaker 1>do a boot camp where we use a lot of

1234
01:16:56.039 --> 01:16:59.800
<v Speaker 1>these tools, right down to some of the lms like

1235
01:17:00.279 --> 01:17:03.760
<v Speaker 1>the Lama three LM or something right where it's okay,

1236
01:17:03.800 --> 01:17:05.880
<v Speaker 1>I've got a baseline thing that I have to train

1237
01:17:06.079 --> 01:17:09.840
<v Speaker 1>some or maybe I am just going straight to GPT

1238
01:17:10.000 --> 01:17:13.560
<v Speaker 1>four or Gemini or some other thing right and just

1239
01:17:13.640 --> 01:17:16.279
<v Speaker 1>having it do the work for me because it is capable.

1240
01:17:17.720 --> 01:17:19.960
<v Speaker 1>And so just just working all that in and you know,

1241
01:17:20.279 --> 01:17:23.560
<v Speaker 1>just over three months, just help people go from not

1242
01:17:23.720 --> 01:17:26.199
<v Speaker 1>knowing anything about AI all the way up to Okay,

1243
01:17:26.319 --> 01:17:29.159
<v Speaker 1>now I can add these features to my application, So

1244
01:17:29.960 --> 01:17:33.039
<v Speaker 1>keep an eye out for that, mostly on social media.

1245
01:17:35.800 --> 01:17:37.800
<v Speaker 1>And yeah, I'm also looking at putting together an AI

1246
01:17:37.880 --> 01:17:38.680
<v Speaker 1>summit in September.

1247
01:17:38.840 --> 01:17:40.960
<v Speaker 2>So that's all anyway.

1248
01:17:41.159 --> 01:17:45.439
<v Speaker 1>Yeah, and then the last pick I have, and I

1249
01:17:45.520 --> 01:17:48.000
<v Speaker 1>think I'm going to connect it to a GoFundMe or

1250
01:17:48.039 --> 01:17:51.880
<v Speaker 1>something like it is. I would very much Now that

1251
01:17:52.399 --> 01:17:53.800
<v Speaker 1>next year is going to be the last year for

1252
01:17:53.960 --> 01:17:58.319
<v Speaker 1>Rails Rails Comp, I would like to put something together

1253
01:17:58.920 --> 01:18:01.239
<v Speaker 1>like Rails Comp. And I know we have Rails World

1254
01:18:01.319 --> 01:18:03.600
<v Speaker 1>and they kind of move it around. I guess they're

1255
01:18:03.640 --> 01:18:06.720
<v Speaker 1>doing North America and then not North America, and so

1256
01:18:06.880 --> 01:18:10.920
<v Speaker 1>I would like to alternate opposite them, right, so that

1257
01:18:11.039 --> 01:18:16.760
<v Speaker 1>there's a conference in North America every year, and then

1258
01:18:16.760 --> 01:18:20.479
<v Speaker 1>there's a conference somewhere else out in the world, right,

1259
01:18:21.079 --> 01:18:23.520
<v Speaker 1>and just see if we can get more access. But

1260
01:18:23.800 --> 01:18:26.239
<v Speaker 1>there is no way I can afford to cover things

1261
01:18:26.399 --> 01:18:28.560
<v Speaker 1>like an ex bo hal or things on my own.

1262
01:18:29.199 --> 01:18:31.600
<v Speaker 1>And so if you all are interested in something like

1263
01:18:31.720 --> 01:18:35.239
<v Speaker 1>that and would like to contribute, I mean, obviously we're

1264
01:18:35.279 --> 01:18:38.000
<v Speaker 1>we're gonna you know, at certain levels of you know,

1265
01:18:38.359 --> 01:18:41.680
<v Speaker 1>of helping us out, you know, give you tickets or

1266
01:18:44.159 --> 01:18:47.000
<v Speaker 1>shout outs or you know, any number of other things.

1267
01:18:47.079 --> 01:18:50.039
<v Speaker 1>You know, and I'm thinking, you know, kind of base level,

1268
01:18:50.079 --> 01:18:52.359
<v Speaker 1>maybe you get a ticket, a little higher level, you

1269
01:18:52.479 --> 01:18:57.279
<v Speaker 1>get lifetime tickets, you know, another level, you get sponsorship

1270
01:18:57.319 --> 01:19:01.399
<v Speaker 1>at a certain level. So anyway, if you're interested, I

1271
01:19:01.520 --> 01:19:03.960
<v Speaker 1>did buy the domain. I think it was railsxpo dot com.

1272
01:19:04.439 --> 01:19:09.399
<v Speaker 1>So go to railsxbo dot com in like a week

1273
01:19:09.479 --> 01:19:12.239
<v Speaker 1>or two after we recorded this, and I should have

1274
01:19:12.319 --> 01:19:15.479
<v Speaker 1>something up where it tells you what we're looking at

1275
01:19:15.520 --> 01:19:19.720
<v Speaker 1>for contributions and things like that. So anyway, that's all

1276
01:19:19.760 --> 01:19:21.399
<v Speaker 1>the stuff. I kind of wanted to get those out

1277
01:19:21.439 --> 01:19:23.560
<v Speaker 1>there just because those are things that I want to

1278
01:19:23.600 --> 01:19:25.560
<v Speaker 1>put together for the community that I think people are

1279
01:19:25.560 --> 01:19:28.600
<v Speaker 1>interested in. Are USh, what are your picks?

1280
01:19:29.840 --> 01:19:33.119
<v Speaker 3>So I've got to both non technical picks. This week,

1281
01:19:33.840 --> 01:19:37.760
<v Speaker 3>I reread a book from my childhood a few weeks ago.

1282
01:19:38.319 --> 01:19:43.039
<v Speaker 3>It's called Havoka Rasa by Matthew Riley, and yeah, it's

1283
01:19:43.079 --> 01:19:46.119
<v Speaker 3>just one of those books that it kind of shaped

1284
01:19:46.600 --> 01:19:49.119
<v Speaker 3>my teens a little bit. Like it has a quote

1285
01:19:49.880 --> 01:19:53.000
<v Speaker 3>that I absolutely love and I loved at the time

1286
01:19:53.039 --> 01:19:56.239
<v Speaker 3>as well, which is two air is human to make

1287
01:19:56.319 --> 01:20:00.439
<v Speaker 3>the same mistake twice as stupid. And I've pret I've

1288
01:20:00.479 --> 01:20:03.720
<v Speaker 3>pretty much reread the book just to try and remember

1289
01:20:03.800 --> 01:20:06.079
<v Speaker 3>what the context of that quote was, because I remember

1290
01:20:06.159 --> 01:20:08.279
<v Speaker 3>the quote, but I couldn't remember any of the context

1291
01:20:08.359 --> 01:20:12.600
<v Speaker 3>around it. But yes, I enjoyed reading it again. It's

1292
01:20:12.640 --> 01:20:15.159
<v Speaker 3>it's a book aimed more at a like probably a

1293
01:20:15.199 --> 01:20:17.840
<v Speaker 3>teen audience, but even now in my thirties, I still

1294
01:20:17.920 --> 01:20:22.319
<v Speaker 3>quite enjoyed it, despite it being quite far fetched at times.

1295
01:20:22.800 --> 01:20:26.319
<v Speaker 3>But yeah, that's one pick. The other pick is a

1296
01:20:26.439 --> 01:20:28.319
<v Speaker 3>musical pick, which I don't think I've done for a while.

1297
01:20:28.399 --> 01:20:33.359
<v Speaker 3>It's a band called Solstice, who have been a little

1298
01:20:33.399 --> 01:20:36.359
<v Speaker 3>bit obsessed with, unhealthily obsessed with for the last couple

1299
01:20:36.399 --> 01:20:40.680
<v Speaker 3>of months. I basically had their two albums, the last

1300
01:20:40.720 --> 01:20:45.880
<v Speaker 3>two albums on repeat throughout my work day since about June,

1301
01:20:46.159 --> 01:20:49.239
<v Speaker 3>like start of June, which is just a bit mad

1302
01:20:49.279 --> 01:20:52.159
<v Speaker 3>and I haven't got bored of them yet. So yeah,

1303
01:20:52.520 --> 01:20:55.840
<v Speaker 3>if you're into any kind of rock music at all,

1304
01:20:55.880 --> 01:20:59.800
<v Speaker 3>I'd highly recommend checking out Solstice the last two albums,

1305
01:20:59.840 --> 01:21:05.399
<v Speaker 3>All Light Up and s S. I A, yeah, those

1306
01:21:05.399 --> 01:21:06.159
<v Speaker 3>are my two picks.

1307
01:21:06.399 --> 01:21:08.720
<v Speaker 1>Cool, how about you, Mohammad? You pick for us?

1308
01:21:10.159 --> 01:21:15.159
<v Speaker 2>Not not not really, I'm not sure if that is

1309
01:21:15.319 --> 01:21:20.840
<v Speaker 2>interesting enough. But as we were like arranging to to

1310
01:21:21.119 --> 01:21:25.640
<v Speaker 2>get into this discussion, I was working on concurrent index

1311
01:21:25.680 --> 01:21:29.279
<v Speaker 2>creation for sequal Light, which will allow indexes to be

1312
01:21:29.760 --> 01:21:32.159
<v Speaker 2>run in the background. I have I have now like

1313
01:21:32.760 --> 01:21:36.920
<v Speaker 2>a set of like features that are not open source yet,

1314
01:21:37.560 --> 01:21:40.760
<v Speaker 2>and I'm hoping i'll be able to build a service

1315
01:21:40.800 --> 01:21:45.720
<v Speaker 2>around that soonersh and allow you to host your Ruby

1316
01:21:46.279 --> 01:21:50.680
<v Speaker 2>siqual Light powered applications for a fraction of the current

1317
01:21:50.760 --> 01:21:55.600
<v Speaker 2>costs at a much higher performance than people are accustomed

1318
01:21:55.640 --> 01:21:59.159
<v Speaker 2>to without having to deal with with like Docker images,

1319
01:22:00.239 --> 01:22:04.119
<v Speaker 2>kemal or things like that, even even simpler more like

1320
01:22:04.239 --> 01:22:06.079
<v Speaker 2>hero gon Stroits very cool.

1321
01:22:07.199 --> 01:22:09.439
<v Speaker 1>All right, well we'll go ahead and wrap it up.

1322
01:22:10.119 --> 01:22:13.880
<v Speaker 1>Thanks for coming. People find you on socials as old mo.

1323
01:22:14.520 --> 01:22:18.039
<v Speaker 1>Just remind people of that, and yeah, until next time,

1324
01:22:18.119 --> 01:22:18.920
<v Speaker 1>max out. Everybody
