WEBVTT

1
00:00:04.719 --> 00:00:07.839
<v Speaker 1>Hey, everybody, Welcome to another episode of the Ruby Rokes podcast.

2
00:00:08.080 --> 00:00:11.000
<v Speaker 1>I'm your host today, Valentino Still, and we're joined by

3
00:00:11.000 --> 00:00:14.759
<v Speaker 1>a very special guest today, Andy Mala. Did I say

4
00:00:14.759 --> 00:00:15.119
<v Speaker 1>they're ready?

5
00:00:15.119 --> 00:00:17.000
<v Speaker 2>Andy, Andy Malay?

6
00:00:17.239 --> 00:00:21.239
<v Speaker 1>Yep, Maale. Sorry I should have asked you before. We're welcome.

7
00:00:22.000 --> 00:00:24.480
<v Speaker 1>Do you want to just introduce yourself? And I'm sure

8
00:00:24.879 --> 00:00:27.440
<v Speaker 1>some people have heard you before on our show here,

9
00:00:28.199 --> 00:00:31.280
<v Speaker 1>but just give everybody an introduction and you know why

10
00:00:31.280 --> 00:00:32.119
<v Speaker 1>you're famous?

11
00:00:32.719 --> 00:00:35.840
<v Speaker 2>Yeah? Sure. My name is Andy Malay. I have about

12
00:00:35.840 --> 00:00:40.000
<v Speaker 2>twenty years of software engineering experience, and I've been programming

13
00:00:40.000 --> 00:00:42.960
<v Speaker 2>since I was a kid. Really and yeah, I have

14
00:00:43.000 --> 00:00:45.600
<v Speaker 2>a bachelor degree in computer science from McGill University in

15
00:00:45.600 --> 00:00:50.240
<v Speaker 2>Montreal and a master's degree in software engineering from DePaul University, Chicago.

16
00:00:51.759 --> 00:00:53.640
<v Speaker 2>And I guess I became famous when I won the

17
00:00:54.320 --> 00:00:57.479
<v Speaker 2>Ruby Award in twenty twenty two for my project wimer

18
00:00:57.520 --> 00:01:02.039
<v Speaker 2>DSL for Libui, which entered at Ruby Comp three times already.

19
00:01:02.200 --> 00:01:04.280
<v Speaker 2>I'm going to present it for the fourth time this year.

20
00:01:04.879 --> 00:01:05.280
<v Speaker 1>Uh.

21
00:01:05.400 --> 00:01:08.760
<v Speaker 2>And I've also spoken at rails Comp twice before.

22
00:01:10.319 --> 00:01:13.120
<v Speaker 1>That's awesome. Yeah, I didn't know you won the Ruby

23
00:01:13.120 --> 00:01:14.840
<v Speaker 1>Awards on that.

24
00:01:15.200 --> 00:01:18.599
<v Speaker 2>I won one of the awards. The Yeah, a special

25
00:01:19.439 --> 00:01:20.719
<v Speaker 2>Ruby award, That's what it was called.

26
00:01:21.200 --> 00:01:25.719
<v Speaker 1>Awesome A. So what is glimmer? Uh?

27
00:01:25.879 --> 00:01:29.599
<v Speaker 2>So Glimmer started originally as a desktop development goouey library.

28
00:01:30.159 --> 00:01:30.480
<v Speaker 1>Uh.

29
00:01:30.519 --> 00:01:33.519
<v Speaker 2>It was like I started it in the mid two

30
00:01:33.560 --> 00:01:37.439
<v Speaker 2>thousands as a way of making myself learn Ruby. At

31
00:01:37.439 --> 00:01:39.280
<v Speaker 2>the time, I was a Java developer and I did

32
00:01:39.319 --> 00:01:42.079
<v Speaker 2>a lot of Java desktop development work at like a

33
00:01:42.120 --> 00:01:45.560
<v Speaker 2>couple of companies, and I needed I heard about Ruby,

34
00:01:45.599 --> 00:01:47.319
<v Speaker 2>and I saw rails, and I thought it was awesome,

35
00:01:47.319 --> 00:01:48.920
<v Speaker 2>and I'm like, why don't we do this on the

36
00:01:49.000 --> 00:01:52.079
<v Speaker 2>dusk stop like the whole like all the cool things

37
00:01:52.120 --> 00:01:55.239
<v Speaker 2>that Ruby offers, as far as metaprogramming, as far as

38
00:01:55.280 --> 00:01:59.079
<v Speaker 2>building dsls uh and and all of that, we can

39
00:01:59.159 --> 00:02:01.760
<v Speaker 2>like build gooy's with it on the desktop. So I

40
00:02:01.840 --> 00:02:04.000
<v Speaker 2>checked out what are my options at the time that

41
00:02:04.040 --> 00:02:07.159
<v Speaker 2>were built by other people, And I saw Shoes and

42
00:02:07.200 --> 00:02:10.599
<v Speaker 2>I saw TK and Ruby. TK did not have a DSL.

43
00:02:10.680 --> 00:02:13.000
<v Speaker 2>It was like writing code for it was very ugly.

44
00:02:13.080 --> 00:02:15.680
<v Speaker 2>It felt like I'm writing Java code, so I didn't

45
00:02:15.719 --> 00:02:20.240
<v Speaker 2>like working with it. Shoes was very nice, but unfortunately

46
00:02:20.280 --> 00:02:22.840
<v Speaker 2>it was a bit not very well maintained and it

47
00:02:22.879 --> 00:02:26.000
<v Speaker 2>had bugs and it would crash randomly. So I built

48
00:02:26.039 --> 00:02:28.840
<v Speaker 2>Glimmer originally as a Ruby layer on top of the

49
00:02:28.879 --> 00:02:31.639
<v Speaker 2>Eclipse SWT library, which is used in the Eclipse ID

50
00:02:31.919 --> 00:02:35.360
<v Speaker 2>because that's what I used at work at the time.

51
00:02:36.520 --> 00:02:38.800
<v Speaker 2>So I built it using j Ruby because I had

52
00:02:38.840 --> 00:02:42.400
<v Speaker 2>to run on top of the JVM. Eventually, the idea

53
00:02:42.479 --> 00:02:46.039
<v Speaker 2>proved itself to be interesting and useful enough to a

54
00:02:46.120 --> 00:02:49.479
<v Speaker 2>point where I ended up then covering all the available

55
00:02:49.479 --> 00:02:52.039
<v Speaker 2>gooey toolkits and Ruby with Glimmer. So I have a

56
00:02:52.080 --> 00:02:56.919
<v Speaker 2>Glimmer DSL for TK now Glimmer DSL for GTK for

57
00:02:57.159 --> 00:03:02.199
<v Speaker 2>FX Ruby meaning Fox Toolkit for Libyu I started about

58
00:03:02.439 --> 00:03:05.560
<v Speaker 2>is a library that's a bit recent that was one

59
00:03:05.599 --> 00:03:08.039
<v Speaker 2>of the more recent Glimmers that were built, and the

60
00:03:08.080 --> 00:03:12.000
<v Speaker 2>most recent one is w wx wx Widgets has been

61
00:03:12.039 --> 00:03:16.240
<v Speaker 2>covered by Glimmer recently because somebody built a new binding

62
00:03:16.280 --> 00:03:20.120
<v Speaker 2>called w x ruby that replaced the old wx Ruby

63
00:03:20.520 --> 00:03:23.000
<v Speaker 2>just a couple of years ago, so I ended up

64
00:03:23.240 --> 00:03:26.280
<v Speaker 2>also covering it with the Glimmer DSL. So but to

65
00:03:26.280 --> 00:03:29.199
<v Speaker 2>get back to that question, what happened is eventually I

66
00:03:29.280 --> 00:03:32.719
<v Speaker 2>ended up last year coming up with the idea of

67
00:03:32.759 --> 00:03:35.759
<v Speaker 2>building Glimmer DSL for web which is a web version

68
00:03:35.759 --> 00:03:38.919
<v Speaker 2>of Glimmer that uses all the innovations for data binding

69
00:03:38.960 --> 00:03:44.120
<v Speaker 2>that were used in desktop development, but building web user interfaces.

70
00:03:45.439 --> 00:03:48.159
<v Speaker 1>So, I mean, the first thing I think of when

71
00:03:48.199 --> 00:03:51.840
<v Speaker 1>I think of what you know cross platform desktop apps

72
00:03:51.919 --> 00:03:57.680
<v Speaker 1>is like Electron and maybe like maybe I'm just old,

73
00:03:57.800 --> 00:04:00.240
<v Speaker 1>I don't really know if that's like still used, then

74
00:04:01.840 --> 00:04:04.439
<v Speaker 1>is that is that a close comparison to what we're

75
00:04:04.479 --> 00:04:05.039
<v Speaker 1>talking about.

76
00:04:05.879 --> 00:04:08.560
<v Speaker 2>So the irony is that Electron is not real desktop.

77
00:04:09.360 --> 00:04:14.800
<v Speaker 2>So Electron runs on top of browser embedded browsers, so

78
00:04:14.840 --> 00:04:18.079
<v Speaker 2>it's actually you write the app and actually HTML and CSS.

79
00:04:18.079 --> 00:04:20.439
<v Speaker 2>So unfortunately, as a result of that, you forego all

80
00:04:20.439 --> 00:04:26.120
<v Speaker 2>the simplicity of desktop guy toolkit development because desktop guys

81
00:04:26.399 --> 00:04:28.560
<v Speaker 2>are usually a lot simpler than web guys because they

82
00:04:28.600 --> 00:04:33.759
<v Speaker 2>have limitations that are enforced to comply with operating system

83
00:04:33.839 --> 00:04:37.639
<v Speaker 2>standards like on macOS or Windows. So it's a lot

84
00:04:37.720 --> 00:04:39.920
<v Speaker 2>faster to build a desktop app with a desktop guy

85
00:04:39.959 --> 00:04:43.279
<v Speaker 2>toolkit than to build it with HTML and CSS. I think.

86
00:04:43.439 --> 00:04:45.839
<v Speaker 2>So Electron runs on top of a browser, and so

87
00:04:45.959 --> 00:04:48.639
<v Speaker 2>the good news is that browsers are a desktop app.

88
00:04:49.000 --> 00:04:52.519
<v Speaker 2>Everybody who is doing web development uses desktop apps because

89
00:04:52.800 --> 00:04:56.439
<v Speaker 2>the browser is a desktop application, But Electron is not

90
00:04:56.480 --> 00:05:00.759
<v Speaker 2>real desktop development like a cross platform. We toolkits are

91
00:05:00.759 --> 00:05:02.879
<v Speaker 2>actually a lot simpler to use than Electron.

92
00:05:04.879 --> 00:05:07.839
<v Speaker 1>I see that makes a ton of sense. I guess,

93
00:05:07.879 --> 00:05:11.519
<v Speaker 1>like thinking about like styling, are you pretty like restricted

94
00:05:11.560 --> 00:05:16.240
<v Speaker 1>then to of like the you know, operating systems style

95
00:05:16.279 --> 00:05:18.680
<v Speaker 1>limitations for a lot of these components.

96
00:05:19.439 --> 00:05:21.399
<v Speaker 2>Yeah, So the good news is that it's like the

97
00:05:21.439 --> 00:05:25.160
<v Speaker 2>eighty twenty rule. In general, you you write very yeah,

98
00:05:25.279 --> 00:05:30.360
<v Speaker 2>very simple guys that comply to the style guidelines, and

99
00:05:30.639 --> 00:05:33.439
<v Speaker 2>you can write those guys very quickly, very little code

100
00:05:33.519 --> 00:05:36.759
<v Speaker 2>using glimmer. But twenty percent of the time when you

101
00:05:36.800 --> 00:05:39.879
<v Speaker 2>need to have your own customizations, you can actually build

102
00:05:41.000 --> 00:05:47.519
<v Speaker 2>completely custom user interfaces from scratch if you prefer, But

103
00:05:47.600 --> 00:05:49.480
<v Speaker 2>then you have to do a lot more work. So

104
00:05:49.680 --> 00:05:51.920
<v Speaker 2>you can actually do things that are the same things

105
00:05:51.959 --> 00:05:53.879
<v Speaker 2>that you could do with HTML and CSS, but in

106
00:05:53.959 --> 00:05:56.879
<v Speaker 2>dusktop they could Like basically, you draw on a canvas,

107
00:05:56.959 --> 00:06:00.600
<v Speaker 2>and you can do anything with a canvas. But in general,

108
00:06:00.639 --> 00:06:03.480
<v Speaker 2>it's discouraged in desktop development unless you have an app

109
00:06:03.519 --> 00:06:07.920
<v Speaker 2>that's actually drawing diagrams or doing things like visual games,

110
00:06:08.040 --> 00:06:11.240
<v Speaker 2>two D games or stuff like that. In general, if

111
00:06:11.519 --> 00:06:14.160
<v Speaker 2>you don't have diagrams or games or anything that's very

112
00:06:14.279 --> 00:06:19.040
<v Speaker 2>like custom it's better to stick to the you know,

113
00:06:19.199 --> 00:06:23.759
<v Speaker 2>like using standard do we too get controls like text, field, list,

114
00:06:24.120 --> 00:06:25.839
<v Speaker 2>combo box, et cetera.

115
00:06:26.879 --> 00:06:30.439
<v Speaker 1>That's interesting you mentioned gaming aspects because I know that,

116
00:06:30.680 --> 00:06:34.920
<v Speaker 1>you know, the Ruby gaming engine of choice lately is

117
00:06:35.240 --> 00:06:38.120
<v Speaker 1>Dragon Ruby. I know that kind of like evolved from

118
00:06:38.439 --> 00:06:43.639
<v Speaker 1>Ruby Motion as like the de facto like desktop builder application.

119
00:06:43.720 --> 00:06:47.000
<v Speaker 1>I don't know if that's still maintained or not. Is

120
00:06:47.040 --> 00:06:50.279
<v Speaker 1>there any comparison like you can make between glimmering and

121
00:06:50.360 --> 00:06:50.920
<v Speaker 1>Ruby Motion.

122
00:06:51.759 --> 00:06:55.439
<v Speaker 2>Yeah? Sure. So ruby Motion has two parts. There's the

123
00:06:55.519 --> 00:06:59.160
<v Speaker 2>Ruby Motion mobile development aspect of it, and that one

124
00:06:59.199 --> 00:07:03.800
<v Speaker 2>supports IOEA, an Android development using Ruby code. I've actually

125
00:07:03.839 --> 00:07:07.040
<v Speaker 2>tested it to build a like a demo, like a

126
00:07:07.079 --> 00:07:09.959
<v Speaker 2>proof of concept iOS app, and it works. It's very nice.

127
00:07:09.959 --> 00:07:11.480
<v Speaker 2>I might have it might have been last year or

128
00:07:11.480 --> 00:07:13.680
<v Speaker 2>the year before it was when I tested it. Uh,

129
00:07:13.800 --> 00:07:16.759
<v Speaker 2>it still works. Uh. And then they have a desktop

130
00:07:17.000 --> 00:07:19.879
<v Speaker 2>component where you could but but it's not cross platform.

131
00:07:19.920 --> 00:07:23.639
<v Speaker 2>It's only for the Mac. So that part overlaps a

132
00:07:23.639 --> 00:07:25.319
<v Speaker 2>bit with glimmer, but I would not use it. I

133
00:07:25.319 --> 00:07:28.240
<v Speaker 2>would rather use Glimmer because when you build a Glimmer app.

134
00:07:28.279 --> 00:07:30.519
<v Speaker 2>Once it runs on all platforms, then if you're using

135
00:07:30.519 --> 00:07:34.199
<v Speaker 2>one of the native guy toolkits like LIBYUI, wx widgets

136
00:07:34.279 --> 00:07:37.759
<v Speaker 2>or SWT, your apps will look native on every platform

137
00:07:37.800 --> 00:07:42.480
<v Speaker 2>as well. So uh, but the mobile aspect of Ruby

138
00:07:42.560 --> 00:07:45.480
<v Speaker 2>Motion is very cool. Actually, I do want to explore

139
00:07:45.519 --> 00:07:49.399
<v Speaker 2>the idea of building a Glimmer DSL for Ruby Motion Mobile.

140
00:07:49.959 --> 00:07:51.600
<v Speaker 2>That would be very cool because then I can write

141
00:07:51.600 --> 00:07:53.800
<v Speaker 2>the app and Ruby with a nice DSL and it

142
00:07:53.839 --> 00:07:57.399
<v Speaker 2>would run on mac os and Android or sorry not

143
00:07:57.439 --> 00:08:01.519
<v Speaker 2>macro iOS and Android. So that's something up that that

144
00:08:01.560 --> 00:08:04.519
<v Speaker 2>would be interesting to explore. But otherwise Dragon Ruby is

145
00:08:04.560 --> 00:08:09.319
<v Speaker 2>more optimized for gaming. Uh And yeah Glimmer. Glimmer allows

146
00:08:09.360 --> 00:08:11.399
<v Speaker 2>you to build games, but it's not optimized for games.

147
00:08:11.439 --> 00:08:13.639
<v Speaker 2>It's not about like offering you the best performance for

148
00:08:13.680 --> 00:08:16.399
<v Speaker 2>games or anything like that. Although it's libraries are pretty

149
00:08:16.399 --> 00:08:20.480
<v Speaker 2>optimized for performance, like they do run fast, but it's

150
00:08:20.600 --> 00:08:23.360
<v Speaker 2>the library itself is not tailored toward towards gaming. I

151
00:08:23.360 --> 00:08:26.319
<v Speaker 2>would still recommend if people want to build complex games,

152
00:08:26.399 --> 00:08:29.480
<v Speaker 2>Dragon rubies definite take the Way to Go or something

153
00:08:29.519 --> 00:08:32.679
<v Speaker 2>else like Ruby two D or there are a few

154
00:08:32.720 --> 00:08:34.360
<v Speaker 2>other libraries for gaming as well.

155
00:08:36.720 --> 00:08:40.240
<v Speaker 1>Yeah, that makes sense. I mean, he's the best tool

156
00:08:40.240 --> 00:08:46.120
<v Speaker 1>for the best job, and I love so like thank

157
00:08:46.159 --> 00:08:48.480
<v Speaker 1>you for the backstory and Glimmer, And I mean we

158
00:08:48.559 --> 00:08:51.200
<v Speaker 1>had you on today to talk about this new uh

159
00:08:52.000 --> 00:08:55.039
<v Speaker 1>you know thing you've been working on with Glimmer Web,

160
00:08:55.399 --> 00:09:00.919
<v Speaker 1>which is fascinating to me. Did what what drew you

161
00:09:00.960 --> 00:09:03.600
<v Speaker 1>in this direction? You want to describe maybe what the

162
00:09:04.080 --> 00:09:07.799
<v Speaker 1>Glimmer DSL for web is, And it's because it's funny

163
00:09:07.799 --> 00:09:11.159
<v Speaker 1>you mentioned that, you know, we as web developers are

164
00:09:11.559 --> 00:09:15.279
<v Speaker 1>really desktop app developers, so you want to just like

165
00:09:15.360 --> 00:09:18.279
<v Speaker 1>dive into you know how that correlates.

166
00:09:18.840 --> 00:09:23.519
<v Speaker 2>Yeah, sure, I mean, I mean I've personally experienced building

167
00:09:23.559 --> 00:09:27.120
<v Speaker 2>desktop apps of Glimmer for quite a while now, and

168
00:09:27.159 --> 00:09:29.480
<v Speaker 2>it's very quick to build any idea I have, Like

169
00:09:29.519 --> 00:09:32.080
<v Speaker 2>if I like, one day I needed the metronome. I

170
00:09:32.600 --> 00:09:36.759
<v Speaker 2>actually played drums as a hobby, and my phone metronome

171
00:09:36.799 --> 00:09:40.480
<v Speaker 2>app got a bug in it after the latest update.

172
00:09:40.960 --> 00:09:43.919
<v Speaker 2>So I ended up building my own metronome with Glimmer

173
00:09:44.000 --> 00:09:46.240
<v Speaker 2>as a desktop app, and I built it. I bet,

174
00:09:46.279 --> 00:09:49.279
<v Speaker 2>I built the first MVP version in ten minutes, and

175
00:09:49.279 --> 00:09:52.200
<v Speaker 2>it was like so amazing because Ruby, Ruby is so awesome,

176
00:09:53.240 --> 00:09:56.919
<v Speaker 2>and so I noticed that I don't have the same

177
00:09:56.960 --> 00:10:01.440
<v Speaker 2>productivity in web front and interface developm using JavaScript, not

178
00:10:01.519 --> 00:10:05.480
<v Speaker 2>even close. Like JavaScript is so cumbersome. Even the newest

179
00:10:05.679 --> 00:10:08.840
<v Speaker 2>versions of JavaScript are so like over engineered, and they

180
00:10:08.840 --> 00:10:12.919
<v Speaker 2>focus on premature optimizations that are not important whatsoever. So

181
00:10:13.799 --> 00:10:17.120
<v Speaker 2>because of all of that, like, for example, like JavaScript

182
00:10:17.120 --> 00:10:20.919
<v Speaker 2>makes you worry nowadays about const versus let, which to me,

183
00:10:21.039 --> 00:10:22.879
<v Speaker 2>like as a Rubist, that's the least of my concerns

184
00:10:22.879 --> 00:10:24.840
<v Speaker 2>when I'm building a business app. I just want to

185
00:10:24.840 --> 00:10:27.080
<v Speaker 2>focus on the business concerns and not on low level

186
00:10:27.120 --> 00:10:30.039
<v Speaker 2>details like that. They also have an import export system,

187
00:10:30.120 --> 00:10:33.679
<v Speaker 2>which on the surface sounds great, but in reality it's not.

188
00:10:34.000 --> 00:10:36.879
<v Speaker 2>Like practically in Ruby, we don't it's a lot simpler

189
00:10:36.919 --> 00:10:39.519
<v Speaker 2>because we don't have that important export system and we

190
00:10:39.519 --> 00:10:42.480
<v Speaker 2>don't care. Like it works fine enough for us without it.

191
00:10:42.840 --> 00:10:45.279
<v Speaker 2>Ruby works pretty well for us. So there are a

192
00:10:45.320 --> 00:10:48.519
<v Speaker 2>lot of differences between JavaScript and Ruby as far as productivity,

193
00:10:49.039 --> 00:10:52.399
<v Speaker 2>and there are huge differences. Like I mean, I know,

194
00:10:52.600 --> 00:10:55.759
<v Speaker 2>like every once in a while dhh and says online

195
00:10:55.759 --> 00:10:58.960
<v Speaker 2>on Twitter or something that he thinks that JavaScript after

196
00:10:59.000 --> 00:11:01.799
<v Speaker 2>they updated it to act script has become a great language.

197
00:11:02.120 --> 00:11:04.919
<v Speaker 2>But honestly, I don't find it a great language at all.

198
00:11:04.960 --> 00:11:07.480
<v Speaker 2>I think he's wrong. I think he's kind of caved

199
00:11:07.480 --> 00:11:11.519
<v Speaker 2>into what the popular demand or sorry, popular choice by

200
00:11:11.559 --> 00:11:15.120
<v Speaker 2>people is instead of actually being a leader and being like, no,

201
00:11:15.159 --> 00:11:18.879
<v Speaker 2>we could do even better Ruby. So that's a lot

202
00:11:18.919 --> 00:11:22.240
<v Speaker 2>of those aspects are what prompted me to explore building

203
00:11:22.240 --> 00:11:26.519
<v Speaker 2>a glimmer using a front end Ruby technology. And today

204
00:11:26.519 --> 00:11:29.600
<v Speaker 2>in twenty twenty four, we do have front end Ruby technologies,

205
00:11:29.639 --> 00:11:33.240
<v Speaker 2>like we have opal Ruby, which just won a fuko

206
00:11:33.360 --> 00:11:36.240
<v Speaker 2>Ka Ruby Award in twenty twenty three, so it's a

207
00:11:36.240 --> 00:11:41.279
<v Speaker 2>pretty impressive library that gives you a Ruby to JavaScript transpiler, sorry,

208
00:11:41.360 --> 00:11:45.720
<v Speaker 2>JavaScript to Ruby transpiler, so that way you can write

209
00:11:45.799 --> 00:11:49.720
<v Speaker 2>code that will run as JavaScript like in your website,

210
00:11:49.759 --> 00:11:52.919
<v Speaker 2>and consumers of your website will not know that it's Ruby,

211
00:11:53.159 --> 00:11:55.080
<v Speaker 2>but you actually wrote the code in Ruby first and

212
00:11:55.080 --> 00:11:59.559
<v Speaker 2>it got transpiled to JavaScript. So that's that's technology. That's

213
00:11:59.600 --> 00:12:03.799
<v Speaker 2>one techno. And another one is Ruby WOSM, which compiles Ruby

214
00:12:03.879 --> 00:12:09.480
<v Speaker 2>into like quasim low level code and it basically gives

215
00:12:09.519 --> 00:12:12.000
<v Speaker 2>you like all the features of Ruby three point one

216
00:12:12.080 --> 00:12:16.840
<v Speaker 2>or three point two nowadays in the browser. And then

217
00:12:16.879 --> 00:12:20.080
<v Speaker 2>there's also Ruby two JS is the third option, but

218
00:12:20.120 --> 00:12:22.360
<v Speaker 2>that one is not as comprehensive as the first two options.

219
00:12:22.399 --> 00:12:25.120
<v Speaker 2>I don't think you can build everything with it. But yeah,

220
00:12:25.159 --> 00:12:28.360
<v Speaker 2>so I ended up choosing Opal as a start for

221
00:12:28.759 --> 00:12:32.519
<v Speaker 2>building Glimmer DSL for Web because and I wanted to

222
00:12:32.519 --> 00:12:35.159
<v Speaker 2>try the idea out. I tried it out in another project.

223
00:12:35.320 --> 00:12:37.399
<v Speaker 2>I had a project called Glimmer DSL for Opal in

224
00:12:37.399 --> 00:12:42.200
<v Speaker 2>the past, which which is retired now it's archived, and

225
00:12:42.279 --> 00:12:43.960
<v Speaker 2>I was able to prove to myself that I can

226
00:12:44.039 --> 00:12:46.799
<v Speaker 2>do everything that Glimmer does on the desktop in a

227
00:12:46.799 --> 00:12:49.799
<v Speaker 2>web user interface on the web. And after I proved

228
00:12:49.799 --> 00:12:52.879
<v Speaker 2>that idea, I built Blimmer DSL for Web starting last year,

229
00:12:54.000 --> 00:12:57.639
<v Speaker 2>and it was it took that approach of being more

230
00:12:57.960 --> 00:13:01.600
<v Speaker 2>friendly towards people that know HTML very well or no

231
00:13:01.720 --> 00:13:05.159
<v Speaker 2>JavaScript or CSS very well. So it has the dsls

232
00:13:05.159 --> 00:13:07.840
<v Speaker 2>that are very close to them to those languages. So

233
00:13:08.000 --> 00:13:12.320
<v Speaker 2>it basically does give you an HTML DSL a CSSDSL

234
00:13:12.360 --> 00:13:15.799
<v Speaker 2>which is optional. If you want to manage CSS separately,

235
00:13:15.840 --> 00:13:19.039
<v Speaker 2>you can or you could use it. And then the

236
00:13:19.159 --> 00:13:22.639
<v Speaker 2>JavaScript aspect got replaced by Ruby, so any or JavaScript

237
00:13:22.639 --> 00:13:25.559
<v Speaker 2>logic code can always be written now with Ruby instead

238
00:13:25.600 --> 00:13:28.759
<v Speaker 2>of JavaScript, and anything that you could do in JavaScript.

239
00:13:28.799 --> 00:13:32.240
<v Speaker 2>You could do it with opal Ruby. So Glimmer DSL

240
00:13:32.320 --> 00:13:35.399
<v Speaker 2>for web is not limited whatsoever given that, like, you

241
00:13:35.440 --> 00:13:39.679
<v Speaker 2>can integrate with any available JavaScript library out there. For example,

242
00:13:39.720 --> 00:13:42.480
<v Speaker 2>I built a sample selector app that lets people visit

243
00:13:42.519 --> 00:13:44.320
<v Speaker 2>a rails app that gives them a bunch of Glimmer

244
00:13:44.360 --> 00:13:47.559
<v Speaker 2>samples and then they select one and then they see

245
00:13:47.559 --> 00:13:50.320
<v Speaker 2>the code syntax highlighted, and then they can launch it

246
00:13:50.440 --> 00:13:53.559
<v Speaker 2>in the web because it's a web apps, it's a

247
00:13:53.559 --> 00:13:55.440
<v Speaker 2>web user like front end apps, and then they can

248
00:13:55.480 --> 00:13:58.360
<v Speaker 2>launch it directly in the in the browser. So the

249
00:13:58.440 --> 00:14:01.320
<v Speaker 2>syntax highlighting aspect, I didn't have to implement it myself

250
00:14:01.320 --> 00:14:04.440
<v Speaker 2>from scratch. I used the library called highlight JS, and

251
00:14:04.519 --> 00:14:07.159
<v Speaker 2>I was able to like integrate it very very quickly,

252
00:14:07.279 --> 00:14:10.120
<v Speaker 2>Like it took me just a few minutes, or maybe

253
00:14:10.120 --> 00:14:13.480
<v Speaker 2>a bit more than ten minutes, but so yeah, So

254
00:14:13.600 --> 00:14:16.559
<v Speaker 2>I mean I was able to after I experimented with

255
00:14:16.600 --> 00:14:19.840
<v Speaker 2>the idea for quite a while, I took a page

256
00:14:19.879 --> 00:14:22.879
<v Speaker 2>like one of the sophisticated pages in my work website.

257
00:14:24.240 --> 00:14:25.840
<v Speaker 2>By the way, I work for lek Stop, which is

258
00:14:25.879 --> 00:14:29.559
<v Speaker 2>a death collection agency based in Montreal that uses web

259
00:14:29.600 --> 00:14:33.440
<v Speaker 2>technology to reach people that are late at paying their

260
00:14:33.440 --> 00:14:38.440
<v Speaker 2>bills either by email or SMS messages. So we have

261
00:14:38.559 --> 00:14:41.639
<v Speaker 2>a rails app. Basically we're a rail shop and right

262
00:14:41.679 --> 00:14:44.360
<v Speaker 2>now we're using like we've been using React for the

263
00:14:44.440 --> 00:14:47.120
<v Speaker 2>last number of years. But I built a proof of

264
00:14:47.200 --> 00:14:50.639
<v Speaker 2>concept where I rewrote a React page that had a

265
00:14:50.679 --> 00:14:55.759
<v Speaker 2>table of data with passionation, sorting and filtering, and I

266
00:14:55.799 --> 00:14:57.600
<v Speaker 2>was able to rewrite it and Glimmer DSTL for a

267
00:14:57.600 --> 00:15:02.679
<v Speaker 2>weapon in about one day. But also the performance was

268
00:15:02.759 --> 00:15:06.519
<v Speaker 2>just fast enough, Like I didn't feel any like I

269
00:15:06.519 --> 00:15:09.320
<v Speaker 2>didn't feel like performance was too slow or anything like that.

270
00:15:09.360 --> 00:15:13.399
<v Speaker 2>It was fast enough, and the code was amazing, like

271
00:15:13.600 --> 00:15:16.279
<v Speaker 2>I was able to cut the total code in about

272
00:15:16.320 --> 00:15:21.120
<v Speaker 2>by about half. And also the main React component was

273
00:15:21.159 --> 00:15:25.159
<v Speaker 2>about five hundred lines of code. And in Glimmer. Glimmer

274
00:15:25.200 --> 00:15:29.440
<v Speaker 2>has a very like friendly like op approach of following

275
00:15:29.519 --> 00:15:35.120
<v Speaker 2>MVC and MVP patterns and with NBC and MVVP. The

276
00:15:35.120 --> 00:15:38.000
<v Speaker 2>the React component mixes a lot of like data concerns,

277
00:15:38.000 --> 00:15:40.799
<v Speaker 2>like it has tate hooks and effects, and it mixes

278
00:15:40.840 --> 00:15:44.639
<v Speaker 2>like business concerns with the view present presentation of the view.

279
00:15:45.320 --> 00:15:48.840
<v Speaker 2>Whereas when I rewrote it in Glimmer, it shrunk from

280
00:15:48.840 --> 00:15:51.320
<v Speaker 2>five hundred lines to fifty lines or something like that.

281
00:15:52.360 --> 00:15:54.799
<v Speaker 2>So it was the one. Yeah, it became a tenth

282
00:15:54.879 --> 00:15:57.639
<v Speaker 2>of the size, and all of the data management stuff

283
00:15:57.679 --> 00:16:00.000
<v Speaker 2>that REACT let's you do with state hooks and effects

284
00:16:00.320 --> 00:16:03.679
<v Speaker 2>got extracted into logic in a presenter or a model.

285
00:16:03.919 --> 00:16:06.960
<v Speaker 2>So like I had an MVP pattern where there's a view,

286
00:16:07.120 --> 00:16:09.720
<v Speaker 2>a model, and a presenter. The presenter is kind of

287
00:16:09.759 --> 00:16:12.840
<v Speaker 2>like a controller, Like MVP is a variation on MVC.

288
00:16:13.480 --> 00:16:15.480
<v Speaker 2>But yeah, the code became a lot better because then

289
00:16:15.600 --> 00:16:18.480
<v Speaker 2>I can manage the code with standard op for anything

290
00:16:18.519 --> 00:16:22.559
<v Speaker 2>that is not view related that's just mostly logic or so. Yeah,

291
00:16:22.600 --> 00:16:24.840
<v Speaker 2>so it was I did a demo of this to

292
00:16:24.919 --> 00:16:27.799
<v Speaker 2>my coworkers at work and the CTO and they were

293
00:16:27.840 --> 00:16:31.519
<v Speaker 2>pretty impressed. I'm going to be doing another demo soon

294
00:16:31.600 --> 00:16:38.960
<v Speaker 2>to the engineering manager of the company and engineering department manager. Sorry,

295
00:16:39.000 --> 00:16:42.679
<v Speaker 2>and we're gonna be looking into an idea for rolling

296
00:16:42.720 --> 00:16:45.600
<v Speaker 2>it out if the demo goes well. I hope it

297
00:16:45.639 --> 00:16:47.919
<v Speaker 2>would go well. And like one idea for rolling it

298
00:16:47.919 --> 00:16:50.360
<v Speaker 2>out is it's not a big bang thing. You don't

299
00:16:50.360 --> 00:16:53.000
<v Speaker 2>have to do it everywhere at once. Like the nice

300
00:16:53.000 --> 00:16:55.679
<v Speaker 2>thing about front ends on the web is that every

301
00:16:55.759 --> 00:16:58.200
<v Speaker 2>web page is a self contained fun end app in

302
00:16:58.240 --> 00:17:01.279
<v Speaker 2>a way. So that means for any new web page

303
00:17:01.279 --> 00:17:03.399
<v Speaker 2>that we build, we could use Glimmer and keep all

304
00:17:03.440 --> 00:17:06.119
<v Speaker 2>the older web pages and whatever old technology we had.

305
00:17:06.839 --> 00:17:09.160
<v Speaker 2>But that's not even how we're going to start with it.

306
00:17:09.440 --> 00:17:12.759
<v Speaker 2>What we're gonna do is basically only internal facing web

307
00:17:12.759 --> 00:17:15.720
<v Speaker 2>pages that are in the admin UI are going to

308
00:17:16.119 --> 00:17:19.720
<v Speaker 2>start using Glimmer. Glimmer dssel for web is like the

309
00:17:19.759 --> 00:17:22.599
<v Speaker 2>idea I'm going to be proposing at the next meeting. Uh.

310
00:17:23.000 --> 00:17:25.279
<v Speaker 2>And that way, we can gradually play around with it

311
00:17:25.319 --> 00:17:27.240
<v Speaker 2>in a few admin pages first, and I just want

312
00:17:27.279 --> 00:17:29.400
<v Speaker 2>to make sure there aren't any gotchas that I haven't

313
00:17:29.400 --> 00:17:33.559
<v Speaker 2>discovered on my own from building my own sample apps. Uh.

314
00:17:33.839 --> 00:17:35.839
<v Speaker 2>And after we do that for about you know, four

315
00:17:35.880 --> 00:17:39.440
<v Speaker 2>months or six months, then we can start, uh maybe

316
00:17:39.480 --> 00:17:42.720
<v Speaker 2>rewriting some admin pages that we're in React in Glimmer

317
00:17:42.759 --> 00:17:45.160
<v Speaker 2>instead of just adding new pages in Glimmer. And then

318
00:17:45.200 --> 00:17:47.640
<v Speaker 2>after that the phase after that, Phase three would be

319
00:17:47.839 --> 00:17:51.319
<v Speaker 2>start start writing new pages on the public facing website

320
00:17:51.960 --> 00:17:54.359
<v Speaker 2>with Glimmer. And then finally the last phase would be

321
00:17:54.400 --> 00:17:58.599
<v Speaker 2>to rewrite React components with Glimmer. If we feel like

322
00:17:58.680 --> 00:18:01.880
<v Speaker 2>it is needed, it's completely optional, but it's it could

323
00:18:01.880 --> 00:18:05.359
<v Speaker 2>be useful because Glimmer Ruby code is a lot a

324
00:18:05.440 --> 00:18:08.480
<v Speaker 2>lot more maintainable than we are JS codes, way more like,

325
00:18:08.599 --> 00:18:11.279
<v Speaker 2>in my experience at least double as maintainable.

326
00:18:14.680 --> 00:18:20.000
<v Speaker 1>This is really interesting because we are kind of missing

327
00:18:20.200 --> 00:18:25.319
<v Speaker 1>a you know, a hard stance on front end and

328
00:18:25.680 --> 00:18:28.720
<v Speaker 1>in the rails community at least, but definitely in Ruby

329
00:18:28.799 --> 00:18:31.480
<v Speaker 1>as well. And Opal has been kind of the closest

330
00:18:31.480 --> 00:18:33.799
<v Speaker 1>thing I've seen. It's interesting you've built kind of like

331
00:18:33.920 --> 00:18:37.240
<v Speaker 1>on top of OPEL. I know we've had Elli on

332
00:18:37.359 --> 00:18:40.920
<v Speaker 1>here before talking about Opel, and it's like a really

333
00:18:41.359 --> 00:18:46.160
<v Speaker 1>great work, just so smooth of a process. Uh. And

334
00:18:46.240 --> 00:18:50.000
<v Speaker 1>I love your the DSL you have here in your

335
00:18:50.039 --> 00:18:52.680
<v Speaker 1>to do list app that you've made, which is like

336
00:18:52.799 --> 00:18:55.799
<v Speaker 1>so simple and easy to read. We'll share it here

337
00:18:55.799 --> 00:19:01.480
<v Speaker 1>in our show notes. So I'm like really curious. A

338
00:19:01.559 --> 00:19:03.880
<v Speaker 1>lot of this looks similar to kind of like the

339
00:19:03.920 --> 00:19:07.920
<v Speaker 1>Flex markup for those familiar with uh uh, you know

340
00:19:08.000 --> 00:19:13.279
<v Speaker 1>Joel Draper's Flex project where they have like a DSL

341
00:19:13.319 --> 00:19:18.359
<v Speaker 1>for kind of building up the dom elements and mutating them.

342
00:19:18.759 --> 00:19:21.359
<v Speaker 1>I'm curious, like, uh, you know now that you've been

343
00:19:21.400 --> 00:19:26.920
<v Speaker 1>like kind of reworking even like react stuff, Like what

344
00:19:27.079 --> 00:19:30.759
<v Speaker 1>is as a Ruby developer, Like I am assuming that

345
00:19:30.839 --> 00:19:36.480
<v Speaker 1>you've developed in reels.

346
00:19:34.720 --> 00:19:38.240
<v Speaker 2>Uh, that I've developed in Rails. What do you mean? Sorry? Yeah,

347
00:19:38.319 --> 00:19:41.839
<v Speaker 2>like you've used reels before eight two thousand and seven.

348
00:19:42.240 --> 00:19:45.880
<v Speaker 1>Yeah, okay, yeah, I mean so, like, what's what's been

349
00:19:45.920 --> 00:19:51.039
<v Speaker 1>your experience overall experience? Like uh as far as like

350
00:19:54.279 --> 00:19:57.960
<v Speaker 1>you know, why why move to Glimmer as an example,

351
00:20:00.039 --> 00:20:02.839
<v Speaker 1>you know, like is it is? It kind of straightforward.

352
00:20:02.960 --> 00:20:07.480
<v Speaker 1>It's like a team that hasn't seen Glimmer before to

353
00:20:07.880 --> 00:20:12.079
<v Speaker 1>like make the transition pretty easily. I guess you'll find

354
00:20:12.119 --> 00:20:13.000
<v Speaker 1>out there.

355
00:20:13.000 --> 00:20:16.119
<v Speaker 2>Might be a like misunderstanding. Glimmer is only the front

356
00:20:16.200 --> 00:20:19.880
<v Speaker 2>end part. Glimmer integrates with Rails. Glimmer is a Rails

357
00:20:19.880 --> 00:20:22.160
<v Speaker 2>library by the way. It's also it's not just an

358
00:20:22.160 --> 00:20:25.759
<v Speaker 2>open Ruby library. It's also a it's a Rails gem.

359
00:20:26.160 --> 00:20:28.920
<v Speaker 2>It integrates with Rails apps and enables you to suddenly,

360
00:20:28.960 --> 00:20:31.279
<v Speaker 2>in any Rails app be able to write the fun

361
00:20:31.359 --> 00:20:35.640
<v Speaker 2>end in Ruby. That's it, except let's to ride the

362
00:20:35.680 --> 00:20:38.400
<v Speaker 2>fun end and Ruby using a nice Glimmer DSL. Like

363
00:20:38.519 --> 00:20:41.480
<v Speaker 2>without Glimmer, if I use open Ruby alone, you can

364
00:20:41.519 --> 00:20:43.440
<v Speaker 2>just write Ruby code in the fun end. That's it,

365
00:20:43.440 --> 00:20:45.519
<v Speaker 2>but you don't have any support for building frameworks or

366
00:20:45.559 --> 00:20:48.720
<v Speaker 2>components or data binding or any of that. Glimmer adds

367
00:20:48.720 --> 00:20:51.319
<v Speaker 2>the extra layer that is missing that enables you to

368
00:20:51.359 --> 00:20:54.839
<v Speaker 2>do anything you could do data binding, for example using

369
00:20:55.559 --> 00:20:58.319
<v Speaker 2>like same. It has the same data binding features as

370
00:20:58.559 --> 00:21:02.319
<v Speaker 2>Glimmer desktop libraries. But all of those data binding features

371
00:21:03.400 --> 00:21:07.400
<v Speaker 2>we are actually pre date Glimmer. They come from Microsoft

372
00:21:07.480 --> 00:21:10.920
<v Speaker 2>technologies that were used in Visual Basic, I Believe and

373
00:21:11.039 --> 00:21:14.920
<v Speaker 2>other Microsoft products. They were also used by some mac

374
00:21:15.839 --> 00:21:21.240
<v Speaker 2>Gooey building products as well, so those same ideas got

375
00:21:21.319 --> 00:21:25.319
<v Speaker 2>adopted by view js and Veldt. So the same old

376
00:21:25.640 --> 00:21:28.240
<v Speaker 2>sort of data binding features that people know I from

377
00:21:28.440 --> 00:21:33.319
<v Speaker 2>Veldt and viewjs are available in Glimmer. Accepting Glimmer it's

378
00:21:33.319 --> 00:21:35.680
<v Speaker 2>a lot nicer because you write Ruby code instead of

379
00:21:35.759 --> 00:21:39.480
<v Speaker 2>JS code, and it also doesn't have the separation between

380
00:21:39.519 --> 00:21:43.759
<v Speaker 2>markup is in HTML and logic is in JavaScript and Ruby.

381
00:21:43.799 --> 00:21:46.319
<v Speaker 2>Everything is Ruby. The nice thing is for HTML we

382
00:21:46.400 --> 00:21:50.079
<v Speaker 2>have an HTML DSL, the CSS there's the CSSDSL, and

383
00:21:50.160 --> 00:21:53.039
<v Speaker 2>for logic that's just Ruby. So everything is in one

384
00:21:53.079 --> 00:21:56.720
<v Speaker 2>language so it fits in a lot, so that eliminates

385
00:21:56.759 --> 00:22:00.319
<v Speaker 2>the friction between multiple languages. Which actually creates a rag

386
00:22:00.319 --> 00:22:02.799
<v Speaker 2>on productivity. A lot of people are kind of like

387
00:22:02.839 --> 00:22:07.400
<v Speaker 2>the Pragmatic book metaphor of the boiled frogs. Have you

388
00:22:07.440 --> 00:22:10.680
<v Speaker 2>heard of the boiled frogs story from the Pragmatic Programmer book?

389
00:22:11.720 --> 00:22:12.519
<v Speaker 1>No, I'm not familiar.

390
00:22:12.759 --> 00:22:15.519
<v Speaker 2>Repeat it. It's basically like, it's a very interesting book

391
00:22:15.559 --> 00:22:18.519
<v Speaker 2>that I highly recommend reading to anyone working in the

392
00:22:18.559 --> 00:22:22.880
<v Speaker 2>soft in the software development industry. But uh, they're basically

393
00:22:22.880 --> 00:22:27.720
<v Speaker 2>saying that, like one risk that people get into is

394
00:22:27.759 --> 00:22:31.240
<v Speaker 2>becoming boiled frogs. What they mean is, like they say,

395
00:22:31.240 --> 00:22:32.759
<v Speaker 2>if you take a frog and put it in a

396
00:22:32.799 --> 00:22:36.440
<v Speaker 2>pot with boiling water, the frog will jump out right

397
00:22:36.480 --> 00:22:40.079
<v Speaker 2>away of the of the pot as a reaction, as

398
00:22:40.079 --> 00:22:42.119
<v Speaker 2>a like a wave of a react like a yeah,

399
00:22:42.160 --> 00:22:46.240
<v Speaker 2>as a reactive basically reactive behavior. It will jump right

400
00:22:46.240 --> 00:22:49.400
<v Speaker 2>away just to protect its life. But if you put

401
00:22:49.440 --> 00:22:52.799
<v Speaker 2>a frog in a pot with water that is cold,

402
00:22:53.119 --> 00:22:56.759
<v Speaker 2>and then you raise the heat very gradually like you

403
00:22:56.839 --> 00:22:59.880
<v Speaker 2>turn on you turn on the heat, and then you

404
00:23:00.160 --> 00:23:03.119
<v Speaker 2>is it very very gradually, you can boil the frog

405
00:23:03.200 --> 00:23:08.240
<v Speaker 2>without it knowing, because it will boil very very gradually,

406
00:23:08.319 --> 00:23:10.160
<v Speaker 2>so it will not know that it is boiling, but

407
00:23:10.240 --> 00:23:14.000
<v Speaker 2>eventually it will boil. So they mentioned that a lot

408
00:23:14.079 --> 00:23:18.480
<v Speaker 2>of developers end up in that situation where they use

409
00:23:18.559 --> 00:23:22.240
<v Speaker 2>technologies at work that put a drag on their productivity

410
00:23:22.640 --> 00:23:24.559
<v Speaker 2>and they get used to them, and getting used to

411
00:23:24.680 --> 00:23:28.680
<v Speaker 2>things is like one of the biggest risks in adopting

412
00:23:28.720 --> 00:23:32.519
<v Speaker 2>bad practices and software engineering. So people might like use JavaScript,

413
00:23:32.680 --> 00:23:36.720
<v Speaker 2>which has very contradictory paradigms to Ruby with a rail's

414
00:23:36.759 --> 00:23:40.440
<v Speaker 2>application for years and think they're doing the best they could,

415
00:23:40.440 --> 00:23:42.920
<v Speaker 2>but in fact they're actually not doing the best they could.

416
00:23:44.079 --> 00:23:48.319
<v Speaker 2>They're creating it like a drag on productivity because they

417
00:23:48.359 --> 00:23:51.960
<v Speaker 2>have multiple languages that have different paradigms, and they're also

418
00:23:51.960 --> 00:23:54.279
<v Speaker 2>in their head their context switching between the two languages

419
00:23:54.279 --> 00:23:57.200
<v Speaker 2>all the time. So I personally noticed, like I pay

420
00:23:57.240 --> 00:23:59.240
<v Speaker 2>a lot of attention because of reading that story and

421
00:23:59.319 --> 00:24:02.400
<v Speaker 2>the Pragmatic Programmer book, And at first I felt for

422
00:24:02.480 --> 00:24:04.759
<v Speaker 2>that trap too. I used JavaScript for many years thinking

423
00:24:04.799 --> 00:24:07.839
<v Speaker 2>it was the best thing, but eventually I realized, like I,

424
00:24:07.920 --> 00:24:10.319
<v Speaker 2>like I mentioned, I used glimmer for building desktop apps

425
00:24:10.319 --> 00:24:13.680
<v Speaker 2>a lot, and like that's not even like JavaScript development's

426
00:24:13.759 --> 00:24:17.119
<v Speaker 2>n even close to that. And so basically a lot

427
00:24:17.200 --> 00:24:20.759
<v Speaker 2>of people are bold boiled frogs in a way, they're

428
00:24:20.759 --> 00:24:23.960
<v Speaker 2>not realizing how much productivity they're losing. In my experience,

429
00:24:25.359 --> 00:24:28.640
<v Speaker 2>I would like I think Glimmer DSL for a web

430
00:24:28.960 --> 00:24:32.640
<v Speaker 2>would cut down the work in half in half in general,

431
00:24:32.720 --> 00:24:34.519
<v Speaker 2>so like if you have twelve months at front end

432
00:24:34.559 --> 00:24:37.440
<v Speaker 2>development work and JavaScript and React, you could do it

433
00:24:37.480 --> 00:24:40.000
<v Speaker 2>in six months in Ruby and Glimmer DSL for web.

434
00:24:40.839 --> 00:24:43.519
<v Speaker 2>So that's part of the reason why I'm actually using

435
00:24:43.559 --> 00:24:45.839
<v Speaker 2>it with rails, not against It's not like I still

436
00:24:45.920 --> 00:24:49.960
<v Speaker 2>use rails for the back end, but Glimmer is kind

437
00:24:49.960 --> 00:24:52.799
<v Speaker 2>of like providing a drop in replacement for your JavaScript

438
00:24:52.799 --> 00:24:55.359
<v Speaker 2>libraries that you're adding to Rails. So if you're using

439
00:24:55.440 --> 00:24:59.039
<v Speaker 2>VIEWJS or Amber or SVELT or Angular or react any,

440
00:24:59.400 --> 00:25:01.440
<v Speaker 2>Glimmer can do a lot better than any of those

441
00:25:01.920 --> 00:25:06.559
<v Speaker 2>in my experience as far as productivity, assuming you know,

442
00:25:06.640 --> 00:25:10.160
<v Speaker 2>like it has fast enough performance. Like for my work

443
00:25:10.200 --> 00:25:13.200
<v Speaker 2>app the largest sorry the web page with the most

444
00:25:13.200 --> 00:25:17.440
<v Speaker 2>elements has only twelve hundred elements, and like I discovered

445
00:25:17.519 --> 00:25:19.400
<v Speaker 2>they were render fast enough with Glimmer, I don't even

446
00:25:19.440 --> 00:25:24.440
<v Speaker 2>need any of the like performance like advertisements of like

447
00:25:24.559 --> 00:25:29.640
<v Speaker 2>React or Velt for that like uppa, Ruby's fast enough

448
00:25:29.680 --> 00:25:32.359
<v Speaker 2>in my experience, So in general, I think we can

449
00:25:32.359 --> 00:25:34.920
<v Speaker 2>follow the eighty twenty rule where we can avoid premature

450
00:25:34.920 --> 00:25:38.279
<v Speaker 2>optimization because people tell you know, it's the root of

451
00:25:38.279 --> 00:25:41.400
<v Speaker 2>all evil and software engineering, because it makes people complicate

452
00:25:41.440 --> 00:25:44.640
<v Speaker 2>their code unnecessarily, like React code is unreadable compared to

453
00:25:44.680 --> 00:25:48.079
<v Speaker 2>Ruby code, or like especially like Rails back end code

454
00:25:48.079 --> 00:25:50.119
<v Speaker 2>for example, so like why are we using it in

455
00:25:50.200 --> 00:25:54.160
<v Speaker 2>a Rails app? Like that's contradictory. So I'm trying to

456
00:25:54.200 --> 00:25:57.480
<v Speaker 2>provide a way for people to use Ruby on the

457
00:25:57.519 --> 00:25:59.039
<v Speaker 2>front end just like the back end, and that way

458
00:25:59.079 --> 00:26:01.680
<v Speaker 2>that opens the door to things like being able to

459
00:26:01.720 --> 00:26:04.559
<v Speaker 2>reuse back end Ruby logic in the front end directly.

460
00:26:05.839 --> 00:26:08.799
<v Speaker 2>So for example, if I have a few pieces of

461
00:26:08.839 --> 00:26:14.039
<v Speaker 2>logic that are validating taxes for payments or calculating story

462
00:26:14.079 --> 00:26:18.240
<v Speaker 2>taxes for like an order, I can actually ship that

463
00:26:18.319 --> 00:26:21.400
<v Speaker 2>code to the front end, assuming it has no security

464
00:26:21.440 --> 00:26:25.480
<v Speaker 2>requirement restriction requirements on it, and reuse it in the

465
00:26:25.480 --> 00:26:27.680
<v Speaker 2>fund directly. So that way I don't have to write

466
00:26:27.680 --> 00:26:29.839
<v Speaker 2>in rest EPI to reuse it. A lot of developers

467
00:26:29.880 --> 00:26:33.000
<v Speaker 2>waste time writing rest APIs to connect JS code to

468
00:26:33.039 --> 00:26:35.319
<v Speaker 2>the back end, or they waste time rewriting the back

469
00:26:35.400 --> 00:26:38.519
<v Speaker 2>end code and JS. That's another like performance waste or drain,

470
00:26:39.519 --> 00:26:44.720
<v Speaker 2>sorry not productivity drain. So open Ruby also saves us

471
00:26:44.720 --> 00:26:46.519
<v Speaker 2>from having to do that. Then I can like reuse

472
00:26:46.559 --> 00:26:49.359
<v Speaker 2>back end Ruby code directly in the fun end where needed,

473
00:26:50.039 --> 00:26:53.119
<v Speaker 2>So any secure code remains back and only not everything

474
00:26:53.160 --> 00:26:55.599
<v Speaker 2>will be opened up to the fun end. But things

475
00:26:55.599 --> 00:26:57.720
<v Speaker 2>that are reusable on the front end and don't have

476
00:26:57.759 --> 00:27:01.359
<v Speaker 2>any security restriction requirements, you can actually reuse them directly

477
00:27:01.359 --> 00:27:03.119
<v Speaker 2>in the fun end. So I mean to answer your

478
00:27:03.160 --> 00:27:07.000
<v Speaker 2>question like, I'm using Glimmer to actually improve my productivity

479
00:27:07.599 --> 00:27:10.119
<v Speaker 2>and rails app development, and I would say double it

480
00:27:10.279 --> 00:27:14.079
<v Speaker 2>as far as front end development and rails apps. One

481
00:27:14.119 --> 00:27:17.039
<v Speaker 2>other thing you mentioned was that Flex. One thing to

482
00:27:17.039 --> 00:27:19.720
<v Speaker 2>clarify about Flex is Flex is only about two years

483
00:27:19.759 --> 00:27:24.319
<v Speaker 2>old and the approach they use is actually not different

484
00:27:24.400 --> 00:27:27.920
<v Speaker 2>from what Glimmer had for years. On the dusktop they

485
00:27:28.039 --> 00:27:31.000
<v Speaker 2>let you build components with markup with sorry, with a

486
00:27:31.440 --> 00:27:35.519
<v Speaker 2>Ruby DSL that lets you build the HTML. But Glimmer

487
00:27:35.559 --> 00:27:38.279
<v Speaker 2>Desktop Libraries lets you do the same thing with components,

488
00:27:38.720 --> 00:27:42.519
<v Speaker 2>but instead of using HTML markup and the DSL used

489
00:27:42.559 --> 00:27:47.799
<v Speaker 2>the Desktop Control DSL, which like you know, will give

490
00:27:47.839 --> 00:27:52.759
<v Speaker 2>you dustop widgits like list or Combo box or text field,

491
00:27:52.880 --> 00:27:57.880
<v Speaker 2>et cetera. So I would say that like whatever they

492
00:27:57.880 --> 00:28:02.200
<v Speaker 2>came up with, they came after Glimmer, They're not. The

493
00:28:02.200 --> 00:28:05.359
<v Speaker 2>Flex approach is not with Glimmer copied. Glimmer just copied

494
00:28:05.359 --> 00:28:09.960
<v Speaker 2>its own. It's older the stop self. But Flex, thankfully

495
00:28:10.079 --> 00:28:13.680
<v Speaker 2>is another library that is exploring the same ideas for Glimmer,

496
00:28:13.720 --> 00:28:15.440
<v Speaker 2>but only on the back end, like they're doing it

497
00:28:15.799 --> 00:28:18.160
<v Speaker 2>at least for now, they're mainly exploring things on the

498
00:28:18.200 --> 00:28:20.720
<v Speaker 2>back end, whereas Glimmer, the estolf for webs is doing

499
00:28:20.759 --> 00:28:24.079
<v Speaker 2>it on the front end. Both of them, to be

500
00:28:24.160 --> 00:28:28.720
<v Speaker 2>more a fair both Glimmer and Flex borrowed the idea

501
00:28:28.759 --> 00:28:32.039
<v Speaker 2>of writing a DSL for the guy or the user interface,

502
00:28:32.039 --> 00:28:36.279
<v Speaker 2>whether it's using HTML, markup or desktop controls. They borrowed

503
00:28:36.279 --> 00:28:39.400
<v Speaker 2>that from much older technologies like Shoes or mark Cobby

504
00:28:39.759 --> 00:28:42.240
<v Speaker 2>Markabby was one of the first dsls and Ruby. I

505
00:28:42.279 --> 00:28:45.960
<v Speaker 2>believe that allowed people to write HTML and Ruby. So

506
00:28:45.960 --> 00:28:48.359
<v Speaker 2>so yeah, I just wanted to clarify the history of it.

507
00:28:49.440 --> 00:28:54.119
<v Speaker 1>Yeah, super interesting. There's been on so much work, and

508
00:28:54.160 --> 00:28:56.599
<v Speaker 1>to be honest, so many failed attempts as well along

509
00:28:56.640 --> 00:29:00.359
<v Speaker 1>the way. But I think we're finally getting so where

510
00:29:00.400 --> 00:29:04.279
<v Speaker 1>I looking at your example rails app here you have

511
00:29:04.319 --> 00:29:08.519
<v Speaker 1>a sample glimmer DSL where that for rails people can

512
00:29:08.599 --> 00:29:11.519
<v Speaker 1>check out as well. It definitely makes a lot more

513
00:29:11.759 --> 00:29:17.559
<v Speaker 1>sense now as you've been explaining it, seeing it as

514
00:29:17.720 --> 00:29:21.519
<v Speaker 1>like you said, the data binding aspect of connecting the

515
00:29:21.559 --> 00:29:25.240
<v Speaker 1>front end components to the back end, and it makes

516
00:29:25.279 --> 00:29:28.839
<v Speaker 1>a lot of sense, and it's definitely like we are

517
00:29:28.880 --> 00:29:29.880
<v Speaker 1>getting closer here.

518
00:29:30.599 --> 00:29:34.200
<v Speaker 2>So I think that's okay. That's okay, because that's exactly

519
00:29:34.279 --> 00:29:37.839
<v Speaker 2>how Ruby started. So Ruby started in the nineties, mid nineties,

520
00:29:38.200 --> 00:29:41.160
<v Speaker 2>and it took it ten years before Rails came to fruition.

521
00:29:41.880 --> 00:29:44.039
<v Speaker 2>So it wasn't until the mid two thousands that Ruby

522
00:29:44.079 --> 00:29:47.359
<v Speaker 2>became very viable on the back end, and now the

523
00:29:47.400 --> 00:29:50.640
<v Speaker 2>front end has a similar story. Opal Ruby started in

524
00:29:50.680 --> 00:29:54.799
<v Speaker 2>the mid twenty tens, like it might have been twenty twelve,

525
00:29:55.079 --> 00:29:58.440
<v Speaker 2>was the first first alpha version of it, and it

526
00:29:58.480 --> 00:30:00.680
<v Speaker 2>took about ten years as well to figure out what

527
00:30:00.720 --> 00:30:03.240
<v Speaker 2>to do with opal Ruby on the front end before

528
00:30:03.279 --> 00:30:06.039
<v Speaker 2>we arrive at what we think is like the most

529
00:30:06.039 --> 00:30:10.160
<v Speaker 2>practical solution. So I agree with you and I think

530
00:30:10.200 --> 00:30:12.559
<v Speaker 2>that's okay. Like it takes time sometimes to figure out

531
00:30:12.599 --> 00:30:14.319
<v Speaker 2>how to do things. The best way possible.

532
00:30:15.680 --> 00:30:18.759
<v Speaker 1>Yeah, totally, And so like I wanted to dig in

533
00:30:18.799 --> 00:30:21.160
<v Speaker 1>here a little bit because what we're talking about is

534
00:30:21.240 --> 00:30:24.920
<v Speaker 1>kind of like componentizing like these front end pieces into

535
00:30:24.960 --> 00:30:29.319
<v Speaker 1>a more modular way that can be reused and encapsulated

536
00:30:29.440 --> 00:30:32.799
<v Speaker 1>more of the Ruby way and trying to keep it

537
00:30:32.839 --> 00:30:35.960
<v Speaker 1>to Ruby as much as we can, right without like

538
00:30:36.079 --> 00:30:41.160
<v Speaker 1>degrading degradating the front end performance too much. And so

539
00:30:41.240 --> 00:30:43.799
<v Speaker 1>I want to talk about that componentization, like creating these

540
00:30:43.799 --> 00:30:46.559
<v Speaker 1>web things, right, Like, if I have a form, can

541
00:30:46.599 --> 00:30:49.960
<v Speaker 1>I make a form component? Is that like straightforward to

542
00:30:50.000 --> 00:30:53.960
<v Speaker 1>do with the Glimmer DSL. What is your been your

543
00:30:54.039 --> 00:30:56.119
<v Speaker 1>experience with like encapsulation there?

544
00:30:57.359 --> 00:31:02.680
<v Speaker 2>Yeah, So to art the Glimmer HTML DSL gives you

545
00:31:02.799 --> 00:31:08.759
<v Speaker 2>access to using any HTML tag including SVG tags as well.

546
00:31:09.640 --> 00:31:11.960
<v Speaker 2>So if you want to use a form tag, you

547
00:31:11.960 --> 00:31:16.319
<v Speaker 2>can use it. It's already supported. Every tag that is

548
00:31:16.319 --> 00:31:20.000
<v Speaker 2>in HTML is supported by Glimmer right now, a Glimmer

549
00:31:20.039 --> 00:31:23.200
<v Speaker 2>DSL for web, so you could just use any basic

550
00:31:23.319 --> 00:31:25.640
<v Speaker 2>HTML tags out of the box now if you want

551
00:31:25.640 --> 00:31:29.119
<v Speaker 2>to build your own components, it also supports that completely

552
00:31:29.200 --> 00:31:31.759
<v Speaker 2>right now. So for example, I found and they build

553
00:31:31.759 --> 00:31:34.480
<v Speaker 2>a name and address form because that's a very common

554
00:31:34.519 --> 00:31:36.920
<v Speaker 2>form that could be used on multiple pages on the website,

555
00:31:37.240 --> 00:31:40.680
<v Speaker 2>like for payment, like for shipping, like for many different things.

556
00:31:41.480 --> 00:31:43.880
<v Speaker 2>You could definitely do that today. In fact, one of

557
00:31:43.920 --> 00:31:47.079
<v Speaker 2>the samples or multiple of the samples to include a

558
00:31:47.160 --> 00:31:49.680
<v Speaker 2>name and address form or an address form at least,

559
00:31:50.680 --> 00:31:54.799
<v Speaker 2>so it basically abstracts or like you mentioned, encapsulates all

560
00:31:54.880 --> 00:31:58.920
<v Speaker 2>the things related to displaying an address form into a component,

561
00:32:00.279 --> 00:32:04.119
<v Speaker 2>and it basically will expect you then to provide it

562
00:32:04.160 --> 00:32:06.880
<v Speaker 2>an address model, so that way, when you work with it,

563
00:32:06.920 --> 00:32:08.640
<v Speaker 2>you don't even have to worry about working with the

564
00:32:08.640 --> 00:32:11.680
<v Speaker 2>guy directly. You just work with the address model, and

565
00:32:11.720 --> 00:32:15.240
<v Speaker 2>when you update the address model, because of bidirectional data binding,

566
00:32:15.279 --> 00:32:17.799
<v Speaker 2>it will automatically show updates on the form on the screen.

567
00:32:18.160 --> 00:32:21.200
<v Speaker 2>So it'll save developers a lot of work. Like this

568
00:32:21.319 --> 00:32:24.279
<v Speaker 2>approach saves developers a lot of work because they don't

569
00:32:24.319 --> 00:32:27.000
<v Speaker 2>have to If you have components that are very well encapsulated,

570
00:32:27.400 --> 00:32:29.519
<v Speaker 2>you can just work with their data and their data

571
00:32:29.559 --> 00:32:32.000
<v Speaker 2>will automatically reflect on the GUI because of data binding.

572
00:32:33.079 --> 00:32:36.400
<v Speaker 1>Yeah, that's really cool, and I mean I think that's

573
00:32:36.440 --> 00:32:39.920
<v Speaker 1>been one thing that's caused the divide too, to be honest,

574
00:32:40.079 --> 00:32:43.680
<v Speaker 1>in that you know, people like to stylize and make

575
00:32:43.720 --> 00:32:48.000
<v Speaker 1>their own web components with the ACT or whatever framework

576
00:32:48.279 --> 00:32:52.880
<v Speaker 1>that they you know, that they've chosen and handle all

577
00:32:52.920 --> 00:32:57.119
<v Speaker 1>their you know, front end interactions and stuff. But then

578
00:32:57.640 --> 00:32:59.960
<v Speaker 1>you know, I have to request that the back end

579
00:33:00.200 --> 00:33:03.839
<v Speaker 1>team like help supply that data or new like as

580
00:33:03.920 --> 00:33:06.720
<v Speaker 1>data changes, Like how do you add and adjust to

581
00:33:06.759 --> 00:33:10.599
<v Speaker 1>the component without you know, the data being there on

582
00:33:10.640 --> 00:33:12.720
<v Speaker 1>the back end. And so you have this like dual

583
00:33:12.880 --> 00:33:17.119
<v Speaker 1>edge coupling. And if we have that coupling anyway, why

584
00:33:17.160 --> 00:33:19.400
<v Speaker 1>not have it all in the same place. I think

585
00:33:19.799 --> 00:33:23.240
<v Speaker 1>it makes a lot of sense to me personally. So

586
00:33:23.640 --> 00:33:31.839
<v Speaker 1>how I'm wondering, like, you know, does this also like

587
00:33:33.039 --> 00:33:37.440
<v Speaker 1>appease like teams that grow in skies and like have

588
00:33:37.559 --> 00:33:40.880
<v Speaker 1>devoted front end teams, Like is there still kind of

589
00:33:40.920 --> 00:33:46.319
<v Speaker 1>that is this like trying to like consolidate the team structure,

590
00:33:46.519 --> 00:33:49.319
<v Speaker 1>or is it also like supporting the idea of Okay,

591
00:33:49.400 --> 00:33:51.079
<v Speaker 1>we're gonna have front end people that are going to

592
00:33:51.319 --> 00:33:54.799
<v Speaker 1>be focusing specifically on styling and adjusting the components, Like

593
00:33:55.319 --> 00:33:57.880
<v Speaker 1>is it still kind of a straightforward process of like

594
00:33:58.319 --> 00:34:02.960
<v Speaker 1>HTML CSS kind of ulation for front end styling of

595
00:34:03.000 --> 00:34:06.039
<v Speaker 1>the components, or is it take more of like I

596
00:34:06.119 --> 00:34:10.719
<v Speaker 1>need to learn Glimmer DSL, you know, aspect of things.

597
00:34:11.920 --> 00:34:16.239
<v Speaker 2>Yeah, so one thing to clarify is that, yeah, glimmer

598
00:34:16.320 --> 00:34:20.639
<v Speaker 2>DSSEL for web in the end generates real JavaScript, real HTML,

599
00:34:20.679 --> 00:34:26.760
<v Speaker 2>and real CSS, so like when you use it, you

600
00:34:26.800 --> 00:34:31.599
<v Speaker 2>will generate like standard ahtmail CSS JavaScript. So if people

601
00:34:31.599 --> 00:34:34.519
<v Speaker 2>have concerns about testing like the fund end user interfaces,

602
00:34:35.159 --> 00:34:37.519
<v Speaker 2>they can just test them as basic HTML. They don't

603
00:34:37.519 --> 00:34:40.320
<v Speaker 2>have to even be involved in the Ruby part. If

604
00:34:40.760 --> 00:34:44.400
<v Speaker 2>people are back end developers that know back end Ruby

605
00:34:44.440 --> 00:34:47.079
<v Speaker 2>and they use it with rails, now this opens the

606
00:34:47.119 --> 00:34:51.360
<v Speaker 2>door completely for them to use glimmer on the front end.

607
00:34:52.599 --> 00:34:59.199
<v Speaker 2>So that actually, in my experience, improves productivity in number

608
00:34:59.239 --> 00:35:02.760
<v Speaker 2>of ways. Usually it's recommended to do full stack development,

609
00:35:02.880 --> 00:35:04.960
<v Speaker 2>not back in front end, at least in my company

610
00:35:04.960 --> 00:35:07.480
<v Speaker 2>we definitely and a few other companies I worked out

611
00:35:07.519 --> 00:35:10.440
<v Speaker 2>in the past, that's definitely the approach we adopted, because

612
00:35:11.519 --> 00:35:13.920
<v Speaker 2>then the developer is aware of the full value being

613
00:35:13.920 --> 00:35:16.199
<v Speaker 2>offered to the customer end to end from the user

614
00:35:16.199 --> 00:35:18.360
<v Speaker 2>interface all the way down to the database and then back,

615
00:35:19.159 --> 00:35:22.119
<v Speaker 2>so then they can optimize the code or simplify the

616
00:35:22.199 --> 00:35:27.679
<v Speaker 2>code as with a better understanding of like the holistic

617
00:35:27.760 --> 00:35:30.760
<v Speaker 2>view of everything and be able to provide a better

618
00:35:30.760 --> 00:35:34.920
<v Speaker 2>product customers in general, and also in my experience, results

619
00:35:34.920 --> 00:35:38.119
<v Speaker 2>in less work and less communication overhead. When there are

620
00:35:38.159 --> 00:35:41.760
<v Speaker 2>fun end and back end developers, there's communication overhead, there's

621
00:35:41.800 --> 00:35:46.000
<v Speaker 2>more work about translating things from the back endto the

622
00:35:46.000 --> 00:35:48.840
<v Speaker 2>front end and vice versa. And if there are multiple

623
00:35:48.920 --> 00:35:52.360
<v Speaker 2>languages that's even worse then, like there's even more translation

624
00:35:52.480 --> 00:35:55.960
<v Speaker 2>going on. So this enables now back in developers to

625
00:35:56.000 --> 00:35:58.679
<v Speaker 2>just do fund work and not worry anymore about that

626
00:36:00.079 --> 00:36:03.159
<v Speaker 2>a way, it saves companies from actually it cuts down

627
00:36:03.199 --> 00:36:06.800
<v Speaker 2>the hiring costs because companies that have back end developers

628
00:36:07.039 --> 00:36:09.239
<v Speaker 2>they don't even need, Like if there's a startup that

629
00:36:09.320 --> 00:36:12.679
<v Speaker 2>wants to be as efficient as possible, as productive as possible,

630
00:36:12.719 --> 00:36:14.960
<v Speaker 2>they don't even have to hire fun and developers anymore

631
00:36:15.119 --> 00:36:18.199
<v Speaker 2>if they have solid back end Ruby developers. So that's

632
00:36:18.239 --> 00:36:20.119
<v Speaker 2>a very big win. But on the other hand, if

633
00:36:20.119 --> 00:36:22.760
<v Speaker 2>there are companies that have back in front end developers,

634
00:36:24.719 --> 00:36:27.519
<v Speaker 2>front end developers would learn this just like learning any

635
00:36:27.519 --> 00:36:30.119
<v Speaker 2>other fund in library. Because for example, React definitely had

636
00:36:30.119 --> 00:36:33.199
<v Speaker 2>a very large, like a big learning curve in a

637
00:36:33.239 --> 00:36:37.559
<v Speaker 2>sense because they had JSX, which was not a normal base.

638
00:36:37.679 --> 00:36:41.800
<v Speaker 2>It's not a standard technology. JSX is actually not standard HDML,

639
00:36:41.880 --> 00:36:45.440
<v Speaker 2>not standard CSS, not even standard JavaScript. So it's very weird,

640
00:36:45.960 --> 00:36:48.639
<v Speaker 2>and like React has a lot of weird things that,

641
00:36:48.719 --> 00:36:51.159
<v Speaker 2>in my opinion, like waste a lot of productivities to learn,

642
00:36:51.280 --> 00:36:53.920
<v Speaker 2>Like why are we working low level state when we

643
00:36:53.960 --> 00:36:56.960
<v Speaker 2>actually have objects oriented programming languages that are way more advanced.

644
00:36:57.199 --> 00:37:00.400
<v Speaker 2>They have the same idea. So in my mind, React

645
00:37:00.519 --> 00:37:03.199
<v Speaker 2>reinvents op in a different way and give it a

646
00:37:03.239 --> 00:37:06.599
<v Speaker 2>different gives it a different name, Like basically object attributes

647
00:37:06.639 --> 00:37:11.360
<v Speaker 2>are cold states, hoax and react and object observers they

648
00:37:11.360 --> 00:37:14.559
<v Speaker 2>call them effects and react and that's it. Like React

649
00:37:14.639 --> 00:37:18.679
<v Speaker 2>is not really it's just reinventing things. It's not really

650
00:37:18.719 --> 00:37:23.400
<v Speaker 2>as modern and new as people think it is. For

651
00:37:23.480 --> 00:37:25.639
<v Speaker 2>people that have been software engineering for a long time,

652
00:37:25.679 --> 00:37:29.039
<v Speaker 2>they could tell that it like React reacts ideas have

653
00:37:29.079 --> 00:37:32.039
<v Speaker 2>been around since the nineties at least, like the idea

654
00:37:32.079 --> 00:37:34.480
<v Speaker 2>of components has been around since the nineties, from visual

655
00:37:34.519 --> 00:37:42.280
<v Speaker 2>Basic for example. So anyways, so in the end, I

656
00:37:42.400 --> 00:37:45.719
<v Speaker 2>found it more productive to like and reactually have to

657
00:37:45.760 --> 00:37:50.159
<v Speaker 2>open weird curly braces to mix logic with view concerns.

658
00:37:50.159 --> 00:37:52.800
<v Speaker 2>So if I want to say if this, do this,

659
00:37:52.960 --> 00:37:55.559
<v Speaker 2>if that, do that. It's a bit weird opening the

660
00:37:55.599 --> 00:37:58.400
<v Speaker 2>curly braces. It's very hard to integrate the logic with

661
00:37:58.440 --> 00:38:02.480
<v Speaker 2>a view. Whereas in Ruby and glimmer Da steltw for Web,

662
00:38:02.559 --> 00:38:05.480
<v Speaker 2>you are in Ruby already, you're just using a redsl

663
00:38:05.519 --> 00:38:09.000
<v Speaker 2>You can actually write if in that immediately in the

664
00:38:09.000 --> 00:38:12.760
<v Speaker 2>same language. And also it's even better than ERB as well,

665
00:38:12.760 --> 00:38:16.599
<v Speaker 2>because ERB lets you requires that developers open scriptlets to

666
00:38:16.719 --> 00:38:23.239
<v Speaker 2>mix logic with a view like concerns. Sorry, not the concerns,

667
00:38:23.239 --> 00:38:26.000
<v Speaker 2>but more it's actually presentation logic. It's not really it

668
00:38:26.079 --> 00:38:28.400
<v Speaker 2>is view logic. But yeah, to mix it with view

669
00:38:28.480 --> 00:38:32.079
<v Speaker 2>structure you have to open u scriptlets, which can get

670
00:38:32.119 --> 00:38:34.519
<v Speaker 2>really annoying after a while, and over a year adds

671
00:38:34.639 --> 00:38:37.960
<v Speaker 2>up so much that it would actually present a dragon productivity,

672
00:38:38.159 --> 00:38:40.480
<v Speaker 2>which goes back to that world frog metaphor that I

673
00:38:40.480 --> 00:38:44.239
<v Speaker 2>spoke of earlier. So in a way, I would say

674
00:38:44.639 --> 00:38:48.519
<v Speaker 2>JavaScript developers that are worth their salt, that are actually smart,

675
00:38:49.400 --> 00:38:52.280
<v Speaker 2>solid software engineers should be able to pick up glimmer

676
00:38:52.320 --> 00:38:53.800
<v Speaker 2>Da stelf for Web in no time and then be

677
00:38:53.840 --> 00:38:55.719
<v Speaker 2>more productive in it than using JavaScript.

678
00:38:58.039 --> 00:38:59.920
<v Speaker 1>I see, yeah, I mean that makes a lot of sense.

679
00:39:00.199 --> 00:39:04.960
<v Speaker 1>Uh looking at more of these examples in this Rails sample,

680
00:39:05.599 --> 00:39:09.000
<v Speaker 1>you're using like an external code highlighter, which is really cool.

681
00:39:09.559 --> 00:39:14.360
<v Speaker 1>Uh And it's just like all in Ruby. Yeah, really

682
00:39:14.400 --> 00:39:18.039
<v Speaker 1>really cool. Uh So I'm curious what is the like

683
00:39:18.559 --> 00:39:21.719
<v Speaker 1>it is what's the deploy process look like for uh?

684
00:39:21.960 --> 00:39:24.840
<v Speaker 1>This stuff? Like is it the same as you know,

685
00:39:25.440 --> 00:39:30.360
<v Speaker 1>any Rails app, any Ruby app? What's that look like?

686
00:39:31.280 --> 00:39:36.559
<v Speaker 2>Uh so? Uh, I'm using the opal Rails gem, which

687
00:39:36.639 --> 00:39:43.280
<v Speaker 2>is compliance with the Rails Classic Asset pipeline. H So

688
00:39:43.599 --> 00:39:47.639
<v Speaker 2>it runs on top of crockets, so it's actually very simple.

689
00:39:47.840 --> 00:39:50.280
<v Speaker 2>It brings us back to the old simple days of

690
00:39:50.280 --> 00:39:54.800
<v Speaker 2>coffee script and older JavaScript before we have to start

691
00:39:54.880 --> 00:39:58.360
<v Speaker 2>using crazy bundlers like Webpack. I mean, in my opinion

692
00:39:58.400 --> 00:40:02.599
<v Speaker 2>that's a benefit because Webpack, like at my job, maintaining

693
00:40:02.639 --> 00:40:06.039
<v Speaker 2>Webpack is like wetpack is such a monstrosity with it

694
00:40:06.159 --> 00:40:10.239
<v Speaker 2>with all its options and configuration settings that like upgrading

695
00:40:10.280 --> 00:40:12.559
<v Speaker 2>it is a very difficult process. Like we I recently

696
00:40:12.599 --> 00:40:15.559
<v Speaker 2>upgraded it from an old version to anywhere one and

697
00:40:15.719 --> 00:40:18.199
<v Speaker 2>it was absolute hell and it took more than a

698
00:40:18.239 --> 00:40:22.920
<v Speaker 2>month to finish the work. So uh, this just where's

699
00:40:22.920 --> 00:40:26.960
<v Speaker 2>this just runs on top of sprockets. So meaning you

700
00:40:27.000 --> 00:40:30.079
<v Speaker 2>just do a rail's asset precompile when you deployed production

701
00:40:30.239 --> 00:40:32.800
<v Speaker 2>and it generates JavaScript files and that's it. And then

702
00:40:33.079 --> 00:40:35.199
<v Speaker 2>you put the JavaScript files in a cd N so

703
00:40:35.239 --> 00:40:39.400
<v Speaker 2>then people download them with instant like download speeds. Uh

704
00:40:39.480 --> 00:40:43.840
<v Speaker 2>and uh the website will be very like high performance

705
00:40:43.840 --> 00:40:47.039
<v Speaker 2>as a result of that. And locally on my machine,

706
00:40:47.039 --> 00:40:50.719
<v Speaker 2>there's no bundler again, there's just ople rails uh the gem.

707
00:40:51.119 --> 00:40:53.320
<v Speaker 2>So what that means is every time I had a

708
00:40:53.360 --> 00:40:57.000
<v Speaker 2>web hit a web page, uh, the OPAL code gets

709
00:40:57.000 --> 00:40:59.639
<v Speaker 2>compiled on the spot and development. So that way as

710
00:40:59.639 --> 00:41:01.880
<v Speaker 2>I update the code and I refresh the web page,

711
00:41:02.280 --> 00:41:06.840
<v Speaker 2>it picks up. Then you or changes that said, I

712
00:41:06.880 --> 00:41:12.199
<v Speaker 2>heard from the Opole people that they are working on

713
00:41:13.840 --> 00:41:19.039
<v Speaker 2>like a way to integrate Opole with bundlers like wetpack,

714
00:41:19.119 --> 00:41:21.840
<v Speaker 2>and they might already have I believe they already have

715
00:41:21.960 --> 00:41:24.480
<v Speaker 2>like proofs of concepts of it or maybe even working versions,

716
00:41:25.320 --> 00:41:28.039
<v Speaker 2>but I'm personally not interested in using them. In my mind,

717
00:41:28.119 --> 00:41:32.079
<v Speaker 2>like a big benefit is avoiding wetpack. Is like my

718
00:41:32.239 --> 00:41:34.039
<v Speaker 2>way of doing things I would say with this is

719
00:41:34.079 --> 00:41:36.800
<v Speaker 2>to not use a bundler. I would in any third

720
00:41:36.840 --> 00:41:39.480
<v Speaker 2>party libraries, I would link to their CDNs. That's fast

721
00:41:39.559 --> 00:41:42.280
<v Speaker 2>enough and good enough. I realized that bundlers give you

722
00:41:42.360 --> 00:41:45.800
<v Speaker 2>chunking and other features that people will say will give

723
00:41:45.840 --> 00:41:49.280
<v Speaker 2>you even better performance. But like for most apps that

724
00:41:49.320 --> 00:41:53.639
<v Speaker 2>are smaller startup rails apps or mid sized apps, just

725
00:41:53.679 --> 00:41:56.760
<v Speaker 2>what Rails is used for the most I'd rather not

726
00:41:56.840 --> 00:42:00.000
<v Speaker 2>use a bundler. I'd rather just have things bundled with

727
00:42:00.760 --> 00:42:05.679
<v Speaker 2>rails assets pre compile on deploy and locally would just

728
00:42:05.760 --> 00:42:08.519
<v Speaker 2>compile live when I'm doing development.

729
00:42:10.440 --> 00:42:14.039
<v Speaker 1>Yeah, totally. And thinking more about like the bundle or

730
00:42:14.079 --> 00:42:18.000
<v Speaker 1>aspect of it, it makes me think of was it

731
00:42:18.119 --> 00:42:21.800
<v Speaker 1>Rails of assets if you were familiar with that, where

732
00:42:21.840 --> 00:42:25.639
<v Speaker 1>you Rail's assets was like a basically just a gem

733
00:42:27.800 --> 00:42:32.320
<v Speaker 1>format where you could pull in node related MPM packages

734
00:42:32.360 --> 00:42:35.719
<v Speaker 1>into your Reil's asset pipeline, which was to me like

735
00:42:35.880 --> 00:42:39.480
<v Speaker 1>super great. It didn't require any of the you know,

736
00:42:39.840 --> 00:42:45.159
<v Speaker 1>JavaScript packaging systems or extra dependencies like that, and it

737
00:42:45.239 --> 00:42:49.079
<v Speaker 1>worked great and just bundle install and it included all

738
00:42:49.119 --> 00:42:51.880
<v Speaker 1>of the assets that you needed and handled all that.

739
00:42:51.960 --> 00:42:55.639
<v Speaker 1>And I do miss that, And so I'm hopeful with

740
00:42:55.679 --> 00:42:59.519
<v Speaker 1>this kind of push here that we can kind of

741
00:42:59.559 --> 00:43:03.440
<v Speaker 1>get back to something like that, which makes brings me

742
00:43:03.480 --> 00:43:09.599
<v Speaker 1>to my next topic, Uh Turbo. What what are your

743
00:43:09.599 --> 00:43:12.760
<v Speaker 1>feelings on Turbo? And like the HTML over the wire

744
00:43:12.920 --> 00:43:16.119
<v Speaker 1>aspects of rails.

745
00:43:17.440 --> 00:43:20.599
<v Speaker 2>So, uh Turbo is nice if I have a very

746
00:43:20.639 --> 00:43:24.079
<v Speaker 2>simple business app and I need very very few like

747
00:43:24.280 --> 00:43:29.840
<v Speaker 2>front end uh front end E interactions without writing front

748
00:43:29.880 --> 00:43:33.360
<v Speaker 2>end code. Uh, I can use Turbo for that, like

749
00:43:33.400 --> 00:43:36.119
<v Speaker 2>where it would update certain parts of the screen automatically

750
00:43:36.199 --> 00:43:40.079
<v Speaker 2>based on back end directives from a controller action. So

751
00:43:40.280 --> 00:43:44.079
<v Speaker 2>I think for simpler apps it works fine. For more

752
00:43:44.119 --> 00:43:47.440
<v Speaker 2>sophisticated apps, it doesn't do everything. And that's the reason

753
00:43:47.480 --> 00:43:49.960
<v Speaker 2>why a lot of Rubists nowadays reach for React and

754
00:43:50.000 --> 00:43:53.840
<v Speaker 2>other JavaScript libraries like svelt and viejss is because they

755
00:43:54.079 --> 00:43:56.639
<v Speaker 2>they at one point hit a wall or feel like

756
00:43:56.679 --> 00:44:00.199
<v Speaker 2>it's too complicated to manage Turbo from controllers in the

757
00:44:00.199 --> 00:44:02.519
<v Speaker 2>back end then to actually just write front end code.

758
00:44:03.159 --> 00:44:08.280
<v Speaker 2>And I think a big like I think Turbo in

759
00:44:08.320 --> 00:44:12.480
<v Speaker 2>a way is a bit like written and with the

760
00:44:12.519 --> 00:44:16.760
<v Speaker 2>approach of being a bit aversive to writing front end

761
00:44:16.800 --> 00:44:22.079
<v Speaker 2>JavaScript code because JavaScript code is not nice. But if

762
00:44:22.119 --> 00:44:24.400
<v Speaker 2>we have the front end language that was nice, and

763
00:44:24.440 --> 00:44:26.559
<v Speaker 2>we do now in twenty twenty four, which is Ruby,

764
00:44:26.920 --> 00:44:31.199
<v Speaker 2>using Opal or Rosen, then there's no reason for me

765
00:44:31.239 --> 00:44:33.559
<v Speaker 2>to consider Turbo. In that case, I would rather just

766
00:44:33.599 --> 00:44:35.880
<v Speaker 2>write front end Ruby code the normal way and like

767
00:44:36.119 --> 00:44:39.079
<v Speaker 2>following an NBC pattern, and that should be good enough.

768
00:44:39.119 --> 00:44:40.519
<v Speaker 2>Like I don't feel and I can just make the

769
00:44:40.599 --> 00:44:44.199
<v Speaker 2>rest API calls. I mean, on my job, people do

770
00:44:44.239 --> 00:44:47.519
<v Speaker 2>that anyways with React right now they connect React to

771
00:44:47.559 --> 00:44:50.760
<v Speaker 2>the back end with the rest API calls. So I mean,

772
00:44:50.840 --> 00:44:53.079
<v Speaker 2>I feel like that's simple enough, and a lot of

773
00:44:53.079 --> 00:44:56.039
<v Speaker 2>people are comfortable with that model. One thing about Turbo

774
00:44:56.079 --> 00:44:57.920
<v Speaker 2>is that has a bit of a learning curve and

775
00:44:58.159 --> 00:45:01.320
<v Speaker 2>because its model is a bit like out of the normal,

776
00:45:01.639 --> 00:45:05.320
<v Speaker 2>out of the ordinary, the mental model, so people have

777
00:45:05.400 --> 00:45:10.000
<v Speaker 2>to think a lot about IDs on elements in HTML.

778
00:45:10.599 --> 00:45:14.199
<v Speaker 2>So in my experience, I feel like writing features in

779
00:45:14.239 --> 00:45:17.440
<v Speaker 2>Glimmer the Alpha Web is simpler because I'm just writing

780
00:45:17.440 --> 00:45:19.800
<v Speaker 2>basic Ruby code. I don't have to worry about IDs.

781
00:45:19.880 --> 00:45:22.360
<v Speaker 2>You can just use variables the normal Ruby way, and

782
00:45:22.480 --> 00:45:24.960
<v Speaker 2>variables will I defy elements. You can grab elements by

783
00:45:25.000 --> 00:45:28.920
<v Speaker 2>variable instead of by ID in general, like generally you

784
00:45:28.920 --> 00:45:31.840
<v Speaker 2>don't have to refer to IDs and elements, so it's

785
00:45:31.920 --> 00:45:35.239
<v Speaker 2>even it's simpler than JQuery's simpler than my mind, a

786
00:45:35.280 --> 00:45:40.320
<v Speaker 2>bit than the mental model of Turbo, and it can

787
00:45:40.360 --> 00:45:42.480
<v Speaker 2>do things that are fully like just front end only

788
00:45:42.559 --> 00:45:46.119
<v Speaker 2>interactions that don't even talk to the back end. So,

789
00:45:46.320 --> 00:45:49.280
<v Speaker 2>as far as I know, Turbo is usually augmented by stimulus.

790
00:45:50.159 --> 00:45:53.719
<v Speaker 2>I find stimulus is code a bit boilerplate ish, and

791
00:45:54.280 --> 00:45:57.199
<v Speaker 2>because it requires people to write controllers, I find that

792
00:45:57.320 --> 00:46:01.079
<v Speaker 2>a bit too verbose. Personally, I feel like it's not

793
00:46:01.199 --> 00:46:04.719
<v Speaker 2>dry enough. It could be drier, but also it's written

794
00:46:04.719 --> 00:46:06.880
<v Speaker 2>in JavaScript, which is very ugly compared to back end

795
00:46:06.960 --> 00:46:09.519
<v Speaker 2>Ruby code. Like even even if I'm writing a tiny

796
00:46:09.519 --> 00:46:13.239
<v Speaker 2>bit of sprinkles in JavaScript, if I can write them

797
00:46:13.280 --> 00:46:14.519
<v Speaker 2>in Ruby would be even better.

798
00:46:15.519 --> 00:46:19.280
<v Speaker 1>Yeah, I agree with you. There definitely going and having

799
00:46:19.280 --> 00:46:24.079
<v Speaker 1>the context switch constantly between the two definitely slows down

800
00:46:24.119 --> 00:46:28.519
<v Speaker 1>the development for me personally. I don't want to speak

801
00:46:28.519 --> 00:46:33.119
<v Speaker 1>for everyone, but uh yeah, I mean I feel like

802
00:46:33.159 --> 00:46:35.519
<v Speaker 1>we've been driving, like we keep talking about this, we

803
00:46:35.639 --> 00:46:38.679
<v Speaker 1>keep driving toward like a more like view component style,

804
00:46:39.000 --> 00:46:43.519
<v Speaker 1>like in an applic application development process that is getting closer,

805
00:46:43.519 --> 00:46:46.280
<v Speaker 1>and this seems to be like crossing that bridge of

806
00:46:46.320 --> 00:46:49.760
<v Speaker 1>the missing pieces too. Of well, we still need JavaScript.

807
00:46:49.880 --> 00:46:53.599
<v Speaker 1>JavaScript libraries are still helpful, like how do we use

808
00:46:53.679 --> 00:46:56.159
<v Speaker 1>them in the context of our application, but not have

809
00:46:56.280 --> 00:47:00.840
<v Speaker 1>to just use JavaScript to couple our our back ends.

810
00:47:01.400 --> 00:47:06.199
<v Speaker 2>And now, yeah, one of the issues with previous attempts

811
00:47:06.199 --> 00:47:12.039
<v Speaker 2>at providing fun end development library for that would use

812
00:47:12.159 --> 00:47:15.440
<v Speaker 2>Ruby like oprah Ruby for example. For example, there was

813
00:47:15.440 --> 00:47:19.440
<v Speaker 2>a much older framework called Vault that was a bit

814
00:47:19.519 --> 00:47:26.239
<v Speaker 2>popular around twenty fifteen or twenty sixteen. Vault was basically

815
00:47:26.280 --> 00:47:30.639
<v Speaker 2>providing people with a full isomorphic approach to development on

816
00:47:30.679 --> 00:47:33.199
<v Speaker 2>the web, so that you write the front end with

817
00:47:33.360 --> 00:47:36.719
<v Speaker 2>Vault using the Ruby and they might have had a DSL,

818
00:47:37.159 --> 00:47:40.719
<v Speaker 2>and then on the back end they basically have models

819
00:47:40.760 --> 00:47:44.000
<v Speaker 2>that can establish connections to the back end directly without

820
00:47:44.079 --> 00:47:47.119
<v Speaker 2>you writing controllers or writing recpis on the back end

821
00:47:47.119 --> 00:47:50.599
<v Speaker 2>if I remember right. So it was a very innovative approach.

822
00:47:51.400 --> 00:47:53.719
<v Speaker 2>It had very good ideas. The issue with it was

823
00:47:53.760 --> 00:47:56.360
<v Speaker 2>that it required it forced people to change their mental

824
00:47:56.400 --> 00:48:00.920
<v Speaker 2>model for males too much. And that's a problem. If

825
00:48:00.920 --> 00:48:03.719
<v Speaker 2>somebody wrote to a rails app that is doing very

826
00:48:03.719 --> 00:48:06.119
<v Speaker 2>good for their business and it's been around for five years,

827
00:48:07.000 --> 00:48:09.199
<v Speaker 2>it might be too much to ask for them to

828
00:48:09.280 --> 00:48:12.559
<v Speaker 2>change their entire apps approach right away to something like Vault.

829
00:48:13.280 --> 00:48:17.760
<v Speaker 2>So Glimmer is aiming to intentionally provide the simplest possible

830
00:48:18.559 --> 00:48:22.800
<v Speaker 2>thing that you could use to augmentary your rails app

831
00:48:22.840 --> 00:48:25.559
<v Speaker 2>with something better on the front end, and no more

832
00:48:25.599 --> 00:48:28.679
<v Speaker 2>than that. So I intentionally just provide a drop in

833
00:48:28.760 --> 00:48:31.599
<v Speaker 2>replacement for your JavaScript library on the front end, and

834
00:48:32.199 --> 00:48:34.800
<v Speaker 2>thee nice thing about it is JavaScript funends. Like sorry,

835
00:48:34.840 --> 00:48:37.880
<v Speaker 2>front end apps are. Every page is its own app,

836
00:48:38.000 --> 00:48:40.280
<v Speaker 2>So if you have older things built with j Query

837
00:48:40.719 --> 00:48:43.239
<v Speaker 2>or React in the past, it doesn't matter. You can

838
00:48:43.280 --> 00:48:45.599
<v Speaker 2>start any new pages with using Glimmer and it's very

839
00:48:45.599 --> 00:48:48.360
<v Speaker 2>easy to add it and you can get started very quickly.

840
00:48:49.360 --> 00:48:52.800
<v Speaker 2>My plan behind that is it would expand gradually in

841
00:48:52.880 --> 00:48:55.039
<v Speaker 2>the future so that more and more pieces can be

842
00:48:55.079 --> 00:48:58.559
<v Speaker 2>added if people want to optionally. So the second so

843
00:48:58.679 --> 00:49:01.360
<v Speaker 2>you mentioned that now things are coming together in a

844
00:49:01.360 --> 00:49:04.000
<v Speaker 2>way because finally, like on the back end we have

845
00:49:04.079 --> 00:49:07.000
<v Speaker 2>things like flex or view component and on the front

846
00:49:07.079 --> 00:49:11.960
<v Speaker 2>end there's you know, Glimmer dslf web. My idea is

847
00:49:12.039 --> 00:49:15.039
<v Speaker 2>to actually extend Glimmer support to the back end as well.

848
00:49:15.280 --> 00:49:17.960
<v Speaker 2>So eventually you write your glimmer web components on the

849
00:49:18.000 --> 00:49:22.239
<v Speaker 2>front end and then you I want to support server

850
00:49:22.360 --> 00:49:24.199
<v Speaker 2>side rendering of them on the back end, so that way,

851
00:49:24.239 --> 00:49:26.280
<v Speaker 2>on the back end you don't have to use R anymore.

852
00:49:26.559 --> 00:49:29.519
<v Speaker 2>You drop the RB and replace it with a much

853
00:49:29.559 --> 00:49:33.079
<v Speaker 2>simpler glimmer DSL, but you would basically it would work

854
00:49:33.199 --> 00:49:35.239
<v Speaker 2>kind of like view component or flex. Like the back

855
00:49:35.320 --> 00:49:39.920
<v Speaker 2>end controller actions will just render glimmer components and if

856
00:49:40.000 --> 00:49:41.760
<v Speaker 2>you render them from the back end on first hit

857
00:49:41.800 --> 00:49:44.920
<v Speaker 2>of the website, they will, you know, first render the

858
00:49:45.000 --> 00:49:47.559
<v Speaker 2>HTML and then they will hydrate and add the JavaScript

859
00:49:47.559 --> 00:49:50.159
<v Speaker 2>clayer on top of that. So there will be a

860
00:49:50.159 --> 00:49:52.960
<v Speaker 2>bit of work to explore that idea, but that idea

861
00:49:53.000 --> 00:49:56.239
<v Speaker 2>is on the horizon. Another idea I had in mind

862
00:49:56.360 --> 00:49:59.320
<v Speaker 2>was to actually replace E R E files with a

863
00:49:59.320 --> 00:50:03.920
<v Speaker 2>simpler solution called GRB. So GRB would be glimmer RB,

864
00:50:04.400 --> 00:50:07.719
<v Speaker 2>which is basically files that look like RB, except instead

865
00:50:07.719 --> 00:50:12.519
<v Speaker 2>of using template style like scriptlet syntax, you would use

866
00:50:12.559 --> 00:50:15.639
<v Speaker 2>the glimmer DSL directly in them. So that's another idea

867
00:50:15.679 --> 00:50:17.639
<v Speaker 2>I have. So I have I have a few ideas

868
00:50:17.719 --> 00:50:21.039
<v Speaker 2>on the horizon to enable people to more and more

869
00:50:22.679 --> 00:50:26.639
<v Speaker 2>like improve their rails, wave rendering views and componentizing their views.

870
00:50:27.079 --> 00:50:30.679
<v Speaker 2>And hopefully eventually once I add more and more of

871
00:50:30.719 --> 00:50:33.239
<v Speaker 2>those ideas, I guess The fourth idea would be to

872
00:50:33.280 --> 00:50:35.880
<v Speaker 2>do what Vault was doing, which is to have front

873
00:50:35.960 --> 00:50:39.119
<v Speaker 2>end models act as proxies for back end models. If

874
00:50:39.119 --> 00:50:41.559
<v Speaker 2>you do that, then rails developers don't even have to

875
00:50:41.559 --> 00:50:44.519
<v Speaker 2>write controllers anymore. You don't have to worry about so

876
00:50:44.599 --> 00:50:46.719
<v Speaker 2>you're gonna like I can remove all of the boilerplate

877
00:50:46.760 --> 00:50:49.199
<v Speaker 2>code of writing controllers out, and then I can remove

878
00:50:49.199 --> 00:50:53.199
<v Speaker 2>all the boiler plate code of writing JavaScript services out

879
00:50:53.480 --> 00:50:57.880
<v Speaker 2>like rest services, and that way I can connect JavaScript

880
00:50:57.920 --> 00:51:00.400
<v Speaker 2>fund and models directly to active record or or back

881
00:51:00.480 --> 00:51:02.719
<v Speaker 2>end models in Rails, which is kind of like what

882
00:51:02.920 --> 00:51:09.559
<v Speaker 2>Vault and also Hyperstack, which is another open Rugby library does. Unfortunately,

883
00:51:09.599 --> 00:51:11.960
<v Speaker 2>both both of them are no longer maintained, or at

884
00:51:12.000 --> 00:51:14.920
<v Speaker 2>least Hyperstack hasn't had their released in three years. Maybe

885
00:51:14.960 --> 00:51:17.480
<v Speaker 2>I don't know if it is maintained still, but either way,

886
00:51:17.639 --> 00:51:21.199
<v Speaker 2>that's so that's I think that's a very important thing

887
00:51:21.239 --> 00:51:25.960
<v Speaker 2>in software engineering is incremental development, like iterative incremental development,

888
00:51:26.000 --> 00:51:28.519
<v Speaker 2>and in a way, Glimmer is adopting that approach for

889
00:51:28.639 --> 00:51:31.519
<v Speaker 2>rolling out its features, where people can start with a

890
00:51:31.679 --> 00:51:34.119
<v Speaker 2>you know, droping replacement for their job ASCRIPT fundend library

891
00:51:34.480 --> 00:51:36.440
<v Speaker 2>and then move on to a back end technology like

892
00:51:36.480 --> 00:51:39.679
<v Speaker 2>either GRB or rendering front end components on the back

893
00:51:39.719 --> 00:51:43.559
<v Speaker 2>end directly. And finally, it would be like replacing their

894
00:51:43.559 --> 00:51:47.159
<v Speaker 2>controller layer completely with like a model proxy layer that

895
00:51:47.199 --> 00:51:50.679
<v Speaker 2>would bypass the whole rest API thing, or it would

896
00:51:50.679 --> 00:51:53.079
<v Speaker 2>basically automate it so that I don't have to write

897
00:51:53.119 --> 00:51:56.079
<v Speaker 2>to rest code myself directly. So yeah, these are some

898
00:51:56.159 --> 00:51:58.599
<v Speaker 2>of the ideas and the pipeline for Glimmer DASELF for Web.

899
00:52:00.360 --> 00:52:04.559
<v Speaker 1>Yeah, very awesome. I'm looking forward to seeing that come together.

900
00:52:05.440 --> 00:52:10.719
<v Speaker 1>I'm sure I'm not the only one. So, like, this

901
00:52:10.800 --> 00:52:16.280
<v Speaker 1>brings me to my like last kind of question I

902
00:52:16.280 --> 00:52:20.360
<v Speaker 1>guess is like the you know, how, does are there

903
00:52:20.360 --> 00:52:26.039
<v Speaker 1>any plans to bridge the gap of consolidating the application

904
00:52:26.119 --> 00:52:32.000
<v Speaker 1>development to allow automatically creating both for web and desktop

905
00:52:32.480 --> 00:52:36.719
<v Speaker 1>and mobile and x y Z, Like is that desirable

906
00:52:36.840 --> 00:52:40.199
<v Speaker 1>future or is that better to keep things separate?

907
00:52:40.480 --> 00:52:47.960
<v Speaker 2>Still, So I explored that idea with my older Glimmer

908
00:52:48.280 --> 00:52:51.239
<v Speaker 2>Web library. It was called Glimmer DSL for Opal. It

909
00:52:51.320 --> 00:52:53.440
<v Speaker 2>was just the library that would explore that was exploring

910
00:52:53.559 --> 00:52:57.039
<v Speaker 2>using Opal to render user interfaces, and the approach of

911
00:52:57.079 --> 00:52:59.960
<v Speaker 2>that library actually was very different from Glimmer DSL for Web.

912
00:53:00.360 --> 00:53:03.559
<v Speaker 2>Its approach was actually to hide the HTML and CSS

913
00:53:04.480 --> 00:53:09.079
<v Speaker 2>completely from developers so that they actually work with a

914
00:53:09.119 --> 00:53:12.159
<v Speaker 2>GUI mental model that was similar to the desktop. It

915
00:53:12.199 --> 00:53:15.400
<v Speaker 2>even used the same widget or control names, like you

916
00:53:15.400 --> 00:53:18.360
<v Speaker 2>could say, tag names that were used for building the

917
00:53:18.360 --> 00:53:21.079
<v Speaker 2>Eclipse SWT library, so I was trying to match the

918
00:53:21.119 --> 00:53:24.719
<v Speaker 2>syntax of glimmer dslfware SWT. But that enabled this. Basically

919
00:53:24.719 --> 00:53:27.599
<v Speaker 2>I could take any desktop library, game or app that

920
00:53:27.679 --> 00:53:30.960
<v Speaker 2>was built glimmer dsftware SWT and run its code in

921
00:53:30.960 --> 00:53:35.840
<v Speaker 2>glimmer Ds Software Web without writing HTMLOCSS like I would

922
00:53:35.880 --> 00:53:38.800
<v Speaker 2>just keep the same exact desktop codes in Ruby and

923
00:53:38.880 --> 00:53:42.039
<v Speaker 2>it would run the app in the browser. So I

924
00:53:42.079 --> 00:53:43.960
<v Speaker 2>was able to run Tetris, for example. That way, I

925
00:53:44.000 --> 00:53:45.800
<v Speaker 2>built it for the desktop and it ran on the

926
00:53:45.800 --> 00:53:48.079
<v Speaker 2>web with the same exact code, which was pretty impressive,

927
00:53:49.079 --> 00:53:53.440
<v Speaker 2>but in Mike However, practically, speaking from a like a

928
00:53:53.480 --> 00:53:56.119
<v Speaker 2>business web development point of view, I don't think it's

929
00:53:56.159 --> 00:53:59.679
<v Speaker 2>a very practical idea. I think most developers want to

930
00:53:59.800 --> 00:54:04.360
<v Speaker 2>know about HTML and CSS and they want to do

931
00:54:04.440 --> 00:54:10.039
<v Speaker 2>things following more the webway, and if I hide HTML

932
00:54:10.039 --> 00:54:12.079
<v Speaker 2>and CSS from them, I don't think they'd be pleased.

933
00:54:12.639 --> 00:54:14.360
<v Speaker 2>But also if I were to take the other approach,

934
00:54:14.360 --> 00:54:18.599
<v Speaker 2>which has used HTMLCSS on the desktop, that causes the

935
00:54:18.639 --> 00:54:21.840
<v Speaker 2>other like issue, which is like desktop developers writes a

936
00:54:21.880 --> 00:54:24.480
<v Speaker 2>lot less code because they don't have to mark with HTMLCSS.

937
00:54:24.679 --> 00:54:28.360
<v Speaker 2>The stop guy libraries are usually simpler than web stuff.

938
00:54:28.800 --> 00:54:31.079
<v Speaker 2>So so I think it's better to.

939
00:54:31.159 --> 00:54:33.360
<v Speaker 1>Just keep the two.

940
00:54:33.199 --> 00:54:37.639
<v Speaker 2>Technologies in a way separate with their dsls because I

941
00:54:38.280 --> 00:54:42.719
<v Speaker 2>believe web requirements are different from desktop requirements.

942
00:54:44.480 --> 00:54:47.280
<v Speaker 1>Yeah, that makes sense. I know, having worked with like

943
00:54:47.400 --> 00:54:52.920
<v Speaker 1>React Native, it is painful even just between like you know,

944
00:54:53.320 --> 00:54:58.440
<v Speaker 1>separate provider platforms of iOS and Android and having to

945
00:54:58.519 --> 00:55:02.639
<v Speaker 1>do Windows and Linux and managing that. You know, I

946
00:55:03.000 --> 00:55:09.199
<v Speaker 1>can't imagine that's helpful to have to do for everything.

947
00:55:11.960 --> 00:55:13.880
<v Speaker 2>Yeah, this is one of those ideas that sound good

948
00:55:13.960 --> 00:55:16.960
<v Speaker 2>on paper, but when you start actually following them in practice,

949
00:55:17.360 --> 00:55:21.519
<v Speaker 2>they're not very practical, Like I know people, Yeah, I

950
00:55:21.559 --> 00:55:24.079
<v Speaker 2>mean so, yeah, I guess that's my answer.

951
00:55:26.199 --> 00:55:30.519
<v Speaker 1>Well, this is awesome. I love seeing this work happening,

952
00:55:31.679 --> 00:55:35.000
<v Speaker 1>and you have so many great examples here that that

953
00:55:35.119 --> 00:55:38.519
<v Speaker 1>brings me to kind of like, you know, before the

954
00:55:38.519 --> 00:55:40.760
<v Speaker 1>show we were talking about you know, you're gearing up

955
00:55:40.760 --> 00:55:45.519
<v Speaker 1>for your Ruby COMF talk and workshop. You know, do

956
00:55:45.519 --> 00:55:47.719
<v Speaker 1>you want to shed some light on on the workshop

957
00:55:47.840 --> 00:55:52.760
<v Speaker 1>that you're doing and maybe how people can start to

958
00:55:52.760 --> 00:55:56.079
<v Speaker 1>get involved in a lot of this Glimmer stuff you're building.

959
00:55:58.079 --> 00:56:02.760
<v Speaker 2>Yeah. Sure. This year, so I'll be presenting a newer

960
00:56:02.840 --> 00:56:05.480
<v Speaker 2>version of the same workshop I conducted last year. It

961
00:56:05.519 --> 00:56:08.159
<v Speaker 2>was a two hour workshop called how to Build Desktop

962
00:56:08.159 --> 00:56:11.199
<v Speaker 2>Applications in Ruby. In twenty twenty three and twenty twenty four,

963
00:56:11.199 --> 00:56:12.840
<v Speaker 2>it is going to be how to Build Basic Desktop

964
00:56:12.840 --> 00:56:16.000
<v Speaker 2>Applications in Ruby. This one is going to be limiting

965
00:56:16.760 --> 00:56:22.199
<v Speaker 2>the workshop content to the basics of desktop development so

966
00:56:22.239 --> 00:56:25.400
<v Speaker 2>that it gives people more time to breathe and also

967
00:56:25.480 --> 00:56:30.320
<v Speaker 2>digest the ideas related to MVC pattern MVP and bidirection

968
00:56:30.480 --> 00:56:35.280
<v Speaker 2>and UNI directional data binding. So it will give people

969
00:56:35.280 --> 00:56:37.400
<v Speaker 2>a lot more time to be able to play around

970
00:56:38.039 --> 00:56:42.960
<v Speaker 2>and learn a desktop version of Glimmer. So the version

971
00:56:43.039 --> 00:56:45.760
<v Speaker 2>used is going to be the Fukka Ruby Award, the

972
00:56:45.760 --> 00:56:49.760
<v Speaker 2>one sorry, the one that won that Ruby Award. It

973
00:56:49.760 --> 00:56:55.280
<v Speaker 2>will be glimmerdself for Libui. This library. Actually, the nice

974
00:56:55.280 --> 00:56:57.239
<v Speaker 2>thing about it is that you just installed the Ruby

975
00:56:57.280 --> 00:57:00.159
<v Speaker 2>gem and you're good to go. So I actually you

976
00:57:00.199 --> 00:57:04.639
<v Speaker 2>include in the workshop description the instructions like I tell

977
00:57:04.679 --> 00:57:06.480
<v Speaker 2>people just install the Ruby gem and then want a

978
00:57:06.559 --> 00:57:09.039
<v Speaker 2>sample to make sure it works and you're good to go.

979
00:57:11.320 --> 00:57:15.480
<v Speaker 2>So I'll be basically using that library as an educational

980
00:57:15.519 --> 00:57:19.239
<v Speaker 2>library for building very small desktop app so limit of

981
00:57:19.239 --> 00:57:21.920
<v Speaker 2>the stuff with LIBYUI. What's good about it is that

982
00:57:22.159 --> 00:57:24.400
<v Speaker 2>it's very good for very simple apps. You can build

983
00:57:24.400 --> 00:57:26.639
<v Speaker 2>them very quickly, and also it's good for apps that

984
00:57:26.679 --> 00:57:30.920
<v Speaker 2>are mostly tools or productivity tools or development related tools

985
00:57:31.039 --> 00:57:34.360
<v Speaker 2>that can help with your day to day work because

986
00:57:34.719 --> 00:57:38.039
<v Speaker 2>it's a very good library for packaging apps as gems,

987
00:57:38.239 --> 00:57:40.480
<v Speaker 2>so you can package anything like you can scaffold an

988
00:57:40.480 --> 00:57:44.079
<v Speaker 2>app with It supports scaffolding features similar to rails, but

989
00:57:44.119 --> 00:57:47.360
<v Speaker 2>for desktop apps, and then you can package your scaffolded

990
00:57:47.360 --> 00:57:49.920
<v Speaker 2>app as a gem very quickly, and then you can

991
00:57:49.960 --> 00:57:51.880
<v Speaker 2>give it to others and people just install the gem

992
00:57:52.239 --> 00:57:54.559
<v Speaker 2>and use it. So I would recommend this library the

993
00:57:54.599 --> 00:57:56.760
<v Speaker 2>most for people that want to build productivity tools for

994
00:57:57.239 --> 00:58:00.000
<v Speaker 2>up day to date work. If you want to pack

995
00:58:00.199 --> 00:58:02.760
<v Speaker 2>is your app as a Mac app or a Windows app,

996
00:58:03.760 --> 00:58:07.280
<v Speaker 2>this library does have two options for doing it, and

997
00:58:07.599 --> 00:58:10.920
<v Speaker 2>it's Windows option works very well. It's Mac option is

998
00:58:11.000 --> 00:58:12.800
<v Speaker 2>very new. There's a guy that packaged it on the

999
00:58:12.800 --> 00:58:15.760
<v Speaker 2>Mac just a few months ago and I documented what

1000
00:58:15.840 --> 00:58:17.920
<v Speaker 2>he did. He actually documented what he did in the

1001
00:58:17.960 --> 00:58:21.480
<v Speaker 2>blog post that I linked to. So it does offer

1002
00:58:21.519 --> 00:58:25.280
<v Speaker 2>some packaging options, but they're not the most complete or comprehensive. Today,

1003
00:58:26.400 --> 00:58:29.360
<v Speaker 2>I have other libraries like glimmer dsl FORSWT lets you

1004
00:58:29.400 --> 00:58:31.800
<v Speaker 2>package your apps as real native apps with like an

1005
00:58:31.840 --> 00:58:36.079
<v Speaker 2>ex or MSI on installer on Windows, or DMG file

1006
00:58:36.519 --> 00:58:39.960
<v Speaker 2>or PKG file on Mac, or even wn files on

1007
00:58:40.039 --> 00:58:43.039
<v Speaker 2>Linux or RPM. So that one if people want to

1008
00:58:43.039 --> 00:58:45.199
<v Speaker 2>build a more serious app, I would recommend glimmer dysself

1009
00:58:45.239 --> 00:58:47.559
<v Speaker 2>fors WT. But if they're building a very quick productivity

1010
00:58:47.559 --> 00:58:50.079
<v Speaker 2>app or small app that will show a table that

1011
00:58:50.159 --> 00:58:53.679
<v Speaker 2>is summarizing data from a database, I would recommend glimomer

1012
00:58:53.719 --> 00:58:56.920
<v Speaker 2>dssel for LIBI. Yeah.

1013
00:58:56.920 --> 00:58:59.960
<v Speaker 1>I was looking at they're reading it with all the example.

1014
00:59:00.480 --> 00:59:04.199
<v Speaker 1>It's pretty slick. It has like all of the major

1015
00:59:04.199 --> 00:59:06.239
<v Speaker 1>components that you know you'd want to use build a

1016
00:59:06.239 --> 00:59:10.880
<v Speaker 1>simple desktop m from the first glance. So very cool.

1017
00:59:11.320 --> 00:59:14.280
<v Speaker 2>Yeah. One cool thing that I've been doing is actually

1018
00:59:14.480 --> 00:59:17.920
<v Speaker 2>whenever I add features to say glimmer DSLF FORLIBUI that

1019
00:59:17.960 --> 00:59:21.000
<v Speaker 2>I think are useful, I end up also adding them

1020
00:59:21.000 --> 00:59:23.880
<v Speaker 2>to glimmer DSL for Web like one such a feature

1021
00:59:23.920 --> 00:59:26.800
<v Speaker 2>as component slots. So now if I build, for example,

1022
00:59:26.800 --> 00:59:29.480
<v Speaker 2>and name an address form like I mentioned earlier as

1023
00:59:29.480 --> 00:59:32.480
<v Speaker 2>an example, I can provide ad slots in it, and

1024
00:59:32.519 --> 00:59:38.760
<v Speaker 2>people can contribute tags or like markup inside those slots,

1025
00:59:39.119 --> 00:59:40.800
<v Speaker 2>and it does stop app It would be there would

1026
00:59:40.800 --> 00:59:43.840
<v Speaker 2>be contributing controls. So that way, people can for example,

1027
00:59:43.920 --> 00:59:45.400
<v Speaker 2>add a message at the top of the name and

1028
00:59:45.440 --> 00:59:48.800
<v Speaker 2>address form between the name and the address that can

1029
00:59:48.840 --> 00:59:51.280
<v Speaker 2>inform people of something, or they can add another form

1030
00:59:51.360 --> 00:59:55.480
<v Speaker 2>like a nested form within it or do stuff like that.

1031
00:59:55.559 --> 00:59:57.960
<v Speaker 2>So I mean this this feature is called component slots.

1032
00:59:58.639 --> 01:00:02.840
<v Speaker 2>It's borrowed from the Web Component slots standard. Like on

1033
01:00:02.880 --> 01:00:05.880
<v Speaker 2>the Web and the HTML Web Component Standard, they do

1034
01:00:05.920 --> 01:00:08.599
<v Speaker 2>have the idea of slots, so it's kind of borrowed

1035
01:00:08.639 --> 01:00:11.239
<v Speaker 2>from that. It's also borrowed from that, I think view

1036
01:00:11.280 --> 01:00:14.440
<v Speaker 2>component the library. The rails library has slots as well.

1037
01:00:15.119 --> 01:00:18.719
<v Speaker 2>So anyways, that's something that I ended up adding to

1038
01:00:18.760 --> 01:00:20.880
<v Speaker 2>glimmer yr self for Libui first, and then I added

1039
01:00:20.920 --> 01:00:23.400
<v Speaker 2>it to glimmer dr self for Web and it works

1040
01:00:23.480 --> 01:00:25.760
<v Speaker 2>very well because then it enables any like if you

1041
01:00:25.760 --> 01:00:28.280
<v Speaker 2>take any component, you're not limited by what the people

1042
01:00:28.280 --> 01:00:30.960
<v Speaker 2>who build the component did in it. You can actually

1043
01:00:31.119 --> 01:00:34.960
<v Speaker 2>open it up like it's on. It follows the opened sorry,

1044
01:00:35.000 --> 01:00:38.480
<v Speaker 2>the open closed principle. You can open any like component

1045
01:00:38.599 --> 01:00:42.079
<v Speaker 2>up without touching its code, so it's closed for modification,

1046
01:00:42.159 --> 01:00:44.960
<v Speaker 2>but it's open for extension, and you can add anything

1047
01:00:45.199 --> 01:00:48.159
<v Speaker 2>to that component in the in the slots that are

1048
01:00:48.159 --> 01:00:50.679
<v Speaker 2>designated for the changes for anything to add.

1049
01:00:53.159 --> 01:00:56.440
<v Speaker 1>Yeah, very cool. I'd love to see all the examples here.

1050
01:00:58.280 --> 01:00:59.440
<v Speaker 1>How do you find time for all this?

1051
01:01:02.400 --> 01:01:07.159
<v Speaker 2>Nights and weekends, especially long weekends like Labor day weekend

1052
01:01:07.400 --> 01:01:11.320
<v Speaker 2>or whatever, any long weekends. Yeah, I end up using

1053
01:01:11.360 --> 01:01:17.000
<v Speaker 2>them for this, but it's it's my passion project. And

1054
01:01:17.079 --> 01:01:21.599
<v Speaker 2>also in my opinion, I really really think that current

1055
01:01:22.320 --> 01:01:25.440
<v Speaker 2>front end development and development experience and RAILS is very

1056
01:01:25.519 --> 01:01:28.440
<v Speaker 2>very bad. Like when I every time I receive a

1057
01:01:28.480 --> 01:01:31.679
<v Speaker 2>PR on a React component at work, I'm like, Wow,

1058
01:01:31.719 --> 01:01:34.960
<v Speaker 2>this code is absolutely awful and it's the best code

1059
01:01:35.000 --> 01:01:36.760
<v Speaker 2>they could write. By the way, I'm not felting any

1060
01:01:36.920 --> 01:01:39.400
<v Speaker 2>who ever wrote the code. It's it's the React way,

1061
01:01:39.480 --> 01:01:42.679
<v Speaker 2>but like it reacts code is so absolutely awful. And

1062
01:01:42.760 --> 01:01:45.679
<v Speaker 2>I mean so I dabbled with other approaches, like I

1063
01:01:45.760 --> 01:01:48.679
<v Speaker 2>was going to consider recommending SVELT or view JS network.

1064
01:01:49.119 --> 01:01:51.840
<v Speaker 2>But then that's when I like, that's when I thought

1065
01:01:51.840 --> 01:01:53.679
<v Speaker 2>about Glimmer and Ruby, and I'm like, wow, I could

1066
01:01:53.719 --> 01:01:56.519
<v Speaker 2>even do better than spelt in view, and in my opinion,

1067
01:01:56.760 --> 01:02:00.280
<v Speaker 2>I succeeded at that. So I think part part of

1068
01:02:00.280 --> 01:02:03.119
<v Speaker 2>it is passion, like I'm very passionate about Ruby open

1069
01:02:03.119 --> 01:02:06.840
<v Speaker 2>source projects. The other part of it is also thinking

1070
01:02:06.880 --> 01:02:10.440
<v Speaker 2>seriously about how to improve our development productivity for customers,

1071
01:02:10.679 --> 01:02:12.639
<v Speaker 2>because this is a game changer. If you can save

1072
01:02:13.079 --> 01:02:17.199
<v Speaker 2>six months a year of development work because you're using

1073
01:02:17.400 --> 01:02:20.760
<v Speaker 2>front end Ruby instead of JavaScript, that's an absolute game changer.

1074
01:02:20.800 --> 01:02:22.840
<v Speaker 2>And that code is also going to be more maintainable

1075
01:02:22.880 --> 01:02:25.119
<v Speaker 2>for years to come, so it'll be cheaper to maintain

1076
01:02:25.199 --> 01:02:28.840
<v Speaker 2>for years to come as well. And on top of it,

1077
01:02:31.280 --> 01:02:36.360
<v Speaker 2>like basically it pays for itself. So like like if

1078
01:02:36.360 --> 01:02:38.559
<v Speaker 2>people try to say, give you an excuse of oh,

1079
01:02:38.599 --> 01:02:40.239
<v Speaker 2>I don't have time to check out this library or

1080
01:02:40.280 --> 01:02:41.760
<v Speaker 2>try it out, I'll be like, no, you don't have

1081
01:02:41.800 --> 01:02:43.599
<v Speaker 2>time not to check it out, because right now you're

1082
01:02:43.599 --> 01:02:46.800
<v Speaker 2>spending six months more every year using another library. If

1083
01:02:46.840 --> 01:02:49.920
<v Speaker 2>you spend only two or three weeks learning this library,

1084
01:02:50.159 --> 01:02:52.480
<v Speaker 2>you're going to save like five weeks and a half

1085
01:02:52.599 --> 01:02:57.599
<v Speaker 2>or so, so it's actually paying for its own investment automatically,

1086
01:02:57.639 --> 01:03:00.000
<v Speaker 2>like just by exploring this library. So in my opinion,

1087
01:03:00.559 --> 01:03:03.119
<v Speaker 2>uh so that's another reason why I'm into it, Like

1088
01:03:03.480 --> 01:03:08.880
<v Speaker 2>I believe it's gonna enhance my work experience significantly if

1089
01:03:08.880 --> 01:03:10.639
<v Speaker 2>we adopted in my company right now.

1090
01:03:12.639 --> 01:03:16.400
<v Speaker 1>Yeah, totally, I could see that for sure, And I

1091
01:03:16.400 --> 01:03:19.559
<v Speaker 1>would love to see somebody uh maybe ingesting some of

1092
01:03:19.559 --> 01:03:23.360
<v Speaker 1>these examples to AI to help with you know, get

1093
01:03:23.400 --> 01:03:26.480
<v Speaker 1>adjusting to the DSL, because that's probably one of the

1094
01:03:26.480 --> 01:03:31.559
<v Speaker 1>biggest aspects of learning uh new new frameworks to me personally,

1095
01:03:31.639 --> 01:03:33.400
<v Speaker 1>at least not.

1096
01:03:33.440 --> 01:03:36.079
<v Speaker 2>In Glimmer DSL for Web as much because it intentionally

1097
01:03:36.199 --> 01:03:41.320
<v Speaker 2>honors the HTML, the markup language almost exactly as is.

1098
01:03:41.679 --> 01:03:43.119
<v Speaker 2>So for example, if you want to use an on

1099
01:03:43.199 --> 01:03:46.519
<v Speaker 2>click listener, any any any on click attributes or on

1100
01:03:46.800 --> 01:03:50.840
<v Speaker 2>change or on anything, they're all supported automatically Glimmer, So

1101
01:03:50.920 --> 01:03:53.760
<v Speaker 2>like all your knowledge will be you'll be able to

1102
01:03:53.039 --> 01:03:56.880
<v Speaker 2>transfer it to Glimmer, but following a different way. You

1103
01:03:57.000 --> 01:03:59.239
<v Speaker 2>just have to write the code with less code. Like

1104
01:03:59.239 --> 01:04:01.280
<v Speaker 2>instead of opening and closing every tag, you don't have

1105
01:04:01.320 --> 01:04:03.320
<v Speaker 2>to open and close the tax anymore. Can just put

1106
01:04:03.360 --> 01:04:05.719
<v Speaker 2>the tag name and then open up block with curly

1107
01:04:05.760 --> 01:04:08.119
<v Speaker 2>braces and then close up curly braces and you're done.

1108
01:04:08.360 --> 01:04:11.800
<v Speaker 2>So's it's more dry. Like people who write HTML don't

1109
01:04:11.840 --> 01:04:15.159
<v Speaker 2>write don't write dry code because HTML itself is not dry.

1110
01:04:15.199 --> 01:04:17.719
<v Speaker 2>I mean, that's part of the reason why XML became

1111
01:04:17.800 --> 01:04:20.719
<v Speaker 2>obsolete and people started using JSON because Jason is a

1112
01:04:20.719 --> 01:04:25.320
<v Speaker 2>lot drier than XML. But unfortunately in web view development,

1113
01:04:25.519 --> 01:04:29.960
<v Speaker 2>like people haven't made that transition yet, So this approach

1114
01:04:30.039 --> 01:04:32.679
<v Speaker 2>is like one one key reason for the design of

1115
01:04:32.719 --> 01:04:35.199
<v Speaker 2>glimmer day self for Web being different from glimmer das

1116
01:04:35.199 --> 01:04:38.239
<v Speaker 2>self for Opal was to enable enable people to not

1117
01:04:38.320 --> 01:04:40.400
<v Speaker 2>have much of a learning curve. They can just transfer

1118
01:04:40.440 --> 01:04:44.280
<v Speaker 2>their HTML skills as is. So like any attributes you

1119
01:04:44.320 --> 01:04:48.119
<v Speaker 2>know on any elements are supported by glimmer da self

1120
01:04:48.119 --> 01:04:52.000
<v Speaker 2>for Web, and any listeners are supported and any and

1121
01:04:52.119 --> 01:04:54.280
<v Speaker 2>then all the same tags are supported by their same name.

1122
01:04:54.639 --> 01:04:57.519
<v Speaker 2>It's just with a slightly different syntax that's actually less

1123
01:04:57.559 --> 01:04:59.000
<v Speaker 2>code than HTML.

1124
01:05:00.480 --> 01:05:03.559
<v Speaker 1>That's awesome. Yeah, I'm gonna have to play with this

1125
01:05:03.719 --> 01:05:07.400
<v Speaker 1>around myself because it looks like a lot of fun.

1126
01:05:09.639 --> 01:05:13.000
<v Speaker 1>We're kind of getting to the time here. Is there

1127
01:05:13.039 --> 01:05:16.519
<v Speaker 1>anything else you wanted to share talk about before we

1128
01:05:16.559 --> 01:05:17.840
<v Speaker 1>wind down to PIX.

1129
01:05:20.320 --> 01:05:23.920
<v Speaker 2>I don't think so. I think we covered.

1130
01:05:23.119 --> 01:05:25.800
<v Speaker 1>Yeah, I mean you're you're you're doing it all. It

1131
01:05:25.920 --> 01:05:29.280
<v Speaker 1>seems I'd love to see all of the uh, you know,

1132
01:05:29.360 --> 01:05:32.639
<v Speaker 1>the options that people have even within the glimmer ecosystem.

1133
01:05:32.639 --> 01:05:35.559
<v Speaker 1>It's really uh, you know, please keep keep it up

1134
01:05:36.400 --> 01:05:41.679
<v Speaker 1>because I think you're heading in the right way. So

1135
01:05:41.880 --> 01:05:45.000
<v Speaker 1>let's uh, let's move the pics. Uh do you do

1136
01:05:45.039 --> 01:05:46.480
<v Speaker 1>you have anything or you want me to go first?

1137
01:05:49.880 --> 01:05:50.800
<v Speaker 1>I can give you some time.

1138
01:05:52.800 --> 01:05:55.119
<v Speaker 2>I don't think I have anything, to be honest, I

1139
01:05:55.119 --> 01:05:59.920
<v Speaker 2>think like the topic of this podcast will give people

1140
01:06:00.000 --> 01:06:02.119
<v Speaker 2>a lot of stuff to check out already, So like

1141
01:06:02.119 --> 01:06:04.000
<v Speaker 2>I would recommend checking out, you know, the glimmer of

1142
01:06:04.039 --> 01:06:09.079
<v Speaker 2>DASL for Web GitHub project, run like the online hosted

1143
01:06:09.119 --> 01:06:11.360
<v Speaker 2>sample and play around with it. It has a bunch

1144
01:06:11.400 --> 01:06:14.960
<v Speaker 2>of samples written in Ruby. And then lastly, I would

1145
01:06:15.079 --> 01:06:19.079
<v Speaker 2>recommend obviously for everyone to take out like build a

1146
01:06:19.239 --> 01:06:21.639
<v Speaker 2>Rails like a new Rails app from scratch, and then

1147
01:06:21.639 --> 01:06:25.000
<v Speaker 2>integrate Glimmer DSL for Web into it and then play

1148
01:06:25.000 --> 01:06:25.599
<v Speaker 2>around with it.

1149
01:06:27.000 --> 01:06:31.719
<v Speaker 1>Yeah, totally, that's that's the path I'm gonna take. So well,

1150
01:06:31.880 --> 01:06:36.119
<v Speaker 1>I uh, I don't really have too much to share

1151
01:06:36.159 --> 01:06:40.840
<v Speaker 1>here other than I'm building a robot arm cool it

1152
01:06:41.039 --> 01:06:45.760
<v Speaker 1>by hugging face. It's called little robot, and you can

1153
01:06:45.800 --> 01:06:48.480
<v Speaker 1>train it to do things. It has like it's two arms,

1154
01:06:48.719 --> 01:06:52.159
<v Speaker 1>but it has like a follower arm and uh, you know,

1155
01:06:52.320 --> 01:06:54.719
<v Speaker 1>a leader arm, and so you can lead the other

1156
01:06:54.760 --> 01:06:56.320
<v Speaker 1>one and tell it, show it how to pick up

1157
01:06:56.360 --> 01:06:59.079
<v Speaker 1>things and push buttons. And I hope that one day

1158
01:06:59.079 --> 01:07:01.119
<v Speaker 1>I get it to like type on the keyboard and

1159
01:07:01.159 --> 01:07:03.400
<v Speaker 1>like look at my screen and then just like work

1160
01:07:03.480 --> 01:07:08.480
<v Speaker 1>for me. But it's a lot of fun. I'm just

1161
01:07:08.519 --> 01:07:12.239
<v Speaker 1>to the assembly phase. I completed that and it's been

1162
01:07:12.599 --> 01:07:14.599
<v Speaker 1>it's been a lot of fun. So I'm looking forward to.

1163
01:07:14.480 --> 01:07:18.840
<v Speaker 2>Do you control the leader arm directly or do you

1164
01:07:18.840 --> 01:07:21.880
<v Speaker 2>give it voice commands or or does it follow your

1165
01:07:22.039 --> 01:07:25.480
<v Speaker 2>arm using a camera with AI like AI vision.

1166
01:07:26.119 --> 01:07:28.559
<v Speaker 1>So this this particular one, they have like a couple

1167
01:07:28.559 --> 01:07:32.159
<v Speaker 1>of different versions of the arms, but this one is

1168
01:07:32.360 --> 01:07:35.079
<v Speaker 1>they have like you basically have like two of the

1169
01:07:35.119 --> 01:07:38.239
<v Speaker 1>same kind of arm, and you can move one of

1170
01:07:38.280 --> 01:07:41.960
<v Speaker 1>them that moves the other in the same ways, so

1171
01:07:42.159 --> 01:07:46.400
<v Speaker 1>mirrors it. They call it tele operation. But they have

1172
01:07:46.480 --> 01:07:48.360
<v Speaker 1>like you know, you can have multiple robot arms, so

1173
01:07:48.519 --> 01:07:53.679
<v Speaker 1>like you can have multiple leaders, multiple followers, and so, uh,

1174
01:07:53.880 --> 01:07:57.079
<v Speaker 1>there is a camera aspect that lets you train and

1175
01:07:57.199 --> 01:08:00.519
<v Speaker 1>learn kind of what is happening that way, and so

1176
01:08:00.559 --> 01:08:02.440
<v Speaker 1>I think maybe in the future it will get to

1177
01:08:02.480 --> 01:08:04.199
<v Speaker 1>the point where you could just use your own arms

1178
01:08:04.199 --> 01:08:07.039
<v Speaker 1>and hands. But I think right now it's just like

1179
01:08:07.760 --> 01:08:11.679
<v Speaker 1>because the dexterity is not there yet, it's just two

1180
01:08:11.800 --> 01:08:14.280
<v Speaker 1>arms and you train one with the other kind of thing.

1181
01:08:14.760 --> 01:08:17.199
<v Speaker 2>So, what are some applications of this robots arm? Like

1182
01:08:17.199 --> 01:08:19.560
<v Speaker 2>what did you use it for that you think could.

1183
01:08:19.399 --> 01:08:21.680
<v Speaker 1>Be so right away, I had a bunch of screws

1184
01:08:21.680 --> 01:08:24.000
<v Speaker 1>that were all different sizes that came in the same package,

1185
01:08:24.039 --> 01:08:25.800
<v Speaker 1>and I want to just sort it rather than me

1186
01:08:25.920 --> 01:08:28.840
<v Speaker 1>sort that the screws, So like that will probably be

1187
01:08:28.880 --> 01:08:31.439
<v Speaker 1>my first one because it's like they're tiny screws and

1188
01:08:31.479 --> 01:08:33.840
<v Speaker 1>they're hard to sort, and like that should be something

1189
01:08:33.920 --> 01:08:37.800
<v Speaker 1>easy or not easy, but like straightforward to train the

1190
01:08:37.920 --> 01:08:41.039
<v Speaker 1>arm to do. But their examples that they have are

1191
01:08:41.119 --> 01:08:46.479
<v Speaker 1>like legos sorting right, finding the right colors, Like I

1192
01:08:46.520 --> 01:08:51.479
<v Speaker 1>think they had one example where they're you know, pushing

1193
01:08:51.520 --> 01:08:55.520
<v Speaker 1>buttons on something else. So I don't really know what

1194
01:08:55.560 --> 01:08:58.600
<v Speaker 1>I'm gonna do with it yet. It's mostly just fun

1195
01:08:58.680 --> 01:09:02.520
<v Speaker 1>to explore all of this real world AI aspect stuff,

1196
01:09:02.560 --> 01:09:07.720
<v Speaker 1>so definitely. Yeah, so check that out if you're interested.

1197
01:09:08.359 --> 01:09:15.119
<v Speaker 1>La Rollebot. Well, it's been awesome talking to Andy. I

1198
01:09:15.159 --> 01:09:17.960
<v Speaker 1>appreciate you coming on again and all the work you're

1199
01:09:18.000 --> 01:09:20.359
<v Speaker 1>doing in the space because you know, we need it

1200
01:09:20.439 --> 01:09:23.039
<v Speaker 1>and I love to do more ruby than anything else,

1201
01:09:23.119 --> 01:09:29.279
<v Speaker 1>so I appreciate it. And yeah, if people want to

1202
01:09:29.319 --> 01:09:31.399
<v Speaker 1>reach out to you or find you on the internet,

1203
01:09:32.000 --> 01:09:32.760
<v Speaker 1>how do they do that.

1204
01:09:34.439 --> 01:09:37.920
<v Speaker 2>They can find me on LinkedIn. I'm just Andy Malley

1205
01:09:38.000 --> 01:09:44.000
<v Speaker 2>on LinkedIn, or I mean I have a Twitter It's

1206
01:09:44.039 --> 01:09:48.439
<v Speaker 2>called Andy Optava at Andy O B T, I V

1207
01:09:48.600 --> 01:09:53.800
<v Speaker 2>A and what else. And then if they need to

1208
01:09:53.840 --> 01:09:57.920
<v Speaker 2>reach out to me about Glimmer directly, if they visit

1209
01:09:57.960 --> 01:10:01.880
<v Speaker 2>the giitub project, there's a getter chatlink, so they can

1210
01:10:01.880 --> 01:10:04.279
<v Speaker 2>click on the getter chatlink and that would take them

1211
01:10:04.279 --> 01:10:07.079
<v Speaker 2>to a chat room that is all about Blimmer.

1212
01:10:07.640 --> 01:10:11.479
<v Speaker 1>Awesome. Well, thanks again for coming on and thank you

1213
01:10:11.520 --> 01:10:15.640
<v Speaker 1>for listening everybody. Yeah, and you know, until next time,

1214
01:10:16.680 --> 01:10:21.640
<v Speaker 1>more Ruby on the way.
