WEBVTT

1
00:00:01.169 --> 00:00:04.790
<v Speaker 1>How'd you like to listen to. NET Rocks with no ads? Easy.

2
00:00:05.370 --> 00:00:08.769
<v Speaker 1>Become a patron. For just $ 5 a month, you get

3
00:00:08.890 --> 00:00:11.720
<v Speaker 1>access to a private RSS feed where all the shows

4
00:00:11.800 --> 00:00:14.900
<v Speaker 1>have no ads. $ 20 a month will get you that

5
00:00:15.119 --> 00:00:18.839
<v Speaker 1>and a special. NET Rocks patron mug. Sign up now

6
00:00:18.899 --> 00:00:37.149
<v Speaker 1>at patreon.dotnetrocks.com. Hey, and welcome back to. NET Rocks. I'm

7
00:00:37.200 --> 00:00:37.909
<v Speaker 1>Carl Franklin.

8
00:00:38.030 --> 00:00:38.789
<v Speaker 2>And I'm Richard Cavill.

9
00:00:38.969 --> 00:00:44.969
<v Speaker 1>We have been doing this stupid show for 2019 episodes.

10
00:00:45.990 --> 00:00:46.990
<v Speaker 1>What is wrong with us?

11
00:00:47.409 --> 00:00:50.600
<v Speaker 2>I don't know. It's a pattern. And this, you know, yeah,

12
00:00:51.060 --> 00:00:53.640
<v Speaker 2>can kind of anticipate that sometime next week might be

13
00:00:53.659 --> 00:00:54.039
<v Speaker 2>another one.

14
00:00:54.340 --> 00:00:55.859
<v Speaker 1>You know, I say it's a stupid show. I got

15
00:00:55.880 --> 00:00:59.979
<v Speaker 1>to admit, it got a lot smarter after episode 100.

16
00:00:59.979 --> 00:01:02.429
<v Speaker 2>I don't know why, but I don't know why. It

17
00:01:02.469 --> 00:01:06.799
<v Speaker 2>was really stupid. Before that. There was a period. I

18
00:01:07.840 --> 00:01:10.930
<v Speaker 2>remember drawing you out a Venn diagram. It's like, here

19
00:01:10.969 --> 00:01:14.709
<v Speaker 2>are the people who like a technical interview. Here are

20
00:01:14.769 --> 00:01:18.269
<v Speaker 2>the people that like music and comedy and so forth.

21
00:01:18.349 --> 00:01:21.829
<v Speaker 2>And the intersection between the two is small. Very small.

22
00:01:22.090 --> 00:01:22.310
<v Speaker 3>Yeah.

23
00:01:22.450 --> 00:01:25.260
<v Speaker 2>Okay. So, we made two shows.

24
00:01:25.859 --> 00:01:30.579
<v Speaker 1>Yeah. Spoiler alert. We are fixing to make a new Mondays.

25
00:01:31.049 --> 00:01:32.930
<v Speaker 2>Oh, don't give it away, man. I just did. It

26
00:01:32.950 --> 00:01:34.730
<v Speaker 2>might even be out by the time this thing publishes,

27
00:01:34.750 --> 00:01:35.290
<v Speaker 2>but who knows?

28
00:01:35.709 --> 00:01:35.989
<v Speaker 4>Maybe.

29
00:01:36.170 --> 00:01:36.409
<v Speaker 2>Maybe.

30
00:01:36.430 --> 00:01:36.709
<v Speaker 4>Who knows?

31
00:01:37.269 --> 00:01:37.489
<v Speaker 2>All right.

32
00:01:37.530 --> 00:01:42.459
<v Speaker 1>Well, this being episode 2019, we are going to talk

33
00:01:42.519 --> 00:01:45.280
<v Speaker 1>about what happened in 2019. And by the way, Jeffrey

34
00:01:45.319 --> 00:01:46.920
<v Speaker 1>Sachs is with us, and I just want to invite

35
00:01:46.959 --> 00:01:49.420
<v Speaker 1>Jeffrey to jump in if he wants to during this whole.

36
00:01:49.519 --> 00:01:52.680
<v Speaker 2>He probably remembers 2019, too. It was not that long ago.

37
00:01:52.879 --> 00:01:54.040
<v Speaker 2>It was not that long ago.

38
00:01:54.359 --> 00:01:56.540
<v Speaker 1>All right. So, believe it or not, I have a

39
00:01:56.620 --> 00:01:59.849
<v Speaker 1>few good news stories. For 2019. Nice.

40
00:01:59.870 --> 00:02:02.780
<v Speaker 2>You get tired of being the harbinger of doom, do you?

41
00:02:03.540 --> 00:02:04.359
<v Speaker 2>Not your style at all.

42
00:02:04.719 --> 00:02:08.039
<v Speaker 1>I am. Yeah, especially last 2018 was just dark.

43
00:02:08.419 --> 00:02:09.939
<v Speaker 2>Just depressing. Yeah.

44
00:02:10.259 --> 00:02:12.740
<v Speaker 1>So I will have some bad news too, but for

45
00:02:12.780 --> 00:02:16.710
<v Speaker 1>some good. The world's first malaria vaccine began rolling out

46
00:02:16.750 --> 00:02:17.610
<v Speaker 1>in Africa.

47
00:02:17.710 --> 00:02:18.069
<v Speaker 2>Exciting.

48
00:02:18.169 --> 00:02:22.810
<v Speaker 1>Malawi, Ghana, and Kenya began vaccinating children with RTSS, the

49
00:02:22.870 --> 00:02:25.780
<v Speaker 1>first malaria vaccine used in a large-scale public health program.

50
00:02:26.729 --> 00:02:30.000
<v Speaker 1>Our friend Bill Gates and Melinda Gates were behind that.

51
00:02:30.680 --> 00:02:32.840
<v Speaker 1>I don't know if they're actually our friends, but we've

52
00:02:33.180 --> 00:02:40.210
<v Speaker 1>seen them. Yeah, I met them. About 360,000 children per

53
00:02:40.250 --> 00:02:43.090
<v Speaker 1>year were expected to receive it during the pilot. So cool.

54
00:02:44.090 --> 00:02:49.180
<v Speaker 1>Ethiopia and Eritrea's peace efforts received the Nobel Peace Prize.

55
00:02:50.060 --> 00:02:50.539
<v Speaker 1>Very good.

56
00:02:50.740 --> 00:02:53.599
<v Speaker 2>Those two have been at loggerheads since their formations.

57
00:02:53.759 --> 00:02:54.020
<v Speaker 3>Yeah.

58
00:02:54.319 --> 00:02:58.500
<v Speaker 1>And see, it is possible. Nearly 100 captive whales and

59
00:02:58.659 --> 00:03:02.740
<v Speaker 1>orcas were returned to the wild. Russian authorities gradually released

60
00:03:02.819 --> 00:03:06.699
<v Speaker 1>animals from the notorious whale jail in the country's far east.

61
00:03:07.240 --> 00:03:10.400
<v Speaker 1>By November, the remaining 50 beluga whales had been freed,

62
00:03:10.460 --> 00:03:11.939
<v Speaker 1>completing the operation.

63
00:03:12.139 --> 00:03:12.319
<v Speaker 2>Wow.

64
00:03:12.490 --> 00:03:18.849
<v Speaker 1>Reminds me of Star Trek IV. Algeria and Argentina eliminated malaria.

65
00:03:19.189 --> 00:03:21.889
<v Speaker 2>Eliminated. How cool is that? Well, there's a bunch of

66
00:03:21.909 --> 00:03:23.449
<v Speaker 2>ways to tackle that, right? Like you can do it

67
00:03:23.490 --> 00:03:29.000
<v Speaker 2>by just controlling mosquitoes. Yeah. But also, you know, handing

68
00:03:29.069 --> 00:03:31.300
<v Speaker 2>out nets. Like there's all kinds of tools to try.

69
00:03:31.539 --> 00:03:36.020
<v Speaker 2>And it all works together. Ethiopia launched a massive tree

70
00:03:36.080 --> 00:03:42.110
<v Speaker 2>planting campaign. Millions participated in the country's green legacy reforestation effort.

71
00:03:42.770 --> 00:03:46.909
<v Speaker 2>The Ethiopian government reported that roughly 350 million seedlings were

72
00:03:46.949 --> 00:03:49.469
<v Speaker 2>planted in a single day in July, part of a

73
00:03:49.509 --> 00:03:54.389
<v Speaker 2>campaign aimed at planting billions of trees. The exact single-day

74
00:03:54.509 --> 00:04:01.069
<v Speaker 2>figure wasn't independently verified, but the enormous public participation was real. So,

75
00:04:01.569 --> 00:04:04.669
<v Speaker 2>now let's get to the depressing stuff. Well, maybe not depressing,

76
00:04:04.710 --> 00:04:08.159
<v Speaker 2>but you know. Donald Trump is impeached. For the first time.

77
00:04:08.379 --> 00:04:13.909
<v Speaker 1>Depressing? It's up to you, I think. Hong Kong pro-democracy protests.

78
00:04:14.009 --> 00:04:14.669
<v Speaker 2>Do not go well.

79
00:04:14.729 --> 00:04:16.089
<v Speaker 1>What began as... What's that?

80
00:04:16.189 --> 00:04:17.009
<v Speaker 2>Do not go well.

81
00:04:17.269 --> 00:04:17.470
<v Speaker 3>No.

82
00:04:17.970 --> 00:04:21.149
<v Speaker 1>What began as opposition to an extradition bill grew into

83
00:04:21.209 --> 00:04:26.889
<v Speaker 1>enormous demonstrations demanding democratic reforms and resistance to Beijing's increasing influence.

84
00:04:27.600 --> 00:04:30.899
<v Speaker 1>The protests continued for months and frequently resulted in violent

85
00:04:30.920 --> 00:04:38.139
<v Speaker 1>clashes with the police. Brexit crisis and Boris Johnson's rise. Richard,

86
00:04:38.379 --> 00:04:41.519
<v Speaker 1>do you remember we were sitting in a restaurant somewhere

87
00:04:41.540 --> 00:04:44.660
<v Speaker 1>and you looked over and you said, hey, that's Boris Johnson.

88
00:04:45.199 --> 00:04:46.819
<v Speaker 1>Do you remember that? It was in London.

89
00:04:46.839 --> 00:04:47.240
<v Speaker 3>Yeah.

90
00:04:47.360 --> 00:04:48.480
<v Speaker 1>We were at NDC London.

91
00:04:48.639 --> 00:04:48.800
<v Speaker 5>Yeah.

92
00:04:48.860 --> 00:04:51.139
<v Speaker 1>And you're like, that's Boris Johnson. And I said.

93
00:04:51.220 --> 00:04:51.959
<v Speaker 2>He was in the restaurant.

94
00:04:52.370 --> 00:04:56.310
<v Speaker 1>I said, who? Because I didn't know.

95
00:04:56.470 --> 00:04:58.629
<v Speaker 2>He was the mayor of London one point. And he

96
00:04:58.649 --> 00:05:00.550
<v Speaker 2>was kind of funny when he was the mayor of London.

97
00:05:00.569 --> 00:05:01.589
<v Speaker 2>The quirky guy.

98
00:05:01.949 --> 00:05:05.009
<v Speaker 1>I think this was before his further rise, so I

99
00:05:05.069 --> 00:05:06.069
<v Speaker 1>really didn't know who he was.

100
00:05:06.110 --> 00:05:07.970
<v Speaker 2>Before he was prime minister. Yeah.

101
00:05:08.069 --> 00:05:11.209
<v Speaker 1>But, you know, we did see him. Theresa May repeatedly

102
00:05:11.250 --> 00:05:13.920
<v Speaker 1>failed to get her Brexit agreement through parliament and resigned.

103
00:05:14.420 --> 00:05:17.720
<v Speaker 1>Boris Johnson became prime minister, negotiated a revised deal, and

104
00:05:17.759 --> 00:05:24.779
<v Speaker 1>then won a huge conservative majority in December. Christchurch mosque massacres.

105
00:05:25.100 --> 00:05:29.819
<v Speaker 1>Bad news. This was in New Zealand, your home country.

106
00:05:30.250 --> 00:05:34.509
<v Speaker 1>A white supremacist attacked two mosques in Christchurch on March 15th,

107
00:05:34.550 --> 00:05:38.009
<v Speaker 1>killing 51 people. But the massacre led New Zealand to

108
00:05:38.100 --> 00:05:39.480
<v Speaker 1>rapidly tighten its gun laws.

109
00:05:39.629 --> 00:05:40.319
<v Speaker 2>Yeah, what a concept.

110
00:05:40.740 --> 00:05:44.860
<v Speaker 1>Notre Dame Cathedral set ablaze on April 15th.

111
00:05:44.879 --> 00:05:45.639
<v Speaker 2>It was an accident.

112
00:05:45.740 --> 00:05:46.019
<v Speaker 4>Yeah.

113
00:05:46.579 --> 00:05:50.420
<v Speaker 1>On April 15th, the world watched as the 850-year-old cathedral

114
00:05:50.480 --> 00:05:54.319
<v Speaker 1>in Paris burned. Its famous spire collapsed and much of

115
00:05:54.339 --> 00:05:57.180
<v Speaker 1>the medieval roof was destroyed, although firefighters managed to save

116
00:05:57.199 --> 00:06:00.990
<v Speaker 1>the main structure. And many important artworks and relics. And

117
00:06:01.410 --> 00:06:03.769
<v Speaker 1>they rebuilt it. It is rebuilt now, yeah. I haven't

118
00:06:03.810 --> 00:06:05.660
<v Speaker 1>seen the new one, but it's on my list. And

119
00:06:05.680 --> 00:06:08.699
<v Speaker 1>you can still see the guy in the tower.

120
00:06:08.480 --> 00:06:09.360
<v Speaker 2>Going, yes, master.

121
00:06:09.379 --> 00:06:19.709
<v Speaker 1>Boeing 737 MAX crashes in worldwide grounding. Was this the

122
00:06:19.750 --> 00:06:21.050
<v Speaker 1>beginning of the end for Boeing?

123
00:06:21.750 --> 00:06:24.110
<v Speaker 2>Oh, no. This was towards the end of the end.

124
00:06:24.129 --> 00:06:25.389
<v Speaker 1>Towards the end of the end.

125
00:06:26.230 --> 00:06:27.670
<v Speaker 2>When you get to the point of actually building an

126
00:06:27.790 --> 00:06:30.509
<v Speaker 2>unsafe aircraft and ignoring the fact that your engineers are

127
00:06:30.529 --> 00:06:32.670
<v Speaker 2>telling you it's unsafe until it starts killing people, you

128
00:06:32.750 --> 00:06:33.649
<v Speaker 2>are very lost.

129
00:06:34.000 --> 00:06:38.420
<v Speaker 1>Yeah. Just a couple more. The U.S.-China trade war escalates.

130
00:06:39.959 --> 00:06:46.420
<v Speaker 1>ISIS leader Abu Bakr al-Baghdadi killed. Mass shootings in El

131
00:06:46.480 --> 00:06:53.100
<v Speaker 1>Paso and Dayton, Ohio. And worldwide protest movements erupt. Beyond

132
00:06:53.139 --> 00:07:02.509
<v Speaker 1>Hong Kong, 2019 saw enormous anti-government demonstrations in Chile, Lebanon, Iraq, Algeria, Sudan, Iran, Bolivia,

133
00:07:02.649 --> 00:07:07.329
<v Speaker 1>and Haiti, among others. So, people not happy.

134
00:07:07.790 --> 00:07:08.730
<v Speaker 3>No. Yeah.

135
00:07:09.069 --> 00:07:11.269
<v Speaker 2>You done? Yeah, I guess I'm done. Let me give

136
00:07:11.290 --> 00:07:12.350
<v Speaker 2>you one more grim one.

137
00:07:12.370 --> 00:07:12.870
<v Speaker 1>Okay.

138
00:07:13.069 --> 00:07:16.139
<v Speaker 2>Right at the end of December 2019, authorities in Wuhan,

139
00:07:16.160 --> 00:07:18.120
<v Speaker 2>China report an unusual pneumonia.

140
00:07:18.670 --> 00:07:19.350
<v Speaker 1>Interesting.

141
00:07:19.379 --> 00:07:19.649
<v Speaker 2>Yeah.

142
00:07:19.790 --> 00:07:21.129
<v Speaker 1>That might have been COVID.

143
00:07:21.350 --> 00:07:21.990
<v Speaker 2>Might have been. Yeah.

144
00:07:22.790 --> 00:07:24.910
<v Speaker 1>Yeah, because that's when.

145
00:07:24.829 --> 00:07:27.389
<v Speaker 2>It really started. All right. You ready for some space stuff? Sure.

146
00:07:27.410 --> 00:07:30.290
<v Speaker 2>Go for it. January, the New Horizons spacecraft, the one

147
00:07:30.310 --> 00:07:34.529
<v Speaker 2>that had gone to Pluto, still going, had its next

148
00:07:34.680 --> 00:07:37.720
<v Speaker 2>close flyby to a Kuiper belt object. Today, we call

149
00:07:37.740 --> 00:07:40.699
<v Speaker 2>that Kuiper belt object Arrokoth, although at the time they

150
00:07:40.720 --> 00:07:44.180
<v Speaker 2>called it Ultima Thule. So that's over a billion kilometers

151
00:07:44.279 --> 00:07:47.579
<v Speaker 2>beyond Pluto. That's how fast that thing was moving. And

152
00:07:47.600 --> 00:07:51.100
<v Speaker 2>was basically a primordial solar system object. It was literally

153
00:07:51.220 --> 00:07:54.339
<v Speaker 2>two blobs of rock and ice stuck together in a

154
00:07:54.399 --> 00:07:58.160
<v Speaker 2>very low gravitational space. But, you know, just an extraordinary

155
00:07:58.240 --> 00:08:01.620
<v Speaker 2>scene back to the early history of the solar system

156
00:08:01.689 --> 00:08:05.329
<v Speaker 2>that way. That's 2019. It's been seven more years. New

157
00:08:05.350 --> 00:08:09.329
<v Speaker 2>Horizons is still whizzing out at very high speed. Also

158
00:08:09.389 --> 00:08:13.209
<v Speaker 2>in January, China's Chang'e 4 lander lands on the far

159
00:08:13.269 --> 00:08:15.930
<v Speaker 2>side of the moon. First time ever in the Von

160
00:08:15.970 --> 00:08:21.810
<v Speaker 2>Karman crater. It has the U-2-2 rover on board. I

161
00:08:21.860 --> 00:08:25.000
<v Speaker 2>think that means little rabbit. It will start its exploration

162
00:08:25.040 --> 00:08:29.000
<v Speaker 2>in the previous year. China had also put up their

163
00:08:29.060 --> 00:08:31.310
<v Speaker 2>relay satellite so they could communicate to the far side

164
00:08:31.350 --> 00:08:34.690
<v Speaker 2>of the moon. In February, back on Mars, the Opportunity

165
00:08:34.750 --> 00:08:38.250
<v Speaker 2>Rover finally ends its mission after 15 years. Designed about

166
00:08:38.269 --> 00:08:40.169
<v Speaker 2>the size of a golf cart, designed for operations for

167
00:08:40.169 --> 00:08:45.460
<v Speaker 2>90 days, ran for 15 years. Now, in 2019, it

168
00:08:45.500 --> 00:08:50.320
<v Speaker 2>was when it declared its mission over. Its last communication

169
00:08:50.340 --> 00:08:54.710
<v Speaker 2>was actually in 2018. There had been a major dust

170
00:08:54.750 --> 00:08:57.889
<v Speaker 2>storm in 2018 on Mars. And that was always the

171
00:08:57.929 --> 00:09:00.590
<v Speaker 2>challenge with these rovers is that there was spirit and opportunities.

172
00:09:00.629 --> 00:09:03.330
<v Speaker 2>They are all solar-based, and so the dust covers up

173
00:09:03.350 --> 00:09:07.389
<v Speaker 2>the solar panels. But the atmosphere of Mars occasionally would

174
00:09:07.450 --> 00:09:11.830
<v Speaker 2>create dust levels that would clean those solar panels off. Classically,

175
00:09:13.549 --> 00:09:16.360
<v Speaker 2>at that time, Opportunity had its own Twitter account, and

176
00:09:16.440 --> 00:09:18.820
<v Speaker 2>so the operators would take the telemetry data and turn

177
00:09:18.840 --> 00:09:22.600
<v Speaker 2>it into text as a tweet from Opportunity. And so

178
00:09:22.620 --> 00:09:26.240
<v Speaker 2>Opportunity's last tweet was, my battery's getting low, and it's

179
00:09:26.279 --> 00:09:28.940
<v Speaker 2>getting dark. Of course, the reality for a device like

180
00:09:28.960 --> 00:09:31.279
<v Speaker 2>that is that if it doesn't have enough power to

181
00:09:31.360 --> 00:09:34.679
<v Speaker 2>keep its electronics warm overnight, those will freeze and it

182
00:09:34.720 --> 00:09:36.960
<v Speaker 2>will not power back up. And that's what happened to Opportunity. Bummer.

183
00:09:37.139 --> 00:09:40.840
<v Speaker 2>In March, the Crew Dragon by SpaceX does its first

184
00:09:41.159 --> 00:09:44.210
<v Speaker 2>flight to the International Space Station. It's completely autonomous. It

185
00:09:44.269 --> 00:09:46.470
<v Speaker 2>actually does its own docking. There's nobody on board. It

186
00:09:46.570 --> 00:09:51.389
<v Speaker 2>works perfectly. It then leaves the station and de-orbits and

187
00:09:51.549 --> 00:09:54.830
<v Speaker 2>lands in the ocean and is recovered successfully. All good news.

188
00:09:55.830 --> 00:09:58.700
<v Speaker 2>Here's the bad news. The following month, that same capsule

189
00:09:58.879 --> 00:10:01.779
<v Speaker 2>is now having an abortion. system test. This was an

190
00:10:01.840 --> 00:10:04.580
<v Speaker 2>unmanned test tethered to the ground firing the Super Dracos

191
00:10:05.100 --> 00:10:08.710
<v Speaker 2>and something goes terribly wrong and the vehicle is destroyed

192
00:10:08.730 --> 00:10:11.870
<v Speaker 2>in the explosion. Bummer. There was a leak in the

193
00:10:11.909 --> 00:10:16.690
<v Speaker 2>helium system for the Super Dracos that created a mass detonation.

194
00:10:17.070 --> 00:10:19.210
<v Speaker 2>NASA actually considered it lucky. It was a huge gift.

195
00:10:19.960 --> 00:10:22.639
<v Speaker 2>You know, you'd hate to have that occur during an

196
00:10:22.759 --> 00:10:27.419
<v Speaker 2>actual flight. It'll delay things for the rest of the year.

197
00:10:27.460 --> 00:10:29.559
<v Speaker 2>They won't flag it until 2020, although that will actually

198
00:10:29.580 --> 00:10:33.470
<v Speaker 2>deliver crew successfully. They'll do a new abort system, use tests,

199
00:10:33.590 --> 00:10:37.769
<v Speaker 2>including an in-flight unmanned abort. Also in April, also on Mars,

200
00:10:37.809 --> 00:10:40.549
<v Speaker 2>the InSight lander will get its first telemetry by measuring

201
00:10:40.590 --> 00:10:43.149
<v Speaker 2>a Mars quake to start mapping the interior of Mars.

202
00:10:43.850 --> 00:10:47.620
<v Speaker 2>So opportunity's done, but the InSight lander's doing its thing. Uh,

203
00:10:47.820 --> 00:10:52.299
<v Speaker 2>also in April, the Israeli nonprofit, uh, company space IL

204
00:10:52.340 --> 00:10:56.279
<v Speaker 2>launched the bear sheet lander, the first commercial privately funded

205
00:10:56.340 --> 00:10:59.440
<v Speaker 2>lunar lander ever flies on a Falcon nine. It originally

206
00:10:59.460 --> 00:11:02.200
<v Speaker 2>been part of the lunar X prize, which started back

207
00:11:02.240 --> 00:11:05.360
<v Speaker 2>in 2017 and 2007 and had ended in 2018. So

208
00:11:05.440 --> 00:11:08.759
<v Speaker 2>it was actually over. It did make it to the moon,

209
00:11:08.820 --> 00:11:12.000
<v Speaker 2>but failed on its landing, which is not that unusual, uh,

210
00:11:12.039 --> 00:11:13.830
<v Speaker 2>because it's really hard to land on the moon. In fact,

211
00:11:14.330 --> 00:11:16.570
<v Speaker 2>Later in the year, in July, India will launch their

212
00:11:16.610 --> 00:11:19.230
<v Speaker 2>Chandran-2 to the moon, and their orbital will work perfectly,

213
00:11:19.250 --> 00:11:22.529
<v Speaker 2>but their Vikram lander will crash on its descent towards

214
00:11:22.570 --> 00:11:28.049
<v Speaker 2>the South Pole. Also in April, the Event Horizon Telescope

215
00:11:28.100 --> 00:11:31.159
<v Speaker 2>publishes the first image of a black hole in the

216
00:11:31.200 --> 00:11:34.960
<v Speaker 2>center of the galaxy, Messier 87. I remember. So this

217
00:11:35.039 --> 00:11:38.500
<v Speaker 2>is using a technology called very long baseline infrometry, where

218
00:11:38.519 --> 00:11:41.879
<v Speaker 2>they actually harness data from a dozen or so different

219
00:11:41.919 --> 00:11:44.750
<v Speaker 2>radio telescopes around the world. to create a sort of

220
00:11:44.909 --> 00:11:48.269
<v Speaker 2>super radio telescope. And then they composite the image into

221
00:11:48.309 --> 00:11:51.080
<v Speaker 2>what they, um, black hole look like. And it turned

222
00:11:51.129 --> 00:11:55.139
<v Speaker 2>out looked exactly like the one in interstellar, uh, which, which, uh,

223
00:11:55.220 --> 00:11:57.179
<v Speaker 2>there's a good reason for that. Uh, Christopher Nolan hired

224
00:11:57.200 --> 00:12:01.009
<v Speaker 2>a Caltech physicist named Kim Thorne, who actually figured out

225
00:12:01.070 --> 00:12:04.259
<v Speaker 2>what it should look like. And, uh, the, EHT actually

226
00:12:04.299 --> 00:12:04.960
<v Speaker 2>validated that.

227
00:12:05.120 --> 00:12:07.659
<v Speaker 1>And it was very low resolution, if I remember correctly.

228
00:12:07.759 --> 00:12:10.259
<v Speaker 2>Of course. But, you know, you're literally talking billions of

229
00:12:10.299 --> 00:12:12.620
<v Speaker 2>light years away. So it's a miracle it works at all.

230
00:12:12.639 --> 00:12:15.840
<v Speaker 2>But it's just, you know, we're getting new superpowers. In May,

231
00:12:15.860 --> 00:12:19.519
<v Speaker 2>SpaceX launches the very first batch of Starlink satellites, an

232
00:12:19.559 --> 00:12:23.850
<v Speaker 2>array of 60. Yeah. In August, SpaceX does their first

233
00:12:23.879 --> 00:12:27.230
<v Speaker 2>flight of Starhopper. This was a funny little looking can

234
00:12:27.269 --> 00:12:29.590
<v Speaker 2>of a thing with some legs on it. Flew just

235
00:12:29.629 --> 00:12:33.309
<v Speaker 2>a short distance and landed again. It's the beginning of Starship,

236
00:12:33.500 --> 00:12:35.580
<v Speaker 2>but the really important thing is this is their new

237
00:12:35.679 --> 00:12:39.679
<v Speaker 2>Raptor engine, a methane liquid oxygen engine. And it's also

238
00:12:39.759 --> 00:12:41.620
<v Speaker 2>full flow combustion. So that was the first time that

239
00:12:41.659 --> 00:12:44.840
<v Speaker 2>a full flow combustion stage combustion engine had ever flown.

240
00:12:45.399 --> 00:12:47.889
<v Speaker 2>And it'll get bigger for that. And one little piece

241
00:12:47.929 --> 00:12:51.809
<v Speaker 2>of additional Boeing news alongside killing people in their dangerous 737,

242
00:12:51.809 --> 00:12:53.049
<v Speaker 2>which admittedly is now fixed.

243
00:12:53.090 --> 00:12:53.309
<v Speaker 3>Yeah.

244
00:12:53.370 --> 00:12:56.149
<v Speaker 2>And I have flown on it. Uh, Boeing flies their

245
00:12:56.190 --> 00:12:58.570
<v Speaker 2>Starliner to the International Space Station for the first time,

246
00:12:58.649 --> 00:13:00.190
<v Speaker 2>except for that part where it never got to the

247
00:13:00.230 --> 00:13:00.889
<v Speaker 2>space station.

248
00:13:01.190 --> 00:13:01.529
<v Speaker 1>Right.

249
00:13:02.529 --> 00:13:07.529
<v Speaker 2>Software bugs in the system cause the vehicle to decide

250
00:13:07.580 --> 00:13:09.799
<v Speaker 2>that it's actually farther along the mission than it actually is.

251
00:13:09.860 --> 00:13:13.580
<v Speaker 2>And it tries to correct its orientation inappropriately. And before

252
00:13:13.600 --> 00:13:16.039
<v Speaker 2>they can send commands to get it to stop doing that,

253
00:13:16.500 --> 00:13:18.980
<v Speaker 2>it burns up so much of its maneuvering fuel. That

254
00:13:19.000 --> 00:13:20.620
<v Speaker 2>it's unable to make it to the space station. They

255
00:13:20.679 --> 00:13:23.419
<v Speaker 2>do get control of it, fix the problem with the

256
00:13:23.460 --> 00:13:27.710
<v Speaker 2>software and successfully de-orbit and recover the vehicle. But that

257
00:13:27.730 --> 00:13:29.490
<v Speaker 2>will only be the beginning of a whole series of

258
00:13:29.529 --> 00:13:32.909
<v Speaker 2>terrible problems for Starliner that are not resolved to this day.

259
00:13:33.190 --> 00:13:36.230
<v Speaker 1>Hey, when you mentioned Starlink, you were using Starlink, right?

260
00:13:36.450 --> 00:13:37.070
<v Speaker 1>Are you using it now?

261
00:13:37.269 --> 00:13:40.149
<v Speaker 2>I wasn't at that point. It would be later. I

262
00:13:40.169 --> 00:13:42.090
<v Speaker 2>would apply for the beta and get into the beta

263
00:13:42.269 --> 00:13:43.909
<v Speaker 2>in a couple of years after that. But are you

264
00:13:43.929 --> 00:13:47.549
<v Speaker 2>using it right now? I'm not right now, no. It's

265
00:13:47.600 --> 00:13:49.940
<v Speaker 2>my backup. I have fiber now to this house in

266
00:13:49.960 --> 00:13:52.820
<v Speaker 2>the middle of nowhere, which is ridiculous. It is ridiculous.

267
00:13:52.840 --> 00:13:56.360
<v Speaker 2>Starlink is the backup. Okay, onto the computing side of things.

268
00:13:56.460 --> 00:13:59.940
<v Speaker 2>A whole bunch of stories around OpenAI. So February of

269
00:13:59.940 --> 00:14:04.940
<v Speaker 2>2019 is the release of GPT-2. And remember that the

270
00:14:05.340 --> 00:14:07.649
<v Speaker 2>mantra of OpenAI had been to do AI out in

271
00:14:07.659 --> 00:14:09.690
<v Speaker 2>the open, do it also open source, right? That's why

272
00:14:09.710 --> 00:14:13.350
<v Speaker 2>it's called OpenAI. But they come to the conclusion that

273
00:14:13.370 --> 00:14:16.809
<v Speaker 2>their largest model in GPT-2, which was a 1.5 billion

274
00:14:16.830 --> 00:14:20.379
<v Speaker 2>parameter model, oh, how quaint, is too powerful and that

275
00:14:20.389 --> 00:14:22.460
<v Speaker 2>it shouldn't be shared publicly. So they only release a

276
00:14:22.480 --> 00:14:26.000
<v Speaker 2>very tiny version of it just to show its potential.

277
00:14:26.740 --> 00:14:29.019
<v Speaker 2>And they are starting to reconsider what the company's all about.

278
00:14:29.720 --> 00:14:31.860
<v Speaker 2>Part of this is they're working on a paper, which

279
00:14:31.879 --> 00:14:36.700
<v Speaker 2>they'll publish in 2020, about... the scale necessary to build

280
00:14:36.720 --> 00:14:39.639
<v Speaker 2>these language models and that being a not-for-profit is just

281
00:14:39.679 --> 00:14:42.240
<v Speaker 2>not feasible. It's not the way they're going to be successful.

282
00:14:42.620 --> 00:14:44.909
<v Speaker 2>And so in March, they'll restructure OpenAI to become what

283
00:14:44.929 --> 00:14:48.009
<v Speaker 2>they call a capped profit company, which is funny because

284
00:14:48.029 --> 00:14:49.830
<v Speaker 2>this is all around the time that likely they're talking

285
00:14:49.870 --> 00:14:54.269
<v Speaker 2>to Microsoft because in June, Kevin Scott wrote an email

286
00:14:54.370 --> 00:14:58.679
<v Speaker 2>to Bill Gates and Satya Nadella called Thoughts on OpenAI.

287
00:14:59.490 --> 00:15:02.190
<v Speaker 2>where he talked about the fact that OpenAI and DeepMind

288
00:15:02.210 --> 00:15:05.110
<v Speaker 2>and Google Brain were well ahead of Microsoft and that

289
00:15:05.129 --> 00:15:09.490
<v Speaker 2>there was an opportunity to invest in OpenAI and put

290
00:15:09.509 --> 00:15:12.169
<v Speaker 2>them over onto Azure and maybe have a relationship. That,

291
00:15:12.210 --> 00:15:15.379
<v Speaker 2>of course, will happen in July. Sam Altman and Nadella

292
00:15:15.389 --> 00:15:19.659
<v Speaker 2>will be on stage together. We'll announce an exclusive cloud partnership.

293
00:15:19.720 --> 00:15:20.539
<v Speaker 1>I do remember that.

294
00:15:20.879 --> 00:15:23.740
<v Speaker 2>And finally, in December, Microsoft will put a billion dollars

295
00:15:23.879 --> 00:15:27.460
<v Speaker 2>into OpenAI, although how much of that they'll spend buying Azure,

296
00:15:27.480 --> 00:15:31.340
<v Speaker 2>we don't really know. Related to one of your stories

297
00:15:31.399 --> 00:15:35.500
<v Speaker 2>early on about China, in March, the UK publishes a

298
00:15:35.539 --> 00:15:41.429
<v Speaker 2>report about Huawei, concerns about Chinese security with kill switches

299
00:15:41.549 --> 00:15:45.049
<v Speaker 2>on 5G networking and things like that. The UK has

300
00:15:45.110 --> 00:15:48.169
<v Speaker 2>a group that's actually getting into the software that drives

301
00:15:48.230 --> 00:15:50.629
<v Speaker 2>all of those things, but they consider the software such

302
00:15:50.720 --> 00:15:54.179
<v Speaker 2>poor quality that they can't even verify its reliability or

303
00:15:54.220 --> 00:15:59.559
<v Speaker 2>security and consider it unsafe to use. That will result

304
00:15:59.580 --> 00:16:03.360
<v Speaker 2>in May, the Trump administration will literally say, you can't

305
00:16:03.580 --> 00:16:06.899
<v Speaker 2>use Huawei stuff, full stop. And it'll spread around all

306
00:16:06.919 --> 00:16:09.419
<v Speaker 2>of the Western world, really. That's around the time the

307
00:16:09.460 --> 00:16:12.370
<v Speaker 2>first 5G networks actually get deployed in the US, in April.

308
00:16:13.429 --> 00:16:16.450
<v Speaker 2>Also in April, but on April 2nd, not April 1st,

309
00:16:16.669 --> 00:16:21.129
<v Speaker 2>probably deliberately, Google shuts down, Google +. Can't do that

310
00:16:21.169 --> 00:16:26.700
<v Speaker 2>on April 2nd, it's not funny. Okay, September, Visual Studio 2019.

311
00:16:26.700 --> 00:16:31.470
<v Speaker 2>with Framework 4.8, but also. NET Core 3.0, which is

312
00:16:31.529 --> 00:16:34.379
<v Speaker 2>really the point where you kind of hit parity, so

313
00:16:34.409 --> 00:16:37.519
<v Speaker 2>the features, In the old framework that we wanted in

314
00:16:37.539 --> 00:16:39.799
<v Speaker 2>the open source cloud platform version, they were all there

315
00:16:39.879 --> 00:16:41.240
<v Speaker 2>now and more or less complete.

316
00:16:41.299 --> 00:16:42.519
<v Speaker 1>That's where I started using it.

317
00:16:42.559 --> 00:16:42.840
<v Speaker 4>Yeah.

318
00:16:42.919 --> 00:16:44.320
<v Speaker 1>I started using it at three.

319
00:16:44.519 --> 00:16:46.080
<v Speaker 2>Yeah, and it was the point where it's like, hey,

320
00:16:46.100 --> 00:16:48.000
<v Speaker 2>this is the end of the road. There won't be a.

321
00:16:48.139 --> 00:16:50.299
<v Speaker 2>NET Core 4. There won't be two versions of. NET

322
00:16:50.350 --> 00:16:52.470
<v Speaker 2>after this. There'll just be five, although you know the

323
00:16:52.509 --> 00:16:56.210
<v Speaker 2>old framework, 4.8 will never go anymore. And in December,

324
00:16:56.230 --> 00:16:59.669
<v Speaker 2>they'll put out 3.1, fixing some of the problems. Two

325
00:16:59.690 --> 00:17:04.309
<v Speaker 2>more stories. October. Google's Sycamore processor. So the first real

326
00:17:04.430 --> 00:17:09.130
<v Speaker 2>public demonstration of what we would call quantum supremacy. This

327
00:17:09.190 --> 00:17:12.170
<v Speaker 2>was one of those chandeliers soaked in liquid helium style

328
00:17:12.230 --> 00:17:15.259
<v Speaker 2>quantum computers, very fragile. It had 54 qubits, only 53

329
00:17:15.259 --> 00:17:19.220
<v Speaker 2>of them were functioning, did a 200 second run doing

330
00:17:19.259 --> 00:17:23.180
<v Speaker 2>a random number sampling task. Google argued that this would

331
00:17:23.200 --> 00:17:25.819
<v Speaker 2>take 10,000 years with a traditional computer and they finished

332
00:17:25.839 --> 00:17:28.619
<v Speaker 2>it in 200 seconds. IBM, of course, challenged the numbers

333
00:17:28.640 --> 00:17:32.519
<v Speaker 2>and then demonstrated various strata on quantum strategies to get

334
00:17:32.619 --> 00:17:34.650
<v Speaker 2>pretty good results. I think they're fastest when they got

335
00:17:34.670 --> 00:17:39.130
<v Speaker 2>it down to a couple of days, but whatever. But

336
00:17:39.170 --> 00:17:42.980
<v Speaker 2>it is in a wave of advancement in quantum computing.

337
00:17:43.559 --> 00:17:45.160
<v Speaker 2>And last but not least, because I do think it

338
00:17:45.220 --> 00:17:47.799
<v Speaker 2>impacts a lot of the conversations we're having today in

339
00:17:47.819 --> 00:17:54.180
<v Speaker 2>December at Amazon's reInvent conference, They talk about Graviton2, which

340
00:17:54.240 --> 00:17:59.519
<v Speaker 2>was custom ARM processors for workloads in EC2. They're promising

341
00:17:59.519 --> 00:18:02.519
<v Speaker 2>40% better price performance. Up until this point, for the

342
00:18:02.579 --> 00:18:07.809
<v Speaker 2>most part, the cloud had been regular machines bought with

343
00:18:07.890 --> 00:18:10.109
<v Speaker 2>Intel and AMD chips and so forth, bought by the

344
00:18:10.150 --> 00:18:12.910
<v Speaker 2>big vendors, already pre-racked and so forth. But now the

345
00:18:12.930 --> 00:18:15.910
<v Speaker 2>cloud companies, Amazon being one, but also Microsoft and Google

346
00:18:15.930 --> 00:18:18.319
<v Speaker 2>as well. Google was already going into their TensorFlows and

347
00:18:18.339 --> 00:18:21.450
<v Speaker 2>things like that. Are starting to build their own hardware

348
00:18:21.470 --> 00:18:24.349
<v Speaker 2>to optimize for cloud workloads. And that's going to change

349
00:18:24.410 --> 00:18:25.329
<v Speaker 2>things going forward.

350
00:18:25.529 --> 00:18:25.769
<v Speaker 4>Yeah.

351
00:18:25.970 --> 00:18:26.950
<v Speaker 2>Those are my stories, friend.

352
00:18:27.170 --> 00:18:30.740
<v Speaker 1>All right. Well, that brings us to better know a framework.

353
00:18:30.859 --> 00:18:31.339
<v Speaker 2>Awesome.

354
00:18:31.660 --> 00:18:33.819
<v Speaker 1>Or something. Better Know Something, maybe we should call it.

355
00:18:33.829 --> 00:18:35.009
<v Speaker 1>Better Know Something.

356
00:18:35.250 --> 00:18:36.369
<v Speaker 2>That would have been a great title.

357
00:18:37.410 --> 00:18:47.670
<v Speaker 1>All right, man, what do you got? Okay, so for

358
00:18:47.710 --> 00:18:51.170
<v Speaker 1>those of you paying attention to my other shows, Rocky

359
00:18:51.210 --> 00:18:55.180
<v Speaker 1>Latka and I started with him as co-host on Code

360
00:18:55.200 --> 00:18:59.180
<v Speaker 1>It With AI, which is presented by DevExpress.

361
00:19:00.180 --> 00:19:00.480
<v Speaker 3>And we....

362
00:19:02.000 --> 00:19:08.200
<v Speaker 1>Just put Quen 3.8 local to the test. Quen 3.8

363
00:19:08.200 --> 00:19:11.380
<v Speaker 1>is a model, and I ran it on Ollama. And

364
00:19:11.779 --> 00:19:15.200
<v Speaker 1>we had done on episodes 29 and 30 with Jeff Fritz,

365
00:19:15.740 --> 00:19:20.420
<v Speaker 1>we had done comparisons between local models running in this

366
00:19:20.519 --> 00:19:22.480
<v Speaker 1>hardware that I have, right, in Ollama.

367
00:19:22.859 --> 00:19:23.019
<v Speaker 4>Yeah.

368
00:19:23.240 --> 00:19:26.869
<v Speaker 1>And Quen 3.6 was the winner by far. So I

369
00:19:27.029 --> 00:19:28.890
<v Speaker 1>was thinking Quen 3.8, going to be great.

370
00:19:30.269 --> 00:19:30.509
<v Speaker 2>Yeah.

371
00:19:31.269 --> 00:19:43.950
<v Speaker 1>Not so much. Interesting. because Alama allocates context depending on

372
00:19:43.970 --> 00:19:46.420
<v Speaker 1>the amount of VRAM you have.

373
00:19:47.599 --> 00:19:52.420
<v Speaker 2>So I got 30, 35 or 32, 32 K based

374
00:19:52.480 --> 00:19:54.259
<v Speaker 2>on the amount of VRAM that I had, but I

375
00:19:54.279 --> 00:19:57.440
<v Speaker 2>don't think it was enough because it was, it was

376
00:19:57.849 --> 00:20:01.029
<v Speaker 2>doing the confusing things that the other models had done earlier,

377
00:20:01.329 --> 00:20:04.569
<v Speaker 2>which is telling you that it, you know, couldn't reach

378
00:20:04.589 --> 00:20:10.569
<v Speaker 2>the API, giving you some weird nil error, and stopping.

379
00:20:11.809 --> 00:20:18.650
<v Speaker 2>So Rocky tells me about llama.cpp. And llama.cpp is an

380
00:20:18.710 --> 00:20:24.250
<v Speaker 2>alternative to Ollama that it allows you to host models.

381
00:20:24.329 --> 00:20:27.430
<v Speaker 1>But the cool thing about it is that it can

382
00:20:27.490 --> 00:20:30.890
<v Speaker 1>take the compute heavy stuff and run that in VRAM.

383
00:20:31.309 --> 00:20:33.470
<v Speaker 1>And then it can use your system RAM for the

384
00:20:33.509 --> 00:20:35.299
<v Speaker 1>rest of it. Now, I don't know if it swaps

385
00:20:35.359 --> 00:20:39.309
<v Speaker 1>things in and out, system RAM, VRAM, or it just

386
00:20:39.549 --> 00:20:42.990
<v Speaker 1>runs some things that don't require such a heavy load

387
00:20:45.490 --> 00:20:49.609
<v Speaker 1>in system RAM, but that's it. So then there are

388
00:20:49.650 --> 00:20:52.630
<v Speaker 1>only certain models that can run, but there's a QEN

389
00:20:52.670 --> 00:20:57.279
<v Speaker 1>model that runs that's bigger that I'm going to try

390
00:20:57.359 --> 00:21:01.160
<v Speaker 1>for next week's Code with AI. Well, I say next week.

391
00:21:01.859 --> 00:21:07.940
<v Speaker 1>We're recording this on August 21st. or 20th, rather.

392
00:21:09.500 --> 00:21:09.900
<v Speaker 2>I'm sorry.

393
00:21:10.299 --> 00:21:15.640
<v Speaker 1>We're recording this on August 21st, and it won't come

394
00:21:15.680 --> 00:21:20.700
<v Speaker 1>out until September 10th. So the episode would be 43,

395
00:21:20.700 --> 00:21:25.309
<v Speaker 1>and that would be on last week, September 2nd. So

396
00:21:25.329 --> 00:21:27.140
<v Speaker 1>if you want to see what that does, I'm going

397
00:21:27.160 --> 00:21:29.130
<v Speaker 1>to have a live demo of it. I'm going to

398
00:21:29.150 --> 00:21:32.269
<v Speaker 1>try it, but llama.cpp. Know it, learn it, love it.

399
00:21:32.829 --> 00:21:34.029
<v Speaker 1>Who's talking to us today, Richard?

400
00:21:34.490 --> 00:21:37.130
<v Speaker 2>I had to go back. We're doing mathematics today, so

401
00:21:37.150 --> 00:21:38.509
<v Speaker 2>I had to go back to a mathematics show. So,

402
00:21:38.529 --> 00:21:41.990
<v Speaker 2>I went way back. 1252, which is from 2016. Our

403
00:21:42.019 --> 00:21:48.940
<v Speaker 2>friend Seth Juarez talking about his library, NUML. Because secretly,

404
00:21:49.460 --> 00:21:51.599
<v Speaker 2>Seth Juarez, as charming and entertaining as he was on

405
00:21:51.640 --> 00:21:54.609
<v Speaker 2>Channel 9, actually a maths guy. Got a real, you know,

406
00:21:54.619 --> 00:21:58.009
<v Speaker 2>got a master's degree. Super smart, you know. Great at

407
00:21:58.049 --> 00:21:59.470
<v Speaker 2>explaining the whole.

408
00:21:59.769 --> 00:22:00.029
<v Speaker 1>Oh, yeah.

409
00:22:00.650 --> 00:22:02.650
<v Speaker 2>LLM wave too. We've done some cool shows with it.

410
00:22:03.269 --> 00:22:06.789
<v Speaker 2>So this is a comment from, uh, Kirian O'Neill, who

411
00:22:06.829 --> 00:22:09.839
<v Speaker 2>says another scheduling library along the lines of courts.net. We

412
00:22:09.880 --> 00:22:12.460
<v Speaker 2>were talking about that library as well. Worth mentioning is

413
00:22:12.599 --> 00:22:15.839
<v Speaker 2>hang fire. The advantage I've gained from using hang fires

414
00:22:15.880 --> 00:22:18.180
<v Speaker 2>that it runs in process. It doesn't require a separate

415
00:22:18.240 --> 00:22:20.849
<v Speaker 2>window service. And depending on your use cases can be

416
00:22:20.869 --> 00:22:23.279
<v Speaker 2>a big advantage. And it's one less thing to think

417
00:22:23.339 --> 00:22:26.740
<v Speaker 2>about when deploying because, yeah, pushing out stuff to count

418
00:22:26.779 --> 00:22:29.880
<v Speaker 2>on Windows services and stuff is ugly if you're going

419
00:22:29.900 --> 00:22:31.720
<v Speaker 2>to try and make things work properly for you. But,

420
00:22:32.299 --> 00:22:33.960
<v Speaker 2>you know, this was a whole conversation we had with

421
00:22:34.009 --> 00:22:36.930
<v Speaker 2>Seth about how you do these long compute workloads when

422
00:22:36.950 --> 00:22:39.150
<v Speaker 2>you're working out things like machine learning models and so

423
00:22:39.190 --> 00:22:41.009
<v Speaker 2>forth where they may run for a couple of days.

424
00:22:41.630 --> 00:22:43.450
<v Speaker 2>And you don't want to just tie up the whole machine.

425
00:22:43.490 --> 00:22:45.630
<v Speaker 2>You want to run them in the background. Yep. So, Kirian,

426
00:22:45.650 --> 00:22:47.450
<v Speaker 2>thank you so much for your comment. And a copy

427
00:22:47.470 --> 00:22:48.849
<v Speaker 2>of Music to Code By is on its way to you.

428
00:22:48.869 --> 00:22:50.430
<v Speaker 2>And if you'd like a copy of Music to Code By,

429
00:22:50.450 --> 00:22:53.460
<v Speaker 2>write a comment on the website at. netrocks. com or on

430
00:22:53.480 --> 00:22:55.019
<v Speaker 2>the Facebooks. We publish every show there. And if you

431
00:22:55.059 --> 00:22:56.640
<v Speaker 2>comment there and I read it in the show, we'll

432
00:22:56.660 --> 00:22:57.740
<v Speaker 2>send you a copy of Music to Code By.

433
00:22:57.819 --> 00:22:59.180
<v Speaker 1>And if you want to just go get Music to

434
00:22:59.200 --> 00:23:01.099
<v Speaker 1>Code By, it's at musictocodeby.net.

435
00:23:01.980 --> 00:23:02.180
<v Speaker 4>All right.

436
00:23:02.200 --> 00:23:05.160
<v Speaker 1>We've taken up so much time with this intro stuff.

437
00:23:05.299 --> 00:23:07.099
<v Speaker 1>I think we ought to take our break now so

438
00:23:07.119 --> 00:23:11.039
<v Speaker 1>we can have an uninterrupted talk with Jeffrey Sachs. So

439
00:23:11.059 --> 00:23:17.369
<v Speaker 1>we'll be right back after these very important messages. And

440
00:23:17.390 --> 00:23:21.109
<v Speaker 1>we're back. It's. NET Rocks. I'm Carl Franklin. That's Richard Campbell.

441
00:23:21.349 --> 00:23:21.529
<v Speaker 2>Hey.

442
00:23:21.789 --> 00:23:24.309
<v Speaker 1>And also here with us is Jeffrey Sachs.

443
00:23:24.430 --> 00:23:25.250
<v Speaker 3>Hi. Hi.

444
00:23:26.109 --> 00:23:30.279
<v Speaker 1>Jeffrey Sachs is the founder and sole developer of Numerics.net,

445
00:23:30.910 --> 00:23:32.980
<v Speaker 1>a set of numerical computing libraries for.

446
00:23:33.200 --> 00:23:33.359
<v Speaker 4>NET.

447
00:23:34.059 --> 00:23:37.480
<v Speaker 1>He has been building the library since 2005 when the

448
00:23:37.539 --> 00:23:42.130
<v Speaker 1>first version was released for. NET 1.1. Over the years, Numerics.net

449
00:23:42.170 --> 00:23:46.089
<v Speaker 1>has been used for applications ranging from calculating radiation doses

450
00:23:46.170 --> 00:23:50.650
<v Speaker 1>for cancer treatment and developing truck braking systems to building

451
00:23:50.690 --> 00:23:56.319
<v Speaker 1>support software for atomic force microscopes. Jeffrey's work on numerical

452
00:23:56.380 --> 00:23:57.680
<v Speaker 1>software predates.

453
00:23:57.960 --> 00:23:58.160
<v Speaker 2>NET.

454
00:23:58.380 --> 00:23:59.619
<v Speaker 1>Jeffrey, welcome.

455
00:23:59.859 --> 00:24:00.119
<v Speaker 4>Hi.

456
00:24:00.779 --> 00:24:02.180
<v Speaker 5>Thank you. Thanks for having me.

457
00:24:02.460 --> 00:24:03.029
<v Speaker 2>You're welcome.

458
00:24:03.490 --> 00:24:07.200
<v Speaker 1>Sorry about the long intro. If you're okay with it,

459
00:24:07.230 --> 00:24:10.299
<v Speaker 1>we can go a little longer today. But my first

460
00:24:10.359 --> 00:24:14.259
<v Speaker 1>question is, what is numerical computing?

461
00:24:14.740 --> 00:24:19.799
<v Speaker 5>I would say numerical computing is the task of computing

462
00:24:19.859 --> 00:24:28.150
<v Speaker 5>values to a requested accuracy with limited precision. And do

463
00:24:28.190 --> 00:24:30.210
<v Speaker 5>that as fast as possible.

464
00:24:30.450 --> 00:24:36.410
<v Speaker 1>So it's basically just math equations in code. Essentially, like

465
00:24:36.549 --> 00:24:39.150
<v Speaker 1>a MATLAB kind of thing?

466
00:24:39.730 --> 00:24:41.069
<v Speaker 4>Yeah, that's what it comes down to.

467
00:24:41.309 --> 00:24:42.730
<v Speaker 1>Simulink, yeah.

468
00:24:43.019 --> 00:24:45.799
<v Speaker 2>So this is outside the spectrum of what the built-in

469
00:24:45.839 --> 00:24:50.220
<v Speaker 2>mathematical functions in. NET could do?

470
00:24:50.579 --> 00:24:52.119
<v Speaker 4>Yes, way beyond, actually.

471
00:24:52.319 --> 00:24:52.579
<v Speaker 2>Right.

472
00:24:54.319 --> 00:24:59.589
<v Speaker 5>Vectors, matrices, probability, and statistics, all kinds of fun stuff.

473
00:24:59.769 --> 00:25:01.789
<v Speaker 1>So it's all based on the fundamental stuff that's in

474
00:25:01.809 --> 00:25:04.970
<v Speaker 1>the framework, but then you do these... abstractions on top

475
00:25:05.029 --> 00:25:07.269
<v Speaker 1>of it that give you the higher level.

476
00:25:08.289 --> 00:25:08.710
<v Speaker 4>That's right.

477
00:25:09.230 --> 00:25:10.710
<v Speaker 1>Yeah, constructs.

478
00:25:10.990 --> 00:25:13.119
<v Speaker 2>All right, let's dust off our math chop, see if

479
00:25:13.130 --> 00:25:19.019
<v Speaker 2>we remember any of this stuff from school. Holy man. So,

480
00:25:19.140 --> 00:25:20.940
<v Speaker 2>I mean, just in your comment alone, you were talking

481
00:25:20.960 --> 00:25:23.680
<v Speaker 2>about things like radiation doses. So, can you talk a

482
00:25:23.680 --> 00:25:26.240
<v Speaker 2>bit about what kind of math we need there? It's

483
00:25:26.279 --> 00:25:27.500
<v Speaker 2>a great thing to figure out.

484
00:25:27.799 --> 00:25:28.680
<v Speaker 4>Actually, I'm not sure.

485
00:25:28.700 --> 00:25:29.140
<v Speaker 1>I just.

486
00:25:29.740 --> 00:25:31.339
<v Speaker 5>hear a lot of stories from customers.

487
00:25:31.759 --> 00:25:32.119
<v Speaker 4>Oh, right.

488
00:25:32.460 --> 00:25:35.019
<v Speaker 2>Um, these are just your customers doing cool things with

489
00:25:35.059 --> 00:25:35.720
<v Speaker 2>your software.

490
00:25:35.880 --> 00:25:36.140
<v Speaker 4>Yeah.

491
00:25:36.619 --> 00:25:38.440
<v Speaker 5>So that's the most fun part of what I do.

492
00:25:38.519 --> 00:25:39.940
<v Speaker 5>I hear all sorts of things.

493
00:25:40.160 --> 00:25:40.789
<v Speaker 2>Yeah. Yeah.

494
00:25:41.210 --> 00:25:43.190
<v Speaker 4>Um, and you heard some variety of what I hear.

495
00:25:43.430 --> 00:25:45.509
<v Speaker 2>Your background is in mathematics then?

496
00:25:45.650 --> 00:25:47.950
<v Speaker 4>Yes, it is. I actually, right.

497
00:25:48.190 --> 00:25:49.990
<v Speaker 2>So you just take him what you've learned and said like,

498
00:25:50.089 --> 00:25:52.190
<v Speaker 2>how could I do these things in.net?

499
00:25:52.539 --> 00:25:55.799
<v Speaker 5>Yes. I, I've been doing this pretty much my whole

500
00:25:55.839 --> 00:25:58.259
<v Speaker 5>life ever since I got my hands on the computer.

501
00:25:59.000 --> 00:26:02.329
<v Speaker 4>Um, And then went to university.

502
00:26:02.890 --> 00:26:06.339
<v Speaker 5>Got a degree in computing science, so specializing in the

503
00:26:06.440 --> 00:26:07.220
<v Speaker 5>numerical stuff.

504
00:26:07.660 --> 00:26:08.259
<v Speaker 4>And then.

505
00:26:09.900 --> 00:26:13.339
<v Speaker 5>After some time of building things privately, like just for

506
00:26:13.380 --> 00:26:16.940
<v Speaker 5>my own enjoyment, I thought, well, why not turn this

507
00:26:17.019 --> 00:26:21.079
<v Speaker 5>into my job and do it professionally?

508
00:26:21.460 --> 00:26:21.680
<v Speaker 3>Wow.

509
00:26:21.880 --> 00:26:23.890
<v Speaker 5>And that's how Numerics.net got started.

510
00:26:24.269 --> 00:26:24.450
<v Speaker 2>Wow.

511
00:26:24.940 --> 00:26:28.119
<v Speaker 1>You remind me of a product that when I was

512
00:26:28.160 --> 00:26:31.460
<v Speaker 1>at Crescent Software, we sold. I didn't write it. I

513
00:26:32.130 --> 00:26:35.730
<v Speaker 1>just did tech support. But it was called QuickPack Scientific.

514
00:26:36.829 --> 00:26:41.859
<v Speaker 1>And so in that was a bunch of assembly language things,

515
00:26:42.460 --> 00:26:45.759
<v Speaker 1>calls that you could call from basic, from QuickBasic, Basic

516
00:26:45.759 --> 00:26:50.269
<v Speaker 1>7 PDS, and even Visual Basic, that did all these

517
00:26:50.329 --> 00:26:53.349
<v Speaker 1>kinds of things. And I wondered even back then, why

518
00:26:53.369 --> 00:26:55.150
<v Speaker 1>do you need all this if you have the fundamentals?

519
00:26:55.210 --> 00:26:56.970
<v Speaker 1>And it's kind of like, you know, why do you

520
00:26:56.990 --> 00:26:59.210
<v Speaker 1>need a database if you can open and read and

521
00:26:59.230 --> 00:26:59.789
<v Speaker 1>write files?

522
00:27:00.890 --> 00:27:01.650
<v Speaker 2>Right?

523
00:27:02.069 --> 00:27:06.650
<v Speaker 1>These are layers of abstraction that help you as a non-programmer,

524
00:27:06.950 --> 00:27:11.359
<v Speaker 1>maybe a scientist that dabbles in programming, do stuff easily.

525
00:27:11.539 --> 00:27:15.099
<v Speaker 5>Well, it's not just about the layers of abstraction, although

526
00:27:15.119 --> 00:27:20.289
<v Speaker 5>that can be useful as well. It's also about the

527
00:27:20.329 --> 00:27:25.029
<v Speaker 5>limitations that you have doing math on a computer and

528
00:27:25.109 --> 00:27:26.309
<v Speaker 5>still doing things correctly.

529
00:27:26.579 --> 00:27:26.859
<v Speaker 1>Yeah.

530
00:27:26.950 --> 00:27:29.319
<v Speaker 2>So I said, it's, we got to dig into this

531
00:27:29.380 --> 00:27:32.420
<v Speaker 2>because I think it's fascinating. What, what are the, we never,

532
00:27:32.700 --> 00:27:34.319
<v Speaker 2>most of the time we don't bump into these limitations.

533
00:27:34.519 --> 00:27:35.759
<v Speaker 2>What are the limitations?

534
00:27:35.980 --> 00:27:41.380
<v Speaker 5>Well, the primary limitation is you can't represent every number

535
00:27:41.640 --> 00:27:43.710
<v Speaker 5>from real life in a computer system.

536
00:27:43.910 --> 00:27:44.190
<v Speaker 4>Right.

537
00:27:44.369 --> 00:27:44.569
<v Speaker 1>Right.

538
00:27:44.710 --> 00:27:48.549
<v Speaker 5>So we have, integers, and then we have what we

539
00:27:48.589 --> 00:27:52.970
<v Speaker 5>call real numbers. But those are really the double precision

540
00:27:53.049 --> 00:27:55.529
<v Speaker 5>floating point numbers is the official name. Right.

541
00:27:55.670 --> 00:27:58.190
<v Speaker 2>Yeah. And I think the floating point's a better term

542
00:27:58.230 --> 00:28:01.009
<v Speaker 2>just because it lets you know. This is only so accurate.

543
00:28:01.269 --> 00:28:01.710
<v Speaker 4>Yeah.

544
00:28:01.950 --> 00:28:08.670
<v Speaker 5>So the limitation is these numbers have a very specific format.

545
00:28:09.210 --> 00:28:11.309
<v Speaker 5>They're an integer times a power of two.

546
00:28:12.009 --> 00:28:12.230
<v Speaker 3>Right.

547
00:28:12.529 --> 00:28:15.109
<v Speaker 5>And you only have a certain range to work with.

548
00:28:15.720 --> 00:28:21.039
<v Speaker 5>So every calculation you do, you basically are able to

549
00:28:21.180 --> 00:28:23.039
<v Speaker 5>use only those numbers. Yeah.

550
00:28:23.160 --> 00:28:24.319
<v Speaker 4>And that's what makes it hard.

551
00:28:24.759 --> 00:28:28.119
<v Speaker 1>Right, right. So it's the precision. And you mentioned precision

552
00:28:28.420 --> 00:28:32.710
<v Speaker 1>in your definition of numerical computing, that you may want

553
00:28:33.089 --> 00:28:38.450
<v Speaker 1>less or more. But I get more. Why less? Yeah.

554
00:28:38.849 --> 00:28:44.630
<v Speaker 5>Well, in modern-day computing, there's a lot of talk about–

555
00:28:45.359 --> 00:28:49.440
<v Speaker 5>reducing the number of bits required for LLMs and so

556
00:28:49.500 --> 00:28:53.920
<v Speaker 5>forth to do their calculations and still have good results.

557
00:28:54.539 --> 00:28:58.769
<v Speaker 5>So they'll sample down from the original 16 or 32

558
00:28:58.769 --> 00:29:02.309
<v Speaker 5>bits down to sometimes as little as four or two

559
00:29:02.349 --> 00:29:02.910
<v Speaker 5>bits even.

560
00:29:03.170 --> 00:29:03.450
<v Speaker 2>Wow.

561
00:29:03.670 --> 00:29:07.670
<v Speaker 5>So that's why you would use less. In general, for calculations,

562
00:29:09.569 --> 00:29:13.750
<v Speaker 5>you would use the standard four or eight number formats.

563
00:29:15.150 --> 00:29:19.269
<v Speaker 5>because the resources aren't as tight and the computation isn't

564
00:29:19.849 --> 00:29:20.470
<v Speaker 5>as intense.

565
00:29:20.809 --> 00:29:21.450
<v Speaker 1>Yeah, okay.

566
00:29:21.630 --> 00:29:24.890
<v Speaker 2>And so the point being, when you use a higher precision,

567
00:29:24.950 --> 00:29:27.109
<v Speaker 2>it's just going to take longer for no value.

568
00:29:27.390 --> 00:29:30.609
<v Speaker 5>Yeah, but if you use too little precision, things can

569
00:29:30.650 --> 00:29:31.890
<v Speaker 5>go terribly long as well.

570
00:29:32.130 --> 00:29:32.369
<v Speaker 2>Right.

571
00:29:32.769 --> 00:29:37.549
<v Speaker 5>There's a famous example of um an arianne 5 rocket

572
00:29:38.839 --> 00:29:40.220
<v Speaker 5>in 96 i think.

573
00:29:40.099 --> 00:29:42.700
<v Speaker 2>It was oh yeah they lost the first one they.

574
00:29:42.579 --> 00:29:49.140
<v Speaker 5>Lost the first one because some value was um stored

575
00:29:49.339 --> 00:29:54.240
<v Speaker 5>as a 16-bit value for the arianne 4 rocket the

576
00:29:54.279 --> 00:29:58.339
<v Speaker 5>predecessor right and they converted down from 64 bits to

577
00:29:58.339 --> 00:30:02.809
<v Speaker 5>16 got an overflow which sent their navigation system into

578
00:30:02.930 --> 00:30:06.259
<v Speaker 5>some kind of error state and they had to terminate

579
00:30:06.539 --> 00:30:07.680
<v Speaker 5>the launch.

580
00:30:07.900 --> 00:30:10.140
<v Speaker 2>Yeah, that's a very expensive boo-boo.

581
00:30:10.220 --> 00:30:10.799
<v Speaker 4>Yes, it is.

582
00:30:10.880 --> 00:30:12.640
<v Speaker 2>Like billion-dollar boo-boo.

583
00:30:12.940 --> 00:30:16.440
<v Speaker 5>Yeah, and so one of the things that makes it

584
00:30:16.480 --> 00:30:21.220
<v Speaker 5>hard is because you have that limited set of numbers,

585
00:30:23.329 --> 00:30:26.349
<v Speaker 5>whenever you do a calculation, you have to start by

586
00:30:27.190 --> 00:30:32.059
<v Speaker 5>approximating the number you get from real life by a

587
00:30:32.200 --> 00:30:34.220
<v Speaker 5>number that's in your set that you can work with.

588
00:30:35.480 --> 00:30:38.460
<v Speaker 5>So you have to round it off and that already

589
00:30:38.720 --> 00:30:42.900
<v Speaker 5>right off, right out of the gate, you start with

590
00:30:42.940 --> 00:30:48.740
<v Speaker 5>an error and then errors propagate. Like every calculation you do,

591
00:30:48.759 --> 00:30:52.900
<v Speaker 5>when you add two numbers, the sum of those two

592
00:30:52.940 --> 00:30:58.400
<v Speaker 5>numbers may not be a floating point number again. So

593
00:30:58.420 --> 00:31:03.700
<v Speaker 5>then you get additional errors And sometimes it can explode and, well,

594
00:31:04.019 --> 00:31:04.900
<v Speaker 5>lead to explosions.

595
00:31:05.460 --> 00:31:07.259
<v Speaker 2>Right. Quite literally.

596
00:31:07.500 --> 00:31:07.720
<v Speaker 4>Yeah.

597
00:31:07.880 --> 00:31:10.559
<v Speaker 2>Yeah, I remember watching that, actually. And it's like suddenly

598
00:31:10.599 --> 00:31:12.779
<v Speaker 2>the engines were trying to move the rocket in ways

599
00:31:12.859 --> 00:31:14.400
<v Speaker 2>it really wouldn't want to move. And then it just

600
00:31:14.420 --> 00:31:15.599
<v Speaker 2>sort of broke into pieces.

601
00:31:15.839 --> 00:31:16.599
<v Speaker 4>Yeah, that's right.

602
00:31:16.819 --> 00:31:19.440
<v Speaker 1>I had a friend. He's gone now. But he was

603
00:31:19.740 --> 00:31:27.049
<v Speaker 1>a professor of mathematics. And he called himself a philosopher

604
00:31:27.480 --> 00:31:27.940
<v Speaker 1>of math.

605
00:31:28.710 --> 00:31:28.950
<v Speaker 4>And I.

606
00:31:30.650 --> 00:31:34.470
<v Speaker 1>Was, I guess, into things that were so abstract that

607
00:31:35.150 --> 00:31:38.150
<v Speaker 1>nobody could understand them, and you had to just think

608
00:31:38.210 --> 00:31:42.089
<v Speaker 1>about them completely differently. One of those things that I

609
00:31:42.150 --> 00:31:47.670
<v Speaker 1>think of in that vein are imaginary numbers. What the

610
00:31:47.710 --> 00:31:49.490
<v Speaker 1>hell is an imaginary number?

611
00:31:50.779 --> 00:31:51.039
<v Speaker 4>Right?

612
00:31:51.410 --> 00:31:55.880
<v Speaker 5>Well, an imaginary number is a trick, basically, to.

613
00:31:57.759 --> 00:32:01.859
<v Speaker 4>Make... the math work. So there's.

614
00:32:03.880 --> 00:32:07.880
<v Speaker 5>A theory where when you compute the roots of a

615
00:32:07.920 --> 00:32:17.839
<v Speaker 5>quadratic equation, you always have two roots. If you have

616
00:32:17.859 --> 00:32:21.119
<v Speaker 5>real numbers as roots, that's not always the case. But

617
00:32:21.180 --> 00:32:25.809
<v Speaker 5>if you allow this extension by using the square root

618
00:32:25.920 --> 00:32:32.390
<v Speaker 5>of minus one as another dimension, then you can always

619
00:32:32.430 --> 00:32:36.150
<v Speaker 5>get two roots. And so there's all kinds of lovely,

620
00:32:36.190 --> 00:32:40.859
<v Speaker 5>beautiful math that just falls into place perfectly when you

621
00:32:40.880 --> 00:32:41.210
<v Speaker 5>do that.

622
00:32:41.690 --> 00:32:42.559
<v Speaker 1>I still don't get it.

623
00:32:42.900 --> 00:32:44.700
<v Speaker 2>I'm remembering enough of this stuff to realize, as soon

624
00:32:44.720 --> 00:32:46.980
<v Speaker 2>as you said imaginary numbers, like square root of negative two,

625
00:32:47.500 --> 00:32:50.240
<v Speaker 2>that shouldn't be possible, but there's a fix for it.

626
00:32:50.440 --> 00:32:55.119
<v Speaker 5>Yeah. So it's not purely mathematical. It's actually some, like

627
00:32:55.440 --> 00:32:58.019
<v Speaker 5>most of quantum physics is also expressed in quantum, in, uh,

628
00:32:58.470 --> 00:33:02.400
<v Speaker 5>in terms of complex numbers. So, how real that is

629
00:33:02.460 --> 00:33:05.539
<v Speaker 5>is also questionable, but that's a different discussion.

630
00:33:06.660 --> 00:33:08.819
<v Speaker 2>Well, you know, God doesn't play dice with the universe.

631
00:33:10.220 --> 00:33:12.650
<v Speaker 1>Would you consider yourself a philosopher of math?

632
00:33:12.869 --> 00:33:14.089
<v Speaker 4>A little bit, but not too much.

633
00:33:14.569 --> 00:33:19.190
<v Speaker 1>Not the philosopher king, just a philosopher. No.

634
00:33:20.890 --> 00:33:25.720
<v Speaker 5>The pure math and the computer math are actually very different.

635
00:33:26.089 --> 00:33:27.329
<v Speaker 5>It's a very different story.

636
00:33:27.430 --> 00:33:28.609
<v Speaker 2>Oh, sure, yeah.

637
00:33:28.750 --> 00:33:33.059
<v Speaker 5>You don't get into extreme abstractions that only a handful

638
00:33:33.079 --> 00:33:34.299
<v Speaker 5>of people understand.

639
00:33:35.240 --> 00:33:38.299
<v Speaker 2>But as I understand it, mathematics and computing in general

640
00:33:38.380 --> 00:33:41.440
<v Speaker 2>has been a series of compromises based on the limitations

641
00:33:42.160 --> 00:33:43.660
<v Speaker 2>of the hardware available at the time.

642
00:33:44.000 --> 00:33:44.660
<v Speaker 4>Yes, that's right.

643
00:33:45.009 --> 00:33:45.589
<v Speaker 1>And the language.

644
00:33:46.490 --> 00:33:52.289
<v Speaker 5>Language, too. There's actually funny stories about Fortran, the first

645
00:33:52.349 --> 00:34:00.420
<v Speaker 5>programming language, which has... Originally, it didn't have if statements.

646
00:34:00.640 --> 00:34:04.059
<v Speaker 5>It had a conditional jump. It didn't have.

647
00:34:06.910 --> 00:34:12.449
<v Speaker 5>The logical operators and the comparison operators are written out

648
00:34:12.789 --> 00:34:16.570
<v Speaker 5>with dots. Dot, L, T, dot is less than. The

649
00:34:16.590 --> 00:34:21.469
<v Speaker 5>reason they did that was because at the time... computers

650
00:34:21.510 --> 00:34:23.449
<v Speaker 5>didn't have less than signs.

651
00:34:23.829 --> 00:34:26.530
<v Speaker 2>Right. The ASCII set hadn't been done yet.

652
00:34:26.690 --> 00:34:27.130
<v Speaker 4>That's right.

653
00:34:27.389 --> 00:34:27.650
<v Speaker 3>Wow.

654
00:34:27.829 --> 00:34:28.670
<v Speaker 1>Was it EPSIDIC?

655
00:34:29.670 --> 00:34:30.789
<v Speaker 2>Even earlier.

656
00:34:30.869 --> 00:34:36.070
<v Speaker 5>Another interesting thing about Fortran, white space doesn't matter at all.

657
00:34:36.349 --> 00:34:36.630
<v Speaker 2>Right.

658
00:34:36.869 --> 00:34:39.170
<v Speaker 5>You can put spaces anywhere in the middle of a name,

659
00:34:39.190 --> 00:34:45.030
<v Speaker 5>of a variable, anywhere. The reason they did that is

660
00:34:45.110 --> 00:34:52.179
<v Speaker 5>because back in the day, people wrote their programs on

661
00:34:52.300 --> 00:34:57.090
<v Speaker 5>punch cards and there were punch card operators who translated

662
00:34:57.110 --> 00:35:04.809
<v Speaker 5>or like who entered the text in punch cards, did

663
00:35:04.829 --> 00:35:11.139
<v Speaker 5>the punching to then feed into the computers. And what

664
00:35:11.179 --> 00:35:15.099
<v Speaker 5>they found was that they were very sloppy with spaces

665
00:35:15.460 --> 00:35:18.500
<v Speaker 5>in the transcriptions. And so there were lots of errors

666
00:35:19.340 --> 00:35:24.539
<v Speaker 5>because spaces were at the time significant. And so they

667
00:35:24.559 --> 00:35:27.440
<v Speaker 5>did away with that so that their programs could actually run.

668
00:35:27.920 --> 00:35:28.719
<v Speaker 2>It's a workaround.

669
00:35:28.960 --> 00:35:29.139
<v Speaker 5>Yeah.

670
00:35:29.420 --> 00:35:32.900
<v Speaker 1>And speaking of languages, how does JavaScript hit you for

671
00:35:32.920 --> 00:35:33.719
<v Speaker 1>a math language?

672
00:35:35.599 --> 00:35:38.500
<v Speaker 4>JavaScript is kind of, it's not.

673
00:35:38.519 --> 00:35:39.039
<v Speaker 1>You can say it.

674
00:35:39.340 --> 00:35:39.840
<v Speaker 2>It's okay.

675
00:35:40.760 --> 00:35:43.059
<v Speaker 5>It's not the best language for computing.

676
00:35:43.099 --> 00:35:43.739
<v Speaker 2>Yeah, right.

677
00:35:43.840 --> 00:35:46.280
<v Speaker 5>The nice thing about it is that you have numbers

678
00:35:46.360 --> 00:35:49.360
<v Speaker 5>and they're all the same. But that's when you do

679
00:35:49.429 --> 00:35:51.960
<v Speaker 5>numerical stuff, that's also the, The problem.

680
00:35:52.219 --> 00:35:52.900
<v Speaker 2>Right. Yeah.

681
00:35:53.179 --> 00:35:53.980
<v Speaker 1>As we found out.

682
00:35:54.619 --> 00:35:57.300
<v Speaker 2>We've talked a little bit about complex numbers so far

683
00:35:57.719 --> 00:36:01.480
<v Speaker 2>in the library here. I don't know that I exactly

684
00:36:01.559 --> 00:36:05.139
<v Speaker 2>understand everything when we talk about space of complex numbers. Because,

685
00:36:05.760 --> 00:36:07.699
<v Speaker 2>I mean, I've always thought that not a number, you know,

686
00:36:07.719 --> 00:36:11.530
<v Speaker 2>speaking of JavaScript, was such a computer thing. But is

687
00:36:11.570 --> 00:36:14.449
<v Speaker 2>that something relevant in complex numbers as well?

688
00:36:14.750 --> 00:36:18.150
<v Speaker 5>It's relevant in all of numerical computing.

689
00:36:18.679 --> 00:36:19.059
<v Speaker 2>Oh, okay.

690
00:36:19.119 --> 00:36:21.539
<v Speaker 5>So a complex number just has a real part and

691
00:36:21.559 --> 00:36:22.579
<v Speaker 5>an imaginary part.

692
00:36:22.800 --> 00:36:23.019
<v Speaker 3>Right.

693
00:36:23.409 --> 00:36:26.469
<v Speaker 5>And once you work with those two, it's just real

694
00:36:26.510 --> 00:36:30.530
<v Speaker 5>math again. There's nothing complex about it. So the same

695
00:36:31.090 --> 00:36:34.730
<v Speaker 5>issues that you encounter in real numbers, you will encounter

696
00:36:34.750 --> 00:36:36.199
<v Speaker 5>in complex numbers again. Right.

697
00:36:36.659 --> 00:36:40.119
<v Speaker 2>And so problems like infinity and not a number, these

698
00:36:40.159 --> 00:36:41.619
<v Speaker 2>are just things you have to contend with.

699
00:36:41.920 --> 00:36:42.119
<v Speaker 4>Yeah.

700
00:36:42.519 --> 00:36:45.820
<v Speaker 5>And that's one of the weird things. Not a number

701
00:36:46.099 --> 00:36:53.889
<v Speaker 5>is a special thing. encoding in the binary floating point format.

702
00:36:54.579 --> 00:36:59.079
<v Speaker 5>And they compare false. So any operation, any logical operation

703
00:36:59.739 --> 00:37:02.380
<v Speaker 5>with not a number returns false, including itself.

704
00:37:03.960 --> 00:37:06.099
<v Speaker 2>So not a number is also not a number.

705
00:37:06.320 --> 00:37:10.449
<v Speaker 5>Well, yeah. So you have to special case all kinds

706
00:37:10.489 --> 00:37:15.510
<v Speaker 5>of code to work with that to trap it. One

707
00:37:15.530 --> 00:37:18.900
<v Speaker 5>of the Places where you can get not a number

708
00:37:19.219 --> 00:37:22.820
<v Speaker 5>is if you try to compute the square root of

709
00:37:22.860 --> 00:37:23.559
<v Speaker 5>a negative number.

710
00:37:23.880 --> 00:37:24.099
<v Speaker 4>Right.

711
00:37:24.320 --> 00:37:25.800
<v Speaker 2>Does that make an imaginary number?

712
00:37:26.119 --> 00:37:29.420
<v Speaker 5>That would make an imaginary number, but it's outside of

713
00:37:29.519 --> 00:37:31.400
<v Speaker 5>the number format. Right.

714
00:37:31.980 --> 00:37:34.780
<v Speaker 2>I'm starting to feel like in this context, not a

715
00:37:34.800 --> 00:37:39.539
<v Speaker 2>number is problematically like nulls are problematic, where you have

716
00:37:39.579 --> 00:37:42.619
<v Speaker 2>to test for them, and they're hard to test against themselves.

717
00:37:43.460 --> 00:37:45.300
<v Speaker 2>So they just have to build a set of exception

718
00:37:45.320 --> 00:37:45.980
<v Speaker 2>cases around it.

719
00:37:47.159 --> 00:37:51.739
<v Speaker 5>That's true, and it's more of an annoyance than anything.

720
00:37:52.320 --> 00:37:54.599
<v Speaker 5>If you're careful, you won't encounter them.

721
00:37:54.940 --> 00:37:55.159
<v Speaker 2>Right.

722
00:37:55.860 --> 00:38:02.780
<v Speaker 5>But the other challenge is of maintaining precision. If you

723
00:38:02.800 --> 00:38:05.300
<v Speaker 5>can do that, you're good. If you can't, then you

724
00:38:05.320 --> 00:38:08.849
<v Speaker 5>can get things like dividing zero by zero, which is

725
00:38:08.909 --> 00:38:10.230
<v Speaker 5>also not a number.

726
00:38:10.369 --> 00:38:10.949
<v Speaker 2>Not a number.

727
00:38:10.969 --> 00:38:11.570
<v Speaker 1>Yeah.

728
00:38:12.920 --> 00:38:15.360
<v Speaker 2>That's fair. So, I mean, on one hand, I'm losing

729
00:38:15.389 --> 00:38:18.889
<v Speaker 2>this library because I have a particular use case where

730
00:38:18.949 --> 00:38:22.570
<v Speaker 2>I have a particular requirement for precision that perhaps doesn't

731
00:38:22.610 --> 00:38:24.519
<v Speaker 2>fall into what's built into.

732
00:38:24.670 --> 00:38:24.889
<v Speaker 3>NET.

733
00:38:24.969 --> 00:38:26.719
<v Speaker 2>Does that make sense? Is that a reason to go

734
00:38:26.780 --> 00:38:28.079
<v Speaker 2>into using the library?

735
00:38:29.380 --> 00:38:31.440
<v Speaker 4>That's one possibility. We have.

736
00:38:32.800 --> 00:38:37.800
<v Speaker 5>Big floats that can Do enormous ranges of numbers to

737
00:38:37.920 --> 00:38:39.550
<v Speaker 5>whatever precision you want, basically.

738
00:38:39.610 --> 00:38:42.889
<v Speaker 2>How big is a big float there, Jeff? A Google?

739
00:38:44.750 --> 00:38:47.769
<v Speaker 5>I think the exponent is about 10 billion.

740
00:38:48.449 --> 00:38:48.570
<v Speaker 3>Oh.

741
00:38:49.309 --> 00:38:51.909
<v Speaker 5>And you can have like up to a couple of

742
00:38:51.929 --> 00:38:53.349
<v Speaker 5>billion digits, something like that.

743
00:38:53.369 --> 00:38:54.929
<v Speaker 2>So you could calculate with Googles.

744
00:38:55.590 --> 00:38:55.829
<v Speaker 5>Yeah.

745
00:38:56.130 --> 00:38:56.409
<v Speaker 2>Wow.

746
00:38:56.710 --> 00:39:00.389
<v Speaker 5>A Google actually fits in a normal double floating boy number.

747
00:39:00.530 --> 00:39:00.869
<v Speaker 2>Really?

748
00:39:01.070 --> 00:39:01.269
<v Speaker 3>Wow.

749
00:39:01.329 --> 00:39:03.190
<v Speaker 4>If it's 10 to the power 100. Right.

750
00:39:04.239 --> 00:39:09.679
<v Speaker 5>It's not exact. Because we don't have enough bits for that. But, yeah,

751
00:39:09.760 --> 00:39:10.920
<v Speaker 5>it is within the range.

752
00:39:11.500 --> 00:39:14.619
<v Speaker 2>Nice. Okay. But then now when I think about, you know,

753
00:39:14.679 --> 00:39:18.750
<v Speaker 2>why would I want a library like this, I immediately

754
00:39:18.769 --> 00:39:22.869
<v Speaker 2>head towards calculus. Because that's hard to do without a library.

755
00:39:22.989 --> 00:39:23.369
<v Speaker 1>That's right.

756
00:39:23.849 --> 00:39:29.130
<v Speaker 5>Well, more generally, the reason you would go to a

757
00:39:29.190 --> 00:39:35.639
<v Speaker 5>library like this, is that avoiding the loss of precision

758
00:39:36.800 --> 00:39:42.739
<v Speaker 5>is a challenge. Right? So we talked about every operation

759
00:39:42.800 --> 00:39:47.900
<v Speaker 5>introduces potentially another additional small error. Right. There's also something

760
00:39:47.920 --> 00:39:52.900
<v Speaker 5>called catastrophic cancellations. which is you have two numbers that

761
00:39:53.000 --> 00:39:59.300
<v Speaker 5>almost have the same magnitude, and you subtract them. So

762
00:39:59.539 --> 00:40:02.059
<v Speaker 5>the result is very small relative to those two numbers.

763
00:40:02.280 --> 00:40:02.780
<v Speaker 1>Oh, okay.

764
00:40:02.840 --> 00:40:04.889
<v Speaker 5>Well, your precision will plummet.

765
00:40:05.050 --> 00:40:07.210
<v Speaker 2>Yeah, and turn it to a zero when it shouldn't be.

766
00:40:07.429 --> 00:40:07.670
<v Speaker 5>Yeah.

767
00:40:08.150 --> 00:40:08.889
<v Speaker 2>Right, okay.

768
00:40:09.150 --> 00:40:15.030
<v Speaker 5>And then you get into other things like... One of

769
00:40:15.090 --> 00:40:18.420
<v Speaker 5>the biggest challenges for me that I have to be

770
00:40:18.460 --> 00:40:23.130
<v Speaker 5>always aware of is... Computer math is not quite like

771
00:40:23.449 --> 00:40:28.489
<v Speaker 5>regular math. So, for example, the order of operations matters.

772
00:40:30.320 --> 00:40:32.659
<v Speaker 5>In normal math, when you add three numbers, it doesn't

773
00:40:32.679 --> 00:40:34.119
<v Speaker 5>really matter which order you do it in.

774
00:40:34.340 --> 00:40:34.519
<v Speaker 4>No.

775
00:40:34.679 --> 00:40:39.300
<v Speaker 5>But say you have 1 plus 10 to the minus

776
00:40:39.300 --> 00:40:41.079
<v Speaker 5>20 plus minus 1.

777
00:40:41.079 --> 00:40:42.719
<v Speaker 1>Oh, I see the problem already.

778
00:40:42.860 --> 00:40:46.639
<v Speaker 5>So, 1 plus 10 to the minus 20, you don't

779
00:40:46.679 --> 00:40:50.329
<v Speaker 5>have the precision to register that little thing you're adding,

780
00:40:50.750 --> 00:40:53.590
<v Speaker 5>so that remains one. And then if you subtract again,

781
00:40:53.690 --> 00:40:57.000
<v Speaker 5>it's zero. Whereas if you do one minus one and

782
00:40:57.039 --> 00:41:01.059
<v Speaker 5>then add, it's zero plus your small number and you

783
00:41:01.119 --> 00:41:02.400
<v Speaker 5>have a different result.

784
00:41:02.760 --> 00:41:06.940
<v Speaker 1>Because the first item in the list is what defines

785
00:41:07.000 --> 00:41:09.050
<v Speaker 1>the type that it's cast to, right?

786
00:41:09.070 --> 00:41:09.429
<v Speaker 4>That's right.

787
00:41:09.550 --> 00:41:12.889
<v Speaker 5>So the programming language defines the order and you have

788
00:41:12.909 --> 00:41:14.710
<v Speaker 5>to make sure that you do things in the right order.

789
00:41:15.250 --> 00:41:19.050
<v Speaker 5>And that can sneak up on you like A simple expression,

790
00:41:19.070 --> 00:41:22.849
<v Speaker 5>a plus k minus 1, where a is a real number,

791
00:41:22.889 --> 00:41:25.090
<v Speaker 5>k is an integer. That looks innocent, right?

792
00:41:25.670 --> 00:41:25.929
<v Speaker 3>Yeah.

793
00:41:25.989 --> 00:41:29.750
<v Speaker 5>Can't really go wrong with that. Well, what happens if

794
00:41:30.349 --> 00:41:34.139
<v Speaker 5>a is a small number and k equals 1? Then

795
00:41:34.179 --> 00:41:36.860
<v Speaker 5>you're going to have a plus 1. You're going to

796
00:41:36.920 --> 00:41:41.420
<v Speaker 5>lose tons of precision there. And then subtract 1 again.

797
00:41:41.780 --> 00:41:45.599
<v Speaker 5>So you've just lost lots of precision in that simple,

798
00:41:45.739 --> 00:41:47.019
<v Speaker 5>innocent-looking operation.

799
00:41:47.630 --> 00:41:50.730
<v Speaker 2>Yeah, you ended up at zero and it shouldn't have been.

800
00:41:50.889 --> 00:41:51.289
<v Speaker 3>Yeah, or.

801
00:41:53.610 --> 00:41:57.449
<v Speaker 5>Something close, but much less accurate than what you started

802
00:41:57.530 --> 00:41:57.829
<v Speaker 5>out with.

803
00:41:58.110 --> 00:41:58.369
<v Speaker 2>Right.

804
00:41:58.570 --> 00:42:03.369
<v Speaker 1>Is there such a thing as a specialized computer and

805
00:42:03.449 --> 00:42:09.550
<v Speaker 1>language that brings computer math closer to real math?

806
00:42:09.889 --> 00:42:14.159
<v Speaker 5>You could say that there are symbolic computer systems, but

807
00:42:14.179 --> 00:42:15.340
<v Speaker 5>that's really kind of cheating.

808
00:42:15.360 --> 00:42:15.739
<v Speaker 2>Uh-huh.

809
00:42:16.360 --> 00:42:19.440
<v Speaker 5>So I wouldn't say for practical use, not really.

810
00:42:19.460 --> 00:42:22.179
<v Speaker 2>Okay. I mean, wasn't that what Fortran was about, was

811
00:42:22.219 --> 00:42:24.460
<v Speaker 2>trying to get rid of these precision problems back in

812
00:42:24.480 --> 00:42:24.800
<v Speaker 2>the day?

813
00:42:25.860 --> 00:42:30.969
<v Speaker 5>Fortran was to make it easy to write out equations.

814
00:42:31.659 --> 00:42:34.630
<v Speaker 5>It's literally derived from formula translation.

815
00:42:34.929 --> 00:42:35.150
<v Speaker 3>Right.

816
00:42:35.789 --> 00:42:42.550
<v Speaker 5>So eliminating the floating point traps and so on is

817
00:42:42.650 --> 00:42:45.090
<v Speaker 5>really not practical to.

818
00:42:45.030 --> 00:42:48.989
<v Speaker 4>Do in a In a language, you have to sort

819
00:42:49.010 --> 00:42:50.889
<v Speaker 4>of choose your algorithm.

820
00:42:51.690 --> 00:42:51.929
<v Speaker 3>Right.

821
00:42:52.710 --> 00:42:57.230
<v Speaker 5>And so you have to, sometimes you get a formula

822
00:42:57.389 --> 00:43:00.880
<v Speaker 5>and there's something that can blow up or where you

823
00:43:00.889 --> 00:43:03.780
<v Speaker 5>can lose precision. And then you have to find a

824
00:43:04.940 --> 00:43:11.380
<v Speaker 5>different path of obtaining the same result that doesn't have

825
00:43:11.420 --> 00:43:14.559
<v Speaker 5>that problem. And that's the biggest challenge.

826
00:43:14.599 --> 00:43:17.039
<v Speaker 2>Yeah, and so you're no longer just working on the

827
00:43:17.079 --> 00:43:19.340
<v Speaker 2>math problem. You're working in the constraints of the computer.

828
00:43:19.420 --> 00:43:19.780
<v Speaker 4>That's right.

829
00:43:19.940 --> 00:43:21.780
<v Speaker 2>You have to adapt your math problem to what the

830
00:43:21.800 --> 00:43:22.760
<v Speaker 2>computer can do for you.

831
00:43:22.800 --> 00:43:27.199
<v Speaker 4>That's right. And that's why it's hard. That's why so

832
00:43:29.239 --> 00:43:31.199
<v Speaker 4>much time is spent on getting it right.

833
00:43:32.480 --> 00:43:34.940
<v Speaker 2>And the problem is if you're not aware of the problems,

834
00:43:34.960 --> 00:43:37.719
<v Speaker 2>you just write an expression. And in certain test cases,

835
00:43:37.760 --> 00:43:40.949
<v Speaker 2>it works fine. And in other cases, it ruins everything.

836
00:43:41.090 --> 00:43:47.079
<v Speaker 5>Yeah, and... Most cases you'll test are like mid-range, normal,

837
00:43:47.760 --> 00:43:52.650
<v Speaker 5>everyday things. And sure, it'll work fine with that. Like, yeah,

838
00:43:52.670 --> 00:43:55.050
<v Speaker 5>you might lose a digit or two, but nothing relevant.

839
00:43:55.530 --> 00:43:59.610
<v Speaker 5>But then extreme cases happen, and then, yeah, you might

840
00:43:59.630 --> 00:44:00.329
<v Speaker 5>run into trouble.

841
00:44:00.550 --> 00:44:03.550
<v Speaker 2>Disasters. Should we go down some of the paths of these?

842
00:44:04.130 --> 00:44:06.110
<v Speaker 2>different math sets you've done here, I'm just trying to

843
00:44:06.130 --> 00:44:11.469
<v Speaker 2>figure out what a Gauss Cronrod numerical integrator is. You're

844
00:44:11.510 --> 00:44:15.309
<v Speaker 2>making that up, Richard. I wish I was. I'm just

845
00:44:15.409 --> 00:44:19.110
<v Speaker 2>reading through the spec here and going, oh boy. If

846
00:44:19.130 --> 00:44:21.760
<v Speaker 2>you don't know what that is, you probably don't need one.

847
00:44:22.449 --> 00:44:29.300
<v Speaker 5>Yeah, Gauss is the famous mathematician who pioneered numerical integration,

848
00:44:29.320 --> 00:44:31.420
<v Speaker 5>so computing the area under a curve.

849
00:44:32.090 --> 00:44:33.789
<v Speaker 4>Using approximations.

850
00:44:34.090 --> 00:44:35.110
<v Speaker 1>You said Gauss, right?

851
00:44:35.429 --> 00:44:36.570
<v Speaker 4>And Gauss, yeah.

852
00:44:36.849 --> 00:44:39.610
<v Speaker 1>Is that what the Gaussian blur is based on?

853
00:44:39.849 --> 00:44:40.610
<v Speaker 4>That's also him.

854
00:44:40.789 --> 00:44:48.340
<v Speaker 5>Wow. Like anything Gauss, like the Gaussian distribution, Gaussian blur,

855
00:44:48.360 --> 00:44:50.280
<v Speaker 5>all those things are all the same person.

856
00:44:50.619 --> 00:44:52.940
<v Speaker 2>Wow. Right. Clever guy.

857
00:44:53.079 --> 00:44:53.320
<v Speaker 1>Yeah.

858
00:44:53.539 --> 00:44:58.119
<v Speaker 5>So one way to compute errors is you compute the

859
00:44:58.159 --> 00:45:00.610
<v Speaker 5>same result in two different ways, one more accurate than.

860
00:45:00.489 --> 00:45:00.960
<v Speaker 3>The other one.

861
00:45:01.460 --> 00:45:02.599
<v Speaker 4>And then you compare results.

862
00:45:03.039 --> 00:45:03.260
<v Speaker 3>Right.

863
00:45:03.760 --> 00:45:08.300
<v Speaker 5>And Gauss-Krohn wrote is a way of doing that with

864
00:45:08.400 --> 00:45:13.150
<v Speaker 5>reusing some of the calculations you've done so that you've,

865
00:45:14.550 --> 00:45:17.949
<v Speaker 5>so to minimize extra work. So that's what that is.

866
00:45:18.289 --> 00:45:21.349
<v Speaker 2>No, and I appreciate that. So now I'm thinking the

867
00:45:21.369 --> 00:45:24.489
<v Speaker 2>software engineer in me is like, okay. We measure this

868
00:45:24.570 --> 00:45:26.849
<v Speaker 2>particular problem space in two different ways and then use

869
00:45:26.869 --> 00:45:28.809
<v Speaker 2>an integrator to get what we think is the most

870
00:45:28.909 --> 00:45:29.989
<v Speaker 2>accurate possible answer.

871
00:45:30.150 --> 00:45:30.510
<v Speaker 4>That's right.

872
00:45:30.670 --> 00:45:32.889
<v Speaker 2>Yeah, smart. And it's good to have a tool. You

873
00:45:32.909 --> 00:45:34.880
<v Speaker 2>could try and code your way around that. You'd probably

874
00:45:34.889 --> 00:45:36.219
<v Speaker 2>screw it up. Use the tool.

875
00:45:36.340 --> 00:45:36.739
<v Speaker 4>That's right.

876
00:45:36.989 --> 00:45:41.239
<v Speaker 5>And so that particular one is used for what's called

877
00:45:41.260 --> 00:45:47.360
<v Speaker 5>adaptive integration, which means if you have a curve that's

878
00:45:47.440 --> 00:45:51.739
<v Speaker 5>really oscillating a lot, like changes very quickly, if you

879
00:45:51.989 --> 00:45:54.750
<v Speaker 5>try to approximate it with a few points, you're going

880
00:45:54.769 --> 00:45:59.250
<v Speaker 5>to be way off. And so by computing the error,

881
00:45:59.289 --> 00:46:03.369
<v Speaker 5>you can say, okay, we're good in this part of

882
00:46:03.389 --> 00:46:06.590
<v Speaker 5>the function, but here we need to dig deeper and

883
00:46:06.639 --> 00:46:11.360
<v Speaker 5>be more precise. So you do a recalculation there. What's

884
00:46:11.420 --> 00:46:14.780
<v Speaker 5>the error now? And you keep doing that until your

885
00:46:14.800 --> 00:46:16.239
<v Speaker 5>result is accurate enough.

886
00:46:16.900 --> 00:46:17.880
<v Speaker 2>Accurate enough.

887
00:46:18.840 --> 00:46:23.860
<v Speaker 1>I imagine FFTs, Fast Fourier transforms. I only know a

888
00:46:23.889 --> 00:46:26.280
<v Speaker 1>lot of this stuff because, you know, the Gaussian blur

889
00:46:26.320 --> 00:46:28.579
<v Speaker 1>you use in Photoshop and other things like that. And

890
00:46:28.659 --> 00:46:33.639
<v Speaker 1>the FFTs we use in noise reduction algorithms in Adobe Audition.

891
00:46:34.199 --> 00:46:37.380
<v Speaker 1>And I've been using them ever since I've been recording

892
00:46:37.420 --> 00:46:44.440
<v Speaker 1>with digital audio. But from what I understand about noise reduction,

893
00:46:44.480 --> 00:46:48.880
<v Speaker 1>it uses a fast Fourier transform and you select the

894
00:46:48.920 --> 00:46:52.019
<v Speaker 1>number of points. And what it does in the audio

895
00:46:52.059 --> 00:46:56.409
<v Speaker 1>world is it acts as, let's say it's 8,000 points.

896
00:46:57.050 --> 00:47:04.750
<v Speaker 1>It's an 8,000 band compressor, right? So you have a

897
00:47:04.769 --> 00:47:09.010
<v Speaker 1>compressor with three bands, high, low, and mid, or high, mid,

898
00:47:09.070 --> 00:47:12.730
<v Speaker 1>and low, whatever. But if you break that up into

899
00:47:13.150 --> 00:47:18.650
<v Speaker 1>the frequency spectrum into 8,000 bands, then it can compress

900
00:47:19.170 --> 00:47:23.829
<v Speaker 1>each band. band individually using a fast Fourier transform I

901
00:47:23.869 --> 00:47:26.230
<v Speaker 1>don't know how but I know it works.

902
00:47:27.590 --> 00:47:35.500
<v Speaker 5>Fourier transform basically turns a signal into its frequencies and

903
00:47:35.539 --> 00:47:37.940
<v Speaker 5>so then you can filter out high frequencies or mid

904
00:47:38.000 --> 00:47:44.199
<v Speaker 5>or low or like apply equalizers and then transform back

905
00:47:45.019 --> 00:47:48.119
<v Speaker 5>to get your new signal with the high frequencies filtered

906
00:47:48.219 --> 00:47:48.769
<v Speaker 5>out Right.

907
00:47:48.829 --> 00:47:51.269
<v Speaker 1>Makes a lot of sense, especially we use an 8K

908
00:47:51.789 --> 00:47:55.210
<v Speaker 1>FFT size for noise reduction. Always have. And it seemed

909
00:47:55.230 --> 00:47:58.559
<v Speaker 1>to be the sweet spot for audio, for speaking anyway.

910
00:47:59.440 --> 00:48:00.519
<v Speaker 2>Just one of those things.

911
00:48:00.920 --> 00:48:01.119
<v Speaker 5>Yeah.

912
00:48:01.360 --> 00:48:04.579
<v Speaker 2>Wow. Should we, some other areas to explore here, Jeff?

913
00:48:04.619 --> 00:48:05.949
<v Speaker 2>What do you want to, what would you like to

914
00:48:05.989 --> 00:48:09.429
<v Speaker 2>talk about? Maybe some Jebyshev polynomials?

915
00:48:09.869 --> 00:48:12.349
<v Speaker 4>Jebyshev is one of the luckiest people in the world.

916
00:48:14.230 --> 00:48:16.219
<v Speaker 2>This is a mathematician, I presume.

917
00:48:16.360 --> 00:48:21.960
<v Speaker 5>He's a mathematician. I'm not even sure which century he's from.

918
00:48:22.260 --> 00:48:22.500
<v Speaker 2>Right.

919
00:48:22.880 --> 00:48:27.719
<v Speaker 5>But he played with a certain type of polynomials that

920
00:48:28.929 --> 00:48:32.329
<v Speaker 5>looked interesting. And so they ended up being named after him.

921
00:48:33.449 --> 00:48:37.429
<v Speaker 5>And these days they're used all over the place. Right.

922
00:48:38.349 --> 00:48:43.559
<v Speaker 5>Because they're defining property. What makes them useful is that

923
00:48:44.539 --> 00:48:49.539
<v Speaker 5>They're very even. They oscillate, yes, but they oscillate within

924
00:48:49.559 --> 00:48:55.039
<v Speaker 5>a narrow band, and it's the narrowest possible band. Oh, interesting.

925
00:48:55.340 --> 00:49:02.170
<v Speaker 5>JPL uses that for their planetary models. They will give

926
00:49:02.269 --> 00:49:08.789
<v Speaker 5>out positions of planets and asteroids and everything as a

927
00:49:08.949 --> 00:49:18.429
<v Speaker 5>series of Cheverchev polynomials. because you can very accurately model

928
00:49:19.289 --> 00:49:23.650
<v Speaker 5>basically any curve using them. And what I was saying

929
00:49:23.710 --> 00:49:32.510
<v Speaker 5>about controlling the growth of your errors, they're extremely favorable

930
00:49:32.550 --> 00:49:36.789
<v Speaker 5>that way. So you will get minimal error propagation, which is, again, why.

931
00:49:36.650 --> 00:49:39.650
<v Speaker 2>They're so common. I looked him up. He was a

932
00:49:39.710 --> 00:49:40.340
<v Speaker 2>Russian from the 1800s.

933
00:49:40.389 --> 00:49:40.610
<v Speaker 1>Yeah.

934
00:49:40.630 --> 00:49:45.670
<v Speaker 2>Sounds right. That's a lot of mathematicians, actually, I think.

935
00:49:45.889 --> 00:49:48.630
<v Speaker 2>And he was at a time of defining all this stuff. So, again,

936
00:49:49.230 --> 00:49:51.510
<v Speaker 2>you've come back to this a few times, Jeff. It's

937
00:49:51.550 --> 00:49:55.449
<v Speaker 2>like you're trying to work through a set of data

938
00:49:55.469 --> 00:49:58.360
<v Speaker 2>and get an aggregate or some kind of valuation from

939
00:49:58.400 --> 00:49:59.880
<v Speaker 2>it without introducing a lot of error.

940
00:50:00.059 --> 00:50:00.260
<v Speaker 4>Yeah.

941
00:50:00.320 --> 00:50:02.159
<v Speaker 2>And these are the kinds of tools you use to

942
00:50:02.179 --> 00:50:02.940
<v Speaker 2>try and keep the errors.

943
00:50:03.019 --> 00:50:06.900
<v Speaker 5>And the problem is, too– As I said earlier, as

944
00:50:06.940 --> 00:50:10.420
<v Speaker 5>soon as you bring a real world number into your

945
00:50:10.460 --> 00:50:14.510
<v Speaker 5>computing system, you have some deviation from reality. And there's

946
00:50:14.550 --> 00:50:15.489
<v Speaker 5>another famous.

947
00:50:15.650 --> 00:50:17.889
<v Speaker 2>Because the computer does an approximation on it.

948
00:50:17.969 --> 00:50:18.550
<v Speaker 4>Yeah.

949
00:50:19.329 --> 00:50:24.010
<v Speaker 5>There's another famous and rather tragic example from the Gulf

950
00:50:24.030 --> 00:50:28.610
<v Speaker 5>War in 1991. There was a Scud missile heading towards

951
00:50:28.630 --> 00:50:34.070
<v Speaker 5>a U.S. base in Tehran in Saudi Arabia. And they

952
00:50:34.090 --> 00:50:38.550
<v Speaker 5>had a Patriot system. for air defense, but it failed,

953
00:50:38.630 --> 00:50:44.539
<v Speaker 5>it missed. And the reason it missed was round off error.

954
00:50:45.400 --> 00:50:50.260
<v Speaker 5>They were counting time by incrementing a counter every tenth

955
00:50:50.280 --> 00:50:53.980
<v Speaker 5>of a second. So after about four days, the counter

956
00:50:54.019 --> 00:50:57.630
<v Speaker 5>was at something like three and a half million. And

957
00:50:57.670 --> 00:51:03.849
<v Speaker 5>then they computed the current time by multiplying that counter

958
00:51:03.869 --> 00:51:09.989
<v Speaker 5>by by 0.1. 0.1 is not a floating point number,

959
00:51:10.090 --> 00:51:12.929
<v Speaker 5>not a binary floating point number. So there's this very

960
00:51:13.010 --> 00:51:18.829
<v Speaker 5>tiny error there of about 95 nanoseconds. But when you

961
00:51:18.869 --> 00:51:24.010
<v Speaker 5>multiply 9 to 5 nanoseconds by 3.5 million, you get

962
00:51:24.050 --> 00:51:28.360
<v Speaker 5>about three-tenths of a second. And missiles fly very fast

963
00:51:28.380 --> 00:51:31.119
<v Speaker 5>and cover a lot of ground in that time. And

964
00:51:31.179 --> 00:51:35.949
<v Speaker 5>so the interceptor missed And unfortunately, I think 28 people

965
00:51:35.969 --> 00:51:41.400
<v Speaker 5>died in that attack. So, it can have very serious consequences.

966
00:51:41.940 --> 00:51:42.599
<v Speaker 2>Yeah, no kidding.

967
00:51:42.880 --> 00:51:45.960
<v Speaker 1>We were talking about in the news stories, Boeing and

968
00:51:45.980 --> 00:51:50.300
<v Speaker 1>the problems that they had. And I wonder if, I mean,

969
00:51:50.320 --> 00:51:56.969
<v Speaker 1>it was obvious incompetence in a culture of, you know,

970
00:51:57.090 --> 00:52:00.170
<v Speaker 1>not reporting the truth and trying to appease the higher-ups

971
00:52:00.230 --> 00:52:03.780
<v Speaker 1>and all that stuff and sycophancy, but I wonder if

972
00:52:04.119 --> 00:52:10.539
<v Speaker 1>any of that stemmed from having bad algorithms or bad math.

973
00:52:11.440 --> 00:52:11.800
<v Speaker 2>Do you know?

974
00:52:12.840 --> 00:52:20.920
<v Speaker 5>I have no idea. There have been mistakes with the

975
00:52:20.960 --> 00:52:24.699
<v Speaker 5>Ariane rocket and the example you gave too earlier.

976
00:52:24.780 --> 00:52:26.920
<v Speaker 2>Sure, which I think is a really interesting one just

977
00:52:26.940 --> 00:52:30.010
<v Speaker 2>because they– changed the precision on the number and then

978
00:52:30.369 --> 00:52:32.650
<v Speaker 2>introduced it into a different rocket that behaved differently and

979
00:52:32.829 --> 00:52:35.909
<v Speaker 2>that number suddenly was a huge problem. And more importantly,

980
00:52:35.929 --> 00:52:39.409
<v Speaker 2>the software doesn't get an overflow and the software just

981
00:52:39.449 --> 00:52:42.269
<v Speaker 2>treats it as a number still, not acknowledging that, no,

982
00:52:42.289 --> 00:52:44.920
<v Speaker 2>that's not a valid number and you should stop what

983
00:52:44.940 --> 00:52:46.539
<v Speaker 2>you're doing. Whatever you do from here is going to

984
00:52:46.579 --> 00:52:52.179
<v Speaker 2>be worse, not better. The MCAS story, which was part

985
00:52:52.199 --> 00:52:54.760
<v Speaker 2>of that 737 MAX problem, is a complicated one and

986
00:52:54.800 --> 00:52:59.079
<v Speaker 2>probably none Appropriate here, but yeah, it was the decision

987
00:52:59.159 --> 00:53:03.039
<v Speaker 2>on hardware and software and how you communicated to the

988
00:53:03.099 --> 00:53:07.429
<v Speaker 2>pilots combined that creates that situation.

989
00:53:07.849 --> 00:53:13.710
<v Speaker 5>Speaking of radiation doses, there's also a story about a

990
00:53:13.789 --> 00:53:20.880
<v Speaker 5>system to administer the radiation where some people got bad

991
00:53:20.920 --> 00:53:26.019
<v Speaker 5>burns and it turned out They looked into it, maybe

992
00:53:26.079 --> 00:53:28.619
<v Speaker 5>as the operator not experienced. And no, the operator is

993
00:53:28.659 --> 00:53:32.179
<v Speaker 5>very experienced. And actually that turned out to be the

994
00:53:32.219 --> 00:53:36.940
<v Speaker 5>problem because they entered the information so quickly that the

995
00:53:36.980 --> 00:53:42.360
<v Speaker 5>system couldn't keep up and skipped an input. And that

996
00:53:42.420 --> 00:53:50.699
<v Speaker 5>led to overdoses. So there's all kinds of like the

997
00:53:50.739 --> 00:53:53.800
<v Speaker 5>numerical part is one thing, but there's also the good

998
00:53:54.000 --> 00:54:01.789
<v Speaker 5>software practices of making allowances for exceptions and treating exceptional

999
00:54:01.829 --> 00:54:05.010
<v Speaker 5>conditions adequately and correctly.

1000
00:54:05.269 --> 00:54:10.949
<v Speaker 2>Yeah. Yeah. It's interesting to try and write software that

1001
00:54:11.010 --> 00:54:13.079
<v Speaker 2>contends with that kind of thing because the consequence was

1002
00:54:13.119 --> 00:54:17.500
<v Speaker 2>so serious. You know, they're just sort of recognizing that

1003
00:54:17.559 --> 00:54:23.449
<v Speaker 2>the data doesn't make sense. What's reasonable. before it actually runs.

1004
00:54:24.369 --> 00:54:30.030
<v Speaker 2>The Therac-25 issue, that was the radiation treatment where if

1005
00:54:30.050 --> 00:54:33.630
<v Speaker 2>you entered the data too quickly, software went into a

1006
00:54:33.650 --> 00:54:34.309
<v Speaker 2>race condition.

1007
00:54:35.250 --> 00:54:38.650
<v Speaker 5>And one thing they did, I believe, in that instance

1008
00:54:38.789 --> 00:54:46.179
<v Speaker 5>is the previous version of that equipment had hardware guards. Right.

1009
00:54:46.380 --> 00:54:50.239
<v Speaker 5>So if the radiation was too high or voltage or

1010
00:54:50.320 --> 00:54:54.949
<v Speaker 5>whichever way they measured it, it would refuse to do that.

1011
00:54:55.449 --> 00:54:57.510
<v Speaker 5>But they took those off and they replaced them with

1012
00:54:57.550 --> 00:55:01.150
<v Speaker 5>software tests. That obviously didn't work.

1013
00:55:01.550 --> 00:55:03.929
<v Speaker 2>Yeah, obviously created other consequences, no question.

1014
00:55:04.329 --> 00:55:08.449
<v Speaker 1>So your point is well taken. Math is kind of important.

1015
00:55:08.489 --> 00:55:14.780
<v Speaker 2>To get right. Well, yeah, precision. I don't know that

1016
00:55:14.820 --> 00:55:18.920
<v Speaker 2>we even now actually understand fully the compromises that were

1017
00:55:18.960 --> 00:55:21.019
<v Speaker 2>made to store numbers in computers efficiently.

1018
00:55:22.679 --> 00:55:26.599
<v Speaker 5>They did a pretty good job, actually, with the standard

1019
00:55:28.579 --> 00:55:37.769
<v Speaker 5>IEEE 754 format. In some ways, it's quite ingenious. The numerical,

1020
00:55:37.929 --> 00:55:40.829
<v Speaker 5>if you compare the bit value, if you look at

1021
00:55:40.869 --> 00:55:46.340
<v Speaker 5>it as a 64-bit integer, it is in the correct

1022
00:55:46.380 --> 00:55:50.820
<v Speaker 5>sort order. So you can compare the numbers as integers

1023
00:55:50.840 --> 00:55:54.710
<v Speaker 5>and and have the correct sort order, except for.

1024
00:55:54.630 --> 00:56:00.090
<v Speaker 4>The not a number cases, which are an annoyance.

1025
00:56:01.250 --> 00:56:06.260
<v Speaker 5>And there's another problem that's not obvious at first sight.

1026
00:56:07.940 --> 00:56:10.760
<v Speaker 5>Because of the format, you always have an integer times

1027
00:56:10.800 --> 00:56:14.219
<v Speaker 5>a power of two. And so there are as many

1028
00:56:14.619 --> 00:56:18.469
<v Speaker 5>floating point numbers between one and two as there are

1029
00:56:18.530 --> 00:56:23.380
<v Speaker 5>between two and four, or four and eight. in 16,

1030
00:56:23.380 --> 00:56:29.099
<v Speaker 5>so they've become scarcer and sparser, the more, the larger

1031
00:56:29.119 --> 00:56:31.840
<v Speaker 5>your numbers get, and they get closer and closer together.

1032
00:56:31.860 --> 00:56:34.780
<v Speaker 4>The smaller your numbers get.

1033
00:56:36.280 --> 00:56:38.400
<v Speaker 5>And then the question is, well, what do you do

1034
00:56:38.440 --> 00:56:43.570
<v Speaker 5>close to zero? And the solution they found was, well,

1035
00:56:44.489 --> 00:56:48.829
<v Speaker 5>let's just switch from a floating point format into two

1036
00:56:49.309 --> 00:56:52.500
<v Speaker 5>times a power of two. to a fixed point format.

1037
00:56:53.860 --> 00:57:01.349
<v Speaker 5>And so all the numbers with exponent zero are called

1038
00:57:01.630 --> 00:57:07.050
<v Speaker 5>subnormal numbers and they are a fixed point format. So

1039
00:57:07.070 --> 00:57:11.610
<v Speaker 5>they are that number interpreted as an integer times, I

1040
00:57:11.630 --> 00:57:12.329
<v Speaker 5>think it's two to.

1041
00:57:12.250 --> 00:57:13.250
<v Speaker 4>The power minus 1,075.

1042
00:57:13.250 --> 00:57:19.590
<v Speaker 5>So that when you get to zero, You have what

1043
00:57:19.610 --> 00:57:22.980
<v Speaker 5>they call gradual underflow. You don't just cut to zero

1044
00:57:23.000 --> 00:57:27.579
<v Speaker 5>straight away. You have like a little bit of breathing

1045
00:57:27.619 --> 00:57:29.000
<v Speaker 5>room to get there.

1046
00:57:29.820 --> 00:57:31.900
<v Speaker 2>Yeah, this is way more complicated than you think about.

1047
00:57:31.920 --> 00:57:33.409
<v Speaker 2>Most of the time we just use numbers and don't

1048
00:57:33.429 --> 00:57:35.949
<v Speaker 2>worry about it. Sometimes you want integers and sometimes you

1049
00:57:35.969 --> 00:57:40.829
<v Speaker 2>want floating point and you're fine. But then this is here.

1050
00:57:41.010 --> 00:57:43.550
<v Speaker 2>I've just looked at this huge roster of capabilities that

1051
00:57:43.590 --> 00:57:47.019
<v Speaker 2>are in all these exception cases. All right. How do

1052
00:57:47.039 --> 00:57:49.039
<v Speaker 2>people figure out they need your tool, Jeff?

1053
00:57:49.280 --> 00:57:56.050
<v Speaker 5>Well, most people just need some kind of calculation where

1054
00:57:56.090 --> 00:58:01.710
<v Speaker 5>they need the level of extraction that our library provides.

1055
00:58:02.250 --> 00:58:06.630
<v Speaker 5>So if you have to solve a set of equations, okay,

1056
00:58:06.650 --> 00:58:10.230
<v Speaker 5>you can do it all yourself and try to figure

1057
00:58:10.250 --> 00:58:11.909
<v Speaker 5>out how to do it efficiently.

1058
00:58:11.929 --> 00:58:12.389
<v Speaker 2>Mm-hmm.

1059
00:58:12.869 --> 00:58:15.150
<v Speaker 4>Or you can use my library and just say, okay,

1060
00:58:15.170 --> 00:58:16.860
<v Speaker 4>these are a number of delegates.

1061
00:58:17.199 --> 00:58:19.300
<v Speaker 2>And to be clear, your library is not free.

1062
00:58:19.619 --> 00:58:20.059
<v Speaker 4>No, it's not.

1063
00:58:20.360 --> 00:58:22.860
<v Speaker 2>Yeah. And not that I have a problem with that.

1064
00:58:22.880 --> 00:58:24.460
<v Speaker 2>It makes sense. It sounds like you've done a ton

1065
00:58:24.500 --> 00:58:28.380
<v Speaker 2>of work. And it's worth it for the folks. If

1066
00:58:28.420 --> 00:58:30.070
<v Speaker 2>you need it, you need it. And you should pay

1067
00:58:30.090 --> 00:58:30.239
<v Speaker 2>for it.

1068
00:58:30.250 --> 00:58:31.769
<v Speaker 1>If you need it, you need it. That's right.

1069
00:58:31.789 --> 00:58:32.150
<v Speaker 4>That's right.

1070
00:58:33.349 --> 00:58:35.369
<v Speaker 2>This is literally a tool to save lives and stop

1071
00:58:35.389 --> 00:58:36.809
<v Speaker 2>spacecraft from exploding. Yeah.

1072
00:58:37.969 --> 00:58:42.130
<v Speaker 1>Yeah. talk about performance a little bit. Uh, some of the,

1073
00:58:42.269 --> 00:58:45.349
<v Speaker 1>I mean, the.net framework has gotten more and more performant

1074
00:58:45.369 --> 00:58:48.880
<v Speaker 1>with every release. Was there ever a time when you considered,

1075
00:58:49.139 --> 00:58:51.699
<v Speaker 1>you know, dropping to assembler to do stuff because it

1076
00:58:51.760 --> 00:58:52.800
<v Speaker 1>wasn't fast enough?

1077
00:58:52.940 --> 00:58:56.440
<v Speaker 5>Well, we've been doing this for 20 years and, um,

1078
00:58:58.199 --> 00:59:05.400
<v Speaker 5>we've seen a few performance, uh, concepts come and go.

1079
00:59:05.400 --> 00:59:07.760
<v Speaker 4>Uh, when, uh.

1080
00:59:07.769 --> 00:59:14.420
<v Speaker 5>The uh, task parallel library was first introduced around 2010,

1081
00:59:14.420 --> 00:59:18.039
<v Speaker 5>that seemed to be the thing to speed things up. Uh,

1082
00:59:18.260 --> 00:59:21.099
<v Speaker 5>turned out there was so much overhead that it was

1083
00:59:21.239 --> 00:59:26.500
<v Speaker 5>limited in what we could do with it. Um, so

1084
00:59:27.380 --> 00:59:31.530
<v Speaker 5>one example of where I did, um, role my own,

1085
00:59:31.590 --> 00:59:38.130
<v Speaker 5>so to speak, is big integer. The initial implementation that

1086
00:59:38.300 --> 00:59:46.260
<v Speaker 5>shift with. NET 4.0 in 2010 was adequate for small sizes,

1087
00:59:46.300 --> 00:59:52.099
<v Speaker 5>but as soon as your numbers got large, it got

1088
00:59:52.900 --> 00:59:58.440
<v Speaker 5>slower and slower. And so we did some work there

1089
00:59:58.480 --> 01:00:03.230
<v Speaker 5>to make a faster version of that, But I really

1090
01:00:03.269 --> 01:00:04.150
<v Speaker 5>have to give it to the.

1091
01:00:04.369 --> 01:00:05.010
<v Speaker 4>NET guys.

1092
01:00:05.230 --> 01:00:08.550
<v Speaker 5>In recent years, they've done so much to bring their

1093
01:00:08.590 --> 01:00:17.619
<v Speaker 5>numerical side of things forward into what's actually now to

1094
01:00:17.659 --> 01:00:21.619
<v Speaker 5>the point where we're considering giving up our big integer

1095
01:00:21.980 --> 01:00:22.860
<v Speaker 5>and just using the.

1096
01:00:22.960 --> 01:00:24.079
<v Speaker 4>NET standard version.

1097
01:00:25.500 --> 01:00:28.989
<v Speaker 1>Do you utilize span of t? I know that's a

1098
01:00:29.050 --> 01:00:29.909
<v Speaker 1>huge win.

1099
01:00:29.929 --> 01:00:31.309
<v Speaker 4>We use it all the time.

1100
01:00:31.630 --> 01:00:31.849
<v Speaker 1>Yeah.

1101
01:00:31.989 --> 01:00:32.329
<v Speaker 2>Oh, wow.

1102
01:00:32.550 --> 01:00:36.150
<v Speaker 5>All the time because, well, one of the advantages, too,

1103
01:00:36.349 --> 01:00:41.360
<v Speaker 5>is a span can be over managed memory, but it

1104
01:00:41.380 --> 01:00:44.980
<v Speaker 5>can also be over unmanaged memory, like anything you get

1105
01:00:45.039 --> 01:00:53.119
<v Speaker 5>from a third-party library or application. And so using span

1106
01:00:53.239 --> 01:00:58.510
<v Speaker 5>allows us to use the same code for– Managed memory,

1107
01:00:59.329 --> 01:01:02.670
<v Speaker 5>so vectors stored in managed memory or in native memory.

1108
01:01:03.829 --> 01:01:07.230
<v Speaker 5>And then the performance, too, it's very compact. It lets you,

1109
01:01:08.170 --> 01:01:11.469
<v Speaker 5>and it's very much optimized more and more. It's actually

1110
01:01:11.489 --> 01:01:16.760
<v Speaker 5>interesting when we look at our test suite. You can

1111
01:01:16.860 --> 01:01:18.690
<v Speaker 5>see we still support.

1112
01:01:18.679 --> 01:01:20.059
<v Speaker 4>NET 4.6.2 and. NET standards.

1113
01:01:25.139 --> 01:01:27.739
<v Speaker 5>And you can see in our execution times of the

1114
01:01:27.780 --> 01:01:31.219
<v Speaker 5>test suite how long it takes for each edition.

1115
01:01:32.570 --> 01:01:33.090
<v Speaker 4>To run.

1116
01:01:34.250 --> 01:01:39.849
<v Speaker 5>And without even changing any code, you can see a

1117
01:01:39.889 --> 01:01:45.300
<v Speaker 5>progression by like every edition is like 10% faster overall.

1118
01:01:46.099 --> 01:01:47.719
<v Speaker 5>And it's just a runtime that does that.

1119
01:01:47.940 --> 01:01:51.820
<v Speaker 1>Yep. And overhead, memory overhead has also gone way down.

1120
01:01:52.039 --> 01:01:52.880
<v Speaker 4>Yeah.

1121
01:01:53.119 --> 01:01:56.530
<v Speaker 1>Just wonderful. Well, it's good to see that you picked

1122
01:01:56.550 --> 01:01:57.190
<v Speaker 1>the right horse.

1123
01:01:58.230 --> 01:01:59.489
<v Speaker 2>Yeah, 20-plus year run.

1124
01:02:00.030 --> 01:02:01.170
<v Speaker 1>Yeah.

1125
01:02:01.409 --> 01:02:04.989
<v Speaker 5>I'm very impressed with the work they've been doing. And

1126
01:02:05.050 --> 01:02:12.469
<v Speaker 5>also in the library itself, when, again, Complex Numbers first.

1127
01:02:12.269 --> 01:02:13.800
<v Speaker 4>Came out, also in.

1128
01:02:13.429 --> 01:02:20.849
<v Speaker 5>NET 4, it was really like you're– textbook or school

1129
01:02:20.869 --> 01:02:26.280
<v Speaker 5>book implementation. It was just the formulas without really understanding

1130
01:02:26.340 --> 01:02:28.559
<v Speaker 5>the intricacies of.

1131
01:02:30.099 --> 01:02:31.559
<v Speaker 4>How to get precise results.

1132
01:02:32.699 --> 01:02:36.219
<v Speaker 5>Even in there, when you computed the square root of

1133
01:02:36.260 --> 01:02:41.949
<v Speaker 5>minus one, which should be purely imaginary I, because that's

1134
01:02:41.969 --> 01:02:46.550
<v Speaker 5>the definition of the imaginary unit, it was off, it

1135
01:02:46.590 --> 01:02:52.150
<v Speaker 5>wasn't correct. But in the last couple of years, and

1136
01:02:52.210 --> 01:02:56.650
<v Speaker 5>now with. NET 11, they've done a ton of work

1137
01:02:56.730 --> 01:03:01.650
<v Speaker 5>to clean that up. And we're not quite ready to

1138
01:03:01.710 --> 01:03:10.280
<v Speaker 5>give up our complex number implementation, but we're seriously considering it. So, again,

1139
01:03:10.920 --> 01:03:12.500
<v Speaker 5>great job,. NET team.

1140
01:03:12.679 --> 01:03:14.280
<v Speaker 2>We should pass it along to Steve and Todd. Those

1141
01:03:14.320 --> 01:03:15.420
<v Speaker 2>guys are freaking brilliant.

1142
01:03:15.619 --> 01:03:19.429
<v Speaker 1>They are, yeah. Well, Jeffrey, thanks for hanging with us.

1143
01:03:19.929 --> 01:03:22.130
<v Speaker 1>We went a little bit over, but that's only because

1144
01:03:22.190 --> 01:03:24.769
<v Speaker 1>we had such a long intro. But it was great

1145
01:03:24.849 --> 01:03:29.219
<v Speaker 1>just going through your interview without an interruption. And this

1146
01:03:29.320 --> 01:03:32.860
<v Speaker 1>is awesome stuff. And I'm actually a little impressed with

1147
01:03:32.960 --> 01:03:34.840
<v Speaker 1>both Richard and I for keeping up with you.

1148
01:03:35.980 --> 01:03:37.860
<v Speaker 2>I think Jeff is a great explainer.

1149
01:03:37.920 --> 01:03:38.760
<v Speaker 1>You are, yeah.

1150
01:03:38.800 --> 01:03:39.840
<v Speaker 2>Which I really appreciate.

1151
01:03:40.679 --> 01:03:41.119
<v Speaker 4>Thank you.

1152
01:03:41.460 --> 01:03:43.789
<v Speaker 1>And good luck in the future. And thanks very much.

1153
01:03:43.849 --> 01:03:44.269
<v Speaker 5>Thank you.

1154
01:03:44.309 --> 01:03:47.889
<v Speaker 1>And we will talk to you dear listener next time on.

1155
01:03:47.599 --> 01:03:48.619
<v Speaker 1>NET Rocks.

1156
01:04:10.340 --> 01:04:13.039
<v Speaker 3>NET Rocks is brought to you by Franklin's Net and

1157
01:04:13.099 --> 01:04:17.800
<v Speaker 3>produced by Plop Studios. a full-service audio, video, and post-production

1158
01:04:17.840 --> 01:04:21.849
<v Speaker 3>facility located physically in New London, Connecticut, and, of course,

1159
01:04:21.909 --> 01:04:30.050
<v Speaker 3>in the cloud, online at pwop.com. Visit our website at dotnetrocks.com

1160
01:04:30.489 --> 01:04:35.170
<v Speaker 3>for RSS feeds, downloads, mobile apps, comments, and access to

1161
01:04:35.190 --> 01:04:38.590
<v Speaker 3>the full archives going back to show number one, recorded

1162
01:04:38.630 --> 01:04:42.489
<v Speaker 3>in September 2002. And make sure you check out our sponsors.

1163
01:04:42.769 --> 01:04:46.139
<v Speaker 3>They keep us in business. Now go write some code.

1164
01:04:46.179 --> 01:04:46.820
<v Speaker 1>See you next time.
