 All right, we're live How y'all doing let me see are you getting yeah, okay the music is there good So last time yeah, I was just advertising this stream last time We ran Haskell in the cloud right like using a runtime interface thing and But it wasn't very interesting right the you know the which is a demo kind of though which is like a test thing and I Mean it just it didn't even parse the input by just return success, which you know not quite Not quite what we want right we want something cool But this time around you know, we're gonna check it out see if we can do something more So, you know enjoy Here's the stuff I've been working on There's nothing you can see from this one. Anyway, and Let's see. Let's go back to the container stuff LARP be right Okay, so What do we have here? So yeah, so we managed to make it work on here Now is it still running? Yeah, let's see see. Yeah, it's still up And let's actually check You know what the if people haven't actually Using it because I said, you know, I just gave a link out and like hey, you can query it if you want, right? I don't think I haven't been creating it. So let's let's see it again authenticate first And Let's see You saw the password on the keyboard. Anyway, it's my one-time key. I hope it's not enough to hack me But you know, you never know Okay Let's see here now we do have some Statistics right this is our LARP function Let's see monitor I'm not sure that it reaches far behind for not behind also. Yeah, we don't support traces yet Would be a bit cool to support the traces, right? Let's see if we can make it work Recent invocations so let's look at the week On the 23rd and then on the 18th When was our stream it was okay, it was last last time on the 18th. So yeah, I guess No ones tried it out Wait, is it? Oh, it's a 25th. All right, so someone tried it out last That's Friday, it's cool. I hope that you enjoyed And anyway, let's let's let's try and see if we can make it do something more cool. Okay Let's look at the source Just Okay, this is our Yeah, this is everything here now. This is the test package So what we want to do now is Yeah, let's let's quit it here. We want to actually you know take this code And we want to move it over here to the AWS Lord peek a ball, right? Let's see test Test a cabal Now this is actually gonna be like this and This is not executable, this is actually the library AWS LARP B Okay, and then here we are actually just going I mean we're gonna require a piece And we're gonna require AWS LARP so if we don't have main is here for libraries we actually have Exposed modules, and this is gonna be a okay, so Let's see Okay, we'll see this now. Let's say make dear sirs. Let me let me just Got a guy don't quite remember how we did it. So I have a package here Second ball. Okay. Yeah, a Yeah, so we say the HS source there. Okay, let's say touch sirs No, our arms sirs make. Oh, yeah. Okay. Oh, we can touch your trees. Okay Yeah Let's call this library actually just call it AWS synth and then exposed modules is gonna be AWS LARP And then HHS source there's gonna be a sirs and then we Go to sirs and we say make dear sirs AWS and we say beam sirs AWS LARP But HS Okay, let's check it out. So this is gonna be module AWS LARP where And now we're essentially gonna Copy everything from this file, right? We just we just need everything Everything except the main file, right? Okay, so we have the sirs lambda error invocation error X invocation lambda interface Yeah, okay, and now here instead of doing all this We are just going to import AWS LARP And we're gonna remove everything else. Let's see Everything except main and this should be Let's call this LARP Okay, and now it's just gonna be doing nothing, right? Okay, and let's see cabal build Let's try and build it requires library from my AWS library, but the component cabal build test What is it trying to tell us here? Did I have like a No, I didn't have anything. Okay, let's start the cabal Exposed modules AWS LARP name, AWS LARP Test cabal in here. Yeah, this is AWS LARP like this. Now I'm gonna build test Okay, I'll just rename this To lowercase because I I hate The uppercasing thing that happens. Oh, okay. Let's go Why did I call it AWS synth? AWS LARP test Gation That's the cabal. Okay Now this is supposed to be And it wasn't supposed to be this trying AWS LARP zero. Good. Okay. So why Consumers rename everything here. Let's go to test and say test that come on Let's see here. Okay, maybe we have to go to test and be like a Well, how do we do the local cabal configuration again test? Okay. Yeah, it's cabal.project. Let's see cabal.project See here. Okay, so it says, you know, okay, let's just say, you know, and okay Make dear T2 and be test T2 Okay Yeah, I don't want it to do anything with cat. I just I just wanted to do, you know This library itself Internal libraries cannot have the same name as a package. Maybe you want a non-internal library Okay That that makes more sense. Yeah, okay, then we have some LARP cabal and We just say library Okay, now it's compiling Now let's move Test here Dump the cabal project and let's now build Okay, it seems to be picking up the AWS LARP library, which is cool. Now we have to change the Docker file, right? Global rep package equals test add Okay, now this Yeah, so we are going to have to add AWS AWS LARP.cabal here, right? And then we build You know, okay, so this is gonna be here right cabal build So you're gonna add AWS LARP.cabal add Serves, so we're gonna have to build AWS LARP and then And then we can add test and build the Package I think let's see Now where do we go? We say here is this Docker run Before you are curling Now let's build it. Let's just see what happens. Now it has to Change everything again, right? Let's not let's not build the Let's build, you know, let's build AWS LARP first and Then we can deal with the different packages. Let's see Should be way faster now. I upgraded my router or like the router we have here and It's it's like 10 times faster, right? But yeah, it wasn't actually you know the download times that we were we were just taking so long but So it adds why is it adding package first source directory does not exist Okay Why is it saying that source does not exist. Oh, okay it's the same and What's gonna happen now? Can't find source for AWS LARP in source I'm very glad to do it like this right. Oh, yeah, it's all still using the dependent scenes from the wreck and warp thing, right? So I think it just works. That's kind of cool Now this is we're not gonna add we're gonna add package to dollar package Okay, I was worried we'd have to do the whole, you know, pro-funker lens build thing It would have been too much but yeah need to make sure everything's there So we maybe huh? Yeah, I don't find it right because it's not gonna be yeah. Oh, yeah me Let's just remove it from there and let's see So what do it? You had a nice weekend. I Had a I had I went out and took took so many pictures It was like a really nice weather yesterday I was out for like five hours took 419 pictures and I put one of them on my Instagram. I was talking to my PR rep A friend of mine and you know, it was like hey, don't Don't post just like all your pictures from one trip Like at the same time you gotta parcel it over a couple of days, you know Which is what I'm gonna do I guess So there's just one picture from that trip up now, and then I'm gonna do it later. I think that's gonna be fine Okay, let's see Starting larpy building larpy. Yeah, this is looking good, right? I'm thinking, you know, maybe we can like make a setup that HS that kind of does this Docker file stuff You know, so like the The build artifact is not like an exit the build artifact is actually, you know the container you should upload Because it's a bit tricky to do the compil container, right? Let's see. Let's let's run it. Okay. Yeah. Oh, it's a second. Nice Okay, so it worked. So you moved everything into a library Let's see get status a get add serves What is this shell.nix again get add serves, okay shell.nix It is larpy cabal change log Status get add update everything that change get status Am I you I don't use this main.hs, right? RM main.hs drawing build it without the main.hs Okay, yeah, this is because I'm not in the next shell, which makes it reject the base It's all about the base, you know, it's a cabal build. All right. Nice They don't actually need that I think that means we don't need the Setup.hs and we set up that HS is to HS. Okay, and let's build again Okay, so wait, do we don't even mention set up that HS here? Build type simple Okay, that's it. Let's build it again the container version Because that's the one we're testing, right? Wasn't I oh, yeah, because now I'm in that show, right? It didn't even which is good. Okay, that the place is for me. So let's see move RP itself Itself into Let's see. Let's look at the docker file What do we see here test arc test Entry, but what does it say in entry? Okay Okay, so because here I say test I wonder if I can say test to let's see CP test test to Yeah, okay, and then we go to test to We go to the main and this is gonna be a lot be led the To the go to test to test All and we call this test to it's gonna be executable test to Test to test a cabal to test to test that Come on. Yeah, so now then we have to go back to the next shell and this Shall let's do We want to build a test to right and I want to see because I want to see you know, can I build the container and like, you know run Different versions of the Of the executable. Oh No, okay, let's do it a different way Let's go to test Test a cabal and then let's use this and then, you know Make a and then this can be main to dot. It just Main copy main RM Hs and that's we're gonna be Live to okay And then RMRF test to because it's only gonna put in the test package, right? Like that copied the source so Let's let's try this because I want to see, you know, can we Can we define like a Haskell library that has That has a bunch of different Like a couple of executables, right and can we make it? Run each of those executables By passing the argument because I think it should oh No, we could we say dollar XC there, okay, so let's see bin docker file And then let's say this is this is not supposed to be X is supposed to be the package I Think I don't know if it's gonna. It's gonna build a package. Yeah, okay But now it wrote test Okay, okay, so it's building XC test and XC test to on this one. Yeah Okay, starting test. Yes starting building test to okay. Yeah Because I yeah, I don't think people want to be deploying like the same like multiple packages in the same container but if they should be able to you know deploy different executables from the same package and And you know because you know, otherwise you just make a different container, right? Let's start test to Let's see Nice, okay, so we can we can build multiple executables In each package they can have the you know different source files and then here, you know, we can now start test and You know, it returns live right because That's what that's what that web service was about, right? So now now we can Make it do two web services Which is cool Okay, now let's think about a bit. Okay. I've got some more coffee Coffee is good. I'm drinking it way too late though, but you know, I say up a bit late also It's fine. It all works out. Okay. LARP be latest. Yeah No, let's go and hack it. Let's see. No hackage You know, we want to upload a library on hackage because I don't I've never done. I've never done that. I like I never had my Upload let's see upload puts a package Okay, so you can only upload a package version once and this cannot be done. So try to get right the first time Use the package candidates feature. Okay Because each package out of the main package Yes, I think this is a useful package must be from the form produced by as this format Open source license it really is package candidate. Yeah, I think we will do this Okay, so upload a package candidate now, let's build here Ah Yeah, we need to mix shell So the package candidate here is just gonna be the library, right? So people can download and use the library okay, so cobalt build It's Less and then go as this Yeah, okay, cobalt as I guess that's yeah cobalt as this. Yeah, okay cobalt as this AWS The component library cannot be packaged for distribution on its own. Okay, so entire packages Okay, wrote tarpaul as this to Okay, now let's copy this over To the cp this new style as this AWS library target and then we copy it over to mount htf Okay, let's copy it over and then we open it on the Windows side, let me see Or two machines you okay, wait, where's the where do the files go? I Don't quite remember wait, let me see Sayings, yeah, this is the thing about virtual machines, right? You don't have a Hey Oliver Nice to see you again. Now. It's a it's a using Sir, I don't think I've been served before No, okay. Where is it? It's in a manage. No Mobile devices, no, it's it's a which it's somewhere This is that preferences shared VMs, no I don't remember which What would it work all that because I think it's per it's per it's per. Yeah, I think it's per device Options. Yeah, here we go. See documents version machines No, this is the shared folders. Yeah. Oh, it's in Dropbox. Wow. Why would I put it there? Okay? Anyway It's one way to make sure you can share stuff Okay AWS LARP E dot tar-tar-guzz copy it over somewhere To some place which is not Dropbox. Okay Uh Okay, so now I I'll show you in a while. I'll just Yeah, okay, here we go Well, here's the good file and I want to Extract to here Yeah, oh my god That is such a bad thing. Okay. WS LARP E Yeah, okay, so it just serves and the changelog and the license and the football file Yeah, it's a very minimal which is good Now let's make sure That the license is correct. Yes, pinch. What is the changelog? Uh So 2021 Zero one. What is the date? It's the 25th. Okay. I get and Head cat docker file. Um, I think I should add the docker file here to the sdisk actually I don't I don't think that's wrong actually And So I would do that by doing here and this extra source files thing there. We actually add a Docker file and then if we do uh, uh, oh, yeah Oh, no, wait now if I have to like I have to copy the docker file into the file Add docker file Very good. Okay And then we go out and we build it just to make sure that it works Now the docker container contains the docker file. That's not good, you know It means that every time we edit the docker file we invalidate everything that comes after the point where we add it But that's okay That's fine We don't we shouldn't be editing it too much actually Well, yeah, so I got a new router. I was using my clip the router, uh the isp provided me And uh, you know Because I had the same experience in sweden. I was like, you know, I'm she's gonna buy a proper router I did that in sweden worked out great. So now I did that here as well What does that mean? Well now I have like a proper gaming router or whatever which can support, um It's like wi-fi 6 I don't have a single wi-fi 6 device, but you know, it's just like you can do 5 gigahertz wi-fi. I can actually get, you know, half a half a gigabit You know into this laptop which is in a completely different room from the router And it's not even trying too hard, you know, which means that because like the issue I had with the other one It's like it would do 5g like 5 gigahertz And then it would just drop out and you would be back on 2.4 And like any we'd actually have a drop in the connection, which is so annoying. So anyway It all it's all good. No Uh, now let's copy it over again. And let's see No, no No Oh, I could do that. Wait, okay a cp this new style s this agave islarpi Tarki's and we're gonna move that to mount to the room and We're actually gonna choose a file We're gonna go. Well, here's all my videos Uh, there's no bad videos there. So it's a vm shared folders new Uh, everything I've shared Nothing incriminating here either Make sure you don't do incriminating things on stream, you know. Oh, no, I forgot. Do I have an account? That package Uh, let's see if I'm hot to complete the user list Because if I am No, I'm not here. Okay, uh It would make sense. Okay, my name Mahdias Yes, sir Request account I'm gonna go to somewhere different Because I like I get confirmation codes and stuff sent to the email rate and then It would be bad If that was revealed to y'all can't just do it on the phone. Let me see Yeah, so this is what real programming is like, you know, it's mostly about Yeah, you know, you're you're not I don't know This is you know, if you do programming competitions, it's all about like, oh, let me do this super optimal solution to this one problem I don't know I know I I don't want to keep right. It's not like not like that's not real programming, but it's like, I don't know My god continue Okay, yeah, it's not I'm not gatekeeping I'm more saying that This is more real world programming. I guess I yeah saying saying not real Programming that is gatekeeping, right? I mean if you if you actually go to work and you you write a Super optimal You know list sort or whatever That's a I mean, that would be cool, but that's that's not what I've never done that You know Uh, I won't write any account Okay Now upload Uh Upload No, wait. Yeah, I'm doing candidate package. Yeah package candidate Choose file No, yeah, and we choose the file And I say Triple low and then paste that Paste it Yeah, that should be fine. You can have it here on the non shared screen You guys can't steal my packages Yeah, exactly Yeah, I mean, you know you have to You have to do all this stuff Because like, you know because your job is to make it work What no access for this resource Uh, okay, let me see Can I manage this account? Uh, why is why is my That's annoying. Okay. You should check that your open source support builds including hiding documentation Oh, we have to add documentation. That is true Categories are determined what you put in category field to try to fix existing categories as possible. Uh Yeah, yeah, we need to do those things, right? All right, let's check it out. Um License This is the test one. Yeah, yeah, let's go to a vim License file license maintainer copyright. Uh, I don't know Category now. Okay. What is the category here package category? Yeah, sorry. I lost the chapter for a bit. Uh, which vinten do you use? So on my home computer I have the two two thousand four twenty four 20 oh four, I think But I can't update it on this one because it's this is a work work laptop So it was 1904 here. I wish I had 2004 but Because then I could draw in vsl2 and this would all be much nicer But uh, I don't that's just how it is Um Let's see. No, uh, what is the package is here? What's new? Sangor one of my favorites. He's always uploading cool stuff crazy stuff But cool. Okay. Uh here we have something right we can definitely they think uh, there's no aws Oh Hey, wait there is aws. That's the category Yeah, okay. Let's just set that that's the category What's the synopsis here? A library You package a Haskell functions Or easy use on aws It's synopsis of this package, right? Let's see. Uh, what was the song or he definitely has a Like a good football file, right? Which which is probably let's let's just copy that guy Generic lens and that could ball like what feels as if you have name versions synopsis. Yeah. Yeah. Yeah And we need a description Uh, let's see aws larpy Quite the aws Larpy package Allows you to Interact with It allows you to run a Haskell code on aws a By defining a simple Uh request handler for aws lambda requests by defining as blue and then packaging it using the uh The attached the the docker file included Uh, what more does he say a kiss song or maintainer? Yeah, I should have a maintainer Let me see maintainer. Okay, ask me. Yeah Songer author license lessons. Okay. I see I had a license here. So just say, you know License it's a mit Copyright category build type simple cabal version tested with tested with right Uh, this is tested with jc 8.8.3 tested with ghc equals equals 8.8.3. Okay. Um, let's see Extra source files. Yeah, uh, hs source here different language. Yeah, okay. Um Now I think we should we should add some documentation, right? Name serves a with rb Um, okay, how do we do we write good? Let's see. Um, so Because I think it's actually So we should actually just yeah, we should say module aw start be where And so we're going to select what we're going to export, right? So because these are mostly internal, right? So this is run lambda interface Run lambda interface and then it's our We are going to Um This yeah, so we have to export lambda interface lambda in location And lambda error. Is there anything else here? Okay config No Okay, these are all five strings lambda invocations lambda error. Yeah, okay Invocation initialization these are all news internally, right? So Okay, so it says lili in it case ira is just error. Yeah Okay, I think this is the This is what we want to export, right? Now we should We should document The li handler is the function that is run on every Invocation on every Blending location where results Uh must be a JSON The results Will be dumb as a JSON object for a JSON object as this is What most a AWS API as a as a as a as just jason, right? As jason as this is what most AWS APIs AWS APIs Expect li in it Runs Maybe lambda error Now this is curious, right? We should probably allow li in it To return something And then we want we want li in it to So this is gonna be Yeah, it's gonna be s comma Okay, so here we're gonna say for all s period Now this is gonna take an s and a lambda invocation Okay, this is like the state trick like we we don't want this s escaping But you know, we want to be able to define a handler and the initializer to to use it in it a the The li in it function Is called at the start of the program Uh No, okay, so this is this is so this is not gonna be this is gonna be actually not maybe lambda it's gonna be Either lambda error or s The li function is called at the start of the program to initiate Initialize The functions To initialize the lambda function the Initial state is then passed to the handler At each invocation Okay, and now let's see We want we have the initial state. How do we want to do this? We have the initial state. We have the invocation And then we have the IO error. So we probably we want to return, you know a comma s Okay, so because we want to know uh So this will be we will always return An either lambda error as so s comma either lambda error Hey, yeah, okay, so So this will be okay. So let's this is gonna be iris of isle and so case at iris of Left error. Okay, if it's right In its state, then we pass that on to the loop In its state state Okay, hey, no, let's have that after the configuration because the configuration is the same loop comp state handler Equals do Next invocation. Okay, so handler state lambda invocation case res of left case res Of okay, so uh, so this is going to be s comma left l error Okay, so this is actually going to be s comma res This will be next state uh after we call the handler with Uh This is going to be curr state. Okay, and so this is here we call it within its state Now if we get the next state handler curr state Now the next state res and then we're going to loop again with the next state You see this allows you to kind of, you know, you know, this state here could be an i or f containing a database connection Or whatever, you know, you can you can put whatever you want in there The state to initialize the lambda function a comma and um chenal state The state is then passed to the handler at each demarcation. I think this is a good way to do it um And then we can just Then we have okay, so your lambda interface a yeah Now let's actually see, you know, this is work Uh Now we have to fix a test Okay, we have to fix test Actually, we're gonna fix test. We're also gonna fix test Uh Test like a ball because we don't want to test you anymore. We don't we don't care about that We don't want to we don't want to make sure that test is too like main two is always up to take right Okay, so main dot hs a e test and main dot hs Now this is going to be the li handler the li in it Here is going to return nothing. No, it's going to return right zero Paint and it's going to be maintaining some state Uh This is going to be the li handler S right and we're going to say print e um So this is going to be do Yes, we're going to say return s Plus one comma right I mean, so we can actually it's because we're always in i o here We could we could just um Um You know the lambda interface could be can contain an i or f or something like that But uh, let's just see if this works actually Okay, we need to yeah x is x is then Shall one What I wanted right east and show x x is and show Quantification. Okay, let's go is 10 10 chill right I always grew up that word Existence existential All the same right Okay, now can we build test? Oh, right. I'm worried about this a bit, right? Because this is not going to be this is going to be a state per function I'm just wondering, you know, should we should we even be doing this? I don't think so I don't think so. I think we want it another way We want we want to allow some initial state But we don't want to be able to return That state I think that's the way to go Because it's going to be it's just going to confuse people, you know Um You know because it's you know because we First function is going to do something couple. Yeah, I don't know. That's it's not good It's not going to be good Curse state Yeah, this is going to be We we definitely want to be able to initialize, you know some database connection or something like that, right? But We don't want to be returning it Let's see Yeah Nice Okay, so it builds. No, okay. So I think that's yeah, that's how we want to design this library, right? State doesn't pass to the function. Okay. Let's see next invocation initialization error Invocation error invocation, please are none of these are Um None of these are uh exported the config is not exported Uh, let's let's move these actually All the way down here and let's go exports Because these are exactly the exports Okay, let's see. Okay. Um, can I do uh Just go ball had Jesus Let's look at generic lens again. I'm not sure it's like a good It's not it's not a good library to compare with because like the You know, it's just a weird a bunch of weird stuff, you know But uh, it's gonna be fine. Let's see subtype. Okay Yeah class is documented like that. Um Let's say here and we go like this and we delete it like this and we go like this and we go like this I would just say uh, uh a lambda Interface Consists Of two functions The stages and pants to the hand or a notation e.g. A database connection Uh, this is what most ablbs apis expect The first argument is the uh result of the Uh, li in a function Okay, so it's as a database Database Connection or an iorf are similar second Existentially quantified Existentially quantified Right in the same manner as the st monad to avoid state Escaping Okay, um, the lambda error, uh, lamb lambda error uh, uh Is uh It consists of a message and uh an error type Both of which The user can uh define I see okay Combo headache. Okay, what's the issue here? Um, maybe it doesn't like it this way Let's see. Let's see what they want. What do you want from us? Okay Oh the following declaration, okay, okay, and When it is lovely could not find linked extensions for two json. Okay. Is that not documented in asin? Okay, uh, lambda interface Okay, now let's see run lambda Interface is Should be provided with the the Definition of the Interface to run and handles the uh Interaction with the aws api such as the Uh Waiting for next requests and in Realizing the function at the start. Okay. Now we have to say, okay, this is actually gonna be Like this lambda invocation contains the body of the requests and headers defined by aws aws they are only the aws quest id header is Guaranteed to be defined Have a look at What did it call it? aws runtime The headers are the following and then I'm just going to Copy paste from here Set paste we're gonna fix it And now I'll erase these Okay, so it's a deadline ms and then it's the Uh function r in here and erase id And it's going to be client context Cognito Okay, and So here we've defined the headers Let's make this Nicer laid out data about oh, I don't I don't need this Yeah, I just need it like this and then this should be oh my god Should be like this and so I'm just gonna have it like this Uh, no, let's see So, yeah, I also have to implement the uh trace id because it says Uh, the runtime should set the x amazon trace id with the value of the header. So What what I don't know is This where is this Okay, the x amazon trace id environment variable So, okay, I want to do the following a loop conf Next invocation conf, okay, and then I'm going to say here case case li Case no, what is it called? It's called a trace id So it's going to be case trace id of just bs And we're going to set it Uh, let's see look up and It says this must be a set and a function, right? Yes Okay, now let's see set It's going to be set and Uh x amazon trace id b That's the name, right of the variable x Uh, let's just copy paste it Uh, because it's not mentioned, right? It's just said You should do this. Um, which is annoying Set end and then what do we do? We got to pack it, right? who go Pack we got to know we got we got to unpack it bs It's called bs right A b yeah b dot pack Uh, yes, I expected case inspiration and functional application What is going on? What's going on hon? uh case li trace id Oh It's just that right now Case what is happening here? Uh, okay, let's see Case, I mean it's correct, right? Unexpected case expression in function application. What are you? What's this portion because it's it works otherwise, right? Perhaps you could write it with parentheses. I don't think that will help Why is it doing tab characters? I mean, I'm just gonna say if it's just I trace id li It's just li trace id And then So I can just see like this when It's just here we go from just, uh Go import control Maybe it's already Expected type sometimes it gets into this thing where it's using tabs for some reason. I don't know. I don't know why Okay, now it also sets the aws trace amazon trace id, right which is Which actually allows it to do the amazon tracing Uh, the handler takes care Such as the waiting for the next quest a x request comma Responding to the right request Setting the x array trace id and Now we kind of do everything that we should be doing right because we talked about that last time Uh Now we weren't doing that, right? Let's see. What does this mean? Uh missing documentation for Module header. Okay, so I guess I guess we just turn off the tap Limsters, uh, it was rp, um aws Larby, uh We aws rp library Define a defines functions Defines the interface And the associated data types For running Directly on a aws lambda Uh without Uh handles the Most of I'm just saying most of I don't want to promise anything most of the Overheads, uh leaving the user free to focus on the functionality itself Gov all haddock. Okay, let's look at it. Uh chromium Uh Yes, uh this new style build x86 for Linux gc 23 AWS Larby doc html aws rp index It looks okay This looks good. Oh, okay. This is not good. Uh, how do I create a list? Oh Oh, let's start after use star. Okay. Let's say Use star then But then that didn't quite work Oh more. Okay. I have to do it in that. Okay Hey, let's see And so I have to I think erase this Let's go back in and say Next show we're gonna say chromium gonna go here. Okay. Okay. Hey, let's kill this and let's just do it here AWS Just larby and where is it chromium? This new style Bill Do you see? Okay. Hey, there's larby doc html index html Okay, okay. This just does not work. Okay. How do we do like a list? How does it work? This bullet list first item and more content for the first item I think yeah, okay This was working better, right? Nice Yeah, okay. So now I think it's better if we have this as No, just does it work like this? Can I like How about this bit damage? Oh, what is it? It says talks about nested this plus the list above Nice. Okay. I just have to Intent it enough I like trace ID Maybe I have to like do the same here like make it start here Okay Nice Okay. Yeah, I think this looks good, right? Now we can just document it it's uh Let's change the synopsis a bit actually Do I start with the ball? Let's just say here package I like this I like this one. No, I think this is good. Can we go back to the the Cabal using the docker file included Based on the EWS runtime interface API Which is this one here AWS lambda runtime maybe AWS Based on the AWS lambda runtime API API and can I have a Can it does this work? Okay, how do I do how to I need to wrap it in Something like this I think Can I like a Okay, I think this is This is I mean, this isn't too bad, right? It's gonna be I can take I can do that. Okay. Let's do that Uh based on the AWS lambda Uh Let's see here Uses the and then like this This should be good. I think uses the AWS runtime runtime API. Okay. Um, this Yeah, I think this look good. I always all document it and we have like this encapsulated state here And this is a lambda invocation lambda error Okay, let's change that. Uh, let's change it. Uh, let's change it to be, you know Not just li let's change it here to be Serves, uh, I don't know if you did you know, you know, we were just being lazy. Okay Lambda interface lambda invocation And here, you know, I started saying lambda ally. We say lambda in Vocation Yeah, like this build it. Oh that Uh, oh, yeah Yeah, okay, serious. Let oh my god Like the test still works, right? Okay, now let's run the ball haddock again. Let's be right on here. Okay Lambda interface run lambda interface Nice. Yeah, I think let's look like a nice library, right? Oh Oh, wait that HTML And synopsis Yeah, it's pretty good pretty good Okay, I'm gonna take a two-minute break And then we'll we'll try and see, you know, we can update it to Upload it to lambda or true anchors. Okay, hold on. Okay. Let's see I'm back from matter space Uh, I think it looked good. Let's at least, you know, let's commit it here, uh Okay, get status We asked this state and then we copy the This one to This one and we will We will try to upload it again to package If that works now, uh, you can view these warnings with cobalt check Okay, that let's just do that. That seems easier cobalt check Uh warning These warnings to coastal when distributing packages is encouraged to specify source control information to cobalt files. I think supports are okay Then a Okay Let's say here source repository Raise Source repository Uh, yeah, okay and this is Tritlo AWS Larby, uh, let's see. Yeah, we're AWS Larby And yeah, let's see it here. Um source Using one or more source repository Sections, okay Oh section. Okay. How does how does they do that? How does songer do that? Uh, let's see generic lens cobalt test sweet test sweet test sweet, uh source cobalt source Repository that must be some documentation on it, right? There's no sense. Okay Uh, oh the ball check And it is encouraged to specify in the doc cobalt file using one or more source repository section I mean this will just not work, right? Source repository requires exactly one argument Unexpected colon maybe like this Source repository Uh, source report ahead. Okay type. Yeah, okay. Nice Let's see. Let's go home page Okay, we can put this listen home page, right? Home page, okay This That's the home page and then source repository Uh master type Git Suppository master And a type Git And then I guess I give a For git. Yeah, okay. Do I say location first or something? Yeah location and it's going to be Git I think it's github.com slash pool bar. Good. Yeah treat load. I just love Like it cobalt check No warnings. Okay. Git commit. Um, no warnings In cobalt check push Okay, uh cobalt assist and copy the Astis uh to uh And now we are going to let's because we are gonna be we're actually going to be uh Look like we're going to be uploading this exact file. So let's Let's do that. Um, I just take a look at the file see that is the indeed the Right one Okay, and we have the cobalt file and the service and change slide I mean it seems seems legit, right? Let's open this in the Yes code Uh, just to check its contents. Yeah, okay. Yeah, okay looks good. Then let's say Let's upload it Let's upload a package Upload choose file. And there we go. It's Barbie This is the file of the package MPG. Okay, let's just contact them. I guess I guess we can't upload it today then But uh, yeah Let's uh, let's ask them I think they'll allow me in. I am I'm in good standing I haven't made them mad So I think I'm good Let's see opening the gmail. I gotta send an email Hey Yeah, but I think yeah, we're we're on uh, it seems pretty good Okay gmail is just not loading for me, which is that's bizarre But I'm still streaming so my internet is not worked Is gmail down? Let's see Gmail I mean gmail works on my phone Worked earlier also. Okay processing the press Nice Okay, um Sending from the one I signed up with compose To package trustees Big subject becoming a package Hackage uploader and I'll just say hey there. I want I would like to be added To the package uploaders I want to publish my my aws.larpe aws rp package package for making to make It easier for hascovers to run their hasco code direct truly aws lambda More information here and I send them the link Okay, yeah, okay. I sent the email I guess, you know, I won't I won't be able to get it today, but you know it should be work And I don't expect it to be too long, but uh, all right Let's do one last time. Let's let's add a little bit of read me here. We already have the this description here Let's just do you know read me dot md. Oh my god Read me dot md Uh, aws rp Yeah, by defining a simple request and then packing it using doc of my own Uses the uh Okay, wait, uh, how do you do it in and mark down again mark down links? I never remember it's like because it's either It's either like, you know brackets first and then Then parentheses or Whatever, I don't okay Yeah, I it's like this It's like this Like this Now let's look here Nice, and let's add a synopsis. Uh, what is what was our synopsis? We have it here. Let's just open it in notepad that is easier. We already had it Yeah, and let's actually create a tag. How do I create a tag tags? Can you release? It's gonna be zero point zero point one point zero, right? That's the No, I think it's it's that's not the right one Yeah, it's this zero point one point zero point zero initial links that supports x ray tracing and And uh initial states and and initial states and a A function in initialization and and In the location and it's not production ready, but you know, it's it It's getting there. Yeah so Yeah, I think next time Next up we would like to We want to upload this package on hack itch. I hope I hope I'll be allowed at that point And And And then we will I want to create the setup that they just so that kind of runs docker commands and And you know actually creates a container that you can upload Uh, I think that would be cool. That would be cool Because like that was you know a big part of it, right? How do we create the container to run it? All right, that's uh, I guess that's it for now. We just have to wait for the For the for it to be allowed, but I think it's good if we have a library. We have a test Works great with lots of documentation Yeah, I think it's good stuff All right, see you Hopefully maybe tomorrow if it's if we've got the yeah, let's let's say tomorrow says o'clock tomorrow I I hope they are quick enough to trust these. Yeah, all right Catch you then