WEBVTT

00:00.000 --> 00:11.000
Yes, quick recap.

00:11.000 --> 00:15.000
This is me, Skinna Kewarkin.

00:15.000 --> 00:19.000
It's out there.

00:19.000 --> 00:22.000
AWS Lambda is a function as a service.

00:22.000 --> 00:28.000
So we can take our swift code and put it in the cloud and run it.

00:28.000 --> 00:30.000
In any way, we don't have to manage the server.

00:30.000 --> 00:31.000
So it is serverless.

00:31.000 --> 00:33.000
So that also just means we can put it there.

00:33.000 --> 00:36.000
We don't have to worry about suddenly we get like data.

00:36.000 --> 00:39.000
So we got like super popular and we have a bunch of requests.

00:39.000 --> 00:43.000
It will just handle that all of for us.

00:43.000 --> 00:44.000
And then quick.

00:44.000 --> 00:47.000
Some pricing about it is it's dependent on the number of requests that you have.

00:47.000 --> 00:51.000
And then the duration of those functions to execute.

00:51.000 --> 00:56.000
So for the free tier, you get 1 million requests per month.

00:56.000 --> 00:59.000
So if you just want to play around, you'll be totally fine.

00:59.000 --> 01:02.000
And then it's also dependent on your code to execute.

01:02.000 --> 01:04.000
But that will then depend on where you throw it.

01:04.000 --> 01:08.000
Like as in what kind of memory you give you allocate to it.

01:08.000 --> 01:11.000
So if you have like you know more memory, it takes more time to run.

01:11.000 --> 01:14.000
But like, sorry, more memory, but it takes less time to run.

01:14.000 --> 01:18.000
That pricing though will still be different than if you allocate less memory.

01:18.000 --> 01:21.000
And it runs like longer.

01:21.000 --> 01:25.000
Okay, let's just do some live coding because I like demos.

01:26.000 --> 01:31.000
So let's kick this off with.

01:31.000 --> 01:34.000
Can everybody see the font all the way in the back.

01:34.000 --> 01:37.000
Yay. Yay. Cool.

01:37.000 --> 01:39.000
Okay, so what we do is make a swift package.

01:39.000 --> 01:41.000
The first thing we do is type this.

01:41.000 --> 01:43.000
So swift package in it.

01:43.000 --> 01:44.000
Type is executable.

01:44.000 --> 01:46.000
And then we're just calling this my lambda.

01:46.000 --> 01:48.000
But you can see the example that I have.

01:48.000 --> 01:52.000
I actually called it demo with multiple O's because I had many demos going on.

01:52.000 --> 01:55.000
So this was the demo that made it.

01:55.000 --> 01:58.000
And we first go to our swift package.

01:58.000 --> 02:00.000
So we have package.swift.

02:00.000 --> 02:04.000
And this is how we add any other external packages into the application.

02:04.000 --> 02:07.000
So what we do is add the swift lambda.

02:07.000 --> 02:10.000
Or yes, swift AWS lambda runtime.

02:10.000 --> 02:17.000
And that is the runtime that actually like lets our swift code interact with how AWS lambda is set up.

02:17.000 --> 02:20.000
And then we are adding swift AWS lambda events.

02:20.000 --> 02:26.000
And those events are how we communicate with stuff like the API gateway to use wrist network requests.

02:26.000 --> 02:29.000
And then like every other swift package.

02:29.000 --> 02:31.000
Does anyone not done swift here?

02:31.000 --> 02:33.000
Cool.

02:33.000 --> 02:35.000
This is easy then.

02:35.000 --> 02:36.000
You know what this looks like.

02:36.000 --> 02:38.000
So then we have our demo and we add those dependencies to it.

02:38.000 --> 02:43.000
And that is your basic package.swift for like pretty much everything.

02:43.000 --> 02:48.000
So here is our main.swift file has the basic yellow world when you just make a new package.

02:48.000 --> 02:53.000
Let's turn this into an actual lambda function.

02:53.000 --> 02:55.000
So here is our hello world of lambda.

02:55.000 --> 03:00.000
We defined the runtime which is actually a closure as you can see and it takes two parameters.

03:00.000 --> 03:02.000
Event which is just a string.

03:02.000 --> 03:07.000
And then the lambda context which is what actually talks to an AWS lambda.

03:07.000 --> 03:10.000
And then all we do is run runtime.

03:10.000 --> 03:12.000
So let's go ahead and do that.

03:12.000 --> 03:15.000
We can do swift run.

03:15.000 --> 03:17.000
I don't know how to make the figure on that.

03:17.000 --> 03:20.000
So just trust me it works.

03:20.000 --> 03:24.000
We have swift run and it just runs hello world for us.

03:24.000 --> 03:26.000
And did I miss?

03:26.000 --> 03:29.000
Did I hear something?

03:29.000 --> 03:32.000
Save smart.

03:32.000 --> 03:36.000
There we go.

03:36.000 --> 03:39.000
Makes sense.

03:39.000 --> 03:43.000
Do we not have the set to auto save?

03:43.000 --> 03:47.000
It happens.

03:47.000 --> 03:52.000
So we are running our hello world and it's running a local lambda server.

03:52.000 --> 03:54.000
So that's what I was expecting.

03:54.000 --> 03:58.000
Is running our local lambda server on our Mac here.

03:58.000 --> 04:02.000
So now let's actually call to that.

04:02.000 --> 04:05.000
And we do that by using curl.

04:05.000 --> 04:08.000
And we are making a post request and sending it this string.

04:08.000 --> 04:10.000
So it'll say hello.

04:10.000 --> 04:15.000
And then it is on port 127001 slash invoke.

04:15.000 --> 04:17.000
And you can change that to something else if you want to.

04:17.000 --> 04:19.000
But by default, this is what it is.

04:19.000 --> 04:22.000
So when we do that, we get a basic hello.

04:22.000 --> 04:27.000
So this means that we were able to send the string via a post request.

04:27.000 --> 04:31.000
And then it just prints hello.

04:31.000 --> 04:33.000
So that looks pretty great in all.

04:33.000 --> 04:36.000
But let's make it a little bit more complicated.

04:36.000 --> 04:38.000
So let's do.

04:38.000 --> 04:46.000
So we're going to close that.

04:46.000 --> 04:50.000
Or actually I could just run it again.

04:50.000 --> 04:53.000
So I reran the program at the bottom here.

04:53.000 --> 04:56.000
And then this is a slightly more complicated example.

04:56.000 --> 04:59.000
So what we first do is again import the lambda runtime.

04:59.000 --> 05:02.000
But we're now also importing lambda events.

05:02.000 --> 05:05.000
So this is what allows us to now use the API gateway.

05:05.000 --> 05:10.000
The two requests because we are using the version to AWS lambda,

05:10.000 --> 05:15.000
which right now I'm running off of the main branch because it's not yet officially tagged as 2.0.

05:15.000 --> 05:22.000
So if you were going to do this, you have to just use main up until the point they tag it and everything.

05:22.000 --> 05:24.000
So we have our requests.

05:24.000 --> 05:29.000
And then we also return a response as opposed to previously returning a string.

05:29.000 --> 05:33.000
And all we are doing is taking this adding the header of application JSON.

05:33.000 --> 05:36.000
And echoing back out the request that we gave it.

05:36.000 --> 05:39.000
So you can see we are returning this V2 response.

05:39.000 --> 05:44.000
And in the body is this event parameter, which is just the request.

05:44.000 --> 05:47.000
So what we will get out is the exact same thing that we get in.

05:47.000 --> 05:48.000
So I went ahead.

05:48.000 --> 05:51.000
Did I save it in run at this time?

05:51.000 --> 05:52.000
It is.

05:52.000 --> 05:53.000
Looks like it is.

05:53.000 --> 05:58.000
We'll find out.

05:59.000 --> 06:01.000
So I run curl again.

06:01.000 --> 06:03.000
And then we are adding application JSON.

06:03.000 --> 06:06.000
And then I have this test event dot JSON.

06:06.000 --> 06:08.000
So that's just hanging out over here.

06:08.000 --> 06:11.000
Because we take in now an API gateway V2 request.

06:11.000 --> 06:13.000
We're not taking in a string.

06:13.000 --> 06:19.000
That whole JSON is the whole proper format of what that request looks like.

06:19.000 --> 06:22.000
So that's why I'm just grabbing it from over there.

06:22.000 --> 06:26.000
And we're not actually doing tests, but I just grabbed it from over there.

06:26.000 --> 06:29.000
And then you see an output that we have is in the body.

06:29.000 --> 06:33.000
It is just that request that we sent it.

06:33.000 --> 06:38.000
So this whole thing is the same as that event dot JSON that we sent.

06:38.000 --> 06:40.000
So this looks pretty good.

06:40.000 --> 06:42.000
I mean, this is an amazing function.

06:42.000 --> 06:44.000
It's very useful.

06:44.000 --> 06:47.000
I mean, technically it is if you're testing something.

06:47.000 --> 06:50.000
And so let's just go ahead and deploy this.

06:50.000 --> 06:55.000
So the nice thing is we will be using SAM, which is the serverless application model,

06:55.000 --> 06:56.000
to deploy everything.

06:56.000 --> 06:59.000
So that allows us to just write a YAML file.

06:59.000 --> 07:04.000
And then we can immediately deploy everything because that YAML file sets everything up for us.

07:04.000 --> 07:13.000
So let's make a new file called template dot YAML.

07:13.000 --> 07:17.000
And here is our template.

07:17.000 --> 07:18.000
Yes.

07:18.000 --> 07:20.000
So here is the template that we have.

07:20.000 --> 07:22.000
So it is a Lambda function.

07:22.000 --> 07:26.000
We call it demo with two O's because typos.

07:26.000 --> 07:27.000
It's a function name.

07:27.000 --> 07:32.000
And then right here is the full build path for where we are going to create a zip file.

07:32.000 --> 07:35.000
So how we actually deploy is it we zip everything up.

07:35.000 --> 07:37.000
Send it up to AWS Lambda.

07:37.000 --> 07:41.000
It provisions everything properly based on this template that we're writing right here.

07:41.000 --> 07:42.000
So we have a timeout.

07:42.000 --> 07:44.000
This bootstrap provided AL2.

07:44.000 --> 07:51.000
So I believe that's Amazon Linux 2, which is the operating system that's just provided by Amazon for running this environment.

07:52.000 --> 08:06.000
We set our debug level and then this events part is what we are using for the actual API gateway for sending that specific kind of requests as opposed to sending a string.

08:06.000 --> 08:09.000
So we do that.

08:09.000 --> 08:13.000
And hopefully we can zip everything.

08:13.000 --> 08:16.000
So we zip everything using Swift package archive.

08:16.000 --> 08:20.000
We are disabling the auto update because once when I went to try this this morning,

08:20.000 --> 08:23.000
it tries to update the operating system.

08:23.000 --> 08:28.000
And I was like, no, I'm not doing that on on a live demo.

08:28.000 --> 08:35.000
And then we have allow network connection requests because I think like you and had said packages run in a very siloed way.

08:35.000 --> 08:39.000
And we don't want them doing things they don't want to do or we don't want them to do.

08:39.000 --> 08:42.000
But we are allowing network connections for this.

08:42.000 --> 08:49.000
And I should have already hit enter while I was explaining that and now it's not.

08:49.000 --> 08:50.000
Give it a second.

08:50.000 --> 08:52.000
Let's go think about it.

08:52.000 --> 08:53.000
This internal working backs.

08:53.000 --> 08:59.000
Okay, backspace works.

08:59.000 --> 09:06.000
I saw it move.

09:06.000 --> 09:11.000
Try to get an zip demo.

09:11.000 --> 09:12.000
Oh, there we go.

09:12.000 --> 09:17.000
Okay, it first asks us allow this plugin to run in Docker.

09:17.000 --> 09:23.000
So what we are actually doing is compiling everything, making our zip, but we have to use Docker to do that.

09:23.000 --> 09:32.000
Because I am developing on macOS and the environment that it ends up running in is Amazon Linux 2, which is a Linux environment.

09:32.000 --> 09:38.000
Come in, not found.

09:38.000 --> 09:39.000
Did it work though?

09:39.000 --> 09:44.000
It looks like it works as archive created.

09:47.000 --> 09:49.000
There we go.

09:49.000 --> 09:52.000
How did it work though?

09:52.000 --> 09:54.000
Like, you see that right?

09:54.000 --> 09:57.000
Okay.

09:57.000 --> 09:59.000
Okay.

09:59.000 --> 10:01.000
We're good then.

10:01.000 --> 10:02.000
So we have our zip.

10:02.000 --> 10:06.000
It is now at this URL, which is on my desktop.

10:06.000 --> 10:13.000
And then you can see that URL matches this one because this one is relative from build forwards.

10:13.000 --> 10:18.000
And so because of that, it will use this to actually find the zip file to go and upload it.

10:18.000 --> 10:22.000
So let's upload this amazing function.

10:22.000 --> 10:24.000
And I have to spell the play right.

10:24.000 --> 10:27.000
Oh my gosh.

10:27.000 --> 10:29.000
Sam deployed guided.

10:29.000 --> 10:32.000
So once we hit enter on this, it asks us a couple of things.

10:32.000 --> 10:33.000
So what do we want to call this?

10:33.000 --> 10:35.000
We call it demo.

10:35.000 --> 10:37.000
I believe this is my account.

10:37.000 --> 10:40.000
It's set up on us east because, you know, I'm from the US.

10:40.000 --> 10:43.000
And that's where I originally set everything up.

10:43.000 --> 10:45.000
Confirm changes before deployment.

10:45.000 --> 10:46.000
Yes.

10:46.000 --> 10:47.000
Enter.

10:47.000 --> 10:49.000
Do we want to allow Sam CLI?

10:49.000 --> 10:50.000
I am.

10:50.000 --> 10:51.000
Roll.

10:51.000 --> 10:52.000
Roll creation.

10:52.000 --> 10:54.000
So that says, do we want to allow.

10:54.000 --> 10:59.000
Want to allow Sam to create all the proper roles necessary for creating this function?

10:59.000 --> 11:00.000
And they answer.

11:00.000 --> 11:01.000
Yes.

11:01.000 --> 11:02.000
Disable robot.

11:02.000 --> 11:03.000
Sure.

11:03.000 --> 11:05.000
This has no authentication.

11:05.000 --> 11:06.000
Is this okay?

11:06.000 --> 11:08.000
So this is a demo.

11:08.000 --> 11:10.000
So I'm not going to add authentication.

11:10.000 --> 11:14.000
But you should when you actually make your Lambda functions.

11:14.000 --> 11:15.000
Save arguments.

11:15.000 --> 11:16.000
Yes.

11:16.000 --> 11:17.000
Config.

11:17.000 --> 11:21.000
So these will save all of these configurations that I'm going through right now into a file called

11:21.000 --> 11:23.000
Samconfig.Tommel.

11:23.000 --> 11:24.000
Entomel.

11:24.000 --> 11:27.000
It's just another kind of email.

11:27.000 --> 11:30.000
I mean.

11:30.000 --> 11:33.000
And then it starts building.

11:33.000 --> 11:34.000
And uploading.

11:34.000 --> 11:35.000
So we took.

11:35.000 --> 11:36.000
Take our zip file.

11:36.000 --> 11:39.000
And this internet is actually pretty good.

11:39.000 --> 11:42.000
It is taking that and uploading it to.

11:42.000 --> 11:46.000
80 to eight WS and it's using S3 to do that.

11:46.000 --> 11:49.000
So you could see somewhere in here.

11:49.000 --> 11:50.000
Deploy.

11:50.000 --> 11:51.000
Yes.

11:51.000 --> 11:53.000
Somewhere in here it said.

11:53.000 --> 11:55.000
It's creating an S3 bucket.

11:55.000 --> 12:01.000
And that's where that zip file is actually living at the moment.

12:01.000 --> 12:02.000
Did I not turn?

12:02.000 --> 12:03.000
Do not disturb.

12:03.000 --> 12:05.000
Hmm.

12:05.000 --> 12:07.000
Oh, it's on.

12:07.000 --> 12:08.000
Okay.

12:08.000 --> 12:10.000
That can just bypass it.

12:10.000 --> 12:11.000
Is it going to do it?

12:11.000 --> 12:13.000
It was going pretty well.

12:13.000 --> 12:15.000
Not too bad.

12:15.000 --> 12:17.000
It has thick and slower.

12:17.000 --> 12:19.000
But a lot of times too when you zip everything together.

12:19.000 --> 12:21.000
And if you haven't done that before.

12:21.000 --> 12:22.000
Because it's using Docker.

12:22.000 --> 12:25.000
It has to pull down the entire operating system as well for like.

12:25.000 --> 12:29.000
The Amazon Linux to OS to actually zip it all together and send.

12:29.000 --> 12:30.000
So right now.

12:31.000 --> 12:32.000
So doing pretty good.

12:32.000 --> 12:33.000
Hopefully we can get it.

12:33.000 --> 12:34.000
Oh, there we go.

12:34.000 --> 12:39.000
We have successfully deployed our lovely function to the cloud.

12:39.000 --> 12:43.000
So let's see if it actually works.

12:43.000 --> 12:46.000
If we copy this, we should be able to write curl.

12:46.000 --> 12:48.000
And then paste that URL.

12:48.000 --> 12:50.000
If my auto complete.

12:50.000 --> 12:51.000
Oh my gosh.

12:51.000 --> 12:53.000
Doesn't freak out.

12:53.000 --> 12:55.000
Debited during this off.

12:55.000 --> 12:56.000
Let's see.

12:56.000 --> 12:57.000
Second.

13:00.000 --> 13:01.000
Man.

13:01.000 --> 13:02.000
Quit.

13:02.000 --> 13:03.000
Oh no.

13:03.000 --> 13:06.000
It doesn't quit.

13:06.000 --> 13:09.000
Got a fourth quit terminal.

13:09.000 --> 13:10.000
Oh my gosh.

13:10.000 --> 13:14.000
Where are you not responding?

13:14.000 --> 13:15.000
Yeah.

13:15.000 --> 13:16.000
Report.

13:16.000 --> 13:19.000
That's fine.

13:19.000 --> 13:20.000
Okay.

13:20.000 --> 13:21.000
There we go.

13:21.000 --> 13:26.000
Paste it at curl.

13:26.000 --> 13:29.000
And then the link.

13:29.000 --> 13:30.000
You're welcome.

13:30.000 --> 13:31.000
Someone's self-aware me.

13:31.000 --> 13:34.000
Sebastian, you're still here.

13:34.000 --> 13:37.000
So then we have.

13:37.000 --> 13:41.000
Curl and then pasting your URL for where it was just deployed to.

13:41.000 --> 13:42.000
And we should be able to enter.

13:42.000 --> 13:48.000
And we see coming back is the request that we had sent because the code that we had was

13:48.000 --> 13:50.000
the request response.

13:50.000 --> 13:53.000
So it's successfully deployed.

13:54.000 --> 14:02.000
But we can make this a little bit more fun because this is just your lovely demo.

14:02.000 --> 14:05.000
So let's make a new file called.

14:05.000 --> 14:07.000
Food handler.

14:07.000 --> 14:10.000
Swift.

14:10.000 --> 14:15.000
So I had to go through and find all the great Belgian food to eat, which includes fries,

14:15.000 --> 14:16.000
chocolate, waffles, and beer.

14:16.000 --> 14:19.000
And I think I've had three out of the four of these already.

14:19.000 --> 14:21.000
So it's been good.

14:21.000 --> 14:25.000
And let's change our demo instead of echoing back.

14:25.000 --> 14:28.000
Let's do this.

14:28.000 --> 14:31.000
And we're just going to use our basic food handler class.

14:31.000 --> 14:33.000
Or a struct that I had just created.

14:33.000 --> 14:37.000
All it is is just the struct with a function in it that returns a random one.

14:37.000 --> 14:38.000
But by default, it's for us.

14:38.000 --> 14:41.000
If that shouldn't be the default, let me know.

14:41.000 --> 14:42.000
We have our food handler.

14:42.000 --> 14:46.000
And then we are just taking the food handler, giving us the best food.

14:46.000 --> 14:49.000
And that'll just give us a random element.

14:49.000 --> 14:54.000
So we can, again, run this with just Swift run.

14:54.000 --> 15:01.000
And it ran and then it was.

15:01.000 --> 15:03.000
Yeah, this one.

15:03.000 --> 15:04.000
We just type curl.

15:04.000 --> 15:06.000
We give our response.

15:06.000 --> 15:11.000
And then we get back the correct answer of beer as what kind of food to have right after this.

15:11.000 --> 15:12.000
So we did that.

15:12.000 --> 15:14.000
And all we have to do is deploy this.

15:14.000 --> 15:17.000
So we've already done all the initial setup to do everything.

15:17.000 --> 15:21.000
So now to deploy, we just have to rezip everything.

15:21.000 --> 15:25.000
Which you can, this still had the wrong shortcut.

15:25.000 --> 15:32.000
You can put these steps together to be able to just zip and then send.

15:32.000 --> 15:35.000
I'm doing them separately because.

15:35.000 --> 15:37.000
But all does is takes our demo.

15:37.000 --> 15:40.000
Again, use this Docker to build the entire zip file.

15:40.000 --> 15:44.000
And then we will go ahead and send it off with just Sam to deploy.

15:44.000 --> 15:48.000
We don't have to ask all the questions anymore because we have them all saved.

15:48.000 --> 15:52.000
And the Samconfig.Tummel file.

15:52.000 --> 15:54.000
And then it's doing the exact same thing.

15:54.000 --> 15:58.000
So we're using a different S3 bucket because we have a different zip file that we're using.

15:58.000 --> 16:02.000
And it will go ahead zip it all together and say, let's send it.

16:02.000 --> 16:04.000
Waiting to be.

16:04.000 --> 16:07.000
Created.

16:07.000 --> 16:12.000
I wonder if it would be faster if I picked a region closer to here.

16:12.000 --> 16:14.000
Maybe that's why it's slow.

16:14.000 --> 16:16.000
But we said yes.

16:16.000 --> 16:20.000
And then now again, it'll go through those steps to take that zip.

16:20.000 --> 16:22.000
Send it to the cloud if we do a curl command.

16:22.000 --> 16:24.000
Again, we will see.

16:24.000 --> 16:26.000
Yep, put.

16:26.000 --> 16:28.000
So that is the basic demo.

16:28.000 --> 16:34.000
And what's super nice is because this is Amazon AWS Lambda.

16:34.000 --> 16:40.000
It uses the version two, which also uses the.

16:41.000 --> 16:43.000
We can use Swift testing.

16:43.000 --> 16:49.000
So I couldn't think of a unit test to write for this because all it's doing is returning a basic.

16:49.000 --> 16:57.000
Element from an array, but right here you can see an example using Swift testing, which was just released this pass to dub dub and see.

16:57.000 --> 16:59.000
How you can unit test this.

16:59.000 --> 17:01.000
And everything is also possible.

17:01.000 --> 17:05.000
So when you go to the Swift AWS Lambda runtime.

17:05.000 --> 17:09.000
It has a bunch of examples for what you can do how to do it.

17:09.000 --> 17:12.000
So using an actual example that has authentication.

17:12.000 --> 17:18.000
And you can check out that repo, which I will link right here.

17:18.000 --> 17:23.000
Has the link for all the things that you need to go ahead and then.

17:23.000 --> 17:24.000
See those examples.

17:24.000 --> 17:29.000
And then the other link that's on here is the doc sea tutorial that's I believe on like the Swift package index.

17:29.000 --> 17:34.000
So you can also like walk through it step by step of all the steps that we kind of went through here.

17:34.000 --> 17:36.000
So that's it. Thank you.

17:36.000 --> 17:38.000
Thank you.

17:42.000 --> 17:43.000
Amazing.

17:43.000 --> 17:44.000
You're part of it.

17:44.000 --> 17:45.000
Yeah.

17:45.000 --> 17:48.000
Can you tell us about the latency for the first call?

17:48.000 --> 17:50.000
You don't think you've set on this one.

17:50.000 --> 17:51.000
Yes.

17:51.000 --> 17:55.000
So the latency.

17:55.000 --> 17:56.000
Yeah.

17:56.000 --> 17:58.000
The latency.

17:58.000 --> 17:59.000
Yeah.

18:00.000 --> 18:01.000
The latency.

18:01.000 --> 18:06.000
I have seen it not be too bad between like the very first call and then subsequent calls.

18:06.000 --> 18:09.000
Because they are running on whether they're called Amazon.

18:09.000 --> 18:13.000
Fire via something like it's like a lightweight version of a VM.

18:13.000 --> 18:16.000
So it's not the entire virtual machine running.

18:16.000 --> 18:19.000
But it's like a smaller kind of box from that.

18:19.000 --> 18:20.000
I can't remember the name of it right now.

18:20.000 --> 18:23.000
But because of that, the latency is lower.

18:23.000 --> 18:26.000
I don't know the exact number of it, but it's not too terrible.

18:26.000 --> 18:32.000
We can also see because it's just deployed.

18:32.000 --> 18:34.000
Like that. Then we get beer again.

18:34.000 --> 18:36.000
So that's obvious answer.

18:36.000 --> 18:40.000
So I have to go, but thank you again to everybody.

18:40.000 --> 18:42.000
Amazing.

18:42.000 --> 18:44.000
As always.

18:44.000 --> 18:48.000
One of my favorite members of the community with the most infectious personality.

18:48.000 --> 18:52.000
And the best part about Michaela is her willingness and even

18:52.000 --> 18:54.000
this to learn in public.

18:54.000 --> 18:56.000
And make it amazing.

18:56.000 --> 18:58.000
So that's it.

