 Welcome to today's stream. Let me close everything down. Sorry about that. I'm gonna have too many incriminating elements on record, right? Nah, just kidding, I don't have any incriminating stuff. Who do I? See? This is good stuff though. This is good stuff. Anyway, that's not what we're working on. We are working on package packages. Now, let's see. So I finally got accepted to the Hackage Uploaders, so I can do the Cabal Gen Bounds. I got an email saying, hey, make sure you have bounds, right? And I'm like, okay. Gotta have them bounds and they do already, right? In this package. So modern URI. Let's just make sure that I actually need all of these, right? Let's see. Text URI, yeah, that's modern URI. I am using, am I using containers? How am I using containers? I don't think I am, right? Let's see. We don't wanna depend on containers if you're not using containers, right? That's a good point, Google-san, but like you see, see, it built, right? I removed containers. So that's something. Text. Yeah, we're using data.text, right? And we're using modern URI. That's this text.URI thing. And I think there's like, there's a warning for unused imports, but not unused packages. And yeah, we're using the make URI because yeah, I remember that was the, that was the whole thing, right? We were trying to connect to something and it just like didn't do the thing. Now, I actually wanna check because we added this Amazon trace ID, right? Oh, okay, we have that. Cobalt, build, how do you pass it to GZ? GZ options, I guess? Add it to the Cobalt file. Oh, gee. Add some game GZ options, right? Unrecognized warning flag. Oh, but it's building with GZ 8.83. Have that flag, right? Cause like the Alpine GZ thing that we're using is 8.83. But yeah, we've manually gone over the packages and we're definitely using all the other ones. So that's fine. Yeah, that's how it is, you know? Always, always gotta wait a bit. Let's see what we can do. So what I wanna do now is I wanna do the build here and then I want to get the point. Okay, so I wanna do pseudo Docker build. So because I wanna check, before we put it up, I wanna check if it, I wanna see if we can make it. I wanna see if it like does the Amazon, the X trace thing, right? And like, I think this looks okay. Like these are all internal functions. They don't really need documentations. You know, we're exporting the error. We have like pretty good explanation of what everything in this object is. We have an interface that has this encapsulated initial state. I think that's good. And then, I mean, this part here is pretty easy, right? You know, we have to, we require that the runtime API is in there, right? If it's not, it's gonna call error, but that's okay. You know, we just, if we don't have this one, we can't do anything. Then we create the URI. So then this will always work, right? I mean, like AWS is not gonna put an invalid URL in the, in the, okay. So at least just here, they are a bit risky, but like there's no, there's no good kind of thing to default to otherwise, right? We initialize. If that worked, then we either loop or anywhere we call the initialization error, which is, which is a function that does, you know, I like all of these just, they're just so simple, right? They're just saying, just do the thing. So, I mean, so we craft if this like, the main specific language, and it's all so simple, like this package doesn't really do that much. It just kind of, but it does, it does the things it does in the right way, which is, which is way one. Why is this so, what's wrong here? We have ping. My internet is not this low. It's supposed to be very fast at this point. I mean, I'm streaming like four megabytes up, you know? This is some GitHub thing being weird. Okay. Let's wait for it to finish. Let's see how my promotion worked. Discard, post, all right. But I already have the gen bounce. Let me go to Hackage. I had my Hackage password already saved, but I don't want to show you all. So, let me, let me turn off the password camera before I enter this, but this is an important password. Two factor authentication, all that stuff. Upload. So now I want to, want to run, like what is going on here? Like this is, like why is this connection so slow? Why, yeah, yeah, this is not okay. Hey, I mean, this is not, there's nothing going on here. Let's check. Okay, I'm definitely not connected to the 5G. I'm connected to the 2.4G. Or maybe I am, I don't know. But like, I shouldn't have issues downloading an 8 megabyte file, right? Like, come on. Anyway, I think it's not my fault. Oops. Dropping, yeah, I mean, I don't know. Yeah, I think that happened during the speed test. That might be, I mean, it was trying to download as fast as possible, right? Yeah, I've got like 600 drop frames now, but it wasn't. That makes sense, right? During a speed test to drop a bunch of frames. This is unbelievable. Why would it be so slow? Like, what could possibly be going on? That's what I don't, but I'm not catching here. Let's see. Anyway, uploaded to like the test thing. See what happens, was it here, right? Yeah, we tried this last time, but we got like forbidden. I think that's because I'm not an uploader. Yeah, nice. Okay, I mean, this doesn't look too bad, right? Except I definitely want, I definitely want to, I want to, or my name to be there properly written. That's the latest one. What are people doing? Are people doing it like this? Let me see. Just, what's this name? Tolles. Tolles is a, he's a good guy. Casey, a song, okay, yeah. I mean, maintainer, yeah, and I just have, oh, yeah, makes sense. Okay, people just had their emails, since that seems to be the way to go. So license file is correct. Oh, this is not the, there, maintainer is correct category. Yeah, film page. Yes. Let me change this tag. Let's push the, I can like, I need to, I think I need to delete this tag. Can I, how do I delete? Can I delete? Yeah, okay, nice. Edit this tag. Let me say here tags. Go to this tag, edit, release. Oh, yeah, okay, B, zero, one, one, one. Oh, that's a good point. Because, you know, when I do, when I run Cabal, Cabal, Hattuck, yeah, I think it, I think it takes time. I think they run this command, like Cabal Hattuck command. And I'm not sure they do it. I'm not sure they run it for candidate packages, right? But, you know, this is what we were looking at earlier. And here's the package, right? And it says, if this is clickable, right? Undinvocation. It did complain that too, Jason is not. Yeah, well, this was where it's working. So, I think they should work, right? I think everything should be working. And I have the gen bounce. Yeah, I think this looks like a good package, right? Let me see, upload. Let's just read this through, right? Yeah, so, try to provide value for community band and be useful for others, right? Yeah, that's correct. And here it is, yeah. We can change them. December, compatible. Okay, yeah. Hacket trustees need to be able to contact maintainers. Yeah, okay. Okay, no thirsty contact. I got the MIT license. Okay, privileges using the password. Okay, you should check that your source bundle builds, including the hack documentation, if it's a library. Okay, categories as you turn by whatever you put in the category field. Yeah, we had AWS occasional changes to the GZ package. Yeah, okay. Yeah, so I think, you know, it builds the documentation, so, but this can fail. So, let's just, so I'm not, I'm just, I'm not worried that that documentation won't be built. I'm just pretty sure that that it will be built by eventually. Package Haskell functions for easy use on AWS Lambda. And then I like, you know, I say some little description like I link to the relevant page, right? So people can know what to do and there's like a Docker file bundled with it, right? So people can see how to do it. Okay, is this done? Is this done with downloading that 8 megabyte file? Yeah, sweet. Okay, so now we tag it, then we push it. Okay, so I have to re-log into ECR, I guess. Yeah, I have to, in here. Give it the code. Let's turn off the password thing again. Eh, let's turn it again. Okay, let me go. Where's the ECR? We gotta log into it again, push it. And then, can I push it now? Nice. So this is fast, but downloading that 8 megabyte file, that was super slow. Jamie, okay. Let's check it out. Here, let's go to changing LARPy. And it should be, it should, it was running like tests or like saying tests or success, right? Now it says LARPy lib or something like that. Image, I have to deploy a new image. And, oh yeah, is this gonna crash? No, yeah, this is gonna crash, right? Right? Yes, that's what it does. What are you doing? Yeah, because we're running the beta, right? And it crashes on Chrome beta. That's not good. So let's go to the ECR again. And then we just need this image here. Copy the image you are right. Oh, so it says add and then the shot. Okay, no, test. Okay, and it says LARPy. I think it's supposed to say that. No, wait. What does it do again? What is it supposed to do? It's supposed to say LARPy lib if this was the latest version indeed. So let's test again. That says LARPy lib. And it says trace ID. And it says sample true on the x-ray trace. So let's see. I think that's cool. It says no trace. It's right clearing the selected node. And let me see. Okay, so I'm just gonna invoke it right from here. That's what it was here, I was invoking it, I think. No, try it a couple of times. Let me look at the monitor first and do it. No, I don't think they do it for these packages. Okay, here we go. This was now, yeah, x-ray trace ID, sample true. Okay, let's check out. This is weird, right? It says five traces, they're all good. And they're all around 700 milliseconds. That's not good, but usually they're about three milliseconds, but now they're, well, yeah, see, I mean, it is pushing the traces in, right? And through the system. So the tracing is working okay. And the initial launch takes two seconds. And then it's like, yeah, three milliseconds, which is, you know, that's fine. For an online thing. Okay. I mean, you know, my ping is 60 milliseconds, right? So the fact that it's taking three milliseconds, I mean, nobody's gonna complain about that. I hope. That's not a lot of overhead is what I'm saying. Okay, cool, cool, cool, cool. We covered all these things. And I think this package is good. Yeah, I'm gonna upload it. We link to everything that we need. We have the package that the dependencies are correct. These links are all good. Package description, yeah, looks good. Anything I'm waiting on here? Yeah, okay, I'm gonna polish it. Let's publish the library. Let's go. Uh, cabal, no, wait, I was doing it here, right? Oh, that's another thing. Okay, and now let's upload the package. Let's do one thing first. Let's see if it builds from the source. We're gonna do, how are we gonna do that? I assume we're gonna say, you know, we're gonna copy this, and we're gonna copy it to crack set, we add something, zip it, build it from scratch. Piles and builds, so we're good. I think we're quite good. All right, uploading my first package to package. It's a bit funny, right? I'm like, I'm a GSC contributor. So there's technically some code for me on package, but you know, I don't have my own private package. This is a first, let's go, upload package. Let's do it. Are you ready? We did it. Amazing. Again, now let's see if the docs build, or if we, let's give it a couple of, give it a couple of minutes, and see if it does the documentation, or if we have to run this command here. Set emake to, yeah, so kapal, that should work, but it's there. Cool, now you can just go and hack it. Let's check out the package. How long do you think we should wait for the docs build? I'm gonna give it, yeah, at least, I mean five, six minutes, but yeah, it should, it should go white soon. You doomed, but yeah, well, it's cool. You know, it's got all these things. Yeah, you gotta give it three loudest. It's a great, okay, let's see. Package matrix box pending, it says. The matrix builder. You know, the matrix is on, probably isn't blocking it somehow. Okay, we don't need privacy badger for this page. The state is simple, it's still working. Anyway, packages. Okay, here's just nothing, which is not very convincing. It doesn't seem to be doing things very fast. Honestly, and I'm not even showing in the queue. The docs are gonna be built eventually, and it's all gonna work out. Now we got this package. Now you can do, yeah, you can just, you know, upload functions to AWS, you can run it. So I'll package and analyze, you just have to define your own handler, which I like. So you can finally just run lambda, Haskell lambdas on lambda, which is like finally. So today we got lambdas in Excel, and now we have lambdas on lambda. A truly great day for Haskell, I think. Mostly because of, well, not because of this package, but that you know, Excel has got lambdas now. So it's churning complete, and that is nice. Let's delete it. Like look, and like this is the images package with everything, and it's 20 megabytes. That was like one of the goals, right? To make it actually, let's delete these old images. Okay, yeah, now I'm wondering like, what do we do next? Like what's a good, now I kinda wanna play around with this package, right? And play around and make some like a webpage or something that uses lambdas. Would be also cool to, you know, see if we can run like Cognito contacts. Like can we make a lambda function that interacts with DynamoDB in a nice way or something like that? That would be interesting, right? Hmm, let's see. I wanna say the DynamoDB, Amazon cut DynamoDB. Yeah, and we wanna see if we can do this. Brandon, hey, it's not good that they haven't, they haven't updated this package since last year. Not good. Okay, so it works, Jasper? What you're saying? It's good. Test this type from this library. Okay, lenses. Okay, that's cool. Okay, okay, Fatte is doing some work here. I mean, this package is almost two years old now. I guess if it works, you know, the DynamoDB hasn't changed so much, so it should work. Okay, DynamoDB service and list global tables, all of these things. We've got some lenses. I would ask like, does anyone know of a package which uses Amazon cut to do EWS things? Cause that's usually, you know, if you're running things on EWS, you're usually doing it for a business, right? And then you're not, you're not gonna share that, right? Ooh, okay, yeah. Oxer pending. Oh, maybe this was just failing. Okay. It builds. I'm not gonna add it to the package metadata, but it's still building. SUREG database, HHS. Oh yeah, okay, nice. It's like a nice, oh, it's template Haskell. Okay, but we can probably, we can probably like skip all the lenses and things, right? Okay, we just do DynamoDB. What is this HMS thing? Ash map strict. Okay, yeah, yeah, yeah, yeah. Cause like this looks like optimized code, right? Like this is actual code that you run, which is nice. Let me, let me just try this. We're gonna spend a lot of time building these things. So let's just get started on that. And let's just, let's change our test here. So what I'm wondering, you know, it's like AmazonCon, I guess, assumes that you're not. AmazonCon assumes, I mean, so Lambda functions, they have this usually like, you can just use a database, right? You can kind of use a role that, yeah. Yeah, so that you can kind of give the Lambda function access to it, right? And it just works somehow. And is that, is that like an environment variable? There's a, let's just check, right? Let's just not do this, right? Let's just, let's just say here, test. Okay, let's actually remove a test and do that. Yeah, let's open test main. And the LI handler is IO. And we want to do import system.environ environment. And so this is supposed to return JS, something that has JSON. Yeah, yeah, but what I'm saying, I, you know, yeah, we usually like for the Lambda function itself, you just like, you give the Lambda execution role that Lambda function has access to the DynamoDB, right? With, yeah, with IAM, exactly. I don't think Amazonka, I'm not sure Amazonka as zoos. I'm just wondering like, can I log in as an IAM user from a Lambda function directly, right? Or do I have to somehow specify it? Let me see. So we have a lookup and I'm just, I just want a function that just gives me the environment. And let's see, lookup and getenv, no. Yeah, I want the entire environment, get environment, right? And so here we just say n, getenv. And the cool thing here is we can just literally return the n because, you know, a list of string, comma, string, that should have a JSON instance, right? By default, this is not in the show. It works in Lambda, how do you run it in Lambda? Yeah, it's like, how do you, how have you been running it in Lambda? My question, get, yeah, this is supposed to be getenv. Actually here I want to say, yeah, environment. I want to say the init function is just going to be, getenv, environment, environment, just do this. And then this is, I want this to be just return the state, discover constructor, that is cool. From session, from admin, from profile, from text. Oh, okay, IAM roles for task, okay, okay. Let's probably, this is probably like a DNS thing that they define on, because I'm just using a container, right? And that, the container doesn't know anything about Amazon. So that's, that's interesting, let me see. Let's just see what this does. Let's just pull it and then push it. And then I want to see what happens if you run like a DNS request for instance data, like HTTP instance data. Probably what does Amazon code does, right? Or it's like not in the queue even. And it still says pending docs. I'll give it a couple more minutes. We're building the text. Yeah, yeah. So what I'm hoping, right? Cause like when I make the request, I set the environment variable and that is used as a trace ID, right? And I get the, I get something from, I get the like the URL I'm supposed to query from an environment variable, right? So that's what I'm hoping here. I don't know why the download rate is so slow. So what I'm hoping here is that on the Lambda, on the Lambda function, there is some sort of credentials or something in the JSON that we get. Or like, yeah, something like that. Let me actually, I mean, I think it would make sense to create a specific role. Let me see. Like otherwise, if it works and I run it, y'all are gonna get access to that role, which won't be good. And yeah, okay. It won't happen until I update it anyway though. You see, configuration permissions. Okay, LARP, okay, yeah. What role did I give this? It doesn't do much. So if you get the credentials for this, you can, you can call my Lambda functions and put traces. That's not, that's not administrative access, right? That's fine. All right. Okay, I'm gonna take a quick break. I am, while this loading, just get some water. I'll be back in like a minute or two. Hi, Jasper. Thanks for tuning in. I think this is good. I think it's proper. I know, I would watch this. It's like doing proper Haskell program. We're publishing actual Hackage packages, right? Probably the only Hackage package whose entire development has been broadcast live. But yeah, you gotta show people how it's done, right? I'm gonna run this, check the environment and just see what it does. And that's it. That's it for today. Sorry I started so late. I was out getting a takeout. Got some crazy good Indian food. Some biryani. My daddy had a lamp sag. Well, Indian food. It was, it's from this place called Gandhi Mahal. But I'm not sure what kind of biryani it was. You know, it's definitely Punjabi sag, right? But it was good. I mean, we're in Iceland, right? They just, they say their chefs can cook for stuff from all four corners of India. But India doesn't really have four corners, right? Kind of like, like, you know, it's Tripura. Like it's Calcutta corner, or like is it in the Seven Sisters? Jammu Kashmir, you know, is that a corner of India? I don't know. This, this is a hot topic. But it definitely has more than four corners. Yeah, India is not a square country, right? So I'm just saying, I guess it's one of the benefits of living in like Africa, is that your country has a corner. Cause someone drew a line there. God damn it. Icelanders had no part in that. We were a Danish colony, you know? We were, we were the first to victims of European colonization. I mean, we got out, but it's a bit annoying when we are blamed from the crimes of the Danish, you know? Anyway, don't date, don't date. Yeah. Read the book called Prisoners of Geography. It tells you all about how, why certain countries look certain ways. You know, like why is Russia always invading Poland? Like why is that important for Russia? Like for the security of Russia? You know, why are the borders of Germany and France the way they are? I guess all because of geography. I mean, that's not the only solution, right? But a lot of it has to do with geography. And then the problem in Africa is that, you know, those lines they drew, they totally violate that principle, right? So like you, there's kind of no way you can't have conflict there because there's just the borders don't respect geography, so sad but true. Anyway, let's have this run and download it. See what happens? This is the digest. That is convenient. Can we just take that immediately? I mean, we have to check, but it would be cool if it was that. E-D-E-C-R-L-R-P. Digest, yeah, that is a digest. Nice. Okay, so now we can actually just take your image. Point new image. I was too eager to work, to test it. Invoke. Still the old one. Oh, it's updating function, okay. When this is stopped loading, then it works. Okay, now let's query it. So no, this is not the right one. Crate. As you give us the environment. Yes. Nice. Yeah, we have access key, ID, secret access key, yeah. Okay, so it would do that. It would just, it would just leave the, it will just read the, it would just read it from the environment. Which is cool. Okay, let's actually, let's update this to the previous Shah. So it's not accessible. Again, with the ads. Don't add to me. Okay, and let's see here. Now I need to go to IAM to give this a new row. Yeah. I can't do this way. I keep clicking those, you know, and it just never works. Password time. I need to authenticate. Okay, now I like it. So this is the one we have, and this is EV4. Okay, I'll have the basic execution rule. Let it trace your execution rule. Okay. Okay, let's, so we have the 63 said, but I want to attach this policy here to the, okay, how I now attached it? Is that what it means? Oh, I have to click attach policy here. Okay, okay, this should be fine. Okay, so let's go back now. And let's change this to this rule. And it has access to everything. And I can run it, right? And it was traced and sampled. Okay, then I can delete the rule here. All right, because you already saw the access key, right? So I don't want you to be putting access. Right, yeah, so, okay, the library is up, and it's up on Hackage. Okay, it works, you can do it, you can trace it and x-ray it. And we know what more do you need? I think it's pretty good. So, what, all reports that builds the planning failed. Okay, yeah, OX not available. Okay, it's trying to compile with, because it's only tested with GT 8.83, and I can't really test it with anything else. Okay, I mean, that's too bad. It's not good enough, you can just do this. Okay, let's fix this next time around. But yeah, thanks for tuning in. It's all working out. You can test out the package, you can look it up. And I hope you enjoyed today. Catch you all next week. See you around. Bye bye.