Hello everyone, myself Mr. F. R. Syed. I work as an assistant professor in the department of computer science and engineering at Walsh Institute of Technology, Saulapur. The topic for my today's lecture is process termination in Unix system. So, let us see what all happens when a process terminates in Unix, the learning outcome. At the end of the session the students will be able to describe the concept of process termination in Unix system. Okay, now let us see the process termination. The processes on a Unix system terminate by executing the exit system call. An exiting process enters the zombie state, relinquishes its resources and dismantles its context except for its slot in the process table. Now the syntax for the call is exit into bracket the status where the value of status is returned to the parent process for its examination. Okay, the processes may call exit either explicitly or implicitly at the end of a program meaning the exit system call is either called explicitly or implicitly at the end of a program. The startup routine linked with all the C programs calls the exit when the program returns from the main function which is nothing but the entry point of all the programs. Now alternatively the kernel may invoke exit internally for a process on receiving uncut signals. Now in that case the value of the status is the signal number. Now the system imposes no time limit on the execution of a process and processes frequently exist for a longer period of time. So let us see some examples. We have process 0 that is the swapper process and process 1 that is nothing but the init process. So these exist throughout the lifetime of a system. Now there are other examples also like the getty process which actually monitors a terminal line waiting for a user to login and also we have some special purpose administrative processes as well. Now we see the algorithm for the exit system call. Let us see what all happens. Now the input to this is the return code for the parent process. The kernel first disables the signal handling for the process because it no longer makes any sense to handle the signals. If the exiting process is a process group leader associated with a control terminal then in that case the kernel assumes the user is not doing any useful work and then it sends a hang up signal to all the processes in the process group. So thus if a user types the end of file character that is a control D character in the login shell while some processes associated with the terminal are still alive then the exiting process will send them a hang up signal. The kernel also resets the process group number to 0 for the processes in the process group because it is possible that another process will later get the process ID of the process that has just exited and that it too will be a process group leader and processes that belong to the older process group will not belong to the later process group and kernel then goes through the open file descriptors closing each one internally using the algorithm close and releases the inodes it had accessed for current directory and changed route if it exists via the algorithm I put then the kernel releases all user memory by freeing the appropriate regions with algorithm detach rich and changes the process state to zombie. It saves exit status code and accumulated user and kernel execution time of the process and its descendants in the process table. The kernel also writes an accounting record to a global accounting file containing various runtime statistics like user ID CPU and memory usage and amount of IO for the process. User level programs can later read accounting file to gather various statistics that are useful for performance monitoring and customer billing. And finally the kernel disconnects the process from the process tree by making process one that is in it adopt all its child processes that is the process one now becomes a legal parent of all the live children that the exiting process had created. If any of the children are zombie then the exiting process sends in it a death of child signal so that in it can remove them from the process table. The exiting process sends its parent a death of child signal also in the typical scenario the parent process executes a wait system call to synchronize with the exiting child and the now zombie process does a context switch so that the kernel can schedule another process to execute the kernel never schedules a zombie process to execute. So now the students are expected to think and write the answer to the following question. What are the causes of process termination? So now the students are expected to pause the video and write your answer. Okay so let us see the causes of process termination. The first causes execution completion that is execution may have been completed. The second the parent process requesting for child process termination that could be another cause. Then the third cause trying to use a resource that is not allowed therefore it got terminated. Fourth in case any IO failure may have occurred. Fifth due to the parent process getting terminated the process gets terminated and finally due to some reasons like memory scarcity the process may get terminated. Okay now let us see an example of the exit. A process creates a child process which prints its PID and executes the paused system call suspending itself until it receives a signal. The parent process prints the child's PID and then exits returning the child's PID as its status code. If the exit call were not present the startup routine calls the exit when the process returns from the main. The child process spawned by the parent lives on until it receives a signal even though the parent process is gone. Okay next we will see awaiting process termination. A process can synchronize its execution with termination of a child process by executing the wait system call. Now the following is a syntax for the wait system call PID equal to wait into bracket start address where PID is actually the process ID of the zombie child and start address is the address in the user space of an integer that will contain the exit status code of the child. Now this is the algorithm for wait. The kernel searches for a zombie child of the process and if there are no children returns an error. If it finds a zombie child then it extracts the PID number and the parameter supplied to the child's exit call and returns those values from the system call. An exiting process can thus specify various return codes to give the reason it exited but many programs do not consistently set it in practice. The kernel adds the accumulated time the child process executed in the user and in the kernel mode to the appropriate fields in the parent process U area and finally releases the process table slot formally occupied by the zombie process. Then the slot is now available for a new process and if the processes executing wait has child processes but none of them are zombie then in that case it sleeps at an interruptable priority until the arrival of a signal. The kernel does not contain an explicit wake up call for a process sleeping in wait. Such process only wake up on receiving signals. So for any signal except the death of child the process will react as described. However if the signal is the death of child then the process may respond in a different manner. This is the reference used for the video lecture. Thank you.


Hi everybody. Welcome to this talk on container canary. So my name is Jacob Tomlinson. I'm a senior software engineer at Nvidia. I work a bunch on kind of infrastructure type tooling. And I contribute to and maintain a few open source libraries, many in that like data science, Python space. So I work on Rapids, which is a suite of open source GPU accelerated data science tools. And I work on Dask, which is a parallelism framework for Python, which allows you to scale your work out to many machines. As part of working on those projects, I also maintain, I'll help maintain a bunch of Docker images. So each of these projects, Dask and Rapids have kind of a special Docker images that make available to people. And these images have a variety of use cases. They're intended to let people pull things down and try out different versions of the library, build out different things, but also to be used as building blocks, to be dropped into like larger systems or dropped into like various platforms that allow you to bring your own containers. Now, when it comes to maintaining anything like this, occasionally you're going to end up having regressions. And so I kind of wanted to start with a little story about an issue I had a while ago, where I was trying to update the Rapids Docker image to work with Kubeflow. Kubeflow is like a machine-lining platform on top of Kubernetes. It has an interactive notebook service that allows you to kind of bring your own container and also has a pipeline service that lets you build up large computational pipelines. And each of these allows you to bring your own container images with you and drop them straight in. And so I wanted to make some changes to the Rapids images so that they would work with this platform. But in making those changes, I ended up breaking compatibility for a different platform. And so I kind of thought about, well, if I was writing code for this, I would be writing tests to make sure that I wasn't having any regressions. So I started looking into, well, how can I write these kind of tests for my container images? And the tooling around that just really didn't, there didn't seem to be a huge amount of things on offer. So I went off and built a new tool, this open source, so you can find it on your GitHub called Container Canary. So Container Canary is effectively at its core, it's like a specification for writing tests. You write them in YAML, the same way you would write resources or manifest for Kubernetes or other platforms. It actually borrows the Probes API from Kubernetes. So that's kind of how you implement each test, is the same way you would implement a liveness probe or a readiness probe in Kubernetes. So if you have experience doing that already, then a lot of this will seem familiar to you. And then as a command line utility that you can use to take a manifest with your list of your tests, your specification, and test a container against that to make sure that it complies and gives you kind of a pass-fail status at the end. It's really important that this can kind of be written down as a YAML spec because then we can commit that into version control and keep it either with our documentation or with our container images or with the platform, wherever it makes most sense. So this is particularly useful in these situations where you have a platform that allows you to bring your own containers. So Kubeflow is like one example where we want to be writing containers kind of directly targeted at that platform. But that platform is going to have assumptions around what services are running and what user ID you're using and where your directory is and what's available on the path and all that kind of stuff. Often these things are documented in a human way but not enforced in any kind of technical way. So Containing Canary allows you to come along and codify all of those things and then check that, right? You can run your tests locally. You can run things in CI. But then that was the initial use case that we built this for but that can expand way beyond that to just writing tests for any container image. If you're going to drop it into a system, you're going to make assumptions about what their interface of that container image looks like. What services does it start? What ports does it listen on? All of that kind of thing you can test with Containing Canary. So let's go back to Kubeflow and kind of talk through that specific example here. So if you go to the Kubeflow documentation, there is a page on container images. And at the top it says, these are some base images that we provide. They've got these libraries installed. The kind of path of least resistance is to take those container images and install your additional dependencies, set these up however you want and use those. Because these have been tested, we know that they work with Kubeflow. But there's a bunch of reasons why you wouldn't want to do that. And I see a lot of projects doing that. They're kind of pushing, oh, these are our kind of official images. We know they work. Use them as a base and you'll have a good time. But your security team may not want you to use arbitrary images from the internet that's maintained by somebody else. Maybe your organization has like a vetted base image that you have to use for building everything. Maybe you are building your own images for your own tools, like we are for rapids. We want to kind of, we're already building these images. We just want to bring them along to Kubeflow. We don't want to build a different one. There's like lots of different reasons why you already have an image that you want to use. And so often you'll also find in these documentation pages there's a section on, if you really want to build a custom image, here are our assumptions. And it's kind of written out in a bullet point list here on Kubeflow. But you see this a lot across a lot of platforms. Trying to communicate to you, the maintainer of the container image, these are the things you need to check for. So in Kubeflow's case, it expects you to expose some kind of HTTP interface on port 8888. That's probably going to be Jupyter or VS Code Server or something along those lines. It expects you to honor some environment variables for setting either path, the root of the URL. It expects that headers because it's going to iframe these web applications in somewhere else. And then it makes some assumptions around how data is going to be mounted into this. So it's expecting you to have the username Jovian in this case and the home directory should be home slash Jovian and the user ID should be a thousand. And a volume is going to be mounted into that home directory with those permissions. So it's listing out what those expectations are. But this is quite a brittle way of handling things, right, because we have our container images. I can go through and apply these assumptions, which is what I did, but that might change something. Other systems might have other assumptions that I might break that. But also what happens in the future if I want to maintain multiple different platforms, support for multiple platforms, or if I want to just make a change to the image because there's something wrong with it, how do I kind of, I don't want to keep going back on referring to written documentation like this to make sure that I'm complying with it. So with container canary, we can just write all this down in a YAML manifest. Let me just move that away for a second. We can write all this down in a YAML manifest. It's going through, each check in this list is one of those bullet points, but we're going through and programmatically testing using a probe from the Kubernetes API to make sure that we are meeting those specifications. So we're testing the username, we're testing the user ID, it supports the exec probe, the HTTP probe and the TCP probe. So you can check that different web services are listening on different ports and they've got different headers and different content all of that kind of stuff that you would write in a live network ready that's probe and Kubernetes, you can testing in container canary. And then once you've written this manifest that describes kind of those requirements, then you can run canary validate on the command line, give it the path of the URL to this manifest, give it your container image, and it would just run for each of those tests, give you a pass fail. This makes it very easy for setting up either for testing locally or in CI as you're building images. There's also no reason why you couldn't use this in the actual platform itself to run like a pre-check on a container. So how do we use this within RAPID as well? We started off by kind of trying to codify the platforms that we want to explicitly support, like Kubeflow or Binder or Dask or whatever. And because we have written those down at manifests and we're running that in CI, we can confidently say we support those things. And if we want to add a new platform in the future, the first thing we can do is write a manifest based on the documentation of that platform and then check whether or not it's going to comply. And this is really also useful to finding out if different platforms have like conflicting assumptions. If they expect two different user IDs, there's kind of no way to resolve that other than having separate images for those platforms. But that's fine. We can move forward knowing that. So container canary is written in Go, it's compiled to single binaries, you can find a bunch of releases on the GitHub, so you can just download it, check the checks, make it executable, put it on your path, and away you go. It's very easy for installing in CI. So I would say that container canary is kind of complete in terms of its scope. You can write the manifests, you can run them. You can write all the tests that you need to be able to write and we support the full set of probes. There is a new probe for GRPC, which is kind of in beta at the moment in Kubernetes 1.23, I think, which we'll have support for once that comes out of beta around. So the things we're going to look at doing kind of going forward is bug fixing, this is still a relatively new library, so there's going to be work to be done there. We also just want to improve the user experience, make sure it works nicely, both on your local machine and in CI. One future task might be to mount canary binary into the container for running kind of more involved checks, maybe reducing some boilerplate, so they'll be having to provide batch and things in the exec. And that's kind of where the name container canary came from, you go to mount the binary into the container and it would be the canary down the line. But that's something we can come to later if the amount of boilerplate becomes problematic. But the main things we want to get to is creating a bunch more examples in our repo so that it's easier for folks to come along and kind of learn about all the different tests you can write and write their own manifests. But then we really want to start encouraging folks to be writing the manifests, checking them into their version control with their project if you're maintaining a platform that takes, bring your own containers, kind of model. Your documentation should have container canary in it and say, look, here's a URL for a manifest, you can run canary validate to make sure that your container will work. So going back to the Kubeflow example again, I would really like to take the Kubeflow example from the canary repo and upstream that into Kubeflow itself and update that documentation page. So you still have that bullet point list, but it also has the command that you can run to kind of programmatically validate that you are compliant. So please start testing your containers or make all of your lives easier. Hopefully you aren't running to regressions like I did in the future. And please publish your tests, like if you maintain open source projects, please put your manifest in those projects and update your documentation to say, look, you can use canary to validate your images. So thank you all very much for paying attention and happy testing.


I'm so excited to announce I have a new book being published this December December 2020 my How not to diet? Cookbook my last cookbook the how not to diet cookbook Number three premiered on the charts the New York Times bestseller list the New York Times review books called it their favorite cookbook of the season What sets this cookbook apart and the other one is Not only every single recipe healthy, but every single ingredient of every single recipe is healthy a green light food And we incorporate the 21 tweaks from how not to diet like you can see the tea is black cumin seeds for example and You know why I mark the recipes that you use for a negative calorie pre-loading and all the other cool tips and tweaks also available on my My free app for iPhone and Android dr. Greger's daily doesn't just switch over to I'm a wheat loss mode But if you're like how can I incorporate that stuff in my diet? I've got a cookbook for you great for everyone on your gift list this season And of course all the proceeds I received from all my books are donated charity just like this one I hope you enjoy it and make some delicious food and Don't forget to vote


Ben, how tough is this to deal with you work hard all season to win number one in the AFC and you got to deal with the reality that there is no game in the AFC? Yeah, you never prepare for this. You're always worried about the game as you're in, you're worried about the next game. And when you don't have something to prepare for right now, it's hard because with me, I was last year in the deal, I'm like, I'm trying to win a championship. In my mindset, every day was like, what does it take to win? And when you fall short, it hurts because that's the only thing that matters to me. Every day was, there's a process of getting there. And we fell short of it and it hurts. So you've been involved pretty well with this case of turnover again?  We're in situations where we've got to be better as a whole offense. We've got to execute better and can't make those mistakes in these kind of games. But for a good C interception, you guys get to score to tie it at that point where you're getting the turnaround as to where it happens. Yeah, we're playing complementary football, defense played well. Got us the ball when we needed it, got us back on track. And we didn't capitalize when we needed to down the road. Taylor, we asked Taylor about the final drive. It seemed like you guys were trying to note the clock. He said the idea was to try to score with no time left and not give Cincinnati another chance. Obviously the interception happened on that. Was that kind of the mindset of the final drive? Yeah, I'm going out there trying to execute each play. I'm trying to give us whatever play. That's the headman's job to manage the games and put us in the best situation around.  And we trust Ray Bluntad to make those calls for us and we just got to go out there and execute. And we came up short and put our defense in a bad situation. And it was that time they couldn't bail us out. Ben, how are you guys feeling this week? Like, on the run, especially with you, Roger? Was this the healthy for you guys? Yeah, we had it very bad. We had a week off. It's getting in the way we wanted. We wanted to make a run. Our body's feeling good.  It sucks to get in this way.  Yeah. I want to be out there every play. And that's my mindset. I'm going to try to, whatever, if I can step on that field, I'm going to play. I love every guy on this team. And we feel short today. And losing's hard because you can't come back and fix it next week. That's what you lose in their season. You want a quick turnaround. You want the game to be on Thursday. You don't want to think about it. Now we got to think about this for the whole off season. And it hurts. It's too early to reflect on the season. You guys had 12 wins. Top CDHC won your division for a second straight year. Yeah. For me, I'm trying to win. I'm trying to win a championship. That's why I play this game. And anything short is not what I want to be. That's what hurts because you can only play this game for so long. And I want to win.


Now we're going to be speaking with Mr. Sheaier on Ladi Jo. Good evening. Thanks for joining us, sir. Thank you very much. Good evening. Thank you. Great to have you. So let's quickly get your thoughts on the elections for today. There's been reactions from it, even from the state governor, speaking about the low voter turnout. But what did you observe? First, let me just quickly appreciate the good people of Lagos for affirming their faith in that party. In spite of the unusual situation we find ourselves conducting these elections, the threat of the COVID-19, which is still very popular all over the state, under the challenges faced by the empire throughout the state. For me, likely the exercise has been successful. Well, some people have described as having a low turnout of voters. I would say a reasonable turnout of voters. And you agree with me that in the election, the results will be determined strictly by those who turn out to cast their votes. We appreciate those who have made some of the courage to exercise their civil responsibility. And there is a further affirmation on the progressive governance in the state in the advent of democracy in 1999. All right, there is whispers of allegations concerning, you know, Mao practice and Reagan. Do you have any response to that? Did you also notice anything like that in the process today? Let me just say, I was taken aback by those allegations. It's the refrain of the opposition party, the PDP. And it's like going to a party. Even ahead of elections, they were given reasons why they were sure they would be defeated. So I would just say that we're not taken aback by the lamentation of the opposition party, led by their chairman. It's convenient for the opposition party not to look inwards for their problems. And let me also say that if voters are not really turned out as expected, it's a reflection of the helped opposition we have in the state, lackluster, unambitious, not capable of offering any contest. So they rather look inwards for their various issues rather than asking us passion on the where and victory of the ruling party. You have looked at me that it makes a whole lot of sense for complementary performance to have the same party at the federal and state and local government levels. And to have been an aberration for the results to have turned out otherwise. Looking at the performance of the APC at the various levels in elections in the past, our party has the state government. We dominate the House of Assembly. We have the members of the National Assembly. All of these will come for something in the local government election. We agree with you. Okay, and finally, I want to also go back to the turnout with regards to the elections today. Do you think that Nigerians, you know, Legoshians inclusive, you know, have a lot of interest in the local government chairmanship office and also the councilorship? There's, you know, over time seems to be more interest in presidential elections and the governorship elections. Do you think that that may have also affected the turnout? A lot of people don't really seem to care who is local government chairman. As a matter of fact, for me, the local government remains the most important level of governance in our country. It's the grassroots. It closes to the people. Our people should show more than a passing interest in who is their councilor and local government chairman because they are the first point of contact as regards governance, as regards social responsibility in the nearest local government. And I believe as time goes on, the consciousness will become higher and we will have more participating in these elections so that we have quality representation at that level. Okay, well, let's see how it goes. And we look forward to speaking with you again sometime during the week. Thank you very much for your time this evening. Thanks for speaking with us. Thank you for having me. Thank you.


Okay, so how many of you already know what WebAssembly is? Okay, that's pretty good. I really have two things to say in this talk, and that is that one, WebAssembly is awesome, and it's not limited to the web. And the other is that I think that we should explore ways to combine WebAssembly and Python because there's a lot of interesting opportunities there. And in this talk, I'll demonstrate free ways in which we can do that. But let's start at the beginning. So first, get this out of the way. WebAssembly is often abbreviated as WASM, and these are just one and the same thing, and I'll use both terms in this talk. So WebAssembly is an open standard, so it's being developed by people from Mozilla, Google, Microsoft, and even Apple. So all the big names are on board. And it's a standard for representing executable code at a very low level. So the code that it represents is going to execute at more or less native speed. So in the classic way that a programming language works, like Rust or C, you have this programming language which is designed to be readable by humans. A computer cannot execute that code directly. It is first compiled to machine codes and these are the instructions that the computer will execute. If a programming language wants to be able to work on different platforms or even on different operating systems on the same hardware, you need to compile it, you need different compilers basically. What WebAssembly does, it sits like in between of that. It's a very low level representation of code, but it's just high level enough so that it does make very little assumptions about the underlying hardware. That makes that it can be used as a generic machine code, so to say. And this last step of compilation to go from WebAssembly to the actual machine code of the current machine that you're running on is the responsibility of the environment that runs the WebAssembly module. So in most cases, that would be the browser. So you load a WebAssembly module in your browser and the moment that is instantiated, it will do the compiling for you. And all major browsers can do that for about a year now. So you can already use WebAssembly. So carrying on. So WebAssembly is also designed to be very compact. So the resulting binaries are very memory efficient. At the same time, WebAssembly comes with a human-readable representation and there's a one-to-one relationship between the two. So you can always turn the binary representation into the text representation and the other way around. That's a great feature, for instance, when you're debugging. And last but not least, WebAssembly is also safe. It's being designed primarily to run in the browser and you don't want any random Web applications to be able to crash your Web page, let alone your system. So WebAssembly is designed in such a way so that the codes can be validated to great extent at the compile stage. So all in all, there is a lot of awesomeness in WebAssembly. And it comes to no surprise that WebAssembly is being adopted by many open-source communities. For instance, the Lua community. They are very excited because they now can write Web Apps in Lua. The Rust community is very excited because they just want to write everything in Rust, including things for the Web. I've even seen people get excited about being able to write Web Apps in C++. The JavaScript community may be a bit different. I think it depends on who you ask. They either see it as their salvation or as a threat. But in all seriousness, WebAssembly will not replace JavaScript. JavaScript will probably be around for quite some time. But what WebAssembly will do is bring an end to the monopoly that JavaScript has in the browser. So then the Python community, that's us. There doesn't seem to be a lot of enthusiasm from our side. At least I have not seen a lot of things. I've heard a few things, seen a few things. This morning, I actually heard that the site team is trying out some things with it, which is very exciting. But for the rest, there's not a lot happening, it seems. And maybe this makes sense because all these statically compiled languages, it's pretty straightforward for them. Instead of compiling to x86 or whatever, they compile to WebAssembly and then they can render applications on the Web. Of course, there's some things that you have to do. It's not easy, but it's pretty straightforward. Python is an interpreted language, so it's different. We cannot do it in that way. And also, Python is a bit weird because we have this ecosystem with a lot of... We have site and we have number. There's a lot of weird things that we're doing with our language. So it's not very obvious where we can use WebAssembly. Nevertheless, I think there are several ways in which we can make use of WebAssembly. And I will demonstrate or mention three use cases in this talk. So this is probably a good time to introduce PPCI. So PPCI is a project by Wendell Bauman, who sits over there, and he has worked very hard for several years on making a pure Python compiler infrastructure. So that's a set of compilers and tooling written in pure Python. It's completely crazy, but it's very nice because it's very hackable. And last year, Wendell and I met and I was giving a talk at Euroscipy about WebAssembly and we sort of caught up and we've collaborated over the past year to bring support for WebAssembly to this library. And in this talk, I'll be using that library in some of the demos. So the first use case, I don't have any demos for this, but I think it's definitely worth mentioning because it's probably the first thing that comes to mind when you think about Python and WebAssembly. And this is, let's compile a Python interpreter to WebAssembly. For instance, take the source code of Cpython, compile it to WebAssembly, and then you can run it in a web, and therefore you can run your Python code on the web. You can also do this with other Python interpreters. So for instance, MicroPython, you could compile to WebAssembly and run on the web or PyPy. So some examples, the most notable is Pyodeid, which takes Cpython and a couple of scientific libraries like Pandas, Matplotlib and NumPy, and it allows you to do data science in your browser in a sort of notebook-like environment without having to install anything on your local system. PyPyJS is relatively well-known, and tomorrow there's a talk about RustPython, which is an experimental Python interpreter written in Rust, and Rust can be compiled to WebAssembly so you can do the same thing. Super noted though that in all these cases, the Python code is still running in a VM, so this is not some sort of silver bullet to make your code run fast, it just will make it possible to run it in a browser. So the second use case that I would like to mention is to compile a subset of Python to WebAssembly. So compile snippets of Python that use a subset of the syntax of Python, and compile that to a WebAssembly module. And once you have that module, you can run it anywhere. And with anywhere, I mean everywhere where there is a WebAssembly compiler, and that is in this case, or at this moment, that's all the modern browsers and Node.js, and as I will show also Python to some extent. But I think that a few years from now anywhere will mean almost anywhere. So to illustrate this, I wrote a simple function that can calculate prime numbers. So for instance, we ask you to calculate a thousand prime number, and that will give us 7,919. And we can compile this code to WebAssembly. So we have implemented a very simple Python to WebAssembly compiler, which takes quite a few shortcuts. The most important one is that we assume that all variables are floating point numbers. And that makes a lot of things quite a bit easier. So we take our... Is there a socket loose or something? Do you know? Everything seems to be getting worse, right? So anyway, we combine the find prime function together with a small main function, basically to bootstrap it, and then we can compile that to a WebAssembly module. So this WebAssembly module, this M is an internal representation of a WebAssembly module. And we can use that to, for instance, show the bytes that... So basically the binary representation of this WebAssembly module. And similarly, we can show the texture representation of this WebAssembly module. So this is the human readable form. Well, with a bit of effort. And we can also show the interface. And we'll look at this last bit quite a bit more further in this talk, because the interface shows us what the module needs from the environment in which it runs, and also what it provides. But let's actually run this module. So we have implemented a few simple functions. For instance, to run the code in Node. So in this case, Python is calling out to the Node.js executable, running it in a sub-process, giving it the WebAssembly binary, and then Node will execute the WebAssembly module that we just compiled. And we can see that we get the same result. And similarly, we can run it in a notebook. In this case, Python will send the binary WebAssembly module to the browser via some IPython mechanics, and then we execute it in JavaScript. So basically what we did, we had a simple piece of code in the form of a function. We compiled it to a WebAssembly module. Now we can run it, well, at least in Node.js and in the browser. But as I mentioned, we also added support to PPCI to compile WebAssembly to a native machine code. And that means that we can do this. So if we decorate our function with, in this way, this function is compiled to WebAssembly, then compiled to machine code, wrapped into a new function, and now we can execute this code and run it on native machine code. And it's quite a bit faster now. It's not like massively faster yet, because we don't do any optimization. It's just really one-to-one relationship. But you can see where this could go if you follow this along. So to summarize this, if we take the approach of statically compiling a subset of Python to WebAssembly modules, you can use that, for instance, to run snippets of codes for your web applications, because you can run it in the browser. Or you can use it to run codes much faster. If you take this further, you can make solutions to WebAssembly. One very nice feature of this is that the binaries, the WebAssembly modules, are actually cross-platform. And that can mean a lot, for instance, with packaging. I should note, though, that the part into WebAssembly compiler is really a proof of concept. It needs a lot of work to be a proper compiler. And also, you need a WebAssembly to native compiler. And this is all working perfectly in modern browsers, especially in Firefox. They take a really good effort to make it work really well and really fast. But the version that we have in Python is really in an experimental phase yet. So the final use case that they would like to present is to use Python as a platform to bind and run WebAssembly modules. So we're seeing that we can run and execute WebAssembly modules in Python. What if we take this further? What if we would make it possible to load multiple WebAssembly modules, possibly written with different programming languages and binding them together? They have these very explicit interfaces. We can bind them together in Python and then running them as one coherent application. I think this could work very well because historically Python has always been a very good glue language and Python also has a very rich ecosystem. So if we went this way, we could turn Python or the Python ecosystem in a really multi-language ecosystem. And to demonstrate this somewhat I've I've taken the rocket game and this is a game which is written by someone else in Rust. So it's written in Rust and then compiled to WebAssembly. It was used as an example to run Rust on the Web. The game looks like this. You control a little rocket. You can steer, you can shoot and that's basically it. So if you browse the repository where this code is residing there is a little file there called program.wasm It's 60 kilobyte it is the the code compiled to WebAssembly. This is the WebAssembly module basically. So I downloaded this module. I renamed it to rockets.wasm and for the rest I didn't touch it at all and I can load this in memory using ppci. So this is again the internal representation of the WebAssembly module. We again can show the bytes. Of course it's a lot more than this module that we saw. We can also show the textual representation. Human readable is relative here I think. But we can also show the interface and this is where it gets interesting because the interface defines imports and exports and the imports are the things that this module needs from the environment. So we can see that it needs the sign function and the cosine function and it needs some drawing functions because it's really a game engine. It leaves the drawing to the host environment. So it needs the function to draw the bullets, the enemies, the particles, etc. And we can also see that it exports some things and most importantly these are the controls to steer the ship. So turning left, right and shooting. So if we look at this repository a bit closer we can see that there's a lot of rust there but there's a little bit of JavaScript too. And we can see the draw player, the draw enemy function and these are really HTML5 canvas drawing calls. So what's really happening this Web Assembly module is loaded into JavaScript and there's a little bit of JavaScript surrounding it to support it. There's the code to load and compile the module and there's a little bit of code to provide the sine function, cosine function and drawing the drawing calls. And also to turn JavaScript key events and use them to control the ship using the exported functions. So if we want to run this module in Python we need to do the same. We need to give it the sine function, cosine function and some drawing function. So we need something to draw to, we need something to capture key events and we can for instance use Qt for that. And what we then get is something that looks like this.  For instance the draw enemy functions that we do the Qt drawing calls there and in total it's just like 100 or 200 lines of code. We basically wrap all these methods up into a small dictionary which is sent along with the instantiation of this module and then it works. So then we get, if we run this we get this. So what we see here is a game written in Rust, compile to Web assembly and now running in Python. And I intentionally made everything really big because then it's easy to see in the back. So it gets better. So instead of Qt you can also use Promtulkit. So Promtulkit is a UI a way to create user interfaces in the shell. I tried just now and it didn't work because the wifi is stuck so let's try again real quick. So this is really geeky but yeah.  Anyway, at some point I thought well this game is not so hard to play, let's make an eye on it. So I wrote a little bit of C code it's really not that much which really it looks at what is the closest enemy tries to ship towards it and then when the angle is small enough shoot. And there's a website called WASM Fiddle and you can write C code there then you hit a button and then out comes a WebAssembly module. So I use that and then I downloaded the WebAssembly module and then we can load it in here. And we can show the interface. So we can see that it needs it needs a toggle shoot, a toggle turn left and toggle turn right. So it makes sense because it needs to have control of the ship and also it exports a draw player and draw it is not going to actually draw these but it needs to coordinate studio calculations. So if we bring this together we get this. So this is a game engine written in Rust, an AI written in C and bound together and working together as one coherent application in Python. Running on Windows, yeah. So I should really say that all of what I've shown is really experimental and nothing is really ready for use from the Python end but nevertheless WebAssembly is already usable and it's definitely coming and it's really awesome and it's definitely not limited to the Web. And I would like to encourage everyone to explore ways in which we can combine WebAssembly and Python because there's definitely more use cases possible and I just showed three examples here. Yeah, that's it. Thank you. So thanks for showing how it's useful for Python because this is actually more eye-opening the web part and sort of like playing a devil's advocate a bit. What do you think about the web part and like because everyone is basically jumping, oh I'm going to just use my language, my favorite language to write web now and how is it different from basically Java times or like ActiveX times or ActiveScript in Flash basically and no this yeah that's a very good question but this is different in several ways in that these WebAssembly modules are more lightweight. Basically yeah and they expose basically they expose what they need from the host environment. For instance I need a sign function, I need a cosine function and maybe the host environment will provide that but it could also be that another WebAssembly module provides it and the host system to get it basically. So it skills up much better I guess than for instance Java applets. Thanks Thanks for the presentation very nice presentation I have two questions first one is which subset of Python did you work on to convert into WebAssembly? Yeah in this case it is a very well basically I stopped when my example was working. It assumes that every variable is a float for instance and that makes things a lot easier so if you want to extend this it would be very good to use type annotations so that you can use multiple different types and still statically compiled but yeah it's a very very strict subset at this point it's really proof of concept. My second question is to which extent can one manipulate the browser DOM with WebAssembly? You need to basically you need to provide an import function so that you get something from JavaScript to manipulate the DOM so there's no way so on itself WebAssembly cannot do a lot. It cannot do file IO because it has to be safe right? So if you want to manipulate the DOM you need to define a function that you import and then in JavaScript you're going to make that function available. That's how it works. Thank you for the talk. I think you might just have answered part of the question one of the things I do is that I write tutorials and so the first use case seems really interesting to have Python interpreter running in WebAssembly. But what would be the limitations and maybe they are different for the tree that you showed? For example, for importing Python modules how would that work to import Python modules third-party modules and would it be able to open sockets like to run a web server inside the browser could you run things like a web server? Good question. If you are in a browser there's no way to create a normal socket. Running a web server would be hard. But you have web sockets so you could expose them. So again, you need to have some kind of import or export mechanism so that in JavaScript basically you write the you provide somehow web socket functionality to the WebAssembly module. And for importing modules these are really the parts where compiling something to WebAssembly is hard. A file IO, stuff like that you need to somehow convert it to use the browser's virtual file system that it exposes stuff like that. And importing you have some mechanism to do that but it's different. Could you like for example directly from PyPI or something like that? Possibly. I have not played with that part myself so I'm not sure. Could we see it? Can WebAssembly written by Python assess the database? Come again? Database assessment. Database access from WebAssembly you mean? Yeah, you could. The only thing is that you then need to for instance then you define imports for accessing and manipulating the database and then in Python you write a little bit of glue code to actually provide that functionality. So directly from WebAssembly, no but you can import any functionality that you need and then you need to write some supporting codes in Python or JavaScript depending where you're running to make it work. So you are saying when you compile your native Python code handling SQL when you compile that WebAssembly there won't be a single WebAssembly file. Sorry, I don't understand your question. Think about you have a native Python code handling SQL whichever it is and you'll compile that into a WebAssembly file that won't just work right you want to wrap everything into a WebAssembly file and run it? No. Unless your compiler is somehow aware of that and automatically generates the imports and the generating code so maybe we can talk afterwards and explain more details. You showed for running the WebAssembly in Python I think you showed passing it to Node shipping it to a browser and getting results back so when you were running the QT application where was the WebAssembly running? It's running inside the Python process. So what is the run time of that? What is the run time for the WebAssembly? Well, it's machine code so it's being compiled to machine code it's loaded into the Python process and then running there. That's for the rockets like the rocket game engine we emulated it because we have some bugs in it and we were unable to fix them before the talk so all the other parts are running truly on machine code and the rockets in this presentation was emulated but it's an implementation detail. So WebAssembly is compiled into machine code by the... It makes use of a trick that was published in a lightning talk a few years ago at SciPy where you can load machine code into Python memory and then execute that it's basically based on that. Please give our speaker another round of applause.


Today we answer the most important question in Linux and I don't I unix based operating systems, whatever Here's the deal guys. There are a lot of people who watch the channel a new new users new friends Who see stuff going on and they don't often know why we do the things we do? So in this video, I want to respond. I want to respond to a little comment That's representative of many comments that I get on my channel This guy actually posted this comment on a video I did on graph if you don't know what graph is It's a document compilation. It's a built-in document comp elate compilation Program that is on unix based operating systems It's not important for this video, but it's it's a universal question that actually touches on many important things So anyway, he asks I'm really new to Linux. So could you tell me why this is an advantage over something like a? GUI text editor a graphical user-intered face text editor like for example Microsoft Word Libre Office Basically the same thing you mentioned something about Extensibility forgive my inner ignorance lol that's total zoomer thing ending in sentence with lol or haha with no period That's classic anyway So why why do we not use on this channel Libre Office or Microsoft Word? Why do we insist on doing things in text files in the case of graph again graph you write something In a text file with little markup showing what is supposed to be bold once what's supposed to be a header And then you compile it into a PDF. Why would we ever do that in a text file? Why why can't someone just write a GUI interface a graphical user interface for that? Well, the answer is well the answer is simple, but you sort of have to be shown it You can't be sometimes you can't be explained it. Let's put it this way You know first off, you know if you do something this doesn't just apply to document compilation I'm gonna be clear. This is a universal fact of the Unix philosophy. Okay, we like extensibility Whatever this but buzzword means It extensibility is actually a classic buzzword But anyway, but I am gonna go just as an example So I have a directory here where I have all of my Assignments that I did in college and and the season and you know papers and stuff like that Specifically actually first let's go. I have a thesis right here. So my thesis. I didn't do my thesis in a graph I actually did it in law tech. So all of this jumble jumbly stuff here This is actually my thesis. You can see the text here. You can see there's markup So it's showing you what is supposed to be italic and things like that It is automatically citing things that actually automatically produces Citations and stuff, but what is the advantage of doing stuff in a text document? So just to be clear first off, this is gonna be compiled into something that looks like this Okay, so this is what it ends up looking like, but why should we do this in text? Well, here are some things just just to prime your brain. Here are some kind of things you can do with text for example, maybe I want to know did I talk about Spanish in my My thesis I don't know did I well I can actually just instead of even opening the file I can actually just search for the word Spanish using the command grep, okay? So for example, I could search for that and that actually gives me it gives me every single line that has the word Spanish in it Spanish is nice and highlighted here or let's say Let's say I want the words only okay I can actually take the words only and I can count them up in WC and that will actually give me Okay, 17 you mentioned Spanish 17 times in this document or other things you can do with text documents Let's see something else. I know there's some people who are very anal They think that you should not refer to Spanish as Spanish You think that they they think that you should refer to it as Castilian or something like that So another thing we could do is we could run a said substitute command and we could replace Spanish Every instance of Spanish with Castilian. I think that's how you spell it in English I'm not quite sure but anyway, you could replace every instance of course to do that You would run it with the eye option, but I don't actually want to replace it instead I'll just grep out the results so that we can see that in each case all the times that we had Spanish now they've all been replaced with Castilian. Okay, that's that's one little thing you could do or I mean There's more stuff you could do let's say Let's say somewhere if I'm just in my classes archive here I want to look I remember there were some there's some little paper that I wrote about Bengali the language Bengali I could do something like this I could grep for Bengali now the eye option here happens to be searched for case and sensitive So if it's capital or not or if it's all capital or no capital And I'm gonna search recursively through all these folders and I'm also getting the capital eye option That's so it ignores binary files. It ignores PDFs and stuff like that I'm gonna search everything here and it actually shows me okay here are all the situations where the word Bengali is used Actually, let's let's clean that up. Let's only use the word itself. So now we basically get a list of all these files Oh, the one I was looking for is this one. It's this paper that I wrote on You know how scope is tied in the the scope rules are tied into porosity rules and stuff like that So I can actually look that document up So you're just seeing very superficial things. So I'm replacing stuff with said I'm looking for things with grep but the thing to remember about text files is none of this you can do with with Microsoft Word unless you open up the document and you go into Microsoft's Designed user interface and one of the options happens to be there Whereas if you're just using plain text if you're abiding by the Unix philosophy You actually can do much much more because any program can look at text all of these commands that we're looking at, you know said grep Tr All all of these programs can actually just run on text So they get you can get stuff from them and do stuff with them Now it's not just me running things on the command line mind you This could also be like anything you run on the command line. You can also automate So for example, I can easily automate commands that I run here Or I could you know, I did a second ago This thing to replace If I if I ran this command it would replace every instance of Spanish with Castilian I could actually run that on all the files in this directory if I wanted to massively update You know a bunch of files at the same time Or I could have rules more complex than just a simple replace or stuff like that So when you're doing that now all of this might might be gobbly gook if you're new to Linux I don't know anything about these programs I don't know anything about grep or set or all these scary words that don't even sound like English words But the issue is once you once you take those first steps once you realize that you can do stuff like this You realize there's a massive world out there of not just command line programs you can run But also, you know being edit able to edit something in Vim. Okay Vim is one of the most powerful I mean not just them. I mean the important thing is there's no individual pro program that makes editing makes editing text good But so many programs have different abilities. So for example in Vim I have A couple scripts that I have built to interface with it. For example, I have this thing here. This is a compiling a compiler script Where if I'm in a law tech document If I run What is it comma c if I run comma c it runs this script right here? Actually, there's an error here The packages aren't up to date, but that's not important But normally if I if I run Uh This compiler script it will compile either a law tech document or you know a markdown document It might even compile a program or something like that. Um, you can actually build scripts into your Into Vim into your text editor into the thing that you're modifying stuff by or the same way I have another thing that's like a op output and this is like, okay Well, this opens up the output of this file. So this is the pdf file it compiles to I guess that error wasn't that fatal Or something like that because it's still produced this stuff. But anyway, um, so that's the kind of thing like when you're doing This is what extensible means. That's what i'm getting at When you're dealing with text you're dealing with something that's extensible It's not just something that you have to use with microsoft word It's something you could use with any command line program You could actually edit text with microsoft word if you're suicidal like a plain text file Um, you could log into a server With ssh and modify something and you might be saying, I don't know what any of this stuff is I don't know. It's scary. There's a scary hacker stuff. I don't know anything about it But the thing is once you start taking taking those baby steps, you realize this world is much easier to live in You can much easier Easierly make a uh an extensible work environment that just sort of it's not even something you work on It just comes from the fact that oh, I want to do this a little bit more efficiently Oh, I want to be able to script this. I want to be able to automatically change all this kind of stuff I mean, I do stuff really radical in vim.  What's a good one? Let's oh, let's just go to No, we'll do the hermetic corpus. Okay. So for example, I have um, uh, I I've been doing like bi-glottic Texts of you know, I want to in la tech produce. Uh, let's say I have uh, let's Use that. Yeah, so this thing you have here is actually a bi-glottic text if I compile this document Let me actually open up that so you can actually see it. Okay. So This is what this looks like. All right. So on one side I have greek text and on the other side I have english text All right, that's something that I do here and how that actually works out is um, All I originally just copied a text, you know The greek text and the english text and I automated putting them in the correct Uh order in vim like taking the paragraphs and interspersing them all of this I did mostly automatically It needs some manual oversight, but in general it's something very easy to do You cannot automate this kind of stuff in microsoft word It's forget about it forget about even if you have some cool looking Uh, I don't know even in groff well, you know, of course you can't modify groff compiled forms But you can operate on groff text. Okay, and that's the important thing So you can do magical things like this took me I was driving, you know, 331 pages of this like constant bi-glottic text I want to say I did that in a series of hours and that was just uh, I was on a road trip And I was doing it in the back of the car It you just needed the manual oversight vim actually does most of it You can just program macros into vim that do it all magically by itself. Okay So anyway, even more than that actually there's another comment. I got I got this a couple years ago too And it was someone actually explaining why writing things in text is so much better Why abiding by the unix philosophy is so much better I actually remembered this post from two years ago and when I thought when I saw this comment I remembered it So this guy was responding to someone who I think was commenting on a video that I did on beamer Which is like a la tech way of compiling Or maybe it was our markdown presentations But it was some kind of way of compiling a text file into a slideshow Which is very easy to do And he says what he said about microsoft powerpoint all applies the Libre office and press Impressed to there are other advantages which I consider way more important. It's text You are virtually guaranteed to always have access to your past data Good luck trying to get access to your Libre office and press presentation in 30 years Or your microsoft powerpoint presentation in 20 years It's text. You can manage it with git. It's text. You can look at diffs You might not even know what a diff is, but you're gonna want to know It's text. You can use the power of your text editor for example to make regex replacements I'll try doing that in word. You can use scripts to manipulate the content You can find files by their content. It takes up very little storage like all this kind of stuff That is what extensibility means. It means you don't have to use One file in one particular way. You have a huge toolbox of tools that can do All I mean you can you can even nitpick over which is the most efficient way to modify a file Should I use vim? Should I use the said command? Either way you have those options You don't have those options with microsoft word microsoft word is going to be constantly changing not just microsoft word anything else it like Um, uh, you know Video editors that are hard to modify just any kind of file format that is that is Further and further away from text. It is harder and harder to do stuff with and that is why you have to keep Things like this simple because it makes it makes your life simpler if your your format is simpler that you're using That's why we do it.  I mean it looks Again, I could open up my thesis like the the source file looks scary Oh, no, they're a bunch of headers and stuff that you know, I don't know how they work But the thing is like this is it is so much easier It is so much easier to be able to do this in pure text be able to modify any of it Oh, and guess what law tech it also has the ability since it's building off of simple format. It does your uh references automatically It does like all of this kind of stuff automatically. You don't have to worry about it Like, you know, I I have never seen a bibliography in my life I I never have to do one of those ever again because all of this kind of stuff It's it's done automatically. All right. So anyway, hopefully this is getting through to you That there's a reason that we do what we do Extensibility it's it's not a meme it is a meme, but it's not a meme meme You know what? I mean, it's it's a meme because it's real It's not like one of those. Oh, it's just a meme people do it. No like This is why we do what we do. Okay. All right So hopefully that makes it clear to some people just get your toes in this kind of stuff You can look at my watch my old videos on everything You'll you'll get it. You'll get the gestalt of what you're supposed to figure out. All right. That's about it. See you guys next time


Hey Bolo buddies. Thanks for watching. All right, you guys this one is so Unexpected. Oh my goodness. Just wait The funny thing is This when I picked it up, I knew it would sell Did I know it would sell so fast? No Did I sell it the right way? Could I have made more money? Maybe we're gonna talk about all of those things in this video Let me know if you've ever sold this item and if you've had success with it But oh my goodness We are gonna talk about eBay, Mercari and Poshmark and selling this item on all three platforms which platform is the best and Did I sell it too cheap? Would you have parted it? Parted it? I can't say that word out or would you have sold it in a lot like I did? And something else happened. I got a message from a buyer wanting me to do something And I'm gonna tell you about that and then I'm gonna show you why I think they wanted me to do it So let's get started here The item I sold is Right here 34 good to grow juice toppers you guys they're juice Toppers how many of you would have walked right past these? Alright, so here's the deal I Sold these for a best offer of $75 plus shipping. I have one bottle and You can see I've kind of got them categorized by different Cartoons or whatever like you got my little pony in the back. You got Elsa and Anna here PJ mask Paul patrol trolls Bingo and Rolly. Who are they the puppy dog pals? Minnie Mouse in the back. You've got Shopkins over here Toy Story and a pet's life. So here are my options. I could have sold these in Categories I also could have sold these individually. I just recently sold one for seven dollars plus shipping I'm trying to remember was it Kermit the Frog. It was in a recent video, but I sold one for seven so if I would have taken 34 and Multiplied that by seven. I would have made more money selling these individually. So let's look at some solds Let's see if I sold it the right way or if I took the easy road and maybe a reseller bought this I don't know. What do you guys think? How would you have sold it? But I sold all of these for seventy five dollars plus shipping I picked these up at the Goodwill bin. So my cost of goods is probably less than five dollars So I'm thrilled with making seventy five on this and honestly I did not want to take the time to part it out Parting it out is oftentimes going to make you more money, but it was also going to cost you more time So I did have somebody reach out to me and they specifically asked for these two right here in the back They are shopkins and you can see them right there and they offered me twenty dollars for just the shopkins But here's the deal when people offer me things for Lots like this. I have to start over and create a new listing I have to do pictures again and I usually say no Because I don't want the extra work. I've already listed the items. So I said no I can't remember if it was the same buyer that bought all of them or not That would be good information to give you, but I'm not sure So anyway, let's go over to eBay and I just want to show you some of the solds There are 43 in this lot one recommendation I would have right away when I look at this listing is this is really distracting from your item I would have a solid background so you can actually see what the person is selling now If you go into the listing they may have it set up differently. I don't know but it sold for a hundred and fifty nine ninety nine plus shipping I am not going in and confirming any of these sales We are just going to kind of go through here look at some different ones And then we're going to go over to Mercari and we're going to go over to Poshmark Poshmark and Mercari are great platforms I use list perfectly to cross post all my items to those Platforms I have a video down below that shows you how to use list perfectly to cross post if you decide you like it You can get 30% off your first month with referral code Bolo buddies all one word If you want to join Poshmark after watching this you can get ten dollars to shop with my referral link down below And if you want to join Mercari, you can get ten dollars to shop and another twenty dollars to shop When you sell a hundred dollars worth of stuff on the platform So you're going to see why these platforms are good to be on and those referral links are down below Always appreciate it when you guys use those links and it definitely helps you get free money to shop So it looks like these were divided by the minions. It was crossed out so a best offer was accepted you can take this title and Highlight it and go over to Terapeak and put it into Terapeak to see what it actually sold for that's how you find out What the best offer accepted was? Terapeak is great for that same with this one a hundred and ten. There's 75 toppers here and Then let's see 76 toppers 97 99 here are three Toppers hundred dollars best offer was taken so not sure what that went for but there are only three there So some of these are harder to find and Individually can go for more money and we're gonna talk about that shopkins here shortly. So stay tuned for that Here is my listing and I got 75 for 34 of them So when I look at that and I see that this person sold 76 for 97 99 I'm feeling pretty good about my 75 dollars But here's the deal each of these listings has different ones in it and people are looking for different things But these are definitely collectible These are called pods. It looks like So I'm not sure what those are maybe a different brand here are 82 that sold for less than 60 So it looks like the majority of people are lauding them up But let's keep scrolling down and you can see three sold for 35 Again, I did not confirm that payment was made. This is what the bottle looks like all of these sold for 29 99 So I think it's really important to know which ones to look for and which ones go for the most money Here is a set good to grow this is the packaging and this is new old stock 2899 for the three plus shipping I Kind of wanted to get down here into maybe some of the singles like here's a train Thomas the train It says new so they must have just never used it $30 on that one. Here's the cars 3295 so when you get into different categories, these are cocoa melon I have heard that cocoa melon can sometimes be people get hit with burrows on that so be careful with that I usually don't put cocoa melon on eBay because I've seen so many people have issues with it But I don't know if they just had issues because maybe their item wasn't authentic. So just do your research on that I'm not trying to scare you just do your research and You can see when they are in categories like this they have a tendency to sell for more Let's see if we can find some singles here is oh here you go I had these two in my lot So this has been going rolly the puppy dog pals two of them 2499 crossed out So I'm not sure what that sold for probably maybe between 15 and 20 dollars if I had to guess And look at this one how to train your Jack dragon $25 16 bids on one juice topper Would you guys have walked past these or would you have picked them up? Let me know down in the comments and Here is strawberry shortcake 22 crossed out That one's a harder to find when it looks like Just trying to give you some of the ones that go for more iron man spider-man iron spider-man 20 bucks on that one Care Bears 1850 and Let's see what else anything else popping out here is Paul patrol everst did I have everst? I might have had everst 1799 on her So I probably could have made a lot more money parting them out, but that's okay I am good with my $75 sale But really I just want to make this educational for you guys if you ever see these because I feel like it's something you'd probably walk past and Not think twice about most people are not hanging on to these Their kids are probably drinking them and the parents are throwing them in the trash So the collectors are out there looking for them. I'm guessing maybe limited edition. They only do so many at a time Okay, here's one of the Shopkins it sold for 15 best offer. That's one of the ones that was in my thing I think no, I had the cookie. I had the cookie. Hold on. We're gonna talk about the cookie All right, enough of this wonder woman. Is that wonder? No, that's Batgirl No, it's cat woman. She sold for 15 So you can see that, you know, they sell Thomas the train All these different toppers Okay, so here's the good to grow and I put in Shopkins and you can see right here the cookie that I had Somebody hasn't listed for 2604 with free shipping. Will they get that? I have no idea But that is the one that I had in mind and could be the one that the person Was trying to get from me for $20 for the two of them. Not a hundred percent sure All right, we are over on McCurry. So I have searched McCurry high price first So you can see the different lots over here And this may be a great place for you to source if you want to start selling these items Individually because there are big bundles being sold on McCurry This guy guardians of the galaxy sold for 15 This one sold for 14 So just to give you an idea of some of the ones that are selling for more individually 1413 13 Here's is that snow white ten dollars Tails ten dollars. I mean ten dollars. I think is a great buy for I mean a great sell-through price for one of these items eight dollars even so let's say I had 34 of them And I sold each one for ten dollars. That's three hundred and forty dollars and I just sold them for 75 So as a reseller Parting them out may be the better choice, but it may take you longer So let's go to items for sale It looks like good to grow blues clues this guy people have him priced really high. I don't know I don't see any solds Confirming that this is a bolo, but it looks like people are trying to sell it high So here are some actives you could get all of these Paul patrol for 1520 over on McCurry You could definitely part those out probably gonna be long tail probably gonna take a while to sell Mine sold fast $75 for 34 of them and they sold fast So kind of looking for some big bundles here not seeing a whole lot a lot of people over on McCurry are putting them individually and around the $8 range plus shipping So if that gives you an idea if you want to start selling these I would definitely get your items on all three platforms All right, here we are over on Poshmark $35 for the SpongeBob this guy is from Hello Kitty. He sold for $27 on Poshmark $22 for the Paul patrols Here are some more that went for 15 15 again if you want to become a seller that sells these individually Poshmark might be a good place to actually source let's go to All I'd or available items and Let's search instead of high to low. Let's search low to high and You can get all four of these for four bucks now. You do have higher shipping on Poshmark So I'm gonna say you're gonna want a bundle, but lookie here you guys blues clues Remember right here this guy right is this not the same guy? that is over here being sold on Mercari Hold on. Let me find it right here. That's the same one right $75 $40 That's what they have it listed for well, you can get it on Poshmark for five So are these people crazy or are they just wishful thinking?  I don't know. I haven't done enough enough research, but it's something that you can definitely look into But it looks like eight dollars is you know kind of the going rate for a lot of these Over here on Poshmark as well. So these are the ones that are We're searching. Let's see. What do we search? We searched lowest first. These are available. Let's search high to low High to low so 49 dollars for 36 of them I sold 34 of them for 75 again It's gonna vary by which items you have available.  You got to get to know the category I didn't want to do that. I Just wanted to list it sell it quick and That's what I did. So 75 dollars is what I got for that. My cost of goods was less than five dollars I'm really happy with that. Could I have listed them individually for more? Yeah, I do think so. I think I could have made a lot more money, but I may have been sitting on those items for over a year Eventually what they have sold? Yes, I am a list it and forget it kind of girl You guys know that but in this scenario with everything else that's going on with selling on what not and Trying to get things listed on eBay and doing YouTube The best choice for me was to sell them as a lot and potentially another reseller bought those and I'm good with that So that was the choice I made in this situation if you guys are not following me on what not I would love for you guys to check me out over there. There is a referral link down below You can get $15 to shop with that and I sell things auction style over there. I list everything I Sell everything starting at $5 or less. So come on over It's a great place to have fun hang out in the chat even if you don't want to buy But if you come over you might find something even worthy of buying for a gift for somebody or even reselling I've got a lot of people that are resellers that are sourcing from me because I'm not looking these items up a lot of times. I'm doing untanglings. I haven't looked through this stuff and I'm just selling as I go and What not is totally different from eBay you guys hear me say list it forget it list it high I'm not doing that on what not I'm starting my items low and it's about selling in Quantity I can go on and sell a hundred items in one night on what not so it's selling more For less would I make more selling those items on eBay and other platforms? Absolutely, but I'm trying to diversify Get on different platforms trying out different things and I really love what not because I get to hang out with you guys so I hope you will join me over there and I'm Bola buddies all one word if you're already on what not But if you're not use that link down below get your $15 to shop if you go to the live shows I Am leaving up some of my live shows so you can kind of see how what not works What things are selling for some things go really cheap and I'm like oh Man and some things go for more than I expect it really just depends who your buyers are are they buying for personal use? Are they buying for resale? It just depends you never know with what not it's always a What's gonna happen tonight? So go over and bookmark my upcoming shows I hope to see you there if you want to sell on what not I have a referral link down below if you click on that It will tell what not that I referred you and you may be more likely to get accepted quicker Just make sure you give them all the information that they ask for they want to know you have inventory All right, you guys thanks for being here and thanks for watching


Listen, for now, put your head down and just work. Ignore the noise, ignore the distractions, prove to yourself that you can really do it, and then go show the rest of the world that you did. With this mindset, you can achieve anything. In 2024, it's easier than ever to become financially independent without needing business experience, college degrees, or even large capital. All you have to do is to start a dropshipping store by using the latest AI-powered tools like AutoDS. For just a dollar, you can launch your Shopify store in two minutes, find best-selling products, and even automate your orders and shipping. Focus on this for the next three months, and you will be a five-figure entrepreneur before you know it. Try it, and thank me later.


So yesterday I announced the six-month Linux challenge and basically the idea behind this is to Choose a distribution that you're not currently on and use it for six months now Obviously, this is more of a challenge if you choose a distribution that you've never used before and that's what I've ended up doing now yesterday, I asked people to choose between two different distros Redcore Linux, which is based on gentoo and Micro us which is based on open Suza one was an immutable distro, which is the micro s and the other one is well It's basically gentoo so obviously Redcore one I had really no doubts But it was actually closer than what I thought it was when I counted this morning the tally was fifty six to forty three in Redcore's favor. There were a lot of people who wanted to see micro s so if you were one of those people and Obviously your choice didn't win fret not eventually micro s will show up on this channel I'll do a two-day spend in it or something like that and we'll see how it goes But that'll be later on right now. I'm focused on Redcore which I have installed so you guys can actually see my Redcore install Right here. You can see my fancy Neofetch right there says Redcore Linux hardened rolling x86 64 right there for you all to see and I have to say First of all the installation was very very easy. It just used it just uses calamaris If you've ever used a calamaris installer, you've used them all and this was no different It worked really well when I installed Redcore my look on my laptop Calamaris did crash Right towards the end of the installation Just restarting it and doing it over again fix the problem when I installed that on my main machine Which is what you're looking at right now. I had no issues whatsoever So the installation was both easy and very quick so if you are interested in using gen 2 but are scared of the installation Redcore may be the solution for you and We'll talk a little bit more about my thoughts on that here in a minute, but first let me talk about how the setup goes So basically once you've installed it you're presented with a standard or fairly standard Plasma desktop now. I have been in the middle of an Xfce challenge for the last three and a half four weeks or so and that's being kind of put on pause right now because I am in plasma and Installing a GTK based desktop environment on top of this would be a kind of a pain in the rear end So right now I'm using plasma but the point is is that when you're when you boot into Redcore for the first time you're presented with a plasma desktop and it's fairly minimal in terms of stuff that's installed and It just looks and feels just like plasma Honestly, you wouldn't know you were using gen 2 until you started to use the package manager now package management is where Redcore is weird. Okay. It's just a little weird So it does come with a merge just like you'd expect because this is gen 2 and it can be used exactly like a merge can in Regular vanilla gen 2 so you can do something like do do do as do as emerge and then this is one that I used earlier because the Standard package manager wouldn't work. So I wanted to install x-clip. That's how you would install something using emerge in gen 2 It's very very simple. It does take a little bit of a time sometimes depending on what you're actually Installing because it's going to compile it but if you are familiar with gen 2 and you know how to use emerge in Portage and everything like that you can use that in Redcore just as you always would it is not how However, the package manager that they suggest that you use by default the one that they want you to use is called Sisyphus so it's s s i s y p h u s now I Am a history major and I knew I knew that name from somewhere now Sisyphus was the guy punished by Zeus to roll the the boulder up the hill over and over again for eternity and You know, it's a very weird package manager name. I'm just gonna put that out there for two reasons first of all The idea behind the whole Sisyphus legend is that it's kind of a difficult task to push a boulder up a mountain, right? Obviously, there's more to it than just that but it's a it's a weird thing to call your package manager when that's supposed to be So difficult right also if you're dyslexic like I am you guys noticed I always mistype things all the time That's a symptom of my dyslexia and you know fat fingers, but Sisyphus is really hard for me to type I mistype that thing all the time and I've since created an alias, which is you know going to save me forever But it is very hard to type for me. So just it's it's not my favorite Let me just put it that way anyways The point of Sisyphus is that it's supposed to present you the ability to install things from the gentoo Repositories with a more apt like syntax So you could do something like this you do your do as or pseudo whichever you want to use either one of those by the way Are installed by defaults you have to install one of them in order to you to give your your user access to root I could get I could not get pseudo to install So I ended up with do as it's fine So you getting you use you access route then your Sisyphus then install and then the name of the package You could also do something similar to this With uninstall now it's a little bit different I don't know why they chose uninstall instead of remove because if they're trying to go with quote-unquote apt like Remove would have been the word there to use because that's what apt uses but uninstall works the same thing it just un-emerges everything and Basically, that's what Sisyphus is. It's a front-end for emerge. That's really all it does and Obviously it presents some problems. So first of all it's always going to prefer looking for binary packages and That's not a problem. It's probably a good way to go but if you've ever used gentoo before you know that not everything in the gentoo repositories is offered as a binary and That means that every once in a while you're gonna come across something that is not a binary that you're gonna want to install with Sisyphus and It's just not going to work now There is a flag that you can use dash dash e-build like so if you can spell And that will actually compile The package that you're trying to install even if there is a binary you can use e-build to compile it if you want to But if you could get into a spot where Sisyphus will not install the binary because it doesn't exist using dash dash e-build will actually install it in most cases There have been a couple situations where Sisyphus just would not install anything completely and that has to do with git I could not get git to install with Sisyphus. I had to use emerge and the same thing with x-clip I had to use merge to install x-clip why that is i'm not sure So Sisyphus for me has been very Okay, it's it's kind of a package manager. I don't like the name at all and it does hunt for binaries And I you I would prefer to use as many binaries as possible just to save time I don't want to compile everything So it's been like I said it's been hit or miss. I don't mind using emerge So I'm glad that that's a backup that I can use and probably over time What you're probably meant to do is use emerge more and more And learn more about emerge and portage and stuff like that and leave sisyphus behind So that's part of the package management story The other part of it is the regular gen 2 stuff now when I say regular gen 2 stuff What I really mean is stuff having to do with portage now Portage is the package manager for gen 2, right? It goes in concert with emerge and I'm not explaining this right because I'm not a gen 2 guy So all the you gen 2 guys out there.  So if we go into this directory here and do an ls You'll see all of these Little files and most of these and probably all of them actually are Just one line per file and what these do is set use tags or use flags. I should say Use flags for every single Application that has been downloaded with either sisyphus or emerge now. Obviously the ones for sisyphus Are ones that it's done automatically. So like anything that has the package name actually or the location of the Application and where it's downloading it from the repository like app or dev or whatever Those ones are the ones that have been automatically created by sisyphus the ones that are like the The duas one and the mpv one those are ones that I've created and it doesn't really matter what you call these packages Because you're it's actually just going to read it from the the file But the point is is that you create your use flags here And this is the second part of the whole gen 2 Thing this is use flags really are the reason why you'd want to use gen 2 They're very very very powerful We're also mightily confusing if you've never used them before I have used them before and i'm still mightily confused about 75 to 85 percent of the times. So The basic idea is that the use flags tell emerge in portage what to Compile the application with so certain features can be put into the applications or left out of the application So for example, let's just say you wanted to compile audacity And you wanted to give it support for pipe wire, but not pulse audio or vice versa You could do that with use flags by adding the pulse audio flag and then minus pipe wire or whatever And it would then ensure that whatever one had minus in front of it would not That feature would not be built in but the other one would be that's very very not Well explained, but let's just go ahead and go into This one here and you can kind of see what a use flag looks like first it lists the package So the first part of this is the repository that it's being downloaded from or the category that it's being downloaded from I should say then the name of the package and then it just lists all of the Use flags that you want to be built into the application as you compile it Now probably about 50% of these I don't actually need I just listed them all because I didn't know any better And a lot of times that's pretty dangerous to do It does try to tell you which ones that you need to use so Pay attention to the gentoo wiki and all of the packages that it tells you to install and how to install them So do a better job than I did But the point is is that all of these features would then be built into mpv when it was compiled And if I wanted to have one that was not compiled into it And I want to make sure that it was never compiled into it I would just add a minus in front of it and then that would ensure That say jack was never going to be compiled into The package now that's a very Pedestrian amateur way of explaining use tags or use flag that can't even call them the right thing So seriously Talking is is not my forte That's like I said, that's a very amateur way of explaining use flags I'm sure that there's a more technical and correct way of explaining them So I apologize for not doing a very good job, but hopefully you get kind of the idea But use flags are The most Important thing about gentoo at least I think so and because that's true It's also the most important thing about red core because red core at its heart is gentoo and that's where I kind of want to Leave off because there's not much more for me to say in terms of what this is because it is gentoo It uses the non-stable branch of gentoo once you have it installed it acts and behaves like gentoo outside of The sisyphus thing and you could ignore that Completely if you wanted to you'd never have to use that the red core package manager If you don't want to you could just use emerge all you want And it would just perform and react exactly like gentoo where red core differs Is with installation so That's where I have a bone to pick with red core because Well, I'm not really a bone to pick but mostly just a a statement Red core is not gentoo Okay, despite everything that I just said about it behaving Exactly like gentoo once you get it installed It's not gentoo because the point of gentoo the Thing that you do with gentoo is install it, right? That's the challenge of gentoo the actual usage of gentoo has never been the most difficult thing once you have it installed you've reached and overcome the mountain of difficulty That is gentoo you bypass all that with red core. You use a calamari's installer It's meant to be a very easy to install version of gentoo and it succeeds in that so far It has been exceptionally stable now granted It's only been a day so I can't tell you that it's always going to be stable But I had 917 or 971 or 72 or something like that updates when I first installed it it installed all of them I did a reboot it rebooted fine Usually you are going to be able to tell if your distribution is going to fail right after install If that initial update fails or causes problems In my case it didn't it worked just fine So it has been very stable over the course of the first day. So kudos to that And it's just been a very interesting learning experience because the Really all you have to learn about gentoo if you're going to use red core is the package manager So if you can learn about emerge And portage and then be happy with the places where you have to kind of insert sycophants to Make up for your lack of knowledge those three things would get you through right But that is only part of the gentoo experience the biggest part of the gentoo experience is installation And you bypass all that with red core now. There's nothing wrong with that. I think that it's great I think it's if you've been in the linux community for a while You'll remember the fervor of arch based distros right when arch was really truly considered hard to install We just had a explosion of arch based distros that all claimed to be the easy way to install arch We you know, we had manjaro and arco endeavor and Antrigos and things like this right you had all these distributions that claim to be arched linux But just easier to install than arch ever was right That's basically what red core is and there's nothing wrong with that You know scenario it works just fine And i'm going to have a good time using it over the next six months But if you are here To learn about gentoo, you're only going to get half the story You're not going to get the installation part of it. And if that doesn't bother you, that's fine If that's not what you're here for you know, whatever But if you are if you're going to think that you're going to miss out I would say try gentoo first and Experience the failure that is your first attempt at installing gentoo and then maybe move on to red core So my initial impressions of red core so far Are that is that it's really good actually the only Really bad thing that I would say out of the box about red core is that it doesn't include sudo or dues And it really should if you're going to be easy to use version of gentoo It should at least include a way to get to root or at least allow your user to get to root And it doesn't so you have to know What to do in order to get that and that means you have to go into the root You know I have to sign into the root account Install dues or install sudo and then you can move on but if you don't know to do that It can be very confusing So that's probably the only thing that I'd say is like the negative part about about this Everything else has been very very good so far I've only encountered one thing that I haven't been able to get installed and that was sudo And that's because you have to unmask certain packages And if you're confused as to what that means, don't worry. I'm confused too I don't have any clue why they continue why they mask things. I'm sure there's a technological and very Sound reasoning behind why they do so. I just don't know what that is And I don't know how to fix it even though I went to the gentoo wiki It explained how to fix it. I still don't get it And I don't know Something something else to learn. So those are my initial thoughts on red core. This is day one I'll be going into august now. First of all Don't worry about me making constant red core videos You won't have to worry about another red core video for quite a while probably a month in Maybe I'll do it a month and then I'll do maybe midway or something like that We'll make three or four videos over the course of the next six months nothing every single day I'm not going to spam the channel with red core videos. So don't worry about that If there are things about red core that you want to know, let me know in the comment section below I'd love to hear from you. You can follow me on mastodon or odyssey those links will be in the video description You can support me on patreon at patreon.com slash the linux cast Thanks to everybody who does support me on patreon on youtube because we're all absolutely amazing We got two of the channels that's not be anywhere near where it is right now So thank you so very very much for your support And I don't know why I was talking so very fast there. I don't know why it's okay. I um I seem to get to this point of the video and just forget what I'm gonna say all the time So thanks everybody for your support. Thanks everybody for watching. I'll see you next time