Hey everyone, just going to start up the screen share. So, I hope everyone can see this light. Just a quick note before we start, you can resize the video and the screen share because the screen share should have taken over like most of the space right now. So, you can watch the presentation while asking questions in the Q&A box. Right, so, my name is Christian. I work mainly on the upstream kernel. I'm one of the maintainers of Lexi and LexiFS, which is like sort of a whole container tool suite. And we've been involved in containers, in kernel development and in user space for quite a long time. And we've been working on making unprivileged containers more usable. So, basically having unprivileged containers cover use cases that traditionally would only be solvable by using privileged containers. And I want to talk about a specific part of the work that we've done in this area, which is about one to two years of work, I guess. And it's not just my work, but it involves a bunch of people. So, it builds on stuff we first implemented upstream in the kernel, which takes a while, obviously. And then we also had to make the necessary user space changes. So, that's why usually I'd say for a feature to actually land to be fully usable takes about one to two years. And this one specifically concerned with something that is called syscall interception. And I've talked briefly about this before, talked about it in another session a little bit today. I did with Stefan, but this is sort of a more in-depth view. So, here's the outline I thought might be useful. First, we're going to quickly recap what unprivileged containers are, because it's just always a good idea to be clear on what we're talking about. And then I need to do a brief recap of syscalls, but not in any depth, just like it's not, I'm not going to go into any architecture types, differences and so on. I'm just going to briefly mention all these works. And then how a second ties into that picture and what syscall interception is and how we can use second for this and how we can do syscall in relation. And then hopefully we have some time for demos, but I'm prone to running over so. But I promise to try my best. So, quick recap, I'm not going to go into a lot of detail, because I guess most people by now know what containers are. What are containers? The famous dictum that a bunch of people are using user space fiction, it's a user space concept. And your opinion on what a container are is actually very much opinion-based. It's not something that you can clearly define as on Linux, we don't really have a native container concept. Sort of more kind of mishmash of various kernel interfaces and it kind of depends what kind of interfaces you think are necessary. I guess the one that most people associate with containers are obviously all the different types of namespaces that we have. But I guess what most people could potentially agree upon is agree on is that containers have to do with some sort of isolation mechanism, right? They provide you with some isolation from the rest of the system. You can just create an arbitrary process and call it a container. Well, technically you could, but that wouldn't be much point. And the biggest distinction here for system isolation from the rest of the system not the biggest distinction, the most important aspect, I guess, is the distinction between privileged containers and unprivileged containers, right? So what does this mean? Well, privileged containers, it means if you root inside of the container you also root on the host in the sense that if you escape the container you will have root privilege on the host. So UID0 inside of the container and UID0 outside of the container have the exact same meaning, which, as I said, is going to be a problem if you escape a container. And usually we have been strong advocates for a long time. If you can't avoid using privileged containers for your workload then avoid them because in some sense they're a huge security liability. And unprivileged containers, on the other hand, are containers where UID0 inside of the container and UID0 outside of the container are different. So it seems to you like your UID0 is inside of your container. So if you check your UID inside of the container it tells you it's 0 but on the host it's running as a completely different UID, a completely unprivileged UID. And these containers are driven or enabled by a specific type of namespace in the kernel, which I've talked about quite a bit before and also in the other talk today, which is the username space. This is what drives unprivileged containers. So just a quick recap. Basically the username space in general is concerned with isolating the privileged concept on a standard Linux system. So that involves, first of all, obviously UIDs and GIDs, but it also involves, for example, capabilities. Specifically here about UIDs and GIDs.  So any program will usually behave fine. But if you look at it from the outside you see that the same process, if you're inspected, will appear to be run as UID100000 or UID100001 and how does this even work? Well, you can basically specify mapping. So you take a given range, you say, here I have a range of UIDs and GIDs that a container needs to have in order for it to run a whole Linux system. And I'm going to carve out a chunk of IDs on the host starting from, for example, ID 100000. And then I say up to 200000 this range is dedicated to the container. And then I take the UIDs and GIDs that the container is running with. So 0, 1, 2, 3, 4, 5, 6, 7. And then I map them to 100000 on the host. So 0 maps to 100000, 1 maps to 100000 and 1 and so on. And it's a very flexible concept. You can have holes in your maps, meaning you can say that containers should only map UID0 up to UID50, then leave a hole from UID51 to UID999, and then map everything up from 1000 up to whatever, 100000 something. So this is a pretty powerful security mechanism, especially when you also consider that capabilities that we have on Linux are also per username space. I've touched on this in the other talk briefly before as well. So meaning if you're asking the question, do I have a given capability in the username space? If I have a capability, I'm actually asking, do I have that capability in the relevant username space? I'm not asking globally if I have that capability. Although I should mention this caveat, a bunch of capabilities or for operations that the kernel deems would affect the security of the whole system, it would always check, do you have that capability in the initial username space? If you do, then you can perform that operation and if you don't, then you cannot. So capabilities are sort of in this weird half namespace state. Let's put it like this. So they're charged against your username space or relevant username space, but sometimes the global username space is relevant. But since I mentioned this username space, spaces are a big security mechanism, right? They need to come with a lot of limitations. So as I said before, any operation that could potentially affect the security of the whole system needs to ask for permissions and or credentials in the initial username space. What are the limitations? Well, there are quite a lot of them and initially I was like, I should do a talk about how we can make containers or make containers more useful on privileged containers more useful and then show all of the restrictions that we lifted over time or worked around over time, that just would take too long. So major restrictions are that we care about for this talk essentially is we can't mount block devices. So even if you, let's say, you buy a heart in an external hard disk and you format it and you're like, if this disk goes to hell, I don't care and you hand it into the container, the container still wouldn't be able to mount it because the way file system parsing works or file systems in Linux are not necessarily, not all file systems are able to guarantee that they're stable or behave well, safely, I should say, in the face of a malicious image. So the file system parser could, for example, cause a kernel loops. So mounting block devices is not something that is possible. That's not to say some file systems can obviously be mounted in containers. Usually it's uninteresting file systems, right? So TempFS. Well, PROC is interesting, but PROC, Sys and TempFS and a few others, BinderFS, but X4, for example, or XFS and so on, and NFS, they all, you can't mount them inside of containers. That might change at some point in the far, far away future, but maybe not. You also cannot create device nodes. This is, I think, an example I bring up most of the time is if you can create random device nodes, right? You can take over the whole system. I mean, you could create DefMem or DefKmem and then just write bytes into random kernel memory, or think about any other attack that you could do by just creating device nodes. Create a device node for a new, what, you know, loop device or something. So in principle, and I mentioned this before, you can perform any operation that requires privilege on the host. But obviously, sometimes we know that the operation that requires privilege would be safe. So the block device example, for example, so if a user decides that, if the system administrator decides, it's fine if a user wants to mount, if I expose a device node to a container, and it's fine if the user mounts this. I'm fine with the user mounting this. Then there's not necessarily a reason why you should block this. Or if something inside of the container creates harmless device nodes, right? Such as DefZero, DefNull or DefConsole. These are actually things we kind of work around anyway. A container, a standard system needs DefZero, DefNull, DefRandom, DefTTY, DefConsole in order to function. And we provide those device nodes right now, usually for unprivileged containers by bind mounting them in from the host. But if somebody from inside the container were to call MakeNOT for DefConsole, there's not really any reason why this shouldn't succeed. For example, you start the init system and it tries to create a bunch of harmless device nodes that should all be fine. So the question is, can we somewhat... Well, I guess elegantly is a strong word, but can we somewhat get around these restrictions? And yes, we can, but we realized as a while back this would involve potentially a bunch of kernel changes. We actually would need a new sort of concept in a specific part of the kernel for this to work in a general manner, such that we can potentially enable even more operations than just caring about mounting block devices, or mounting or creating device nodes. So this is where we need to briefly talk about syscalls, because right how do you mount something? Well, you call them on syscall. How do you create a device node? Well, you call the makenode or makenode at syscall. Actually, syscalls really quickly. Think of the kernel as essentially a request handler, I guess. And syscalls are the main requests it recognizes. So I mean, there are other ways to request something from the kernel, but what usually happens is users base wants an operation to perform that only the kernel can perform and so it needs to make a request to the kernel and then the kernel will look at this request and decide, okay, this is safe to do. You have sufficient privilege to do this operation, or it will say no. So I promise I won't go into too much detail because obviously syscalls seem like a very easy concept and then you remember that there are different architectures and that there are syscall conventions per architecture and then you look at libc code to look at how it is all abstracted away and then you look into the entry code of the kernel and then you go home and cry, joking. But here's very briefly how this sort of looks like. You see this upper line, the black line right here. Both part is supposed to be user space and the part below is supposed to be kernel space and I know I cannot do graphics. So what usually happens is you have a process that process wants the kernel to do something for it. So it does a system call. Then a transition, a magic transition into kernel space happens and that's what I refer to as syscall convention of that specific architecture and then all architectures have a so-called syscall table which is really just a giant table or array that contains all of the requests or syscalls that this architecture actually understands. And part of the syscall convention or of most syscall conventions, all syscall conventions is that you place a syscall number in a specific register so this syscall number is used as an index into the syscall table and if that request is understood, so it's a valid syscall and the kernel will perform the syscall and if it's invalid then the kernel will return enosys which is kernel speak for, I don't know what you want from me. Performing the syscall obviously involves another syscall convention, how architectures return error codes and success codes and so on. It's really weird on some architectures. Spark is an example. And then returning the value that you're, some sort of value that you're interested in if the syscall returns a value, pointers, whatever. And that's the general boring case, right? So, but actually, I mean, it happens a lot more obviously as I said before, but one of the things that happens in the syscall path is that at some point something is hit which is called SECOM, which I've mentioned before in previous talks too in which some people also will know about, right? So, you do a request to the kernel as well. And actually, before the system call number is looked up in the syscall table and that is the same for all architectures that support SECOM, SECOM is hit. So, think about this, right? Before you even answer the question whether or not this is a valid request that the kernel understands, you run through something that is called SECOM and that somehow has access to all of the details of the syscall. So, syscall number and the syscall arguments and so on. And then SECOM can apparently make some sort of decision so it can, for example, say if you look at this green path, it can decide, for example, to skip the syscall and then return an error code or success or whatever. Or it can say, okay, continue and then you enter the normal syscall path. But interestingly, the position where it sits is pretty interesting actually also for what we're trying to achieve. Maybe I have enough time to touch on this briefly. So, what SECOM? SECOM is short for secure computing and it allows you to restrict syscalls that a task is allowed to make. So, it allows for the implementation of deny and allow lists, right? So, you can, for example, you can say a task is only allowed to make a certain subset of syscalls or the other way around. Only a certain set of syscalls is blocked. And this is obviously interesting for cases where you need to... For example, your process doesn't really need access to all of the syscalls that you have available. It's obviously interesting for when you have a very... when you have a process that needs to run with privilege but you still need to restrict it. You can use it for that. But it's used in all container runtimes and it has a first-class security mechanism status in contrast to, for example, LSMs which are part of the container world, but they're not as widely used as SECOM simply because SECOM is not... I don't even know if you can turn it off in the kernel's config option anymore, SECOM is basically available on nearly all architectures and it has good user space support. There's a library for it and so on. So it's used everywhere from browsers to data centers as I've written here. And the interesting... Also, you can write a bunch of more complex SECOM programs using BPF and this is actually not the BPF that most people nowadays think about. When people hear BPF nowadays, it's EBPF, extended BPF. And what I'm talking about is CBPF, classic BPF which is a term that was coined after EBPF got introduced. So CBPF used to be just BPF but think of it as a dialect of EBPF or a subset of BPF. It's not as expressive and it doesn't allow you to do as many of the fancy things that EBPF allows you to do. But you can write SECOM filters in it and the cool thing is that you can then specify... You can filter on a specific argument, so this is called and values for those arguments that with a restriction, namely that for SECOM any pointer argument is opaque. That's a limitation of CBPF, so it doesn't allow you to dereference pointers. So you can only filter on arguments that are passed in registered, completely in registers. For example, you could filter on flags argument, usually integers or unsigned long or whatever. So you could filter on the mount flags argument of the mount syscall or on the flags argument in the open syscall. So you can say, for example, I don't want to intercept all mount syscalls. It doesn't make any sense. I'm not interested in remount syscalls because if somebody has apparently already mounted it, why do I care about MS? Remount, and so you filter out all mount syscalls that have the MS remount flag passed. Usually what happens is when you have a SECOM filter that it causes the syscall to be skipped and an error code to be reported back to user space. So in the case of restricting the syscall interface of a given task, usually you would report back ePerm or enosys for an operation that you deem unsafe or unnecessary for this container to have. But the thing is, you start up a container. It loads a SECOM filter, and that SECOM filter is to some extent not dynamic. You load that filter once, and then the decision if a syscall with a given set of arguments is hit. So the SECOM filter triggers on a given syscall, then it will always trigger on that syscall. So you cannot make a dynamic decision on a case-by-case decision whether or not you want to allow a given syscall or not. So you cannot outsource the decision to user space. But it would be kind of neat if we could. So if we look at this part where SECOM is hit before entering syscall table, what about if we could intercept a system call and then somehow involve another process that could then make the decision instead of making the decision inside of the kernel whether or not successful. This is obviously interesting for the case where I said before, a container manager will often know policy of the administrator or because it's supervising the container and knows its privilege level and so on, whether or not A, a given operation will succeed and B, whether or not that operation is safe. More than the kernel. The kernel needs to have a policy for every user of that interface, right? And it can only say, oh, okay, this is safe for everyone or this is unsafe for some and therefore it is unsafe. It must be unsafe for everyone. And this is where we came up with intercepting system calls. Well, I should probably say came up with it. I mean, ideas to do something like this have probably circled around for quite a bit and also it's not that SECOM itself is not something that other operating systems have never thought about. Some version of this in some form exists in other operating systems as well. There is a related concept, although a bit different in FreeBSD, for example, Pledge, where you're restricted by classes of system calls. Essentially, you could emulate parts of this with SECOM. So yeah, but intercepting system calls and this is kind of what SECOM already does if we go two slides back and I hope there's not too much slack here. This is called Interception in this diagram, right? The system is sort of intercepted by SECOM before it actually proceeds in its normal path. So what we wanted to do is outsource the decision about whether a system call is allowed to a user space process, specifically in this example I'm using to a container manager. And what better to use than fighter scripters? Joke it, but this is actually what was used to implement this feature. So a task needs to load its own SECOM filter. You cannot load a SECOM filter for another task. But since we are the container manager and when we spawn containers, we are in control of the child process before it execs. So the child process in my example being the container, you fork, you set up, synchronize between parent and child, you set up everything that you want to set up, and then at the end you exec your init binary. At some point it will load its SECOM filter. So since we're in control and we need to cooperate anyway when we start the container, the child process or future container can retrieve a file descriptor for its SECOM filter, which is dubbed a SECOM notified file descriptor, the SECOM notified. And that's a file descriptor for the SECOM filter. What does this mean? Well, I guess if you have encountered this feature or if you think about it, it's pretty obvious. It behaves like a standard file descriptor. So for example it can be polled and you know the polling concept is usually familiar from when you get notified about another socket connection and then your call accept on it and so on. You get notified when file descriptor becomes readable or writable and so on. And this is related. This time you get notified as well so you can put it in an ePoll loop or into any notification mechanism that Linux provides. And then when the task of interest performs a syscall that the filter triggers on or the filter registered for, you get a notification on the file descriptor so you'll wake up. And that indicates to the container manager in this example, oh, okay, someone made a syscall that I'm supposed to do something about or that I'm interested in. And you can then use an iOctol to read SECOM information from that SECOM notify FD that usually involves I'm glossing over details because it would take way too long. It usually involves obviously the syscall number, the architecture, and the syscall arguments. And then the process can go on and inspect the container manager can go on and inspect the syscall arguments. And then make a decision based on what the syscall arguments are. So it can also chase pointers actually because PROC exposes the memory of a process in PROC PID mem. So you can also use the pointer-based syscall arguments to take as an offset into PROC PID mem, into the process memory to chase the pointer arguments and so on. There is a race condition involved, but in this case, and I will briefly touch on this, it's actually not that bad. And so the task can even read the memory of a syscall. And then when it is inspected the arguments and it's determined, okay, this is a harmless syscall, I don't really care if the container performs it if the container wants to do this, but I know it would fail. I would potentially do something about it and then I can instruct the kernel to report back whether or not I succeeded with this operation. And this is where emulating syscalls comes into play. So we have the pieces of this interface now. So we register a second filter. The task loads a second filter. That second filter has a specific property which states give me back a filerscripter for that filter. The container does it. The hands off the filerscripter to a container manager. The container manager listens for syscall events on that filerscripter. And then inspects the syscall arguments and then given a policy that a user decided is fine, it can start to emulate the syscall in user space. Now, it's usually not necessarily the most performant thing to do. It's also, one must also make very sure that the dude is as securely as possible, obviously. But in general, it's better than nothing, right? Instead of having to fail a mount operation, for example, having to fail a make-not operation, we can actually emulate that operation in user space.  I mentioned that second doesn't like to chase pointers or the reference pointers. So think about this. If you register, if you write a second filter and that second filter triggers on more system calls than you would want it to and it catches system calls that would succeed, then it means it also needs to emulate them because there wasn't a mechanism to tell the second notifier to continue a syscall. So if you mount a tempFS inside of the container, that would succeed anyway, so why emulate it? But given that you can't do reference pointers, it's pretty difficult to special case tempFS mounts, for example. So I need to intercept these mounts as well and potentially emulate them, which is obviously terrible. The same for open, which is also you can filter on the path argument. So any system call that is accidentally accepted needs to be emulated as well. Well, we've gotten around these restrictions by making it possible to continue syscalls from the second notifier right now, but that needs to come with a big caveat. You need to be very careful. You cannot use this to implement a security mechanism because there's a race condition. If you perform a syscall, you inspect the syscall arguments, and in between you inspecting those syscall arguments and telling the kernel to proceed an attacker could rewrite your syscall arguments, and then you could be tricked into performing. The kernel could be tricked into you could be tricked into letting the kernel perform a potentially unsafe operation. So what this means is no security policies can be implemented with the second notifier, especially not with continuing syscalls, and you need to be very sure that any operation that you're tricked into letting pass, the kernel will already block anyway, and that's actually the case for unprivileged containers, right? We're using this to elevate privileges where we think it's safe, and if somebody... So we inspect the arguments once, we verify that it's still the same task, and then we make an informed decision on whether or not it actually wanted to... We find with performing that operation, if somebody rewrites the syscall arguments after this, we don't care because we don't perform this syscall anyway, we emulate it, and if we inspect the syscall arguments and we're like, ah, yeah, I just continue this, let it pass to the kernel, and somebody rewrites syscall arguments, they will rewrite it to something dangerous, but the kernel will block all make not syscalls anyway, so no harm done. And work that is currently ongoing is making it possible to retrieve phytoscripters from a different task. There is a specific syscall targeted at this. This allows to bridge socket connections, so you could retrieve a socket phytoscripter connected for the container, and so rewrite socket connections and so on, and injecting phytoscripters, so you can, for example, when you call open, you can inject the phytoscripter for the open syscall. This is important for, for example, for Chrome, which wants to replace its current way of doing sandboxing with the second notify. So there's a bunch of stuff here, and oops, I've sped up a little, so I could actually still do the demo. I should have a little bit of time left, so I'm going to briefly stop the screen share and share a different screen. Hopefully you can all see this. Let me make it, it should be a little better. So this is Lexi running here. You might have heard about this. This is our container manager, which we've done a long time ago nowadays. And we're just going to launch a standard container, fairly quick. And going into this container. And now let's say, nothing fancy in here, let's say I wanted to create a device node. Let's look at the Dev Console. Dev Console, as you can see right here, is 5.1. That's the major and minor number. So if I wanted to create Dev Console, I needed to do make not my console character device for C, 5, major, 1, minor. I hope that's the right order. And then, huh. Well actually, why would it matter if we created this? Because we have Dev Console in Dev anyway. You can see right here. So you could actually allow this. How do we allow this? Well, we use this calling deception. So we have actually config set for security.syscalls.intercept. Make not true. Then we need to restart because this is a change of the second filter and you cannot live update second filters. So, okay, let me see if I lied. Same exercise. Make not my console. That worked. Cool. This actually created a character device note for us. So, let's look at this. A little bit here. Not sure if I have time to show mount, but if I call the make not syscall, you see look in the upper half of this demo. Handling make not syscall. That means the container manager in this case, Lexity, has been notified that the container has made a syscall with syscall number 133. Here is the architecture type. It's the second notify ID, which is like a unique token that makes sure that we are actually talking, actually the task we received at syscall from is still alive. And then the syscall arguments, which in this case was the device number, the pit of the process, the task that perform syscall, and the path that was used. And obviously this doesn't unblock any... Obviously this won't work, but you can't create other device notes, right? You can't suddenly... My block, I don't know, B, 4, 1...  Obviously you get a device not allowed. So in a similar way, we intercept the mounts syscall. I mean, I have a couple of minutes for questions and I will go answer them, but I think actually doing the mount interception stuff is kind of cool. So let's say mount true. And I'm also saying that I want to allow X... ButterFS file systems. Now I'm adding a ButterFS device. Let's see config, device, add, f4, blah, unix, block, source, this stuff, let's see, 10 path, my block. I've just added a device note to the container. We allow this to do this dynamically. And then def... Oops, I called it my block, right? So right now, I shouldn't be able... Right now I shouldn't be able to mount this file system because I haven't restarted the container yet, so the second profile doesn't apply, but I just want to show that this doesn't work right now. Permission denied, great. That's how it should be. You should be able to mount random block devices. So let's see, restart at 4. Let's force it so it does it a bit quicker. Oh, and then you can already see up here, handling mounts is called. That, by the way, all of the mounts is, of course, that we accidentally intercepted whenever, because we can't filter on pointer arguments, but we just let them continue. So nothing changes for the functionality of the container. This is a butterf file system. So mount my block, I said, right? Let's see. Ah, well, it worked. So system call got intercepted. You see it right here. And yeah, we mounted the butterf file system.  I mounted the next piece of butterf files back end. It stores all of the container into the container, but just as an illustration. But yeah, so we do this for the mount syscall and for the make not syscall, and we do it for one specific instance of the ZX address syscall. But this is a mechanism that would potentially allow you to do this for a range of syscalls. Just need to make sure that you're airing on the side of safety. And yeah. I guess that's it from me so far.  So let's start with the oldest one. So I see right here does syscall interception feature require LexD? Does it work only with LexD as a container manager? As far as I know, yes. We've implemented this in the kernel and in our user space tools. And I don't know of anyone else who's currently using this. Chrome, as I said, wants to switch to this in the future. But for that we need to have file descriptor injection available, which is something that Sargon is working on right now. So there are patches for this upstream, maybe even already in Linux next. I don't quite know right now. But yeah. And do you have a get up to download the code for your work? Well, just go to the LexD and LexD repositories. Well, this is a bit of tricky. I should. So it requires cooperation between the container manager and the container, right? And so we have implemented a protocol based on Unix sockets essentially that abstracts away the intricacies of the kernel implementation and to keep this extensible. So I'm trying to say in a very complicated manner that you need to understand the source code in two repositories. So you need to look at LexD and LexD. Not sure. I hope that helped. Okay. I think that's the only two questions I see so far. I mean, but I can stick around. Oh, can you expand on the security aspects? So many. One thing, for example, I spoke about emulating the syscall, right? Think about it to some extent. G-Lipsy is in the same sort of spot, right? Sometimes it emulates functionality that the user space expects if the kernel doesn't provide it. And this is always kind of a risky business because you need to emulate all of the security restrictions that the kernel would take into account when performing that operation, right? So think about the make-not-syscall. Are you rude? Do you have the necessary capabilities in your username space? Do you have a specific devices policy that prevents you from doing stuff and so on? What is your current C-group state? What is your current UAD and GAD? What are your current capabilities? What is your current? What is the task second status? What is the task LSM status and so on? So for the most part, you can assume that... So if you want to emulate this one-on-one because you're performing a syscall for another task, that's potentially a long list of things that you need to take into account. Now, it isn't that bad because potentially when your administrator... So if you can administer the lexidemon, we assume you need to have root privileges anyway. So if your administrator said, it's fine if these syscalls are performed, then in the general case, it's okay. For example, we have a hard-coded policy for MakeNot that only allows the devices that we would be fine with bind-mounting into the container at startup anyway. So we just... that's fine. Other security aspects are of course, as I said, with continuing syscalls. Like for lexid, this is fine. For unprivileged containers, this is fine because the kernel is your ultimate security boundary when it comes to syscalls. So the kernel anyway blocks anything that it deems is unsafe. If you continue a syscall and somebody writes bogus arguments in there, then the kernel will just look at the syscall and will go, so no. So your kernel is your ultimate safety net. So rewriting syscall arguments is not really a big deal. But think about when you guard for a privileged process, right? You implement a security policy for a privileged process and you decide whether or not it's safe to perform a given operation. Now you have a problem because the kernel isn't your safety net anymore. You're the safety net. Your decision is your safety net. And you can be tricked. You can lose a race. You can lose a race, as I said before, where somebody rewrites syscall arguments after you inspected them and made a decision and you let the syscall continue and the kernel is like, fine, I don't care. I don't care. And then creates the KMM and then the process is like, okay, time to take over the system. So these are things to keep in mind. And anyone who wants to use the, especially the continue part, I've placed a long, long comment in how the notifier can be problematic in this aspect in the kernel header. And it stresses every time this cannot be used to implement a security policy. It should probably make everyone chant this, but we're running out of time. So yeah, the security implications of this are definitely interesting. Oh, so briefly, Chrome, I think you heard you mentioned Chrome wanting to use the second view such as well. I'm not very familiar with containers. Could you give a concrete example of what they're hoping to do with that? So a lot of browsers, I don't know developer, so what do I know about browsers? But if they're restricting helper processes quite heavily, especially if they do encoding and decoding and so on. And for example, when a task, as far as I remember this, when a task doesn't give an open sys call, for example, and wants to give then I think by default Chrome doesn't let them do the open themselves. Instead they get notified of the open sys call with a specific second feature that is called where you get a six sys signal when a task performs a sys call. And then it performs the open sys call and does some weird trickery to do the open for the task essentially. But this becomes a problem now because G-Lipsy wants to block all signals if I remember correctly when it starts new processes or when it creates new threats and you can obviously see the problem here. So when you rely on retrieving a six sys signal, when you rely on receiving a specific signal but then G-Lipsy, for security reasons, for its own reasons, blocks these signals then you obviously won't receive them anymore which means the sandboxing solution that you used before won't work anymore. And so this is why they want to switch to the Notifier mechanism. It's also in my opinion the way more obvious solution how to do this. This is actually put in another way. This is actually what they wanted all along but never had or never knew that they wanted it or maybe they knew that they wanted it but there wasn't a way to do this in the kernel. So they want to use it for sandboxing to answer what they're hoping to do with that part. Good. I think if there are no more questions then thank you very much.


National security refers to the security of a nation-state, including its citizens, economy, and institutions, and is regarded as a duty of government. Originally conceived as protection against military attack, national security is now widely understood to include non-military dimensions, including economic security, energy security, environmental security, food security, cyber security, etc. Similarly, national security risks include, in addition to the actions of other nation-states, action by violent non-state actors, narcotic cartels, and multinational corporations, and also the effects of natural disasters. Governments rely on a range of measures, including political, economic, and military power, as well as diplomacy to enforce national security. They may also add to build the conditions of security regionally and internationally by reducing transnational causes of insecurity, such as climate change, economic inequality, political exclusion, and nuclear proliferation.


Morning everyone today is Monday October 28. I'm gonna do a free video watch list So for those of you that don't know every Monday I'm going to put out a free video watch list on YouTube But every day throughout the week the MIC members are gonna get this stuff for free So before I start I want to talk about our free trading course that we have is a free two-hour course that Balani created for non-members It's limited seating every single week. So go to myinvestingclub.co click reserve my seat now and then You could start the webinar and then if you watch the entire webinar till the end you get access to a free 10-hour mini course as well So reserve your spot space fills up every week usually by Tuesday So try to reserve your spot lock it in and let's get started so Let me kind of scroll up a little bit. Let's watch this perfect. All right, so Let's throw it RBZ. So RBZ is a low hanging fruit I really really like this setup because it seems like not a lot of people are gonna be watching it So these are kind of the levels that I'm looking for. I'm looking for 205 I'm looking for around 215 and I'm looking for 220 so I'll be using the 30% rule on a setup like this If you don't know what 30% rule is either DM me or watch the videos on it I'm gonna scale my first 10% here scale my next 10% here scale my next 10% here Let's stop out above here If this stuff kind of pushes to two fails and goes red I'd be comfortable kind of sizing in on that risking up to this line here. I See is a brand new setup If you look at the daily chart, it has a massive gap fill to seven That's what people are gonna be excited for on this one. I really don't know where the top is I really don't want to know where the top is what I see is a potential death line setup on this stock So I'll essentially be waiting for the death line to confirm and then that's when I'll take my trade I don't want to look for the top. I don't want to anticipate the top Sure, there's some resistance around to right now. It looks like it's stuffed on larger than normal volume You could take a 30% trade on this stock, but I mean unless you're managing your risk very well, there's no point so Either wait for the death line on this or if two tops out you could short You know the 190s and twos with a stop over, you know 205 Sorry, I'm still a little bit sick Xnet this was one from Friday If you look at the chart here, it kind of trapped every single short Every dip was bought up So on something like this when there are this many shorts stuck, you know the stock went from 250 up to six dollars in two days Yes, this is a parabolic move. Yes, this is a big opportunity But what we have to remember on something like this is that shorts are the ones stuck, right? They are the ones that need the exit. So on a setup like this, there's either two ways you could trade it, right? the way you trade it number one is See a line 650 and I see a line Around 630 and there's a little bit at six, but I think that might be too early. So On a setup like this You could use a 30% rule 10% here 10% here 10% here and then exit above there so That's a little bit of a riskier trade. That's a little bit of a harder trade Essentially what you should be doing is just waiting for the first red day, you know Even if you short at 480 when the stock goes red, you know, you still can make money till 450 420 and even four bucks Yes, it's going to be less stressful. Yes, it's going to be easier. But the problem is most people cannot wait To short when it goes red they get FOMO.  Just remember that there's so much meat on the bone on this setup that you don't have to be early And last block at least is CNET Not really much meat on the bone. I see 170 and towards 180 a little bit So I'll have fantasy orders in these areas with a stop above this. So Yeah, let's see what happens. I'm recording this at 7 43 a.m If a new stock pops up, I'll mention it to the members But yeah, we do this video watch list every single day for my see number So if you have any if you have any questions about me or my see Email Tosh at my invest in club calm. Thanks guys


Can I just call you Audrey? Yeah, of course. Just Audrey. Yeah. Okay. Yeah. I guess we will have another interview or from KBS. Yeah, I don't know whether it will be simultaneous or not. So I asked not to. Oh, you asked not to? Yeah, sure. We used the time to help. Of course. Of course. I just wanted to run your group five weeks before fact-checking. Yeah, go ahead. Go ahead. So you're the youngest minister in Taiwan? At the moment, but not historically. Oh. There was a minister of youth affairs. Jenny Jun, when she went into the cabinet a few years ago, she was 34. So right now you're the youngest? Right now I'm the youngest at 35. And your first transgender minister in Taiwan? In the world, actually. You never went to college? Yeah, I dropped out of junior high school when I was 14. 14. And when did you start your first company at the age of? 15. 15. I could cook out the case. 16 years.  That's a rumor. That's a rumor. My height is 180. It often gets confused. So what's your real IQ? For adults, the IQ test only gets to 160 above which the wise test cannot reliably test. So I am 160 or more, but I don't really know. I've tested twice and there's no way to know. And you started your Silicon Valley start at the age of 19? That's correct. What happened to the company? Well, it's still running. It was like an angel investment by a lot of Taiwanese companies. And then we continued our part of our operation in mainland China and part of it in Taiwan. And it's still running, but I no longer, I know we're in charge of it. That's a very impressive record. Yeah. Yeah. Of course. Go ahead.  Sorry, sorry. That put into my jacket like this. Thank you. I mean, after we take our chance, he was really interested in your philosophy.  Yeah. I'm sure, you know, because recently you mentioned the deliberation as a keyword. Yes. Yeah. Yeah. The thing was deliberation is that it's magical because when people enter in your high quality of deliberation, everybody walks out changed. And then people respect each other and they will become immune to the rumors, to the propaganda after deliberation. The problem with deliberation is too. First, it's messy, meaning that every time you run it, there's no established way to get high quality deliberation. And second, it doesn't scale, meaning that if it's 20 people, maybe you can get deliberation. If it's 200 people, it's impossible. If it's 2,000 people, people just start shouting at each other. So basically, listening, the key to deliberation, does not scale. Meaning that if it's more people, it actually loses its magic. So we use ICT information communication technology to scale the experience of listening. That's our main contribution. I mean, that process, you actually adopted the notion of listening. Yes. Right. So could you elaborate more about your program, your software that has been developed in order to gather public opinion? Yes, of course. So there are this very important principle in the idea that we use the internet to deliberate on people's feelings, not their suggestions, not their decisions. Because if you jump into suggestions, people will not reveal the feeling they have behind the suggestion. So even though five people suggest the same thing or they vote the same way, maybe they do it out of different subjective feelings. So what we have crowdsourced before was people's feelings, for example, around one concrete issue, like your own private car and you don't have a professional driver's license, but you use this app and then you get a stranger on your backseat and you drive them somewhere and you charge them for it without mentioning any company name. Yeah, exactly. And then our software is an open-source software. Basically, ask people one yes or no question and based on their yes or no question, they get clustered. So after you answer a question whether you think insurance is important, whether you think it's public safety, your avatar moves on the screen so you can cluster with people. And this interface has two very important things. First, it shows your Facebook and Twitter friends first. So you can see if people having very different idea than you, they are not anonymous enemies. They're still your friends. It's just you haven't talked about this over dinner, right? So it's not your enemy, that's first. And the second thing is that in Internet forum, it's very easy for these two polar sides to dominate all the discussion and these people are silent, right? Because they shout. Yes, but the thing here is that you can press consensus and see there's nevertheless, 91% of everybody agrees the importance of checking of the driver's credentials of protecting the passenger. So there can be consensus among disagreements. And so this after you answer a few yes or no questions, you can also type in your own feeling and then which then gets voted by other people. So what we say before the deliberation was that if by the end of the process, we have a set of agreements more than 80% of people agree on something, then we agree to use these supermajority consensus as our national agenda to negotiate with Uber and with other texting. How do you gather people's opinion? Like you said, you didn't listen to their suggestions. You didn't listen to their national opinions. You just kind of capture their feelings or their innate tendency to a specific policy. So how do you gather the information? No, we just ask people to start the sentence here with Wujie, which is I feel that and that's it. So we're not passively monitoring. We're actively asking people to write their authentic feelings. And then this is a open-ended survey so people can feel anything. Within the process, people might really disguise or didn't want to show their feelings. So you might have to ask them twice or three times. That's right. You can change your positions anytime here and then you can state more nuanced feelings because we only take as binding things that you manage to convince everybody. So if it's a disguised or if it's a non-authentic feeling, if people don't share it, it doesn't have any effect. So people are basically competing to first convince people who think like them and gradually to convince people who doesn't think like them. And we only take the supermajority as the agenda. So how do you call that the system? This system has a name called Polis, P-O-L-D-I-S. Is it how to develop? Is it really taking a lot of resources to develop? Well, it is actually a community effort started by some Seattle hackers. But it is open source so everybody can contribute. So I also contributed to its development and it was contributed usually by people who participated in a occupy or a protest movement before. So like after the Occupy Wellington, the New Zealand people would join. And after the Occupy Wall Street and Madrid, every time after the Occupy people start thinking, OK, democracy can take another form and then these people will join this development. So the big moment for you in Taiwan is in 2014 or so? That's exactly right. So we started this development before the sunflower but we were not many people, 100 or so. But after the sunflower, it was just exploded in interest. Okay, yeah, I should look at the camera. So you don't have to look at the camera, you can just look at us. Just briefly, so is this platform are you using for the Taiwan government? That's exactly right. Give me just one example of the latest initiative that you got the idea from this platform. Well, the most high profile, of course, was the Uber case. But we also used the same for the Airbnb case for internet sales of alcoholic beverages and so on. And just today, Uber announced that they will bind themselves to the consensus that's made here. And they will change their business model starting tomorrow to play by the rules that was set in this deliberative fashion. How many people participated in the Uber survey? In the Uber survey, thousands of people participated but only around 1,000 or so logged in so that we can see their avatars. And they have answered more than nine questions so we can determine their position. So it's about, yeah, I would say about 1,000 active players but about 9,000 or so peripheral players. Actually today I'm interested in two of the initiatives from your department and one of them is the eSports. I heard that your department is planning to replace the mandatory military service to playing computer games. Is that right? Can you tell us more about why you are doing this? Right, so first it's not about computer games. eSports is a sport. It just happens so that the stadium they use is a virtual one, not a physical one. But the point here is the computational sport aspect. My favorite argument in this conversation is that I think Go, the board game, is now an eSport. Because most of the competition and training happens online and also because machines now play better than humans. So this is mostly for two human beings to enjoy each other's company and play for performance. And in this sense it really is nothing different from other eSports. So as for the alternative military service, it is true that it's already the case for Go for Wachie players in Taiwan. They can have alternative military service if they win some international or national competition awards. The same applies for any other sport as well as symphony conductors and other cultural performance. So eSport as let's being a cultural performer in which has international competition as a one shouldn't really be discriminated against. That was just the basic idea. So we're not actively promoting it. We're just saying, you know, this is like other sport. And the other thing that we used during the eSport thing is that we have on our PD's website a accountability trail where you can have this QR code. That lists the entire decision making process for how exactly this policy was formed. So starting from the public hearing down to the classes, down to the military service, down to the, you know, national tax breaks and so on. We have all the ministries and all the decision makers in our internal meetings taken as a transcript with real-time transcript. And everybody after editing it for 10 working days agreed to publish it to the general public even before we have set our direction. And this is very important because then everybody, the eSport as let's all the stakeholders look at our conversation deliberation records and let us know over the Internet where we have missed where there's legal precedent for that and so on. And so they were contributed and I quote them on the next meeting and so on. So everybody knows that's when all the three lights here goes from yellow, which means it's in progress to green, which means it's resolved. We have resolved this policy case and it's one piece of the puzzle is the military service, but there is also the educational aspect and also the industrial aspect.  This is not just one isolated policymaking. So what are the two most popular eSports game in Taiwan and how far you have to perform in order to replace the military service? Right, exactly. There are 10 criteria spots. So, of course, if you win a Olympic level competition that kind of automatically qualifies, but even for sports like LOL, there is actually no like frequent Olympic level competitions. So the next thing of course is the the alliances between the different countries. So we set a basic criteria that says it has to be regular and it has to have at least this many people in its regional and this many people in its national level and so on. If you qualify for that, there's a few competitions for LOL that qualifies for that. If you win the first three places or so that also qualifies and then after that it was about the national level competitions, which still has to have some kind of structure. So this is a three tier system, but still only the professional players get to continue their work during this kind of alternate service. So we're not rewarding video game players. We're rewarding professional athletes. Another initiative I'm interested in knowing is that your country is starting to educate the children about how to identify fake news at school starting next year. Can you tell us why you think it's important to educate that? I think it's important that we don't use the words fake news because I think it is a disservice to journalism. There are rumors which are viral, which means people who spread it doesn't bother to check, but it's not necessarily false or fake. Some rumors turn out to be true. The point here is that people need to learn to do basic source checking, fact checking and balance of diverse set of opinions and so on. Basically critical thinking and independent thinking. So in our curriculum, we call it information technology and media literacy. So this idea is not about spotting quote fake news unquote, but about being able to make decisions and make opinions of oneself during a learning experience so that people don't guess way one way or another based on rumors. That's the basic idea. The other thing of critical thinking is being able to listen and change one's mind or opinion when new facts serve surfaces and again, this is kind of against human nature. So we need to get started very early on and say, you know, standing to be corrected is actually a virtue. It is not about losing face or anything. And this is the other aspect that I think are very important. So starting how what age would Taiwan age? So the entire K-12 system that is to say starting from the first grade all the way to senior high school because this is not a class. This is one of the literacy that needs to be merged into all the classes. So all the classes, the teachers and the textbook makers and schools need to find some way to find media literacy and critical thinking into the way they're teaching and not just taking it as a class as a examination. I was wondering what was your reactions in your country like when you were first appointed? You're the number one, you're the hacker. So people may be worried that, you know, how can hackers be working for the government? Hackers can attack. Hackers are usually seen as somebody who attacks the government. Like lawyers. Yeah, or maybe lawyers. And number two, I mean in South Korea, we had a high government with a show who come out of closet and it was a good public interest gender. It would instill huge outrage. Did you see experiencing of those outrage in Taiwan as well? Well, not at all. Because first I started working with public service in 2014 after the Sunflower Movement. So for many career public servants, I'm already very well known as one of the people who helped them to communicate to facilitate conversation with citizens. So in many cases in people in administration, they call me kind of a understudy minister already for a couple years before I joined the cabinet working for the previous minister of cyberspace Jacqueline Tsai. So what I'm saying is that if people had some outrage or whatever it already happened 2014, it's not waiting after I become a cabinet minister. That's the first. The second thing about hackers, I think in Taiwan, because cybersecurity is very, very serious matter, people put a lot of understanding into it. So they don't really have this like magical thinking that thinks hackers are somehow magicians. They understand this is just one kind of technology and technology is just like any luxe minis or whatever has their pride, has their professional code of conduct and things like that. So just like when people know a lot about law, maybe they exploit a loophole of law and become very bad lawyers, but they don't have to be right. They can become lawmakers that makes a better kind of law that is not going to be exploited. So I think it's much the same. I understand information technology, but it doesn't mean that I will exploit its loopholes. It means that I will set up system that doesn't suffer from the same kind of loopholes. Since you're at the hacking competition, is it getting more important these days for the government to foster more hackers? Yeah. Yeah. Very early. The first thing I did after joining the cabinet was actually recompile the Linux kernel to add secure computing to our internal government information security facilities, which is the system that we use every day. And then we then invited penetration testers, which are security experts who try to attack the system and to find a loophole so that we can res assured that when we are using the system we configure it properly and so on. So we take this very seriously and we believe that a active penetration testing and forensics and all these tools enables us to have a clear understanding of our information technologies infrastructure and its limitations so that we use it in a responsible manner. Otherwise it's just all voodoo and hearsay, which is pretty much the worst case because then people will take some countermeasures that then cause side effects and so on. So I think a clear understanding of the cyber security landscape is for everybody's benefit. What about the growing intergovernmental or allegedly intergovernmental cyber attacks? There's allegations in North Korea, attacks in South Korea, for example, there are allegations of cyber terrorism between China and the United States. Does that make us more important to have more hackers in the government? Yeah, I think just like with any other terrorism, the impact itself is actually low. The thing that they hope for is to provoke some mysterious fear and then have people overreact and the overreaction actually causes more damage than the initial attempt at the cyber terrorists or real world terrorism. So it's like a mosquito trying to, you know, get onto a bowl and then to break things into a store. So the whole idea is to have a calm and clear understanding and have cyber security experts explaining in a very clear accessible manner what exactly is happening. And then people would not panic and they will not clamor for things that will actually cause more damage. And I think literacy again is the most important thing here. So that connects with your education about the media literacy and just one more about, I think there's a lot of Taiwanese people who believe that rumors are circulating in Taiwan, maybe behind that there's China. Do you think that's one reason that Taiwan should increase its education and media literacy? Well, in Taiwan there are many ideological camps, there's pro-unification, there's pro-independence, there's everything in between. And I think these camps are more than sufficient to generate credible rumors without being remote controlled by any other places or any other groups. That said, I think it is important for people to get inoculated against this kind of virus of mind and deliberation, as you already mentioned, I think is the key for the inoculation. Because any effect, fact-checking or whatever after a rumor has already spread only has a containment effect. But if people have already considered carefully even the position of people they don't disagree with, they already have some kind of inoculation in the mind so that they will not fall victim to rumors. And I think really this kind of early stage prevention is the key here. So just by getting people to listen to the ideas that they don't like basically develops their immunology system. I think your view on this fake news, I only use this term because that's what my readers are familiar with, it's very refreshing. Could you comment on the US President Donald Trump about how the way he communicates with the public, do you think the way he names some of the news media as a fake news outlet, what do you think about them? Well, when Twitter first got invented, people use Twitter in the way that's very direct and make full use of the 140 characters. Taiwanese people use Twitter more like regular blogging because in 140 Chinese characters, you can say a lot. But in English, not so much. So I think there's a distinct style difference in the ways that we use Twitter versus a English speaker use of Twitter. They had to be very brief and basically just say even just one idea or half of an idea. So as things developed, because I was in developing social media networks, we see a lot of very creative uses in Twitter like multi-part tweets, like the tweets that are complementing each other using hashtags and conversation communities and so on. So they built a community structure out of those very short forms of communication. But Donald Trump used Twitter the way when it was first invented, used it as it meant to be. So it's to me also very refreshing. I learned a lot. What do you learn from his way of using Twitter? So basically have self-contained messages. Self-contained messages that doesn't rely on context. Can you elaborate? Can I elaborate? Well, I think that was pretty self-contained. The idea is that if I have made a very long speech and where each sentence depends on the context of the sentence before and after, then when any one of those sentence gets taken out of context, it will be turned into something that I don't already mean. But if I make all my messages self-contained in short, then there's no danger of being taken out of context. So this is the basic thing that I learned. Not necessarily from Donald Trump, but it is the idea of Twitter at this beginning. I don't want to take all your time. I want to ask you my question. Your career path is quite very impressive and so much special. So I heard that you learned programming by yourself after dropping out of Udo school. So what would be the reason? I learned programming when I was eight years old. So that was seven years before I dropped out of Udo school. Would you like to translate? English, okay? That's great. So, yeah, I started very early on to take an interest in mathematics and I started reading programming language books when I was eight. And they described a way for people to very quickly get results of mathematics without having to do all the calculations by hand. And there's as much less error prone. So I got very interested, but I didn't have a computer. So I basically just took pencil and paper and drew keyboard and typed on paper and then wrote what a computer would say and so on. So basically drew a paper computer. But this means that computational thinking is one way of thinking. It doesn't depend on the machine. And if one structure, one thought in some way, some part of the thought process can be automated. So for me, it is like learning a music instrument without having access to the piano or to the oboe instrument. So the idea is just to learn the idea of melodies and chords and so on so that people can play this kind of music. And after a few months, I actually started programming on a real personal computer. And then I found that those notes that I learned as programming languages actually makes melodies that are shaped spaces around the spaces in which people can interact with each other. The first programs that I wrote are computer games where people can play with each other against each other and so on. So that also characterize how people behave around each other by creating a space of people's interaction. So this is a very special kind of instrument, I would say. While learning it, it's just like learning any other music instrument. The notes it creates is actually a new kind of space where people can interact.  What kind of activities did you focus on and what were your goals at the time? So I'm always a civic hacker. I started working on Internet human right and freedom of speech movements at least since 1996. That's during the Blue Ribbon campaign and so on. So yeah, I'm always a civic hacker, I would say. And the primary thing of course is the sharing of the knowledge and making the process of sharing also a common knowledge. So as early hackers, we all believe that the tools that we use to shape our lives is more and more taking over the role that was initially taken by loss. So more and more we're living in a case where algorithms, where computer code already determine what is possible and what is not possible even before the legal code kicks in. So the problem being that computer code was not transparent and people using the computer code doesn't really know why it went to here and has no freedom to modify it or to distribute its modification. So I would say that my core concern is still this kind of Internet freedom with software freedom being one part of it, but also freedom of speech, assembly and other human rights. Thank you. The last question would be, why do you think security, cybersecurity matters the most in the era of the fourth industrial revolution? Right, the security matters a lot because if people are still using Internet for freedom of speech and of assembly, people must know for sure not just blindly trusting that a speech they make on the Internet will not be used against them. So if the Internet becomes a technology that oppresses people, then when people are going to have assemblies or have expressed their freedom, they will go back to pen and paper or to face-to-face meeting and the Internet will lose its original liberating promise of getting people who feel that they are alone and they don't have people who think like them into communities. But basically, if we don't do our job right on security on the Internet, the Internet becomes a fragmenting force instead of a community force. And if it becomes a fragmenting force, people will have a lot of small intranets, like a balkanization of Internet, and each intranet will have an exclusionary policy that excludes people who don't think like them. You will not foster a cross-community dialogue and others will become a much more fragmented space where people live essentially in their own realities. And that is as undemocratic, as nonhumane as we can imagine if we extrapolate this transfer. So I think the utmost importance is to get people to still see Internet as a secure place by having the literacy of telling insecure communication with secure communication and keep to the secure communication methods, and so that people can still form communities where it still becomes possible to talk with strangers, to learn from strangers. So this is another question about security because we have now a self-proclaimed card and AI records so many things. And he would like to say to some more examples, why is it specifically more important security needs in AI and self-proclaimed cards? So security, this word in English is very interesting because it describes both a property of a system and also a state of mind. I feel secure versus a secured system. So in Mandarin Chinese, in the language that we use, we say the meaning that at ease, a calmness with information. And this is important when I'm sitting in a self-driving car, for example, because if the system is mathematically proven, it satisfies a lot of properties, all the engineers, everybody vouch for it. If their proof carrying code and all those advanced verification mechanisms cannot translate it to the language that everybody, common people, understands, they may achieve the mathematical definition of security, but there is no psychological or sociological definition of security, a feeling secure. And for me, feeling secure is the goal and this is just the mechanism, the instrumentation for it. On the other hand, there is a lot of what we call security theater, which means that not going through the rigorous mathematical proof, but just to enact some theater and trick people into believing, into feeling secure about something that's actually not very secure. And if you go to those security theaters, for this is a lot like rumors, if you get a lot of security theaters, people lose the ability to tell a rigorous system versus a non-rigorous system. And I think this is of utmost importance because if people cannot tell a rigorous system versus a non-rigorous system, people will not ask technology what they want to feel secure. People will just blindly accept whatever the vendors push to them and this creates a false sense of security. But then when cyberterrorism or other attacks happen, people will panic because they did not know that their system which they rely on doesn't have the property that they imagine that they have. So again, I think as the AI and IOC technologies becomes part of not only our life, but become part of ourselves. It is very important just like the medical knowledge enables us to know what is happening with my own body. My extended body also needs the same kind of self-introspection and knowledge so that I can feel at ease with an extended part of my body. For many people, their phone or their smartwatch is already part of their body. Can we have time to ask a couple more questions? One more question is on these answers. Like you just mentioned, the autonomous car. The producers of the autonomous car will always say that this is safe. But it could be like you mentioned as a security vehicle because we do not know that autonomous cars are really safe or not. Because we cannot really tell that technology is so complex that artificial intelligence technology cannot really interpret it through people's daily language. And perhaps you could understand it. So how can we assure that the autonomous vehicle is really safe? Right. First we can do it through simulation. You can invent some simulation scenario and try to put the algorithms in and see if it behaves the way you think it should behave. And this is how actually we test real human testers. So the human testers describe the situation to human drivers when they're taking the driver's test and see whether they have the goods. And this is essentially the same that we put the pilots also into in their cockpit simulations. So basically, I think as the spirit of Turing test, if AI can handle all the situations that human can imagine and throw out of it at the simulation, then we can judge it based on how it thinks and explains itself under simulation scenarios. But at the moment, there's still always somebody behind the wheel to take over when the machine feels that they don't have the confidence to handle the situation. So another very important thing is the human machine handoff. We need to have augmented reality system projected on the window of the car to have the driver know what the AI is thinking about the situation and not just very low bandwidth SMS like messages because that would be too late. So it's very important to have this copilot mechanism between the AI pilot and the human driver for the foreseeable future before we can even think about going into fully autonomous driving. Can I ask you some, do you mind talking about some personal life? Go ahead. What was your family's response to your decision to go through the transition from man to woman? Could you tell us about your plans for your family? What do you have a plan to start a family like that? Well, my family is really non-rigid as far as gender seroton goes. My mom was very expressive and was raised in a very androgynous manner, and so they don't tell me what a man or a woman should or shouldn't do. So instead of transition, I would say that I am just post-gender, a post-genre meaning that I don't think there should be things that only one gender should do. I don't think anything that is declared this way is discrimination. So I'm more against discrimination than against any kind of particular gender identity that's the first. So when I developed this kind of thoughts when I was an adolescent, I think they're thinking of a more philosophical stance rather than a psychological thing. So I think they're pretty friendly and we keep dialoguing. When I decided to change my name, I made sure that my new name is OK by my father, and that he also thinks it's a good name before I changed my name into it. As for family, I already have a family. It's just not human children. I live with seven cats and two dogs and have been living with them for 10 years now. So it is a very large family. It's just not human children. And I do plan to continue living with them. So two cats and two dogs. Two dogs and seven cats. Seven cats. Oh, wow. I have two cats. Yeah, I consider them my children as well. Yeah, exactly. Okay, yeah. Any final things? It's good. Okay, thank you. Thank you so much. It's very interesting. Thank you. It's a pleasure for me as well.


Hello and welcome to the session, let us discuss the following question. It says, father's age is three times the sum of the ages of his two children. After five years, his age will be twice the sum of the age of two children find the age of the father. So let's now move on to the solution. We have to find the age of the father. So let father's present age be x and the sum of the ages of two children equal to y. According to question, we are given that father's age is three times the sum of the ages of his two children. That is, three times the sum of the ages of the children is equal to the father's age because we are given that father's age is three times the sum of the ages of the children. So we have x is equal to three y. Let's name this as equation one. Now according to second condition, we are given that after five years his age will be twice the sum of the age of the two children. So after five years, father's age will be x plus five years since the present age is x. So after five years, father's age will be x plus five years and the sum of ages of two children will be y plus five plus five years. Since the sum of the ages of the two children is given to be, is assumed to be y, so five years later the sum of the ages of two children will be y plus five plus five years. And in the question we are given that father's age will be twice the sum of the ages of the two children after five years. So again according to question, x plus five is twice the sum of the ages of the two children that is two into y plus five plus five that is ten. So now we'll solve this. X plus five is equal to two y plus twenty. So this implies x minus two y is equal to twenty minus five that is x minus two y is equal to fifteen. Now this equation can also be written as x minus three y is equal to zero, right? Let's name this as a and this as b. Now we'll solve equation a and b for x and y. So we'll subtract equation b from equation a. Now equation a is x minus three y is equal to zero and equation b is x minus two y is equal to fifteen. Now we have to subtract equation b from equation a. So sine will change.  Zero minus fifteen is minus fifteen. So this implies y is equal to fifteen cancelling minus sine on both sides. So y is equal to fifteen which is the sum of ages of two children. Now we know that father's age is three times the sum of the ages of the two children that is x is equal to three y from equation a or one. So x is equal to three into fifteen. So this implies x is equal to forty five years. So this implies father's age is forty five years. So this completes the question and the session. Do take care of all your calculations. So bye for now. Take care. Have a good day.


says, the first one if you see says introduction to Sylab and it says when I do that, it says pass mode, enter empty lines to continue, Sylab objects, scalars. So, when I say A equals 1, it just displays A equals 1. I am asking the next question 1 equal equal 1, equal equal is a conditional statement, it just verifies. The answer is true, it says the answer is true. String, something quoted it says this is a string. I define a polynomial in this fashion z equals z. That means it is a polynomial with variable z and with one root at 0. That means we have just defined z. Now I can define this polynomial p to be 1 plus 3 z plus 4.5 z squared.  Another example matrices define A to be this capital A to be small a, recall we defined the small a like this here. It is scale sensitive. It is a type, it is a uppercase, it is case sensitive, uppercase lower case. Let us just go up and see what we defined A to be 1 here. So A is this capital A is small a plus 1 that is 1 plus 1 2, second element is 2, third element is 3 and if you look at the second row it is 0 0 tan inverse of 1. Tan inverse of 1 so that is going to be pi by 4 but in radians. So it is going to be 0.785 59 minus 1. In all of this note that it is every time I give a command it is echoing the results. You have to remember that. So what I will do next is I will take up some other examples. So here I am doing some commands 4 plus 6 plus 12. I want to do this. I say A equals 4, B equals 6, C equals 12, A plus B plus C. So I am issuing 4 commands like this. When I do that, when I issue the first one 4 plus 6 plus 12 the answer is 22. When I give A equals 4, B equals 6, C equals 12 it is 22. 4 plus 6 plus 12, answer is 22. Then next one I say A equals 4, B equals 6, semicolon C equals 12. It says A equals 4. It does not echo B because I have put a semicolon here. The moment you put a semicolon it does not echo. C equals 12 it gives that but if I ask what is B, it says B is 6. It is just that when I put a semicolon it does not echo. Then the other important thing in Sylab is you would open a diary. The moment I open a diary command whatever I do subsequently the questions as well as answers get recorded into a file called test which I can open, edit, remove all the unnecessary files, unnecessary lines and you are done. X is equal to square root of 2 by 2. It is 1 by root 2. So this is x. Then y equals A sign of x which is pi by 4 and then I say y degree equals y times 180 divided by look at this. The command I have given is the variable I have used is percent pi. The moment I put a percent it becomes a reserved variable. It is a pi that we are familiar with. So it says the angle is 45 degrees. This is the radian to angle calculation. Essentially this is pi by 4. In radians this is pi by 4 in degrees. Now if I say diary of, remember I had opened this thing called test. There is something called test. Here it is. So I can always open an editor and it has all the commands that I executed. Since that time I started diary. It is an extremely important, extremely useful thing because you do not have to remember what are the things that worked. Typically in a session what happens is you try 10 commands, one will work because you are trying, you are learning something and then you cannot remember just one. So this is a nice one. You open the diary, close it, remember to close it. If you do not close it, my information is lost. Say the command that I gave was diary of. It closed the diary and then you have this. Edit it and so on. Now this is a very nice command. What I have done is, in fact let me give a simpler example. A equals 1, 2, let me do this, 1, 3, 5, 7, 9, 11. Let me do this up to 9. Oops, A equals 1, 3, 5, 7, 9. So I have defined a vector now of length 5. It has 5 elements, 1, 3, 5, 7, 9. Unlike in photon RC, you do not have to create the storage for that. It is generated automatically. You do not have to type it. You do not have to say it is real, integer, whatever because the normal working type in SyLab is double precision number. Instead of this, you can also do it like this. B equals 1 in increments of 2 all the way up to 9. So A and B are 9. Both are same. You can also say, if I am not mistaken, 3, let me just see. B, C equals linear space starting number 1, ending number 9, that I want 5 points. Look at C. C is also the same. The other interesting thing is, so let me use this command. So X equals 0 in increments of 0.1 up to 1 multiplied by percent pi. I put a semicolon. I do not want it to echo the result because the result may be several lines. If I do that, it will say column 1, 2, 3 and so on. So let us just define that. X is defined. Then I say Y is equal to sin x. That means all the commands are overloaded. You can carry out matrix operation on this. So sin of a vector, it calculates and it will, for example, return. Sin 0 is 0. This is 1 into pi. Sin pi is 0 and you have up to 11. You can do things like Y of 5. You can pick out a vector and you can do several vector operations. For example, if I say A equals 5, I get this 5. A equals 1 to 9, I get this. The difference is here. I have not specified the incrementing operator. That is the difference of operator. For example, when I say B equals 1 to 9, it says 1, 3, 5. The difference between successive numbers is 2. What is the difference between these? I have not specified it. So it is taken as 1. Default is 1. So when I say 1, 2, 5, it says 1, 2, 3, 4, 5 in increments of 1. It writes this and then this is B. Now it is possible to do things like, let me put B and A together, create a larger, longer vector. So I say open bracket B, A. So B is put first and then A is put on. It is as if we are writing mathematics. If we write mathematics, this is what we would do. But imagine doing this in CR Fortran. You will have to open an array, type it, dimension it and then you put all of them one by one and then next one, one by one. The next one, it has several actually very nice features. Let us look at this command. D equals A of 1 in increments of 2 up to 5 and then 1, 0, 1. Now actually this is, A is 1, 2, 3, 4, 5. Let us do the following. Let us say B equals 1 in increments of 2 up to say 20. So I have got that. Now if I say B of 1, increments of 2 up to 5, it is going to give me B of 1, B of 3, B of 5. What I have is, I have 1 is to 2 is to 5 means it is going to create a vector called 1, 3, 5. So I am saying what I mean by this is, go to B and extract the first entry. The second entry's value is 3, which is this and the third entry's value is 5, which is this and let us give up. So it is possible to do really sophisticated calculation, indexing kind of a thing in MATLAB, in Sylab. MATLAB and Sylab are very similar as pointed out earlier. All these things will work also for MATLAB. 1 to 5. So let us say, let me do this. Let me say B equals 1 is to 2 is to 20. Now let us say C equals 1 is to 3 is to, let me say 8. Now my question is what will happen if I say B of C? C is what? 147. B of C is B of 1, B of 4, B of 7. This is 1, this is 4, 5, 6, 7. That is what I mean by that. So it has a highly sophisticated indexing thing. That means you can write very complicated algorithms in just one line. Downside is debugging could be a problem. You have a very sophisticated logic built in. It could become difficult to debug. But then you can do, look at this. This is what I have done. I have taken three such entries and I appended 101. So I mean all these things you are doing, actually a lot of things in one line. Here this example shows vector, here is a vector a minus 2. This is what we would do in mathematics. Minus 2 means what? How can you subtract a vector, scalar from a vector? We normally mean subtract from every entry, which is what is done. I have subtracted from every entry. Here 2 into a, that means you multiply every vector entry by 2, subtract 1 from every entry. So that is what it is. Then similarly I have done a plus b. Answer, when I do not give, when I say, when I do not say where the answer has to be put, it creates a variable called a n s, which is a short form for a n s, puts a result. And of course, this a n s is overwritten. Every time I use another variable, another operation without a result, that result goes back to a n s. It overwrites. So here I have done some calculations. Another useful thing is what is known as this dot operator. Here for example, I have written a dot squared, by the way this, this carrot sign up arrow means to the power. So a dot square dot to the power 2 means this dot says for individual entries. So this is raised, otherwise it is, what is meant by square of a vector? There is no meaning, which is what I have done. In fact, here I have done a dot to the power a. So that means 1 to the power, 1 to the power 1, 2 to the power 2, 3 to the power 3, which is 27. This one is 4 to the power 4, 5 to the power 5. So I can do that. It has all these logical operators, which can be used as in all the conditionals. This next two slides, I will bring out some really nice features of this environment. I have created two vectors. Vector A is 1 through 9 in increments of 1. B I have defined as 9 minus a. So 9 minus 1 is 8, 9 minus 2 is 7, 9 minus 3 is 6 and so on. Now I am asking this question. I am creating a variable called tf, which is equal to a equal equal b. That means I am comparing a and b, putting the result in a result called tf, true or false. tf stands for true or false. I am just asking true or false. Wherever a is equal to b, it is going to say true and wherever it is not, it is going to say false. So here for example, nowhere is it equal. So it says that they are all false. That means a is never equal to b. But if you look at the next one, I am saying tf equals a is greater than b. Whenever a is greater than b, it is going to say true. So for example, from here onwards, 5 onwards, it is going to become true. Here look at this. True or false, tf equals b minus a greater than 2. Whenever a is greater than 2, here I am using it as a number integer.  So the result a is greater than 2 is going to return 0, 0, 1, 1, 1, 1. And then I am subtracting that from b. So 8 minus 0, do you follow that? I am saying a is greater than 2. When I do the comparison of entries of a with 2, first two are less than or equal to. So they are false. In other words, they are 0, 0. All others are 1. I am subtracting this vector from b vector. So first two elements do not change. 8, 7 remain as it is. All other things come down by 1. So that is what happens. So it is 5, 4, 3 and so on. So which means when I do something like this, this can by doing such a thing, you can actually do quite a few, quite a complicated thing. Normally if you have to do this, you will have to do a do loop, for loop kind of a thing. That is actually it turns out that for loops are slow in MATLAB silo. These are vector calculation environments. When you have a vector like this, 1, 2, 3, a is equal to 1 through 5 creates this. Now b equals 8 transpose.  It becomes a column vector because I have taken transpose. You can, of course, extract parts of it and so on. Let us not do that. This example I want to do. Let us do that. Timer, the answer is 0. Then I say a equals 1 of 10000 comma 1. What should I do now? I should put a semicolon. If I do not do, put a semicolon, it is going to just scroll and so on. Of course, silo does not do that. In MATLAB we will do that. If I do not do this, it will just come and say, do you really want me to display everything? You have the option of getting out. You just say no. In MATLAB we will just turn away. I created that. Then I say timer. That is because I displayed.  Now what I will do is for i equals 1 through 10000, b of i equals a of i plus a of i end. What I am doing is I am writing a for loop. It goes from 1 to 10000, b of i is a of i plus a of i and I am ending it. Just adding. I just want to show the time it takes to do this calculation. It is doing that. It took some time. Timer 1.14, here it had taken some other time. Now I say c equals a plus a. Now I have done vector calculation. a plus a, then I say timer 08. This timer actually tells you how much time it took since the last calculation. I created this once of 10000, 1. How much did you take? 0.08. Not much time. In fact, I take the same time. When I say c equals a plus a, it takes the same time. But here what I am doing is this same calculation, I am doing it here. Do you see that? Here I am calculating it as two vectors, calculating two, adding two vectors as vector calculation. Whereas here I am doing one by one. I am forcing it to go one by one and it turns out that this time is 1.14. It is many times as compared to this time. So you have to use vector calculation whenever possible in Sylab also in Matlab. There is help here. For example, if you see here help, help browser, app propose. App propose is it just checks, it looks for that word. For example, timer. So I want help on timer. I just say I go to app propose which I got in this help button. Say it opens this. If you see here, I do not know whether you can see this. It says timer. It returns the CPU time from the preceding call to timer.  Before that you say timer, bracket nothing, semicolon. The next time you do that it will give you. Let me close that. The other thing, so it is possible to do a lot of calculations. What I want to do is I want to show you some of the graphic, graphics capability that also gives an opportunity for me to go through some of the demos. If you recall this, I was not too happy about this introduction to Sylab. That is why I switched over. The reason is that there is an attempt to introduce a lot of things in this basic introduction. So that I thought is probably little advanced. Let us go to the graphics. 2D and 3D plots. Look at all this. All these demos are there. Let us take plot 2D, plot 2D. So this is the command. Let me execute this first and it was created by this command. So x-axis is 0 in increments of 0.1 up to 6 multiplied by pi. That means it is going from 0 to 6 pi, x-axis, 0 to 6 pi, 6 into 3 is 18. 6 pi and in the y-axis I am going to plot, I am going to create a 2D plot on the x-axis it is t, y-axis it is sin t. For whatever thing that I have, I am creating a sign of that, I am plotting that. So that is what this is. And then of course I am creating x-title. Essentially it says it is a title. The first argument is the title of this. The second argument here is the x-axis. The third argument is sin t. And then the last command says grid. Grid this, so it puts this horizontal vertical lines. Alright, let me take another example. Plot 2D 1, it essentially creates log-log plot. So after whatever it is, it plots and then says x-title, y-title and then x-grid of 3. One can actually find more explanation for each of them by doing the help. Plot, let me do this parametric plot, param 3D, let me do this. The command for this, here of course in the demo, they say param 3D, no argument. No argument means they actually have a default whenever it says you give the command nothing, it is going to execute some demo file, demo command. We will see what that is. So if I execute this, this is the 3D and the command was this. When I say for example param 3D, I execute param 3D, I mean within brackets nothing. When I fire this, this is equivalent to this because this is the default thing that I have stored. When you see no argument list, fire this. So it is going to fire that. What is that thing? It is this. It says time is 0 to 0, increments of 0.1 to 5 pi and then it is a 3D plot sin t cos t and then t by 10. So t is 5 into pi which is 15 point something divided by 10 is 1.5 something. If you see the plot here, that is what I have. I have plot z axis up to about 1.5 or so. So x axis is sin t, y axis is cos t, z axis is t by 10 and then it gives some angle, at what angle you are looking and so on. Those details are here. Plot 3D. There are many actually lots of things. Contour, contour plots. What is what created this? It is given here. So one can go through that. Gray plot. So it creates that. There are some other plots. The subplot I wanted to show you. Subplot, if I do that it is possible to plot more than one in single page. How did I do that? Let me just... So I am saying this command. Look at the first line. It says subplot of 2, 2, 1. The first two argument says that my plot area is going to be divided into 2 by 2. That means total of 4 and each one is numbered. So in the first area I have plot 3D, 3D's demo, whatever that is, because that is empty bracket. That means I have whatever it is going to execute, it is going to execute and put it in location 1. Second location it is going to give an example of plot 2D. So this is 3D, this is 2D, this is histogram plot which is here and then gray plot which is here. So it is a 2 by 2. So it is possible to do in fact a 3 by 3 or 2 by 3 or 1 by 2, whatever. You can put all these things. So it is very nice. And of course once you have it, if I am not mistaken, you can print it. Any of them printer selection, landscape, portrait, black and white color, line printer. Let me see what will happen if I print it. If the printer is connected, it could print. There is an export also. Export, then I can export it as per script, file and so on. So all those features are available. So the plots are nice. Actually we have a demo of psychos. I am not happy with the psychos demo here but in the disk that we have given, the demo 2, I will just play that even if you cannot hear it, it is all right. Just follow it. At least you will be able to see how to do that.