00:00:03
well uh good afternoon everyone I'm
00:00:05
ericm uh project leader for Studio like
00:00:08
I was just introduced
00:00:10
as uh I tend to talk a little fast I'm
00:00:13
going to slow down a little bit but we
00:00:15
do have a long way to go before the sun
00:00:17
goes down I've only got a 30 minute
00:00:19
Workshop today so uh just wanted to talk
00:00:22
about uh this um what we have here today
00:00:27
A bit of a problem that we have kind of
00:00:30
as a uh community and that's that we
00:00:33
have
00:00:34
uh a bit of a problem in that as
00:00:37
developers we tend to develop for
00:00:39
developers and for ourselves so just
00:00:43
wanted to talk about that a little bit
00:00:45
so um what was funny is that as I was
00:00:47
browsing Reddit the other day I actually
00:00:50
came across this
00:00:51
Meme and you may have seen it before um
00:00:55
it's a little bit of thing coming along
00:00:58
Windows 10 is being killed off by
00:01:00
Microsoft in October
00:01:02
25 and you know we have an advantage
00:01:05
here where we can probably or a thing
00:01:07
where we can probably take advantage of
00:01:10
coming up but we do have a problem in
00:01:14
that there is a bias in that people
00:01:18
coming into Linux seem to think they
00:01:21
have to run stuff from the terminal all
00:01:23
the time or that it's for power users or
00:01:27
things like that now personally
00:01:30
I have been working on abun Studio to
00:01:32
try to bring it to
00:01:35
the the everyday user for the past six
00:01:39
and a half years and to try and make
00:01:41
sure that people can use it and not have
00:01:45
to worry about making it complicated and
00:01:47
we finally got to that stage in 2404
00:01:51
where people can just start it up be
00:01:53
ready to go to do a professional audio
00:01:55
video graphics work just out of the box
00:01:58
and it's actually getting a lot of good
00:02:00
positive feedback especially with 24.10
00:02:03
where we have moved to the generic
00:02:05
kernel and been able to configure kernel
00:02:09
options by default and I'll show you a
00:02:11
bit about that in a um in a little bit
00:02:15
later but um I am going to pick on our
00:02:18
friends at Fedora I used to be a fedora
00:02:21
developer so I can do that I'm a little
00:02:23
I giving myself a little bit of license
00:02:25
for that we look at their
00:02:28
um look a little bit at their web page
00:02:30
this is a little snipp it from their web
00:02:32
page this is the Fedora workstation
00:02:34
where we're talking about we'll read
00:02:36
that a little bit Fedora workstation is
00:02:38
a polished easyto use operating system
00:02:41
for laptop and desktop computers with a
00:02:43
complete set of tools for developers and
00:02:46
makers of all kinds I want to highlight
00:02:49
that last portion a little bit with a
00:02:52
complete set of tools for developers and
00:02:56
makers of all kinds for
00:03:00
developers and makers of all kinds for
00:03:03
developers so you see where we're going
00:03:05
with this they're targeting developers
00:03:07
they are not targeting the everyday end
00:03:11
user which to me is a little bit
00:03:14
problematic um I I just you know kind of
00:03:18
rubs me the wrong way um I was when I my
00:03:22
first uh computer experience was a on a
00:03:24
Commodore Amiga and if you're familiar
00:03:27
with that it was an all gooey based
00:03:29
thing if were in the terminal you were
00:03:30
doing it wrong um all of their
00:03:33
configuration was done in a GUI if you
00:03:35
were running anything it was done in a
00:03:37
guy um if you were programming you were
00:03:39
doing it in a text file which is I mean
00:03:42
expected but it you know then um my
00:03:46
first computer that we actually own that
00:03:48
was my uncle's computer my first
00:03:49
computer that we actually owned was a
00:03:50
com 64 I learned how to program on that
00:03:53
in basic so uh if you any of you were
00:03:56
following the summit Matrix Channel you
00:03:59
may have seen me goof around with
00:04:01
somebody talking about we were talking
00:04:03
about a little bit of old basic and I
00:04:05
just you know called them loopy and told
00:04:07
them 10 go to 10 should be their tagline
00:04:10
if you know what that means that's
00:04:11
literally a loop it literally Loops in
00:04:14
the code if you run it so anyhow so why
00:04:18
would we use guey apps and yes the
00:04:20
terminal is faster but only if you know
00:04:24
the commands
00:04:25
already uh for newcomers being told to
00:04:29
go to a terminal is a
00:04:31
deterrent um it will be every time and
00:04:34
you know especially if they're having to
00:04:36
do some base configuration or run
00:04:39
something that isn't something that
00:04:41
needs to be done every day developers I
00:04:45
have noticed do tend to scratch their
00:04:46
own itch and develop for themselves I do
00:04:50
it and I have caught myself doing it and
00:04:54
I was like well actually this is
00:04:56
something that the uh end user is going
00:04:59
to be needing to do so this is something
00:05:03
that we need to be doing and uh I I need
00:05:07
to actually run write a front end
00:05:09
for uh so for in order for desktop legs
00:05:13
to be considered for everyday computer
00:05:15
users developers need to start
00:05:16
developing for non-developers and focus
00:05:19
on the graphical user
00:05:21
interface so this saves end user time
00:05:25
how much is your time Worth to think
00:05:27
about it this saves the end user their
00:05:30
time how much is their time worth and it
00:05:32
saves you support costs because then
00:05:35
they're not going to have to hunt
00:05:36
through the memorized terminal code
00:05:39
terminal commands and you're not going
00:05:42
to have to tell them all the time where
00:05:44
are they going to have to look for
00:05:45
configuration
00:05:47
files
00:05:49
um
00:05:50
so this is where I there are actually
00:05:54
two tools that you can use that are very
00:05:57
basic there's Q dialog and enity they
00:05:59
have compete with each other but zenity
00:06:01
is the most featureful it has the
00:06:05
most uh different options available they
00:06:08
are both now this is slightly
00:06:10
hypocritical but I'm getting they're
00:06:12
they're both command like tools but they
00:06:15
present a graphical user
00:06:17
interface uh Q dialogue does also not
00:06:21
look so great on
00:06:23
gome especially on default auntu because
00:06:27
the user has to take great strides to
00:06:30
configure it to look good for the uh
00:06:34
Ubuntu experience like you have to make
00:06:37
some environment variables so um being
00:06:40
the technical director for edubuntu I
00:06:43
have taken some strides to getting the
00:06:46
settings correct so that edge
00:06:50
BTU can actually look decent with cutees
00:06:55
and KD apps because we Shi some of those
00:06:57
by default
00:06:59
so I'm GNA give you a use case where I
00:07:03
had somebody who is not technical in
00:07:05
fact a 12-year-old who I did not want to
00:07:08
give administrator access to our server
00:07:12
to run a Minecraft server that he has
00:07:14
with his friends from
00:07:16
school and that's my son Jonathan Johnny
00:07:19
needed a way to start this and stop this
00:07:21
Minecraft Bedrock
00:07:23
server it's a non- Java server and it is
00:07:27
run out of our Ubuntu
00:07:30
server and I was not going to about to
00:07:33
give him an admin access to start and
00:07:37
stop using a systemd service that I had
00:07:40
on our
00:07:41
server so I created a Cron job for it to
00:07:46
look for a specific file on that
00:07:49
server and if it sees that file it's
00:07:51
going to start the server if it doesn't
00:07:54
see the file it's going to stop the
00:07:55
server or if the file doesn't exist it's
00:07:58
not going to do anything if it sees the
00:08:00
file and the server is already running
00:08:03
it's not going to it's going to start
00:08:04
the Ser it's going to keep the server
00:08:07
running so we I made a solution where
00:08:10
the file is
00:08:12
created and then it can be synced with
00:08:15
nextcloud next he has that on his laptop
00:08:19
and then nextcloud syncs it to the
00:08:21
server and the server sees the file
00:08:24
starts up the
00:08:28
service the the app to create was
00:08:30
written in bra in bash with a front end
00:08:33
in zenity and it actually runs in
00:08:36
Windows subsystem for Linux and it was
00:08:38
actually very easy to create and by the
00:08:41
way Bedrock runs most Rel in Windows you
00:08:44
can run it
00:08:45
in in Atlantic SP very hacky so I'll
00:08:50
show you kind of what it looks like here
00:08:52
this is um a exact screenshot of my
00:08:55
son's machine he is a wild robot fan so
00:08:57
he has as his desktop wallpaper but this
00:09:00
is what the zened dialogue looks like
00:09:04
it's just a couple of radio buttons he
00:09:06
can either start it or stop it and it
00:09:09
will tell him what the state state of
00:09:11
the server
00:09:13
is and whether or not to he needs to
00:09:17
start it or stop it and it's his option
00:09:21
and he starts it it'll create that file
00:09:24
it'll sync within a minute that server
00:09:27
starts running and he's off and running
00:09:29
with his
00:09:32
friends so and there's the
00:09:36
code that's the code that it takes to
00:09:39
run it and you can see it's just
00:09:41
checking to see if that file is there or
00:09:43
not and then it has it's basically
00:09:48
creating a
00:09:49
variable and then if that is
00:09:54
one one option then it creates the file
00:09:58
by go executing touch to that
00:10:01
file and if if it's not
00:10:04
there or if it if it's the other option
00:10:08
it removes
00:10:10
it and then it just tells him it'll
00:10:13
start within one minute and then it goes
00:10:15
and there is a fail safe if it bugs out
00:10:18
it says there's an error occur an error
00:10:20
has occurred and that's his cue to come
00:10:21
get
00:10:24
me so um I do have if you have your
00:10:28
laptops and have zenity installed and
00:10:31
that's as easy as if you're running a
00:10:33
boon 2 which you probably are if you're
00:10:35
at this conference apt install ubben or
00:10:38
app install
00:10:40
zenity and we can actually write a
00:10:44
simple bunch of code here you can
00:10:47
actually write some zenity right now and
00:10:50
it will look a lot like
00:10:52
that so I'm going to actually try to if
00:10:56
it will let me oh
00:11:00
you can actually write
00:11:02
a to write that so let's see if it'll oh
00:11:06
oh darn it you're supposed to be
00:11:11
interactive
00:11:16
yeah you know it it's supposed to let me
00:11:19
demonstrate that but it's not being very
00:11:24
Cooperative
00:11:25
so if you guys want to give that a try
00:11:28
go ahead um we are only oh gosh I've
00:11:32
already got 15 minutes
00:11:34
in so either way let's go ahead and skip
00:11:37
that part so um the first window is what
00:11:41
you would get and you can type in just
00:11:45
hello world and then the second
00:11:48
window is what you'll get back and then
00:11:52
um there's multiple options for what you
00:11:54
can get like for instance you can put in
00:11:57
a calendar
00:11:59
and if you want to get the date that's
00:12:01
what it comes back
00:12:03
with or
00:12:05
let's do color we can do a color
00:12:08
selection
00:12:09
box and get back the RGB color that RGB
00:12:13
color can then be converted to whatever
00:12:16
color you want or even have it output
00:12:19
that hash whatever you would really like
00:12:21
to
00:12:22
do it's even file selection dialogue and
00:12:26
it comes up with the exact path on the
00:12:28
system
00:12:31
and if you don't want it to come up like
00:12:34
an information
00:12:35
box you can make a notification system
00:12:38
notification right there and then so
00:12:41
really the options are endless in what
00:12:43
you can do with
00:12:44
this and what we've done with um Ubuntu
00:12:49
Studio and Ed Ubuntu is we have these
00:12:51
installers which are probably going to
00:12:53
be renamed customizers in the next
00:12:56
version uh and these are for installing
00:12:58
and uninstalling The Meta
00:13:01
packages and you can add and remove meta
00:13:04
packages their dependencies and
00:13:06
recommends using these
00:13:08
applications and for the removal what we
00:13:12
do is we take and we find out which
00:13:17
applications are the recommends of these
00:13:21
packages and then we mark them as Auto
00:13:26
just to make sure and then we do an auto
00:13:30
remove on all of those packages now if
00:13:32
there is any it does have the side
00:13:34
effect that if there are any other Auto
00:13:36
removable packages in the system those
00:13:40
will get Auto removed as well um just if
00:13:44
it all it also means that if your system
00:13:46
is doing that that you have been
00:13:48
maintaining your system very well I will
00:13:53
say um so here's the abuna studio
00:13:56
installer which I get I again said might
00:14:00
be renamed customizer it was first
00:14:02
written in TK tickle which we uh which
00:14:05
is ancient you can see it on the upper
00:14:07
right hand corner there it did not
00:14:09
follow any um gtk or cute specifications
00:14:13
therefore it always showed up looking
00:14:15
like it was from the
00:14:16
90s and it was it had a problem that
00:14:20
could not scale to uh High DPI and that
00:14:23
was when the uh person who created it
00:14:27
came to me and said uh what can we do
00:14:28
about this so I was just like needs a
00:14:31
complete rewrite there's nothing we can
00:14:33
do there if we're going to go anywhere
00:14:37
with it it is be Rewritten so back uh
00:14:40
last year and a half ago for 20304 I
00:14:43
took on the project rewrote it in bash
00:14:47
insanity and at the time I had just been
00:14:50
um working on a lot of bash stuff using
00:14:54
q q dialogue in my previous uh work
00:14:58
where working with the uh kuun Focus
00:15:01
project so we had done a lot of that and
00:15:04
so we were
00:15:07
doing a lot with that I'm sorry a lot
00:15:10
with that so it just made a simple
00:15:12
transition to take a lot of that
00:15:14
knowledge and apply it to
00:15:16
this
00:15:18
and also on in 2304 we were um Reviving
00:15:23
edu my wife is the uh Project Lead for
00:15:27
that so uh we took upon ourselves to do
00:15:31
that but we also needed some way to
00:15:33
install and uninstall meta packages for
00:15:36
uh different age groups so we did the
00:15:41
same
00:15:42
thing and created that but we also made
00:15:45
the utility able to change the look and
00:15:49
feel based on the age group that was
00:15:52
there as well um and uh we may be able
00:15:56
to make this able to to customize per
00:16:00
user in the future so say you have a uh
00:16:05
5-year-old or 4-year-old in preschool a
00:16:08
uh 10-year-old in elementary school or
00:16:12
pre primary school and a uh 12-year-old
00:16:15
in middle school or uh or uh secondary
00:16:20
school so you can have one user
00:16:23
configured for Prim preschool one user
00:16:26
conf configured for primary one
00:16:28
configured for secondary overall look
00:16:31
and feel and have different package
00:16:33
groups um and we also have a way to hide
00:16:37
and show and I'll get to that in a
00:16:39
minute as well to that in a minute as
00:16:41
well for a B Studio we also have the
00:16:44
abuna studio audio configuration program
00:16:48
which uh was initially built to
00:16:52
configure the Qui pipar Quantum and in
00:16:55
20304 at the time we were well in 20
00:17:00
3.10 there I had made a command line
00:17:03
utility to make to uh do that in 20304
00:17:07
but again this is where I was like I
00:17:09
made a command line utility and I didn't
00:17:12
expose it to the users the end users so
00:17:16
I was just like okay I need a front end
00:17:19
so I made a um I made it for
00:17:23
2310 and the lo and behold feature
00:17:26
creepe
00:17:27
happened so so I created it for I
00:17:31
created this initially to be able to
00:17:34
control the the quantum which is the
00:17:36
buffer and Sample
00:17:38
rate and um then I added the ability to
00:17:43
start and stop
00:17:46
um the uh start and stop Jack the Jack
00:17:50
pipe wire interface so that people could
00:17:53
use Jack on its
00:17:54
own if you don't know what this is see
00:17:57
me afterwards and then I found out uh
00:18:01
and then 2404 came around and we decided
00:18:04
to start and stop a dummy audio
00:18:06
interface for people who want route
00:18:08
their audio so that didn't interfere
00:18:10
with other
00:18:11
things and then for
00:18:14
24.10 because we stopped using the low
00:18:16
latency kernel be able to change start
00:18:20
change the kernel boot parameters so
00:18:23
that low latency could be configured on
00:18:25
the fly or or not really on the fly but
00:18:27
low latency be started or configured and
00:18:31
then as you rebooted it could be either
00:18:34
a generic kernel or running on the low
00:18:37
latency parameters and you can see that
00:18:39
in the lower window lower window
00:18:42
there so and this is all being done the
00:18:47
the top one just gives you the menu
00:18:50
selection and then the bottom one there
00:18:51
that will actually write a uh a uh
00:18:57
grub drop file configuration for the
00:19:03
defaults for back to edubuntu for the
00:19:07
menu
00:19:07
Administration what this will do was
00:19:10
this is this will hide each checked um
00:19:15
desktop file will be hidden from not
00:19:18
administrator users what this does is
00:19:21
this scans the uh user share
00:19:24
applications and the snap applications
00:19:27
for desktop
00:19:30
files checks for what is already hidden
00:19:34
in that other directory which is in user
00:19:37
share edun to
00:19:41
Applications
00:19:42
then figures out
00:19:46
well and because because that's the
00:19:49
directory is hidden for uh not not
00:19:53
administrators it will then
00:19:56
overwrite and create desktop files with
00:20:01
desktop entry no
00:20:03
display equals true for in that edge
00:20:08
into applications folder which comes
00:20:10
very last in the path
00:20:13
for uh the non administrator users and
00:20:18
it sees that desktop file and hides it
00:20:22
from the users so they don't see it in
00:20:24
the application overview for Gnome or if
00:20:27
even if they were running a desktop
00:20:29
environment they wouldn't see it in
00:20:30
their
00:20:31
menu so and that can't be changed by the
00:20:35
non-administrator users because they
00:20:36
would need a
00:20:37
password uh they would need to be able
00:20:40
to basically hack it and you know You'
00:20:42
you can't really do that very easily
00:20:45
so that's what we are doing with zenity
00:20:48
and the code for this I wanted to show
00:20:51
you the code but I'm having a lot of
00:20:53
difficulty with that so let me see
00:21:06
so I'll do a Bo to Studio installer real
00:21:09
quick I am starting to run out of
00:21:14
time so here's a Bo Studio
00:21:20
installer and as you can see I defined
00:21:22
my functions first lots of shell check
00:21:25
disables because I shell check you know
00:21:28
oh oh any questions came up here let me
00:21:32
go ahead and move this oh it's
00:21:36
not you know what because I'm a nice
00:21:42
guy I'll just kill
00:21:47
that I'll unify my outputs so I can
00:21:49
actually see what I'm
00:21:55
doing all right
00:21:59
so you can see here I uh Define my
00:22:01
functions first I have a recursive for
00:22:04
just use for
00:22:06
debugging we'll go down here and this is
00:22:09
the auto package remove
00:22:12
function now we use Q app batch in here
00:22:15
that's the only cute app we actually use
00:22:17
for
00:22:18
it we do this slape thing because it
00:22:21
takes a little while to build the array
00:22:24
that
00:22:25
actually creates the menu that you see
00:22:29
at first in Ubuntu Studio installer and
00:22:32
this is true for edubuntu installer as
00:22:34
well and it is declaring an array of
00:22:39
packages we want to look at and
00:22:42
examine and then creates a creates a
00:22:44
table
00:22:46
here
00:22:47
and this these two lines here are a bug
00:22:50
I need to remove those and um looks like
00:22:53
I'm going to be filing an SRU
00:22:56
tomorrow um
00:22:59
so then it comes up with and you can see
00:23:01
the zenity command here and it does it
00:23:03
inside a subshell because what we're
00:23:05
doing is we're creating a
00:23:08
variable and it is creating that
00:23:11
variable from the output of this command
00:23:14
and then it is taking the array that we
00:23:18
just built based on all of this junk
00:23:21
that we just did here building this
00:23:24
array and we're building this array
00:23:26
based on whether or not we're getting an
00:23:29
error here from D package minus s to
00:23:32
test whether or not that meta package is
00:23:35
actually
00:23:37
installed and if it's installed it's
00:23:40
going to come back with an error if it's
00:23:42
or it's going to not come back with an
00:23:44
error if it's in if it is not installed
00:23:46
it'll come back with an error and then
00:23:47
we have a false and that will help us
00:23:50
build this table and it will come up
00:23:52
with the actual
00:23:55
application so we'll go ahead and write
00:23:57
it real quick
00:24:08
so here's Q batch running real
00:24:11
quick now it does this just because it
00:24:14
takes a little while to build that table
00:24:16
and here we go this is what it looks
00:24:19
like now I can uncheck and recheck or
00:24:23
what have you I don't have the music
00:24:25
education bundle here but that's okay
00:24:28
just wanted to give you guys kind of a
00:24:30
idea of where we're at so far I don't
00:24:33
actually want to do anything right now
00:24:35
because that could be you know changing
00:24:37
my
00:24:38
system you can kind of see what we're
00:24:41
doing here now there is a little bit
00:24:44
here where it has to kind of compare the
00:24:46
output
00:24:48
of the selected package here create a
00:24:53
create an array out of it and then
00:24:57
compare that
00:24:59
to what was checked before and figure
00:25:01
out what was unchecked or what was
00:25:03
checked figure out what was added and
00:25:06
subtracted and it has
00:25:08
to do a comparison and then it will
00:25:11
figure out what it needs to install or
00:25:13
uninstall based on that and it's it's
00:25:16
very tricky to get bash to do that so if
00:25:19
you ever want to figure out this code
00:25:20
you can look on Launchpad Ubuntu
00:25:22
studio-h installer and the code is all
00:25:25
there you're more than welcome to look
00:25:27
there
00:25:30
so and it gives people a whole lot more
00:25:33
information that way next thing I want
00:25:36
to look at I'm going to discard my
00:25:38
changes because that would be bad to
00:25:42
change um we'll look at audio
00:25:53
config and this is one of those things
00:25:55
where it has to run self- recursively
00:25:56
too in order to um actually it runs this
00:26:00
as part of a user system D
00:26:04
file which um starts at login in order
00:26:08
to load some pulse
00:26:11
audio uh modules in order to start and
00:26:14
stop that dummy audio module that I was
00:26:18
talking
00:26:19
about then there's
00:26:21
um the uh Quantum settings that I was
00:26:25
talking about which are all right here
00:26:29
then there's we're going to write those
00:26:31
parameters upon Boot and it writes it
00:26:34
into an Etsy file so Etsy config
00:26:38
file
00:26:41
um here is where it's just checking to
00:26:44
see if whether or not the user is
00:26:47
configured by default to be able to do
00:26:49
it and whether or not they're in the
00:26:51
audio group and of course we've always
00:26:53
got the classic bail out whether or not
00:26:56
there is an error if there's an error
00:26:58
and it will just bail out and say
00:27:00
there's a problem in which case they can
00:27:02
always contact
00:27:04
support and it looks like I'm about out
00:27:07
of time so I'm going to take this time
00:27:09
we are actually moving on to break I
00:27:11
believe so if you do have any
00:27:16
questions I guess yes go
00:27:21
ahead sadly so here's the problem right
00:27:25
localization is very hard to do in Bash
00:27:28
so um as far as localization goes I'm
00:27:31
still working on the ability to do that
00:27:35
um however it's not out of the realm of
00:27:39
possibility
00:27:41
um is something that I have spoken to
00:27:44
people last year in at at The Summit in
00:27:46
R about and I am very much interested in
00:27:50
figuring out how to do and I failed to
00:27:52
take notes at the time so here we are
00:27:56
still without localization one year
00:27:57
later I do apologize I wish I could get
00:28:00
some localization done on
00:28:06
that any other questions
00:28:16
yes um so you can actually install any
00:28:19
of this and it's available in the
00:28:22
repositories and have all of the
00:28:24
benefits of those available to installs
00:28:27
for instance if if you install a bu
00:28:28
Studio installer you'll get configured
00:28:31
right away and then you can pick and
00:28:32
choose what applications or meta
00:28:36
packages you want Straight From A B
00:28:37
Studio
00:28:46
installer yes
00:28:51
Mike this is obviously a way to gete
00:29:07
guel
00:29:19
line you know I really don't have a
00:29:22
guideline for that but people have been
00:29:23
coming to me with uh some other that
00:29:28
they have mocked up and um so we're kind
00:29:32
of in the review process on those for
00:29:34
like um configuration audio
00:29:36
configuration there has been a uh a
00:29:39
gentleman who has come to me with a
00:29:40
mockup for what he would like to we
00:29:43
would like to do and taking it to the
00:29:45
next level with P cute so there's
00:29:48
potential there as well so taking it to
00:29:51
the next level so
00:29:52
we're so there's potential to you know
00:29:56
this is like a stepping stone to taking
00:29:58
it to the next St Next Step so yeah
00:30:03
there's like I'm saying this is just
00:30:06
giving
00:30:07
it a first step into making it a bigger
00:30:11
gooey if you ever get to that far now my
00:30:13
problem is I can only code and
00:30:21
Bash better than I'm sorry better than
00:30:24
no yeah some gooey is better than no
00:30:26
gooey absolutely
00:30:33
any other
00:30:35
questions all
00:30:37
right thanks everyone
00:30:40
[Applause]