WEBVTT

00:00.000 --> 00:17.360
So, before I get started, I just want to say, big thank you to Marcha, to the organizers,

00:17.360 --> 00:21.000
to all the Boston people, to all of you wonderful people, let's give it up.

00:21.000 --> 00:33.880
So, I am dead program, some people call me Ron, a couple of humans call me dad, but that's

00:33.880 --> 00:36.160
not important right now.

00:36.160 --> 00:40.840
I am a technologist for hire, that means you can cross my palm with fiat currency and

00:40.840 --> 00:42.840
I will produce code.

00:42.840 --> 00:48.640
I have a small consultant called the hybrid group, where we create the software that makes

00:48.640 --> 00:53.560
your hard way of work, and we do work on a couple of open source projects, such

00:53.560 --> 00:56.800
as Tiny Go, which you may have heard of.

00:56.800 --> 01:07.640
So, at Boston, 2021, was my first go without wires talk, then, at Boston, 22, go further

01:07.640 --> 01:17.280
without wires, Boston, 23, go even further without wires, Boston, 2024, go without wires,

01:17.280 --> 01:26.120
strike, back, and that brings us to Boston, 2025, where we return to go without wires.

01:26.120 --> 01:32.440
And by this, of course, I mean Bluetooth, naturally, we start where we begin, so go Bluetooth

01:32.440 --> 01:38.360
as a package, that's part of the Tiny Go continuum, if you will, and it provides Bluetooth

01:38.360 --> 01:45.240
capabilities for go programmers, quick version of how Bluetooth works, so we have Bluetooth

01:45.240 --> 01:51.160
peripherals, which are devices like a heart rate monitor, watering system, for your home,

01:51.160 --> 01:53.760
an air tag, and they advertise.

01:53.760 --> 01:58.000
Then, we've got centrals, centrals are things that your notebook computer, a tablet, your

01:58.000 --> 02:03.600
mobile phone, they scan, okay, that's all you need to know about Bluetooth for today.

02:03.600 --> 02:09.840
Hello advertising, so for this, I'm going to show a Raspberry Pi Pico W, which is a small

02:09.840 --> 02:18.080
microcontroller from Raspberry Pi, it's an RP-2040, that is a single-core RM Cortex M0 plus,

02:18.080 --> 02:25.400
and it's got built-in and in finnion, CYW43439, separate co-processors for wireless communication.

02:25.400 --> 02:32.000
Let's take a quick look at the hardware, but first, let's run, let's see, make show video.

02:32.920 --> 02:43.480
Well, it works, looking good, so far, all right, so let's take a look at the hardware,

02:43.480 --> 02:48.360
and it's here somewhere, oh, there's a hanging off of something, oh yeah, here it is.

02:48.360 --> 02:54.320
So this is the RP-2040W, we can see that's the microcontroller, and that's the separate Wi-Fi

02:54.320 --> 03:00.280
Bluetooth co-processor, okay, so far so good, so advertising code, well, when we're

03:00.280 --> 03:05.520
advertising in tiny go, we use the tiny go Bluetooth package, so it's your basic, this code

03:05.520 --> 03:09.600
is going to run on the microcontroller, but it looks very much like any of the regular

03:09.600 --> 03:13.440
gardens are either go code that you may have ever used before in your life, we've got a package,

03:13.440 --> 03:19.320
main, we import the time package, we import the tiny go Bluetooth package, we say Bluetooth

03:19.320 --> 03:23.720
dot default adapter, since most devices only have a single Bluetooth adapter, and then

03:23.720 --> 03:28.840
our main function, first we enable the adapter, we get the default advertisements, which

03:28.880 --> 03:33.080
is the main advertisement, and then we configure it to say we're going to have an

03:33.080 --> 03:37.360
advertising type that we cannot connect to, and it's just going to advertise this local

03:37.360 --> 03:42.960
name of blue go Bluetooth, then we start that, it starts advertising, and it runs, all

03:42.960 --> 03:58.800
right, so let's see the code, will it work, famous last words, so make advertising, so

03:58.800 --> 04:05.160
we're going to flash that onto the tiny go processor, with the RP24DW, it's going to

04:05.160 --> 04:11.240
put it on there, and we see it's actually a fairly large program in tiny go terms,

04:11.240 --> 04:15.560
reasons that it actually has to flash the entire binary blob that's needed to get

04:15.560 --> 04:20.640
that in finnion code processor to work, it's actually some closed source, which we normally

04:20.640 --> 04:25.400
don't like, but what can we do about it, so now it's advertising, all right, so far

04:25.400 --> 04:30.560
so good, let's just leave it working, first demo complete, all right, good to have this

04:30.560 --> 04:40.960
applause is fine, or not, all right, so now we've seen the advertiser theoretically working,

04:40.960 --> 04:45.840
what about the scanner, so the scanner code is very similar, we're going to use the go

04:45.840 --> 04:53.480
Bluetooth package, here we go, so again package main, the Bluetooth package, the default

04:53.480 --> 04:57.880
adapter, we enable it, this time we're going to start scanning, and when we scan, whenever

04:57.880 --> 05:02.720
we find a device, we're just going to print out that information, all right, and so for

05:02.720 --> 05:10.120
this I'm going to just run it on my own machine, so if I make scanner, and you see there's

05:10.120 --> 05:15.200
a lot of Bluetooth devices, but one of them that's showing up, it says go HRS, because

05:15.200 --> 05:20.440
this is Linux, and Blue Z does not want to acknowledge my new name, if to get that's

05:20.440 --> 05:25.760
work I have to restart, but that's the same actual device, all right, so scanning, all

05:25.760 --> 05:31.040
right, so we have the basic idea here, we have scanning, advertising, and we have scanning,

05:31.040 --> 05:36.320
so the first thing you need to know about personal computers, according to Apple, is

05:36.320 --> 05:44.080
naturally it's all about advertising, but you do this, I mean actually advertising is all

05:44.080 --> 05:53.440
you need, if what you want to do is make beaconless, so advertising data is only 31 bytes

05:53.440 --> 05:58.200
in size, 31 entire bytes, and the way it works is there's some standard advertising data

05:58.200 --> 06:03.640
formats, they just sort of pack them in one right after another within this 31 byte packet,

06:03.640 --> 06:08.880
and that's all you get, nothing else, there is nothing else in an advertising packet,

06:08.880 --> 06:13.760
so when we have your basic, the simplest advertising data are the flags, those flags

06:13.760 --> 06:19.560
basically communicate, can you scan and can you connect to this device, so the advertising

06:19.560 --> 06:25.000
type of the flag is one, and the data is also one meaning that we can scan, so it's three

06:25.000 --> 06:29.920
bytes, first one is the length, which is two bytes, not including the length byte, the

06:29.920 --> 06:34.640
flags, and then the data of the flags themselves, all right, so now the local name that we

06:34.640 --> 06:39.000
saw before, it's very similar, we have the length, which is the length of the string,

06:39.000 --> 06:44.480
the type, which is 0 and 9, meaning the complete name, and then the actual data, so

06:44.480 --> 06:48.480
when we want to pack these things in together into that 31 byte packet, we have to put

06:48.480 --> 06:53.640
them one right after another, so first the flags, and then the local name, and then padding

06:53.640 --> 06:59.520
if we don't have 31 bytes more, because it's never, you know, it could only be 31,

06:59.520 --> 07:05.360
stop me if you heard this one, all right, so service data is the other type of advertising

07:05.360 --> 07:11.000
data, which basically refers to specific kinds of services, and one of the ones that's

07:11.000 --> 07:18.040
really popular is BT home, anyone here of BT home, anyone here ever heard of home assistant?

07:18.040 --> 07:24.440
Yes, so you can make devices that use the open source BT home protocol so that you could

07:24.440 --> 07:30.680
do cool things with your home automation and it could be completely open source, so I have

07:30.680 --> 07:36.200
a package that I created called go BT home, which gives you some wrappers around this,

07:36.200 --> 07:43.240
and this talk was going to be about that, but it's not, because there's this other thing

07:43.240 --> 07:49.440
called manufacturer data, manufacturer data is the data that actually is only for one particular

07:49.440 --> 07:54.400
manufacturer, it's sort of the closed source of the openness of Bluetooth, and there's

07:54.400 --> 07:59.560
this company called Apple that you may have heard of, that makes this little thing called

07:59.560 --> 08:06.000
the air tad that you also may have heard of, how interesting, so the manufacturer data for

08:06.000 --> 08:12.480
the find my protocol has been sort of a deep black box for quite a while, the manufacturing

08:12.480 --> 08:22.720
data for bytes, the type FF, meaning manufacturing data, X4C00, which is the Apple identifier,

08:22.720 --> 08:27.600
actually that's in the little Indian order, and then manufacturing data of some mysterious

08:27.600 --> 08:36.360
kind, well, closer as ten's not to stay that way, isn't that true, my dear friends, isn't

08:36.360 --> 08:44.320
that true, well luckily there's some geniuses over CMU labs, which is the secure mobile networking

08:44.320 --> 08:51.960
computer lab of the technical university of dumps not Germany, and they created this

08:51.960 --> 08:56.560
amazing project called open haystack that you may have heard of a couple of years ago,

08:56.560 --> 09:01.400
they reverse engineered the entire Apple find my protocol, and there was actually a really

09:01.400 --> 09:06.920
cool talk recently at CCC, where they went all into this, unfortunately I was not there

09:06.920 --> 09:12.640
because it's holiday time in Spain, I can't go anywhere except stay home and feed 28 people

09:12.640 --> 09:18.000
at my house. So, how am I firing my works, because you may be wondering, wait, Apple,

09:18.000 --> 09:22.160
and they like supposedly privacy friendly, and like they're loving everybody track everyone

09:22.160 --> 09:27.680
else's devices, well basically when you want to find my iPhone, you pair through that

09:27.680 --> 09:33.680
initial setup, and you create some keys, a private key and a public key, and then this

09:33.680 --> 09:38.480
public key is being broadcast by your device so that everybody else's iPhone is picking

09:38.480 --> 09:43.360
up the public key, and then using that public key encrypting enough loading that they

09:43.360 --> 09:49.600
either to Apple, all right? Now quick refresher in how public key encryption works, so we

09:49.920 --> 09:57.040
if Bob wants the send a message to Alice, if Bob has Alice's public key, that message

09:57.040 --> 10:02.560
can be encrypted, and nobody else can decrypt it except for Alice, right? So all I need is the

10:02.560 --> 10:08.480
public key, and I can encrypt a message that no one else can decrypt, even me is the sender,

10:08.480 --> 10:12.720
all right? And this is how Apple is doing it, where Apple doesn't actually know, Apple knows

10:12.720 --> 10:18.960
where your phone is, but Apple doesn't know that your phone is actually tracking their phone.

10:18.960 --> 10:28.400
So it uses the NISTP244 curve, which is a 28 byte public key, it's pretty secure. It's only

10:28.400 --> 10:32.800
been broken by the NSA in a couple of other organizations, but I don't know what I'm talking

10:32.800 --> 10:40.160
about. So luckily, seemingly labs have reverse engineered the entire find my protocol,

10:40.160 --> 10:47.360
so we have manufactured data from Apple. It's got the find my type, the payload length,

10:47.360 --> 10:53.440
the status, which could mean like battery fully charged, or battery almost out, and then

10:53.440 --> 11:00.720
the last 22 bytes of the advertising key. All right, but wait a minute, didn't I say that the key

11:00.720 --> 11:07.600
is 28 bytes, and didn't I say there's a maximum limit of 31 bytes, and what where's the bytes,

11:07.600 --> 11:13.440
man? You trying to short me the bytes? No, no, no, they're very clever, and they put those bytes

11:13.520 --> 11:19.520
in the public key. So I got it into all of this, because I just wanted to make some trackers.

11:20.400 --> 11:26.800
So I have these flight cases, one of them's over here, that I take all around the world, and my question

11:26.800 --> 11:32.880
is always where is my year? Like I only have 24 more hours, and I'm supposed to do something,

11:32.880 --> 11:39.280
and I'm just not that cool without hardware. And I'm cool, but not that cool. So I was going

11:39.280 --> 11:45.280
my way to go for the consingapore a couple of weeks ago, and I thought I really, really want to

11:45.280 --> 11:50.560
track my cases. What to do? So I discovered the open haystack and some other projects, and

11:51.200 --> 11:55.040
naturally turns into an entire project. I couldn't just make trackers, I mean, I don't want to

11:55.040 --> 11:59.600
hear else have that problem. You start just like a little weekend thing, and it just takes over

11:59.600 --> 12:08.240
your whole life. This happens. So it's called Go Haystack. This is the URL, and it is Go Rappers

12:08.240 --> 12:13.440
around all of this stuff that's been done by a lot of other brilliant people. Here's a quick look

12:13.440 --> 12:19.360
at the Go Haystack architecture. So Go Haystack has a command line interface to help us generate

12:19.360 --> 12:25.040
those public and private keys. And then we're using two Docker containers that are created by the

12:25.040 --> 12:30.160
open haystack community. One is called Maclas Haystack. There's one thing about the C-moo labs is

12:30.160 --> 12:35.760
you actually have to have Apple hardware, and I actually have no Apple hardware whatsoever. No Apple

12:35.760 --> 12:39.920
hardware was used at any of this. Somebody wants to donate some, I'll take it, don't get me wrong.

12:41.200 --> 12:48.000
So that is talking to a thing called the NSET server. NSET is a side loading project from some

12:48.000 --> 12:53.360
geniuses who figured out how to side load apps onto iPhone, kind of a dev team, but some different

12:53.360 --> 12:59.600
but similar. And so we put our public key on the beacon. It starts broadcasting the advertising data

12:59.600 --> 13:05.120
and now we're going to use other people's iPhones in order to track this beacon that I made myself

13:05.120 --> 13:10.320
by using Apple's public aid or private rather APIs. Nothing public about Apple and close source.

13:12.000 --> 13:17.440
All right. So the Haystack keys to do this, we're going to actually generate the keys.

13:19.040 --> 13:24.240
So we'll take a look at the command line interface here. So we're doing some cryptography stuff

13:24.240 --> 13:31.360
by generating the key using the elliptic P224. We extract the private key bytes. We make sure it's

13:31.440 --> 13:36.960
the correct length. Then we take that and we put it in day 64 encoding. That way we can out

13:36.960 --> 13:41.680
put it to our file. One thing that's worth noting is we have to make sure there's no forward

13:41.680 --> 13:46.160
slash because we're going to export this to a JSON file. And if we have some data that's got a forward

13:46.160 --> 13:53.280
slash in there, it's going to think it's escaped. Invalid key wears my bad, man. All right.

13:54.160 --> 14:06.880
So let's flash some code. We'll at work. All right. So we say Haystack and keys. And let's call it

14:06.960 --> 14:19.040
it. All right. So now if I say, oops, if I say cats, oops, if I can type,

14:19.040 --> 14:24.960
fast them. keys, there's the private key, public key, and the hash version of the key I just

14:24.960 --> 14:29.520
generated. Obviously, this is now in the public internet. So I'm not planning on using this for anything

14:29.520 --> 14:36.720
secure. I guess it's a little late for that. Here's the JSON file that's being generated because

14:36.720 --> 14:40.800
this is the JSON file that we're going to use to upload to the Apple infrastructure so that we

14:40.800 --> 14:47.280
can actually figure out where it's the device. So we generated the key so far so good. All right.

14:48.320 --> 14:53.520
Now, a lot of this is using the find my package. Naturally, I wanted to do all of this and go

14:53.520 --> 14:57.920
and since most of the code that's out there is written in Python, some of it is sort of random

14:57.920 --> 15:05.520
Python's JavaScript, some, I don't know, some Swift, like it's kind of a pot peri of different codes.

15:05.600 --> 15:11.760
So this is a very simple sum package that's part of GoHaseTac where we basically, all the stuff

15:11.760 --> 15:16.240
I was showing you with the advertising data is all in there. So we can parse the data, which we're

15:16.240 --> 15:22.480
going to use if we want to look to see is my device around me and then we can create this data

15:22.480 --> 15:27.040
in order to then flash it onto the device because we have to put it on the hardware, right, or

15:27.040 --> 15:34.640
else it's not going to work. So the firmware that we're going to run is going to run on initially

15:34.640 --> 15:42.000
on an RP-2040W, which is that same little board that I used initially? That was supposed to be the

15:42.000 --> 15:52.240
board. Let's take a look at the firmware code. So this is, now this will run on any one of the

15:52.240 --> 15:59.440
tiny Go boards that has Bluetooth support. So it will work on an RP-2040W. It will work on

15:59.440 --> 16:06.640
any of the boards from A to Fruits or from PyMoroni that have a built in U-Blocks hardware,

16:06.640 --> 16:10.960
host controller interface. It will work on the north, except you conduct the boards. So it will work on

16:10.960 --> 16:17.280
any of these. And basically this is what's running on the hardware itself and very similar to what we saw

16:17.280 --> 16:22.880
before, right? We're going to get the key data and then we're going to advertise it. An advertisement

16:22.880 --> 16:27.520
that cannot actually be connected to, it's just because we're not supposed to connect to some

16:27.520 --> 16:32.400
of these missing phones. It won't let us, right? We're going to, it got the nice long interval,

16:32.400 --> 16:37.680
and then we're going to put into that the manufacturing data that we created using that find my package.

16:38.240 --> 16:44.560
All right? We enable it. We set a random address, random address meaning it's not the built in

16:44.560 --> 16:50.400
that address of your Bluetooth. And here's the missing bytes of the key, right? The six bytes

16:50.400 --> 16:54.560
that we were talking about earlier, like where are those bytes? Those bytes are actually part

16:54.640 --> 17:01.520
the address contains the first bytes and the advertising data contains the rest. Boy,

17:01.520 --> 17:07.600
my glad those German researchers figured this out. And so basically that's what we're looking at.

17:07.600 --> 17:15.920
All right, let's flash the tracker. So now if I use the haystack command, and I say flash,

17:16.800 --> 17:24.560
and let's see, is it the key? I believe it's the, what do they call it? Boston? And then

17:26.720 --> 17:37.600
I guess we're going to put it on a pico w. And it should flash it onto this board if the demo

17:37.600 --> 17:50.640
gods are kind, thinking, thinking, thinking hard. All right, the code is on there. That was it.

17:51.360 --> 17:56.480
All right, how do you know it worked to program? How do we know it really worked? Come on,

17:56.480 --> 18:04.560
how do we know it works? Well, let's scan. So the haystack has a scan command. So it's very similar

18:04.560 --> 18:15.760
to the, well, what happened there? I know a time space continuum. This dimension is so confusing.

18:17.520 --> 18:26.640
Whoops. Yeah, there we go. Haystack scan. How much you want the bet that I have multiple tabs

18:26.640 --> 18:32.880
open? Yep, sure enough. It's probably did not actually put in the, but it looks exactly like the code

18:32.960 --> 18:46.720
we saw before, right? Let's see. Go, haystack scan. It's under command. 11 minutes, we're fine.

18:47.680 --> 18:56.640
We can do this. Grace, under pressure. Scan, oh yes. So we scan for others, meaning one thing about

18:56.640 --> 19:01.680
Apple is they don't actually like doing normal Bluetooth stuff. They don't actually use a MAC address.

19:02.080 --> 19:06.880
They use a magical Bluetooth ID that they made up themselves, and that the ID is different on

19:06.880 --> 19:11.840
every single MAC computer for every single Bluetooth device. I guess they think security through

19:11.840 --> 19:17.600
obscurity is a good thing and you can tell that's working out for them, right? So basically the scan

19:17.600 --> 19:23.840
here is the same as the scan before, but we're going to look for manufacturing data that is from Apple

19:23.840 --> 19:28.000
and then based on that, we're going to parse the data and display it. All right, let's see if this

19:28.000 --> 19:42.320
actually works. So if I say haystack scan, it's scanning all of the devices that are find my

19:42.320 --> 19:49.520
devices in this room. And the one that says full, I think the FD1 is actually the device I just flashed.

19:50.160 --> 19:54.720
This way we can actually find our own stuff and a bunch of other people's.

19:55.440 --> 20:03.360
So tiny scan is a scanner because I'm on the road. I've got this gigantic, you know,

20:03.360 --> 20:09.440
and video equipped, where the brick is heavier than the computer. Also, fun fact, I can't

20:09.440 --> 20:14.640
charge this on an airplane that uses all the power in the row. People are like, this is not working

20:14.640 --> 20:21.120
and I'm like, you know, for me neither. So for this, I'm going to use a prime erroney

20:21.120 --> 20:27.760
badge of 2040W because very, I'm in an airport and, you know, some mysterious country and I want to know

20:27.760 --> 20:32.640
is my stuff around. It's actually working. So I have a conference badge similar to the one I'm

20:32.640 --> 20:37.440
wearing here that I'm going to use for scanning. So let's take a look at this tiny scan code.

20:39.440 --> 20:45.840
Yeah, see that link worked. And so if we take a look at tiny scan, it looks very similar to what we

20:45.840 --> 20:52.640
saw before in Daniel's demo, right? We're using the tiny terminal, which is part of the tiny

20:52.640 --> 20:57.920
go set of packages that lets us do terminal emulation. We're going to end it that and then we're

20:57.920 --> 21:01.760
going to do the scanning and when we see the scanning, we're going to display that information

21:01.760 --> 21:07.040
in the terminal. If we find the unregistered device, we'll display that. If we find our device

21:07.040 --> 21:12.160
or any other devices, we'll display that. All right, let's see that actually work.

21:13.120 --> 21:16.640
Flash, tiny scan. Let's look at the hardware though real quick.

21:19.360 --> 21:23.920
And oh, I stopped the video. That makes it not work.

21:28.880 --> 21:32.960
For this, by the way, I'm showing all of this video is running through web assembly. If you want

21:32.960 --> 21:35.600
to find out about that, come to my talk in the web assembly room tomorrow.

21:36.320 --> 21:45.040
All right, so this is the badge and we can see it here. I'm not going to flash it just because

21:45.040 --> 21:52.000
we're running long time, so I'm just going to take an unplug the one device and plug in the other.

21:55.680 --> 22:00.480
This will totally work, right? It just needs power. And I don't have any batteries.

22:01.200 --> 22:06.400
They use them all up with our table today. All right, so now here it's booting up. And we can see

22:08.960 --> 22:19.520
it's looking for devices starting a scan. We'll find any. It should. It's quite a few of them

22:19.520 --> 22:37.120
around here. One in doubt reboot. I know I've got actual scanable scan and things here.

22:39.520 --> 22:44.160
The video got bored. All right, while we wait for that,

22:44.560 --> 22:53.200
so there I was packing for go for consing a poor. I put this thing on the internet. Next

22:53.200 --> 23:00.640
you know, it's on hacker news, like top three links for like two days. So, I mean, all of my ideas,

23:00.640 --> 23:05.280
I thought were important and I worked on so much and this little thing I did is something on hacker news.

23:05.280 --> 23:10.880
I'm not why should I complain, right? So at this point, I'm like, all right, I've been to finish

23:10.880 --> 23:15.680
that all the stuff I'm supposed to do for this upcoming conference. So I finished the go for tags.

23:15.680 --> 23:22.640
I guess I should show you the go for tags. So the go for tags are my my custom air tags that I made.

23:23.200 --> 23:29.840
This is, this is the one that goes in flight case one and I took apart the other, the second one,

23:29.840 --> 23:35.120
so you can sort of see it because that's what actually goes inside of this 3d point printed

23:35.120 --> 23:45.120
flexi item. This is a Nordic semiconductor NRF 528040, which, hello, we're not done. So this is an

23:45.120 --> 23:52.080
NRF 528040 that I plugged into regular batteries because please do not check lithium batteries

23:52.080 --> 23:59.280
in your check log to John any plane I am on. Thank you. So I have the tracking also to the

23:59.280 --> 24:05.280
go for bots. You may have seen the go for bots here. The go for bots are have an NRF 528040 as part

24:05.280 --> 24:09.600
of their controls because, you know, I mean when you're one of the go for bots, you need to know

24:09.600 --> 24:16.000
where the other team members are, right? So I had to find my go for bot capabilities. Then I flew

24:16.000 --> 24:21.120
to Singapore and it actually worked. I mean this is the first time I had a chance to test this.

24:21.920 --> 24:29.200
So here is a screenshot of me leaving Spain taking the train the Madrid flying to Doha.

24:29.280 --> 24:37.040
Then flying to Singapore. This is my route. If you ever follow me on social media, this is my

24:37.040 --> 24:41.120
cipher. It means I took a train from Oviedo the Madrid and flew to Doha on Singapore.

24:42.160 --> 24:46.000
So then we went around Singapore. The hosts were really amazing. It kept working.

24:47.280 --> 24:51.040
Here this is the gray go for bot going between my hotel and the conference venue.

24:51.600 --> 24:59.360
I don't know what I was. Then I flew back and even worked in mid flight.

25:00.240 --> 25:05.760
So you might notice these little dots here in the middle of the ocean. So this is people

25:05.760 --> 25:11.920
are connected with their iPhones to the in flight internet and within range of my cases,

25:11.920 --> 25:17.760
which are down in the hole by the way, this is my check luggage. So we're 10,000 meters,

25:17.760 --> 25:23.600
which is 36,000 feet for people who use the imperial system. And we're in the middle of the ocean.

25:23.600 --> 25:27.360
And it's actually working. So I figured this was the only way I could top a balloon floating

25:27.360 --> 25:31.920
over the land is actually showing it working at 10,000 meters. Incredible.

25:33.680 --> 25:38.640
So let's take a look at some of it. Let's see if it actually is working. This is really brave,

25:38.640 --> 25:46.080
but with a hay. So this is like case one at my hotel. Let's take a look at the history.

25:46.160 --> 25:49.520
This is the web interface that's provided this part of Mclean's hay snack.

25:50.560 --> 25:56.480
And yeah, you can see here I am leaving Spain flying to Doha. I don't know what that is.

26:01.200 --> 26:08.160
I was asleep on the flight. I wasn't down asleep. I mean, I don't think.

26:08.880 --> 26:13.920
I assume that somebody who's using one of those hinky sim cards that like, you know,

26:14.080 --> 26:18.320
free data forever kind of thing, but it's on another planet.

26:19.200 --> 26:24.000
All right. So what's next? We go haystack. So a key rotation,

26:24.000 --> 26:30.080
not the way you can rotate the keys, the same way that actual air tides do. Support for Google

26:30.080 --> 26:35.200
find my device because supposedly it works. Haven't tried it. I have an Android phone, but I haven't tried it.

26:35.200 --> 26:39.280
More features for kong skin like solid detection, that way you know if they're following you.

26:39.360 --> 26:45.840
Right? And then a surgery go to replace Mclean's haystack because that way we can just be

26:45.840 --> 26:50.480
go all the way. And because that project is not as well maintained like no one's done anything

26:50.480 --> 26:57.040
on it for six months. So connect all the things using go even at 10,000 meters as you cross

26:57.120 --> 27:02.640
plan it earth without wires. Time to go down the org. Thank you.

27:13.040 --> 27:18.160
I could not figure a way to fly a drone at 10,000 meters height in this room. So I'm sorry

27:18.160 --> 27:21.440
if you were expecting an actual life. If you want to see a drone come to my talk tomorrow.

27:21.760 --> 27:28.160
Wrong. I think we have one way to go for next year. We will launch a satellite using time to go.

27:29.600 --> 27:32.560
Please do not tell anyone my talk topic for next year.

27:35.360 --> 27:41.360
People, if you have a lightning storm that was accepted. So you got a message by me. Come to the

27:41.360 --> 27:43.360
front and sit right.

