1
00:00:04,740 --> 00:00:05,580
Welcome to The Bootloader.

2
00:00:05,760 --> 00:00:06,420
I'm Todd Kurt.

3
00:00:07,020 --> 00:00:07,780
And I'm Paul Cutler.

4
00:00:08,060 --> 00:00:09,180
The show works like this.

5
00:00:09,440 --> 00:00:14,000
Todd and I have each brought three things to share with you that will chat about for about five minutes each.

6
00:00:14,560 --> 00:00:16,320
For detailed show notes and transcripts,

7
00:00:16,580 --> 00:00:17,760
visit the bootloader.net.

8
00:00:18,420 --> 00:00:19,960
Todd, what's up first for us?

9
00:00:21,000 --> 00:00:22,140
Free media, heck yeah.

10
00:00:23,020 --> 00:00:27,840
When I was younger, the Internet's promise was that it was to be this infinite playground of all humanity's knowledge.

11
00:00:28,280 --> 00:00:32,680
For the last decade or more, it seemed like a small collection of members-only big box stores instead.

12
00:00:33,280 --> 00:00:34,760
That's not very techno-utopian,

13
00:00:35,520 --> 00:00:38,820
but the FMHY.net site brings that feeling back for me.

14
00:00:39,880 --> 00:00:42,400
FMHY.net or Free Media,

15
00:00:42,580 --> 00:00:42,860
heck yeah,

16
00:00:43,480 --> 00:00:45,920
is a hand-cured categorized repository,

17
00:00:46,520 --> 00:00:47,640
sort of like the Yahoo of old,

18
00:00:48,280 --> 00:00:49,480
of all kinds of free software,

19
00:00:49,780 --> 00:00:50,760
videos, audio,

20
00:00:50,920 --> 00:00:52,740
video games, tips and tricks, and more.

21
00:00:53,720 --> 00:00:54,200
For instance,

22
00:00:54,580 --> 00:00:57,800
there's a huge book section with links to many free e-book repositories.

23
00:00:58,520 --> 00:01:01,920
By the way, did you know that the Internet Archive has a huge collection of e-books?

24
00:01:02,520 --> 00:01:03,100
They're all free,

25
00:01:03,300 --> 00:01:06,260
and the modern ones you can check out for a bit, like a library book.

26
00:01:06,680 --> 00:01:10,020
There's links to a bunch of different e-book reader apps so you can find the one you like,

27
00:01:10,480 --> 00:01:14,740
but there's also these great lists of repositories of audiobooks, comics,

28
00:01:15,020 --> 00:01:15,540
STEM books,

29
00:01:15,720 --> 00:01:16,040
history,

30
00:01:16,540 --> 00:01:18,280
and even academic paper repositories.

31
00:01:18,780 --> 00:01:22,660
Almost all these academic papers that are out there, you can read.

32
00:01:23,220 --> 00:01:23,760
It's all free.

33
00:01:24,180 --> 00:01:26,040
You just got to know where to find them, and this place has it.

34
00:01:26,560 --> 00:01:27,380
And in the gaming section,

35
00:01:27,600 --> 00:01:30,000
there's a long list of places to find abandoned games.

36
00:01:30,480 --> 00:01:32,960
Ever wanted to play the Windows 7 version of MindSweeper?

37
00:01:33,880 --> 00:01:36,060
Or play the old Commodore 64 games?

38
00:01:36,540 --> 00:01:37,600
This site has links for you.

39
00:01:38,860 --> 00:01:45,060
And of course, there's a Linux macOS section that leads to the various Linux distros and how to install them,

40
00:01:45,480 --> 00:01:48,800
but it also contains a bunch of great general command line how-to guides.

41
00:01:49,520 --> 00:01:52,220
A favorite one I found is called, You Don't Need GUI,

42
00:01:52,800 --> 00:01:56,400
that's showing you how to do things in the terminal that you normally would do with a GUI.

43
00:01:57,399 --> 00:02:01,880
And yes, the FMHY site also has sections on torrenting,

44
00:02:02,440 --> 00:02:05,020
which is a very efficient way to support the distribution of free media.

45
00:02:05,720 --> 00:02:09,039
But it can also be used to acquire not exactly legal copies of media.

46
00:02:09,500 --> 00:02:10,280
Be warned,

47
00:02:10,560 --> 00:02:11,020
be informed.

48
00:02:12,140 --> 00:02:13,200
Torrentine is not illegal.

49
00:02:13,740 --> 00:02:18,120
And it's a great way to take the pressure off big downloads from the kind people that are hosting those big downloads.

50
00:02:18,980 --> 00:02:19,320
And it's a great,

51
00:02:19,500 --> 00:02:22,080
like, for instance, it's a great way of getting a full copy of Wikipedia.

52
00:02:23,120 --> 00:02:25,400
So, yeah, so FMHY is huge.

53
00:02:25,420 --> 00:02:25,960
It's wonderful.

54
00:02:26,900 --> 00:02:29,260
I've had a lot of fun this last week poking around in it.

55
00:02:29,620 --> 00:02:30,280
Highly recommended.

56
00:02:31,340 --> 00:02:34,880
I specifically haven't gone there yet because I know that if I do,

57
00:02:35,150 --> 00:02:37,520
I will get lost in it for hours.

58
00:02:37,960 --> 00:02:39,080
That kind of nostalgia.

59
00:02:39,190 --> 00:02:40,740
I just love that kind of stuff.

60
00:02:41,270 --> 00:02:50,300
And even the old Linux distros that you threw out there, it would be fun to throw those in a virtual machine and just go back and see what those old operating systems and UIs look like.

61
00:02:51,160 --> 00:02:52,860
Not to mention the games and the books.

62
00:02:53,100 --> 00:02:53,240
So,

63
00:02:53,600 --> 00:02:55,140
yeah, I can't get into that.

64
00:02:55,180 --> 00:02:56,560
I'm just too busy at the moment.

65
00:02:57,540 --> 00:03:00,260
Yeah, for me, for me, I'm a big educational,

66
00:03:01,080 --> 00:03:01,180
like,

67
00:03:01,420 --> 00:03:04,700
documentary video essays sort of person.

68
00:03:04,710 --> 00:03:06,720
I love watching those things on YouTube or on Nebula.

69
00:03:07,520 --> 00:03:12,720
Also, I learned that, like, through this, that archive.org has a bunch of really cool documentaries,

70
00:03:12,980 --> 00:03:19,520
some of which are pretty recent, but some of which are things from, like, the 40s and 50s that were made that are really interesting and, like,

71
00:03:21,040 --> 00:03:25,140
how clay pots were made in England in the 1950s, in the 1950s,

72
00:03:25,160 --> 00:03:26,020
an industrial scale.

73
00:03:26,180 --> 00:03:28,580
They've got a documentary that's all in black and white. It's really cool.

74
00:03:31,420 --> 00:03:31,500
So,

75
00:03:31,840 --> 00:03:33,500
Paul, what's your first one for this time?

76
00:03:34,380 --> 00:03:35,660
You may have heard of the Flipper Zero,

77
00:03:35,860 --> 00:03:38,060
a small handheld piece of hardware that was even

78
00:03:38,240 --> 00:03:43,000
banned at the New York City mayoral inauguration earlier this year because organizers don't

79
00:03:43,120 --> 00:03:43,820
understand it either.

80
00:03:44,400 --> 00:03:47,500
If you visit their website, they describe the Flipper Zero as a tiny

81
00:03:47,620 --> 00:03:51,500
piece of hardware that can help you explore any kind of access control system,

82
00:03:52,120 --> 00:03:52,540
RFID,

83
00:03:53,060 --> 00:03:53,300
radio

84
00:03:53,380 --> 00:03:56,260
protocols and even exposes some GPIO pins.

85
00:03:56,730 --> 00:03:57,460
It has wireless,

86
00:03:57,720 --> 00:03:58,140
RFID,

87
00:03:58,420 --> 00:03:59,100
NFC, Bluetooth,

88
00:03:59,540 --> 00:04:01,800
infrared, and more all powered by an STM

89
00:04:02,120 --> 00:04:03,960
Cortex M4 microcontroller.

90
00:04:04,760 --> 00:04:08,160
Lifehacker had an article about all the fun things you can do with the Flipper

91
00:04:08,300 --> 00:04:12,300
Zero from using it as a universal remote to listening in on walkie-talkie conversations

92
00:04:12,960 --> 00:04:14,240
to taking your pet's temperature.

93
00:04:15,020 --> 00:04:17,600
But it also highlights some of the things that you can do that can cause a little

94
00:04:17,920 --> 00:04:20,579
mischief like cloning keyless entry cards,

95
00:04:21,400 --> 00:04:23,280
crashing Android phones, or reading credit

96
00:04:23,300 --> 00:04:24,060
credit card information.

97
00:04:24,820 --> 00:04:27,520
This all comes in a tiny package that fits in your hand for $200.

98
00:04:29,040 --> 00:04:31,060
And now they want to build the Flipper One.

99
00:04:31,500 --> 00:04:33,740
In a blog post from late last month,

100
00:04:33,980 --> 00:04:34,620
the Flipper team

101
00:04:34,940 --> 00:04:38,260
outlined their project goals and gave an overview of the hardware.

102
00:04:38,840 --> 00:04:39,460
They specifically

103
00:04:39,700 --> 00:04:42,660
call out that the Flipper One isn't an upgrade to the Flipper 0.

104
00:04:42,960 --> 00:04:43,880
It's a completely different

105
00:04:44,200 --> 00:04:45,360
project with different goals.

106
00:04:46,100 --> 00:04:48,740
One of their main goals is to have the Flipper One working as a

107
00:04:48,900 --> 00:04:53,260
standalone Linux computer with the ability to plug in modules like an SSD or

108
00:04:53,280 --> 00:04:54,200
a cellular modem.

109
00:04:55,100 --> 00:04:57,120
And they want it to be truly open

110
00:04:57,360 --> 00:04:59,140
in one that works out of the box with an

111
00:04:59,400 --> 00:05:00,260
upstream Linux kernel.

112
00:05:01,100 --> 00:05:03,140
No binary blobs, no closed source

113
00:05:03,240 --> 00:05:04,360
or proprietary firmware,

114
00:05:04,560 --> 00:05:05,000
but truly

115
00:05:05,200 --> 00:05:05,520
open.

116
00:05:06,020 --> 00:05:07,040
They go on to share how the

117
00:05:07,140 --> 00:05:08,520
state of arm Linux is depressing,

118
00:05:08,900 --> 00:05:09,420
their words,

119
00:05:09,920 --> 00:05:11,200
that every vendor has closed

120
00:05:11,320 --> 00:05:11,920
source component.

121
00:05:12,320 --> 00:05:13,300
Look at the

122
00:05:13,520 --> 00:05:15,320
Pico, the Bluetooth stack is closed source

123
00:05:15,400 --> 00:05:15,960
for example.

124
00:05:17,500 --> 00:05:19,140
If you're into Linux, you may have heard of

125
00:05:19,340 --> 00:05:21,200
Collabora, a consulting company that does a lot

126
00:05:21,200 --> 00:05:23,240
of work with GStreamer as well. They've partnered

127
00:05:23,260 --> 00:05:27,080
with the Flipper team to get the Rock Chip RK3576 chip

128
00:05:27,820 --> 00:05:29,260
into the mainline Linux kernel,

129
00:05:29,780 --> 00:05:31,580
and they shared a neat article about the process

130
00:05:31,740 --> 00:05:33,040
which I've linked to in the show notes.

131
00:05:34,060 --> 00:05:34,880
With all that said,

132
00:05:35,380 --> 00:05:36,920
the specs in the Flipper One are crazy

133
00:05:37,080 --> 00:05:38,760
for a small handheld cyberdeck.

134
00:05:39,340 --> 00:05:40,560
I've already mentioned the chipset,

135
00:05:40,680 --> 00:05:41,920
but it has networking support

136
00:05:42,080 --> 00:05:43,940
with two gigabit Ethernet ports,

137
00:05:44,300 --> 00:05:45,840
USB Ethernet,

138
00:05:46,660 --> 00:05:47,500
Wi-Fi 6E,

139
00:05:47,800 --> 00:05:50,520
and you can add a 5G modem using an M.D2 module.

140
00:05:51,080 --> 00:05:52,900
With this, you could use the Flipper One as a router,

141
00:05:53,220 --> 00:05:54,400
gateway or even a bridge.

142
00:05:55,050 --> 00:05:59,000
It features two co-processors, the eight-core rock chip processor I mentioned

143
00:05:59,220 --> 00:06:00,100
earlier for running Linux,

144
00:06:00,490 --> 00:06:05,180
and a two-core Raspberry Pi 2350 that controls the display buttons,

145
00:06:05,320 --> 00:06:08,060
touchpad, and LEDs running its own firmware.

146
00:06:08,380 --> 00:06:10,320
They've launched a developer portal that includes

147
00:06:10,400 --> 00:06:14,280
everything you would want to know about the flippers from PCB designs, the enclosure design,

148
00:06:14,500 --> 00:06:14,820
software,

149
00:06:15,120 --> 00:06:15,300
firmware,

150
00:06:15,600 --> 00:06:15,840
docs,

151
00:06:16,770 --> 00:06:17,940
and more. But that's not all.

152
00:06:18,200 --> 00:06:19,880
If it's compatible with the Linux kernel,

153
00:06:20,200 --> 00:06:21,760
it will need its own operating system,

154
00:06:22,080 --> 00:06:23,500
and they have a plan for that too.

155
00:06:24,280 --> 00:06:26,260
They're building Flipper OS on top of Debian.

156
00:06:26,860 --> 00:06:28,620
It also includes FlipCTL,

157
00:06:28,820 --> 00:06:31,820
a UI for small screens such as Cyberdecks like this.

158
00:06:32,900 --> 00:06:34,880
You should check out the blog post for all the details.

159
00:06:35,040 --> 00:06:36,920
I've only covered some of it, believe it or not.

160
00:06:37,500 --> 00:06:40,440
Towards the end of the article, they talk about the uses for the Flipper Zero,

161
00:06:40,620 --> 00:06:43,940
and one that jumped out at me is the fact that they've put a full-size

162
00:06:44,180 --> 00:06:45,340
HDMI port on it.

163
00:06:45,760 --> 00:06:49,920
You could take your Flipper One with you while traveling and have your own personal TV entertainment

164
00:06:49,940 --> 00:06:53,540
built in just by installing Cody on it and outputting it to your TV.

165
00:06:54,100 --> 00:06:54,820
That's pretty awesome.

166
00:06:55,680 --> 00:06:57,000
One thing that I really like is it is,

167
00:06:57,340 --> 00:07:00,940
so it's called often a cyberdeck, but like usually

168
00:07:01,160 --> 00:07:03,360
when I think of cyberdecks, I think something with a screen and a keyboard.

169
00:07:03,880 --> 00:07:07,920
And this is not, this is like a little handheld thing that looks kind of like some sort

170
00:07:08,160 --> 00:07:13,080
of sci-fi gizmo you'd see some character use, but it has in it,

171
00:07:13,400 --> 00:07:13,960
you know, it's got a bunch

172
00:07:13,960 --> 00:07:14,640
of ports around it.

173
00:07:15,080 --> 00:07:16,520
You mentioned the full-size HTML.

174
00:07:17,120 --> 00:07:18,780
It's also got full-size Ethernet.

175
00:07:18,940 --> 00:07:19,960
And it's got Wi-Fi,

176
00:07:20,160 --> 00:07:20,600
which means,

177
00:07:21,000 --> 00:07:23,000
oh, this would be perfect if you're traveling a lot.

178
00:07:23,100 --> 00:07:27,500
And you want to use the hotel internet that has got like maybe an Ethernet cable come out of the wall,

179
00:07:28,100 --> 00:07:28,960
which is a much better,

180
00:07:29,200 --> 00:07:32,100
usually more fast connection than the hotel Wi-Fi.

181
00:07:32,960 --> 00:07:37,160
And then now you can also got the HTMLI, so you can plug it into the hotel TV.

182
00:07:37,840 --> 00:07:38,000
Right.

183
00:07:38,080 --> 00:07:43,620
You've got a really good mobile hotspot plus also entertainment device.

184
00:07:44,380 --> 00:07:48,900
So, yeah, I'm really curious about this because there's all these Raspberry Pi Lodels.

185
00:07:48,920 --> 00:07:53,120
like single board computers that use these weird arm chips,

186
00:07:53,760 --> 00:07:56,200
like the rock chip that this is using is one of them.

187
00:07:56,560 --> 00:07:59,460
And it's always a real dicey thing to use them

188
00:07:59,600 --> 00:08:01,380
because they don't use mainline Linux.

189
00:08:01,520 --> 00:08:03,280
They use like their own custom weird fork of Linux.

190
00:08:03,860 --> 00:08:05,020
And if they stop supporting it,

191
00:08:05,060 --> 00:08:06,820
you're kind of out in the cold.

192
00:08:06,960 --> 00:08:10,020
And so this is one of the reasons why a lot of people don't use these things

193
00:08:10,479 --> 00:08:12,380
that look like raspberry pies but aren't,

194
00:08:12,840 --> 00:08:14,040
even though they're actually pretty good.

195
00:08:14,640 --> 00:08:17,560
Because it's like, well, where does the firmware for it come from?

196
00:08:17,660 --> 00:08:25,400
And so it's really cool that they're working to get the rock chip core into the mainline Linux kernel.

197
00:08:25,520 --> 00:08:26,200
That's really cool.

198
00:08:27,060 --> 00:08:33,440
Yeah, that'll just enable support for everyone and just make it that much easier to install it, fork it, and do really interesting things with it.

199
00:08:33,940 --> 00:08:34,099
Yeah.

200
00:08:34,300 --> 00:08:37,200
And this seems like just finally,

201
00:08:37,500 --> 00:08:39,900
like one of the thing is that bugging me of the flipper zero is it had no Wi-Fi.

202
00:08:41,540 --> 00:08:44,540
There was like these things you kind of cobble onto the back to give a Wi-Fi.

203
00:08:44,540 --> 00:08:45,500
I'm just like, come on, guys.

204
00:08:45,920 --> 00:08:46,060
Like,

205
00:08:46,320 --> 00:08:49,640
what's the main thing we're all using as the wireless networking protocol?

206
00:08:50,540 --> 00:08:51,820
Well, they're about to fix that.

207
00:08:52,200 --> 00:08:52,380
Yeah,

208
00:08:52,600 --> 00:08:52,800
totally.

209
00:08:53,620 --> 00:08:54,700
What's your next one for us?

210
00:08:55,220 --> 00:08:55,560
All right.

211
00:08:56,100 --> 00:08:57,520
You don't need an R-TOS.

212
00:08:58,320 --> 00:09:04,180
If you've programmed embedded boards with Arduino and CircuPython, you hear about RTOS or real-time OS

213
00:09:04,740 --> 00:09:06,600
and how you should be using it to organize your code.

214
00:09:07,020 --> 00:09:08,940
But relax, you do not need one.

215
00:09:09,220 --> 00:09:09,960
You probably don't need one.

216
00:09:10,480 --> 00:09:14,760
Nathan Jones on Embedded Related, wrote a blog post series titled, You Don't Need an R-Tos,

217
00:09:15,260 --> 00:09:18,860
describing the problem that Artas has solved and some simpler alternative techniques.

218
00:09:19,500 --> 00:09:22,000
Most notably, he favors the technique of the super loop,

219
00:09:22,620 --> 00:09:25,000
or putting all your code in the main loop and seeing if that works.

220
00:09:25,760 --> 00:09:27,940
The posts target embedded C and C++ plus,

221
00:09:28,120 --> 00:09:31,420
but the techniques, concepts, and math he uses to show how things work.

222
00:09:31,900 --> 00:09:34,200
Behind these concepts are valuable for any language you use.

223
00:09:35,120 --> 00:09:35,920
But for his super loop,

224
00:09:36,420 --> 00:09:39,240
you issue the complexity of schedulers of the Artas

225
00:09:39,700 --> 00:09:42,240
or interrupts or any of those kinds of things, state machines,

226
00:09:42,680 --> 00:09:43,940
and just go as simple as possible.

227
00:09:44,180 --> 00:09:45,960
How much can you do in one big loop?

228
00:09:46,500 --> 00:09:49,020
Do you really need a complex scheduling system

229
00:09:49,420 --> 00:09:51,460
if all you're doing is reading some sensors every minute

230
00:09:51,580 --> 00:09:53,200
and logging that data to an SD card?

231
00:09:53,940 --> 00:09:55,060
With everything in a single loop,

232
00:09:55,340 --> 00:09:57,380
huge conceptual areas where bugs can live,

233
00:09:57,460 --> 00:09:59,480
like race conditions or resource contention,

234
00:10:00,080 --> 00:10:01,260
are absent by design.

235
00:10:01,940 --> 00:10:03,420
If you need explicit periodicity,

236
00:10:03,800 --> 00:10:06,620
a task with a super loop can check the current time

237
00:10:06,740 --> 00:10:08,300
and run only when a certain time is passed.

238
00:10:09,240 --> 00:10:11,660
I have to hear this called the blink without delay pattern

239
00:10:12,080 --> 00:10:13,379
in the Arduino world from learners

240
00:10:13,400 --> 00:10:15,700
one is to blink an LED without blocking the main loop.

241
00:10:16,640 --> 00:10:17,940
The problem with super loops could be,

242
00:10:18,140 --> 00:10:20,700
like the first problem we might encounter with super loops is jitter,

243
00:10:21,120 --> 00:10:23,780
where a periodic task doesn't happen as regularly as you want.

244
00:10:24,360 --> 00:10:27,860
In many cases, this is where you start deviating from the super loop with hardware interrupts.

245
00:10:28,240 --> 00:10:29,820
But it's like a small delta change.

246
00:10:30,920 --> 00:10:34,040
You'll see this with fast data streams like audio or video output,

247
00:10:34,560 --> 00:10:37,640
or sensors with critical timing requirements like neopixels say.

248
00:10:38,240 --> 00:10:40,880
But notice there's still no explicit schedule needed.

249
00:10:41,000 --> 00:10:43,360
There's just like one tiny change to your main.

250
00:10:43,380 --> 00:10:44,300
super loop idea.

251
00:10:45,620 --> 00:10:48,860
So what good is a real-time operating system and why would we need one?

252
00:10:49,680 --> 00:10:49,860
At its

253
00:10:50,100 --> 00:10:50,240
basic,

254
00:10:50,500 --> 00:10:54,420
an R-TOS is just a scheduler for tasks you define. But importantly,

255
00:10:54,920 --> 00:10:55,580
when you schedule those

256
00:10:55,860 --> 00:10:57,600
tasks, you define a period of your task,

257
00:10:57,760 --> 00:10:58,520
how often it's called,

258
00:10:58,920 --> 00:11:00,320
and the deadline of the task.

259
00:11:01,500 --> 00:11:05,520
For instance, you might have a task that checks a sensor once a second, it's period,

260
00:11:06,160 --> 00:11:06,420
but it can

261
00:11:06,480 --> 00:11:09,440
take no longer than 10 milliseconds to do it, its deadline.

262
00:11:10,120 --> 00:11:11,779
You're specifying a contract to the

263
00:11:11,760 --> 00:11:15,100
R-Tos, and if your task breaks that contract, it gets killed.

264
00:11:15,900 --> 00:11:19,000
Normal OSs are best effort, and we'll let processes run a little longer,

265
00:11:19,370 --> 00:11:20,120
but Rtoss is

266
00:11:20,400 --> 00:11:23,120
guarantee that no tasks can overtake a higher priority one.

267
00:11:23,780 --> 00:11:28,800
In a car, you must guarantee the anti-lock brake sensor be read exactly every 500 nanoseconds.

268
00:11:29,480 --> 00:11:29,860
For instance,

269
00:11:30,170 --> 00:11:30,960
in a Mars lander,

270
00:11:31,300 --> 00:11:34,100
reaction thrusters must be fired exactly 64 milliseconds.

271
00:11:34,960 --> 00:11:38,220
There can be no pauses for file rights or other tasks taking over.

272
00:11:38,820 --> 00:11:40,020
Artas keep us alive.

273
00:11:41,180 --> 00:11:42,780
So they are very, very, very critical.

274
00:11:43,340 --> 00:11:44,920
But in maker-level projects,

275
00:11:45,440 --> 00:11:46,600
R-tosses are usually not needed.

276
00:11:47,360 --> 00:11:48,760
We don't have those critical concerns.

277
00:11:49,220 --> 00:11:50,020
But if you want to learn,

278
00:11:50,120 --> 00:11:51,760
there are several event-scheduled libraries

279
00:11:51,940 --> 00:11:53,860
for our do we know that lean towards R-TOS behavior.

280
00:11:55,080 --> 00:11:56,860
And there is a very minimal free R-TOS

281
00:11:57,400 --> 00:11:59,860
that works great on ESP-32 and RP2040 chips.

282
00:12:00,420 --> 00:12:04,380
In fact, if you use the ESP-IDF SDK for ESP-32,

283
00:12:05,020 --> 00:12:06,680
it uses free R-TOS under the hood

284
00:12:07,100 --> 00:12:09,480
to make dealing with the vagaries of Wi-Fi a little bit easier.

285
00:12:11,020 --> 00:12:13,800
In CircuitPython, a MicroPython, you can investigate async I.O.

286
00:12:14,620 --> 00:12:16,560
It's a sort of DIY method of event scheduling.

287
00:12:17,220 --> 00:12:20,700
It's a little bit more abstract than just doing it by hand in a super loop.

288
00:12:21,280 --> 00:12:23,460
It won't be as precise as performance as in Arduino,

289
00:12:23,620 --> 00:12:25,080
but you can get used to the ideas.

290
00:12:26,100 --> 00:12:27,120
I used to work in aerospace hardware,

291
00:12:27,680 --> 00:12:28,840
and now I play with making synthesizers.

292
00:12:29,840 --> 00:12:30,700
In CircuitPython and Arduino,

293
00:12:31,180 --> 00:12:33,120
most of the time, I use something like a super loop.

294
00:12:33,880 --> 00:12:37,180
In CircuitPython, it's a must as you can't schedule things at the hardware level.

295
00:12:37,780 --> 00:12:40,340
CircuitPython is almost an OS unto itself.

296
00:12:40,760 --> 00:12:42,600
with its own scheduler and device drivers.

297
00:12:43,040 --> 00:12:45,120
And the user task that runs your code.PI

298
00:12:45,300 --> 00:12:47,340
is just one of the many tasks it's dealing with.

299
00:12:47,920 --> 00:12:48,640
Usually that's fine,

300
00:12:48,840 --> 00:12:49,520
and it's really nice

301
00:12:49,620 --> 00:12:50,880
that you don't have to deal with setting up

302
00:12:51,300 --> 00:12:53,800
DMA buffers and interrupts for audio and display output.

303
00:12:54,580 --> 00:12:57,080
But if you want more precise timing,

304
00:12:57,580 --> 00:12:58,800
maybe CircuitPython is not for you.

305
00:12:59,860 --> 00:13:00,720
This blog post about,

306
00:13:01,060 --> 00:13:02,580
you don't need an Rtos, really resonating with me

307
00:13:02,740 --> 00:13:04,580
because I've seen folk get bogged down

308
00:13:04,960 --> 00:13:07,160
and frustrated trying to set up an Rtos

309
00:13:07,240 --> 00:13:08,100
for their embedded project

310
00:13:08,480 --> 00:13:10,300
when it's overkill before they're trying to accomplish.

311
00:13:10,700 --> 00:13:18,800
This blog post series is almost a college-level course in computer concurrency and uses math and examples to show exactly how much you can do with simple setups,

312
00:13:19,260 --> 00:13:24,700
while also giving directions for more complicated concurrency models like interrupt state machines and finally R-tosses.

313
00:13:25,540 --> 00:13:26,820
But if you're starting a new project,

314
00:13:27,200 --> 00:13:30,060
I would say see how far you can get with a super loop and then go from there.

315
00:13:30,900 --> 00:13:34,480
You mentioned async and await for MicroPython and CircuitPython.

316
00:13:35,820 --> 00:13:39,120
And right, CircuitPython doesn't have interrupt level control on that kind of stuff.

317
00:13:39,260 --> 00:13:42,900
But once you learn async and can wrap your head around it,

318
00:13:43,080 --> 00:13:46,940
it can do so many things to avoid blocking, for example.

319
00:13:47,640 --> 00:13:48,760
And it's really powerful.

320
00:13:48,900 --> 00:13:52,160
It's just really hard to wrap your head around it the first time.

321
00:13:53,120 --> 00:13:55,820
Yeah, it's a different way of thinking about writing your code.

322
00:13:56,440 --> 00:14:00,680
And it's the step to what you have to do to start thinking about using these R tosses

323
00:14:01,340 --> 00:14:03,360
because you've got a chunk of, you've got your little function.

324
00:14:03,900 --> 00:14:07,040
And you think of, oh, my functions is going to run from top to bottom.

325
00:14:08,160 --> 00:14:09,240
But in an RTOS,

326
00:14:09,460 --> 00:14:14,700
your code could get suspended at any point in that flow.

327
00:14:14,940 --> 00:14:16,520
And you have to know how to deal with that.

328
00:14:16,600 --> 00:14:19,960
Like if you've got any sort of timing critical things or if you're dealing on the

329
00:14:20,940 --> 00:14:23,720
dealing, if you're requiring sort of certain efficiency of like, oh,

330
00:14:24,020 --> 00:14:25,700
these values will be in these CPU registers.

331
00:14:26,380 --> 00:14:32,000
That might not be the case because your code could get all entirely swapped out for some other code and then swap back in again.

332
00:14:33,120 --> 00:14:33,920
So, yeah,

333
00:14:34,220 --> 00:14:36,860
one of the problems why I don't like to recommend ASync I.O.

334
00:14:37,020 --> 00:14:39,560
for CircuitPython is because a lot of people will think,

335
00:14:39,760 --> 00:14:40,840
oh, this will make my,

336
00:14:41,060 --> 00:14:41,300
say,

337
00:14:41,500 --> 00:14:43,360
display updates more regular

338
00:14:44,540 --> 00:14:47,540
because I'm like, oh, I'm reading buttons

339
00:14:47,780 --> 00:14:48,860
and I'm updating the display.

340
00:14:48,940 --> 00:14:50,860
Well, it turns out on CircuitPython,

341
00:14:51,400 --> 00:14:54,720
I'm pretty sure the I squared C and SPI stuff,

342
00:14:55,000 --> 00:14:57,000
the data transfers are still blocking.

343
00:14:57,280 --> 00:14:59,820
So even though you're using ASync IO,

344
00:15:00,500 --> 00:15:02,020
when you say display that update or whatever,

345
00:15:02,240 --> 00:15:04,160
it's just, it'll just block everything

346
00:15:04,580 --> 00:15:05,360
until that update finishes.

347
00:15:06,640 --> 00:15:07,780
But just like, it's like, dang it.

348
00:15:09,000 --> 00:15:09,900
No, you're absolutely right.

349
00:15:09,980 --> 00:15:10,420
That's correct.

350
00:15:11,980 --> 00:15:16,760
But yeah, so, I mean, there are some PRs in CircuitPython to maybe make this a little bit better.

351
00:15:17,540 --> 00:15:18,760
But it's a complicated problem.

352
00:15:18,960 --> 00:15:19,540
So we'll see.

353
00:15:20,160 --> 00:15:22,160
All right, Paul, what's your next one?

354
00:15:22,940 --> 00:15:27,040
If you've ever wanted to plug in your microcontroller and use the web to install new firmware or code,

355
00:15:27,360 --> 00:15:30,900
your only choice up till now has been to use a chromium-based browser like Chrome,

356
00:15:31,120 --> 00:15:32,300
Microsoft Edge, or Vivaldi.

357
00:15:33,040 --> 00:15:34,000
But as of late May,

358
00:15:34,560 --> 00:15:36,300
Mozilla has joined the party and now support.

359
00:15:36,320 --> 00:15:38,920
It supports WebSereal and Firefox with help from ATAFruit.

360
00:15:39,660 --> 00:15:46,220
WebSereal is a web API that uses JavaScript to read and write to serial devices like microcontroller boards or 3D printers.

361
00:15:46,220 --> 00:15:51,160
It's been available for years in Chrome and it's nice to see AtaFruit Mozilla partnering up to deliver this.

362
00:15:51,500 --> 00:15:57,600
For example, if you visit CircuitPython.org's download section and pick almost any ESP32-based board,

363
00:15:58,120 --> 00:16:02,300
there will be an option to download the UF2 or the bin files with the firmware,

364
00:16:02,300 --> 00:16:06,260
or there's a button to open installer, and you can do it right over the web.

365
00:16:06,860 --> 00:16:12,280
One of the things that surprised me reading the article on Mozilla.org is that web serial is still not a standard.

366
00:16:13,060 --> 00:16:19,380
It resides in the Web Incubator Community Group, and Mozilla mentions their pursuing standardizing web serial in a new proposal.

367
00:16:20,460 --> 00:16:23,120
I'm glad to have another option for using web serial in a browser.

368
00:16:23,250 --> 00:16:31,120
I was a longtime user of Firefox until earlier this year when they started shoving all this AI features that no one wanted into it.

369
00:16:31,700 --> 00:16:34,940
I've since switched to Vivaldi, who doesn't have any AI baked in.

370
00:16:35,540 --> 00:16:39,460
but kudos to Mozilla for adding support for web serial and giving users another choice.

371
00:16:40,420 --> 00:16:40,560
Yeah,

372
00:16:40,960 --> 00:16:42,500
I'm a big Firefox proponent.

373
00:16:42,620 --> 00:16:45,760
I have turned off all the AI stuff via the config,

374
00:16:46,090 --> 00:16:48,180
the sort of secret hidden config screen.

375
00:16:49,170 --> 00:16:52,840
But yeah, it's been really a bummer that like for many browsers, like Safari,

376
00:16:53,760 --> 00:16:55,020
Firefox until recently,

377
00:16:55,560 --> 00:17:03,160
that if you wanted to do this really cool configuration of little gizmos via Cereo port, you couldn't do that on these browsers,

378
00:17:03,620 --> 00:17:14,660
which is like one of the best ways of dealing with a lot of ESP 32 stuff is you just go to like a special URL and you can reflash the entire ESP 32 from the browser window,

379
00:17:14,920 --> 00:17:16,760
not needing a special program to download or whatever,

380
00:17:17,100 --> 00:17:18,699
but that requires USB serial.

381
00:17:19,220 --> 00:17:19,620
Sorry, sorry,

382
00:17:20,600 --> 00:17:20,959
web serial.

383
00:17:21,400 --> 00:17:21,800
So,

384
00:17:22,520 --> 00:17:22,600
yay.

385
00:17:23,260 --> 00:17:23,760
This is great.

386
00:17:23,839 --> 00:17:25,600
I've been using a little bit and it's like, oh, finally.

387
00:17:27,560 --> 00:17:28,120
Yeah, no kidding.

388
00:17:28,840 --> 00:17:30,480
Finally is the right way to put it.

389
00:17:30,920 --> 00:17:33,580
Yeah, it's been in Chrome for like a over and.

390
00:17:33,600 --> 00:17:34,440
a decade, I think.

391
00:17:34,780 --> 00:17:35,800
Wow, that's just crazy.

392
00:17:35,960 --> 00:17:36,760
That's been that long.

393
00:17:38,420 --> 00:17:39,700
All right, what's your next one for us?

394
00:17:40,360 --> 00:17:40,560
All right.

395
00:17:40,720 --> 00:17:42,060
Speaking of USB things,

396
00:17:42,230 --> 00:17:43,060
I wrote a new app.

397
00:17:43,200 --> 00:17:46,680
Well, you know, wrote in quotes with the help of my junior assistant Claude.

398
00:17:47,140 --> 00:17:48,720
It's called USB Probester.

399
00:17:49,700 --> 00:17:51,180
And it replicates as much as possible,

400
00:17:51,340 --> 00:17:52,320
the beloved to me,

401
00:17:52,900 --> 00:17:54,480
creaky MacOS developer tool,

402
00:17:54,640 --> 00:17:54,920
USB

403
00:17:55,140 --> 00:17:55,380
Prober.

404
00:17:56,440 --> 00:17:58,880
So USB devices are really fascinatingly complex.

405
00:17:59,720 --> 00:18:03,560
When you plug in a USB device, it sends several different packets of information.

406
00:18:03,600 --> 00:18:04,420
to your computer,

407
00:18:04,960 --> 00:18:06,380
telling the computer all about it.

408
00:18:07,020 --> 00:18:08,460
First, there's the device descriptor,

409
00:18:08,960 --> 00:18:11,620
telling the PC roughly what kind of device it is and who makes it.

410
00:18:12,500 --> 00:18:13,820
Then there's the config descriptor,

411
00:18:14,500 --> 00:18:18,180
telling the computer how much power your device needs,

412
00:18:18,780 --> 00:18:21,280
and how many different kinds of interfaces it has,

413
00:18:21,800 --> 00:18:23,320
and what those are, like keyboard,

414
00:18:23,540 --> 00:18:24,040
thumb drive,

415
00:18:24,240 --> 00:18:24,460
Ethernet,

416
00:18:24,700 --> 00:18:25,340
dongle, display,

417
00:18:25,540 --> 00:18:25,780
so on.

418
00:18:26,660 --> 00:18:29,220
Each of these interfaces has its own little descriptor packet.

419
00:18:29,980 --> 00:18:31,700
For instance, for human interface devices,

420
00:18:32,000 --> 00:18:32,620
aka HID,

421
00:18:33,120 --> 00:18:37,380
There's a HID report descriptor that indicates if it's a keyboard or a mouse or both,

422
00:18:37,900 --> 00:18:40,400
and if that keyboard has the volume up, up, down buttons,

423
00:18:40,740 --> 00:18:42,160
and if it's got LEDs to light up,

424
00:18:42,240 --> 00:18:43,940
to indicate like caps lock, scroll lock.

425
00:18:44,600 --> 00:18:45,700
And that's just one kind of interface.

426
00:18:45,900 --> 00:18:48,240
There's interface descriptors for all the different kinds of devices,

427
00:18:48,480 --> 00:18:50,780
too, like disk and Ethernet

428
00:18:50,940 --> 00:18:52,320
and display and all that kind of stuff.

429
00:18:53,140 --> 00:18:54,020
This is a lot of information.

430
00:18:54,540 --> 00:19:01,260
It's packed up as packed byte codes in a concise way as the standard was created back in the 20th century.

431
00:19:01,700 --> 00:19:02,960
when you was doing USB was expensive.

432
00:19:03,780 --> 00:19:04,940
But getting at this info,

433
00:19:05,340 --> 00:19:06,880
once your device is plugged into an OS,

434
00:19:07,360 --> 00:19:08,680
has been surprisingly difficult.

435
00:19:09,540 --> 00:19:11,040
In Mac OS and Windows,

436
00:19:11,320 --> 00:19:13,120
there's really been no good built-in tools.

437
00:19:13,660 --> 00:19:14,500
In Linux, it's a breeze.

438
00:19:15,080 --> 00:19:18,120
You can use the LS USB command to see some of this data pretty easily.

439
00:19:18,900 --> 00:19:21,620
But if you programmed USB stuff and used a Mac 20 years ago,

440
00:19:21,860 --> 00:19:25,260
buried in a hard-defined developer bundle was a tool called USB Prober.

441
00:19:25,620 --> 00:19:26,200
It was great.

442
00:19:26,660 --> 00:19:30,100
It was able to get all this USB descriptor info and it parsed it,

443
00:19:30,520 --> 00:19:33,000
showing it all out in useful English and a nice tree view.

444
00:19:34,220 --> 00:19:36,600
And it can save the entire state of your USB set up as a text file.

445
00:19:36,680 --> 00:19:39,140
So you can just dump it out and you could look at it and refer to it later.

446
00:19:39,740 --> 00:19:42,440
And it also saved the raw bytes of these descriptors.

447
00:19:42,560 --> 00:19:47,040
So you could compare descriptors against devices if you're making your own device.

448
00:19:47,860 --> 00:19:50,600
As someone struggling to make Arduino pretend to be a device back then,

449
00:19:51,340 --> 00:19:52,920
USB Prober was so instructive.

450
00:19:53,740 --> 00:19:56,200
I would give a zip of it to anyone having USB questions,

451
00:19:56,380 --> 00:19:59,020
even though I think that was technically against some of the turns of service

452
00:20:00,100 --> 00:20:01,840
of being an Apple developer.

453
00:20:02,520 --> 00:20:05,880
And I use it almost every day when programming,

454
00:20:06,400 --> 00:20:08,520
since it's a great way to answer questions like,

455
00:20:09,020 --> 00:20:10,660
is that PICO actually in boot mode?

456
00:20:11,000 --> 00:20:13,520
Because all this information will change when it's in boot mode.

457
00:20:14,060 --> 00:20:15,880
Or did my changes to CircaPython's boot.

458
00:20:16,100 --> 00:20:18,280
Dot Pi to enable the second serial port actually work?

459
00:20:18,400 --> 00:20:19,340
So you can just look and see,

460
00:20:19,420 --> 00:20:23,100
oh, is the second interface for USB-CDC there?

461
00:20:24,800 --> 00:20:27,880
But MacOS Prober is dying.

462
00:20:28,620 --> 00:20:30,100
As Mac OS has evolved,

463
00:20:30,460 --> 00:20:31,760
it's starting to not work right.

464
00:20:32,220 --> 00:20:33,260
The writing has been on the wall.

465
00:20:33,420 --> 00:20:34,800
I needed to find another tool.

466
00:20:35,360 --> 00:20:37,860
But nothing I could find replicated what USB Prober did.

467
00:20:38,320 --> 00:20:41,080
So for the last month or so, I've been recreating it.

468
00:20:41,940 --> 00:20:47,120
I've become okay at writing these Tori native apps where the back end is in Rust and the front end is HTML.

469
00:20:47,380 --> 00:20:47,980
So I started there.

470
00:20:48,660 --> 00:20:51,360
There's a nice cross-platform Rust library called InUSB.

471
00:20:51,980 --> 00:20:57,380
That's like a pure Rust version of the Lib USBC library that I'm an occasional contributor on.

472
00:20:58,560 --> 00:20:59,720
That could get me most of the information.

473
00:21:00,340 --> 00:21:01,320
On both Macawson, Windows,

474
00:21:01,540 --> 00:21:04,060
I still had to do some hacks to get the Hid Report descriptors

475
00:21:04,860 --> 00:21:06,800
for reasons those are hard to get at.

476
00:21:07,400 --> 00:21:07,620
Thanks,

477
00:21:07,780 --> 00:21:10,100
Claude, for helping me figure that out, especially on the Windows side, where,

478
00:21:10,320 --> 00:21:10,580
man,

479
00:21:11,560 --> 00:21:11,780
Windows.

480
00:21:13,220 --> 00:21:16,560
You actually can't get the Hid Report descriptor out natively.

481
00:21:16,880 --> 00:21:20,740
You actually have to reconstruct it from data structures inside of Windows.

482
00:21:21,660 --> 00:21:22,080
And thankfully,

483
00:21:22,300 --> 00:21:23,180
that's a solved problem.

484
00:21:23,480 --> 00:21:24,240
Other people have done it.

485
00:21:24,900 --> 00:21:26,460
So I was able to kind of crib from that.

486
00:21:27,560 --> 00:21:29,320
And parsing of the descriptor data,

487
00:21:29,480 --> 00:21:30,700
like this is just getting the bytes.

488
00:21:30,780 --> 00:21:32,760
You actually have to parse it out to make it human readable.

489
00:21:33,420 --> 00:21:35,360
And this parsing is something I did not want to work on.

490
00:21:35,460 --> 00:21:37,260
It's mostly grown work, so I put clot on it.

491
00:21:37,880 --> 00:21:43,320
I had many test cases of known good output from the existing Mac USB programmer,

492
00:21:44,260 --> 00:21:49,480
sorry, the existing USB prover for various USB devices and what the output should be.

493
00:21:50,100 --> 00:21:51,160
It made the tasker really quick.

494
00:21:51,340 --> 00:21:54,300
And I think it's a pretty efficient use of these LLMs for programming,

495
00:21:54,540 --> 00:21:56,000
where you've got a lot of good test data.

496
00:21:57,300 --> 00:22:00,880
So the end result is an app that looks a lot like the old USB programmer,

497
00:22:01,180 --> 00:22:04,380
USB prober, but updated in a few useful ways to me,

498
00:22:04,540 --> 00:22:07,640
including providing a command line tool that acts like LSUSB.

499
00:22:08,120 --> 00:22:11,040
I now have an LSUSB for Macintosh and for Windows.

500
00:22:11,860 --> 00:22:12,800
And it's cross-platform,

501
00:22:13,240 --> 00:22:14,080
all three platforms,

502
00:22:14,470 --> 00:22:16,040
Mac Windows and Linux.

503
00:22:16,980 --> 00:22:22,040
So I can have the same view on all these different OSs for USB devices.

504
00:22:22,140 --> 00:22:25,280
So I can see like how different OSs kind of see the different,

505
00:22:25,940 --> 00:22:29,100
how the different was to see the device in case that's something that can happen.

506
00:22:30,340 --> 00:22:31,240
It's been pretty exciting for me.

507
00:22:31,680 --> 00:22:32,940
If you're interested in this tool,

508
00:22:33,200 --> 00:22:33,800
give it a download.

509
00:22:34,000 --> 00:22:36,600
There's links in the show notes and tell me what you think.

510
00:22:37,360 --> 00:22:39,240
That's really impressive that you made a multi-platform.

511
00:22:39,440 --> 00:22:43,020
I can't imagine having to rebuild those data structures and Windows

512
00:22:43,280 --> 00:22:44,720
and what you had to go through to do that.

513
00:22:45,360 --> 00:22:46,440
So that's a good use of the AI.

514
00:22:47,100 --> 00:22:49,220
Yeah, it was totally less me and more Claude.

515
00:22:49,640 --> 00:22:55,900
And one of the really awesome benefits of doing this in this Tari environment is you kind of get

516
00:22:55,920 --> 00:22:57,960
cross-platform for free if you just don't do anything,

517
00:22:58,380 --> 00:22:58,640
obviously,

518
00:22:59,260 --> 00:22:59,700
single platform,

519
00:23:00,680 --> 00:23:00,880
which is

520
00:23:00,980 --> 00:23:01,220
amazing.

521
00:23:03,480 --> 00:23:06,600
I'm a big believer in native apps, and this is, this is as native as,

522
00:23:06,960 --> 00:23:07,720
as native as I can

523
00:23:08,180 --> 00:23:12,300
get. I've seen a couple of comments on social media already of people excited to use it, so well done.

524
00:23:12,640 --> 00:23:12,780
Oh,

525
00:23:12,940 --> 00:23:13,360
thanks, thanks.

526
00:23:15,080 --> 00:23:16,940
All right. What's our last one for this at this time?

527
00:23:17,600 --> 00:23:19,340
Last episode I talked about Parachord,

528
00:23:19,540 --> 00:23:21,640
an open source multi-platform music player.

529
00:23:21,880 --> 00:23:22,980
The day our episode

530
00:23:23,280 --> 00:23:23,500
dropped,

531
00:23:24,000 --> 00:23:25,880
the developer announced the other half of what

532
00:23:25,900 --> 00:23:28,180
he's been working on in addition to Parachord,

533
00:23:28,720 --> 00:23:29,800
and that is Achordion,

534
00:23:30,260 --> 00:23:31,620
which he describes as an independent

535
00:23:31,920 --> 00:23:33,820
music community and data layer.

536
00:23:34,120 --> 00:23:35,140
And it's pretty cool.

537
00:23:35,700 --> 00:23:37,460
The first thing to know about it is that it's

538
00:23:37,600 --> 00:23:40,860
built on top of music brains and requires a music brains account.

539
00:23:41,380 --> 00:23:42,480
If you're not familiar with music

540
00:23:42,620 --> 00:23:42,820
brains,

541
00:23:42,980 --> 00:23:45,500
their goal is to be the ultimate source of music information.

542
00:23:46,060 --> 00:23:46,700
Think Wikipedia,

543
00:23:46,980 --> 00:23:47,520
but for music,

544
00:23:47,820 --> 00:23:50,240
and almost all of their data is public domain.

545
00:23:50,480 --> 00:23:54,060
They offer a number of services in addition to the APIs they expose.

546
00:23:54,580 --> 00:23:57,360
There's Picard, an MP3 tagger that I swear by.

547
00:23:57,880 --> 00:24:00,800
And then there's ListenBrainz, which is just kind of like Last FM.

548
00:24:01,420 --> 00:24:06,320
If you're using a compatible music player, it shares what you've listened to while streaming to ListenBrainz.

549
00:24:07,180 --> 00:24:07,600
But anyway,

550
00:24:08,380 --> 00:24:10,860
there's also a social network component to Achordion.

551
00:24:11,500 --> 00:24:14,820
Based on your listening history, it will recommend other users to follow.

552
00:24:15,140 --> 00:24:16,900
And it also has some blue sky integration,

553
00:24:17,440 --> 00:24:20,060
but outside of linking my profile, I haven't really tried it yet.

554
00:24:20,720 --> 00:24:23,160
But it's more than just a social network that's being built.

555
00:24:23,400 --> 00:24:25,060
The goal is to build a real community.

556
00:24:26,100 --> 00:24:28,940
And that takes us to the Explore tab on the Achordion site.

557
00:24:29,600 --> 00:24:33,280
It displays a ton of information from new releases of artists you listen to,

558
00:24:33,840 --> 00:24:35,040
to playlist recommendations,

559
00:24:35,820 --> 00:24:36,940
other recommended artists,

560
00:24:37,120 --> 00:24:38,820
similar listeners like you and more.

561
00:24:39,360 --> 00:24:40,920
And it's all integrated with Parachord.

562
00:24:41,220 --> 00:24:42,960
Choose one of the playlists in Explorer.

563
00:24:43,400 --> 00:24:47,220
And there's a play and Parachord button right there that starts it right up.

564
00:24:48,200 --> 00:24:49,720
I'm digging it and I'm all in.

565
00:24:49,900 --> 00:24:53,340
I was a last FM user 20 plus years ago before they got bought by CBS.

566
00:24:53,380 --> 00:24:59,320
but I deleted my account when they got bought as I didn't want to share my data with a big corporation to do who knows what with.

567
00:24:59,980 --> 00:25:04,920
But I should say congrats to the last FM team for going independent and recently leaving CBS.

568
00:25:05,580 --> 00:25:07,900
I've included a link to that in the show notes too.

569
00:25:08,540 --> 00:25:08,800
Anyway,

570
00:25:09,260 --> 00:25:14,840
I've also had a music brains account for probably 25 years going back to when I was ripping CDs into MP3s

571
00:25:15,210 --> 00:25:18,720
and submitting albums that was missing from music brains.

572
00:25:19,380 --> 00:25:23,340
My account is so old that's actually under my old gamer tag and I've linked to it in my Achordion.

573
00:25:23,380 --> 00:25:24,720
and profile in the show notes.

574
00:25:25,920 --> 00:25:27,640
And being a vinyl music guy,

575
00:25:28,000 --> 00:25:30,040
I wanted a way to capture what I was listening to

576
00:25:30,520 --> 00:25:32,120
get it into ListenBrainz.

577
00:25:32,680 --> 00:25:34,460
So I've updated my song Matrix project

578
00:25:34,640 --> 00:25:37,140
that has a small mic plugged into a Raspberry Pi,

579
00:25:37,700 --> 00:25:38,420
and every few minutes,

580
00:25:38,520 --> 00:25:40,060
it takes a sample of the background music

581
00:25:40,200 --> 00:25:42,000
and sends it to Shazam to identify it.

582
00:25:42,520 --> 00:25:43,860
It then displays the song title

583
00:25:43,910 --> 00:25:45,680
an artist on a LED matrix

584
00:25:46,140 --> 00:25:48,000
that I have set up using Adafruit I.O.

585
00:25:48,600 --> 00:25:49,040
So now,

586
00:25:49,230 --> 00:25:50,520
after it identifies the song,

587
00:25:50,600 --> 00:25:52,779
I just shoot that off to ListenBrainz using JSON

588
00:25:52,800 --> 00:25:53,960
via their API,

589
00:25:54,560 --> 00:25:56,940
and I now have a history of my vinyl record plays.

590
00:25:57,660 --> 00:25:59,160
Sometimes it's fun to be a geek.

591
00:26:00,040 --> 00:26:01,100
That's really amazing.

592
00:26:05,320 --> 00:26:10,220
This Achordion is so cool just because I hear people talking about Spotify all the time

593
00:26:10,220 --> 00:26:14,180
and how the fun interaction of being sort of social with your music listening.

594
00:26:14,700 --> 00:26:18,280
And I just don't want to participate in the whole Spotify infrastructure.

595
00:26:18,760 --> 00:26:18,980
Sorry,

596
00:26:19,200 --> 00:26:20,900
you know, this seems more my speed.

597
00:26:21,640 --> 00:26:21,780
Yeah,

598
00:26:22,000 --> 00:26:22,400
exactly.

599
00:26:23,620 --> 00:26:24,660
Much like the Fediverse,

600
00:26:24,900 --> 00:26:27,860
it's an alternative community to some of the bigger ones that are out there.

601
00:26:28,240 --> 00:26:30,680
And I really dig what the developer is doing,

602
00:26:30,940 --> 00:26:33,400
both from the music player's side and from the community side.

603
00:26:34,420 --> 00:26:35,080
Yeah, this is great.

604
00:26:36,060 --> 00:26:36,720
Well, that's our show.

605
00:26:37,420 --> 00:26:40,340
For detailed show notes and transcripts, visit the bootloader.net.

606
00:26:41,400 --> 00:26:42,140
Until next time,

607
00:26:42,700 --> 00:26:43,360
stay positive.

