1
00:00:00,000 --> 00:00:02,160
Shall we start with the usual talk about

2
00:00:02,160 --> 00:00:02,759
the weather?

3
00:00:02,819 --> 00:00:07,799
Well, my weather has been different to

4
00:00:07,799 --> 00:00:09,359
yours for the last week because I've

5
00:00:09,359 --> 00:00:10,439
actually just got back from a little

6
00:00:10,439 --> 00:00:12,119
holiday, which is very nice.

7
00:00:12,179 --> 00:00:15,779
I went to Norway last week and the

8
00:00:15,779 --> 00:00:16,559
weather was okay.

9
00:00:16,620 --> 00:00:18,480
It was nice enough, but we did have a few

10
00:00:18,480 --> 00:00:20,399
rain showers, but I don't think that's

11
00:00:20,399 --> 00:00:22,019
what you've been experiencing in the

12
00:00:22,019 --> 00:00:22,559
south of France.

13
00:00:23,219 --> 00:00:23,940
No, I haven't.

14
00:00:24,000 --> 00:00:25,620
But also you, right, at home, it was

15
00:00:25,620 --> 00:00:26,820
actually quite hot, wasn't it?

16
00:00:26,879 --> 00:00:29,039
in the UK during during your time away.

17
00:00:29,100 --> 00:00:29,820
It was.

18
00:00:29,820 --> 00:00:33,960
They had very hot weather here, which I

19
00:00:33,960 --> 00:00:37,079
avoided. nicely done.

20
00:00:37,140 --> 00:00:39,719
Yeah, it was good.

21
00:00:39,780 --> 00:00:42,719
I mean, not to say that it wasn't on the

22
00:00:42,719 --> 00:00:45,479
so I was on a cruise and on the sea days

23
00:00:45,479 --> 00:00:47,039
it was actually very nice weather enough

24
00:00:47,039 --> 00:00:50,579
to, enough to sit out and, you know, go

25
00:00:50,579 --> 00:00:52,200
in the pools and stuff like that.

26
00:00:52,259 --> 00:00:53,820
So it was nice weather on the way there.

27
00:00:53,880 --> 00:00:56,640
But once we got there, we had mixed

28
00:00:56,640 --> 00:00:57,359
weather, I would say.

29
00:00:57,420 --> 00:00:58,320
Good stuff.

30
00:00:58,380 --> 00:01:00,119
Well, let's let's tick the weather chat

31
00:01:00,119 --> 00:01:01,859
off then. we've covered that.

32
00:01:01,920 --> 00:01:03,659
Weather chat done.

33
00:01:03,719 --> 00:01:05,760
Do we have anything else to talk about or

34
00:01:05,760 --> 00:01:06,900
is that that's the end?

35
00:01:06,959 --> 00:01:07,920
So we'll see you in a couple of weeks

36
00:01:07,920 --> 00:01:08,159
right?

37
00:01:08,219 --> 00:01:11,459
We do actually have topics, we're not

38
00:01:11,459 --> 00:01:12,599
we're not just stretching the show, are

39
00:01:12,599 --> 00:01:12,780
we?

40
00:01:12,900 --> 00:01:16,920
So one thing we could definitely talk

41
00:01:16,920 --> 00:01:19,140
about is the announcement of the

42
00:01:19,140 --> 00:01:21,180
ecosystems steering group.

43
00:01:21,239 --> 00:01:26,099
This actually happened quite a few weeks

44
00:01:26,099 --> 00:01:28,379
ago well before WWDC.

45
00:01:28,439 --> 00:01:33,599
And it's, as the name says, the ecosystem

46
00:01:33,599 --> 00:01:34,200
steering group.

47
00:01:34,260 --> 00:01:37,200
I was actually a bit, just going by the

48
00:01:37,200 --> 00:01:39,060
name, I thought it might actually overlap

49
00:01:39,060 --> 00:01:41,280
a bit more with, you know, what we're

50
00:01:41,280 --> 00:01:44,099
sort of doing with the Swift package

51
00:01:44,099 --> 00:01:45,299
index, looking at packages.

52
00:01:45,359 --> 00:01:49,079
But the mandate is actually to guide the

53
00:01:49,079 --> 00:01:51,540
evolution of widely used packages like

54
00:01:51,540 --> 00:01:55,500
Swift Foundation, specifically, uncover

55
00:01:55,500 --> 00:01:58,079
areas such as Swift PM dependency

56
00:01:58,079 --> 00:02:01,019
management, build systems, and tooling

57
00:02:01,019 --> 00:02:05,099
related to packages like Swift Format, and

58
00:02:05,099 --> 00:02:08,639
editing, including ID editor integrations

59
00:02:08,639 --> 00:02:11,939
CI, and deployment, and packages relating

60
00:02:11,939 --> 00:02:12,599
to testing.

61
00:02:12,659 --> 00:02:15,060
More package adjacent rather than

62
00:02:15,060 --> 00:02:17,280
directly.

63
00:02:17,280 --> 00:02:20,159
I think it even specifically calls out.

64
00:02:20,219 --> 00:02:22,740
Or I think in my head, like I came up

65
00:02:22,740 --> 00:02:25,080
with a summary, it's probably best

66
00:02:25,080 --> 00:02:28,319
thought of that it covers aspects around

67
00:02:28,319 --> 00:02:32,099
a healthy ecosystem, but not related to

68
00:02:32,099 --> 00:02:33,900
the contents of the ecosystem.

69
00:02:33,960 --> 00:02:37,740
So everything that sort of prepares the

70
00:02:37,740 --> 00:02:39,840
ecosystem to flourish, you know, to

71
00:02:39,840 --> 00:02:41,520
create the packages, but the packages

72
00:02:41,520 --> 00:02:43,439
themselves, unless they're really

73
00:02:43,439 --> 00:02:45,539
foundational, like Swift Foundation

74
00:02:45,539 --> 00:02:49,680
they're not specifically part of the

75
00:02:49,680 --> 00:02:52,199
mandate, you know, like unless, as I said

76
00:02:52,199 --> 00:02:54,840
they're very specific, foundational in

77
00:02:54,840 --> 00:02:56,580
that they are actually Swift Foundation

78
00:02:56,580 --> 00:03:01,080
or Swift Format, Swift Testing. sort of, I

79
00:03:01,080 --> 00:03:02,219
think the areas you could think of as

80
00:03:02,219 --> 00:03:05,520
where you probably want to have one

81
00:03:05,520 --> 00:03:08,819
canonical thing that handles it rather

82
00:03:08,819 --> 00:03:13,080
than, you know, like five different post

83
00:03:11,340 --> 00:03:13,560
gress drivers.

84
00:03:13,620 --> 00:03:16,620
Well, probably postcard drivers is also, I

85
00:03:16,620 --> 00:03:17,939
think it helps if you have multiple ones

86
00:03:17,939 --> 00:03:19,620
but like Swift Foundation.

87
00:03:19,740 --> 00:03:21,599
There isn't much point to have Foundation

88
00:03:21,599 --> 00:03:23,639
A and Foundation B, right, or Swift

89
00:03:23,639 --> 00:03:24,300
Testing is.

90
00:03:24,360 --> 00:03:27,419
I mean, sometimes there is benefit to

91
00:03:27,419 --> 00:03:30,060
have like variations of testing, but

92
00:03:30,060 --> 00:03:31,620
probably built more on top of a

93
00:03:31,620 --> 00:03:33,419
foundational package like Swift testing.

94
00:03:33,479 --> 00:03:34,020
Sure.

95
00:03:34,020 --> 00:03:36,659
So I think, you know, you get the drift

96
00:03:36,659 --> 00:03:38,099
what the what the idea is behind the

97
00:03:38,099 --> 00:03:39,000
behind the thing.

98
00:03:39,120 --> 00:03:41,699
I think it's also worth mentioning here

99
00:03:41,699 --> 00:03:45,419
that this is a steering group and not a

100
00:03:45,419 --> 00:03:46,620
workgroup.

101
00:03:46,680 --> 00:03:48,240
So, right, yeah.

102
00:03:48,360 --> 00:03:51,060
As far as I understand it, and I'm fairly

103
00:03:51,060 --> 00:03:53,819
sure that I'm right here, but I will be

104
00:03:53,819 --> 00:03:55,979
happy to be corrected if I'm incorrect.

105
00:03:56,099 --> 00:03:58,259
The way I believe they work is that

106
00:03:58,259 --> 00:04:00,719
steering groups sit slightly above the

107
00:04:00,719 --> 00:04:01,319
workgroup.

108
00:04:01,379 --> 00:04:04,680
So, it actually mentions in the um

109
00:04:04,680 --> 00:04:07,620
decision making part of the uh the the

110
00:04:07,620 --> 00:04:08,939
charter that they've put on the Swift

111
00:04:08,939 --> 00:04:12,960
website that the ecosystem steering group

112
00:04:12,960 --> 00:04:14,580
is commissioned by the Swift core teams

113
00:04:14,580 --> 00:04:17,160
to make decisions on its behalf because I

114
00:04:17,160 --> 00:04:19,680
do think that the Swift core team is

115
00:04:19,680 --> 00:04:23,459
quite overloaded with making decisions on

116
00:04:23,459 --> 00:04:25,800
other things from the other work groups

117
00:04:25,800 --> 00:04:26,459
and things like that.

118
00:04:26,519 --> 00:04:29,279
Like the Swift website workgroup, we

119
00:04:29,279 --> 00:04:31,620
quite often have to pass things past the

120
00:04:31,620 --> 00:04:32,819
Swift core team.

121
00:04:32,879 --> 00:04:34,439
And I have a feeling they're trying to

122
00:04:34,439 --> 00:04:36,120
delegate some of their responsibilities

123
00:04:36,120 --> 00:04:42,120
out into these steering groups that can

124
00:04:42,120 --> 00:04:45,240
take responsibility for some of the

125
00:04:45,240 --> 00:04:46,379
choices.

126
00:04:46,439 --> 00:04:48,720
And then there may be workgroups that sit

127
00:04:48,720 --> 00:04:50,819
underneath this steering group.

128
00:04:50,879 --> 00:04:52,800
Now, I may be slightly wrong with that

129
00:04:52,800 --> 00:04:53,699
but I think that's how it works.

130
00:04:53,759 --> 00:04:56,639
Yeah, I mean, in my mind, they're sort of

131
00:04:56,639 --> 00:04:58,079
the managers of the groups, right?

132
00:04:58,139 --> 00:05:01,500
In terms of a company set up, they'd be

133
00:05:01,500 --> 00:05:03,779
the managers and the working groups are

134
00:05:03,779 --> 00:05:09,959
the the team members, the rowers.

135
00:05:10,019 --> 00:05:11,699
Yeah, exactly.

136
00:05:11,759 --> 00:05:12,899
The CEO.

137
00:05:13,019 --> 00:05:14,220
Yeah.

138
00:05:14,279 --> 00:05:19,079
I mean, honestly, I'm I'm surprised by

139
00:05:19,079 --> 00:05:22,019
all the stuff that the court team

140
00:05:22,019 --> 00:05:23,939
traditionally was dealing with.

141
00:05:24,000 --> 00:05:26,819
Like, I, they must be in meetings old

142
00:05:26,819 --> 00:05:27,000
days.

143
00:05:27,060 --> 00:05:28,379
I feel like sometimes because just

144
00:05:28,379 --> 00:05:33,000
looking at the number of Swift evolution

145
00:05:33,000 --> 00:05:35,040
proposals that go through the pipelines

146
00:05:35,040 --> 00:05:36,540
and, you know, have to be discussed and

147
00:05:36,540 --> 00:05:40,800
you, because there's such foundational

148
00:05:40,800 --> 00:05:43,079
decisions, right, you can't just, on a

149
00:05:43,079 --> 00:05:45,060
whim on a Wednesday, sit, ah, right, we'll

150
00:05:45,060 --> 00:05:46,199
do it this way and then maybe we'll

151
00:05:46,199 --> 00:05:46,680
change our mind.

152
00:05:46,800 --> 00:05:49,680
No, this is these are decisions that need

153
00:05:49,680 --> 00:05:50,160
to last.

154
00:05:50,220 --> 00:05:51,480
They need to understand the test of

155
00:05:51,480 --> 00:05:51,779
time.

156
00:05:51,839 --> 00:05:56,699
And I'm really surprised how much they've

157
00:05:56,699 --> 00:05:57,360
been dealing with.

158
00:05:57,420 --> 00:05:59,759
And that has changed already, right?

159
00:05:59,819 --> 00:06:01,860
I think the language steering group, which

160
00:06:01,860 --> 00:06:05,100
is now taking that on that part of it, has

161
00:06:05,100 --> 00:06:07,500
been formed quite a while back.

162
00:06:07,560 --> 00:06:10,920
I believe, so that's dealing with that

163
00:06:10,920 --> 00:06:14,040
part now, and, you know, and then, I mean

164
00:06:14,040 --> 00:06:15,360
but there's so much other stuff that

165
00:06:15,360 --> 00:06:18,420
needs to be within Swift as a whole, that

166
00:06:18,420 --> 00:06:20,399
it's been really surprising how much

167
00:06:20,399 --> 00:06:22,620
actually was funnelled through the core

168
00:06:22,620 --> 00:06:26,699
group and the amount of responsibility

169
00:06:26,699 --> 00:06:29,519
that group has been dealing with quite

170
00:06:29,519 --> 00:06:30,060
quite remarkable.

171
00:06:30,120 --> 00:06:32,220
Yeah, and I think, as I say, I think

172
00:06:32,220 --> 00:06:35,639
that's been, been, in process with the

173
00:06:35,639 --> 00:06:36,959
language, there's actually three steering

174
00:06:36,959 --> 00:06:38,519
groups here, there's the language

175
00:06:38,519 --> 00:06:39,899
steering group, which she just talks

176
00:06:39,899 --> 00:06:41,279
about, there's the platform steering

177
00:06:41,279 --> 00:06:43,500
group, and there is now the ecosystem

178
00:06:43,500 --> 00:06:44,699
steering group as well.

179
00:06:44,759 --> 00:06:47,819
And I would not be surprised if we see

180
00:06:47,819 --> 00:06:48,000
more.

181
00:06:48,060 --> 00:06:49,620
That's great.

182
00:06:49,680 --> 00:06:52,920
Another thing I wanted to talk a bit a

183
00:06:52,920 --> 00:06:55,199
little bit about was I was going through

184
00:06:55,199 --> 00:06:58,379
the packages this week to find anything

185
00:06:58,379 --> 00:07:01,259
to talk about and noticed a couple of

186
00:07:01,259 --> 00:07:06,300
packages by the code edit team.

187
00:07:06,360 --> 00:07:09,420
And the packages that I noticed this week

188
00:07:09,420 --> 00:07:13,560
are welcome window and about window that

189
00:07:13,560 --> 00:07:18,060
have been added to the code edit.

190
00:07:18,120 --> 00:07:21,779
So code edit, 1st of all, is a open

191
00:07:21,779 --> 00:07:26,519
source coding editor written in using

192
00:07:26,519 --> 00:07:27,959
Apple platform technology.

193
00:07:28,019 --> 00:07:30,959
So it's not like VS code and all the

194
00:07:30,959 --> 00:07:33,300
others which are electron applications.

195
00:07:33,360 --> 00:07:37,019
It is a native macOS application.

196
00:07:37,079 --> 00:07:38,879
And it's been development for several

197
00:07:38,879 --> 00:07:39,540
years now.

198
00:07:39,600 --> 00:07:41,519
I think maybe three or four years since

199
00:07:41,519 --> 00:07:42,720
they started development of it.

200
00:07:42,779 --> 00:07:46,920
And I saw these two packages come through

201
00:07:46,920 --> 00:07:48,600
and they're called Welcome Window and

202
00:07:48,600 --> 00:07:49,139
About Window.

203
00:07:49,199 --> 00:07:51,720
And I found a blog post from the teen

204
00:07:51,720 --> 00:07:54,899
that was just published yesterday

205
00:07:54,899 --> 00:07:56,699
actually, on the 7th of July.

206
00:07:56,759 --> 00:08:03,300
And it's part of a thing that they do

207
00:08:03,300 --> 00:08:04,980
actually, which is that they try and

208
00:08:04,980 --> 00:08:08,759
extract as much of their app as they can

209
00:08:08,759 --> 00:08:14,399
into reusable packages, and they had an

210
00:08:14,399 --> 00:08:18,720
offer of from a community member of

211
00:08:18,720 --> 00:08:22,259
theirs that offered to extract the about

212
00:08:22,259 --> 00:08:23,939
window and the welcome window into

213
00:08:23,939 --> 00:08:27,300
reusable packages.

214
00:08:27,360 --> 00:08:29,639
And the blog post is now announcing that

215
00:08:29,639 --> 00:08:32,700
the project now uses those packages

216
00:08:32,700 --> 00:08:34,799
rather than its own implementation of

217
00:08:34,799 --> 00:08:35,039
them.

218
00:08:35,100 --> 00:08:36,899
And I thought this was a really nice

219
00:08:36,899 --> 00:08:42,419
practical example of packages being, you

220
00:08:42,419 --> 00:08:43,740
know, the right way to use packages in

221
00:08:43,740 --> 00:08:44,159
the community.

222
00:08:44,220 --> 00:08:49,379
And this is not something that every part

223
00:08:49,379 --> 00:08:51,000
of the application could be extracted

224
00:08:51,000 --> 00:08:53,519
into a package like this, but and about

225
00:08:53,519 --> 00:08:54,120
window.

226
00:08:54,179 --> 00:08:56,159
And it's quite a fancy about window.

227
00:08:56,220 --> 00:08:58,080
It's got the ability to include, like

228
00:08:58,080 --> 00:08:59,580
contributors, if it's an open source

229
00:08:59,580 --> 00:09:02,700
project in quite a attractively formatted

230
00:09:02,700 --> 00:09:07,259
presentation, and the other one is the

231
00:09:07,259 --> 00:09:09,659
welcome window, which is the, it's

232
00:09:09,659 --> 00:09:13,080
actually very Xcode, like, um, opening

233
00:09:13,080 --> 00:09:14,700
window that you'll see where it says that

234
00:09:14,700 --> 00:09:17,039
you can make a new project or opener

235
00:09:17,039 --> 00:09:18,840
project, or on the right-hand side, you

236
00:09:18,840 --> 00:09:21,360
have a list of recently used projects.

237
00:09:21,419 --> 00:09:26,039
So the kind of thing that if you're

238
00:09:26,039 --> 00:09:30,480
writing a Mac application, there's

239
00:09:30,480 --> 00:09:31,919
actually quite a lot of work in making

240
00:09:31,919 --> 00:09:34,139
something like that welcome window

241
00:09:34,139 --> 00:09:37,559
especially to get it to look good and to

242
00:09:37,559 --> 00:09:40,500
work well and to do all the things people

243
00:09:40,500 --> 00:09:41,340
expect it to do.

244
00:09:41,399 --> 00:09:44,639
And so, obviously, the package, I mean

245
00:09:44,639 --> 00:09:46,320
these are not actually, these are not in

246
00:09:46,320 --> 00:09:48,419
my package recommendations, I guess

247
00:09:48,419 --> 00:09:52,139
although maybe they are. maybe this is an

248
00:09:52,139 --> 00:09:53,279
early package recommendation.

249
00:09:53,340 --> 00:09:55,860
That has never happened before, has it?

250
00:09:55,919 --> 00:09:57,360
Yeah, no.

251
00:09:57,360 --> 00:09:59,100
I thought the blog post was worth

252
00:09:59,100 --> 00:10:02,639
referencing here as an example of a

253
00:10:02,639 --> 00:10:04,799
community project that's kind of doing

254
00:10:04,799 --> 00:10:05,220
this right.

255
00:10:05,340 --> 00:10:06,840
That sounds great.

256
00:10:06,899 --> 00:10:08,759
I love when that happens when you have

257
00:10:08,759 --> 00:10:11,700
sort of elements that are kind of

258
00:10:11,700 --> 00:10:13,379
standard, but don't have actually a

259
00:10:13,379 --> 00:10:17,039
standard, you know, UI component in, you

260
00:10:17,039 --> 00:10:19,799
know, whatever, AppKit or UIKit.

261
00:10:19,860 --> 00:10:23,279
I love when there's a sort of community

262
00:10:23,279 --> 00:10:28,139
maintained, commonly used component.

263
00:10:28,200 --> 00:10:30,179
Like, the one I canonically always think

264
00:10:30,179 --> 00:10:33,720
of is the update manager, what's his

265
00:10:33,720 --> 00:10:33,899
name?

266
00:10:33,960 --> 00:10:35,279
Help me out, the...

267
00:10:35,279 --> 00:10:36,659
Oh, Sparkle?

268
00:10:36,720 --> 00:10:38,039
Sparkle exactly.

269
00:10:38,100 --> 00:10:41,820
Like, you know, you recognise it

270
00:10:41,820 --> 00:10:42,240
immediately.

271
00:10:42,299 --> 00:10:43,559
You know, all right, all right.

272
00:10:43,620 --> 00:10:45,179
This is using the standard thing.

273
00:10:45,240 --> 00:10:46,559
I can trust this thing to update

274
00:10:46,559 --> 00:10:48,000
automatically.

275
00:10:48,059 --> 00:10:50,399
I know exactly where the settings are for

276
00:10:50,399 --> 00:10:52,860
configuring it, you know, like download

277
00:10:52,860 --> 00:10:53,580
automatically.

278
00:10:53,639 --> 00:10:54,960
And, you know, it's like a standard

279
00:10:54,960 --> 00:10:56,279
component, but that isn't actually

280
00:10:56,279 --> 00:10:57,419
shipped with the OS.

281
00:10:57,480 --> 00:11:00,000
But you can tell immediately when an app

282
00:11:00,000 --> 00:11:00,600
uses it.

283
00:11:00,659 --> 00:11:01,919
All right, this this this works.

284
00:11:02,039 --> 00:11:05,100
And I love when sort of these stand

285
00:11:05,100 --> 00:11:07,919
components evolve and and happened.

286
00:11:07,980 --> 00:11:09,720
And I hope, I'd hope for those, you

287
00:11:09,720 --> 00:11:12,659
describe them, to be like in that vein

288
00:11:12,659 --> 00:11:15,659
and it sounds really great. would be nice

289
00:11:15,659 --> 00:11:17,639
to see them adopted widely.

290
00:11:17,700 --> 00:11:19,320
Yeah, absolutely.

291
00:11:19,740 --> 00:11:21,840
And maybe I don't need to do as many

292
00:11:21,840 --> 00:11:24,000
package recommendations now that I've got

293
00:11:24,000 --> 00:11:24,299
those two.

294
00:11:24,360 --> 00:11:30,240
Always, always sneaking in a few extra.

295
00:11:30,299 --> 00:11:31,440
Exactly.

296
00:11:31,500 --> 00:11:31,799
Why not?

297
00:11:31,860 --> 00:11:35,100
Well, it's called Swift package indexing

298
00:11:35,100 --> 00:11:35,759
after all, isn't it?

299
00:11:35,820 --> 00:11:36,600
Exactly.

300
00:11:36,659 --> 00:11:39,720
It's package ecosystem news.

301
00:11:39,840 --> 00:11:44,460
Yeah, in another bit of news, not

302
00:11:44,460 --> 00:11:47,820
strictly about Swift per se, there's a

303
00:11:47,820 --> 00:11:51,480
social media post that came across also

304
00:11:51,480 --> 00:11:53,700
quite a few weeks ago, which I found

305
00:11:53,700 --> 00:11:54,419
really interesting.

306
00:11:54,480 --> 00:11:56,399
At least mine was about Swift.

307
00:11:56,460 --> 00:12:00,360
Well, I'll tie this back to Swift somehow

308
00:12:00,419 --> 00:12:01,320
bear with me.

309
00:12:01,440 --> 00:12:05,820
This is a blog post called Evolution of

310
00:12:05,820 --> 00:12:10,500
Russ Compiler Errors. and it's a really

311
00:12:10,500 --> 00:12:14,039
nicely done blog post in that it has a

312
00:12:14,039 --> 00:12:18,779
snippet of rust code. and then one with

313
00:12:18,779 --> 00:12:22,620
an arrow in it. and then below, it has a

314
00:12:22,620 --> 00:12:25,919
slider where you can scroll through

315
00:12:25,919 --> 00:12:29,340
different versions of rust, like starting

316
00:12:29,340 --> 00:12:33,059
at one.o.o and ending at one 80.

317
00:12:34,259 --> 00:12:36,360
So I'm not sure if there's like literally

318
00:12:36,360 --> 00:12:37,559
80 versions in between.

319
00:12:37,620 --> 00:12:40,019
No, actually, it's jumping like in large

320
00:12:40,019 --> 00:12:40,980
increments than one.

321
00:12:41,039 --> 00:12:44,580
But there's quite a few jumps through the

322
00:12:44,580 --> 00:12:45,059
versions.

323
00:12:45,120 --> 00:12:46,919
And what it does, it shows you below the

324
00:12:46,919 --> 00:12:49,980
code snippet. what the error message

325
00:12:49,980 --> 00:12:52,679
looks like at that version of Rust.

326
00:12:52,740 --> 00:12:55,139
And it's really interesting to see the

327
00:12:55,139 --> 00:12:55,860
evolution.

328
00:12:55,919 --> 00:12:59,879
Like, Ruster's always had nice error

329
00:12:59,879 --> 00:13:02,700
messages, like with ASK art pointing out

330
00:13:02,700 --> 00:13:05,759
where the error is, and then explaining a

331
00:13:05,759 --> 00:13:06,840
little what's happening.

332
00:13:07,259 --> 00:13:10,559
It's like 10, 15 lines of error message

333
00:13:10,559 --> 00:13:14,460
that you're getting, like even in one

334
00:13:12,840 --> 00:13:14,460
0.0.

335
00:13:15,000 --> 00:13:16,559
And then as you scroll through the

336
00:13:16,559 --> 00:13:19,620
versions, you'll see, you know, colour

337
00:13:19,620 --> 00:13:26,279
starting to appear, and an error code

338
00:13:26,279 --> 00:13:28,200
being added, which I think is a really

339
00:13:28,200 --> 00:13:31,019
interesting, an important piece where it

340
00:13:31,019 --> 00:13:33,000
makes it really easy to find additional

341
00:13:33,000 --> 00:13:34,559
information because you get this error

342
00:13:34,559 --> 00:13:38,399
code, like E, 03, H2, in this case.

343
00:13:38,460 --> 00:13:40,679
And then you immediately know are all

344
00:13:40,679 --> 00:13:40,980
right.

345
00:13:41,039 --> 00:13:43,139
I, this is something I can, I can web

346
00:13:43,139 --> 00:13:45,419
search for and then find more information

347
00:13:45,419 --> 00:13:47,580
if, if what's already there isn't enough

348
00:13:47,580 --> 00:13:49,379
and it probably isn't even needed.

349
00:13:49,500 --> 00:13:51,720
But I found that really nice to see the

350
00:13:51,720 --> 00:13:52,559
evolution of it.

351
00:13:52,620 --> 00:13:55,860
And the reason this caught my eye isn't

352
00:13:55,860 --> 00:13:58,799
just, because this is interesting to see

353
00:13:58,799 --> 00:14:01,500
and sort of Swift and Rust are a bit

354
00:14:01,500 --> 00:14:03,720
similar in their messaging, like there's

355
00:14:03,720 --> 00:14:07,259
a lot of focus on how to show errors and

356
00:14:07,259 --> 00:14:08,879
how to explain what's going wrong.

357
00:14:08,940 --> 00:14:12,120
But I think I've also seen on this

358
00:14:12,120 --> 00:14:14,759
performs an announcement that there's

359
00:14:14,759 --> 00:14:17,639
some work happening to improve the error

360
00:14:17,639 --> 00:14:18,539
messages in Swift.

361
00:14:18,600 --> 00:14:22,500
And I think this wasn't just specific to

362
00:14:22,500 --> 00:14:25,019
Swift concurrency where I know there's

363
00:14:25,019 --> 00:14:27,480
work been happening and I think also

364
00:14:27,480 --> 00:14:30,120
still ongoing to improve the error

365
00:14:30,120 --> 00:14:31,500
messages, you know, like when you get

366
00:14:31,500 --> 00:14:33,720
something happening around concurrency, it

367
00:14:33,720 --> 00:14:37,080
can be quite daunting. when that

368
00:14:37,080 --> 00:14:37,500
happens.

369
00:14:37,559 --> 00:14:40,139
So I know there's been a lot of effort

370
00:14:40,139 --> 00:14:42,120
put in to make that more approachable.

371
00:14:42,179 --> 00:14:44,460
I think this goes beyond that.

372
00:14:44,519 --> 00:14:47,100
I think there was a maybe somewhat of

373
00:14:47,100 --> 00:14:47,580
code project.

374
00:14:47,639 --> 00:14:50,460
I'll try and find something and added to

375
00:14:50,460 --> 00:14:53,220
the show notes, where there was specific

376
00:14:53,220 --> 00:14:56,039
focus on presentation and making sure

377
00:14:56,039 --> 00:15:00,419
that there's more information at the

378
00:15:00,419 --> 00:15:02,639
initial message, but then also linking

379
00:15:02,639 --> 00:15:05,220
off to find more about what's happening

380
00:15:05,220 --> 00:15:06,600
and how to resolve it.

381
00:15:06,659 --> 00:15:08,879
And I think it might even be interesting

382
00:15:08,879 --> 00:15:12,000
to see something like that for Swift

383
00:15:12,000 --> 00:15:14,039
because I think the Swift messages have

384
00:15:14,039 --> 00:15:16,860
also changed quite a bit over the years.

385
00:15:16,919 --> 00:15:19,320
So if someone's out there interested, that

386
00:15:19,320 --> 00:15:21,059
might be a fun project.

387
00:15:21,120 --> 00:15:22,980
I think that would be a great level

388
00:15:22,980 --> 00:15:23,759
community project.

389
00:15:23,820 --> 00:15:24,059
Yeah.

390
00:15:24,120 --> 00:15:27,120
I would recommend that anyone listening

391
00:15:27,120 --> 00:15:29,940
to this do just click through to the show

392
00:15:29,940 --> 00:15:31,740
notes and click on the link to that blog

393
00:15:31,740 --> 00:15:34,919
post because you'll really see what

394
00:15:34,919 --> 00:15:37,019
you're, what Sweat is talking about there

395
00:15:37,019 --> 00:15:39,299
when you just quickly grab the slider and

396
00:15:39,299 --> 00:15:40,740
kind of shift it left to right.

397
00:15:40,919 --> 00:15:42,600
And it's interesting.

398
00:15:42,659 --> 00:15:46,379
It's not always that the error message

399
00:15:46,379 --> 00:15:49,860
has got longer, in fact, sometimes it's

400
00:15:49,860 --> 00:15:53,220
got shorter. and they change in different

401
00:15:53,220 --> 00:15:55,620
ways for the various different errors

402
00:15:55,620 --> 00:15:59,039
that are given as examples here.

403
00:15:59,100 --> 00:16:06,600
But certainly they do all seem to try and

404
00:16:06,600 --> 00:16:09,899
point out the location of the error much

405
00:16:09,899 --> 00:16:11,159
better than they did at the beginning.

406
00:16:11,220 --> 00:16:17,460
And I think that's really, really a great

407
00:16:17,460 --> 00:16:21,659
attribute of an error message is showing

408
00:16:21,659 --> 00:16:24,120
people exactly where, or if possible

409
00:16:24,120 --> 00:16:26,519
showing people exactly where the syntax

410
00:16:26,519 --> 00:16:32,580
error is. and I think Swift error

411
00:16:32,580 --> 00:16:34,620
messages could do with not only in the

412
00:16:34,620 --> 00:16:36,120
concurrency arena, Swift error messages

413
00:16:36,120 --> 00:16:39,600
could do with some work as well, one of

414
00:16:39,600 --> 00:16:41,519
the most recent changes that I find quite

415
00:16:41,519 --> 00:16:43,440
interesting is, like, they brought colour

416
00:16:43,440 --> 00:16:46,980
in, like, yeah, like about halfway

417
00:16:46,980 --> 00:16:49,139
through, like, the arrow is, the actual

418
00:16:49,139 --> 00:16:52,379
arrow is in red, like, guides your eye to

419
00:16:52,379 --> 00:16:54,299
you know, like, the error code is in red

420
00:16:54,299 --> 00:16:56,940
and the, what's, what's wrong is in red.

421
00:16:57,000 --> 00:16:59,879
And then at the very end, green appears.

422
00:16:59,940 --> 00:17:01,740
And green is actually making a suggestion

423
00:17:01,740 --> 00:17:05,339
what you could do to fix the problem.

424
00:17:05,400 --> 00:17:07,740
I find that interesting and a good use of

425
00:17:07,740 --> 00:17:10,740
of, you know, colour and helping you.

426
00:17:10,799 --> 00:17:12,599
Like, you know, obviously something went

427
00:17:12,599 --> 00:17:14,519
wrong, but, you know, you don't just want

428
00:17:14,519 --> 00:17:15,779
to know what went wrong.

429
00:17:15,839 --> 00:17:17,579
You should really want to know how do I

430
00:17:17,579 --> 00:17:18,239
fix it, right?

431
00:17:18,299 --> 00:17:21,599
And that's a good thing to do at that

432
00:17:21,599 --> 00:17:21,839
point.

433
00:17:21,900 --> 00:17:28,740
Yeah, and I wonder how much of this kind

434
00:17:28,740 --> 00:17:31,440
of stuff would be possible with Swift

435
00:17:31,440 --> 00:17:35,039
given that the UI in Xcode will also have

436
00:17:35,039 --> 00:17:39,599
to be updated to cope with this type of

437
00:17:39,599 --> 00:17:40,200
error message.

438
00:17:40,200 --> 00:17:41,579
If they went down this route, of course

439
00:17:41,579 --> 00:17:44,039
this is all speculation. of whether they

440
00:17:44,039 --> 00:17:44,700
even want to.

441
00:17:44,759 --> 00:17:50,579
But that seeing Swift error messages in

442
00:17:50,579 --> 00:17:52,740
Xcode actually also can be kind of

443
00:17:52,740 --> 00:17:54,960
difficult. sometimes you sometimes have

444
00:17:54,960 --> 00:17:59,160
to expand the error a little bit to see

445
00:17:59,160 --> 00:17:59,519
it all.

446
00:17:59,579 --> 00:18:02,819
So I think the expert UI would need a bit

447
00:18:02,819 --> 00:18:03,480
of updating as well.

448
00:18:03,539 --> 00:18:06,299
Yeah, well, and it would need to update

449
00:18:06,299 --> 00:18:09,960
when the errors happen or go away, which

450
00:18:09,960 --> 00:18:10,859
sometimes it doesn't.

451
00:18:10,920 --> 00:18:12,000
Right, sure, yes.

452
00:18:12,059 --> 00:18:14,940
We simply don't have the technology to

453
00:18:14,940 --> 00:18:15,839
fix that bug, though.

454
00:18:15,960 --> 00:18:21,059
And with that, shall we do some package

455
00:18:21,059 --> 00:18:22,140
recommendations?

456
00:18:22,200 --> 00:18:24,119
Let's do some packages, yeah.

457
00:18:24,240 --> 00:18:26,220
Why don't you kick us off this week?

458
00:18:26,279 --> 00:18:29,579
All right, my first pick is called swift-security

459
00:18:29,579 --> 00:18:32,400
by Dmitriy Zharov.

460
00:18:32,460 --> 00:18:36,599
And this is a nice keychain API.

461
00:18:36,660 --> 00:18:38,579
I think we've mentioned a couple of those

462
00:18:38,579 --> 00:18:39,480
in the past.

463
00:18:39,539 --> 00:18:43,920
So do look in the past show notes as well

464
00:18:43,920 --> 00:18:45,480
or search the package index if you're

465
00:18:45,480 --> 00:18:46,980
interested or need a package like that.

466
00:18:47,039 --> 00:18:50,279
I've certainly actually created a wrapper

467
00:18:50,279 --> 00:18:52,980
of my own in the past for my use. which

468
00:18:52,980 --> 00:18:55,140
was very simple, but this is one that I

469
00:18:55,140 --> 00:18:57,599
noticed has like a lot of features.

470
00:18:57,660 --> 00:18:59,940
Like it covers a lot of things and has a

471
00:18:59,940 --> 00:19:01,140
lot of API surface.

472
00:19:01,200 --> 00:19:03,960
So if you need something more than, you

473
00:19:03,960 --> 00:19:06,180
know, just read and write a password.

474
00:19:06,240 --> 00:19:09,720
This might be something interesting and

475
00:19:09,720 --> 00:19:12,539
worsened look, because it really seems to

476
00:19:12,539 --> 00:19:13,319
be covering a lot.

477
00:19:13,380 --> 00:19:17,039
So, yeah, in that respect, I'd recommend

478
00:19:17,039 --> 00:19:17,819
it to have a look.

479
00:19:17,880 --> 00:19:20,759
As always, with security related packages

480
00:19:20,759 --> 00:19:23,640
and API, check before use, but it

481
00:19:23,640 --> 00:19:26,640
certainly looks like a solid candidate to

482
00:19:26,640 --> 00:19:30,480
inspect and review.

483
00:19:30,539 --> 00:19:31,920
Sure, but sweet one.

484
00:19:31,980 --> 00:19:38,400
My first one this week is Translate Kit

485
00:19:38,400 --> 00:19:44,940
by FlineDev, and this is, the thing

486
00:19:44,940 --> 00:19:47,339
that caught my eye about this, is the

487
00:19:47,339 --> 00:19:48,720
description of the package.

488
00:19:48,779 --> 00:19:52,200
It was described as SF Symbols for Text

489
00:19:52,200 --> 00:19:55,500
which is actually SF Symbols for

490
00:19:55,500 --> 00:19:56,700
Translations, I would call it.

491
00:19:56,819 --> 00:20:01,380
It's 2000 or more built-in translations

492
00:20:01,380 --> 00:20:06,660
in 40 languages that you can just have

493
00:20:06,660 --> 00:20:11,700
all of the common words and phrases that

494
00:20:11,700 --> 00:20:14,400
you might need in an application, like

495
00:20:14,400 --> 00:20:19,319
for example, a save thing, the word

496
00:20:19,319 --> 00:20:26,339
notifications, save changes as an example

497
00:20:26,339 --> 00:20:31,019
here. except all, you know, there's lots

498
00:20:31,019 --> 00:20:34,680
and lots of core strings that your

499
00:20:34,680 --> 00:20:36,420
application is almost certainly going to

500
00:20:36,420 --> 00:20:36,720
need.

501
00:20:36,779 --> 00:20:40,140
And you can save yourself a whole lot of

502
00:20:40,140 --> 00:20:44,220
time and effort by using a package like

503
00:20:44,220 --> 00:20:47,339
this to just have those there.

504
00:20:47,400 --> 00:20:48,900
And there's a couple of notable things

505
00:20:48,900 --> 00:20:49,319
about this.

506
00:20:49,380 --> 00:20:53,460
First of all, 40 languages is fantastic.

507
00:20:53,519 --> 00:20:55,740
And it's the same 40 languages that Apple

508
00:20:55,740 --> 00:20:58,619
supports in their localisations.

509
00:20:58,680 --> 00:21:01,859
So you could localise the same level as

510
00:21:01,859 --> 00:21:04,859
Apple do with some of your localisation

511
00:21:04,859 --> 00:21:06,000
being done by this package.

512
00:21:06,119 --> 00:21:11,220
And secondly, the translations that are

513
00:21:11,220 --> 00:21:12,960
in this package have been checked against

514
00:21:12,960 --> 00:21:14,519
what Apple uses.

515
00:21:14,579 --> 00:21:17,640
So it's not just someone's opinion on

516
00:21:17,640 --> 00:21:19,019
what this translation should be.

517
00:21:19,079 --> 00:21:23,819
It is the same translation that users in

518
00:21:23,819 --> 00:21:26,460
those countries will be used to seeing in

519
00:21:26,460 --> 00:21:29,640
system prompts and dialogues and UI and

520
00:21:29,640 --> 00:21:30,299
things like that.

521
00:21:30,359 --> 00:21:32,460
So this sounds like a really great

522
00:21:32,460 --> 00:21:36,779
package to me. to get you started with

523
00:21:36,779 --> 00:21:38,039
localisation.

524
00:21:38,099 --> 00:21:41,039
Of course, it's not going to have your

525
00:21:41,039 --> 00:21:43,559
applications, every string that you're

526
00:21:43,559 --> 00:21:45,059
going to need for your application, but

527
00:21:45,059 --> 00:21:46,440
it's the kind of thing that might get you

528
00:21:46,440 --> 00:21:46,680
started.

529
00:21:46,740 --> 00:21:49,680
Is it, I've been trying to come up with

530
00:21:49,680 --> 00:21:50,039
an example.

531
00:21:50,099 --> 00:21:53,759
Is there anything in there that is, like

532
00:21:53,759 --> 00:21:54,839
deals with context?

533
00:21:54,839 --> 00:21:58,200
Because, you know, you often have

534
00:21:58,200 --> 00:22:01,259
multiple sort of correct answers to a

535
00:22:01,259 --> 00:22:03,839
translation and it depends on context

536
00:22:03,839 --> 00:22:06,000
which one's the common one to use.

537
00:22:06,059 --> 00:22:09,240
So, so I think English is particularly

538
00:22:09,240 --> 00:22:10,680
bad for this, where the same word can

539
00:22:10,680 --> 00:22:12,299
mean multiple different things depending

540
00:22:12,299 --> 00:22:13,019
on the context.

541
00:22:13,079 --> 00:22:17,099
I'm sure other languages have the same.

542
00:22:17,579 --> 00:22:22,859
What it does have is the documentation

543
00:22:22,859 --> 00:22:26,819
attached to each of the properties that

544
00:22:26,819 --> 00:22:30,000
has a translation in it includes the

545
00:22:30,000 --> 00:22:30,420
context.

546
00:22:30,539 --> 00:22:32,039
So, for example, there's a screenshot in

547
00:22:32,039 --> 00:22:33,779
the Read Me file here where they are

548
00:22:33,779 --> 00:22:40,079
about to insert the translation for copy

549
00:22:40,079 --> 00:22:43,319
which can actually have multiple

550
00:22:43,319 --> 00:22:43,619
meanings.

551
00:22:43,680 --> 00:22:46,140
And the documentation for that function

552
00:22:46,140 --> 00:22:48,480
says, use when duplicating content to

553
00:22:48,480 --> 00:22:49,019
clipboard.

554
00:22:49,079 --> 00:22:49,619
Right.

555
00:22:49,619 --> 00:22:52,019
So I don't think it has any other

556
00:22:52,019 --> 00:22:54,599
instances of copy there, but it does give

557
00:22:54,599 --> 00:22:56,220
you the context it intends.

558
00:22:56,279 --> 00:22:58,980
I mean, that's that's a huge help.

559
00:22:59,039 --> 00:23:02,160
And as they start, that's probably, I

560
00:23:02,160 --> 00:23:03,420
mean, not probably.

561
00:23:03,480 --> 00:23:05,220
That's definitely a good start, you know

562
00:23:05,220 --> 00:23:07,500
to help you deal with the common stuff.

563
00:23:07,559 --> 00:23:08,940
And then even if you have someone who

564
00:23:08,940 --> 00:23:11,519
helps you with translation, it's nice for

565
00:23:11,519 --> 00:23:13,680
them to not have to deal with all the

566
00:23:13,680 --> 00:23:15,539
mundane, obvious things.

567
00:23:15,539 --> 00:23:18,599
And also, there's common language that's

568
00:23:18,599 --> 00:23:19,680
used in computer systems.

569
00:23:19,680 --> 00:23:23,160
Like I often in, you know, like in German

570
00:23:23,160 --> 00:23:25,859
you have words in computer screens that

571
00:23:25,859 --> 00:23:28,019
you probably wouldn't use in spoken

572
00:23:28,019 --> 00:23:30,599
German, like honestly, but they're so

573
00:23:30,599 --> 00:23:32,579
common in commuter systems that they sort

574
00:23:32,579 --> 00:23:36,299
of became the default translation. and

575
00:23:36,299 --> 00:23:39,480
just having a library of things that are

576
00:23:39,480 --> 00:23:41,759
in common use, you know, makes that much

577
00:23:41,759 --> 00:23:43,380
nicer and you don't have to guess which

578
00:23:43,380 --> 00:23:46,859
one to pick because, you know, that

579
00:23:46,859 --> 00:23:48,240
choice has been made for you.

580
00:23:48,299 --> 00:23:49,380
So yeah, that sounds really nice.

581
00:23:49,440 --> 00:23:54,299
The other thing just to mention what, in

582
00:23:54,299 --> 00:23:57,839
terms of context, is the shorter strings

583
00:23:57,839 --> 00:24:00,180
that this, these kind of translations

584
00:24:00,180 --> 00:24:02,460
tend to be, is where that contextual

585
00:24:02,460 --> 00:24:04,259
confusion can often happen.

586
00:24:04,319 --> 00:24:07,140
When you've got longer strings, the

587
00:24:07,140 --> 00:24:09,180
context is usually explained within the

588
00:24:09,180 --> 00:24:13,200
sentence or the phrase that you're

589
00:24:13,200 --> 00:24:13,740
translating.

590
00:24:13,799 --> 00:24:16,440
So context is much more important in

591
00:24:16,440 --> 00:24:17,880
something like this.

592
00:24:18,000 --> 00:24:19,500
So I'm glad to see that that

593
00:24:19,500 --> 00:24:21,059
documentation does give the context as

594
00:24:21,059 --> 00:24:21,240
well.

595
00:24:21,299 --> 00:24:22,259
Nice.

596
00:24:22,259 --> 00:24:24,059
Does it have, like, means?

597
00:24:24,180 --> 00:24:26,160
Is it just like literally one word or

598
00:24:26,160 --> 00:24:29,039
does it have mean ways to modify it in

599
00:24:29,039 --> 00:24:29,519
some form?

600
00:24:29,579 --> 00:24:31,200
You know, sometimes a word needs to agree

601
00:24:31,200 --> 00:24:33,539
with like literal grammatical context

602
00:24:33,539 --> 00:24:38,339
around it and like plurals or agenda, you

603
00:24:38,339 --> 00:24:40,680
know, like the object gender or the

604
00:24:40,680 --> 00:24:42,420
subject gender. anything like that?

605
00:24:42,480 --> 00:24:44,579
That's just a really great question.

606
00:24:44,640 --> 00:24:45,119
Well done.

607
00:24:45,180 --> 00:24:46,140
Yeah, great question.

608
00:24:46,200 --> 00:24:48,480
I don't know.

609
00:24:48,539 --> 00:24:52,859
I don't know.

610
00:24:52,920 --> 00:24:55,259
But yes, read the read me file.

611
00:24:55,319 --> 00:24:56,519
All right.

612
00:24:56,579 --> 00:25:00,420
My second pick is called TextDiffing by

613
00:25:00,420 --> 00:25:01,920
Simon Støvring.

614
00:25:01,980 --> 00:25:07,079
Another one of those really nice UI.

615
00:25:08,099 --> 00:25:10,319
Well, it's kind of UI and kind of not

616
00:25:10,319 --> 00:25:14,339
packages because it is actually not UI in

617
00:25:14,339 --> 00:25:17,579
the sense that it is a package that takes

618
00:25:17,579 --> 00:25:21,960
two strings, diffs them and creates an

619
00:25:21,960 --> 00:25:24,539
attributed string out of it that shows

620
00:25:24,539 --> 00:25:25,859
the differences between the text.

621
00:25:25,920 --> 00:25:27,839
And if you just look at the read meal

622
00:25:27,839 --> 00:25:28,559
immediately understand.

623
00:25:28,619 --> 00:25:31,859
Oh, did I did I show like one of your

624
00:25:31,859 --> 00:25:32,339
picks there?

625
00:25:32,400 --> 00:25:34,740
No, no, this was very, very nearly my

626
00:25:34,740 --> 00:25:36,240
pick, but I didn't pick it then.

627
00:25:36,299 --> 00:25:40,259
Yeah, as I said, if you look at the read

628
00:25:40,259 --> 00:25:42,960
me, you'll immediately understand what it

629
00:25:42,960 --> 00:25:44,759
does, like sort of it has a green

630
00:25:44,759 --> 00:25:49,140
background insertion and a red background

631
00:25:49,140 --> 00:25:51,900
deletion, and then, you know, it'll, if

632
00:25:51,900 --> 00:25:53,880
you actually render the attributed string

633
00:25:53,880 --> 00:25:54,539
that's what you see.

634
00:25:54,539 --> 00:25:59,339
So in one sense, it's actually not UI

635
00:25:59,339 --> 00:26:00,960
because it's an attributed string, but

636
00:26:00,960 --> 00:26:02,519
then again, you know, where they use

637
00:26:02,519 --> 00:26:05,339
attributed strings, obviously, in UI, so

638
00:26:05,339 --> 00:26:07,859
that's where you then what it's actually

639
00:26:07,859 --> 00:26:10,079
doing. and it's a lovely package.

640
00:26:10,140 --> 00:26:13,920
It is very clear what it's doing. does

641
00:26:13,920 --> 00:26:14,460
it?

642
00:26:14,519 --> 00:26:17,039
And yeah, also gives you a change count

643
00:26:17,039 --> 00:26:19,079
so there's more that you can do with it

644
00:26:19,079 --> 00:26:22,140
than just render it.

645
00:26:22,200 --> 00:26:24,539
So yeah, if you have need for that sort

646
00:26:24,539 --> 00:26:24,900
of thing.

647
00:26:24,960 --> 00:26:26,519
And obviously there's also options, you

648
00:26:26,519 --> 00:26:30,359
know, like, you know, how you format, like

649
00:26:30,359 --> 00:26:32,640
attributed strings can have, you can use

650
00:26:32,640 --> 00:26:36,779
colours to show the differences, but also

651
00:26:36,779 --> 00:26:38,819
strike through, for instance, and that

652
00:26:38,819 --> 00:26:39,240
sort of thing.

653
00:26:39,299 --> 00:26:42,480
So, yeah, if you need that sort of thing

654
00:26:42,480 --> 00:26:47,460
give that package a look and use it in

655
00:26:47,460 --> 00:26:49,619
your differ or whatever you're building.

656
00:26:49,680 --> 00:26:55,859
My next package is a command line tool

657
00:26:55,920 --> 00:26:58,559
still in a Swift package, but it's not a

658
00:26:58,559 --> 00:27:00,180
library, and there's 0 libraries in the

659
00:27:00,180 --> 00:27:03,480
package, just one executable. and it's

660
00:27:03,480 --> 00:27:05,759
called Yap by Finn Voorhees.

661
00:27:05,819 --> 00:27:10,859
And this is a Swift 6.2 specific package

662
00:27:10,859 --> 00:27:12,900
but I don't think it's because it's Swift

663
00:27:12,900 --> 00:27:14,460
6.2 that it needs.

664
00:27:14,519 --> 00:27:17,220
I think it needs what it does need macOS

665
00:27:17,220 --> 00:27:17,759
26.

666
00:27:18,000 --> 00:27:22,920
So in macOS 26, there is a new framework

667
00:27:22,920 --> 00:27:26,220
called Speech.framework, which can very

668
00:27:26,220 --> 00:27:29,339
quickly and efficiently, more efficiently

669
00:27:29,339 --> 00:27:33,359
than the Whisper model from Open AI, which

670
00:27:33,359 --> 00:27:36,480
is used for a lot of text to, sorry

671
00:27:36,480 --> 00:27:39,660
speech to text transcription at the

672
00:27:39,660 --> 00:27:39,900
moment.

673
00:27:39,960 --> 00:27:42,299
In initial tests.

674
00:27:42,359 --> 00:27:44,519
It's more efficient and speedier than

675
00:27:44,519 --> 00:27:50,460
that at transcribing audio to text.

676
00:27:50,519 --> 00:27:52,680
And this is a command line tool that you

677
00:27:52,680 --> 00:27:55,920
can either install through brew or mint

678
00:27:55,920 --> 00:27:58,380
or you can build it from the package

679
00:27:58,380 --> 00:28:00,839
source, and this is a swift package that

680
00:28:00,839 --> 00:28:04,319
contains this executable, that will then

681
00:28:04,319 --> 00:28:09,720
take an MP4 file, presumably an MP3 file

682
00:28:09,720 --> 00:28:12,779
and just very quickly and very accurately

683
00:28:12,779 --> 00:28:14,700
transcribe it to text them.

684
00:28:14,759 --> 00:28:17,640
So I think what we should do is use Yap

685
00:28:17,640 --> 00:28:20,700
to write the transcript and use Mac

686
00:28:20,700 --> 00:28:22,380
Whisper and then use text stiffing to

687
00:28:22,380 --> 00:28:23,700
show the difference between the two

688
00:28:23,700 --> 00:28:23,940
right?

689
00:28:24,000 --> 00:28:26,579
Well, it's funny you should say that

690
00:28:26,579 --> 00:28:28,980
because I haven't actually used this tool

691
00:28:28,980 --> 00:28:33,000
yet, but we do have a process that we do

692
00:28:33,000 --> 00:28:36,779
with Mac Whisper, which is a Mac

693
00:28:36,779 --> 00:28:39,059
application that uses the open AI Whisper

694
00:28:39,059 --> 00:28:42,900
model to locally transcribe text into

695
00:28:42,900 --> 00:28:45,359
sorry, transcribe audio into text.

696
00:28:45,420 --> 00:28:47,220
And that's how we power the

697
00:28:47,220 --> 00:28:50,279
transcriptions that we have for the

698
00:28:50,279 --> 00:28:52,559
podcast that we put out every time we do

699
00:28:52,559 --> 00:28:53,099
an episode.

700
00:28:53,160 --> 00:28:55,740
And I'm going to use the app.

701
00:28:55,859 --> 00:28:58,440
Oh, actually, I haven't got 26 installed

702
00:28:58,440 --> 00:28:58,680
yet.

703
00:28:58,740 --> 00:28:59,880
I was going to use that, yeah.

704
00:28:59,940 --> 00:29:02,400
Yeah, this week, but I haven't yet got a

705
00:29:02,400 --> 00:29:04,500
26 machine, so maybe I won't.

706
00:29:04,559 --> 00:29:05,279
Do you have one handy?

707
00:29:05,339 --> 00:29:07,920
I do, yes, I can I can run that for us.

708
00:29:08,039 --> 00:29:08,819
Perfect.

709
00:29:08,880 --> 00:29:09,900
Okay.

710
00:29:09,960 --> 00:29:13,319
So I will pass you the audio and we'll do

711
00:29:13,319 --> 00:29:16,140
we'll do a diff between the two and see

712
00:29:16,140 --> 00:29:18,599
what the, see what the, the performances

713
00:29:18,599 --> 00:29:18,960
like.

714
00:29:19,019 --> 00:29:20,759
So I've heard from everything I've read

715
00:29:20,759 --> 00:29:21,119
about this.

716
00:29:21,180 --> 00:29:22,740
This is slightly better than much

717
00:29:22,740 --> 00:29:22,920
better.

718
00:29:23,039 --> 00:29:25,980
Like in text translation before.

719
00:29:26,039 --> 00:29:27,359
It's because like speed performs is

720
00:29:27,359 --> 00:29:28,259
massively inaccuracy.

721
00:29:28,319 --> 00:29:29,039
Yeah.

722
00:29:29,099 --> 00:29:32,039
Yeah, in accuracy and also in, like, quite

723
00:29:32,039 --> 00:29:33,779
dramatically in speed, apparently, and

724
00:29:33,779 --> 00:29:35,579
also in accuracy slightly.

725
00:29:35,640 --> 00:29:38,460
Do you have a, do you have the speed

726
00:29:38,460 --> 00:29:39,480
increased to hand?

727
00:29:39,539 --> 00:29:42,779
Is it like 5 or even 10 X or do you do

728
00:29:42,779 --> 00:29:43,200
you recall?

729
00:29:43,259 --> 00:29:45,480
I recall seeing it, but I don't remember

730
00:29:45,480 --> 00:29:48,000
the number, but it's certainly more than

731
00:29:48,000 --> 00:29:48,779
four, I think.

732
00:29:48,839 --> 00:29:50,640
Right, yeah, the read me doesn't make any

733
00:29:50,640 --> 00:29:52,079
claims about that.

734
00:29:52,140 --> 00:29:55,079
But I've seen people who have done tests

735
00:29:55,079 --> 00:29:55,440
with it.

736
00:29:55,500 --> 00:29:57,180
I don't have any of those links handy, but

737
00:29:57,180 --> 00:29:58,440
I'll maybe try and find one for the show

738
00:29:58,440 --> 00:29:58,859
notes.

739
00:29:58,920 --> 00:30:00,839
But I read a couple of articles about

740
00:30:00,839 --> 00:30:02,160
this in the last couple of weeks.

741
00:30:02,220 --> 00:30:03,059
Nice.

742
00:30:03,059 --> 00:30:04,319
Oh, I'm curious.

743
00:30:04,380 --> 00:30:07,920
I've seen the thing, and I was curious to

744
00:30:07,920 --> 00:30:09,000
try it out.

745
00:30:09,059 --> 00:30:10,259
So that's actually a nice thing.

746
00:30:10,319 --> 00:30:12,900
We can do that and then follow up, perhaps

747
00:30:12,900 --> 00:30:13,500
next time.

748
00:30:13,619 --> 00:30:17,400
I should also, I should also get my spare

749
00:30:17,400 --> 00:30:21,839
MacBook out, although my spare MacBook is

750
00:30:21,839 --> 00:30:22,559
an Intel.

751
00:30:22,619 --> 00:30:25,019
So I think Twitter does 26 still run on

752
00:30:25,019 --> 00:30:25,619
Intel?

753
00:30:25,680 --> 00:30:27,000
I think this is the last version that's

754
00:30:27,000 --> 00:30:27,420
Intel, right?

755
00:30:27,480 --> 00:30:28,319
Yeah, last one.

756
00:30:28,380 --> 00:30:28,920
Yeah, okay.

757
00:30:28,980 --> 00:30:31,740
Yeah, and the arm version runs fine.

758
00:30:31,799 --> 00:30:34,440
There was a bit like the 3rd beta, has

759
00:30:34,440 --> 00:30:39,539
cleaned up a bit of the visual ugliness.

760
00:30:39,599 --> 00:30:41,099
Yeah, I'd say ugliness because it was a

761
00:30:41,099 --> 00:30:43,740
bit like Safari tabs were really weird in

762
00:30:43,740 --> 00:30:44,220
Peter 2.

763
00:30:44,460 --> 00:30:47,099
I mean, nothing really broke.

764
00:30:47,160 --> 00:30:49,140
The only thing that isn't working in, in

765
00:30:49,140 --> 00:30:54,420
Marcos 26 is the screenshot tool, um, the

766
00:30:54,420 --> 00:30:57,180
tapping on buttons in the screenshot tool

767
00:30:57,180 --> 00:30:59,220
the specific one, clean, clean shot X. Is

768
00:30:59,220 --> 00:31:00,059
that what it's called?

769
00:31:00,119 --> 00:31:00,720
the one we used.

770
00:31:00,839 --> 00:31:02,880
Yeah, screenshot is great app, yeah.

771
00:31:02,940 --> 00:31:05,700
And unfortunately, if you bring up its

772
00:31:05,700 --> 00:31:08,279
main view where you can edit and mark up

773
00:31:08,279 --> 00:31:12,299
the screenshot, the buttons on that

774
00:31:12,299 --> 00:31:14,640
screen don't work in Tao for some

775
00:31:14,640 --> 00:31:14,880
reason.

776
00:31:14,940 --> 00:31:17,400
So you can only save your screenshot and

777
00:31:17,400 --> 00:31:20,640
then you have to edit it in in preview.

778
00:31:20,700 --> 00:31:23,339
That's the only thing I've seen that

779
00:31:23,339 --> 00:31:24,539
isn't working.

780
00:31:24,599 --> 00:31:28,200
Otherwise, it's really solid beta.

781
00:31:28,259 --> 00:31:30,000
So be warned about that.

782
00:31:30,059 --> 00:31:30,480
Right.

783
00:31:30,480 --> 00:31:34,740
My 3rd and final pick is called Objects2XLSX

784
00:31:34,740 --> 00:31:39,000
by Xu Yang.

785
00:31:39,059 --> 00:31:42,299
And this is an interesting package that

786
00:31:42,299 --> 00:31:47,099
converts Swift objects into XLSX files.

787
00:31:47,160 --> 00:31:50,460
So that's Excel files effectively, the

788
00:31:50,460 --> 00:31:54,000
modern version, which is the XML-based

789
00:31:54,000 --> 00:31:54,359
ones.

790
00:31:54,420 --> 00:31:58,980
And I think there are a couple of them

791
00:31:58,980 --> 00:32:00,660
like packages that do that.

792
00:32:00,720 --> 00:32:04,319
This one is interesting that it is really

793
00:32:04,319 --> 00:32:07,319
typesafe in the sense that you can, like

794
00:32:07,319 --> 00:32:09,599
your workbooks and your objects, literally

795
00:32:09,599 --> 00:32:16,140
write out, you build up a worksheet with

796
00:32:16,140 --> 00:32:21,000
you know, like Swift templates, not

797
00:32:21,000 --> 00:32:23,339
templates, help me out.

798
00:32:23,460 --> 00:32:24,960
I'd love to help you out.

799
00:32:25,019 --> 00:32:26,940
I'm not quite sure where you're going.

800
00:32:27,000 --> 00:32:28,380
You know, like when you have your angular

801
00:32:28,380 --> 00:32:30,180
brackets and the tea in it.

802
00:32:30,240 --> 00:32:31,019
What's it called?

803
00:32:31,079 --> 00:32:31,980
God damn it, what's it called?

804
00:32:32,039 --> 00:32:32,880
Oh, generics.

805
00:32:32,940 --> 00:32:33,960
Generic, that's it.

806
00:32:34,019 --> 00:32:34,799
Jesus Christ.

807
00:32:34,859 --> 00:32:37,920
It's been really hot here last week.

808
00:32:37,980 --> 00:32:39,420
I forgot everything.

809
00:32:39,480 --> 00:32:43,079
So you actually build up a worksheet and

810
00:32:43,079 --> 00:32:44,880
you can use styles and everything.

811
00:32:44,940 --> 00:32:47,759
So it's a nice and interesting API that

812
00:32:47,759 --> 00:32:50,220
you can use to build up and write out the

813
00:32:50,220 --> 00:32:50,579
files.

814
00:32:50,700 --> 00:32:53,460
It doesn't read it back from what I've

815
00:32:53,460 --> 00:32:53,819
seen.

816
00:32:53,880 --> 00:32:56,099
So if you if you need passing, you'd need

817
00:32:56,099 --> 00:32:56,519
something else.

818
00:32:56,579 --> 00:33:00,299
So, so make sure that fits, obviously.

819
00:33:00,359 --> 00:33:05,940
But, yeah, it seems to be really covering

820
00:33:05,940 --> 00:33:08,460
a lot of features because the ones I've

821
00:33:08,460 --> 00:33:10,559
seen in the past excel sheets really deal

822
00:33:10,559 --> 00:33:11,400
with data only.

823
00:33:11,460 --> 00:33:15,779
I don't think I've seen an XLS writer

824
00:33:15,779 --> 00:33:18,059
that actually dealt with styling.

825
00:33:18,119 --> 00:33:21,059
You know, you can set like the border and

826
00:33:21,059 --> 00:33:23,279
colours and stuff of cells.

827
00:33:23,339 --> 00:33:25,380
So that's an interesting thing if you

828
00:33:25,380 --> 00:33:28,140
need to build XLL sheets automatically

829
00:33:28,140 --> 00:33:29,460
that carries some of that.

830
00:33:29,519 --> 00:33:32,279
That's probably one of the few ones that

831
00:33:32,279 --> 00:33:34,740
that will, would really get you far, if

832
00:33:34,740 --> 00:33:35,880
not all the way there.

833
00:33:36,059 --> 00:33:40,019
So if that's what you need, give that a

834
00:33:40,019 --> 00:33:40,200
go.

835
00:33:40,259 --> 00:33:44,220
That's some objects to XLSX by Zuyang.

836
00:33:44,279 --> 00:33:47,099
We got there in the end. did.

837
00:33:47,160 --> 00:33:51,119
And with that, I think we'll leave it

838
00:33:51,119 --> 00:33:52,259
there for this episode.

839
00:33:52,319 --> 00:33:55,740
So we will be back in three weeks.

840
00:33:55,799 --> 00:33:57,599
Excellent, see you next time.

841
00:33:57,660 --> 00:33:58,680
All right, take care.

842
00:33:58,740 --> 00:33:59,339
Bye-bye.

843
00:33:59,400 --> 00:34:00,119
See you next time.

844
00:34:00,180 --> 00:34:00,480
Bye-bye.