WEBVTT

1
00:00:01.080 --> 00:00:03.000
<v Speaker 1>How'd you like to listen to dot net rocks with

2
00:00:03.040 --> 00:00:07.879
<v Speaker 1>no ads? Easy? Become a patron for just five dollars

3
00:00:07.919 --> 00:00:10.800
<v Speaker 1>a month. You get access to a private RSS feed

4
00:00:10.839 --> 00:00:14.279
<v Speaker 1>where all the shows have no ads. Twenty dollars a month,

5
00:00:14.279 --> 00:00:16.920
<v Speaker 1>we'll get you that and a special dot net Rocks

6
00:00:16.960 --> 00:00:21.000
<v Speaker 1>patron mug. Sign up now at patreon dot dot NetRocks

7
00:00:21.120 --> 00:00:36.200
<v Speaker 1>dot com. Hey guess what it's dot net Rocks twenty

8
00:00:36.280 --> 00:00:39.679
<v Speaker 1>twenty five edition. I'm Carl Franklin, I'm Richard Campbell. Happy

9
00:00:39.719 --> 00:00:43.560
<v Speaker 1>New Year everybody, and what's how did you? How'd you

10
00:00:43.600 --> 00:00:44.359
<v Speaker 1>do your New Year's?

11
00:00:44.600 --> 00:00:46.039
<v Speaker 2>We did New Year's up on the coast because we

12
00:00:46.079 --> 00:00:48.520
<v Speaker 2>went down to the city for Christmas, right, spend time

13
00:00:48.560 --> 00:00:51.119
<v Speaker 2>with the girls. The youngest is pregnant, so called the

14
00:00:51.159 --> 00:00:54.399
<v Speaker 2>baby bump. Christmas very nice and uh, and then New

15
00:00:54.479 --> 00:00:56.359
<v Speaker 2>Year's we came back up. I had a party in

16
00:00:56.399 --> 00:00:59.320
<v Speaker 2>the boathouse with a little mixing of the worlds. You know,

17
00:00:59.320 --> 00:01:02.280
<v Speaker 2>we're building friendship groups up on the coast, so a

18
00:01:02.320 --> 00:01:04.200
<v Speaker 2>few of those couples showed up and a few from

19
00:01:04.280 --> 00:01:05.319
<v Speaker 2>back on the mainland.

20
00:01:05.400 --> 00:01:07.879
<v Speaker 1>And yeah, I saw the pictures on Facebook. Looked a

21
00:01:07.920 --> 00:01:09.640
<v Speaker 1>lot of fun. Yeah, you know, the best thing you

22
00:01:09.640 --> 00:01:12.200
<v Speaker 1>can hope for in the new year. Belly laughs, like

23
00:01:12.359 --> 00:01:15.159
<v Speaker 1>laughing so hard you're crying. That's what we did overde

24
00:01:15.760 --> 00:01:19.040
<v Speaker 1>That's great. Yeah, awesome. Well we just had a quiet

25
00:01:19.040 --> 00:01:23.200
<v Speaker 1>New Year's here. It was nice, you know, just the fam.

26
00:01:23.239 --> 00:01:27.200
<v Speaker 1>It's always good. Yeah. So let's start this show with

27
00:01:27.239 --> 00:01:31.120
<v Speaker 1>a better know of framework, which is interestingly about last year.

28
00:01:31.280 --> 00:01:40.640
<v Speaker 2>Roll the music. Interesting, man, what do you got?

29
00:01:40.719 --> 00:01:43.840
<v Speaker 1>It's a video by the Visual Studio team our favorite

30
00:01:44.000 --> 00:01:47.519
<v Speaker 1>new visual studio features of twenty twenty four. So they

31
00:01:48.000 --> 00:01:49.439
<v Speaker 1>took a look at all the things that were added

32
00:01:49.439 --> 00:01:51.439
<v Speaker 1>a visual studio in twenty twenty a lot.

33
00:01:51.760 --> 00:01:53.400
<v Speaker 2>Yeah, right, Like it's constant.

34
00:01:53.599 --> 00:01:56.239
<v Speaker 1>Yeah, And you know, if you're like most of us,

35
00:01:56.480 --> 00:01:59.760
<v Speaker 1>you don't know about these new features until somebody says, hey,

36
00:01:59.799 --> 00:02:01.640
<v Speaker 1>you know Scott Hanselman says, hey, do.

37
00:02:01.599 --> 00:02:01.959
<v Speaker 2>You know this?

38
00:02:02.519 --> 00:02:04.480
<v Speaker 1>Yeah, and then you look it up.

39
00:02:04.760 --> 00:02:07.959
<v Speaker 2>People make whole talks about this, just showing features in

40
00:02:08.000 --> 00:02:10.080
<v Speaker 2>studio you didn't know about because it's just so darn

41
00:02:10.159 --> 00:02:11.120
<v Speaker 2>many of them. Right.

42
00:02:11.680 --> 00:02:15.719
<v Speaker 1>Yeah. It's because the word of coding, hasn't it the

43
00:02:15.800 --> 00:02:16.719
<v Speaker 1>Microsoft word?

44
00:02:16.960 --> 00:02:17.280
<v Speaker 2>Yeah?

45
00:02:17.360 --> 00:02:19.639
<v Speaker 1>Yeah, Well, anyway, it's a good video and if you

46
00:02:19.800 --> 00:02:22.400
<v Speaker 1>have how long is it? Well, Anyway, it's a good

47
00:02:22.439 --> 00:02:24.360
<v Speaker 1>video and if you got about twenty minutes to kill

48
00:02:24.960 --> 00:02:28.080
<v Speaker 1>check it out. It's good stuff. So that's what I got.

49
00:02:28.159 --> 00:02:29.560
<v Speaker 1>Know it, learn it, love it. Who's talking to is?

50
00:02:29.639 --> 00:02:32.400
<v Speaker 2>Richard grabbed a comment of a show nineteen sixteen then

51
00:02:32.400 --> 00:02:35.199
<v Speaker 2>when we recorded with our friend Rendel called how simple

52
00:02:35.280 --> 00:02:39.199
<v Speaker 2>is as simple as possible? Yeah? And another friend of ours,

53
00:02:39.280 --> 00:02:42.039
<v Speaker 2>Richard ra Chima, also known as codeputer, had a good

54
00:02:42.159 --> 00:02:45.479
<v Speaker 2>comment here, mostly about Blazer, where he said simplicity and

55
00:02:45.520 --> 00:02:49.120
<v Speaker 2>web application development it's not a simple conversation Blazer server

56
00:02:49.240 --> 00:02:52.960
<v Speaker 2>and transitioning to WASM is also not simple. So why

57
00:02:52.960 --> 00:02:56.439
<v Speaker 2>are we doing web app development anyway? App distribution to

58
00:02:56.479 --> 00:02:58.520
<v Speaker 2>maintenance is why we wanted it. Web apps over the

59
00:02:58.560 --> 00:03:02.400
<v Speaker 2>client side app installs. Yeah, definitely always running the current version,

60
00:03:02.520 --> 00:03:05.479
<v Speaker 2>don't need to deploy running in a sandbox like there's

61
00:03:05.520 --> 00:03:11.599
<v Speaker 2>good things makes sense. Yeah, So we leveraged the distribution

62
00:03:11.719 --> 00:03:13.840
<v Speaker 2>model of the browser and then got busy building apps,

63
00:03:13.879 --> 00:03:15.800
<v Speaker 2>this time without easy acts to what we had before

64
00:03:15.919 --> 00:03:19.439
<v Speaker 2>the mistley client side resources. Nothing that fifteen megs of

65
00:03:19.520 --> 00:03:23.960
<v Speaker 2>JavaScript can't fix with a sprinkless CSS to really challenge

66
00:03:23.960 --> 00:03:24.319
<v Speaker 2>that street.

67
00:03:24.520 --> 00:03:27.680
<v Speaker 1>He's our age too, so he's talking experience here.

68
00:03:29.439 --> 00:03:32.919
<v Speaker 2>Chris Love would have words with you. Oh yes, So

69
00:03:33.159 --> 00:03:35.800
<v Speaker 2>let's take application development, make the super puke it all

70
00:03:35.800 --> 00:03:37.840
<v Speaker 2>into a browser box and give it a solid stir

71
00:03:37.960 --> 00:03:40.719
<v Speaker 2>for fun, while dumping in new app features or ingredients,

72
00:03:40.759 --> 00:03:43.840
<v Speaker 2>more JavaScript frameworks and such as the goodness and all

73
00:03:43.879 --> 00:03:47.080
<v Speaker 2>the joy of distribution. HTML was never supposed to be

74
00:03:47.159 --> 00:03:49.960
<v Speaker 2>used as a U as a user experience interface for

75
00:03:50.000 --> 00:03:53.759
<v Speaker 2>application development amidst the formatting and presentation of electronic documents.

76
00:03:53.800 --> 00:03:56.560
<v Speaker 2>It was about scientific papers with iperlinking.

77
00:03:56.680 --> 00:03:56.879
<v Speaker 1>Right.

78
00:03:57.520 --> 00:03:59.840
<v Speaker 2>Then there's Blazer server. Let's not worry about WASM for

79
00:03:59.879 --> 00:04:02.639
<v Speaker 2>a now, just about using the server environment to create

80
00:04:02.719 --> 00:04:04.960
<v Speaker 2>HTML documents that are rented. A browser does not even

81
00:04:05.000 --> 00:04:07.599
<v Speaker 2>need a page refresh, It builds the page. Choosing marshal

82
00:04:07.680 --> 00:04:11.159
<v Speaker 2>or components. Click in the browser is meaning less without

83
00:04:11.199 --> 00:04:13.280
<v Speaker 2>the context of where it happened. A keystroke has the

84
00:04:13.280 --> 00:04:16.800
<v Speaker 2>same requirements in both cases. The event requires context. That

85
00:04:16.920 --> 00:04:21.519
<v Speaker 2>is simple. HTML is simple, but stupid. Why are we

86
00:04:21.560 --> 00:04:25.439
<v Speaker 2>making it more complicated? Somebody says server overload. Server load

87
00:04:25.439 --> 00:04:27.759
<v Speaker 2>for service side rendering using cloud resources not the same

88
00:04:27.800 --> 00:04:30.959
<v Speaker 2>as a web farmer's service. True applications never used servers

89
00:04:30.959 --> 00:04:33.839
<v Speaker 2>that use service is provided by servers. Your application needs

90
00:04:33.839 --> 00:04:36.639
<v Speaker 2>hosting resources from the cloud. Why are we thinking about servers?

91
00:04:37.480 --> 00:04:39.759
<v Speaker 2>And once again, Blazer server framework is nothing more than

92
00:04:39.759 --> 00:04:42.199
<v Speaker 2>moving the context of the client side event and exposing

93
00:04:42.199 --> 00:04:44.079
<v Speaker 2>that in the context of the application. Mix it an

94
00:04:44.120 --> 00:04:47.560
<v Speaker 2>application code, update the component of the dock, and render

95
00:04:48.079 --> 00:04:50.519
<v Speaker 2>just tailored bytes back to the document being viewed in

96
00:04:50.519 --> 00:04:54.079
<v Speaker 2>the client. It's nice, simple and with a minimal byte

97
00:04:54.079 --> 00:04:57.600
<v Speaker 2>count to transport. And that's my definition of web simplicity. Yeah,

98
00:04:57.720 --> 00:04:59.639
<v Speaker 2>I can't argue that. Shame we make such a messment.

99
00:05:00.000 --> 00:05:00.600
<v Speaker 1>I've seen the light.

100
00:05:00.680 --> 00:05:04.120
<v Speaker 2>Yeah, he's trying to anyway. Yeah, i'd rich thanks so

101
00:05:04.199 --> 00:05:06.240
<v Speaker 2>much for your comment. I'd send you a copy of

102
00:05:06.279 --> 00:05:09.000
<v Speaker 2>music Code by but you got one. Yeah.

103
00:05:09.199 --> 00:05:10.720
<v Speaker 1>He's going to be a guest in a couple of

104
00:05:10.759 --> 00:05:11.879
<v Speaker 1>weeks at fall as well.

105
00:05:11.759 --> 00:05:13.519
<v Speaker 2>And he's going to be a guest to shortly too,

106
00:05:13.560 --> 00:05:15.600
<v Speaker 2>so we'll be here from anyway. I'll tease them the more.

107
00:05:15.680 --> 00:05:16.639
<v Speaker 1>Yeah, very good.

108
00:05:16.959 --> 00:05:18.399
<v Speaker 2>And if you'd like a copy of music Code, I

109
00:05:18.439 --> 00:05:20.439
<v Speaker 2>write a comment on the website at dot NetRocks dot

110
00:05:20.439 --> 00:05:22.319
<v Speaker 2>com or on the facebooks. We publish every show there, and

111
00:05:22.360 --> 00:05:23.759
<v Speaker 2>if you comment there and I read it on the show,

112
00:05:23.800 --> 00:05:25.279
<v Speaker 2>we'll send your copy. Music code by.

113
00:05:25.480 --> 00:05:28.279
<v Speaker 1>And music to code by, of course, is a series

114
00:05:28.360 --> 00:05:33.480
<v Speaker 1>of twenty four minute twenty five minute music pieces that

115
00:05:33.560 --> 00:05:35.759
<v Speaker 1>you can listen to while you code that helps you

116
00:05:35.800 --> 00:05:40.839
<v Speaker 1>focus and keep you from getting distracted. And if you

117
00:05:41.000 --> 00:05:42.680
<v Speaker 1>want to pay for it, it's at music tocode by

118
00:05:42.720 --> 00:05:46.959
<v Speaker 1>dot net. Also, you could get a copy by sending

119
00:05:47.040 --> 00:05:50.120
<v Speaker 1>us a message on the social media's other than facebooks.

120
00:05:50.600 --> 00:05:53.240
<v Speaker 1>We've been on ex Twitter for the longest time. We're

121
00:05:53.279 --> 00:05:59.879
<v Speaker 1>also on masted On and Blue Sky and some variation

122
00:06:00.240 --> 00:06:02.160
<v Speaker 1>at Carl Franklin and at rich Campbell.

123
00:06:02.240 --> 00:06:04.000
<v Speaker 2>Right right, yeah, blue Sky seems to have all the

124
00:06:04.040 --> 00:06:06.839
<v Speaker 2>action these days. Man, Like I realized I was. I

125
00:06:06.920 --> 00:06:09.959
<v Speaker 2>was scrolling through Blue Sky today and it looks so

126
00:06:10.079 --> 00:06:12.000
<v Speaker 2>much like the old Twitter. I forgot I was on

127
00:06:12.040 --> 00:06:12.480
<v Speaker 2>blues guy.

128
00:06:12.600 --> 00:06:14.279
<v Speaker 1>Yeah, except it's not dumb.

129
00:06:14.399 --> 00:06:17.120
<v Speaker 2>Well, it's kind of the like the old Twitter.

130
00:06:17.360 --> 00:06:20.680
<v Speaker 1>Yeah yeah, all right, let's bring on our guests. Nathan Westfall.

131
00:06:20.759 --> 00:06:23.759
<v Speaker 1>He is a senior no history. Oh you know what

132
00:06:23.959 --> 00:06:27.759
<v Speaker 1>I so, here's the thing I looked at nineteen thirty

133
00:06:27.800 --> 00:06:31.160
<v Speaker 1>five in the history and it's so jam packed, like

134
00:06:31.240 --> 00:06:33.639
<v Speaker 1>we can't even cover it all. But maybe I'll ask

135
00:06:33.720 --> 00:06:35.160
<v Speaker 1>you Richard what is your.

136
00:06:35.120 --> 00:06:36.839
<v Speaker 2>I only pick one thing, you know me, I'm gonna

137
00:06:36.839 --> 00:06:39.439
<v Speaker 2>pick one thing. Yeah, and the one thing is James

138
00:06:39.519 --> 00:06:42.399
<v Speaker 2>Chadwick's proof that the neutron exists.

139
00:06:42.680 --> 00:06:43.319
<v Speaker 1>How amazing.

140
00:06:43.519 --> 00:06:47.319
<v Speaker 2>Yeah, well think about this. That's nineteen thirty five and

141
00:06:47.600 --> 00:06:50.839
<v Speaker 2>within ten years the first atomic bomb would go off. Yeah,

142
00:06:50.879 --> 00:06:54.199
<v Speaker 2>and you need neutrons like that's how fast?

143
00:06:54.480 --> 00:06:57.720
<v Speaker 1>Yeah, So it's amazing the things that happened in this

144
00:06:58.439 --> 00:07:01.360
<v Speaker 1>relatively short time period. It was just explosive.

145
00:07:01.519 --> 00:07:06.839
<v Speaker 2>Yeah, literally in so many different ways, right like between

146
00:07:07.439 --> 00:07:12.319
<v Speaker 2>between the Great Depression, the rise of fascism, the explosion

147
00:07:12.319 --> 00:07:16.959
<v Speaker 2>into World War two, like that was a tumultuous ten

148
00:07:17.040 --> 00:07:19.879
<v Speaker 2>plus years and it just happened to be doing shows

149
00:07:19.920 --> 00:07:21.519
<v Speaker 2>in those show numbers right now.

150
00:07:21.560 --> 00:07:23.839
<v Speaker 1>And a byproduct was a lot of innovation, a by

151
00:07:23.839 --> 00:07:25.680
<v Speaker 1>product of the war and all of that stuff.

152
00:07:25.839 --> 00:07:28.439
<v Speaker 2>Yeah. Well, for better or worse, the military spends a

153
00:07:28.480 --> 00:07:32.480
<v Speaker 2>lot and a lot of that funding was military.

154
00:07:32.279 --> 00:07:35.720
<v Speaker 1>Highway system because of the military fifties in America.

155
00:07:35.720 --> 00:07:38.040
<v Speaker 2>We got a little time yet for that. Yeah, it'll

156
00:07:38.040 --> 00:07:38.839
<v Speaker 2>be later this year.

157
00:07:39.120 --> 00:07:39.560
<v Speaker 3>Yeah, yeah.

158
00:07:39.639 --> 00:07:40.120
<v Speaker 2>Yeah.

159
00:07:40.279 --> 00:07:44.120
<v Speaker 1>Still, it was Eisenhower's idea because he wanted mobility. Yeah,

160
00:07:44.120 --> 00:07:47.319
<v Speaker 1>all right, enough of that. Yeah, that's coming, Let's bring

161
00:07:47.319 --> 00:07:49.639
<v Speaker 1>on Nathan Westfall. As I started to say before, he

162
00:07:49.720 --> 00:07:54.480
<v Speaker 1>is a senior software engineering manager at Tyler Technologies, leading

163
00:07:54.480 --> 00:07:58.560
<v Speaker 1>the Cloud operations and mobile development team for student transportation.

164
00:07:59.399 --> 00:08:02.600
<v Speaker 1>He started development journey with Php and Ruby on rails,

165
00:08:02.639 --> 00:08:05.079
<v Speaker 1>but fell in love with the dot net ecosystem once

166
00:08:05.160 --> 00:08:09.720
<v Speaker 1>leaving college early for his first job outside development. You

167
00:08:09.759 --> 00:08:12.399
<v Speaker 1>can find him mixing audio at your local bar or

168
00:08:12.560 --> 00:08:15.720
<v Speaker 1>fishing on a frozen lake. One of those things.

169
00:08:15.519 --> 00:08:16.600
<v Speaker 2>I do all the time.

170
00:08:17.560 --> 00:08:19.360
<v Speaker 1>I wonder which one it's not fishing.

171
00:08:23.240 --> 00:08:25.040
<v Speaker 4>Welcome, Yeah, thanks for having me.

172
00:08:25.160 --> 00:08:26.720
<v Speaker 1>So you've been listening to the show for a while,

173
00:08:26.759 --> 00:08:27.399
<v Speaker 1>you said.

174
00:08:27.240 --> 00:08:29.680
<v Speaker 4>I have been. Yeah. Yeah, kind of the way I

175
00:08:29.800 --> 00:08:33.519
<v Speaker 4>learn is podcast everything else, and you guys are fun

176
00:08:33.559 --> 00:08:36.320
<v Speaker 4>to listen to, So that's good. It's kind of as

177
00:08:36.440 --> 00:08:38.080
<v Speaker 4>Richard was saying earlier. It's nice to now see how

178
00:08:38.120 --> 00:08:38.919
<v Speaker 4>the sausage is made.

179
00:08:39.039 --> 00:08:41.399
<v Speaker 1>So yeah, well it's good to have you at the table.

180
00:08:41.600 --> 00:08:42.960
<v Speaker 1>Nice past the sausage.

181
00:08:43.080 --> 00:08:44.919
<v Speaker 2>So what have you been working on, Nathan.

182
00:08:44.759 --> 00:08:48.919
<v Speaker 4>Yeah, so Tyler Technologies. What I work on in student

183
00:08:48.960 --> 00:08:51.919
<v Speaker 4>transportation is you know a yellow school bus you see

184
00:08:51.960 --> 00:08:54.919
<v Speaker 4>on the road in the US and Canada. You know,

185
00:08:55.000 --> 00:08:58.480
<v Speaker 4>we interact with so we're in one of every four

186
00:08:58.480 --> 00:09:03.200
<v Speaker 4>school districts uses Tyler system. And the app that I

187
00:09:03.360 --> 00:09:06.120
<v Speaker 4>here to talk about is the public facing app, so

188
00:09:06.120 --> 00:09:07.720
<v Speaker 4>the one that any parent who has a kid on

189
00:09:07.759 --> 00:09:10.679
<v Speaker 4>the bus that we integrate with can use called myrid

190
00:09:10.759 --> 00:09:14.360
<v Speaker 4>K twelve And it's an app that we rewrote earlier

191
00:09:14.440 --> 00:09:16.440
<v Speaker 4>last year, so in the beginning of twenty twenty four

192
00:09:16.480 --> 00:09:19.440
<v Speaker 4>it started to roll out, and it is a Blazer

193
00:09:19.879 --> 00:09:24.360
<v Speaker 4>Maui hybrid application works on web iOS, Android, and it

194
00:09:24.440 --> 00:09:28.279
<v Speaker 4>is much Blazer as you could possibly imagine shoved into

195
00:09:28.279 --> 00:09:31.480
<v Speaker 4>this app to have it run at scale and everything else.

196
00:09:31.679 --> 00:09:35.039
<v Speaker 1>I've already got a man crush on you. Man that

197
00:09:35.240 --> 00:09:37.960
<v Speaker 1>is that is you're speaking my language here.

198
00:09:38.240 --> 00:09:39.799
<v Speaker 2>What was it before it was Blazer?

199
00:09:40.039 --> 00:09:43.279
<v Speaker 4>Yeah, good question. So it was examinant Forms. The original

200
00:09:43.399 --> 00:09:46.840
<v Speaker 4>version of this app actually came out a couple months

201
00:09:46.879 --> 00:09:50.200
<v Speaker 4>after dot net one, so dot net Core one was released.

202
00:09:50.279 --> 00:09:52.720
<v Speaker 4>That's how early we were to dot net core and

203
00:09:52.759 --> 00:09:57.000
<v Speaker 4>everything else. And what we learned early on was I

204
00:09:57.000 --> 00:09:59.799
<v Speaker 4>can do examer reforms pretty well. But then when I

205
00:09:59.799 --> 00:10:02.320
<v Speaker 4>have to make those same features on web in dot

206
00:10:02.360 --> 00:10:05.600
<v Speaker 4>net core and Angular JS at the time, my feature

207
00:10:05.679 --> 00:10:08.799
<v Speaker 4>drift became insane, right. It kind of became worse and

208
00:10:08.840 --> 00:10:10.960
<v Speaker 4>worse over time to try to do something in forms

209
00:10:10.960 --> 00:10:13.799
<v Speaker 4>for iOS, maybe something a little different for Android, and

210
00:10:13.879 --> 00:10:16.720
<v Speaker 4>then also then change languages entirely for Web. So we

211
00:10:16.840 --> 00:10:19.960
<v Speaker 4>got the opportunity to rewrite it in twenty twenty three,

212
00:10:20.080 --> 00:10:23.200
<v Speaker 4>released in twenty twenty four, and went full blazer, so

213
00:10:23.240 --> 00:10:25.960
<v Speaker 4>we could share about ninety five percent of our code

214
00:10:25.960 --> 00:10:27.759
<v Speaker 4>between iOS, Android, Web is all the same.

215
00:10:27.840 --> 00:10:28.679
<v Speaker 1>That's fantastic.

216
00:10:28.799 --> 00:10:32.000
<v Speaker 2>Yeah. What also means you battle through the tough times

217
00:10:32.000 --> 00:10:35.039
<v Speaker 2>at zamorin too, right, because that was oh yeah, those

218
00:10:35.039 --> 00:10:36.200
<v Speaker 2>were early bits.

219
00:10:36.200 --> 00:10:39.919
<v Speaker 4>Yeah, correct, Yeah, when I even used examined it before

220
00:10:39.960 --> 00:10:44.000
<v Speaker 4>I joined Tyler, when Microsoft had only had acquired it,

221
00:10:44.039 --> 00:10:46.480
<v Speaker 4>like very very recently. So I mean I've been using

222
00:10:46.519 --> 00:10:48.320
<v Speaker 4>examined for almost as long as it's been help.

223
00:10:48.720 --> 00:10:48.919
<v Speaker 2>Yeah.

224
00:10:48.960 --> 00:10:51.519
<v Speaker 1>We I thought it was going to be a lot

225
00:10:51.559 --> 00:10:53.919
<v Speaker 1>smoother ride than it actually turned out to be. I

226
00:10:54.000 --> 00:10:57.600
<v Speaker 1>was so excited when when Zamoran you know, came on

227
00:10:57.639 --> 00:11:00.840
<v Speaker 1>the scene. Yeah, and the promise of jam forms and

228
00:11:00.919 --> 00:11:04.720
<v Speaker 1>all that stuff was just amazing and then just just

229
00:11:05.039 --> 00:11:05.759
<v Speaker 1>warm me down.

230
00:11:06.320 --> 00:11:09.159
<v Speaker 2>Sorry, yeah, Well, and I wrestle with is it the

231
00:11:09.279 --> 00:11:11.600
<v Speaker 2>problem with the tool learning? Is it just a problem

232
00:11:11.639 --> 00:11:15.600
<v Speaker 2>with building mobile apps like this separation between working on

233
00:11:15.639 --> 00:11:18.279
<v Speaker 2>a machine different from the day app with the app

234
00:11:18.399 --> 00:11:22.600
<v Speaker 2>environment like that, cycle's just hard and it's diverse like that,

235
00:11:22.600 --> 00:11:25.519
<v Speaker 2>that combination just doesn't matter what the tools are. It's

236
00:11:25.559 --> 00:11:26.840
<v Speaker 2>a battle compared to any other.

237
00:11:27.159 --> 00:11:29.399
<v Speaker 1>It is, and whether the tools keep you up to

238
00:11:29.480 --> 00:11:31.440
<v Speaker 1>date or you have to keep up to date, you're

239
00:11:31.480 --> 00:11:34.320
<v Speaker 1>always going to end up doing some kind of tweaking

240
00:11:34.919 --> 00:11:37.000
<v Speaker 1>on one platform you're not doing on the other. And

241
00:11:37.000 --> 00:11:41.399
<v Speaker 1>that's why I think the road that you took, which

242
00:11:41.440 --> 00:11:44.600
<v Speaker 1>is Blazer Hybrid, gets rid of all that because the

243
00:11:44.639 --> 00:11:47.840
<v Speaker 1>cross platform this is done in the browser, which is

244
00:11:48.480 --> 00:11:52.080
<v Speaker 1>had many many years to go to get its cross

245
00:11:52.120 --> 00:11:54.399
<v Speaker 1>platform story done, and it's there.

246
00:11:54.559 --> 00:11:56.399
<v Speaker 4>No, I'm with you. I think the biggest part of

247
00:11:56.440 --> 00:11:58.200
<v Speaker 4>Exhibit Forms that was tough is even that you had

248
00:11:58.240 --> 00:12:01.519
<v Speaker 4>all this shared code and c sharp code at the time.

249
00:12:01.960 --> 00:12:05.679
<v Speaker 4>I'm fighting iOS at the time, you know, releases were

250
00:12:05.679 --> 00:12:08.480
<v Speaker 4>in June. Android was later in the year. I'd have

251
00:12:08.559 --> 00:12:11.960
<v Speaker 4>to update all my Android dependencies just so forms would

252
00:12:12.039 --> 00:12:14.320
<v Speaker 4>work right. And to your point, Karl, if I'm just

253
00:12:14.399 --> 00:12:17.480
<v Speaker 4>using a browser which I know will render my CSS

254
00:12:17.519 --> 00:12:21.480
<v Speaker 4>the same way, my dependency is just shrunk. And you know,

255
00:12:21.759 --> 00:12:22.240
<v Speaker 4>so small.

256
00:12:22.399 --> 00:12:24.399
<v Speaker 1>So yeah, so if you can do a web app

257
00:12:24.399 --> 00:12:27.159
<v Speaker 1>in Blazer, you can do a mobile app in Blazer, right, yep,

258
00:12:27.200 --> 00:12:28.159
<v Speaker 1>that's what it comes down to.

259
00:12:28.679 --> 00:12:30.279
<v Speaker 4>And we're testing it both because we even went the

260
00:12:30.279 --> 00:12:32.600
<v Speaker 4>whole route. We're not using Blazer server at all. We

261
00:12:32.720 --> 00:12:36.159
<v Speaker 4>went full web assembly. Yeah, I went the full If

262
00:12:36.200 --> 00:12:38.320
<v Speaker 4>I don't have to host the server, why would I? So, yeah,

263
00:12:38.360 --> 00:12:39.720
<v Speaker 4>sure that's what we're doing. Yeah.

264
00:12:39.759 --> 00:12:41.879
<v Speaker 2>Well, and you've got a I mean, it's not really

265
00:12:41.960 --> 00:12:43.960
<v Speaker 2>public facing app in the sense that it is a

266
00:12:44.000 --> 00:12:48.000
<v Speaker 2>known set of users. It's parents of students, but it's

267
00:12:48.039 --> 00:12:52.279
<v Speaker 2>still a lot like the server load on that. I

268
00:12:52.320 --> 00:12:53.879
<v Speaker 2>think Blazer server makes a lot of sense with an

269
00:12:53.879 --> 00:12:57.919
<v Speaker 2>internal app with a certain number of employees done. Yeah,

270
00:12:57.960 --> 00:13:00.720
<v Speaker 2>to make that public facing it's really hazardous.

271
00:13:00.879 --> 00:13:04.000
<v Speaker 4>Yeah, yeah, And our traffic's really predictable, right, Like we

272
00:13:04.039 --> 00:13:07.799
<v Speaker 4>can see different time zones come online because buses normally

273
00:13:07.879 --> 00:13:10.039
<v Speaker 4>roll in the same morning the same time East Coast

274
00:13:10.120 --> 00:13:11.799
<v Speaker 4>and then Central and then west.

275
00:13:11.679 --> 00:13:14.679
<v Speaker 2>Right, right, you know when it's going to be busy. Right.

276
00:13:14.840 --> 00:13:16.279
<v Speaker 4>Parents are going to check the f twice a day,

277
00:13:16.360 --> 00:13:18.519
<v Speaker 4>when their kids going to school and when their kids

278
00:13:18.559 --> 00:13:21.159
<v Speaker 4>coming home, and everyone's doing it at the same time.

279
00:13:21.240 --> 00:13:24.159
<v Speaker 2>Almost, so aren't you then making an argument in favor

280
00:13:24.200 --> 00:13:25.200
<v Speaker 2>of server sign.

281
00:13:25.120 --> 00:13:28.879
<v Speaker 4>Ah kind of you know, but the costs at the

282
00:13:28.960 --> 00:13:30.679
<v Speaker 4>end of the day for web assembly to support all

283
00:13:30.679 --> 00:13:34.480
<v Speaker 4>of this is I have we're partnered with AWS here

284
00:13:34.480 --> 00:13:36.600
<v Speaker 4>at Tyler, so we're using dot net on AWS. But

285
00:13:37.519 --> 00:13:39.799
<v Speaker 4>the whole web server for hundreds of thousands of parents

286
00:13:39.919 --> 00:13:42.000
<v Speaker 4>is an S three bucket and then a CDN and

287
00:13:42.039 --> 00:13:42.480
<v Speaker 4>I'm done.

288
00:13:42.559 --> 00:13:42.879
<v Speaker 2>That's it.

289
00:13:42.919 --> 00:13:43.480
<v Speaker 4>That's all I got.

290
00:13:43.559 --> 00:13:44.200
<v Speaker 1>Yeah, that's great.

291
00:13:44.279 --> 00:13:44.519
<v Speaker 2>Nice.

292
00:13:44.519 --> 00:13:47.000
<v Speaker 1>So I got to ask, what are you using for authentication?

293
00:13:47.240 --> 00:13:49.840
<v Speaker 4>Cognito Actually, huh, tell.

294
00:13:49.679 --> 00:13:50.559
<v Speaker 1>Me about Cognito.

295
00:13:50.759 --> 00:13:54.200
<v Speaker 4>Yeah, so Cognito. We we're going back and forth what

296
00:13:54.240 --> 00:13:56.399
<v Speaker 4>we should use. There's a whole bunch of obviously authentication

297
00:13:56.480 --> 00:14:00.320
<v Speaker 4>providers you can use Cognito. We just wanted to stay

298
00:14:00.360 --> 00:14:04.000
<v Speaker 4>within the Amazon ecosystem because we don't have huge requirements

299
00:14:04.000 --> 00:14:08.039
<v Speaker 4>for authentication. They have a nice portal for users self registering,

300
00:14:08.039 --> 00:14:09.559
<v Speaker 4>which is our big use case. It's not like we

301
00:14:09.600 --> 00:14:12.960
<v Speaker 4>create these accounts for parents. They can self register and

302
00:14:12.960 --> 00:14:15.320
<v Speaker 4>give us the option to do social logins down the road. So,

303
00:14:16.200 --> 00:14:18.399
<v Speaker 4>you know, we're over six hundred and fifty thousand users

304
00:14:18.399 --> 00:14:21.679
<v Speaker 4>that have been created in Cognito, and then even so

305
00:14:21.759 --> 00:14:24.120
<v Speaker 4>Cognitio create a nice pipeline because we were not in

306
00:14:24.200 --> 00:14:28.960
<v Speaker 4>cognito common examinineforms and they let you actually in real time,

307
00:14:29.039 --> 00:14:31.000
<v Speaker 4>So once a user tries to log in for the

308
00:14:31.000 --> 00:14:34.639
<v Speaker 4>first time, we can migrate those users in real time.

309
00:14:34.879 --> 00:14:36.879
<v Speaker 4>So no password change, no nothing.

310
00:14:37.080 --> 00:14:39.519
<v Speaker 2>If you're going to run on AWS, you should use

311
00:14:39.559 --> 00:14:42.240
<v Speaker 2>AWS as authenticator, just the same way that if you're

312
00:14:42.240 --> 00:14:45.679
<v Speaker 2>going to run on Azure you should be using Azure AD, right.

313
00:14:45.639 --> 00:14:47.960
<v Speaker 4>Like, yeah, I'm a big fan of peeping it together.

314
00:14:48.080 --> 00:14:50.799
<v Speaker 2>Yeah yeah, yeah, it's just not worth the pain. Yeah, Like,

315
00:14:50.879 --> 00:14:55.039
<v Speaker 2>it's very challenging to build a unified authentication strategy across clouds,

316
00:14:56.000 --> 00:14:57.360
<v Speaker 2>fighting that a lot, right.

317
00:14:57.480 --> 00:15:01.360
<v Speaker 1>And so I imagine that all the credentials are kept

318
00:15:01.480 --> 00:15:04.200
<v Speaker 1>out of your reach, Yeah, so that you don't you're

319
00:15:04.240 --> 00:15:07.720
<v Speaker 1>not liable for you know, break ins or anything like that.

320
00:15:07.559 --> 00:15:09.559
<v Speaker 4>Correct, which is another big benefit. We used to host

321
00:15:09.600 --> 00:15:14.440
<v Speaker 4>it ourselves with dot Net's identity server and handled all

322
00:15:14.480 --> 00:15:17.320
<v Speaker 4>that and that's all gone now and all everyone got

323
00:15:17.360 --> 00:15:20.200
<v Speaker 4>migrated over and again that real time is nice because

324
00:15:20.399 --> 00:15:22.279
<v Speaker 4>you can use landa when they log in, Oh, this

325
00:15:22.360 --> 00:15:24.879
<v Speaker 4>user doesn't exist, let me check your existing user store

326
00:15:25.159 --> 00:15:26.879
<v Speaker 4>and the user never had to change their password. It

327
00:15:26.960 --> 00:15:29.399
<v Speaker 4>just moves right over and that's great. Nice starts working.

328
00:15:29.960 --> 00:15:32.120
<v Speaker 2>So you did that, very nice migration. They never knew

329
00:15:32.120 --> 00:15:34.080
<v Speaker 2>you changed authentication strategies. Doesn't matter.

330
00:15:34.159 --> 00:15:35.200
<v Speaker 4>Yeah, no idea.

331
00:15:35.879 --> 00:15:38.799
<v Speaker 2>Then and then one day nobody's hitting that identity server anymore.

332
00:15:38.840 --> 00:15:40.360
<v Speaker 2>You can turn it off one day.

333
00:15:40.200 --> 00:15:42.759
<v Speaker 4>Correct, Well that was I had the pleasure of a

334
00:15:42.799 --> 00:15:44.840
<v Speaker 4>couple of months ago finally turning everything off, and it

335
00:15:44.919 --> 00:15:47.960
<v Speaker 4>felt so nice to go through and web servers off,

336
00:15:48.039 --> 00:15:50.519
<v Speaker 4>APIs off, everything got shut down.

337
00:15:50.720 --> 00:15:52.679
<v Speaker 2>Why do we feel good when we turn stuff off?

338
00:15:53.639 --> 00:15:55.399
<v Speaker 4>It's like calming, right, Yeah, No, it's.

339
00:15:55.320 --> 00:15:59.519
<v Speaker 1>The money goes back into your wallet, reversing the flow

340
00:15:59.519 --> 00:15:59.879
<v Speaker 1>of money.

341
00:16:00.000 --> 00:16:02.519
<v Speaker 2>It's also it's also an end of pain, right, Like,

342
00:16:02.519 --> 00:16:05.240
<v Speaker 2>that's weary. It's not going to hurt you anymore because

343
00:16:05.320 --> 00:16:07.759
<v Speaker 2>it's the stuff.

344
00:16:10.840 --> 00:16:12.600
<v Speaker 4>I know. There was a there's a brief period where

345
00:16:12.639 --> 00:16:14.639
<v Speaker 4>we were rewriting it, and I always hated getting a

346
00:16:14.879 --> 00:16:16.480
<v Speaker 4>you know, an issue come through and I'm like, I

347
00:16:16.519 --> 00:16:18.440
<v Speaker 4>got to open examin forms again and I got to

348
00:16:18.440 --> 00:16:21.080
<v Speaker 4>go through and fix this. And after using Blazer for

349
00:16:21.080 --> 00:16:23.879
<v Speaker 4>so long, rewriting it's it was hard to go back.

350
00:16:24.120 --> 00:16:27.480
<v Speaker 2>Oh yeah, wandering back in his zamm reforms like walking

351
00:16:27.480 --> 00:16:30.519
<v Speaker 2>into a dark forest. Yeah, I remember why I left

352
00:16:30.519 --> 00:16:33.720
<v Speaker 2>this place. I appreciate that.

353
00:16:33.960 --> 00:16:36.600
<v Speaker 1>I it's on my list of things to do to

354
00:16:37.360 --> 00:16:41.519
<v Speaker 1>open up uh MAUI in dot net nine and take

355
00:16:41.559 --> 00:16:42.639
<v Speaker 1>a good hard look at it.

356
00:16:42.679 --> 00:16:42.960
<v Speaker 2>Again.

357
00:16:43.679 --> 00:16:46.399
<v Speaker 1>I don't because ever since I found you know, the

358
00:16:46.440 --> 00:16:51.240
<v Speaker 1>Blazer hybrid MEI hybrid stuff, I'm I just don't. I

359
00:16:51.320 --> 00:16:52.080
<v Speaker 1>haven't gone back.

360
00:16:52.200 --> 00:16:55.159
<v Speaker 4>Yeah, basically, so yeah, we've done. We've done a few

361
00:16:55.200 --> 00:16:57.759
<v Speaker 4>to play around with it, but I every time I

362
00:16:57.840 --> 00:16:59.039
<v Speaker 4>do it field and need of like I could just

363
00:16:59.080 --> 00:17:00.840
<v Speaker 4>do this and blaze and I'm used to it and

364
00:17:00.919 --> 00:17:02.240
<v Speaker 4>it's works just as good.

365
00:17:02.200 --> 00:17:05.400
<v Speaker 2>Right yeah, yeah, well yeah, if you're getting the results,

366
00:17:05.400 --> 00:17:07.599
<v Speaker 2>if the customer is happy, which is parents, which are

367
00:17:07.680 --> 00:17:10.680
<v Speaker 2>who are never happy, then you're doing all right right right.

368
00:17:11.119 --> 00:17:12.720
<v Speaker 4>Yeah, you can definitely say that again.

369
00:17:12.799 --> 00:17:15.680
<v Speaker 2>So yes, yeah, yeah, don't mess with it.

370
00:17:15.720 --> 00:17:17.240
<v Speaker 1>And how many users did you say you had?

371
00:17:17.519 --> 00:17:20.599
<v Speaker 4>We currently have over six hundred and fifty thousand uh

372
00:17:20.880 --> 00:17:24.160
<v Speaker 4>registered in our active counts daily active counts prett high

373
00:17:24.200 --> 00:17:24.759
<v Speaker 4>on the top of that.

374
00:17:24.920 --> 00:17:27.480
<v Speaker 2>So wow, you do not want to do tech support

375
00:17:27.519 --> 00:17:29.720
<v Speaker 2>for six hundred fifty thousand people. That's not good. No,

376
00:17:30.039 --> 00:17:32.359
<v Speaker 2>they got to be all self service, They got it,

377
00:17:32.440 --> 00:17:34.720
<v Speaker 2>but also they don't care. They just want to know

378
00:17:34.759 --> 00:17:35.480
<v Speaker 2>where the kid is.

379
00:17:35.559 --> 00:17:37.720
<v Speaker 4>Correct, which is a whole other set of problems that

380
00:17:38.079 --> 00:17:41.640
<v Speaker 4>we had to do in a way that's helping both

381
00:17:41.680 --> 00:17:44.640
<v Speaker 4>the district, who is really our customer, right, The school

382
00:17:44.640 --> 00:17:46.519
<v Speaker 4>district is the one that uses our technology.

383
00:17:46.759 --> 00:17:49.039
<v Speaker 2>Those the ones you're paying you, right, But.

384
00:17:49.000 --> 00:17:51.240
<v Speaker 4>They're servicing the parents, and we also have to serve

385
00:17:51.279 --> 00:17:53.480
<v Speaker 4>the parents and the district. So how do I explain

386
00:17:53.599 --> 00:17:56.359
<v Speaker 4>to the parent, hey, this bus is out of commission, right,

387
00:17:56.400 --> 00:17:58.519
<v Speaker 4>and this is why you can't see where your kid is, right,

388
00:17:58.519 --> 00:18:02.000
<v Speaker 4>and solving all these problems to someone who's not in

389
00:18:02.079 --> 00:18:06.480
<v Speaker 4>the operation of school busing, right, making them not come

390
00:18:06.519 --> 00:18:09.400
<v Speaker 4>back at us. Obviously, we want to protect our operatings

391
00:18:09.400 --> 00:18:11.440
<v Speaker 4>as much as possible and be like, hey, your app's

392
00:18:11.480 --> 00:18:12.920
<v Speaker 4>not working, But at the end of the day, it's

393
00:18:13.079 --> 00:18:15.519
<v Speaker 4>you know, your bus didn't drive today because it's a holiday.

394
00:18:16.079 --> 00:18:16.839
<v Speaker 4>True story, right.

395
00:18:17.000 --> 00:18:20.200
<v Speaker 1>So is that what your app does primarily as track buses?

396
00:18:20.400 --> 00:18:23.400
<v Speaker 4>Yeah, so it does two different things. So you can

397
00:18:23.519 --> 00:18:26.680
<v Speaker 4>find your kids' schedule all through self registration. So if

398
00:18:26.720 --> 00:18:30.000
<v Speaker 4>I had my kid was in elementary school, I could

399
00:18:30.000 --> 00:18:31.839
<v Speaker 4>register them to the app and see, hey, the bus

400
00:18:31.880 --> 00:18:33.480
<v Speaker 4>is going to pick them up at this corner every

401
00:18:33.880 --> 00:18:36.400
<v Speaker 4>Monday through Friday at eight twenty in the morning. This

402
00:18:36.519 --> 00:18:39.240
<v Speaker 4>is my driver's name and what bus is coming. And

403
00:18:39.279 --> 00:18:41.839
<v Speaker 4>then if the district allows it and has the capability,

404
00:18:41.880 --> 00:18:44.960
<v Speaker 4>you can actually see when your bus is coming in

405
00:18:45.000 --> 00:18:47.640
<v Speaker 4>your real time. You get notifications kind of like Huber

406
00:18:47.680 --> 00:18:50.720
<v Speaker 4>if your bus is about to arrive, it's five minutes away,

407
00:18:50.799 --> 00:18:54.920
<v Speaker 4>it's running late, and kind of provides that experience. So

408
00:18:55.079 --> 00:18:58.039
<v Speaker 4>parents can just really quickly say, I mean, it was

409
00:18:58.079 --> 00:19:00.440
<v Speaker 4>a cold day up here in New York. I was

410
00:19:00.880 --> 00:19:03.200
<v Speaker 4>outside and realize how windy it was. I would hate

411
00:19:03.240 --> 00:19:04.799
<v Speaker 4>if I had to go stand at the bus stop

412
00:19:04.839 --> 00:19:07.359
<v Speaker 4>for twenty minutes hoping the bus would show up. No,

413
00:19:07.720 --> 00:19:10.200
<v Speaker 4>it's nice if I can get that notification just walk outside.

414
00:19:10.240 --> 00:19:13.480
<v Speaker 1>What about kids fourteen and older, Let's say, can they

415
00:19:13.559 --> 00:19:14.400
<v Speaker 1>use the app as well?

416
00:19:14.799 --> 00:19:18.160
<v Speaker 4>They technically can. We obviously try to restrict it as

417
00:19:18.240 --> 00:19:19.880
<v Speaker 4>much as possible as it's meant for the parent, But

418
00:19:19.960 --> 00:19:24.319
<v Speaker 4>there's parents have the ability to share that information with

419
00:19:24.400 --> 00:19:27.160
<v Speaker 4>any other account, right, so they can even say, hey,

420
00:19:27.200 --> 00:19:29.240
<v Speaker 4>for the day, the babysitter can have it to make

421
00:19:29.279 --> 00:19:30.880
<v Speaker 4>sure that my kid gets off the bus.

422
00:19:31.000 --> 00:19:34.599
<v Speaker 1>Nice the kid wouldn't necessarily be waiting at the bus

423
00:19:34.599 --> 00:19:36.440
<v Speaker 1>and it's late and be able to flip up the

424
00:19:36.480 --> 00:19:39.119
<v Speaker 1>app and say, oh, yeah it's ten minutes late.

425
00:19:39.240 --> 00:19:41.920
<v Speaker 4>Yeah, we have some kids that do it, but primarily

426
00:19:41.960 --> 00:19:44.640
<v Speaker 4>it's the older kids are kind of left on their own.

427
00:19:44.640 --> 00:19:47.039
<v Speaker 4>As you know as a parent, they kind of you're

428
00:19:47.319 --> 00:19:49.640
<v Speaker 4>becoming more of an adult. It's a lot of kids

429
00:19:49.680 --> 00:19:52.480
<v Speaker 4>in elementary school, right, because even in some states, depending

430
00:19:52.480 --> 00:19:54.160
<v Speaker 4>on your age, you have to be at the stop

431
00:19:54.200 --> 00:19:55.880
<v Speaker 4>for the kids to get dropped off. True, so I

432
00:19:55.920 --> 00:19:56.799
<v Speaker 4>don't want to wait outside.

433
00:19:56.839 --> 00:20:00.640
<v Speaker 1>Plus there's the Kappa thing, right, Yes, the Kapa against

434
00:20:01.400 --> 00:20:04.920
<v Speaker 1>kids using software. If you were going to allow kids

435
00:20:04.960 --> 00:20:07.480
<v Speaker 1>I think it's fourteen and younger or under fourteen.

436
00:20:07.559 --> 00:20:09.599
<v Speaker 4>Yeah, it's somewhere like that. Thirteen fourteen, Yeah.

437
00:20:09.480 --> 00:20:11.960
<v Speaker 1>Thirteen and under, if you're going to allow them to

438
00:20:12.079 --> 00:20:12.319
<v Speaker 1>use it.

439
00:20:12.359 --> 00:20:14.799
<v Speaker 2>Not that there's any sensitive information here, it's the location

440
00:20:14.880 --> 00:20:15.599
<v Speaker 2>of a bus.

441
00:20:15.759 --> 00:20:21.039
<v Speaker 1>Yeah, you'd have to go through hoops yet that Yeah, And.

442
00:20:21.400 --> 00:20:23.000
<v Speaker 2>We happen to be recording this when there was a

443
00:20:23.039 --> 00:20:27.240
<v Speaker 2>pretty big snowfall through central US. So I got to

444
00:20:27.279 --> 00:20:29.599
<v Speaker 2>think that impacts bus as a whole bunch. And that's

445
00:20:29.599 --> 00:20:31.440
<v Speaker 2>when everybody's going to be hammering on the app, like,

446
00:20:31.480 --> 00:20:32.400
<v Speaker 2>have we seen the maps?

447
00:20:32.440 --> 00:20:32.720
<v Speaker 4>Correct?

448
00:20:32.759 --> 00:20:33.519
<v Speaker 2>He's the bus running?

449
00:20:33.519 --> 00:20:33.680
<v Speaker 4>Is it?

450
00:20:34.079 --> 00:20:34.640
<v Speaker 2>Is it moving?

451
00:20:35.160 --> 00:20:37.559
<v Speaker 1>Have you seen the maps? Like this white band all

452
00:20:37.599 --> 00:20:40.119
<v Speaker 1>the way through the Midwest from the from the west

453
00:20:40.119 --> 00:20:43.720
<v Speaker 1>coast to the east coast. Unbelievable. Yeah, quite a piece

454
00:20:43.759 --> 00:20:44.759
<v Speaker 1>of weather anyway.

455
00:20:44.960 --> 00:20:47.039
<v Speaker 2>So do you present it as a map or is

456
00:20:47.079 --> 00:20:49.599
<v Speaker 2>it just a table of this is the bus, this

457
00:20:49.640 --> 00:20:50.240
<v Speaker 2>is where it'll be?

458
00:20:50.480 --> 00:20:50.680
<v Speaker 1>Yeah?

459
00:20:50.759 --> 00:20:53.279
<v Speaker 4>No, good question time. So it's it's all configured by

460
00:20:53.279 --> 00:20:56.680
<v Speaker 4>the district because different districts have different policies. And you know,

461
00:20:56.759 --> 00:20:58.720
<v Speaker 4>some districts have a policy where they don't want to

462
00:20:58.720 --> 00:21:00.680
<v Speaker 4>show the parents the bus just don't it's about to

463
00:21:00.799 --> 00:21:03.279
<v Speaker 4>arrive soon because they don't want angry parents getting in

464
00:21:03.319 --> 00:21:05.319
<v Speaker 4>their car and chasing the bus down because they miss

465
00:21:05.400 --> 00:21:07.960
<v Speaker 4>their kid and so on and so forth. Right, But

466
00:21:08.000 --> 00:21:10.799
<v Speaker 4>if they allow everything, Yeah, you can see your bus

467
00:21:11.000 --> 00:21:14.480
<v Speaker 4>on a map. We use signal R to broadcast that

468
00:21:14.640 --> 00:21:18.160
<v Speaker 4>information and then show it live within the app. You

469
00:21:18.200 --> 00:21:20.200
<v Speaker 4>can interact with it, follow it in three D all

470
00:21:20.240 --> 00:21:21.000
<v Speaker 4>this other fun stuff.

471
00:21:21.960 --> 00:21:23.960
<v Speaker 2>Yeah. I like that. Yeah, I know that's yeah, so

472
00:21:24.000 --> 00:21:26.799
<v Speaker 2>you can go but very that's very like uber esque

473
00:21:26.960 --> 00:21:29.200
<v Speaker 2>in that sense. You can literally watch the vehicle emotion.

474
00:21:29.279 --> 00:21:32.480
<v Speaker 2>But I can also see why certain districts would say,

475
00:21:32.519 --> 00:21:34.799
<v Speaker 2>you know, that's probably a little too much information, that's

476
00:21:34.799 --> 00:21:37.599
<v Speaker 2>a creepy Yes, exactly.

477
00:21:38.000 --> 00:21:39.880
<v Speaker 4>You get both extremes. I want to see everything and

478
00:21:39.880 --> 00:21:41.039
<v Speaker 4>I want to see nothing, right.

479
00:21:41.119 --> 00:21:41.359
<v Speaker 2>Yeah.

480
00:21:41.920 --> 00:21:44.599
<v Speaker 4>The Uber thing is is when we've been trying to

481
00:21:44.599 --> 00:21:46.920
<v Speaker 4>deal with for a while. Because Uber is obviously great, right.

482
00:21:46.960 --> 00:21:48.440
<v Speaker 4>I mean I've gone to the airport so many times

483
00:21:48.480 --> 00:21:50.160
<v Speaker 4>and I go to a conference, I'll pull up Uber

484
00:21:50.200 --> 00:21:53.519
<v Speaker 4>get where I need to go. But people don't quite

485
00:21:53.599 --> 00:21:55.720
<v Speaker 4>understand all the time, is that Uber is nice because

486
00:21:55.799 --> 00:21:58.400
<v Speaker 4>you as a driver, except that I'm carrying my one

487
00:21:58.440 --> 00:22:02.759
<v Speaker 4>passenger somewhere else. While a school bus is if it's

488
00:22:02.759 --> 00:22:05.799
<v Speaker 4>all configured properly, because the driver can't do any interaction

489
00:22:05.920 --> 00:22:07.880
<v Speaker 4>while they're driving. They can't have a screen up, they

490
00:22:07.880 --> 00:22:10.759
<v Speaker 4>can't have all this other technology that a taxi driver

491
00:22:10.880 --> 00:22:13.720
<v Speaker 4>UBI driver can have. I can't just notify one parent.

492
00:22:13.839 --> 00:22:17.799
<v Speaker 4>I have to notify sixty kids maybe and their families,

493
00:22:18.119 --> 00:22:20.759
<v Speaker 4>and not also share where those fifty nine other kids

494
00:22:20.839 --> 00:22:22.720
<v Speaker 4>also live, right? And how do I do that in

495
00:22:22.759 --> 00:22:23.359
<v Speaker 4>a different way?

496
00:22:23.680 --> 00:22:24.119
<v Speaker 1>Challenge?

497
00:22:24.400 --> 00:22:26.559
<v Speaker 2>Yeah, No, it's great, and it's great. Question. It's like

498
00:22:26.599 --> 00:22:27.799
<v Speaker 2>what's the right thing to do there?

499
00:22:27.960 --> 00:22:30.799
<v Speaker 1>So you have let's count the clients. You have a

500
00:22:31.559 --> 00:22:35.240
<v Speaker 1>web obviously and mobile. Do you also have Windows and

501
00:22:35.319 --> 00:22:35.960
<v Speaker 1>Mac clients.

502
00:22:36.119 --> 00:22:39.400
<v Speaker 4>We don't have Windows because actually all of the development team,

503
00:22:39.400 --> 00:22:41.880
<v Speaker 4>including myself, we only run max. I do have it

504
00:22:41.960 --> 00:22:44.720
<v Speaker 4>running on a Mac locally, though, because that's how I

505
00:22:44.759 --> 00:22:46.279
<v Speaker 4>do development is mostly in the Mac.

506
00:22:46.519 --> 00:22:50.240
<v Speaker 1>Right okay, because you're using the Mali hybrid model.

507
00:22:50.359 --> 00:22:52.599
<v Speaker 4>Right, correct, there's nothing stopping us.

508
00:22:52.720 --> 00:22:54.279
<v Speaker 1>It's more uh, nothing stopping you.

509
00:22:54.400 --> 00:22:57.680
<v Speaker 4>Yeah, it's more because of you know, got to go

510
00:22:57.720 --> 00:23:00.359
<v Speaker 4>through enterprise hoops. I don't want to fight that, yeah, exactly.

511
00:23:00.519 --> 00:23:03.799
<v Speaker 1>I mean that comes back to Richard Rukima's point is

512
00:23:03.839 --> 00:23:07.119
<v Speaker 1>that we love these mobile things because you can just

513
00:23:07.400 --> 00:23:09.640
<v Speaker 1>pull them up, you get the latest version, you don't

514
00:23:09.640 --> 00:23:15.160
<v Speaker 1>have to install them and ye WPF who needs it?

515
00:23:15.200 --> 00:23:15.720
<v Speaker 1>For this guy?

516
00:23:15.799 --> 00:23:20.119
<v Speaker 2>Apps that? Yeah? Yeah, that's you don't want to run

517
00:23:20.240 --> 00:23:22.480
<v Speaker 2>WPF on now? That would be gosh.

518
00:23:22.920 --> 00:23:25.440
<v Speaker 1>Did you also take a look at some of the

519
00:23:25.480 --> 00:23:32.880
<v Speaker 1>other sort of you know, multi client frameworks out there

520
00:23:32.960 --> 00:23:36.000
<v Speaker 1>before you decided on this or was it a natural

521
00:23:36.039 --> 00:23:39.119
<v Speaker 1>progression because you were always using zamor and already.

522
00:23:39.240 --> 00:23:42.000
<v Speaker 4>Yeah, it was obviously we were leaning this way. We

523
00:23:42.079 --> 00:23:46.279
<v Speaker 4>were using Blazer already, Uh since what was it done

524
00:23:46.279 --> 00:23:48.160
<v Speaker 4>in a core three three one depending on whethery're using

525
00:23:48.200 --> 00:23:50.880
<v Speaker 4>web assembly or not, so we kind of were already

526
00:23:50.920 --> 00:23:56.000
<v Speaker 4>familiar with Blazer. Tyler also has a internal UI library

527
00:23:56.000 --> 00:23:58.079
<v Speaker 4>that we use, and of course it's web components only,

528
00:23:58.319 --> 00:24:00.599
<v Speaker 4>so it's do I want to port that something else

529
00:24:00.680 --> 00:24:03.279
<v Speaker 4>or keep using web We did look at things like

530
00:24:03.359 --> 00:24:07.960
<v Speaker 4>Flutter and Ionic for a little while, but really we're

531
00:24:07.960 --> 00:24:10.440
<v Speaker 4>a dot net shop through and through, even outside of

532
00:24:10.440 --> 00:24:12.400
<v Speaker 4>mobile development, so it kind of just made sense for

533
00:24:12.480 --> 00:24:15.440
<v Speaker 4>us to stick with dot net. And I've never had

534
00:24:15.440 --> 00:24:17.880
<v Speaker 4>any issues with Blazer, which I know people have their

535
00:24:17.920 --> 00:24:21.559
<v Speaker 4>opinions on necessarily using web assembly and all this other stuff,

536
00:24:21.559 --> 00:24:25.119
<v Speaker 4>but it's at least I know what can be wrong,

537
00:24:25.200 --> 00:24:26.000
<v Speaker 4>so it's familiar.

538
00:24:27.039 --> 00:24:30.240
<v Speaker 2>Yeah, But I mean, MAUI was supposed to be the

539
00:24:30.279 --> 00:24:33.200
<v Speaker 2>logical successor to zamorin forms like you are making a

540
00:24:33.240 --> 00:24:35.799
<v Speaker 2>bigger leap here to jump over to Blazer.

541
00:24:35.839 --> 00:24:38.400
<v Speaker 4>We are, and we definitely walked through that. So we've

542
00:24:38.440 --> 00:24:41.880
<v Speaker 4>actually had two apps and we did them differently. So

543
00:24:43.559 --> 00:24:45.720
<v Speaker 4>ride through sixty now known my ride K twelve, we

544
00:24:45.759 --> 00:24:48.200
<v Speaker 4>did that whole Blazer rewrite, right, We took things in

545
00:24:48.279 --> 00:24:50.160
<v Speaker 4>and forms through the way it did everything a blazer.

546
00:24:50.559 --> 00:24:52.960
<v Speaker 4>We have another application called my Stuff, which is for

547
00:24:53.759 --> 00:24:56.839
<v Speaker 4>a different application that we support kind of same functionality,

548
00:24:56.880 --> 00:25:01.480
<v Speaker 4>but for a different on prem solution basically uh bus srouting.

549
00:25:02.480 --> 00:25:06.319
<v Speaker 4>That one went from examer Informs to Maui. There was

550
00:25:06.359 --> 00:25:08.599
<v Speaker 4>no blaze or anything we write. That one went through

551
00:25:08.640 --> 00:25:11.680
<v Speaker 4>what Microsoft wants you to do with progressing straight over

552
00:25:11.720 --> 00:25:15.039
<v Speaker 4>to Maui and it because of how that app operated.

553
00:25:15.079 --> 00:25:18.759
<v Speaker 4>It didn't have anything overly complex. It wasn't difficult, but

554
00:25:18.799 --> 00:25:21.279
<v Speaker 4>it definitely was not as easy as it is made

555
00:25:21.279 --> 00:25:21.599
<v Speaker 4>out to be.

556
00:25:21.880 --> 00:25:25.720
<v Speaker 2>Well, both products had their challenges, right, Yes, Yeah, and

557
00:25:26.200 --> 00:25:28.960
<v Speaker 2>I would argue if you still had a Zamora Informs

558
00:25:28.960 --> 00:25:32.039
<v Speaker 2>app today moving to Maui on done at nine, he's

559
00:25:32.039 --> 00:25:34.640
<v Speaker 2>a heck how a lot less painful? Totally agree. Yeah,

560
00:25:34.720 --> 00:25:38.279
<v Speaker 2>definitely if you jump when they wanted you to jump,

561
00:25:38.400 --> 00:25:41.839
<v Speaker 2>you jumped into a pifle of glass like.

562
00:25:41.960 --> 00:25:45.440
<v Speaker 4>Correct, correct? Yeah, we only did that migration from Forms

563
00:25:45.440 --> 00:25:47.960
<v Speaker 4>to Maui within the past six months, right, so when

564
00:25:47.960 --> 00:25:50.920
<v Speaker 4>all that stuff got worked out and learning curves and

565
00:25:50.960 --> 00:25:51.279
<v Speaker 4>all that.

566
00:25:51.400 --> 00:25:55.039
<v Speaker 2>Yeah, if you can wait, wait you it will. Yeah,

567
00:25:55.160 --> 00:25:57.279
<v Speaker 2>it's a benefit without it's like, if your app's not

568
00:25:57.319 --> 00:26:01.319
<v Speaker 2>currently on fire and people aren't going to kill you,

569
00:26:00.039 --> 00:26:03.240
<v Speaker 2>you know, stay with what you got and let the

570
00:26:03.240 --> 00:26:04.960
<v Speaker 2>bugs be worked up by somebody else.

571
00:26:05.200 --> 00:26:05.440
<v Speaker 4>Yep.

572
00:26:05.599 --> 00:26:08.680
<v Speaker 1>Well, and also you know, you don't really he's not

573
00:26:08.839 --> 00:26:13.680
<v Speaker 1>really going from Maui to Blazer. He's using Blazer inside

574
00:26:13.920 --> 00:26:19.119
<v Speaker 1>a Maui app, So so it is Maui Blazer essentially.

575
00:26:19.920 --> 00:26:23.200
<v Speaker 1>But I was thinking of something like Avalonia. I mean,

576
00:26:23.240 --> 00:26:23.880
<v Speaker 1>do you look at that?

577
00:26:24.319 --> 00:26:27.720
<v Speaker 4>Oh yeah, yeah, and that we did look at too,

578
00:26:27.799 --> 00:26:30.000
<v Speaker 4>So I think some confusion has a couple of libraries

579
00:26:30.000 --> 00:26:33.359
<v Speaker 4>that we were looking at, and you know all those

580
00:26:35.400 --> 00:26:39.119
<v Speaker 4>cross platform cross uh you know, whether it's Web or

581
00:26:39.480 --> 00:26:42.519
<v Speaker 4>Maui UI frameworks, and again, what it what it came

582
00:26:42.559 --> 00:26:44.960
<v Speaker 4>down to us was we wanted to stick with the

583
00:26:45.119 --> 00:26:48.079
<v Speaker 4>UI components that here at Tyler Tech someone has built

584
00:26:48.079 --> 00:26:50.680
<v Speaker 4>and they were all web components. So we were kind of, yeah,

585
00:26:50.759 --> 00:26:52.640
<v Speaker 4>do we want to take that and replicate it somewhere

586
00:26:52.640 --> 00:26:54.640
<v Speaker 4>else or do we just want to keep using web components.

587
00:26:54.880 --> 00:26:57.519
<v Speaker 1>And it totally makes sense, as you said, because you know,

588
00:26:57.599 --> 00:27:00.960
<v Speaker 1>the cross platform part is already done. Yeah, yeah, you're

589
00:27:01.000 --> 00:27:02.960
<v Speaker 1>not worrying about this platform that.

590
00:27:03.079 --> 00:27:05.640
<v Speaker 2>Plus you've got six hundred thousand users that are used

591
00:27:05.680 --> 00:27:08.960
<v Speaker 2>to a look and feel correct. Don't mess with that.

592
00:27:08.359 --> 00:27:11.319
<v Speaker 2>That's just cost for you. The more you mess with that,

593
00:27:11.319 --> 00:27:12.359
<v Speaker 2>the more trouble you're going to get.

594
00:27:12.519 --> 00:27:16.079
<v Speaker 4>Yeah, and we want to be good partners at Tyler. Right.

595
00:27:16.119 --> 00:27:19.039
<v Speaker 4>So Tyler does everything public sector right, whether it be

596
00:27:19.079 --> 00:27:23.799
<v Speaker 4>courts injustice or public safety or healthcare to student transportation.

597
00:27:24.279 --> 00:27:27.039
<v Speaker 4>You know, there's bunches of apps that Tyler reproduces, and

598
00:27:27.039 --> 00:27:29.279
<v Speaker 4>we want to make sure that if a parent happens

599
00:27:29.319 --> 00:27:31.160
<v Speaker 4>to also be in a district where I can pay

600
00:27:31.200 --> 00:27:33.400
<v Speaker 4>my electric bill through Tyler Tech, right, that that look

601
00:27:33.400 --> 00:27:34.319
<v Speaker 4>and feels kind of the same.

602
00:27:34.440 --> 00:27:37.599
<v Speaker 2>Oh interesting, Right, So literally you can have multiple products

603
00:27:37.640 --> 00:27:39.599
<v Speaker 2>in this space and they're like, oh I know this already.

604
00:27:39.720 --> 00:27:40.920
<v Speaker 4>Yep, Yeah, that's cool.

605
00:27:41.200 --> 00:27:41.799
<v Speaker 2>That makes sense.

606
00:27:42.000 --> 00:27:43.720
<v Speaker 1>All right, that sounds like a good place to take

607
00:27:43.720 --> 00:27:46.160
<v Speaker 1>a break. We'll be right back after these very important messages.

608
00:27:48.640 --> 00:27:51.079
<v Speaker 1>Did you know you can lift and shift your dot

609
00:27:51.119 --> 00:27:55.240
<v Speaker 1>net framework apps to virtual machines in the cloud. Use

610
00:27:55.279 --> 00:27:59.599
<v Speaker 1>the elastic beanstalk service to easily migrate to Amazon EC

611
00:27:59.759 --> 00:28:03.680
<v Speaker 1>too with little or no changes. Find out more at

612
00:28:03.720 --> 00:28:13.640
<v Speaker 1>aws dot Amazon dot com slash elastic beanstock and we're back.

613
00:28:13.799 --> 00:28:16.559
<v Speaker 1>It's at Rocks. I'm Carl Franklin, It's Richard Campbell, hey,

614
00:28:16.720 --> 00:28:20.200
<v Speaker 1>and that's Nathan Westfall and we're talking about his application

615
00:28:20.799 --> 00:28:25.279
<v Speaker 1>hosting six hundred and fifty thousand plus users with an

616
00:28:25.440 --> 00:28:30.920
<v Speaker 1>S three bucket and a CDN all in Blazer for

617
00:28:31.319 --> 00:28:35.720
<v Speaker 1>mobile clients and for web and not looking back.

618
00:28:35.839 --> 00:28:38.319
<v Speaker 4>Not at all, not at all, not at all.

619
00:28:38.680 --> 00:28:46.039
<v Speaker 1>So no web forms here, no Windows forms, no WPF,

620
00:28:45.240 --> 00:28:49.960
<v Speaker 1>no native client code for iOS or Andrew, you don't have.

621
00:28:49.960 --> 00:28:50.440
<v Speaker 2>To deal with that.

622
00:28:50.680 --> 00:28:54.960
<v Speaker 4>Yeah, definitely not UI native code. Right. So, I think

623
00:28:55.000 --> 00:28:57.799
<v Speaker 4>the only things that we got stuck with, and I

624
00:28:57.799 --> 00:28:59.720
<v Speaker 4>say stuck with, they were not major to begin with

625
00:28:59.720 --> 00:29:04.559
<v Speaker 4>at all. But in terms of either you know, browser specific,

626
00:29:04.599 --> 00:29:07.519
<v Speaker 4>iOS Android specific, you got push notifications.

627
00:29:08.599 --> 00:29:10.799
<v Speaker 1>Yeah that's a problem, right, always.

628
00:29:10.480 --> 00:29:14.640
<v Speaker 4>Right, push notifications and authentication actually had to have a

629
00:29:14.759 --> 00:29:16.640
<v Speaker 4>nice little hack to get to work in all of

630
00:29:16.640 --> 00:29:20.519
<v Speaker 4>them because we wanted to use what Blazer does for authentication.

631
00:29:21.119 --> 00:29:23.960
<v Speaker 4>But how I log in auto mobile device is not

632
00:29:24.000 --> 00:29:25.319
<v Speaker 4>going to be the same on the web. So how

633
00:29:25.319 --> 00:29:28.000
<v Speaker 4>do I make sure I can still use Access Token Provider?

634
00:29:28.119 --> 00:29:29.759
<v Speaker 4>How do I still use that on MAUI?

635
00:29:29.880 --> 00:29:33.599
<v Speaker 1>So let's talk about push notifications. Yeah, so I'm not

636
00:29:33.720 --> 00:29:37.000
<v Speaker 1>talking about signal ar can send you a message and say, hey,

637
00:29:37.039 --> 00:29:39.680
<v Speaker 1>how you doing. We're talking about when your app is

638
00:29:39.759 --> 00:29:44.119
<v Speaker 1>minimized and you're getting messages in the background and you

639
00:29:44.200 --> 00:29:47.680
<v Speaker 1>want that number with a red circle with that number

640
00:29:47.680 --> 00:29:53.359
<v Speaker 1>to increment that. That is not trivial to do and

641
00:29:53.720 --> 00:29:55.839
<v Speaker 1>an Android. I figured out how to do it by

642
00:29:55.839 --> 00:29:58.319
<v Speaker 1>doing an actual fore ground service that works as a

643
00:29:58.319 --> 00:30:04.240
<v Speaker 1>background service. Yep, but that adds another service, and on

644
00:30:04.319 --> 00:30:07.279
<v Speaker 1>iOS forget about it, like you have to, you know,

645
00:30:07.559 --> 00:30:10.359
<v Speaker 1>draw three courts of blood and sign over your firstborn

646
00:30:10.599 --> 00:30:13.960
<v Speaker 1>and right, and then they don't even have it for

647
00:30:14.319 --> 00:30:16.640
<v Speaker 1>Blazer as far as I'm concerned. They didn't last time

648
00:30:16.680 --> 00:30:18.920
<v Speaker 1>I checked. So how how on earth did you solve

649
00:30:18.960 --> 00:30:19.519
<v Speaker 1>that problem?

650
00:30:19.640 --> 00:30:23.920
<v Speaker 4>Yeah? So we this is I guess saying outside of

651
00:30:23.920 --> 00:30:25.839
<v Speaker 4>the ecosystem. I know we talked about being inside of it,

652
00:30:25.920 --> 00:30:29.400
<v Speaker 4>but we use ad your notification hub for push notifications.

653
00:30:30.519 --> 00:30:33.480
<v Speaker 4>Part of the reason was because the older application Examined

654
00:30:33.559 --> 00:30:37.960
<v Speaker 4>Forms already had it because it was Adure first, and

655
00:30:38.039 --> 00:30:40.039
<v Speaker 4>we wanted to just keep the same system in case

656
00:30:40.079 --> 00:30:42.039
<v Speaker 4>parents had both apps. Right, So it was a decision

657
00:30:42.039 --> 00:30:43.440
<v Speaker 4>we made to just just keep it around.

658
00:30:43.880 --> 00:30:47.200
<v Speaker 1>But how does that notification service interact with your dormant

659
00:30:47.440 --> 00:30:48.119
<v Speaker 1>yes app.

660
00:30:48.240 --> 00:30:51.720
<v Speaker 4>So we had to write code specific for Android and

661
00:30:51.799 --> 00:30:56.519
<v Speaker 4>iOS to tie into both push notifications. So on Android

662
00:30:56.559 --> 00:31:01.920
<v Speaker 4>it's firebased FCM now right, they officially retired GCM unfortunately,

663
00:31:01.960 --> 00:31:06.039
<v Speaker 4>and then iOS is always messing with delegates and all

664
00:31:06.039 --> 00:31:09.039
<v Speaker 4>this fun stuff that if it doesn't work how as

665
00:31:09.039 --> 00:31:10.599
<v Speaker 4>you said, it doesn't work how the docs work, I'm

666
00:31:10.640 --> 00:31:11.880
<v Speaker 4>kind of out of luck because it's not like I'm

667
00:31:11.880 --> 00:31:15.200
<v Speaker 4>getting an help from Apple Lane time soon. So tie

668
00:31:15.279 --> 00:31:18.079
<v Speaker 4>into both and just kind of have the native push

669
00:31:18.119 --> 00:31:21.319
<v Speaker 4>unification system work. And then if they happen to click

670
00:31:21.359 --> 00:31:25.279
<v Speaker 4>the application, you know, we're doing some things with session

671
00:31:25.359 --> 00:31:28.039
<v Speaker 4>state too, kind of if Blazer then wants to detect

672
00:31:28.079 --> 00:31:30.480
<v Speaker 4>that I have a message safe, then I can prompt

673
00:31:30.480 --> 00:31:33.079
<v Speaker 4>that in a totally different way or manage it totally separate.

674
00:31:33.240 --> 00:31:36.319
<v Speaker 2>Yeah. Wow, but now you're using notification AUPs like you

675
00:31:36.440 --> 00:31:40.119
<v Speaker 2>now describing a cloud hybrid app too, because you're also

676
00:31:40.200 --> 00:31:40.799
<v Speaker 2>using is three.

677
00:31:40.960 --> 00:31:43.200
<v Speaker 4>Yes, yeah, a little bit of both on that one.

678
00:31:43.319 --> 00:31:50.240
<v Speaker 2>Not complicated at all their data Imagine you have any problems? No, no,

679
00:31:52.400 --> 00:31:54.880
<v Speaker 2>but no, I see how you got there. Totally makes sense, right,

680
00:31:54.920 --> 00:31:57.640
<v Speaker 2>and there's nothing bad about notification apps they were.

681
00:31:57.839 --> 00:32:01.160
<v Speaker 4>Yeah, I've honestly out of alved the Azure services. I've

682
00:32:01.240 --> 00:32:04.319
<v Speaker 4>used them. We used to do Azure probably at this

683
00:32:04.359 --> 00:32:07.200
<v Speaker 4>point seven years ago or so, right from everything that

684
00:32:07.240 --> 00:32:09.640
<v Speaker 4>they have to offer, and I've never had any complaints

685
00:32:09.640 --> 00:32:13.480
<v Speaker 4>iuthentification of it. It's honestly nice how easy it works

686
00:32:13.480 --> 00:32:16.720
<v Speaker 4>from an API perspective. If I have to generate a notification,

687
00:32:16.799 --> 00:32:18.640
<v Speaker 4>how to send it to them, and then how to

688
00:32:19.359 --> 00:32:21.759
<v Speaker 4>managing devices, which I've had to do before in terms

689
00:32:21.839 --> 00:32:25.240
<v Speaker 4>of my you know, P and S token on Apple

690
00:32:25.440 --> 00:32:27.960
<v Speaker 4>and my fire based token on Android and which messages

691
00:32:28.000 --> 00:32:30.559
<v Speaker 4>can you get and can't you get. I've written that

692
00:32:30.599 --> 00:32:32.640
<v Speaker 4>code before to manage it, and I'd rather never do

693
00:32:32.720 --> 00:32:33.119
<v Speaker 4>it again.

694
00:32:33.480 --> 00:32:40.279
<v Speaker 3>So you also hint did a thing that I've talked

695
00:32:40.319 --> 00:32:43.160
<v Speaker 3>to a bunch of mobile devs about, which is making

696
00:32:43.200 --> 00:32:46.559
<v Speaker 3>sure the Android and iPhone versions are utterly in sync.

697
00:32:46.640 --> 00:32:49.559
<v Speaker 2>Like if you had a parent's one with an iPhone

698
00:32:49.559 --> 00:32:52.599
<v Speaker 2>more than an Android and the app was much different. Yeah,

699
00:32:52.839 --> 00:32:56.599
<v Speaker 2>like that that, I'm surprised how upset people get. Yeah,

700
00:32:56.640 --> 00:32:58.640
<v Speaker 2>why does iPhone have this and I don't have it

701
00:32:58.640 --> 00:32:59.240
<v Speaker 2>on Android?

702
00:32:59.359 --> 00:33:02.839
<v Speaker 4>Yeah, And for us, before Blazer was the web was

703
00:33:03.319 --> 00:33:06.559
<v Speaker 4>incredibly honesting like, I can't emphasize how bad you could

704
00:33:06.759 --> 00:33:09.000
<v Speaker 4>see your live busting on web because it was just

705
00:33:09.200 --> 00:33:11.440
<v Speaker 4>it was never built, that never had priority of what

706
00:33:11.519 --> 00:33:14.200
<v Speaker 4>was there. And now what's nice is because we have

707
00:33:14.279 --> 00:33:17.000
<v Speaker 4>all of our shared code and a shared class library.

708
00:33:17.480 --> 00:33:20.640
<v Speaker 4>If I have to add a new button, I'm putting

709
00:33:20.680 --> 00:33:23.359
<v Speaker 4>it in one spot, I'm quickly testing all three devices

710
00:33:23.359 --> 00:33:27.039
<v Speaker 4>and it's out to production right after that. You know,

711
00:33:27.119 --> 00:33:28.640
<v Speaker 4>it's it's quick.

712
00:33:29.160 --> 00:33:34.880
<v Speaker 2>And what are the three devices? iPhone, Android and browser browser? Okay, yeah, yeah?

713
00:33:35.000 --> 00:33:38.960
<v Speaker 2>Do you do you much phone specific testing? Like do

714
00:33:39.000 --> 00:33:41.319
<v Speaker 2>you care which iPhone or which Android device?

715
00:33:41.839 --> 00:33:47.400
<v Speaker 4>We more sot Android because of the possibilities almost being endless, right.

716
00:33:47.519 --> 00:33:51.000
<v Speaker 2>Yes, we recall it the drawer broken dreams for a reason.

717
00:33:54.119 --> 00:33:57.920
<v Speaker 4>For for iOS, we only care really about the version

718
00:33:57.960 --> 00:34:00.519
<v Speaker 4>of iOS that we support. I don't know if you know,

719
00:34:00.640 --> 00:34:04.279
<v Speaker 4>but iOS had a breaking change between iOS seventeen and

720
00:34:04.319 --> 00:34:09.320
<v Speaker 4>eighteen that impacted Mali Hybrid because of that IP address

721
00:34:09.400 --> 00:34:11.320
<v Speaker 4>zero do zero do zero dot zero bug and they

722
00:34:11.320 --> 00:34:13.679
<v Speaker 4>took that away, but Maui was using that to spin

723
00:34:13.760 --> 00:34:17.360
<v Speaker 4>everything up, and you know that encouraged us to do

724
00:34:17.440 --> 00:34:20.639
<v Speaker 4>more testing around that. But yeah, really, just always changes at.

725
00:34:20.599 --> 00:34:23.559
<v Speaker 2>That point, well, and Apple is so insisted on getting

726
00:34:23.559 --> 00:34:25.519
<v Speaker 2>into the latest version of iOS all the time, which

727
00:34:26.079 --> 00:34:28.440
<v Speaker 2>is I think a little annoying for consumers but pretty

728
00:34:28.440 --> 00:34:29.320
<v Speaker 2>good for devs.

729
00:34:29.639 --> 00:34:34.079
<v Speaker 1>And it's good. It's good for consumers because security, you know,

730
00:34:34.320 --> 00:34:37.880
<v Speaker 1>and fewer problems. Apple is still the most secure mobile

731
00:34:38.239 --> 00:34:40.920
<v Speaker 1>platform there is because they own it top to bottom,

732
00:34:41.000 --> 00:34:41.440
<v Speaker 1>and it's.

733
00:34:41.320 --> 00:34:44.840
<v Speaker 2>Part of that. Part of that is enforcing homogeity. It's

734
00:34:44.880 --> 00:34:48.000
<v Speaker 2>always the latest version. Yeah, yeah, and with you and

735
00:34:48.039 --> 00:34:49.960
<v Speaker 2>it's certainly from a dev perspective if you're willing to

736
00:34:50.039 --> 00:34:52.760
<v Speaker 2>jump through iOS hoops because they are iOS hoops, at

737
00:34:52.880 --> 00:34:54.920
<v Speaker 2>least it's one os you more or less have to

738
00:34:54.960 --> 00:34:58.039
<v Speaker 2>care about, correct. Yeah. But I've definitely talked to folks

739
00:34:58.079 --> 00:35:00.920
<v Speaker 2>who they have to have a Pixel device, they have

740
00:35:01.000 --> 00:35:03.880
<v Speaker 2>to have a Samsung device, yeah, you know, and then

741
00:35:03.920 --> 00:35:07.800
<v Speaker 2>it gets questionable after that, like those are those are

742
00:35:07.840 --> 00:35:09.800
<v Speaker 2>the two? And it's at that point you're like at

743
00:35:10.039 --> 00:35:10.920
<v Speaker 2>seventy percent.

744
00:35:11.559 --> 00:35:13.679
<v Speaker 4>Yeah, and foldables whole other.

745
00:35:14.800 --> 00:35:17.599
<v Speaker 2>Yeah, you do you do foldable testing? Good? Lord? Really,

746
00:35:17.960 --> 00:35:19.840
<v Speaker 2>I just held up a foldable nice.

747
00:35:19.760 --> 00:35:22.039
<v Speaker 4>Yeah, only because our product owner has one, so he'll

748
00:35:22.039 --> 00:35:23.960
<v Speaker 4>tell me immediately if something doesn't work.

749
00:35:23.840 --> 00:35:26.519
<v Speaker 2>Because that's what he's testing on, so he cares about Yeah,

750
00:35:26.559 --> 00:35:29.679
<v Speaker 2>well that's all that changes your media queries completely, right, Yeah,

751
00:35:29.679 --> 00:35:30.760
<v Speaker 2>you have to change the rendering.

752
00:35:31.119 --> 00:35:34.159
<v Speaker 4>Yeah, and some of it's nice in terms of most

753
00:35:34.159 --> 00:35:37.440
<v Speaker 4>of the mobile devices kind of work immediately on tablets

754
00:35:37.440 --> 00:35:40.280
<v Speaker 4>and larger screens because I'm writing the same code for

755
00:35:40.320 --> 00:35:43.039
<v Speaker 4>web anyway. Right, we kind of have that mindset as

756
00:35:43.039 --> 00:35:46.039
<v Speaker 4>a developer from dam one because all of my code

757
00:35:46.039 --> 00:35:47.920
<v Speaker 4>for IYO with Sandre and the browser are coming from

758
00:35:47.920 --> 00:35:51.079
<v Speaker 4>one spot. I'm already thinking about twenty device screen sizes

759
00:35:51.119 --> 00:35:54.239
<v Speaker 4>as I'm going here, right, so you know, making sure

760
00:35:54.280 --> 00:35:57.480
<v Speaker 4>that works, localization works, all this stuff is now up

761
00:35:57.519 --> 00:36:00.679
<v Speaker 4>in the forefront of a developer instead of kind of sure.

762
00:36:00.760 --> 00:36:04.679
<v Speaker 2>And they're absolutely iPad fanatics. Yes, if it's not perfect

763
00:36:04.679 --> 00:36:07.119
<v Speaker 2>on the iPad, they lose their minds.

764
00:36:06.880 --> 00:36:07.960
<v Speaker 4>Yes, yep.

765
00:36:08.320 --> 00:36:12.599
<v Speaker 2>Yeah. So it's just that that issue continues to exist

766
00:36:12.679 --> 00:36:15.599
<v Speaker 2>and it's not simple, like you really do think about

767
00:36:15.599 --> 00:36:18.559
<v Speaker 2>how you make your UI in the different board screen

768
00:36:18.599 --> 00:36:21.280
<v Speaker 2>constrained correct, much less tested.

769
00:36:21.639 --> 00:36:25.360
<v Speaker 4>Yeah. No, we even on some of our differences between

770
00:36:25.440 --> 00:36:27.360
<v Speaker 4>like mobile and web. Right, we might write a component

771
00:36:28.559 --> 00:36:31.000
<v Speaker 4>that renders some UI content, but then we have other

772
00:36:31.039 --> 00:36:33.719
<v Speaker 4>logic that's Hey, if you're in a browser over this size,

773
00:36:34.119 --> 00:36:36.400
<v Speaker 4>I'm prompting it in a dialogue, as opposed to if

774
00:36:36.400 --> 00:36:38.880
<v Speaker 4>it's on iOS, it's just a full screen new page

775
00:36:39.039 --> 00:36:42.880
<v Speaker 4>and blazer for it to work. Right, And yeah, yeah,

776
00:36:43.079 --> 00:36:44.159
<v Speaker 4>gets complicated, But.

777
00:36:44.119 --> 00:36:46.920
<v Speaker 2>It sounds like you have a tooling team because you

778
00:36:46.920 --> 00:36:48.400
<v Speaker 2>guys have multiple products, so it makes sense to have

779
00:36:48.400 --> 00:36:51.440
<v Speaker 2>a tooling team that just worries about Okay, I'm going

780
00:36:51.519 --> 00:36:54.800
<v Speaker 2>to make this new collecting text from the user interface.

781
00:36:55.280 --> 00:36:57.679
<v Speaker 2>Here's how we'll render on an iPhone. Here's how it'll

782
00:36:57.679 --> 00:37:00.159
<v Speaker 2>render on an iPad. Here's how it'll render on on

783
00:37:00.239 --> 00:37:03.000
<v Speaker 2>pixel and so forth, like it's and how render on

784
00:37:03.079 --> 00:37:05.920
<v Speaker 2>web like. You are making different versions and still make

785
00:37:05.960 --> 00:37:07.519
<v Speaker 2>it look close to the same.

786
00:37:07.719 --> 00:37:10.599
<v Speaker 4>Yeah, yeah, a lot of that's still on us in

787
00:37:10.679 --> 00:37:12.079
<v Speaker 4>terms of how we want it to look. But the

788
00:37:12.159 --> 00:37:16.000
<v Speaker 4>components are nice and effective. They all have accessibility in mind, right,

789
00:37:16.039 --> 00:37:19.159
<v Speaker 4>they all have different screen sizes in mind and all

790
00:37:19.199 --> 00:37:21.960
<v Speaker 4>that stuff, So how we use them. It's kind of

791
00:37:22.000 --> 00:37:23.360
<v Speaker 4>hard to mess up, I'll put it that way, right,

792
00:37:23.360 --> 00:37:24.960
<v Speaker 4>we can, but it is harder to mess up.

793
00:37:25.039 --> 00:37:26.840
<v Speaker 1>Yeah, And you can test, right, you can test the

794
00:37:26.960 --> 00:37:29.519
<v Speaker 1>mobile device just by shrinking the browser, right, right, and

795
00:37:29.519 --> 00:37:33.039
<v Speaker 1>it's essentially what you do, you test the reactivity of it. Yep, Richard,

796
00:37:33.039 --> 00:37:34.800
<v Speaker 1>do you remember when we used to do shows on

797
00:37:34.880 --> 00:37:37.519
<v Speaker 1>mobile and the Tablet Show and all that stuff. Yeah,

798
00:37:37.559 --> 00:37:40.159
<v Speaker 1>and we would always say, you know, what is the

799
00:37:40.239 --> 00:37:45.599
<v Speaker 1>trade off between making your UI look like the platform UI,

800
00:37:45.920 --> 00:37:51.119
<v Speaker 1>like iOS Android and looking like your branded thing? And

801
00:37:51.559 --> 00:37:54.719
<v Speaker 1>it seems like people were more concerned back then about

802
00:37:55.320 --> 00:37:57.719
<v Speaker 1>making an iOS app look like an iOS app and

803
00:37:57.760 --> 00:38:00.159
<v Speaker 1>making an Android app look like an Android app. No,

804
00:38:00.239 --> 00:38:03.280
<v Speaker 1>I just don't think that's such an issue, do you.

805
00:38:03.639 --> 00:38:06.039
<v Speaker 2>I don't think I think you're right. I think Jobs

806
00:38:06.159 --> 00:38:08.679
<v Speaker 2>was big on skemorphic design, and he wanted you know,

807
00:38:08.719 --> 00:38:10.440
<v Speaker 2>there was always a threat they wouldn't let it go

808
00:38:10.480 --> 00:38:12.400
<v Speaker 2>through the store if you didn't make it look like

809
00:38:12.440 --> 00:38:15.519
<v Speaker 2>an iPhone app. Yeah, And so there was a time

810
00:38:15.519 --> 00:38:18.119
<v Speaker 2>when that mattered. And then Facebook came along and said nope,

811
00:38:18.239 --> 00:38:22.119
<v Speaker 2>Facebook looks like Facebook. Yeah, and some and then corporate

812
00:38:22.199 --> 00:38:25.039
<v Speaker 2>internal You're like, no, it looks like corporate internal. Yeah.

813
00:38:25.079 --> 00:38:27.440
<v Speaker 2>And I mean, and I do think Tyler falls into

814
00:38:27.440 --> 00:38:30.239
<v Speaker 2>this category. You have a bunch of different apps and

815
00:38:30.599 --> 00:38:33.559
<v Speaker 2>you see an advantage to a common look and feel. Absolutely,

816
00:38:33.599 --> 00:38:35.360
<v Speaker 2>But I'm not going to let you go, Nathan on

817
00:38:35.440 --> 00:38:38.800
<v Speaker 2>the whole accessibility thing. So do you spend some time

818
00:38:38.920 --> 00:38:43.599
<v Speaker 2>on visually impaired or audible player, like how different folks

819
00:38:43.599 --> 00:38:44.440
<v Speaker 2>can use this app?

820
00:38:44.599 --> 00:38:47.440
<v Speaker 4>Yeah, we do. We Again, what's nice is a lot

821
00:38:47.440 --> 00:38:50.320
<v Speaker 4>of the components kind of have support for that already, right,

822
00:38:50.360 --> 00:38:54.440
<v Speaker 4>all the area labels and what's there the other pieces.

823
00:38:54.840 --> 00:38:58.000
<v Speaker 4>Because we're on a whole bunch of buses across the

824
00:38:58.119 --> 00:39:01.280
<v Speaker 4>US of Canada, we see laws coming out all the

825
00:39:01.320 --> 00:39:04.079
<v Speaker 4>time that kind of require this, right Colorado, if you've

826
00:39:04.119 --> 00:39:06.760
<v Speaker 4>worked with something in that state recently, you kind of

827
00:39:06.800 --> 00:39:09.000
<v Speaker 4>know that they have this initiative right now that on

828
00:39:09.159 --> 00:39:12.639
<v Speaker 4>June of this year, people are starting getting fined if

829
00:39:12.679 --> 00:39:15.880
<v Speaker 4>it's not accessibility out of the box. Right, So we

830
00:39:16.000 --> 00:39:18.480
<v Speaker 4>kind of have that in mind, knowing how public facing

831
00:39:18.519 --> 00:39:20.440
<v Speaker 4>it can be and all that sort of stuff.

832
00:39:20.400 --> 00:39:22.760
<v Speaker 2>And often public sector expected to be the forefront of that.

833
00:39:22.840 --> 00:39:25.360
<v Speaker 4>You need to sell it first, yeah, correct, Right, the

834
00:39:25.440 --> 00:39:27.320
<v Speaker 4>law comes from the government, the better the government better

835
00:39:27.320 --> 00:39:28.559
<v Speaker 4>be compliant, right, So.

836
00:39:28.639 --> 00:39:32.519
<v Speaker 2>Totally yeah, So and yeah, when you think about phones, like,

837
00:39:32.559 --> 00:39:33.880
<v Speaker 2>there's a lot of different ways to do that. You

838
00:39:33.920 --> 00:39:36.960
<v Speaker 2>could you could provide this whole interface as audio only,

839
00:39:37.360 --> 00:39:39.599
<v Speaker 2>correct theory if you think it through properly.

840
00:39:40.000 --> 00:39:43.039
<v Speaker 4>Yeah, And we've talked about that before. We're we were

841
00:39:43.039 --> 00:39:45.000
<v Speaker 4>going through the app a couple months ago. We're like, yeah,

842
00:39:45.000 --> 00:39:47.199
<v Speaker 4>you know, we can improve a few areas and really

843
00:39:47.320 --> 00:39:50.079
<v Speaker 4>start and dial in some things in. What gets complicated

844
00:39:50.159 --> 00:39:53.480
<v Speaker 4>is the map, Right, how do I open gl screen

845
00:39:53.599 --> 00:39:57.039
<v Speaker 4>kind of explain what's going on? So we've talked about

846
00:39:57.480 --> 00:39:59.079
<v Speaker 4>how we can kind of accomplish that.

847
00:39:59.280 --> 00:40:01.000
<v Speaker 2>Yeah, I think you would. I mean in the end,

848
00:40:01.079 --> 00:40:04.039
<v Speaker 2>if somebody else was operating that app on behalf of

849
00:40:04.239 --> 00:40:06.519
<v Speaker 2>somebody and describing what was going on, they don't be

850
00:40:06.639 --> 00:40:09.199
<v Speaker 2>that precise. It's like, yeah, the bus is in motion,

851
00:40:09.440 --> 00:40:11.480
<v Speaker 2>it is this far away from the stop is expected

852
00:40:11.480 --> 00:40:15.679
<v Speaker 2>at this time? Correct?

853
00:40:15.719 --> 00:40:18.679
<v Speaker 4>Yeah, And it's it's kind of how we want to

854
00:40:18.679 --> 00:40:20.400
<v Speaker 4>see how far we can go with. It's kind of

855
00:40:20.400 --> 00:40:21.880
<v Speaker 4>what we're starting to play around with, right, because I

856
00:40:22.199 --> 00:40:26.719
<v Speaker 4>might have a kid in sixth grade and a kid

857
00:40:26.760 --> 00:40:28.719
<v Speaker 4>in tenth grade, and one's going to the middle school,

858
00:40:28.719 --> 00:40:30.440
<v Speaker 4>one's going to the high school. How do I explain

859
00:40:30.519 --> 00:40:33.159
<v Speaker 4>now both buses and the relationship to where I am

860
00:40:33.199 --> 00:40:33.920
<v Speaker 4>and where they're going.

861
00:40:35.039 --> 00:40:38.519
<v Speaker 2>Yeah, that's actually I think it'd be a really cool project.

862
00:40:39.880 --> 00:40:41.800
<v Speaker 2>That'd be really fun. It's like, how do I do

863
00:40:41.880 --> 00:40:45.840
<v Speaker 2>this well where people are wowed? Yeah? Yeah, I kind

864
00:40:45.840 --> 00:40:48.880
<v Speaker 2>of like the idea of using that interface because the

865
00:40:49.000 --> 00:40:51.119
<v Speaker 2>parent is driving and does want to know where their

866
00:40:51.159 --> 00:40:53.960
<v Speaker 2>kid is and you don't want to take their eyes right, Like,

867
00:40:54.000 --> 00:40:57.800
<v Speaker 2>can I pump this through bluetooth and tell you safely? Yep? Yeah,

868
00:40:58.079 --> 00:40:59.920
<v Speaker 2>the bus is fine, Yep, it's good.

869
00:41:00.320 --> 00:41:04.360
<v Speaker 4>Yeah. We have some experience in this already because another app,

870
00:41:04.400 --> 00:41:07.800
<v Speaker 4>this one's examined because it's only for Indurid, but we

871
00:41:07.840 --> 00:41:11.079
<v Speaker 4>actually put tablets on school buses, and once the tablet

872
00:41:11.079 --> 00:41:13.920
<v Speaker 4>goes on a school bus, a lot of them, I say,

873
00:41:14.079 --> 00:41:15.679
<v Speaker 4>a fair amount of states have the rule where the

874
00:41:15.719 --> 00:41:18.480
<v Speaker 4>screen just has to be black when the bus is

875
00:41:18.480 --> 00:41:22.039
<v Speaker 4>in motion, So we are almost audio only from this

876
00:41:22.079 --> 00:41:24.280
<v Speaker 4>point on right, how far away am I from my stop?

877
00:41:24.320 --> 00:41:26.800
<v Speaker 4>Where am I taking my directions? So we basically a

878
00:41:26.840 --> 00:41:28.760
<v Speaker 4>lot of our testing is done with just the screen

879
00:41:28.800 --> 00:41:31.920
<v Speaker 4>off and how well can you understand what's going on

880
00:41:32.000 --> 00:41:33.519
<v Speaker 4>with it being completely blocked out?

881
00:41:33.519 --> 00:41:34.119
<v Speaker 1>That's really cool?

882
00:41:34.199 --> 00:41:37.079
<v Speaker 2>Yeah, and have some great user acceptions testing to just

883
00:41:37.199 --> 00:41:41.679
<v Speaker 2>watch what does a driver need in motion from my app?

884
00:41:42.199 --> 00:41:43.719
<v Speaker 2>What will make them the most benefit?

885
00:41:44.239 --> 00:41:46.639
<v Speaker 1>Did you actually go around with drivers, not you personally,

886
00:41:46.639 --> 00:41:48.559
<v Speaker 1>but somebody in the company go around with drivers and

887
00:41:48.599 --> 00:41:49.480
<v Speaker 1>get their feedback.

888
00:41:49.880 --> 00:41:51.880
<v Speaker 4>I actually did, and there's some people in the DEB

889
00:41:51.920 --> 00:41:54.159
<v Speaker 4>team that did so. I before I was a manager.

890
00:41:54.199 --> 00:41:56.559
<v Speaker 4>I was actually one of the lead devs on that project,

891
00:41:56.599 --> 00:42:00.440
<v Speaker 4>and I went across the US riding buses with you know,

892
00:42:00.480 --> 00:42:04.039
<v Speaker 4>all sorts of kids on different districts, and you know,

893
00:42:04.239 --> 00:42:07.199
<v Speaker 4>got to see it firsthand and how it can both impact.

894
00:42:07.239 --> 00:42:10.000
<v Speaker 4>But how my mind is, I don't know. I think

895
00:42:10.000 --> 00:42:11.519
<v Speaker 4>did the right thing putting a developer on a bus,

896
00:42:11.559 --> 00:42:12.840
<v Speaker 4>because now all of a sudden, I think of twenty

897
00:42:12.840 --> 00:42:15.360
<v Speaker 4>more problems I have to fix, seeing like what can happen.

898
00:42:15.440 --> 00:42:18.079
<v Speaker 2>Right, I've always been a big fan of this putting

899
00:42:18.320 --> 00:42:22.440
<v Speaker 2>putting the developer into the position of the user. Yeah,

900
00:42:22.480 --> 00:42:25.559
<v Speaker 2>because they do come away with exactly that. Oh I've

901
00:42:25.599 --> 00:42:28.000
<v Speaker 2>seen how they actually use this, and we've been thinking

902
00:42:28.000 --> 00:42:29.159
<v Speaker 2>about this entirely wrong.

903
00:42:29.320 --> 00:42:30.039
<v Speaker 4>Yep, yep.

904
00:42:30.239 --> 00:42:33.119
<v Speaker 2>It's powerful and it also connects up like we can

905
00:42:33.119 --> 00:42:36.440
<v Speaker 2>get really abstracted from our software. Yes, like when you

906
00:42:36.480 --> 00:42:39.199
<v Speaker 2>see it in the field helping people, it's pretty powerful.

907
00:42:39.440 --> 00:42:41.519
<v Speaker 4>Yeah. No, it's great to see the kind of the

908
00:42:41.559 --> 00:42:44.599
<v Speaker 4>impact you can make, right, I mean I did not realize.

909
00:42:44.639 --> 00:42:47.360
<v Speaker 4>I you tell people, before I worked at Tyler, I

910
00:42:47.400 --> 00:42:51.119
<v Speaker 4>did not think this much about school buses. I started

911
00:42:51.159 --> 00:42:53.199
<v Speaker 4>working at Tyler when I was when I was twenty,

912
00:42:53.280 --> 00:42:54.679
<v Speaker 4>so I was only in a school bus two years

913
00:42:54.719 --> 00:42:56.199
<v Speaker 4>before this, and I still did not think of a

914
00:42:56.199 --> 00:42:57.320
<v Speaker 4>school bus as much as I do.

915
00:42:57.480 --> 00:43:01.039
<v Speaker 2>That you were more school bus savvy than most. Yeah, right,

916
00:43:02.119 --> 00:43:05.159
<v Speaker 2>that's really funny. That's cool. Yeah, it's one of those truths.

917
00:43:05.159 --> 00:43:07.320
<v Speaker 2>Like the great thing is when we do this kind

918
00:43:07.320 --> 00:43:11.880
<v Speaker 2>of tech, right, it's it's almost invisible. Yeah. Yeah, you

919
00:43:11.880 --> 00:43:13.800
<v Speaker 2>know the fact that they know you have to sort

920
00:43:13.800 --> 00:43:16.000
<v Speaker 2>of have a moment ago. Wow, I whipped out my

921
00:43:16.119 --> 00:43:18.000
<v Speaker 2>phone and it told me where my kid was. Yes,

922
00:43:18.119 --> 00:43:21.000
<v Speaker 2>you know, it's seconds, including dealing with all you know,

923
00:43:21.079 --> 00:43:23.119
<v Speaker 2>it's a it's a heavy snow day, but no, the

924
00:43:23.159 --> 00:43:26.159
<v Speaker 2>bus is in motion and fine, yep, that's what you

925
00:43:26.199 --> 00:43:28.960
<v Speaker 2>wanted to know, right, And that's really thinking about all

926
00:43:28.960 --> 00:43:30.719
<v Speaker 2>the pieces that had to work together to make to

927
00:43:30.840 --> 00:43:34.360
<v Speaker 2>give you a good answer. It just was impossible that going.

928
00:43:34.199 --> 00:43:37.760
<v Speaker 1>Back to the notifications thing, if what kind of notifications

929
00:43:37.800 --> 00:43:40.000
<v Speaker 1>do you have? Obviously, like if the bus breaks down,

930
00:43:40.199 --> 00:43:42.639
<v Speaker 1>side of the road, accident, whatever.

931
00:43:42.920 --> 00:43:45.559
<v Speaker 4>Yeah, so we support a whole bunch. So there's a

932
00:43:46.880 --> 00:43:50.000
<v Speaker 4>couple of them are actually integrated directly with the tablet, which,

933
00:43:50.039 --> 00:43:53.079
<v Speaker 4>again talking about saving computing resources, it's the tablet on

934
00:43:53.159 --> 00:43:56.320
<v Speaker 4>the bus with the district's local map and where the

935
00:43:56.360 --> 00:43:59.320
<v Speaker 4>bus currently is, where they're going next. Is the one

936
00:43:59.360 --> 00:44:02.280
<v Speaker 4>doing all those ETA calculations. Right, here's the ten parents.

937
00:44:02.320 --> 00:44:04.119
<v Speaker 4>I need to notify that I'm about to be at

938
00:44:04.119 --> 00:44:06.000
<v Speaker 4>their stop, because I, as a driver, said it's my

939
00:44:06.079 --> 00:44:08.119
<v Speaker 4>next one, and I got three more turns to make.

940
00:44:08.840 --> 00:44:11.199
<v Speaker 4>So that's awesome, right, the tablets doing all the work

941
00:44:11.320 --> 00:44:12.599
<v Speaker 4>for the mobile device.

942
00:44:12.760 --> 00:44:16.800
<v Speaker 2>Yeah, the nice little localized service there, it's the best

943
00:44:16.800 --> 00:44:19.920
<v Speaker 2>position to know. The workload's not more than a tablet

944
00:44:19.960 --> 00:44:20.360
<v Speaker 2>can handle.

945
00:44:20.400 --> 00:44:23.280
<v Speaker 1>It's well, I imagineflove bus breaks down. There's could be a

946
00:44:23.519 --> 00:44:25.679
<v Speaker 1>there could be a marriad of reasons that you won't know.

947
00:44:26.239 --> 00:44:29.800
<v Speaker 1>So the driver can type into the tablet. I'm sure

948
00:44:30.599 --> 00:44:34.920
<v Speaker 1>ran out of gas in a tree, dog, you know,

949
00:44:35.000 --> 00:44:35.960
<v Speaker 1>hit a deer or whatever.

950
00:44:36.119 --> 00:44:36.719
<v Speaker 2>Yeah.

951
00:44:36.840 --> 00:44:39.400
<v Speaker 4>Yeah, now they can let dispatch. No dispatch can let

952
00:44:39.920 --> 00:44:41.960
<v Speaker 4>x number of parents know whether they based off the

953
00:44:41.960 --> 00:44:44.840
<v Speaker 4>bus or even you know, we track how far along

954
00:44:44.880 --> 00:44:46.280
<v Speaker 4>the buses and the route, so I only need to

955
00:44:46.320 --> 00:44:49.199
<v Speaker 4>notify parents after said stuff. Right, I've made it halfway

956
00:44:49.199 --> 00:44:51.639
<v Speaker 4>through and now I can tell the other half. We're

957
00:44:51.639 --> 00:44:54.199
<v Speaker 4>working on next, and I'm interested to see how we

958
00:44:54.199 --> 00:44:56.679
<v Speaker 4>can do this with Maui. But we're working on doing

959
00:44:56.679 --> 00:44:58.800
<v Speaker 4>those live activities. Right. So if you've ever done an

960
00:44:58.880 --> 00:45:01.000
<v Speaker 4>uber and you can kind of see live update, it's

961
00:45:01.000 --> 00:45:03.119
<v Speaker 4>not quite a push notification, right, it's one of those

962
00:45:03.159 --> 00:45:05.639
<v Speaker 4>live tracker ones. We're trying to play around with that

963
00:45:05.719 --> 00:45:08.320
<v Speaker 4>to see how far we can take it. Where if

964
00:45:08.360 --> 00:45:10.159
<v Speaker 4>you don't even have to open the app and now

965
00:45:10.159 --> 00:45:13.280
<v Speaker 4>you're fully functioning off push notifications, that's kind of awesome, right,

966
00:45:13.360 --> 00:45:16.039
<v Speaker 4>I kind of have less resources on my side and

967
00:45:16.039 --> 00:45:18.760
<v Speaker 4>you're getting this up to date information without even opening

968
00:45:18.760 --> 00:45:19.119
<v Speaker 4>the app.

969
00:45:19.440 --> 00:45:19.639
<v Speaker 2>Right.

970
00:45:20.079 --> 00:45:24.119
<v Speaker 1>You takes coordinates and stream them to a service somewhere

971
00:45:24.159 --> 00:45:26.199
<v Speaker 1>and pick them up on the client, yeah.

972
00:45:26.039 --> 00:45:27.400
<v Speaker 2>Yep, just to be able to say, tell me when

973
00:45:27.400 --> 00:45:30.079
<v Speaker 2>they're ten minutes out, yep, I can get there on time.

974
00:45:30.199 --> 00:45:33.199
<v Speaker 2>That's clever. And again that would actually save resources and

975
00:45:33.280 --> 00:45:35.199
<v Speaker 2>not leading on the app all the time. You're wasting

976
00:45:35.199 --> 00:45:36.119
<v Speaker 2>anybody's time that way.

977
00:45:36.159 --> 00:45:38.280
<v Speaker 4>Correct. If I can get everything from that live activity,

978
00:45:38.280 --> 00:45:40.960
<v Speaker 4>it's all technically feeding from that tablet device and then

979
00:45:41.480 --> 00:45:43.400
<v Speaker 4>they never open the app. I mean, I'm like, we're

980
00:45:43.440 --> 00:45:45.840
<v Speaker 4>not checking anything, right, it's all coming directly from the

981
00:45:45.840 --> 00:45:46.559
<v Speaker 4>bus YEP.

982
00:45:47.000 --> 00:45:49.039
<v Speaker 2>All right, what have we talked about on this app?

983
00:45:49.400 --> 00:45:52.280
<v Speaker 2>What is your testing strategy? Like? What tools are you

984
00:45:52.320 --> 00:45:53.800
<v Speaker 2>using when you when you do a bill?

985
00:45:54.000 --> 00:45:57.920
<v Speaker 4>Yeah? Good question. So we do fare money unit testing.

986
00:45:58.719 --> 00:46:02.280
<v Speaker 4>Our API is also in dot net, So that's all

987
00:46:02.400 --> 00:46:06.039
<v Speaker 4>unit tested with X unit because all of our UI

988
00:46:06.159 --> 00:46:09.199
<v Speaker 4>could have shared. We're using b unit to test as

989
00:46:09.280 --> 00:46:11.880
<v Speaker 4>much as we can, right, So as much as I

990
00:46:11.920 --> 00:46:15.559
<v Speaker 4>can test in terms of rendering or business logic I

991
00:46:15.639 --> 00:46:19.559
<v Speaker 4>might have on the client side, testing that kind of

992
00:46:19.559 --> 00:46:22.760
<v Speaker 4>like I would an API, right, And then we also

993
00:46:22.840 --> 00:46:25.679
<v Speaker 4>use browser stack to kind of run into end tests

994
00:46:25.800 --> 00:46:29.559
<v Speaker 4>on here, right, So launching a couple of devices, making

995
00:46:29.559 --> 00:46:32.360
<v Speaker 4>sure they can do X number of user functions? Right?

996
00:46:32.360 --> 00:46:34.280
<v Speaker 4>Can I add my student? Can I load the bus?

997
00:46:34.320 --> 00:46:36.400
<v Speaker 4>Can I create a new account? All that sort of

998
00:46:36.440 --> 00:46:38.760
<v Speaker 4>stuff on number of devices and let us know. So

999
00:46:39.320 --> 00:46:41.760
<v Speaker 4>we don't have obviously coverage everywhere. I don't think anyone

1000
00:46:41.760 --> 00:46:44.440
<v Speaker 4>ever does anymore. Just development moves so quick it's hard.

1001
00:46:44.519 --> 00:46:48.039
<v Speaker 4>But those unit tests, especially the unit knowing that I

1002
00:46:48.079 --> 00:46:50.840
<v Speaker 4>can kind of have the same rendering and the same

1003
00:46:50.960 --> 00:46:54.639
<v Speaker 4>functionality really quickly. Is good to see.

1004
00:46:55.360 --> 00:46:57.679
<v Speaker 2>Absolutely, it's great. Anything you don't mean the same mistake

1005
00:46:57.719 --> 00:47:00.920
<v Speaker 2>again and again make new mistakes correct. It's enough testing

1006
00:47:00.960 --> 00:47:03.000
<v Speaker 2>in place to capture the last mistake so it doesn't

1007
00:47:03.000 --> 00:47:03.519
<v Speaker 2>happen again.

1008
00:47:03.679 --> 00:47:05.599
<v Speaker 4>Correct. Yeah, we tried to raise many tests upfront, but

1009
00:47:05.639 --> 00:47:07.920
<v Speaker 4>we have a policy here where if you get a

1010
00:47:07.960 --> 00:47:10.320
<v Speaker 4>bug or something client reported, it has to get fixed

1011
00:47:10.320 --> 00:47:12.639
<v Speaker 4>with the unit test. Right, It's always that regression case.

1012
00:47:12.760 --> 00:47:15.320
<v Speaker 2>Yeah, first make a test that fails, then fix it

1013
00:47:15.360 --> 00:47:18.559
<v Speaker 2>and the test doesn't fail. Now it's actually fixed exactly.

1014
00:47:18.800 --> 00:47:22.119
<v Speaker 1>Yeah, we love the unit, love the gal Yep, just

1015
00:47:22.239 --> 00:47:22.880
<v Speaker 1>good stuff.

1016
00:47:23.519 --> 00:47:24.639
<v Speaker 4>It's a great product. Yeah.

1017
00:47:24.679 --> 00:47:28.320
<v Speaker 2>Well, and also I try I appreciate you not fixating

1018
00:47:28.320 --> 00:47:30.719
<v Speaker 2>on test coverage. Is that it is its own kind

1019
00:47:30.719 --> 00:47:31.119
<v Speaker 2>of crazy.

1020
00:47:31.199 --> 00:47:33.039
<v Speaker 4>Yeah. If you were trying to shoot fround percent test

1021
00:47:33.039 --> 00:47:35.440
<v Speaker 4>coverage and it's kind of you're never going to get

1022
00:47:35.440 --> 00:47:39.280
<v Speaker 4>it right. Yeah. So the nice thing that developers can

1023
00:47:39.400 --> 00:47:41.920
<v Speaker 4>understand is we give them all the tools and they're

1024
00:47:41.920 --> 00:47:43.800
<v Speaker 4>able to do it upfront, because sometimes it is faster.

1025
00:47:43.840 --> 00:47:45.679
<v Speaker 4>If I'm building an API service and I don't want

1026
00:47:45.719 --> 00:47:48.360
<v Speaker 4>to keep trying to mock all this data from the tablet. Yes,

1027
00:47:48.360 --> 00:47:49.840
<v Speaker 4>I'm going to write a unit test because I can

1028
00:47:49.880 --> 00:47:53.199
<v Speaker 4>grab something that's usable and keep integrating over it. And

1029
00:47:53.239 --> 00:47:56.280
<v Speaker 4>then the simple requirement of just if you're fixing a bug,

1030
00:47:56.320 --> 00:47:58.000
<v Speaker 4>you have to write a test to something that people

1031
00:47:58.039 --> 00:47:58.840
<v Speaker 4>can kind of swallow.

1032
00:47:58.920 --> 00:48:01.519
<v Speaker 2>And those auld end up being the best tests anyway. Yeah,

1033
00:48:01.800 --> 00:48:04.079
<v Speaker 2>they were ones with a bug that made it to

1034
00:48:04.119 --> 00:48:06.639
<v Speaker 2>the field and you wrote and the testing for it

1035
00:48:06.679 --> 00:48:08.800
<v Speaker 2>is more complicated than you think. You would never write

1036
00:48:08.840 --> 00:48:11.639
<v Speaker 2>that test out of your head just considering it. So

1037
00:48:11.719 --> 00:48:14.159
<v Speaker 2>you write this better test and then you know, go

1038
00:48:14.239 --> 00:48:16.000
<v Speaker 2>through that process and fix it and maybe it never

1039
00:48:16.079 --> 00:48:17.920
<v Speaker 2>ever hits it again, but at least you won't have

1040
00:48:17.920 --> 00:48:18.280
<v Speaker 2>that problem.

1041
00:48:18.360 --> 00:48:21.119
<v Speaker 4>You do mocking, We do, yes, well, we do mocking

1042
00:48:22.199 --> 00:48:25.159
<v Speaker 4>because a lot of this data comes from our main application,

1043
00:48:25.239 --> 00:48:27.760
<v Speaker 4>student transportation, right, and I don't want to have that

1044
00:48:27.840 --> 00:48:29.320
<v Speaker 4>running for this, so we mock a lot of the

1045
00:48:29.400 --> 00:48:31.159
<v Speaker 4>database and kind of just core data.

1046
00:48:31.320 --> 00:48:31.480
<v Speaker 2>Right.

1047
00:48:31.559 --> 00:48:33.960
<v Speaker 4>So the way this app works is a lot of

1048
00:48:33.960 --> 00:48:37.039
<v Speaker 4>it's read only anyway, parents not really obviously updating their

1049
00:48:37.079 --> 00:48:39.079
<v Speaker 4>location for the bus and all that. So we kind

1050
00:48:39.079 --> 00:48:41.000
<v Speaker 4>of can get away with a little more mocking than

1051
00:48:41.000 --> 00:48:41.639
<v Speaker 4>you might be able to.

1052
00:48:41.719 --> 00:48:44.159
<v Speaker 1>So you have like bogus services that run and send

1053
00:48:44.440 --> 00:48:45.920
<v Speaker 1>mock data that kind of thing.

1054
00:48:46.000 --> 00:48:48.559
<v Speaker 4>Yeah, yeah, bogus services we use. I forget that. I

1055
00:48:48.599 --> 00:48:51.119
<v Speaker 4>think it's called test containers. So even some of our

1056
00:48:51.119 --> 00:48:55.079
<v Speaker 4>implementations with redtis and how we you know, not kill

1057
00:48:55.079 --> 00:48:58.239
<v Speaker 4>our services by having one hundred thousand parents watch buses? Right,

1058
00:48:58.280 --> 00:48:59.800
<v Speaker 4>how do we kind of scale that efficiently? We can

1059
00:48:59.840 --> 00:49:02.800
<v Speaker 4>kind to do that cool mocking it, Yeah.

1060
00:49:02.880 --> 00:49:04.599
<v Speaker 2>And a lot of it, I think a lot of

1061
00:49:04.719 --> 00:49:06.719
<v Speaker 2>Just because you've got a dozen parents want one bus

1062
00:49:06.719 --> 00:49:10.679
<v Speaker 2>doesn't meaning you can catch that once. It's also correct,

1063
00:49:11.000 --> 00:49:11.559
<v Speaker 2>very granular.

1064
00:49:11.719 --> 00:49:15.000
<v Speaker 1>Yea, sounds like a fantastic, very successful product.

1065
00:49:15.320 --> 00:49:17.199
<v Speaker 4>I appreciate it's It's been a fun one to work on.

1066
00:49:17.280 --> 00:49:22.440
<v Speaker 4>I I selfishly like, uh like being involved in this project.

1067
00:49:22.440 --> 00:49:24.719
<v Speaker 4>It was a really fun one for me to work

1068
00:49:24.760 --> 00:49:26.719
<v Speaker 4>on the team, to work on you know, kind of

1069
00:49:26.719 --> 00:49:28.679
<v Speaker 4>even development kind of picking this up from what we

1070
00:49:28.760 --> 00:49:30.880
<v Speaker 4>do day on to work on this. Everyone's kind of

1071
00:49:32.039 --> 00:49:34.280
<v Speaker 4>enjoyed the dev life cycle more than anything else. Right,

1072
00:49:34.280 --> 00:49:36.599
<v Speaker 4>It's kind of easy to get going. We had someone

1073
00:49:36.679 --> 00:49:39.599
<v Speaker 4>start a month ago and they were making fixes in

1074
00:49:39.599 --> 00:49:41.400
<v Speaker 4>the app a couple of days later. Right, it was

1075
00:49:41.480 --> 00:49:42.599
<v Speaker 4>just easy to pick up.

1076
00:49:43.119 --> 00:49:46.440
<v Speaker 2>That's a great metric. How many days to productivity for

1077
00:49:46.559 --> 00:49:48.719
<v Speaker 2>a new worker. Yeah, great metric.

1078
00:49:48.960 --> 00:49:51.639
<v Speaker 1>Well, Nathan, what's next for you? What's in your inbox?

1079
00:49:51.840 --> 00:49:56.840
<v Speaker 4>More Blazer? So this has been this has been a

1080
00:49:56.840 --> 00:49:59.719
<v Speaker 4>little test for us, and it's been successful enough where

1081
00:49:59.760 --> 00:50:01.880
<v Speaker 4>we've got a few more around the corner that we're

1082
00:50:02.320 --> 00:50:05.280
<v Speaker 4>working on. And I hope that, you know, dot net

1083
00:50:05.360 --> 00:50:08.360
<v Speaker 4>kind of sees the benefit of Blazer as we get

1084
00:50:08.480 --> 00:50:10.519
<v Speaker 4>more and more to this space and keeps dumping time

1085
00:50:10.559 --> 00:50:14.159
<v Speaker 4>and energy into it, so hopefully I'll keep using as

1086
00:50:14.159 --> 00:50:15.840
<v Speaker 4>long as I keep working here.

1087
00:50:15.920 --> 00:50:16.800
<v Speaker 2>So that's great.

1088
00:50:16.920 --> 00:50:20.440
<v Speaker 1>Well, thanks for sharing the story with us, and congratulations.

1089
00:50:20.559 --> 00:50:22.920
<v Speaker 4>Yeah, thanks for having me. It was fun being able

1090
00:50:22.920 --> 00:50:24.880
<v Speaker 4>to talk to you guys and kind of share what

1091
00:50:24.920 --> 00:50:26.440
<v Speaker 4>we did right here. You talk about Blazer all the

1092
00:50:26.480 --> 00:50:28.360
<v Speaker 4>time at dot net rocks, so I wanted to be like, oh,

1093
00:50:28.400 --> 00:50:30.000
<v Speaker 4>I got a story for that.

1094
00:50:30.119 --> 00:50:35.239
<v Speaker 1>He'll love you certainly, all right, Thanks again, and we'll

1095
00:50:35.280 --> 00:50:58.880
<v Speaker 1>see you next time on dot net rocks. Dot net

1096
00:50:59.000 --> 00:51:01.880
<v Speaker 1>Rocks is brought to you by Franklin's Net and produced

1097
00:51:01.920 --> 00:51:05.760
<v Speaker 1>by Pop Studios, a full service audio, video and post

1098
00:51:05.760 --> 00:51:09.920
<v Speaker 1>production facility located physically in New London, Connecticut, and of

1099
00:51:09.960 --> 00:51:14.440
<v Speaker 1>course in the cloud online at pwop dot com.

1100
00:51:14.639 --> 00:51:16.760
<v Speaker 5>Visit our website at d O T N E t

1101
00:51:17.000 --> 00:51:21.039
<v Speaker 5>R O c k S dot com for RSS feeds, downloads,

1102
00:51:21.159 --> 00:51:24.880
<v Speaker 5>mobile apps, comments, and access to the full archives going

1103
00:51:24.880 --> 00:51:28.079
<v Speaker 5>back to show number one, recorded in September two.

1104
00:51:27.960 --> 00:51:28.559
<v Speaker 2>Thousand and two.

1105
00:51:29.199 --> 00:51:31.519
<v Speaker 5>And make sure you check out our sponsors. They keep

1106
00:51:31.599 --> 00:51:34.719
<v Speaker 5>us in business. Now, go write some code, See you

1107
00:51:34.800 --> 00:51:35.239
<v Speaker 5>next time.

1108
00:51:36.159 --> 00:51:37.920
<v Speaker 4>You got jam Vans

1109
00:51:40.039 --> 00:51:44.760
<v Speaker 2>And
