1 00:00:02,299 --> 00:00:04,240 Welcome to The Bootloader, I'm Tod Kurt. 2 00:00:04,800 --> 00:00:05,620 And I'm Paul Cutler. 3 00:00:06,000 --> 00:00:06,980 The show works like this. 4 00:00:07,260 --> 00:00:10,560 Tod and I have each brought three things to share, and we'll talk about each one for 5 00:00:10,680 --> 00:00:11,480 about five minutes. 6 00:00:12,100 --> 00:00:15,260 For detailed show notes and transcripts, visit thebootloader.net. 7 00:00:16,000 --> 00:00:17,380 Tod, what's your first one for us? 8 00:00:17,980 --> 00:00:21,460 All right, so if you're in the US, there is a private company, well, really a collection 9 00:00:21,580 --> 00:00:26,680 of private companies, with 80,000 cameras displayed across the United States that track 10 00:00:26,680 --> 00:00:30,900 your car and you and sell that information to local police. And a synth 11 00:00:31,060 --> 00:00:34,760 YouTuber named Ben Jordan hacked them to show us how they work. If you're into 12 00:00:34,920 --> 00:00:38,820 synthesizers and watch YouTube like me, you may have heard of Ben Jordan. Around 13 00:00:38,920 --> 00:00:42,940 eight years ago he started doing music gear videos, I'm sorry, music gear reviews, 14 00:00:43,100 --> 00:00:46,940 studio tips, music theory lesson vids. These videos were good, insightful, and 15 00:00:47,000 --> 00:00:51,200 had a bit of legitimacy coming from a professional recording artist. About two 16 00:00:51,260 --> 00:00:54,140 years ago he stopped doing gear reviews because the synth gear industry has 17 00:00:54,100 --> 00:00:59,840 created a fairly toxic environment for these synth tubers, almost amounting to payola. So Ben just 18 00:01:00,000 --> 00:01:05,059 opted out. Nowadays his videos still occasionally feature music production techniques, but he's also 19 00:01:05,110 --> 00:01:10,800 turned his eye towards wider aspects of his world. Issues with AI, free software, hardware hacking, 20 00:01:11,250 --> 00:01:14,560 and most importantly for the last six months he's been working with security researchers and 21 00:01:14,680 --> 00:01:19,280 investigative journalists to look into these cameras and tracking systems made by a company 22 00:01:19,220 --> 00:01:19,940 called Flock. 23 00:01:20,900 --> 00:01:25,220 The first kind of these are cameras called ALPR, automatic license plate recognition 24 00:01:25,400 --> 00:01:25,780 systems. 25 00:01:26,520 --> 00:01:29,640 They blend into the various poles along the side of the road. 26 00:01:30,300 --> 00:01:34,220 The startup Flock, who makes the majority of them and license the data to law enforcement, 27 00:01:34,360 --> 00:01:38,060 claims they increase the number of arrests made and decrease crime. 28 00:01:38,620 --> 00:01:42,260 But as has been reported several times in the last several years, these systems are 29 00:01:42,280 --> 00:01:46,440 rife with OCR errors, because they've got like, you know, they're built in little machine 30 00:01:46,440 --> 00:01:50,480 language things and glitches that lead to arrests of random people having nothing to 31 00:01:50,520 --> 00:01:51,640 do with the crimes in question. 32 00:01:52,400 --> 00:01:56,640 And if you drive in the US, your car has been logged into this system. 33 00:01:56,940 --> 00:01:59,020 Like you don't even have a choice. 34 00:02:00,280 --> 00:02:05,880 Back in August 2025, Ben posted a video that shows how just using a modern gaming GPU, 35 00:02:06,040 --> 00:02:09,740 you can crack the Wi-Fi WPA2 encryption of these cameras. 36 00:02:10,759 --> 00:02:12,880 But also the physical security of these cameras is a joke. 37 00:02:12,880 --> 00:02:15,080 If you have access to one, you can just pull it off the pole really. 38 00:02:15,700 --> 00:02:17,800 you can easily pop out its internal micro SD card 39 00:02:17,880 --> 00:02:20,120 that contains unencrypted video it has recorded. 40 00:02:21,720 --> 00:02:24,140 So yeah, if you're a creep in a neighborhood, 41 00:02:24,340 --> 00:02:27,440 you can get access to all your neighbors, you know, 42 00:02:27,640 --> 00:02:28,240 goings on. 43 00:02:28,850 --> 00:02:32,680 But more concerning is what Ben posted in November, 2025, 44 00:02:32,940 --> 00:02:34,680 with the help of security researchers and journalists 45 00:02:34,940 --> 00:02:35,940 from 404 Media. 46 00:02:36,630 --> 00:02:38,940 There are these newer Flock safety cameras, 47 00:02:39,220 --> 00:02:40,600 that's capital Flock, capital safety. 48 00:02:41,370 --> 00:02:42,840 They were fully open and viewable 49 00:02:43,260 --> 00:02:44,960 from the IoT search engine, Shodan. 50 00:02:46,140 --> 00:02:49,320 By the way, did you know there's a search engine for IoT devices? 51 00:02:49,990 --> 00:02:53,580 You can go to and you can basically find various IoT things that are hooked up to the internet. 52 00:02:54,860 --> 00:02:59,320 These Flock safety cameras are PTZ cameras and they're designed to track people. 53 00:02:59,700 --> 00:03:02,600 They have built-in AI models to recognize and zoom in on people. 54 00:03:03,240 --> 00:03:06,380 They even zoom in enough to see what people are watching on their cell phones. 55 00:03:07,640 --> 00:03:12,719 He was able to just look at this stuff and see people using commercially available facial 56 00:03:12,720 --> 00:03:17,380 recognition software, public databases, and data breaches that's publicly available, he 57 00:03:17,380 --> 00:03:21,180 was able to identify several of these people that he saw, find their addresses, and discover 58 00:03:21,260 --> 00:03:23,760 details about their finances, health, and family relations. 59 00:03:24,020 --> 00:03:24,740 I mean, what the hell? 60 00:03:25,340 --> 00:03:30,160 What's damning is after all these vulnerabilities were reported to Flock, they did nothing. 61 00:03:30,720 --> 00:03:35,100 So Ben went on to one of these publicly available cameras and read the official response from 62 00:03:35,200 --> 00:03:40,000 Flock saying there was no security problem as the creepy AI camera zoomed in on him reading 63 00:03:40,140 --> 00:03:40,220 it. 64 00:03:41,160 --> 00:03:43,600 It's kind of a beautiful example of the hack. 65 00:03:44,440 --> 00:03:45,200 And it wasn't even a hack. 66 00:03:45,370 --> 00:03:49,840 It was just going to a public website, searching and seeing public URLs. 67 00:03:50,680 --> 00:03:55,000 But thanks to his reporting, some police departments sold on Flux promises have been canceling 68 00:03:55,040 --> 00:03:55,800 their contracts. 69 00:03:56,800 --> 00:03:57,980 So change is possible. 70 00:03:58,030 --> 00:04:01,980 I recommend that everyone go bug their city representatives and figure out if they're 71 00:04:02,080 --> 00:04:03,940 using these systems and get them to stop. 72 00:04:04,700 --> 00:04:08,600 From a privacy perspective, these things are bad, that they exist at all. 73 00:04:09,120 --> 00:04:13,120 And from a technical perspective, as a hacker, as an engineer, having them implemented so 74 00:04:13,360 --> 00:04:14,400 poorly is just embarrassing. 75 00:04:16,019 --> 00:04:18,760 So let's get them turned off and put Flock and similar companies out of business. 76 00:04:19,380 --> 00:04:22,960 Links to all this stuff and all the reporting from 404 is in the show notes. 77 00:04:23,820 --> 00:04:28,160 I've been a member of the EFF for about 20 years and they've been covering Flock for 78 00:04:28,260 --> 00:04:28,720 a while. 79 00:04:28,860 --> 00:04:32,780 They've got a number of blog posts just over the last six months about how scary it is. 80 00:04:32,800 --> 00:04:34,720 And it's none of the government's business. 81 00:04:35,240 --> 00:04:41,140 You can't tell me that Flock isn't selling this information sideways to data brokers as well as law enforcement. 82 00:04:41,680 --> 00:04:46,920 And we know that the government, the federal government, buys information from data brokers. 83 00:04:47,140 --> 00:04:54,180 Well, it's no one's business if someone's going to an abortion clinic, for example, or any kind of medical appointment. 84 00:04:54,500 --> 00:05:00,240 And it's pretty easy just using metadata like he did to figure out where people are going and what they're doing 85 00:05:00,300 --> 00:05:03,200 when you start cross-referencing the license plates with the facial recognition. 86 00:05:03,240 --> 00:05:04,620 And it's just scary. 87 00:05:05,080 --> 00:05:11,080 Yeah, I mean, one of the examples he had was just he saw a couple come out of a Home Depot 88 00:05:11,180 --> 00:05:14,280 with a bunch of brand new fancy tools loaded up into their SUV. 89 00:05:15,100 --> 00:05:19,720 And he could then see what the license plate of the SUV is and find out where they lived. 90 00:05:20,100 --> 00:05:23,780 So he could go and get those brand new tools, you know, if he was so inclined. 91 00:05:24,500 --> 00:05:28,479 Man, it's just like, you know, that Flock and the companies that use the Flock data 92 00:05:28,480 --> 00:05:33,640 are correlating all this video and AI detected information with other public 93 00:05:33,840 --> 00:05:38,520 datasets or even private datasets. And so it's just yeah let's let's try to knock 94 00:05:38,580 --> 00:05:42,320 this down a peg and make it not so easy for these people to do this sort of 95 00:05:42,400 --> 00:05:47,220 stuff. Anyway Paul what's your first one for this time? I'm a sucker for a good 96 00:05:47,280 --> 00:05:52,360 mechanical keyboard going back to an old IBM replica I had 25 years ago and I 97 00:05:52,440 --> 00:05:56,840 recently found out that my code keyboard is no longer made as WASD keyboards has 98 00:05:56,740 --> 00:06:00,820 gone out of business. I don't need a new keyboard, but I'm always window shopping 99 00:06:01,120 --> 00:06:05,040 and the Naya Connect caught my eye. The Naya Connect is the second product 100 00:06:05,120 --> 00:06:08,500 launch from Naya who has a Kickstarter campaign for their new modular keyboard 101 00:06:08,680 --> 00:06:12,300 the Naya Connect. They previously launched their split keyboard also on 102 00:06:12,460 --> 00:06:16,700 Kickstarter. The Naya Connect features a low-profile keyboard that's ultra thin 103 00:06:16,740 --> 00:06:21,260 at just under 15 millimeters. But what's innovative about it is that it's modular 104 00:06:21,440 --> 00:06:26,720 allowing users to customize their keyboard layout and functionality. You 105 00:06:26,720 --> 00:06:32,700 including a multi-pad, a 4x4 macro pad that can work as a number pad or anything you program it for, 106 00:06:33,180 --> 00:06:35,700 an extra column of six keys laid out vertically, 107 00:06:36,340 --> 00:06:42,880 four different input modules to let you replace your mouse, including a trackball, touchpad, a dial, and a floating joystick. 108 00:06:43,800 --> 00:06:48,160 And what's really neat about all of these modules is they're made for both right and left-handed users, 109 00:06:48,320 --> 00:06:51,060 with connections for each module on either side. 110 00:06:51,620 --> 00:06:58,220 It also includes Naya Flow, their custom software that allows you to program your keyboard layout and all of the modules. 111 00:06:58,840 --> 00:07:04,480 If you're quick, you can jump on the Kickstarter as it has about a week left from when this episode is being released. 112 00:07:05,240 --> 00:07:11,060 Options start at about $180 and quickly go up from there depending on which modules you choose. 113 00:07:11,280 --> 00:07:19,080 One of the options was over $400, so you're paying for it, but it's still a discount from what they're going to charge from a retail price. 114 00:07:19,620 --> 00:07:23,460 >> Yeah. One of the really cool things I love about this is 115 00:07:23,600 --> 00:07:24,860 their little mouse module, 116 00:07:25,000 --> 00:07:28,160 their input module is one thing that has 117 00:07:28,240 --> 00:07:31,600 a little round space in the middle and then four keys on the bottom. 118 00:07:31,980 --> 00:07:33,580 That round space in the middle can be 119 00:07:33,640 --> 00:07:37,280 a touchpad area or it can be a trackball, 120 00:07:37,720 --> 00:07:42,920 or it can be one of those six-dimensional nubbins 121 00:07:43,000 --> 00:07:45,840 like you use in CAD programs like the Space Mouse. 122 00:07:46,940 --> 00:07:48,540 All those parts can be swapped. 123 00:07:48,640 --> 00:07:50,400 So you can have one sort of input module, 124 00:07:50,520 --> 00:07:51,360 but then you can swap out, 125 00:07:51,420 --> 00:07:53,680 oh, I wanna have a touchpad, I wanna have a trackball. 126 00:07:54,300 --> 00:07:55,460 And it's just really clever. 127 00:07:56,220 --> 00:07:57,640 - Yeah, if you're using FreeCAD, 128 00:07:57,640 --> 00:08:00,720 you might want the space type joystick thing, 129 00:08:00,840 --> 00:08:02,100 I can't even describe it. 130 00:08:02,540 --> 00:08:04,640 And then you want a touchpad for your everyday use. 131 00:08:04,720 --> 00:08:06,700 And like you said, you just swap them in and out. 132 00:08:07,080 --> 00:08:09,200 And you can put them on either side of the keyboard. 133 00:08:09,450 --> 00:08:09,580 - Yeah, yeah, yeah. 134 00:08:09,940 --> 00:08:10,700 - Which I think is great. 135 00:08:10,700 --> 00:08:12,320 - Get one of each and put one on each side. 136 00:08:12,780 --> 00:08:12,980 - Right. 137 00:08:13,860 --> 00:08:14,220 (laughing) 138 00:08:14,920 --> 00:08:18,059 - Yeah, a friend of mine is a real big believer 139 00:08:18,060 --> 00:08:21,960 of the, they've got the Mac Magic Trackpad thing, 140 00:08:21,970 --> 00:08:23,440 which is like a really big trackpad, 141 00:08:23,800 --> 00:08:24,960 and they have that on one side, 142 00:08:25,190 --> 00:08:27,700 and they have just a normal fancy mouse on the other side, 143 00:08:28,040 --> 00:08:31,880 because doing some trackpad-y gestures are really natural, 144 00:08:32,000 --> 00:08:35,060 kind of like pinch and zoom and moving windows around 145 00:08:35,140 --> 00:08:36,080 is really nice with the trackpad. 146 00:08:36,430 --> 00:08:39,460 And so I see them doing no keyboard things 147 00:08:39,520 --> 00:08:41,020 where they're just mouse and trackpad, 148 00:08:41,659 --> 00:08:42,599 and they're really fast. 149 00:08:43,020 --> 00:08:44,159 So I think that's what I would do 150 00:08:44,159 --> 00:08:44,840 if I had to get this keyboard. 151 00:08:45,880 --> 00:08:47,420 - Yeah, I use the Apple trackpad too, 152 00:08:47,500 --> 00:08:53,160 It does make a lot of stuff easier though. There's there's times where I wish I had a mouse for really detailed use 153 00:08:54,040 --> 00:08:54,980 But I could go either way 154 00:08:55,720 --> 00:08:57,500 Totally. What's your next one for us? 155 00:08:58,460 --> 00:09:03,880 Okay, so very exciting news the ESP 32 finally supports 5 gigahertz Wi-Fi. Yay 156 00:09:05,720 --> 00:09:06,820 Everybody get your streamers 157 00:09:07,380 --> 00:09:12,860 So if you don't know ESP 32 chips and the dev boards that have them are pretty much the best way to do Wi-Fi with 158 00:09:12,740 --> 00:09:16,340 microcontrollers in my opinion. They're fast, they have lots of memory, they have 159 00:09:16,380 --> 00:09:20,240 a rich built-in set of peripherals for driving things like displays, doing audio 160 00:09:20,440 --> 00:09:24,300 I/O, you know buttons, all that kind of stuff. And you can program them either 161 00:09:24,600 --> 00:09:29,900 using the vendors supplied ESP-IDF SDK, or you can use Arduino or MicroPython, 162 00:09:30,080 --> 00:09:33,020 CircuitPython, you can even use the really modern languages like Rust and 163 00:09:33,200 --> 00:09:37,740 Swift. But the term ESP32 is pretty misleading. It's not a description of a 164 00:09:37,820 --> 00:09:42,320 chip architecture, it's more like a brand, kind of like saying Ford for a car. 165 00:09:42,320 --> 00:09:45,620 there are multiple chip architectures in the ESP32 family, 166 00:09:46,220 --> 00:09:47,780 with the current more modern one 167 00:09:47,940 --> 00:09:49,360 being the RISC-V based ones. 168 00:09:50,140 --> 00:09:52,320 And it used to be, if you were to say ESP32, 169 00:09:52,690 --> 00:09:54,500 you meant Wi-Fi microcontroller. 170 00:09:55,060 --> 00:09:56,600 But even now that's not true 171 00:09:56,800 --> 00:09:59,940 because they recently announced an ESP32-P4 172 00:10:00,580 --> 00:10:01,640 that doesn't even have Wi-Fi. 173 00:10:02,500 --> 00:10:03,700 It has a ton of GPIO, 174 00:10:03,880 --> 00:10:05,500 it seems really good at driving big displays, 175 00:10:05,760 --> 00:10:07,260 but it's not a Wi-Fi chip. 176 00:10:07,880 --> 00:10:10,560 In fact, their dev board ships with two ESP32s on it, 177 00:10:10,960 --> 00:10:17,000 this new P4 chip and then like a ESP32-C6 or something little Wi-Fi coprocessor, kind of like 178 00:10:17,040 --> 00:10:20,780 what Adafruit does with their AirLeft boards. The problem with all these different variations 179 00:10:21,090 --> 00:10:28,120 of the ESP32 Wi-Fi chips though is they've all been 2.4 gigahertz Wi-Fi. Even the most recently 180 00:10:28,460 --> 00:10:34,920 announced ESP32-C6 chip that boasts Wi-Fi 6 support is still only on 2.4 gigahertz. 181 00:10:35,750 --> 00:10:40,440 This 2.4 gigahertz spectrum is the original one that the Wi-Fi was on. It's what like the old 182 00:10:41,059 --> 00:10:44,360 cordless cell phones are on, it's what Bluetooth is on, it's what your microwave 183 00:10:44,520 --> 00:10:49,040 oven is on, and it's still pretty good for Wi-Fi for longer distance stuff, but 184 00:10:49,100 --> 00:10:53,000 if you want higher data rates, then 5 gigahertz is pretty much the norm 185 00:10:53,060 --> 00:10:57,760 that everyone uses in their home and office setups. And it's to the point 186 00:10:57,860 --> 00:11:02,260 where a lot of Wi-Fi access points will encourage you to turn off the 2.4 187 00:11:02,420 --> 00:11:06,540 gigahertz side of things. So some people have gotten home with their little 188 00:11:06,940 --> 00:11:09,860 ESP32 dev board trying to get on their local Wi-Fi, and they've not been able to 189 00:11:09,800 --> 00:11:16,760 because they've had their 2.4 gigahertz side of things turned off. But now there's the ESP32-C5 190 00:11:17,020 --> 00:11:23,360 chip. It's a dual band Wi-Fi 6 ESP32 that does both 2.4 gigahertz and 5 gigahertz. 191 00:11:24,580 --> 00:11:30,940 And while both Espressif, who makes the ESP32, and Waveshare have had these larger dev boards, 192 00:11:31,140 --> 00:11:37,680 the sort of big for like testing out stuff, that use the ESP32-C5, just recently, like two weeks 193 00:11:37,560 --> 00:11:44,920 ago, Seed started selling a Xiao board with the ESP32-C5. This is great if you already have a 194 00:11:45,040 --> 00:11:50,880 Wi-Fi project using a CutiePie or a Xiao, you might be able to just pop it out and swap in this new 195 00:11:50,960 --> 00:11:59,100 ESP32-C5 Xiao to get your project on 5 gigahertz Wi-Fi. And the other cool thing is that the ESP32-C5 196 00:11:59,180 --> 00:12:05,480 also supports Matter and Thread protocols, so I suspect you will be seeing this chip in this Xiao 197 00:12:05,480 --> 00:12:08,400 board and maybe Adafruit will make a cutie pie version of it. 198 00:12:09,300 --> 00:12:11,820 We'll be seeing those in a lot of home automation projects in the future. 199 00:12:12,860 --> 00:12:17,180 Links to the C Studio blog post about this in the show notes. 200 00:12:18,010 --> 00:12:18,720 And I can't wait to get one. 201 00:12:18,800 --> 00:12:20,600 They're currently sold out because I didn't get there fast enough. 202 00:12:22,300 --> 00:12:26,160 Do you know if the C5 you can choose which band to use in software? 203 00:12:27,000 --> 00:12:27,600 I think so. 204 00:12:28,000 --> 00:12:33,680 One of the really cool things about the ESP-IDF, which is the SDK that Espressif uses, that 205 00:12:33,680 --> 00:12:37,580 Specifics is written for their their chips is they cover all the chips 206 00:12:37,800 --> 00:12:42,180 You just want to use one API, but they'll have different flags to specify things 207 00:12:42,220 --> 00:12:45,340 I'm pretty sure I saw in the ESPN it thing 208 00:12:45,400 --> 00:12:47,500 There's this way to specify what what band you want to be on 209 00:12:47,840 --> 00:12:53,400 I do know you can tell what band you're on when you after you've connected. So there's that at least I 210 00:12:54,200 --> 00:12:58,200 Was one of those users that when I first got into microcontrollers four or five years ago 211 00:12:58,120 --> 00:13:05,000 I had 2.4 gigahertz turned off and it took me probably a week to figure out why I couldn't get this thing on a network 212 00:13:06,459 --> 00:13:08,440 Drove me crazy. So I 213 00:13:08,940 --> 00:13:13,180 Bet I'm not the only one out there. Yeah. Yeah. No, it's it's a harder. It's a harder problem 214 00:13:13,200 --> 00:13:18,460 So I'm glad I'm glad that that hurdle has been overcome at least a little bit. All right Paul. So what's your what's your second one? 215 00:13:19,100 --> 00:13:22,780 It's no secret that we're fans of CircuitPython and Adafruit products on the show 216 00:13:23,220 --> 00:13:25,760 So let's take a moment and celebrate the Adafruit fruit jam 217 00:13:26,080 --> 00:13:33,020 The Fruit Jam was first released at the end of July in 2025 and then went out to thousands of Adabox subscribers last November. 218 00:13:33,750 --> 00:13:40,680 If you haven't heard of the Fruit Jam, it's Adafruit's take on building a mini-computer using the RP2350B microcontroller. 219 00:13:41,320 --> 00:13:47,780 With all the extra GPIO in the RP2350B, Adafruit was able to add DVI out using an HDMI port, 220 00:13:48,080 --> 00:13:52,380 Two USB ports for USB hosts to hook up gamepads, mice, and keyboards. 221 00:13:53,160 --> 00:13:54,360 A microSD card slot. 222 00:13:55,080 --> 00:13:57,400 And a Stemma QT port to add additional sensors. 223 00:13:58,060 --> 00:14:00,440 All in a size that's barely bigger than a credit card. 224 00:14:00,860 --> 00:14:02,960 This literally turned it into a microcomputer. 225 00:14:03,760 --> 00:14:07,760 Not only is the product innovative, I'm blown away by the community's response 226 00:14:07,810 --> 00:14:10,640 and all the cool software that is available to run on the Fruit Jam. 227 00:14:11,320 --> 00:14:12,900 First up is Fruit Jam OS. 228 00:14:13,640 --> 00:14:16,220 Once you have CircuitPython 10 installed on your Fruit Jam, 229 00:14:16,300 --> 00:14:19,560 you can install the OS like you would any other CircuitPython program. 230 00:14:19,920 --> 00:14:25,500 It includes a few games like Breakout, Minesweeper, and a Flappy Bird clone, an IRC client of 231 00:14:25,520 --> 00:14:31,540 all things, utility apps like PyPaint, a text editor, and LarsIO Paint, which you can use 232 00:14:31,540 --> 00:14:36,380 to create MIDI music, and a couple screensavers like the Flying Toaster and the Matrix, and 233 00:14:36,600 --> 00:14:36,680 more. 234 00:14:38,120 --> 00:14:44,460 Sean Carolan wrote a Pac-Man clone originally for the SeedWIO terminal, and Cooper Delrimple 235 00:14:44,460 --> 00:14:47,040 ported it to work on the Fruit Jam and Fruit Jam OS. 236 00:14:47,550 --> 00:14:49,460 I never would have thought you could write Pac-Man 237 00:14:49,560 --> 00:14:51,860 in just CircuitPython, but that's what Sean did. 238 00:14:52,680 --> 00:14:55,160 - Yeah, it's really good too. (laughs) 239 00:14:55,460 --> 00:14:56,940 - I'll be having Sean on a future episode 240 00:14:56,940 --> 00:14:59,420 of the CircuitPython show just to talk about Pac-Man. 241 00:15:00,820 --> 00:15:01,620 Speaking of Cooper, 242 00:15:01,900 --> 00:15:03,540 who is a CircuitPython community member, 243 00:15:04,160 --> 00:15:06,240 he's been doing a ton of stuff with the Fruit Jam 244 00:15:06,400 --> 00:15:07,840 and doing it behind the scenes. 245 00:15:08,210 --> 00:15:10,040 He was one of the first to create a game for it 246 00:15:10,100 --> 00:15:11,500 with Fruitress, a Tetris clone. 247 00:15:11,980 --> 00:15:13,680 He's also worked on game pad support, 248 00:15:13,940 --> 00:15:16,600 a Fruit Jam store, and more things that I can list. 249 00:15:17,700 --> 00:15:20,080 Back in December, my last guest on the CircuitPython show 250 00:15:20,140 --> 00:15:21,100 was Dan Cogliano. 251 00:15:21,980 --> 00:15:24,540 Dan ported the Z Machine, the engine that runs Zork, 252 00:15:24,640 --> 00:15:26,740 to the Fruit Jam so he can play Zork 1-3 253 00:15:27,040 --> 00:15:28,320 or other Z Machine games. 254 00:15:28,880 --> 00:15:30,480 He also has made a Moon Miner game, 255 00:15:30,940 --> 00:15:34,200 and he's working on a maze game 256 00:15:34,320 --> 00:15:35,820 that you'll be able to play on it as well. 257 00:15:36,860 --> 00:15:39,720 But where the Fruit Jam really shines is as an emulator. 258 00:15:40,440 --> 00:15:42,340 So many of the early computers have been ported 259 00:15:42,340 --> 00:15:49,300 work with the Fruit Jam. Mac emulator? Check. It can run System 2.0 through System 7.5.5. 260 00:15:50,000 --> 00:15:57,460 Apple II emulator? Check. Intel 286? Check. But my favorite emulator is the RetroJam by 261 00:15:57,660 --> 00:16:03,600 Frank Hoedemakers. It's written in C using the Pico SDK and can emulate most 8-bit gaming 262 00:16:03,720 --> 00:16:09,380 system from the 80s, as well as my favorite 16-bit system, the Sega Genesis/Mega Drive. 263 00:16:11,500 --> 00:16:16,200 Emulators include the Nintendo Entertainment System, the Sega Game Gear, and Master System, 264 00:16:16,640 --> 00:16:18,640 and the Nintendo Game Boy and Game Boy Color. 265 00:16:19,250 --> 00:16:22,340 It works with both a gamepad or a keyboard, which is wild. 266 00:16:22,560 --> 00:16:26,940 I would have never thought you could use a keyboard to play some of these old 8-bit games. 267 00:16:27,780 --> 00:16:30,780 It also includes the ability to save your games with some of the emulators. 268 00:16:31,680 --> 00:16:35,420 The Fruit Jam is only $40 and is available directly from Adafruit, though it's out of 269 00:16:35,540 --> 00:16:36,900 stock at the time of this recording. 270 00:16:37,480 --> 00:16:39,800 For $40, it really packs a punch. 271 00:16:40,220 --> 00:16:42,940 Yeah, and if you if you want to play this play this kind of stuff right now 272 00:16:42,940 --> 00:16:45,000 And you don't have you can't get a free gem 273 00:16:45,270 --> 00:16:49,700 you can cobble together like most of the functionality of a fruit jam by using a 274 00:16:50,360 --> 00:16:57,300 RP 2350 feather and the TLB 320 DAC and and the RP 2350 275 00:16:58,020 --> 00:16:59,520 HST to DVI 276 00:16:59,960 --> 00:17:03,500 Connector like like you can basically like before before the food free gem existed 277 00:17:03,750 --> 00:17:08,100 We were all trying to get this stuff to work by using these like like five or six parts 278 00:17:08,100 --> 00:17:12,680 And it's like they're actually pretty cheap to get it all assembled. So if you want to do it right now you can still 279 00:17:15,020 --> 00:17:15,380 Also 280 00:17:16,560 --> 00:17:19,540 for other cool or I mean like most of or many of the 281 00:17:20,100 --> 00:17:24,440 things you listed are on the adafruit - playground comm site and 282 00:17:25,319 --> 00:17:27,199 There's a lot of other really cool 283 00:17:28,160 --> 00:17:29,760 Projects that are for there for fruit jam on there 284 00:17:29,760 --> 00:17:34,940 If you just search for fruit jam, like one of the ones that I I've seen that I really liked is Sam Blaney 285 00:17:34,980 --> 00:17:40,900 He's made a couple of MIDI projects that use like you plug in a USB MIDI device into the fruit jam 286 00:17:40,900 --> 00:17:42,680 And you can like use it to do stuff 287 00:17:43,580 --> 00:17:44,700 but also he's created some like 288 00:17:45,480 --> 00:17:49,780 video test patterns and sort of video screensaver type things to help you sort of like 289 00:17:50,240 --> 00:17:56,120 Learn how the fruit jam does video and I found those very very useful. Yeah, both Sam and Cooper 290 00:17:56,200 --> 00:18:00,560 I've really knocked it out of the park with with all their community driven programs that they've written for the fruit jam 291 00:18:01,200 --> 00:18:03,560 Totally. What's your next one for us? 292 00:18:04,020 --> 00:18:08,480 All right, neural networks in CircuitPython with native code. 293 00:18:09,020 --> 00:18:13,120 A few weeks ago, I came across a really interesting blog post by Ashish Patel on 294 00:18:13,120 --> 00:18:16,520 how to embed native code versions of trained TensorFlow or 295 00:18:16,720 --> 00:18:18,720 PyTorch models in a CircuitPython. 296 00:18:19,500 --> 00:18:21,000 So if you're interested in machine learning or 297 00:18:21,140 --> 00:18:24,040 embedding native code in a CircuitPython, this is a really useful read. 298 00:18:24,920 --> 00:18:28,080 TensorFlow and PyTorch are both Python-based machine learning tools for 299 00:18:28,140 --> 00:18:29,880 building neural networks and other learning models. 300 00:18:30,280 --> 00:18:31,920 Normally, these run on real computers, but 301 00:18:31,740 --> 00:18:34,340 we've seen TensorFlow models being run on embedded dev 302 00:18:34,440 --> 00:18:35,860 boards for several years now. 303 00:18:36,320 --> 00:18:39,180 In fact, Adafruit made an Edge Badge version 304 00:18:39,210 --> 00:18:42,740 of their PyGamer board that could do TensorFlow-based voice 305 00:18:42,820 --> 00:18:46,080 recognition using TensorFlow Lite in Arduino. 306 00:18:46,380 --> 00:18:48,720 These models are trained on a large, fast computer. 307 00:18:48,900 --> 00:18:50,320 And then the resulting models exist 308 00:18:50,320 --> 00:18:53,700 as a blob of generated code with essentially a single function 309 00:18:54,260 --> 00:18:55,980 that takes an input and returns a result. 310 00:18:56,880 --> 00:18:58,980 This code is small enough to run on microcontrollers. 311 00:18:59,580 --> 00:19:01,940 And there are several mechanisms for sticking them 312 00:19:01,980 --> 00:19:05,100 into your Arduino code or Rust code or Python code 313 00:19:05,120 --> 00:19:07,780 or whatever, but getting them into CircuitPython 314 00:19:07,820 --> 00:19:08,280 has been tricky. 315 00:19:09,220 --> 00:19:12,220 You can run a pure Python version of your model, 316 00:19:12,700 --> 00:19:14,180 and Ashish shows you how to do this, 317 00:19:14,440 --> 00:19:16,440 but that runs pretty slowly as you might expect. 318 00:19:17,420 --> 00:19:20,500 But Ashish's blog post gives a step-by-step process 319 00:19:20,860 --> 00:19:22,620 starting with the training of the model 320 00:19:22,740 --> 00:19:24,899 and converting the result into C 321 00:19:24,900 --> 00:19:29,440 using this tool called onnx2c.exe, whatever. 322 00:19:30,460 --> 00:19:32,960 Onnx is the Open Neural Network Exchange, 323 00:19:33,760 --> 00:19:34,460 something I didn't know about. 324 00:19:34,520 --> 00:19:36,720 It's a standard way of representing machine learning models. 325 00:19:37,700 --> 00:19:40,000 Once you run this tool, you have a resulting C code 326 00:19:40,160 --> 00:19:44,040 that's just a bunch of tensor vectors 327 00:19:44,600 --> 00:19:47,020 and no CircuitPython-specific code in it. 328 00:19:47,500 --> 00:19:50,160 So the next step is to show how you can embed that C code 329 00:19:50,220 --> 00:19:51,000 in a CircuitPython. 330 00:19:51,560 --> 00:19:52,500 And he does it in a way 331 00:19:52,520 --> 00:19:53,540 that's pretty clean and understandable. 332 00:19:54,520 --> 00:19:57,620 There's several little niggly details you need to do 333 00:19:57,700 --> 00:20:01,980 to make the CircuitPython source tree see your code 334 00:20:02,360 --> 00:20:05,020 to add your new native code that you're putting in there. 335 00:20:05,620 --> 00:20:07,680 It's more frustrating than just sticking your code 336 00:20:07,860 --> 00:20:09,400 in your board's definition directory, 337 00:20:09,460 --> 00:20:10,760 which is kind of what I would hope. 338 00:20:11,500 --> 00:20:13,960 But it shows exactly how all they need to do. 339 00:20:14,400 --> 00:20:17,240 So even if you're not interested in machine learning, 340 00:20:17,720 --> 00:20:20,400 but are interested in adding native code to CircuitPython, 341 00:20:20,740 --> 00:20:21,860 this post is pretty useful. 342 00:20:22,040 --> 00:20:26,620 It goes into much more detail than a gist I put up a couple years ago. 343 00:20:26,620 --> 00:20:31,360 And I think it's actually more up to date because the way that CircuitPython is compiled 344 00:20:31,460 --> 00:20:33,000 kind of evolves over time. 345 00:20:33,000 --> 00:20:36,580 And so what I wrote in 2022 in a gist is probably out of date now. 346 00:20:37,500 --> 00:20:39,620 But yeah, thank you Ashish for that blog post. 347 00:20:39,900 --> 00:20:40,200 Super handy. 348 00:20:40,800 --> 00:20:42,360 My partner is the smart one in the house. 349 00:20:42,480 --> 00:20:44,080 She's getting her doctorate in machine learning. 350 00:20:44,260 --> 00:20:48,540 So I read Ashish's article and most of it went over my head, but she would probably 351 00:20:48,600 --> 00:20:49,340 understand it. 352 00:20:50,840 --> 00:20:55,360 But I need to reach out to Ashish because he needs to be on the CircuitPython show. 353 00:20:55,460 --> 00:20:56,880 What he's done is pretty cool. 354 00:20:57,080 --> 00:21:01,600 And the instructions do make sense because he does take you through it step by step. 355 00:21:02,240 --> 00:21:02,360 Yeah. 356 00:21:02,780 --> 00:21:02,880 Yeah. 357 00:21:02,980 --> 00:21:08,940 And it's so nicely embeddable, these little models, because they are literally just a 358 00:21:08,940 --> 00:21:12,240 single C function that takes one input and returns one output. 359 00:21:13,460 --> 00:21:14,860 So it's really handy, really useful. 360 00:21:15,540 --> 00:21:17,040 All right, Paul, what's your final one for this time? 361 00:21:17,240 --> 00:21:22,120 I've been following on social media Washington State's proposed bill that basically adds 362 00:21:22,280 --> 00:21:25,880 DRM to all 3D printers so they can't print ghost guns. 363 00:21:27,470 --> 00:21:32,320 On January 25th Adafruit published a must-read blog post that has all the details and more. 364 00:21:33,320 --> 00:21:37,100 Washington State Representative Osman Salahuddin has proposed two bills. 365 00:21:37,680 --> 00:21:43,759 HB 2320 adds criminal liability around digital firearm manufacturing code and classifies 366 00:21:43,760 --> 00:21:46,860 the machines that make these parts as part of the firearms law. 367 00:21:47,940 --> 00:21:56,060 HB 2321 requires any 3D printer sold or transferred in Washington after July 1, 2027 to include 368 00:21:56,340 --> 00:22:00,840 mandatory DRM that has blocking features that can detect a firearm's blueprint. 369 00:22:01,510 --> 00:22:06,520 As Adafruit wrote and shared, printers would have to examine every file, compare it against 370 00:22:06,520 --> 00:22:12,440 a centrally maintained list of prohibited designs, reject flag jobs, and be engineered 371 00:22:12,440 --> 00:22:16,600 to resist bypass by users with significant technical skill. 372 00:22:17,660 --> 00:22:20,120 Which is pretty much everyone who owns a 3D printer. 373 00:22:22,580 --> 00:22:25,000 While I'm all for gun control, this is just crazy. 374 00:22:25,140 --> 00:22:28,940 You can't outlaw the tools to create something just because it creates something you don't 375 00:22:29,040 --> 00:22:29,320 like. 376 00:22:29,820 --> 00:22:30,420 What's next? 377 00:22:30,600 --> 00:22:33,020 Outlawing drill presses and milling tools as well? 378 00:22:33,540 --> 00:22:34,060 Exactly. 379 00:22:35,430 --> 00:22:38,060 You can't tell me that people won't find a way around this. 380 00:22:38,200 --> 00:22:40,360 When it comes to DRM, they always do. 381 00:22:40,800 --> 00:22:45,380 What's stopping someone from adding a Raspberry Pi or a custom microcontroller and flashing 382 00:22:45,540 --> 00:22:48,860 Clipper on it, which is done all the time in the 3D printing community? 383 00:22:49,840 --> 00:22:52,600 DRM never works and this is a terrible idea. 384 00:22:53,220 --> 00:22:57,260 If you live in Washington state, reach out to your elected representatives and tell them 385 00:22:57,360 --> 00:22:58,800 that this is a terrible idea. 386 00:22:59,580 --> 00:23:03,080 This is definitely something to keep an eye on because if one state is thinking about 387 00:23:03,160 --> 00:23:04,620 it, I bet others will be too. 388 00:23:05,620 --> 00:23:09,680 The language as it's proposed is way too broad, and I'll leave you with this quote 389 00:23:09,680 --> 00:23:11,240 from the Adafruit blog post. 390 00:23:12,080 --> 00:23:14,420 None of these controls stop determined actors. 391 00:23:14,740 --> 00:23:20,520 What they do is burden lawful users, destroy open source innovation, and force proprietary 392 00:23:20,680 --> 00:23:23,620 stacks and cloud services, not safety. 393 00:23:24,799 --> 00:23:26,240 Yeah, it's so dumb. 394 00:23:27,000 --> 00:23:29,300 This sort of stuff seems to pop up every couple of years. 395 00:23:29,460 --> 00:23:36,140 And it seems like every time I see the video of the little desktop mill, not even a CNC 396 00:23:36,080 --> 00:23:41,420 mill, just a manual mill of like someone who can create a gun in a couple of hours just 397 00:23:41,460 --> 00:23:42,460 out of bar stock. 398 00:23:42,940 --> 00:23:46,180 And it's like, it's not the tools, man. 399 00:23:47,020 --> 00:23:47,120 Right. 400 00:23:50,100 --> 00:23:52,520 We just don't need more DRM in the world. 401 00:23:53,100 --> 00:23:54,300 Yeah, yeah, no doubt. 402 00:23:55,340 --> 00:23:56,020 Well, that's our show. 403 00:23:56,760 --> 00:23:58,400 Before we go, I'd like to take a moment. 404 00:23:58,720 --> 00:24:02,440 I live in the outer suburbs of Minneapolis, which is currently occupied by ice. 405 00:24:03,240 --> 00:24:07,280 If you're looking for ideas on how you can help support those on the ground, please visit 406 00:24:08,140 --> 00:24:09,180 StandWithMinnesota.com. 407 00:24:09,940 --> 00:24:12,820 Thanks for listening, and until next time, stay positive. 408 00:24:13,080 --> 00:24:14,040 (bright music)