 We jump into development straight away. I want these two tools to be to make them available for you to play with. So we have the webcam eye tracker. This kind of works. Yes, I'm pretty sure it was running a bit better. So obviously the eyes overlaid. Yes, it was slightly less obvious. Okay, so we have the code. It's just under 4,000 tokens. Place it in. We go over it in a sec. Yes, there's HTML. Where is it? We want to publish it today as a Flask application. I think it's ready. Or let me know if you think it's not ready. So we have this. The Flask application is actually not do anything. There's nothing on the server. So the footage whatever and the processing it's all happening from then. Well, and that's also why it's a bit laggy like that. Unless I'm doing something else as well. Yeah, this Firefox window taking more resources than me streaming onto four different platforms. So I have the Flask application later if needed. We can implement stuff on the server as well for now. We don't actually need it. We have this HTML obviously. We'll need a longer description there of what's going on. We'll actually do it straight away. We have a CSS main JavaScript. It's the main JavaScript doing. It utilizes the video stream, blah, blah. They're drawing all this stuff. Eye detection, pupil tracking. So we have a face detection model. Face model. We're using place face. We'll have that all in the description. Can we update the description at the bottom of the HTML file? We need to be more comprehensive and reference the libraries that are being used for this tool. Obviously, there's no data. The data is your face. It should be fine. Video stream. Yeah, it's short file. Now we have this file, my app, WSGI. We need it for the Flask application to work. We have all the libraries. And that's the structure of the files and folders. I think it's correct. We should somewhere have a description of how to publish a Flask application. We already have, I think, 12 of them running on the website. If you haven't checked the website, please go and do so. There's a lot of interesting tools and don't forget to provide your feedback. Today we will be publishing these two additional ones. That's not enough gap there, isn't it? Okay, we have a description somewhere. So the last one we had is this EG2 Music Converter. Let's look at it quickly because in its info it will have a description of how to add a Flask application. We need to modify this configuration. We're using an Apache server. We need to change this configuration file. We might do it on another screen quickly. Shouldn't be anything too sensitive in there, but I don't think it's very interesting anyway. Might actually pop it into GPT as well. And so updating this description, the bottom of the page, and we'll play this to both of these tools. The CardioQuest bot and the webcam eye tracker will be available for you to play with. Just do some final testing. Yes, the problem. One obvious issue with it is, well, the eyes are jumpy like that. But that's to do with your GPU and stuff. I suspect Firefox is currently not fully utilizing the GPU or something. You have to check. Yes, the eyes will be jumpy like that. You can split the view to know if it's useful or not. That stuff is not great. And the darkness threshold, so it's turning the eyes into grayscale and finding the darker pixels within the eye. And this threshold, as you can tell, is more sensitive. So you have no detections happening. But it's more accurate in terms of the pupil detection. If you increase the darkness threshold, it potentially makes more mistakes. Yes, here it's kind of moving upwards. And yes, we don't yet have the eye blinks. Well, because we actually won't be able to have the eye blinks because when we blink, the pupil is still being detected because it's picking up the dark bit of the iris. Yeah, we should have had another circle transform, but we haven't implemented it because it's already quite heavy. It's all happening in the front end. So all in JavaScript alone. As I said, hopefully we'll be deploying today. We need all the files, obviously. See how to modify. I guess we have more description in there. Because it's also all front end, you're just able to get the source code. It's all in JavaScript on the page. There's no back end. So document quickly. I'd want our graph about that document formatting is working. It's not working very well. Yeah, we do have a disclaimer somewhere that GPT for whatever GitHub cop out as well, are being extensively used. There's no, didn't ask for a description. It's just not a tool. The tool is not responsible. The creator. Okay, obviously. It's interesting because GPT for is much better at writing this stuff. Well, I must have didn't make it clear. Hey, can we add a disclaimer that this tool was developed using GPT for and GitHub co pilot? So it's insisting on adding how great it is. Yeah, by the way, yeah, when I when I use the text to speech in my live streams, yeah, Facebook was complaining about it. It's actually labeled as copyrighted material. And like limited video or something, I wanted to keep the video on Facebook as well as I do on YouTube. YouTube doesn't do it. But yes, maybe it's not a bad idea to not use those. I'll be using them myself when reading because that's just how I read. I can't read anything on the screen. Well, just stuff up my eyes. You can probably tell that my eye tracking can apply to somebody else's video to see if they are reading a script or not. Not but most people do. And now I don't have any any CEO or anyone talking into my ear. It's just checking the sound quality. If I'm using the correct microphone, sometimes the microphone input gets switched to the webcam microphone, which is much worse. They are my turn off a desktop audio and try a stream where where I do not use the chat, the text to speech, just use it myself though. So it doesn't mean it's like telling me what to say. I don't know. Yes, this is the disclaimer. Oops, I forgot that I don't have text to speech in Firefox. Yeah, I don't know. Why is it insisting on saying how great it is? I didn't ask for it. Right. Well, it says it's important to note that the final design decision code validation and quality assurance were carried out by human developers to ensure their reliability and integrity of this. It's, yeah, must have picked it up already. And it's the training data set people already making those disclaimers somewhere might keep it as is for now. We currently more care about the functionality of this thing as you can tell it's not great. But the best thing about it, it's all a front end. So your data, your face is not being uploaded to the cloud. So it's probably huge advantage. But then, yes, it relies on your graphic and abilities of your machine and browser. Right. We wanted to go. Okay, can you explain this file a count how many flask applications we already have published. I'm using Apache server on Ubuntu. And we would like to add more flask applications using the following file. This will be the first one. All editor. So obviously, that one has my microphone going. But the window is horrendous. It's only 2.5 K tokens. Yeah, I have the server name as the cell certificate. Yeah, we have the mode spelling. So if you misspell a name, it's not the one I wanted to. So if you misspell that one, do it because that's too much of a misspelling. But for example, it shouldn't be case sensitive. That works static files configuration. Yes, there's something about the static files served for each flask application. Because apparently flask doesn't serve static files in production environment. So we have to specify where the static files are. Is that what's going on? Right, I thought it was 12. But it says 11 flask applications. So there are 12. There's inverse F noise, EG generator, image compression, EG music spectrogram. There should be 12 of them. Why did it say 11? Right, so we're gonna add two more. This webcam and the card request. But another thing, we want to limit the usage on the server. Are you sure there are 11 flask application currently deployed? Not more than that. Also, how do we limit the amount of resources being used for each application? We would like to control that to a larger extent. This is primarily because on Ubuntu in Linux, I cannot control how fast the fans are running. Fans. So even if I have the performance at PowerSaver, the fans are still quite noisy, especially at night when nothing else is happening. So I would like to limit the amount of CPU, GPU, etc. that is being used for each application in your account. It's hard to count to 12 when you're a robot. Yeah, there's the inverse noise, EG generator, image compression to coherence to ECG generator feature extractor. Yeah, so there's actually 12, not 11. Okay, the limiting resources. Yeah, so currently we're defining the number of threads to be two. That's the default option. We also might limit the processes, but I don't think that will do it. I don't think that adding the processes, I think there is only one used at a time anyway. So that might not do the trick. I want to be able to essentially control, make sure the fans, I have like 10, well, they're quite quiet, but they're still noisy when they all turn on together. Fans in this machine would like the CPU usage not to go over a certain percentage. Is it possible to do? Can do time limit the Apache configuration file. So this is a global setting, not specific to each Flask application. Yeah, because once changing those settings, we'll have to test each Flask application, see if it's still functioning okay. It's jumping business. The camera is being funny. So Apache doesn't directly allow setting the memory limit for each application. That's unfortunate. Yeah, suggesting to use a Docker. I don't know, you can give a quick overview of the difference between Docker and Flask application on Apache. I'm testing these two applications, we want to release them into the wild. So what this one is, the video footage is jumpy like that. It's not anymore, it's better now. Yeah, that's what I was about to say. Yeah, because I'm using Firefox in this case, everything will highly depend on your machine and browser. It's checking my CPU usage. Yeah, so these processes and threads, let's see. So if I'm using my own thing, yeah, some of them are much heavier than others. The update interval one second, that point, yeah, make it 80 or something. Yes, we can tell which one. Yes, obviously, if I load a blog or something, it just gets loaded once. There's nothing going on. That's fine. If I add, say, this feature extraction, and it's also doing bugger all. But if I load this EG noise removal, you can see usage. Yeah, so it's obviously using just one CPU, especially when reducing the window size. No, it's actually using more than one CPU. I don't know what it's doing. Yeah, they all increase. That shouldn't be the case. Well, the point for me that I'm using both. So some of this view usage will be for the browser. Yeah, I'm pretty sure it's that blue one that's using the actual tool. Oh, no, probably the blue ones doing something else. Anyway, yeah, it's hard to measure these things. Yes, we can set the CPU time limit, but it's global, not specific to each flask application. We can limit each request, not sure how well that will work. Yeah, might just limit the fan noise of my machine. So it's not directly related to the flask. I'm pretty sure it is when nothing else is going on. Currently, obviously, it's hard for me to measure because there's all this work that I'm streaming from the same machine. Yes, overall system load. Yeah, we might try some of those CPU frequencies scaling tools. But yeah, we'll do it offline. Yeah, we might actually reduce the number of threads for each application to one. Let's say the spectrogram definitely needs some limiting of resources. We potentially can do it just by reducing the window size as well. Yeah, increasing the window size is really a driving CPU usage up. Oops. Yeah, we limit for the spectrogram a number of threads, a number of processes to one. Does it mean that only one person at a time could use the app? Yeah, there's essentially not enough control of CPU usage. Unfortunately, I might use the other tools for limiting the CPU and it became super slow. It must be because I'm running both of these applications at the same time. Yeah, I want to publish those today. Do you reckon we will be able to do it or not? When the bot keeps making mistakes? Yeah, obviously. So the idea behind this tool is that if you reduce the noise, the bot is performing better. I want to see how it's doing with this average noise level. Well, average in this case, you could always reduce it. But I mean, the human probably could still determine which ECG is normal, which one is abnormal. Yeah, now the bot is doing better and I already did three misses, wasn't paying attention. The problem with this display, it doesn't scale to the screen. That canvas might need to fix it somehow, comparing Docker to traditional Flask application. Okay, so supposedly it has a finer control over resource allocation. It can port it. Well, currently, I don't see a reason for me to port it. I know Flask is bad at prototyping stuff. I think it will be much harder setting up a Docker. Yeah, I don't know why I would need to deploy multiple instances of the application. I haven't actually tested how many users can access the Flask application at once, probably not too many. Yeah, so Docker is more complex to set up. Right, so currently, yes, we are running directly on the server operating system. Well, I mean, this machine is dedicated for doing so. Yeah, so we're currently running with no virtualization. So that might be simpler, potentially faster as well. What is it suggesting to rebuild the whole server hardware or something? That's not happening. Get back to this quickly. So the iTracker has this wsgi file. It's called myApp. We need to add another entry here. This one's hard to edit. It goes to the iTracker, the folder. The folder is also called the iTrack. It's actually open it quickly in the binary chaos. Yeah, we need to replace all those iTrack, iTrack, iTrack static folder. Does that have a static folder? Yes. Okay. Then we also have the a CardioQuest port. Right, so we have the iTracker and a CardioQuest port. Okay, let's try that. Put the spectrogram here. We'll have to deploy, deploy, deploy. Then we sort out errors and things. Later, the EEG music have an info file. Yeah, we need to do a config test because we changed the configuration file. Right, so the configuration file is okay. Right, what we need to do next is to just deploy. Sure, we'll do it one by one. Just do them all together. We said the site will be down for a short time. Just do everything at once. It's always a scary moment, isn't it? Yep, the site is down. The site is back on. And there's a couple of things. First, let's check if the spectrogram makes any difference in terms of usage. It's not any faster. Anything is slower. Well, we expected to be slower because we gave it less resources. Yeah, I think it does use less resources. We'll see if the server is a bit quieter. Okay, now we have these two tools. Let's see if they're working at all. So, what's called your quest button. You should be able to access going to the page. The thing is crossed. No, the page is loading. It's probably giving in the error. It's loading failed of waveform.js. Bit odd. Let's try the other one. Well, we have to turn this one off for a sec. So, that's one seem to work. Let's see if the app is working. Why? On Earth? Yeah, I know what the problem is. In a HTML. It's the problem with the HTML. So, we just have... So, this is on the site. Go check it out by yourself. Pop it in there. Shit. Problem is... Well, there's quite a few. There are quite a few. This one, we know how to solve at least. Yeah, if we go to the whole project thing. Okay, the eye tracker. The HTML needs some stuff. Let's pop it from the music generator. That's the last working tool we had. Static, no. A template. It's index HTML. Yeah, we want... What do we want? We want everything up to this point. This would be another header. Yeah, I don't like the titles at the top anyway. Or should I leave it? I don't remember how this is like in other tools, but we definitely need those two scripts. We might not need lot for this. And yeah, we'll have to redeploy after making these changes. Popping ads onto it straight away. Or waiting a bit. Now, I'm thinking there's a problem with loading JavaScript on the other application. I need to turn it into a module. I don't know. We'll sort it out in a sec. Hopefully, the GPT-4 can just sort it out. These two... It's supposed to be loading on the... Ah, yeah, after 10 seconds. Can go at the bottom of the page. Yes, we... The website is monetized. So, don't think I need to... I keep apologizing for it. I don't know why. But yes, this website is free, but it does run ads. Advertisement. Hopefully, you get relevant advertisement for your liking. You can see how the darkness threshold changes the detection. So, it becomes less accurate when the threshold is increased. But then it will... But now we have a low... This is, by the way, 50. It's going from 50 to like 150 or something. But when it's a low threshold on this scale, it's 50 there. Well, then it becomes more sensitive to stuff and then it can detect the pupil. Whereas over here, it can better detect it, but it's a bit off, as you can tell. So, I don't know. So, normally, yeah, there is some sort of default value in the middle. Somewhere in the middle. Right. The other thing is that we have two style CSS. One for the tool and one for the whole project. Let's see if it's implemented correctly. Yeah, this one is for the whole project. Let's show we had another call for it in the bottom. We don't actually need it. Yeah, it's in the static folder. That should be fine. We'll sort it out later. And the other tool, this one, is not loading. It's not loading correctly. It's not loading. Giving me an error. We'll sort that error in a second. Let's solve one problem at a time. Deploy, redeploy. Now we have the structure for the website. The description and disclaimer that we use GPT-4 actually needed in checking it in Chrome. Let's use Chrome instead. The add didn't load. There's some errors, are there? Adds are meant to be loading only after 10 seconds. Yeah, this must be these warnings. Funny like that. Why the messages? Someone must be screaming at me at the moment. But why the messages are not loading properly? Oh, get it. Getting tube. Tube body adds. I'm not actually using it. It's probably targeting me. Hopefully get more relevant adds. It's always nice to see a university or some medical device. Yeah, ultrasound machine, friendly experts, not allowed to click on it. So you have to do it for me. No, I'm just kidding. I'm not allowed even to say that, I think. By the way, this stream is meant to be interactive. It's okay. Get people join in and out. That's fine. Because we have to improve the website anyway. But if you have, if you try the bodykills.com and you have any feedback, critical is good. So we can actually make changes probably straight away. That would be nice, wouldn't it? Yeah, so on the page, we already have the game that you can play. But that's not against the machine. It's just against yourself. Which is also a lot of fun, but not as fun as when these two actually works. So why the air is properly displayed? It's the network. Yeah, I think you know what the problem might be. This meant to be accessible through the Flask application. Pretty sure. Yeah, let's start another GPT-4 wasting time. We are just wasting time. We can try GitHub co-pilot as well. For GitHub co-pilot, we actually have to use the smaller, just open the folder in a separate visual studio code. There would be also an error file from the Flask application itself. Yeah, I know what the problem might be. It's the fact that it will run locally, okay? But when running on the server, okay. However, yeah, these two JavaScript files and you know what to be found. Well, I mean that there, the Flask application when running on the server. Okay, so you should know what to do and how to fix it. We need to fix the code. Do we also need to share? Yeah, we also have that Apache configuration file. I think that should be empty. See what it says. Yes, what are the issues they're not being correctly served? There's two files. Checked. Yeah, we have a folder static. That is the case. That should be fine, isn't it? For the iTracker, we have the alias. Yeah, we have iTrack, a CardioQuest board. It's like a case sensitive, so you know. Yeah, we have CardioQuest board as my app. And the static directory will be a relative path to the static directory. Yeah, it looks legit. So what's the problem? One is too fast, should be okay. A CardioQuest board alias. Yeah, this is exactly what I have. Right, this one is probably what the problem actually is. So if that works, we have the GameLogic.js comes to the GPT 3.5. That should be a symbol. Yeah, quite a lot of quite a bit of errors in there. That's what the GPT4 suggested as well. This must be correct. That's what I originally had. If permissions should be okay. Let's see if it's still running locally. Now now I'm getting a 404. I suspect if I cannot run this locally, it actually will run on the server. If this change it now giving me an error when trying to run locally. Can I solve this so that it will run locally and on the server with no errors? We did do this in the past. I forgot how it was done. Check one of our other applications. We used the following instead. Would this be better to use? Right, so this should work both in development and production environment. It's a big promise. Right, so it's running locally okay. That's good. Now we need to deploy it again. Let's make changes to the Apache configuration file now. Down again. It's back. It's back online. It's actually working the byte. Oh, this is not running. I suspect it's actually a problem with the byte. Yeah, this one locally is working okay. Locally it's working. Error. I appreciate the Python code, but then it says game logic. I'm happy to share the game logic. Yeah, remember facing this type of errors before? It said this yes might be a permission issue. No, cause should be fine. Yeah, something to do the configuration of the folders. Yeah, remember solving something similar before. Yeah, enough. Hey, we need to make sure the folders are accessible both. So currently it's running okay locally. And I'm still getting the same error when running on the server. Do we need to check when running on the server or not and adjust the folders accordingly? Yep, we're still having the same problem. The application is working locally. Fine, working okay. But on the server, I still get errors. Yeah, if I do that, I suspect it will stop working locally. And we'll start working on the server. So we need like an adaptive check. We need to check if this request is being done locally or the server. Yes, I suspect now it won't run locally anymore. Yeah, getting four or four. Yes, I'm getting the same problem. Yeah, we need to use this line if you're running server locally and use this line if you're running the server on Heroku. No, we're not using Heroku. No. Yeah, I'm watching. Yeah, if it's working live, we might as well just keep it as is. It's, it will be down for a second. Same error. This error message is all wrong. It's analyzed way for change the class application. What did I change? I just changed the game logic. That one is okay. This URL should be accessible. And do I need to change the folders names in the class application as well? I did add the project directory in JavaScript. Do I need to do the Python code as well? Oh no. Yep. Based on the logs you've provided, there are several issues to address. The warnings about invalid value encountered in multiply and overflow encountered in multiply in skibby slash signal slash underscore spectral underscore pi dot pi suggest there might be an issue with the data being processed. This could be due to extreme values and proper scaling of the input data. You should check the data being passed to the scipy y functions and ensure they're within expected ranges. And I'm not sure if it's relevant for the current application. The warning about matplublib creating a temporary config cache directory indicates that the default directory var www config matplublib is not writable. It's recommended to set the MPLCONFIGDIR environment variable to writable directory. This can be done in your my app wsgi file or your Apache configuration. For example, do I need to do that? Yeah, this sounds more relevant than permission denied. The permission denied errors for accessing slash var slash www slash barnacos slash index dot html indicate a file permission issue. Ensure that Apache has the necessary permissions to read the files in your flask applications directory. Use chmod and chan to set appropriate permissions and ownership. Typically, the Apache user, often www data on Ubuntu systems, should have read access to files. Not using matplublib for this one, am I? And no, using numpy. Yes, that must be that error must be coming from another application. Okay, we included some logging. The problem still persists. It's working locally, but the fuzzy logic back end is not working when running on a server. That's not good. Okay, let's redeploy, because we made a few changes, many logging stuff and something else. We also changed the in my app, changed that as well. I'm not sure if... Yeah, it's something with the folder, silly folder. I can't find the folder. Okay, let's redeploy quickly. Because we need the password, because the server is super secure through the roof secure. It's working. Okay, we have to... Well, that doesn't matter now, because it is working okay. Right, redeploying flask applications. There's currently no link to it still on the front page. So essentially, okay, we do a quick summary. We don't need the bot for this. The bots are super slow and just annoying. So we have these two new flask applications that we will be sharing. Oh, I don't know why one of my cameras is like flickering like that a bit odd. You can do web eye tracking. Actually, use that the camera instead, but we need to keep this window intact. Because yeah, so publishing these two flask applications, there's no... Right, they're still working locally. Yeah, they should be working in a local environment for me as well. If we want to do any more changes testing later on. So it's working. I'm going to close that, reboot the server. It's still working. Yes, you can change your noise level. And in this application, you're competing against the robot in terms of trying to identify normal and abnormal ECG waveforms. Just checking the chat. There's no... Yeah, those sessions meant to be interactive, by the way. So if you have any moments, suggestions, requests, complaints, please do share them ideally during one of those live streams, because I can actually do something about it in real time. Okay, next time we deploy, get rid of that the URL and logging. Don't need it anymore, because it's working correctly. Yeah, we have this adaptive thing that will actually check if we are a production or development. And then yeah, because we need to change the URL accordingly. What else did we change? Yeah, we have to specify. I think that's what solved it, but I'm not sure which one was it. Anyway, I'm just happy that it's... If it's working, don't touch it. What is the first rule of engineering? We have a summary there at the bottom. Okay, the application is now working. We would like an image that we can use it as a thumbnail on the landing page for this application. Don't worry about text. So no text, just image alone. Yep. We'll generate the same one for the eye tracking business. Till we use something legit. I have to use my face. What's that? It's the web tracking. Yeah, just ask for a relevant image. Yeah, so it's generating this crap. Sorry. Yeah, don't worry about it. Just generate our own. That's fine. Yeah, because it's supposed to... Yeah, no. It's just meant to be eye tracking. Yeah, it's always stuffing up the text, of course. Yeah, and don't worry about it. Yeah, because we had the original one. This one is only for human alone to play, and it has no noise options. Whereas this one has a back end that's the robot playing the game. So it will be competing against the bot. Yeah, don't worry about the bot always being... So it's making decisions much faster. I mean, you should worry about it, but then don't worry about it too much. Eventually robots are taking over, so that's what I'm saying. Just don't worry about it. Let it... Yeah, so the bot is already doing better, not doing mistakes. The human, aka me, is making mistakes already. I missed one abnormal waveform. It's becoming faster and slower, so it's essentially helping the human. The bot doesn't care. It makes a decision immediately. But yeah, so you can tell even with noise, the bot is doing quite well. You can go try this application yourself. Let me know how you went. The Flask application currently is not doing anything for this. Okay, no, it's not that one. It's... Oh no, sorry, it does. But it's not sending any data. So I'm not logging anything anymore. There's no leaderboard or anything like that. I mean, it's like it's bad enough that you have to compete against robots, so you might not turn it into more of a competition. Obviously, if you're positively thinking about it, it's meant to be a collaboration or a competition. So the bot is giving you a normality score and it's helping you. Obviously, you are an ECG expert and it will be helping you make a decision and it will give you essentially the probability of how certain it is in its decision. But yes, the robot is also making a decision. So the fact that it's based on fuzzy logic system, you can read about it more over there. Yeah, once it becomes faster as well, yeah, that's another a lose-lose for the human. And this application also allows you to see how better or worse the robot's performance is when the noise is increased. So now it will probably start making mistakes. They're particularly expected to label normal ECG with abnormal. So these two, yeah, you can see the false alarm rate starts going up because essentially labeling everything as abnormal because the sub-normality score is too high. And that's due to the noise. So good luck to us all playing against robots. Would be a lot of fun. Check if there's any questions. Yeah, LinkedIn is limiting the streams to four hours, but we have to finish anyway. So, we'll have two extra tools there. It's some sort of, it's some sort of image. So I did showing the e-muff and stuff. I don't know what the resolution is like. Should do a funny image for the, it's not a good one. Is it? Sec to load my, load that game quickly, pop in a few options for us to use. Yeah, those images are low res. The camera is low res. Okay. That's not good, is it? Hey, obviously needs more testing. Pressure if I reduce the threshold. No, yeah, problem. It's finding the darker region, the eye. I think that the minimum for that threshold is 50 anyway. It's not finding the other eye. It's a bit of a problem, is it? Yeah, and when the threshold is up is off. I don't know what's up. I can swear it was working better before, but I guess that's the point of it. It's was a bit better. I don't know why. It would be even like the position of stuff on my screen provides different ambient light conditions. Yeah, so you can correct for, yeah, it's doing more errors than, well, right. Now one eye is better than the other one is off. Might need those parameters to be adjusted for each eye. I don't know if my eyes are different or what. Yeah, that's what I meant. I might use one of those. Yeah, so somehow with the parameters and certain specific light conditions, you should be able to do better. Yeah, now it's better. Yeah, so it depends how much ambient light you have. Anyway, one of them should be on eight minutes before LinkedIn will drop us out. Just trying to see if more ambient light into the room will make it better. Sorry, my microphone was muted. We got like four minutes to publish this tool. We already published it. So if you're watching the streams, those are the two links. Go check them out. Put it on the YouTube chat, the main one. And I'm just saying I need to actually publish them on the front page of my website to do that. I need some sort of images. Okay, maybe not that one or this one. Not that one. It's a way off anyway. I might have a couple, like a couple of them, just the eyes. Yeah, I don't know, let me know what you think. Yeah, I might just have the eyes alone, four or five of them in the room. See how we go. And we need something for this one as well. So once it's available, or if you're watching this video, you would know what the links are. But eventually I'll be. Some of the videos I'm editing, adding more videos from the live stream. So stay tuned. And I know LinkedIn will throw the stream out after four hours, so in a minute or so. Might keep going with those, but quietly. Let me know if there's any questions, or if you have, if you've checked the any of the other tools on Bionicleos.com, do let me know how you went and what ads did you get. I was thinking there could be an option to have the website here on Bioniclead. You could have a version of it with no advertisement, if you like. So do contact me for that. We could sort you out. Or some custom tools for your specific data sets or applications. We can do that as well. I'll see you in a bit. What is random ads for insurance and stuff you want more relevant advertisements. The university's medical device company is Neuralink. How about Neuralink? Do they need some placement?