Episode Transcript
Transcripts are displayed as originally observed. Some content, including advertisements may have changed.
Use Ctrl + F to search
2:00
And so I heard through friends that
2:02
this was a thing. And
2:04
for some reason, I had some spare time
2:06
recently and I went looking for
2:09
it and I found, I
2:11
think I pinged someone at Canonical and said, hey, is
2:13
there an image I can download? And they said, no,
2:15
we're not pushing it at the moment because it's not
2:17
ready. And I thought, well, that sounds like
2:19
a challenge. So I went
2:22
looking and the fact that
2:24
they said, we're not promoting it, there
2:26
isn't an image. We're not
2:28
promoting it. And I was like, okay, that sounds like
2:30
there is one and I need to go
2:32
and find it. So the internet is your
2:34
haystack and an image of Ubuntu core is
2:36
the needle with which you are seeking it.
2:39
Yes, and it turns out I could focus
2:41
my attention on one small section of that
2:43
haystack, the GitHub section of that haystack, and
2:45
I found it. And it's basically
2:47
an image you can download or
2:49
you can download the repository, clone
2:51
the repository and run a
2:53
couple of commands to build the image locally.
2:56
And what you end up with is
2:58
an image file that you can splat
3:00
onto a disc or a USB stick
3:03
and boot it up and have
3:05
a play with it. And what you end up with
3:07
is something that looks very much like a standard Ubuntu
3:09
desktop, but apps doesn't work and
3:12
all the applications that are pre-installed are snaps
3:15
and you have a graphical desktop and it
3:17
looks to all intents and purposes
3:19
like a normal Ubuntu environment. But
3:21
I thought I'd have a play with it
3:24
on a weird, quirky machine. My
3:26
Steam Deck. And so I
3:29
splatted the image onto a USB key
3:31
and then I've got a USB key that's
3:33
got USB A on one end and USB
3:36
C on the other end is one key.
3:38
And so I could de-do the image onto
3:40
it and then plug that into the top
3:42
of the Steam Deck and boot from it.
3:46
You might ask why. It
3:48
was like the nearest computer I had and
3:50
I thought, well, it'd be fun to
3:52
try it out. So I tried it out. And because
3:54
I knew that Steam was available as a snap, I
3:57
would be able to do snap install Steam. And
3:59
then... use my Steam Deck with
4:02
Steam but running on Ubuntu instead of
4:04
running on Steam OS. It's like swapping
4:07
out the OS but I'm keeping Steam and
4:10
most of it worked. It was surprisingly far
4:13
along for something that they're not showing off
4:15
yet because some stuff doesn't work. Installing
4:17
and launching Steam is one thing. Did you
4:19
actually try playing games? Did you get hardware
4:22
accelerated graphics and things like that? Sound? Yes
4:24
and yes and no. So
4:27
yes I did install Steam and installed
4:29
a couple of games and
4:32
one of them was Vampire
4:34
Survivors and the controls just
4:36
worked and yes I
4:38
presume there was some 3D acceleration because it wasn't
4:40
you know buggy three frames a second or anything
4:43
but the sound didn't work and
4:45
that I think is something to
4:47
do with a weird AMD audio
4:50
driver that's on the Steam Deck.
4:53
Now the interesting thing was I
4:55
went grubbing around on the internet and
4:57
I found the driver and I found
5:00
where people have talked about how to
5:02
get that working on other normal non-immutable
5:04
distros on the Steam Deck. Some people
5:06
like swap out the OS and they
5:08
wanted to try it and
5:10
I couldn't really do that very
5:13
straightforwardly because it's this
5:15
special kernel that's built inside a snap but
5:17
what I can do is try the newer
5:20
kernels because I thought well maybe it's landed
5:22
upstream and the interesting thing is because the
5:24
kernel is a snap I could just do
5:26
snap refresh PC kernel and then just tell
5:28
it a different channel in the store because
5:31
there's loads of kernels built and
5:33
published in the store and so I could just swap
5:35
the kernel to a newer one
5:37
very easily and reboot and there I'm on
5:39
a newer kernel. That was an enlightening
5:41
thing. It didn't fix the sound problem because I
5:43
think the driver is still missing something but that's
5:46
something that can be fixed. The
5:48
very fact that I could just do snap refresh
5:51
the kernel and just get a different one I think
5:53
was quite compelling. So I find
5:55
all of this very interesting particularly
5:58
the fact that because everything's
6:00
a snap. Actually upgrading
6:03
the kernel was a trivial
6:05
action. For those not familiar
6:07
with how snaps work, a
6:09
single snap can have different revisions and
6:11
versions available that you can cherry pick
6:13
which version you want and you were
6:16
able to find a kernel version that
6:18
probably had the right stuff as it
6:20
happened. Maybe there was some firmware missing
6:22
or something. But
6:24
you were doing this some
6:26
weeks ago because I remember talking to you
6:28
about this well over a month ago and
6:31
I think as listeners hear this
6:33
episode they'll think, ah yeah I've
6:36
seen the popular open
6:38
source press talking about Ubuntu core
6:40
desktop but you were trailblazing with
6:43
this weeks before this became
6:45
sort of public knowledge. I did ping
6:47
my friend at a particular article and
6:49
say, never mind I found it and
6:53
they said please
6:56
don't blog about it. And
6:59
I said of course of course because I know
7:01
it's not ready and I think
7:04
they wanted to get their marketing message out
7:06
and also tell the story of why it
7:08
exists rather than just some random external guy.
7:10
I found this thing on the internet I
7:12
played with it and it's busted. You
7:14
know they want to tell the right story and
7:16
actually at the summit that we went to recently
7:19
they did do a good
7:21
presentation about it with the
7:24
back story, how we got here, you know
7:26
what it does, what's not working
7:28
yet and so all the caveats were there and so
7:30
I think that's probably the right thing to do. I
7:32
did write a blog post about it. I was sat
7:34
at the bar with Wimpi before the
7:37
presentation was given writing up my blog
7:39
post and at the moment when they
7:41
started talking about the presentation I hit
7:44
the button and published my blog post. I
7:47
didn't say anything in there that
7:49
was inappropriate or wrong I don't
7:51
think. Or leaked anything before they'd
7:53
had the official announcement but
7:55
also that presentation at the Ubuntu
7:57
summit touched on something very important.
8:00
that you're just talking about here,
8:02
which is the idea behind
8:04
this Ubuntu called Desktop, is
8:07
it's like a Lego kit of
8:09
parts. And this was one
8:11
of the things that they were
8:14
emphasizing. We give you all of
8:16
the bits so you can compose
8:18
your own system. Maybe you're an
8:20
IoT digital signage
8:22
company and you want to stick the
8:24
bits together in order to create an
8:26
image that does and so
8:29
when you were talking about replacing the kernel with
8:31
a newer version that was better suited
8:33
to your needs, this is entirely the point.
8:36
All of these different bits connected together
8:38
to make what you want. Yeah,
8:40
and I hadn't actually picked up
8:42
on how important that was as part
8:45
of the story until they gave the
8:47
talk, which is that it's not just
8:49
about having a desktop. It's not just
8:51
about having a UBlue or Fedora Silver
8:53
Blue like thing. It's way more than
8:56
that, like building an appropriate
8:58
image that has the specific snaps
9:00
you need for a particular use
9:02
case or for a particular industry.
9:04
Maybe it's a device that's attached
9:07
to a milling machine and all
9:09
it needs is the application that
9:11
runs the milling machine and doesn't
9:13
need like a full desktop and
9:15
doesn't need Steam or anything like that. And so
9:18
the manufacturer, well maybe at lunchtime,
9:21
but the manufacturer of
9:23
the machine that this thing talks to could
9:26
create an appliance that has
9:28
a supported kernel, all
9:30
the other bits and pieces that are required
9:33
to do whatever that appliance needs to do.
9:35
So I am a normal Linux
9:38
user who wants a normal Linux
9:40
desktop, so you've just described this
9:42
thing as being read-only. How
9:45
on earth do I get anything done
9:47
with that kind of constraint? Yeah, it's
9:49
not really read-only. There's plenty of places
9:51
you can put stuff. There's a
9:53
few interesting tools that are shipped on it and
9:55
one of them is called Workshops and it's a
9:57
bit like, I think it's called DistroBots. which
10:00
is like a window
10:02
that you launch and in that window you'll get
10:04
a terminal and that terminal could be running anything
10:07
it could be running Ubuntu or it could be
10:09
running any other distro and then in that you
10:11
can install applications that aren't
10:13
available as a snap or you
10:15
can do development work or you
10:17
can run classic like unconfined applications
10:19
that's the goal so a developer
10:22
would be able to use this
10:24
and they wouldn't be stymied by
10:26
the fact that it's a
10:29
large proportion of the file system is read
10:31
only because they'd have this environment in which
10:33
they a window in which
10:35
they can work where they would
10:37
have all the usual tools and they can
10:39
NPM install stuff and PyPy and all the
10:41
other places where you install stuff so
10:44
it's not generally available if you know where to
10:46
look you can find it and
10:48
you can build it and have a play with it I
10:51
don't think they want necessarily people to file loads
10:53
of bugs on it yet because it's not ready
10:55
but it's certainly interesting to
10:58
see how a full desktop
11:00
could be delivered and I guess
11:02
by the time the next LTS
11:04
comes around in April 2024 this
11:07
will probably be offered as
11:09
an option but more
11:11
importantly for them will be offered as
11:13
a way for hardware manufacturers and
11:15
other system integrators to be able
11:18
to deliver their own custom
11:20
images I found it interesting and it's
11:22
another chapter in the whole Robin2 story.
11:24
Yep and for those of you that
11:26
want to know where to find it
11:28
send an email to show at linuxmatters.sh
11:30
or join our telegram at linuxmatters.sh slash
11:33
telegram You
11:37
were chatting recently about me
11:39
writing an activity pub
11:42
inbox using an AWS
11:44
lambda function and I thought I would
11:46
talk a bit about the tooling I
11:48
used to write that function. I'm glad
11:50
because I was wondering about this I
11:52
had no idea how you did what
11:54
you did so I want to
11:56
know more. So when you
11:59
log into AWS and go
12:01
to the Lambda service, you can
12:03
create a function and it gives
12:05
you an editor, sort
12:07
of little code editor with a little file manager
12:10
there which shows you all the files that you're
12:12
defining as part of your code. And
12:14
it's a fairly basic editor with
12:16
some syntax highlighting, but it doesn't
12:18
really have the sort
12:20
of four features of a desktop ID
12:23
that you might be used to. So
12:25
I went looking to see if there was a better
12:27
way of doing this with something a bit more fully
12:29
featured. Is the answer E-Max Org mode?
12:31
Oh, of course. The answer
12:33
to everything is E-Max Org mode, isn't
12:36
it? No, the answer that I went
12:38
with in this case was VS Codeium,
12:40
which is the rebuild of Visual Studio
12:42
code with the telemetry turned off, and
12:46
a plugin for that called AWS
12:48
Toolkit, which is published by AWS
12:50
themselves. And they do a
12:52
similar plugin for other IDs as well. But
12:56
what you can do with this is you
12:58
create an access key in AWS and you
13:00
enter that in the plugin in VS Codeium
13:02
and then it gives you access to all
13:04
of the services that are
13:06
supported by the Toolkit, one of which is
13:08
Lambda. And when you
13:11
expand Lambda, it will show you the functions that
13:13
you've created and you can right click on one
13:15
of those and say download and it will download
13:17
the files that currently exist there onto your local
13:19
machine. And then you can have
13:22
at it and edit away as you like.
13:25
When you then want to run it
13:27
or deploy it or test it out or whatever,
13:29
you can right click on
13:31
your function and say upload and
13:34
then you can pick the folder where you've
13:36
been editing it locally and
13:38
you get a couple of options for
13:41
how to do it. But then basically
13:43
it zips them up, uploads them and
13:45
deploys them in AWS. And
13:47
then essentially it's ready to run. And you can
13:49
do this as often as you like and sort
13:51
of iterate on what you're doing. So
13:53
is any of this language specific or have
13:55
you got a choice of languages as to
13:57
how you want to compose this stuff? under
14:00
functions are kind of
14:02
like a layered container type system
14:04
under the hood. Basically, you can
14:06
pick a language to start
14:08
with. And I think by default, you get
14:10
the option of Python and JavaScript running on
14:13
Node.js. And maybe there's one or two others.
14:15
But there are also others which have been
14:17
built by the community. So you can include
14:19
a layer for another language instead. And
14:22
at that point, you can basically
14:24
do whatever you like within Python.
14:27
In my case, I'm using Node.js,
14:30
in which case, you're basically
14:32
you create what is like any
14:34
other Node.js package, and
14:36
you can add a package.json
14:39
and install NPM modules. And
14:41
then you just upload all of that with your
14:43
node modules directory into your own code, as long
14:45
as you have the file in the right place
14:48
with the function in the right place that Lambda
14:50
knows about, and everything else can be linked from
14:52
there. How do you test it
14:54
locally? Like, it runs in a particular
14:56
way in AWS somehow on a machine
14:58
somewhere. What if you want to just
15:00
make sure it works locally, especially how
15:02
do you do that if this is
15:04
part of an interaction with your Mastodon
15:06
instance, or with your blog, or some
15:08
other like external thing needs to talk
15:10
to this just to build a whole
15:13
load of test cases or something? The
15:15
way that I've been doing it, because this is a fairly
15:18
standalone thing at the moment, is
15:21
a way in the AWS console
15:23
where you can create test files,
15:25
which are basically a JSON file,
15:28
which looks like the request
15:30
that it gets in when you invoke the
15:33
function. Like a fake payload kind of thing.
15:35
Exactly. And you can define these and
15:38
you can run them in AWS, but
15:40
that's also supported in
15:42
the AWS toolkit as well. So you
15:44
can create these JSON files locally and
15:46
have them alongside your code, and
15:48
then use the AWS toolkit plugin to
15:51
say invoke with this request. And then
15:53
it will send that off to AWS
15:55
and you get the output in Todium
15:57
in the output window. Oh, nice. which
16:00
is really nice yet cuz doing it
16:02
in a ws itself is a bit
16:04
janky and the way output log and
16:06
the way you edit the files like
16:08
it's actually not no real calling
16:11
for editing jason files it's just gives
16:13
you a text area which
16:15
is very nice given how people are
16:17
using the given how can i be
16:19
about it syntax so yeah
16:21
that's basically how i've been doing it
16:23
is also possible another way of doing
16:25
this if you can get. A
16:28
few different sort of doctor based solutions which
16:30
will run a lambda like
16:33
service locally you can. Essentially
16:35
invoke your code within that container and
16:37
it will be like it's running on
16:40
lambda for my needs that's not really
16:42
required if you have like you
16:44
say if you got something which would be more integrated
16:46
if you were running it for real. You
16:49
might want to do it differently or you
16:51
might want to deploy a test version where
16:54
you can invite it safely without hitting your
16:56
real systems or something. This all
16:58
sounds very comfortable in terms of
17:00
a development environment have you found
17:02
there's been any sort of increase
17:04
in your momentum working on
17:06
your lambda functions as a result of
17:09
having this environment available. Definitely
17:11
i'll be the ways i've done it before i either
17:14
editing in the web page
17:16
which is yeah fiddly. All
17:18
having some sort of ccd pipeline where
17:20
i'm committing it and then that's building
17:22
the code and then using
17:24
some plug in in the ccd system to package
17:27
it and deploy it and then. Having
17:29
to run some command on the command line
17:31
to invoke it and see the output but
17:34
doing it this way is yet it's there
17:36
is some not as quick as it could
17:38
be because the as i said there's several
17:40
options in the upload process and in at least
17:42
in. The podium plug
17:44
in there's not a way of setting
17:46
the dip them as you always use
17:48
these options, you always have to go.
17:51
Yes, do it like this, yes, use this folder
17:53
yes i'm happy to do it and
17:55
then it does it you can't just say do what
17:57
I did before, so if I could do that. would
18:00
be even quicker but actually yes I found it's
18:02
a lot of a smoother development
18:04
ride doing it this way than the
18:06
previous ways I've tried. Are you planning to write all this
18:08
up in a blog post somewhere? I
18:11
should get around to that. There's all sorts of things we talk
18:13
about but I should write up in a blog post. It's much
18:15
easier to talk about them. But
18:18
hopefully once I've got the whole activity
18:20
pub thing a bit more good
18:23
to go I'll write a nice big blog post about
18:25
how it all hangs together and how I've done it.
18:30
Linux Matters is part of the LateNight Linux
18:32
family. If you enjoy the
18:35
show, please consider supporting us and
18:37
the rest of the LateNight Linux
18:39
team using the PayPal or Patreon
18:41
links at linuxmatters.sh support. For
18:43
$5 a month on Patreon you can enjoy an
18:45
ad free feed of our show or
18:48
for $10 get access to all the
18:50
Late Night Linux shows ad free. You
18:52
can get in touch with us via
18:54
email show at linuxmatters.sh or chat with
18:56
other listeners in our Telegram group. All
18:59
the details are at linuxmatters.sh slash
19:02
promote. Using
19:06
software I found on the
19:08
internet I have cobbled together
19:10
my own airdrop alike solution.
19:13
As a non-freedom hater what's airdrop?
19:18
Airdrop is a fantastic
19:20
facility to Apple ecosystem
19:22
users where you can
19:24
just deposit files from
19:26
any device to any
19:28
of your contacts. So
19:30
just beam a
19:32
file to them from anything
19:34
to anywhere providing it's running
19:36
an Apple operating system. It's also
19:39
used for comedy purposes on airplanes
19:41
to send to all the other
19:43
passengers who happen to have an iPhone with
19:45
the air thing turned
19:47
on. So yes it's mostly
19:50
like the right way to send it to
19:52
other people who are the person
19:54
nearby but people use it for
19:56
comedic purposes as well. on
20:00
mobile phones that people used to use
20:02
at college to send each other inappropriate
20:04
images. Exactly. Yes, exactly that.
20:07
Now I've come to appreciate
20:09
AirDrop since as a family we
20:11
all got iPhones and my wife
20:13
and daughter now use AirDrop with
20:16
great efficiency to send files backwards
20:18
and forwards particularly like homework assignments
20:21
for review and stuff like that.
20:24
I was thinking what I do
20:27
and listen carefully to see if this sounds familiar,
20:29
I usually find myself using Telegram
20:32
either on my phone or my
20:34
laptop to send a file to
20:36
some other device that I have
20:38
Telegram installed on in order
20:40
to get data from place A to place
20:42
B. Does this sound at all familiar? Yes,
20:45
I do this all the time. I put
20:48
a file in the saved items group
20:50
chat and go and have a look
20:52
for you again later. And
20:54
maybe you also like send some
20:56
copy pasted text backwards and forwards
20:59
as well. So
21:01
if you've ever done this thing and
21:03
you live in a world where all
21:05
of your devices are not Apple devices
21:07
but you want the convenience of AirDrop,
21:10
I have cooked up a little recipe
21:13
for you and the principal ingredient in
21:15
this recipe is a bit of software
21:17
called local send and we
21:19
will have a link to the local
21:21
send website in the show notes and
21:24
local send is available
21:27
for everything from
21:29
everywhere, everything in store
21:31
software. So it's available for Linux,
21:34
Mac and Windows. It's even available
21:36
for Fire OS and iOS on
21:38
tablets and Android. So you can
21:41
install this thing on
21:43
anything and the clue
21:45
is in the name. What it allows you to
21:47
do is send a
21:50
file or a folder or
21:52
a text snippet over
21:55
your local network. Consider that
21:57
your LAN or devices that
22:00
connected to the same Wi-Fi network
22:03
to any other device that's on that
22:05
network running local send. So both machines
22:07
have to be running local send if
22:09
you send a receive? They do, yes.
22:11
Right. But it all works
22:14
extremely well and it automatically
22:16
discovers devices that are indeed
22:18
on those same local networks.
22:21
And in fact there's even a facility
22:23
whereby you can just share a link.
22:25
So if somebody doesn't have local send
22:27
installed, it can create a
22:30
link that you can send to them
22:32
and providing they can access your IP
22:34
address. They can
22:36
access the content via the
22:38
local send service on your
22:41
device, which sounds
22:43
helpful, but it's
22:46
kind of a bit janky and
22:48
not the best user experience. But
22:51
I found a solution to that. And
22:54
in addition to doing automatic
22:56
discovery, each device also has
22:58
a hash code to identify
23:00
it. So if you're
23:02
on the same network, but you're
23:04
not seeing the devices in the
23:06
automatic discovery, you can
23:09
simply say, I want to send this file
23:11
to the device with this hash code and
23:13
you type it in or even you
23:15
can put the IP address in, you know, if you
23:18
really want to go basic. And
23:20
it works great. I've turned on a
23:22
feature called quick save. So
23:24
now what I'm able to do is
23:27
I'm able to send a file from
23:29
one machine to another, be it
23:31
my phone to one of my desktops. And
23:34
I don't have to automatically
23:36
accept the, do you want to
23:38
receive this file on the target
23:41
machine? It just automatically sends
23:43
the file over and sticks it in
23:45
a sort of a directory that I've
23:48
defined as where local send deposits files.
23:50
But the clues in the name, it's
23:53
called local send. And
23:55
I wanted something more because
23:57
airdrop doesn't have that. I
24:01
can hear people typing emails and
24:03
toots and treats at us right
24:05
now saying, but Martin,
24:07
KDE Connect is a thing and you should
24:10
be using KDE Connect. Why are you not
24:12
using KDE Connect? Come on Martin, KDE Connect.
24:15
I will answer the KDE Connect question
24:17
at the end of this audio essay.
24:19
Okay. Because
24:23
this is the key thing. Local send is
24:25
great if you're on the same network. But
24:28
what if you're not, which is the
24:30
position I find myself in quite often
24:33
when I'm traveling. So
24:36
if we sprinkle some tail
24:38
scale or zero tier into
24:41
the mix, your
24:43
local send can now be
24:45
anywhere your zero
24:48
tier network or your tail
24:50
net exists. So whilst
24:52
I was at the Ubuntu Summit with
24:54
Popi recently, I was
24:56
able to take pictures and
24:59
send them to my family using
25:02
local send because we are now
25:06
always on the same network wherever
25:08
any of us may roam. And
25:10
to do this on an iOS
25:12
device, for example, tail
25:14
scale and zero tier when they're
25:16
installed as apps on your phone.
25:18
And the same is true if
25:20
you're using Android effectively create a
25:22
VPN profile and does as long
25:24
as you've got VPN enabled, you're
25:26
now on the same network
25:29
at all times. And
25:31
the discovery protocols for local
25:33
send work over
25:35
both of those providers, zero tier
25:37
and tail scale. And in fact,
25:40
some of my devices are
25:42
on zero tier and tail
25:44
scale. So I see those twice
25:46
because it takes them on both
25:48
those networks. So this
25:51
has become a great way
25:53
to send large files backwards
25:55
and forwards, avoiding the limits
25:57
of email attachment sizes and
25:59
not. having to deal with does this
26:02
person have telegram installed, yes
26:04
or no, or whatever the other messaging
26:06
tools might be. So this has become
26:09
a viable on my Linux
26:11
machine being able to airdrop files
26:13
to my iPhone or vice
26:15
versa. It's worked out really well. But
26:18
Alan made a good point, which is,
26:20
well, surely KDE Connect. And
26:23
I know Mark has got more experience
26:25
with KDE Connect and I have tried
26:27
to do the same with KDE Connect.
26:30
But on iOS, I
26:32
have not had any joy
26:34
getting KDE Connect on the
26:37
phone to see
26:39
any devices anywhere via
26:42
any means irrespective of whether or
26:44
not I'm doing all of this
26:46
funky tail scale or zero tier
26:48
stuff. So I
26:50
have tried that again recently,
26:52
and I just simply can't get
26:54
KDE Connect to work. But if
26:56
it does work for you on
26:59
Android, I imagine that
27:01
this would enable you to do the
27:03
same thing. And
27:05
adding one of these mesh VPN solutions
27:07
over the top would mean that KDE
27:10
Connect could in fact expand
27:13
its horizons beyond your local
27:15
network to anywhere your connected
27:18
devices exist. I'm now
27:20
thinking of the times I send
27:22
files like recently, Sophie
27:25
messaged us and said, please please scan
27:27
in a certificate, exam certificate and send
27:29
it to me at university. And
27:32
I yeah, sure enough, I can scan it in. But
27:35
I'm thinking what's the best way to send this honking
27:38
PDF to her. And
27:40
I just attached it to WhatsApp conversation I'm having with
27:42
her because I know that she'll be able to detach
27:44
that and do something with it. And
27:46
I think if I could convince the whole
27:48
house to install
27:51
local send and tail scale or just
27:53
do it for them when they're not
27:56
looking, then yeah, that might
27:58
be a better way for me to. to
28:00
send stuff back and forth. And it would also mean
28:03
they could print to my home printer from wherever
28:05
they are and stuff like that. I
28:08
keep wanting to do this, but I don't
28:10
know, something stops me. There
28:12
are always just easier ways to do it. Yeah,
28:14
the easiest way is AirDrop. But
28:17
of course, that's only good to
28:19
you whilst everyone's on that ecosystem.
28:21
And I invariably find myself being
28:24
the odd duck. Welcome to
28:26
my world. This
28:28
is why I came up with this solution. But
28:30
Localsend is a fab piece of software. It's definitely
28:32
worth taking a look at. It's
28:35
open source. It's available for everything. So
28:38
give it a try and let us know how you get
28:40
on with it.
Podchaser is the ultimate destination for podcast data, search, and discovery. Learn More