Hi, my name is Yaro. I'm a software engineer at AdShade and Envoy Contributor. My co-speaker today is Takeshi, who is also software engineer at AdShade and contributor to ProxyLasen. In this session, we'll present you the work that we've been doing to enable you more accessible way to develop extensions for Envoy. So here is our agenda for today. First, we'll explain why WebAssembly out of all the things. What is the problem? Then, we'll talk specifically about WebAssembly in Envoy. And next, we'll introduce you Envoy SDK for Rust that we've been working on. And our primary focus will be on lessons learned because they are not limited to Rust and Go. We've picked those items that are universal and with minor changes can apply to every language. After that, we'll demo a practical, ready-to-use extension that has been developed using this SDK. And then Takeshi will take over to update you on almost Envoy SDK for Go. We'll finish with key takeaways called to action and Q&A session. Let's be clear about the goals we set for the session for ourselves. We want you to walk away out of the session knowing what WebAssembly in Envoy is all about, how to get the most out of it as of today and what other lessons learned by the community so far. So this is informational component, but there is also inspirational one. We want to inspire you to give WebAssembly a real try, not in a year from now, when you might think it will be finally production ready, but today. So give it a try to extension that you've been developing and that we'll show you later in the demo section. Try to develop Envoy extension of your own. Try to develop Envoy SDK for your favorite language. And ultimately, join the community and help us to develop all these things together. So as attendee to this conference, you're probably familiar with the status score of Envoy extensibility. You have to develop custom extensions in C++, statically link them into Envoy binary, maintain a custom build of Envoy, keep up with upstream changes, keep up with security releases. Overall, there is a lot of burden involved when you decide to extend Envoy in such a way. That's why Envoy community has been asking for a long time for a different extensibility model. Where extensions could be loaded into Envoy dynamically and ideally, it would be possible to develop extensions in languages other than C++. And WebAssembly is an answer, is technology that make it all possible. So WebAssembly is a virtual machine and compilation target for general purpose programming languages. What it means is that you can develop applications in programming languages like C++, Rust, Go, but when it comes to compilation, compile into WebAssembly code instead of machine code. Envoy plays a role of WebAssembly host. It's responsible for loading and loading WebAssembly waste extensions at runtime, for exporting APIs that such extensions can use and integrating such extensions into its regular request processing flow. The final piece of the puzzle that you need to know is ProxyVasemEbi. It's a specification of a low-level interface between Proxy and WebAssembly-based extension. As its name implies, it's not limited to Envoy and it's meant to allow the same extension to run inside various proxies compatible with this pack. Very ambitious goal. So the next question is why Rust? As we mentioned, you can develop WebAssembly-based extensions in any language that supports compilation into WebAssembly code. So how do you choose one of these languages? We prepared a table and we suggest you to try to make the decision to try to answer the following questions. Can you use features of this language, all features of this language and all its standard library if you're going to compile it into WebAssembly? Will you be able to reuse other libraries in the system and will the language retain its original performance characteristics if compiled into WebAssembly instead of machine code? Well, as you can see, C++ and Rust are the most obvious choices. However, don't be discouraged about AssemblyScript in tiny go. Just set your expectations right in advance. So to be fair, there are other SDKs available for Envoy. C++ SDK, AssemblyScript SDK, and even Rust SDK. So why did we decide to develop yet another one? So after looking into all these SDKs, we came up with a slightly different set of requirements. First of all, we want our extension model to be independent from rock proxy wasm EBI. As we mentioned, proxy wasm EBI tries to be compatible with all proxies out there, which means that it's not really aligned with Envoy. So when we develop HTTP filter often for Envoy, we want to call it HTTP filter and not HTTP context. When we develop HTTP filter factory, we want to call it this way instead of root context. And when we develop access logger, we want to call it this way instead of, well, there is no even equivalent in proxy wasm. Next, we want to develop all types of Envoy extensions. And we want to use the same SDK for all of them and the same model for all of them. Next, we want to have seamless migration paths for existing extensions from C++ into Rust WebAssembly. And finally, we want source code of our extensions to be unit testable. So here is a quick glimpse into Envoy SDK for Rust to give you an idea of how the source code looks like. This is Hello World HTTP filter, where we handle request headers. Next, this is factory for this HTTP filter responsible for creating new instances and initializing them with some shared state. This is an example of how to use APIs provided by Envoy host. Yeah, like in this case, stream info API that you can use to find out more information about current request that is being processed. And finally, example of a unit test where we create something called fakeEnvoy, set up listener, send request and assert response. So the primary goal of the session is to share experience. So let's work through the issues we've met while developing this SDK, the lessons we learned and some random notes on the current status of ProxyVasem API and Envoy. Error handling is a crucial to every application. This is why the very first question you might want to ask is what happens when things go wrong? So what happens when extension fails at time time? Let's try to find out by introducing intentional error like index out of bounds error. So what happens if you try to run this code? You'll find out that until very recently, Envoy was completely crashing after such a bug in extension code. So apparently, the assembly sandbox wasn't a true sandbox. Right now, Envoy behavior has changed and it doesn't crash anymore, but it doesn't work either. Once error like index out of bound happened, the filter stops, completely stops working. So if you look into the cost of this error, it happens that when panic is happening inside the assembly code, its execution gets terminated abruptly without doing stack unwinding. It means that memory on heap and logs are not released and consequently, it's no longer safe to use not only a single HTTP filter instance where the error has originally happened, but the entire wasmbm. In other words, when error happens, it affect not only a single HTTP request, but rather all requests that being processed by Envoy in parallel. So what solutions can be there? First of all, without proper support for stack unwinding that should be implemented by WebAssembly engine and your programming language, it's not possible to handle this station gracefully. Until then, until such support is implemented, avoid panics in the source code of your extension and your SDK. As an example, we've designed Envoy SDK for us to never panic. There are no calls to panic and rep-expect in our source code and all APIs must return as old type instead. The next question, so once you eliminate all the panics, the next question is, how do you handle errors? And here is an example of, once again, example of our source code. This HTTP filter and callback, which allows extension to observe and manipulate request headers. This method itself return result type instead of panicking. And inside this method, we called one of APIs provided by Envoy, get request headers. The one thing that you need to know about calls from extension into Envoy, is that all such calls can end up with an error and you need to handle them in some way. However, in most cases, those errors are not recoverable and the only logical way that you can do just to propagate it up. Rust provides very convenient syntax, I like this question mark. Operator that allows you just to propagate error up. But in the end, there must be some code somewhere that actually does error handling. So our solution to that, that we move all just error handling logic out of your extension into SDK itself. So as long as your extension returns error and not panic, we will be able to provide proper error handling logic. So for HTTP filters, we will reply with HTTP status 500, internal service error, and for network filters ideally, we would close the connection entirely. However, it's not possible right now because Proxy Watson EBI doesn't support closing connections just yet. Next about error handling, you need to know that WebAssembly doesn't support taking a stack trace. So if we take a look into our array index out of bounds error once again, and the log, and the line is logged that it leaves, it doesn't have the entire complete stack trace, but rather only a single line. And often one line is not enough to understand the entire context that led to this particular error. So this issue is not unique to Rust. It's inherent to WebAssembly itself. And in order to fix this, there is a proposal in Vasee, which is a system interface for WebAssembly. Until it gets fixed properly in the meantime, the only workaround is to enrich the context for your errors manually. For example, by wrapping them before propagating them up. Watch out for string type in your programming language. In C++ and Go, string is an arbitrary byte array. While in Rust and Assembly script, string must be UTF encoded. So the problem is that when you, with things like HTTP header values, are not required to be UTF-8 encoded. So anyway, we'll happily pass these values into your extension. And your extension will crash while trying to treat them as UTF-8 encoded. And the problem is that it's security vulnerability. Attacker can crash your envoy or make extension non-operational by sending specific request data. So as a solution in NO SDK for Rust, we're using a custom type by string to be very specific, very explicit about those places where UTF encoding is not guaranteed. Also, we'd like to ask ProxyWasn'tSpec to be more explicit about encoding of strings in its APIs. Because using by string everywhere is not a solution. It makes things more complicated when you need to pass such a value into next string-sanctuary API. Let's move on to unit testing. There are two approaches how to unit test code of your extension or SDK. One of them is to compile into WebAssembly code and run it inside a real WebAssembly host. Second option is to compile into native machine code and run it without any ties to WebAssembly. And the problem here is that to be able to run unit test inside a real WebAssembly host, you need at least VACI support which is a system interface for WebAssembly. However, there is an issue in ProxyWasn'tEbi in particular function named ML log that makes it impossible to use it with the Rust tool chain. So at the end time, we run our unit test by compiling them into native machine code and running them without any ties to WebAssembly which is not bad, just not perfect. Next, we want to notice that we've gone a great length to support unit testing of extensions.  On top of this, we also provide test framework that simulates and where request processing flow. It might seem too much and it probably is but it allowed us to catch some blanks in ProxyWasn'tSpec and some bugs quirks in real envoy implementation. The next things to watch out for is that ProxyWasn't to be aware of is that ProxyWasn'tSpec emits details in certain cases, leaving no other choice but to learn how to use API by looking into invoice source code instead. For example, so-called mysterious proxy get property API, which under the hood uses some ad hoc data encoding. So after reverse engineering and resources, we were finally able to offer much more friendly API for the users of our NO SDK for us. Like in this example, when you, we are now able to provide strongly typed API to get from envoy information about single request. For example, connection ID, request ID, plugin name. And finally, final thought about ergonomics of SDK. The SDK should make a straightforward how to use APIs correctly. In other words, ProxyWasn'tSpec should not be on the learning parts of every extension developer. So to make it possible, we have to be very opinionated in our SDK. We deliberately abstracted away from the low level ProxyWasn't API. To me, our API is more idiomatic to the language and more intuitive to the user. And finally, it's demo time.  You're just, are there any real extensions that has been developed this way? And this, you're like proud moment where we can finally share with you some work that we've been doing at that trade. So at that trade, we care a lot about enterprise use case and so-called legacy software. Those legacy systems have been around for decades and we'll probably stay around for another decades. So instead of fighting them off, we embrace them. So we've been working on something called, can be called enterprise suite, which consists of extensions and extensions that are not cloud native, they're not hot technologies, but still they can be quite useful in the price environment. As an example, it's SNTP filter and LDAP filter and mobile follow. So in the demo, I will show you SNTP filter, but if you prefer LDAP filter more, you can check it out on your own. The use case for Envoy SNTP filter is to bring visibility into how your applications make use of SNTP. So let's see how Envoy can help us with that. We'll first set up test environment. We'll run SNTP server convenient for use in development. It has some use interface we can use to make sure that messages indeed arriving at SNTP server. And we have an example jail application that will be every second, we'll be logging an error and every error will be sent by email. So let's run this application and we should see messages start arriving. So let's take a look next, what's going on the wire. You can see that SNTP is a simple text-based protocol where client is sending commands and server responds with replies. So a typical email transaction consists of client filling in fields like from and to and providing the message of email. Once SNTP client is finished sending message body, transaction is email transaction is considered committed and now it's time for server to either accept it, accept email for delivery or reject it. In this case, SNTP server accepts email message and client can now quit and close session. So let's see how Envoy can provide visibility into this flow. First we'll reconfigure application to send emails to Envoy instead of sending them directly into SNTP server. And then we'll start Envoy with our extension, preconfigured. So we're using GetEnvoy tool to start Envoy with WebAssembly-based extension in it. GetEnvoy is one of the tools, open source tools we developed at that rate to help you get started with developing WebAssembly-based Envoy extensions. So let's see metrics. Okay. Okay, application is now started. Yeah, we can see that Envoy is now collecting metrics about SNTP traffic. At high level we see number of emails that Envoy has been seen, send by client, number of email accepted by SNTP server for delivery and number of mail rejected. We can also have course-grained metrics about commands in general without going into details which exactly commands. So this is another use case, just to demo. Like any other extension, our SNTP extension supports configuration and one of the options is how many metrics to expose. So let's reconfigure and let's restart Envoy. So we activated, so we want to see more metrics, in particular, metrics for every single command we saw in this flow. So for every single command like mail, recipient data. So yeah, now you can see that we have is metrics for every single command. So this was completely successful flow where all commands were successful. Let's do something different. Let's change configuration of SNTP client to so that SNTP transactions will end up with errors and see if Envoy will be able to catch this. Yeah, you can see it is counter, counter that start increasing. It's a number of failed commands. If we now go back to Wireshark and capture traffic one more time, we can see that the overall flow has changed. So right now, you're just, email transactions are failing at a step where the SNTP client is trying to fill in two field with Envoy that value. Finally, let's take a look into the source code of Envoy SNTP filter itself. As you can see, it's indeed developed in Rust and it has a structure well, resembling a structure of native inverse tensions. We have configuration, we have stats, we have filter itself and we have its factory. And a filter, it's a network filter and we override callbacks to handle new connection, downstream data, data from SNTP client and upstream data, data from SNTP server. Since SNTP is simple text-based protocol, so we chose to implement protocol parsing completely ourselves, but in case of LDAP, we would use third-party library for parsing LDAP which is binary protocol. So that concludes our overview of Envoy SNTP extension and now it's time to Takeshi to update you on SDK for GoLang. In this part, I'm gonna talk about Go SDK for proxy wisdom and its current status and challenges in the future plans. My name is Takeshi from TechRaid. So let's begin with why Go for proxy wisdom. Go is one of the most widely used languages in the crowd-native world, right? And being able to use existing Go library or packages is a very good developer experience for wisdom extensions. And also the number of developers writing Envoy extension will increase dramatically which is really great for both for Envoy community and the Go compiler community from wisdom perspective. That's why I started working on this project. And so let's talk about compilers. There are two compilers out there which comply with Go language specification. And speaking about proxy wisdom, it's not, the official compilers cannot be used for producing proxy wisdom compatible binaries yet because we cannot control export sections and also it assumes that the running host environment is kind of Go specific JavaScript environment. So that's why we choose TinyGo as a compiler for our SDK and the TinyGo supports was the target and this is my major contribution to TinyGo and also TinyGo allow us to control import and export section. So, and also speaking about binary size, how the word binary, binary, the official compiler's binary is much larger than TinyGo as you see. So this is why I think TinyGo is the way to go speaking about proxy wisdom. So Go SDK, there is some repository named proxy wisdom Go SDK in Tetrate Labs. It started as my personal project and then moved to the Tetrate Labs and it depends on TinyGo. And also all the examples in C++ and Rust can be re-implemented. So it's usable and so please give it a try. And also it supports envoy host emulation for unit testing. So which means you can use Go test command for testing your filters or extensions without running onboard processes. This is really great for developers because we can develop our extension just like you do with the native applications. So what are the challenges we are facing? And the first is that some of the existing libraries are not supported yet. There is several reasons, but some of the system cores are not available in TinyGo or proxy wisdom C++ host. And for example, you cannot use Crypt run package or you cannot use OS.getM and also time.now. These are not available currently, but they will be supported. And also reflection packages is not fully supported by TinyGo. So you cannot use JSON package, but this is highly demanded. So I'm gonna work on this. And also Gavage collection is re-implemented in TinyGo, which is totally different from the official Gavage collection. And it uses simple conservative backend sweep and it needs to, I think it's necessary for us to assess performance impacts on proxy wisdom. Maybe we got to develop our own GCR algorithm tailored for proxy wisdom. And also, GoRoutine is almost unavailable. TinyGo uses a little VM called routine, but no schedulers runs by default in the event driven and the thread log of VMs in Envoy. So you could use GoQ order, but no one can predict when this GoRoutine will be run or things like that. So what's next? Contributing back to TinyGo and the reflection package implementation or other system core support in order to be able to use existing Go libraries. And also we need to do some GC performance analysis, have been working on this. And also maybe, as I said, we may be, we have to have custom GC for proxy wisdom. And also GoRoutine support. In order to do that, we must answer questions like how to deal with GoRoutine in a thread log of wasn't VM executed in the event driven manner. So that's all. That's all. And let's wrap up. So start wisdom today. Let's start developing wisdom extensions. There are four languages out there. And also you can contribute to the community by developing SDK for your own favorite languages. And also there is gotembo project that you can use, that you can easily get started with wisdom extension. We accumulated lessons learned. So please give it a shot. And also join our community and give us your feedbacks. Thank you for coming today. Let's get onto to a session.


I think of myself as a feminist artist because I'm for feminism. But my work is not generally about feminism per se. It's about, I mean, but something that I take as a given is we want people to grow and be liberated and equal and we're moving towards a better world, you know, a better world. That's the idea. That's the liberal idea is we want to move to a better world and it's not going to be a better world if feminism is not mixed into that. It just won't be, so it's automatic. But I could also call myself a gay activist too, you know, and certainly civil rights. All those things is all part of the same stuff. It wasn't my intention to focus specifically in this piece about a feminist art, but it would have turned out to be because I picked a prototypical, you know, Promethean feminist artist herself, Carolish Naiman, who starred in us thinking about, at least one of the number of people who starred us thinking about the body and the female bodies specifically. And I don't think that initially she was trying to load in political concepts that were specifically feminine. She was coming from, I think, initially kind of just a liberation kind of thing. Our piece is really specifically about Carolish Naiman. Also shows a kind of a general branching of interest in work that is about performance and the body and shows people as kind of previous artists who she claims influencer in some way. Our toe is really big for the theater cruelty. And then people who are working at the same time, and of course there was a real dialogue going on when she was working with the Judson Dance Theater and working with people like Claes Oldenburg and Al Capro and Robert Roschenberg. And then people who had a kind of more firmer idea about what it was that was going on. So when she actually started making work that was clearly about feminism, which is about ten years later, she was part of a movement by that time. She was part of a movement. No one else has really said as far as I know Caroli did this and when Annie Sprinkle did this that she was somewhat standing on the shoulders of Caroli but I could make those kind of connections and maybe other people had. So that's what that chart sort of did is that I laid out the people that Caroli claimed as her predecessors. Then her contemporaries that she worked with together developed these ideas and it actually picks a few high points in her career because I think she had a few really classic definitive pieces and they were ten years apart. Which is really great for an artist to be able to be hitting, because it's more than one mark. She hits more than one mark and usually a famous artist has one idea Caroli had more than one. And then that sort of echo of all that kind of work is the rest of the chart.


So, now what we are going to do, we are going to start the next set line on a screw jack. Square threaded screws, I have not gone to the any other type of screws, I have only taking square threaded screws, because for other screws mechanics is more complex. We are only going to typically consider you know where it is being used, it is used in as you can see here the jacks, you know house jacks press, then you have clamps.  But remember there are other applications also, for example it is used for clamp. So, as we all know what is the purpose of a screw, what is a screw? A screw converts a rotational motion into a translational motion, if you think of the motion, similarly it converts therefore, it converts a torque into an axial force, that is the basic concept. Remember what would be important here is that what is the pitch, pitch means that is the distance between the two threads and what is the lead, lead means if I make a perfect one revolution then how much vertical distance it will move, so that is the lead. So, these are two important aspect, so with that now how do I come to the mechanics of it, how do I draw the free body diagram and try to solve it. Remember that here is the screw, the screw is on a base, there is a cap and let us assume that the friction between the cap and screw is ignored for the time being. So, I have load, so I have to really either raise the load, so it is mostly used to raise the load. However, depending on the amount of friction you have, we can also make it self locking, we can hold the load and so on. So, it is again a question of raising the load or holding the load that we have to keep in mind. So, the question that comes into play that I am trying to let us say for the time being raising that load, remember the contact between screw and base, so here is the contact that is the main contact I am talking about and this is happening along a portion of their threads. So, you have a base thread, you have a screw thread, so this interface is going to be critical that is what the delivering the friction. Remember I have to apply a load P that means in the handle a torque is being you know a load is being applied, this force P is applied such that it produces a torque and that torque will be converted to an axial force mostly, so because it is going up and down ok. So, ultimately what is happening, if you think of it we can simply unwrap this inclined plane, let us say you think of this base, there is a thread on the base, how about if I unwrap it, it makes it inclined, how it is going to be inclined, but based on the and the lead going to be inclined, so 2 pi r if I open the amount by 2 pi r vertical distance moved is L that is the lead. So, the angle will be tan inverse L by 2 pi r ok, so you will have a lead and you will have a 2 pi r that is the revolution, where r is the mean diameter of the screw ok. So, remember therefore, once I unwrap the base ultimately what I can do, I can take the screw like the load coming on to the screw as a you know on a block, say block as if a block is on the inclined surface, remember this torque is now we have to take this torque as a equivalent force that is coming horizontal. So, if we go to the next slide we will see that what is happening exactly, so the unwrapping the thread with a lead angle of theta right. So, this angle will be called theta, now how I have unwrapped it, remember this is going to be 2 pi r and if I unwrap the thread then the vertical distance moved is L right, remember L and pitch is not same just be careful lead and pitch will only be same if it is a single threaded screw. So, if you have single threaded screw the lead L is exactly equals to the pitch, where pitch is the distance measured between 2 consecutive threads.  So, therefore, this entire friction force as we have learnt that friction force is independent of contact area although it is for a simple friction that is the assumption we are deriving if we skip the tribology of it. So, therefore what is happening you can clearly see that I have now during the impending motion upward that means, when you are trying to raise the load. Therefore, when we are trying to look at the motion of this block up that means, we are trying to raise the load screw is trying to advance on the upward direction what is happening during the impending state. We can clearly see that this coefficient of friction from that we can calculate the angle of friction right, why this angle of friction is coming into play remember impending motion is upward. If impending motion is upward the friction force is downward. So, what is this resultant the resultant between the friction force maximum friction force that is mu s and the n, n is the normal force. So, ultimately you can construct that force triangle I have a n here and I have a friction force here. So, n goes like this right and friction force comes like this and so, friction force and n that gives me resultant and q is the equivalent force remember that is coming due to the torque the q equals to a q multiplied by r. So, at the interface if you look at it I have a horizontal force right. So, that horizontal force multiplied by r is actually equals to p times a. So, that torque is being converted to this horizontal force that is as if helping the load means the load that I am trying to lift it is really moving on an inclined plane where this inclined plane is determined by what? Determined by the thread angle right the lead angle rather ok. So, ultimate idea all the time will be for a given w how do I find out the q clear. So, for impending motion upward this is my going to be free body diagram this was done also from yesterday's lecture right. So, we have once we find the q I should be able to know that what is the force p remember I am lifting the w at various strokes. So, that is assumed giving some stroke it is simply trying to lift the load. So, I am trying to determine that what is the force required such that there is no slippage at the point threads ok when I am trying to. So, this is for impending motion upward. Now, remember now you can easily think of what happens when the impending motion is downward. Downward means that load is just trying to come down ok this is verge of coming down. So, I am just applying a small force again remember when I want to you know lift the object or you know then I have a larger load when it is trying to come down that is lower the load then I have to apply a very small force p. So, when the impending motion is downward as we can all see the two situations can happen remember when impending motion is downward what happen in the process my friction force is reversed which direction is the friction force on the upward direction. So, if you will think of the force triangle where is my resultant now. So, depending on the coefficient of friction right I have the friction angle already defined.  So, the angle between the friction force and the normal force that is my friction angle right that is phi x. Now depending on the value of the friction force this phi s can be or rather depending on the coefficient of friction this phi s can be smaller than theta or greater than theta. Now here what we are saying it is smaller than theta. So, if it is smaller than theta then remember again I will be able to solve for a q and that q will be ultimately give me the value of p and that p will be much lower than what we have done in the previous case when you are trying to raise the load. So, when we are trying to raise the load I have to apply more force than compared to when I am trying to lower the load. Now what is self locking you can see that you may have to apply if the friction coefficient is really large such that your friction angle is greater than theta right. So, resultant of the friction force and the normal force as you can see that will make the resultant which is actually on the left hand side of this vertical line. So, in other words phi s is greater than theta. So, coefficient of friction is large ok. So, in that way what we have to do now you have to maintain the equilibrium of the body I have to reverse the q. So, that means instead of applying the torque as we are doing in the previous case we are applying the torque how counter clockwise right. The torque was applied counter clockwise. So, force was this way perpendicular to the handle right then you have to really give a clockwise torque. So, we have to give it a clockwise torque to actually lower the load ok. So, now can you tell me when we do not need the q when q goes to 0 q goes to 0 now that is very critical. So, q goes to 0 when r is collinear with the w that means phi s equals to theta now that really brings in one very good point. What does it state that when q equals to 0 r is actually collinear with w. In other words phi s is equals to theta that is the critical angle of self locking that means I do not need to apply any load on the handle and I can always find the minimum load that will be sustained by the screw. The screw is not going to come down automatically. So, it is completely determined by the coefficient of friction and when that angle of friction becoming theta I can say that that is the critical angle for self locking as if I have to apply no load q right and the body will be able to sustain some load is that clear now. So, three situations as I explained here that first one is the raising the load just to raise the load what is happening remember friction force is this way right now downward friction force is downward. Therefore, resultant is moved this way between the friction force and the normal force. The other case is impending motion downward now that can lead to two situation when you are just trying to hold the load and in other case the friction angle is very high. Therefore, you really have to apply a force right that is from the other direction in order to lower the load. Now, can you have a brief discussion is that concept is clear now. If you just buy this simple mechanics logic now you can approximately solve some of the problems really challenging problem using the concept of threaded screws yes. So, just you know few questions I can take for discussions on only the threaded screws square threaded screws 1 0 6 0 go ahead for your question. Sir, I doubt in belt friction sir. Ok, just go ahead quickly. Ok sir, the sliding friction will act when the tension is maximum sir. So, what is the direction of sliding friction and the tension is maximum the sliding friction is seen on the maximum. The friction force right in the impending state whenever you have an impending state friction force has achieved this maximum value is that clear. Friction force will achieve a maximum value when it is at the impending state that means the body is just trying to slip out. Now, how do you determine the direction of the friction force is that what your question? Think of it in the belt friction I have this drum just look at my hand. If I put a cable right and let us say cable is trying to tilt this way. So, from your direction it will be counter clockwise right then your friction force has to be on the resisting that motion right it is trying to resist that. Therefore, tension side will be always this side higher tension side will be this side lower tension side will be this side because that negative friction force should be equals to the other one. It is equilibrium, but you cannot take just you know sum of force along x equals to 0 in this case. Think this way that this tension has to be higher because resistance is going this way. 1 0 2 6 go ahead for your question. Good afternoon sir. So, regarding your presentation in the first position first problem to lower the load or to keep equilibrium the force record is 181.15 Newton. At the same time to lift the load upward it is 132811 Newton. There is a drastic change in load record for lower tension side. So, considering the load as well as lifting load. Is there anything wrong in the answer or that much of force is required to lift the load. So, your question is just do not think about the number just think of physically that why do I need a large force when I am trying to lift an object up and why do I when do I need a very small force when I am trying to hold when do I need a very large force. When I am trying to pull the object up because there is a friction force that is resisting right think of physically. In one case the impending motion is upward right another case impending motion is downward. You think of in simple sense if I have to lift the object up I will always need a higher load. If I have to hold the object which is trying to going down I will always need a very small load. This is intuitively think it out that number that was put in the first problem is absolutely correct because it is controlled by the you know friction that is coming into play. There are so many wraps and all that. So, those wraps are taking care of those friction, but point is that when you are trying to raise the load we have to apply really large force to overcome all of the friction effects right. But when I am just trying to hold it that means this mass is trying to coming down I just need a very small force. So, just physically thought it out with the free body diagram. Thank you.  The screws concept is clear it is a block on an inclined plane that is all we said 1, 2, 0, 5, Sir my question is during relationship of T2 by T1 is equals to e to the power mu theta we choose the fixed pulley instead of having the motion between the pulley and belt and the same is regarding belt drive we are having both motion between belt and pulley. Your question is during the derivation we have used fixed belt on a pulley. Does not matter suppose I have the pulley and I have the belt right the way I have solved is that this belt the belt is trying to slide in some direction. It is still not slipping, but it is verge of slipping. So, I tried to find out which direction my tension will be maximum because there is a friction force if it tends to go this way then friction force is this way right ok. Now, based on that logic I derived the formula considering the impending motion. Now, remember the same was done during the simple friction problem also f max equals to mu s n how did you go to that. So, what happens I will just again explain it why it is like this. See the basic concept is as follow you are increasing this value of p. So, p value is increased right. So, you will have a friction force friction force. So, you are trying to break this barrier of friction force there is a maximum friction force that will be controlled always by this n, n is equals to w in this case let us say ok. So, we are really going here keep on increasing the p friction force will gradually increase. There is a barrier point we call this that is the maximum friction force that the body can take. What happens afterwards? It simply drops right and then we say ok I have a kinetic friction coming into play because when you have you know motion is already created then I need actually very small force to move this block forward. But see my point here is I am only interested in ok. Now, this part will result the result the block under motion. So, up to this one I always have the equilibrium and this one I am going to have the dynamic that means body will be either in acceleration right then I have to really equate p minus f should be equals to let us say mass of this block multiplied by acceleration ok. So, you always derive the formula at the impending state at the impending motion I will always derive the formula and I will simply can say that the same can be used when we are talking about the kinetic coefficient of friction. Remember kinetic coefficient of friction comes into play also for constant motion problem ok. So, that is the whole idea that we first get the impending motion and then they just substitute the kinetic coefficient of friction to get the you know same formula. But remember kinetic coefficient of friction when we are using the kinetic coefficient friction two things can happen one is the constant velocity problem right one is the sleeping actual sleeping that is taking place. So, when the actual sleeping is happening we are always going to use the kinetic coefficient of friction when there is no relative motion then we are always going to use the static coefficient of friction ok. Ok sir thank you yeah go ahead. I have one doubt related to the belt and pulley system at our domestic floor mill sometimes foreign particles are entered you know between the belt and pulley. So, the effect of efficiency of the system decreases. So, can you suggest me some considerations to increase the belt from the system efficiency? Your question is how do I increase the efficiency of that system? Do you remember that problem we talked about regarding the idler pulley introduction of idler pulley? See you can increase the contact angle that is one of the options. How do you increase the efficiency? I have only choice is to increase the contact angle. So, that will increase the torque transmission capability. Now there are other ways I am not getting into that. So, that requires more conceptual you know understanding, but simple way would be increase the contact angle ok. Yes sir thank you sir. See there are problems here, but I think this problem once we understand the you know block on an inclined plane these problems can be tackled. So, I had one problem in the lecture slide and all of you should have the lecture slide in the moodle ok. So, in this problem you see we are using the clamp to hold two pieces. Now the clamp only thing is that we have a double square thread of mean diameter equals to 10 mm with a pitch of 2 mm ok. Now if a maximum torque of 14 Newton meter is applied in tightening the clamp determine the force exerted on the pieces of wood. So, we are interested in finding out what force is going to this wood as I apply a torque of 14 Newton meter. The another one is the torque required to loosen the clamp. So, maximum torque is one part the another one is the torque required to loosen the clamp. See one in one case we can think once we are tightening then you are trying to actually raise the load that is the first part. So, we are trying to raise the load in one part in other one we are simply trying to hold the load right. So, loosen the clamp. So, in loosen the clamp will be again you can think of that whether my phi s that means the angle of friction is greater than theta lead angle or less than theta that is less than lead angle ok. So, the concept is similar to what we have studied. So, step by step if you want to go ahead go ahead calculate the lead angle ok. And as I said that lead will be twice the pitch for a double straight double threaded screw and then we can simply use the concept of block on inclined plane ok. So, that will solve for the first problem first part and the second part we can again use the concept of you know impending motion downward and that will solve it. So, I will try to flash it very quickly the steps that are required because as such answers are very simple these are very straight forward problem. So, first find the theta tan theta equals to L by 2 pi r and here you can see L equals to 4 mm why the 4 because it is 2 times the pitch ok. Then we can calculate the friction angle also angle of friction was calculated angle of lead was calculated right. Then ultimately I had to find out this q remember q multiplied by r that should always be equals to the torque. So, what is the value of q? q times r mean diameter that is equals to the torque. So, I get the value of q ok. So, now therefore, what we have is in this case if you draw the triangle rule you know just draw the use the triangle rule this is theta plus phi s right we can get the value of w. Similarly, when the impending motion is downward remember you want to loosen the clamp and remember to start the problem first we have found out that phi s phi s is greater than theta. So, phi s is greater than theta will create a self locking mechanism that we have already discussed. So, therefore, if you look at the resultant the resultant will be shifted this way and q will come from the other direction. So, you have to really apply the torque on the other direction ok. So, with this then you can again calculate by based on the triangle rule we can find out what is the torque. Remember every time you are doing this problem it is a body with three forces right and they should be concurrent ok. So, that is the concept. So, there are three forces which are concurrent in nature and you can also do sum of force along x 0 sum of force along y 0 that is also the possibility ok. So, but triangle rule would be more appropriate to solve this class of problems. The other problem I am not going to go through it once we understand this concept you can also think of you know more practical applications as you see this kind of problem. So, the automobile jack is being lowered or it is being lifted we are applying a torque here right. So, we have to find out the torque to raise the automobile let us say we have a automobile here. So, that is 4 kilo Newton you know load is coming out. So, we want to find out the magnitude of couple required to if we want to just raise the try to raise the automobile. So, again impending motion condition comes into play. Now, remember the thread direction is different in this case in one side I have this side right handed thread this side left handed thread ok. So, ultimately as you apply the torque a and c point will try to come close to each other. If you apply a counter clockwise torque then it will try to go away from each other. So, in one case you will raise the load in another case we are going to lower the load that is all. Remember what would be the first step in this problem to get the force transmitted in the screw and that you can do because these are all 2 force members connected. So, if you use the 2 force member concept we can find out what is the load that is coming in the screw. So, this 4 kilo Newton will be converted to an axial load along the screw that is the whole idea and once we get that you can draw the free body diagram from this free body diagrams one can get what is the load coming on the screw ok. So, once you know this load. So, this is going to be now applied. So, this is going to be the applied on that block. So, now you are going to the block analogy. So, in that block this is now my FAC ok and then you can see that to you know raise the load we can again try to find out the lead angle is found here. So, that is done right then you have the phi s phi s is the angle of friction ok. So, based on that we will be able to find out the value of q right once q is found we should be able to get the moment. So, only thing this moment this torque is one side. So, remember you have to multiplied by 2 times because you have taken only FAC. So, we have solved the problem from one side ok. You have to the final torque that is required is this ok. So, point the time trying to make. So, this is going to be same as that of our simple friction concept that we have developed yesterday and based on that I can always you know calculate let us say what is the torque required to raise a particular load or to lower a particular load on a screw jack ok.


So about one month ago I opened up a discord for the channel and as of 10 56 a.m. on Saturday The discord now has over a thousand members, which is honestly kind of insane because I mean I knew you guys have been asking me for a discord for like the past five years But I didn't know you guys wanted it that badly, you know, I didn't know it was gonna be this stacked this fast I thought I would have you know, like maybe like 20 people But uh, yeah, there's a thousand of you in there now and it has just been incredible Just seeing how much insane talent and creativity and all the cool things that you guys do in it I really had no idea how cool this was gonna be. So for everyone who joined Thank you so much for anyone who's new here The main point of the discord is for us to help support each other with thumbs up Likes and fire as we make progress with our goals every day I'm a firm believer that every single day you should spend at least five minutes Progressing whatever it is you want to do so no matter what you do No matter what you're working on or what kind of project you have Take at least five to 10 minutes at the end of the day to move your goals forward And then take a screenshot of it and post it under daily progress So we can see what you're up to and leave some support If you're a programmer and you just learned how to print hello world share that moment here If you just figured out how to add bones to your rig share it here If you made a beautiful sketch or generated a cool image share it here Whatever it is you're working on that day. I don't care how small or simple what you did was Progress is progress screenshot and show us what you're up to That way we can leave you likes and we can help motivate each other And if you've completed something cool go ahead and post it in the completed works area With all the distractions that we have today finishing anything is a miracle and it's worth celebrating So we might as well do that together here. You can also introduce yourself Let us know what you do and what you're hoping to do We also got some video resources if you're a developer or a computer artist who just needs some direction And if you're an armored core player, there is an area for us to just talk about ac stuff And if you have cool recorded footage of you fighting opponents in armored core 6 Feel free to share that here Or if you have video footage of you struggling against certain kind of opponents in acs And you want some advice to maybe improve your game share that here Or if you're just experimenting with new weapons and you just want to share the results The combat clips area is really just a place for any cool armored core related footage If you're on the support squad Then you will have access to some special discord back rooms where we have a general area Where I post announcements for what's coming next Then there's an area where I show what I'm up to behind the scenes in between each video And there's also one extra room where I work together with people who know more than I do In order to help figure things out that we don't know right now We are developing a new unreal 5 color control system and it's coming along pretty well But I'll talk more about that as it starts to come together regardless I just wanted to take a few seconds to celebrate reaching 1k on discord with you guys It's really been a blast reading all the stuff you guys do There's just so much talent creativity and cool things that you guys do in the community And I really feel lucky to be able to be a part of it as I always hope you have a fantastic day and I'll see you around


What's the word, y'all? The Toronto Raptors lost again. They're 13 and 18. If I'm not mistaken, they're in a sixth game, losing streak after losing to the 76ers in Philly today. And I'll be honest with you, man, I'm extremely disappointed in them through the first 30 or so games of the season. If you go back and watch my Eastern cops prediction video, I predicted that they were gonna be a four or five seed out East because I was a firm believe in a few things. I thought that their defense is gonna continue to be a lead with them running the lineup where everybody's six, seven and above other than Fred Van Vleet. They're gonna cause a lot of turnovers and get out on the break. I knew that Pascal Siakam was gonna be able to build on this all NBA season last year. I thought that Scotty Barnes was gonna be taking a sophomore year jump. I think he was gonna be an all star all NBA player, but I thought he'd be more productive in the sophomore season versus rookie season. And I thought that the lack of production for Fred Van Vleet in the second half of the season was more of a showcase of lingering issues that he was playing through instead of it being actually him. And well, out of everything I just said that made me confident in the Toronto Raptors only one thing is really true. And that's that Pascal Siakam is great. Pascal today, 38, 15 rebounds, six assists. A very, very great game. I'm watching this game the entire time I'm thinking is anybody gonna help? Fred Van Vleet ended with 9.6 rebounds to reassess and jacked up a lot of shots. And you know what they were all good looks especially we got to late fourth quarter and overtime or whatever, all good looks but they were not falling. And I know they ended up losing this game but it's hard to say this wasn't a bad loss considering they were up but y'all played in my opinion solid basketball for 40 minutes. It just so happened those last eight minutes plus overtime it wasn't that great. So let's do the silver lining thing before we start talking about the struggles of the season. And this one specifically the defense look way better today than they had looked over the last couple of weeks. And that's a bright side when you're playing against Joel and B James Harden and a lot of different weapons. The defense is good. I just don't love the amount of open corner threes that were given up this game. And again, shout out to Tobias Harris, bro. He was amazing. I mean, he should have had four more points but they took away one because PJ Tucker said in the league of screen regardless Tobias Harris over the last let's say five or six games or so has been looking really, really good. And I'm happy for him in the 76ers because they low keeping very under the radar we eventually get to some 76ers talk in a little bit. But let's talk about those other things that I was wrong about. The defense so far this season is if we exclude the 40 minutes today but it has been lackluster compared to what we're used to for the Toronto Raptors. Well, Kenny, we were missing OG. People miss this and that. Every team in basketball is dealing with injury issues. So I understand it, but I don't at the same time. For example, the game against the Warriors was that last night, two nights ago. You know what? Actually, let's not even talk about it. It was just bad. And Scotty hasn't had the same impact this season as we saw his rookie season. I know it's very memeable and everybody's talking about Scotty versus this player. Scotty versus this young player. Oh, they didn't raise Scotty Barnes for Kevin Durant. I still believe that Scotty is going to end up being a stud, but right now when I watch him play he feels passive for some reason. Last shot and get that feeling. Last year didn't feel like that he was afraid to put the ball on the floor or afraid to go to the basket even if that resulted in a bad shot at him or afraid to take a jump shot. So far, it feels like he is being just out there, which is not good for a guy that you believe to be a super cornerstone of your organization. For Evan Bleat, I mean, the last couple of games, see, I think he had a 37-point game, a 37-point game, but then tonight he had this big ol' stinker. He's just an inefficient shooter at the end of the day. Inefficient score. I mean, in those, actually, in those other two games he was getting to the basket, which is dope.  Him getting to the basket opens up the offense for a lot of different people. And this one, he couldn't really do that because the 76ers have a bunch of like hard-nosed big defenders, whether it be Joel and Beat at the rim or PJ Tucker on some help or to buy his hair. They have a lot of people that can go out there to defend, so he didn't really have the opportunity to get to the basket at all. Tonight, there's a lot to be desired for Evan Bleat so far this season. I'll just say that. So because Freddie is struggling to shoot the ball and because Scotty isn't a plus shooter to shoot, even though his catch and shoot percentage last time I checked was pretty good, overall, they just don't have any shooting on the team. Like any. I think they were 29th in basketball behind the Chicago Bulls, of course, when it came to three-point production this season. That's not good. That's not good. When 2022 going to 2023, you have to be able to shoot the three-point shot to be a successful team. This is a team that doesn't do that. Half court offense is just bad. It's like, if Pascal came bell us out, we don't really know what we're doing. And if they aren't causing many turnovers and they're not having great defenses, it's a lot to be desired for the Toronto Raptors. So what do they have to do? I don't know. I know there's a lot of conversations about if they should make trades, and this is my take on it as an outsider looking at Toronto Raptors. I don't know what piece should be safe or pieces should be shipped out. But what I will say, if you're gonna have a guy like Pascal Siaka be on your team, you have to do right by him and build a roster that's good. Because the version of Pascal Siaka we are getting right now is top 15. So if we have a top 15 player that we're not gonna sell, I don't know if they will, but let's assume that they're not gonna sell Pascal. We have to put a team around him that's good to his strengths and also help him out. Cause right now they're doing him a disservice. I don't know what that looks like, but I will say I do trust the front office over there. They have a track record of being good and making these tough decisions and they have one coming up for sure. Let's get to some of the other games of the day. The Atlanta hogs beat the hot Orlando magic. Shout out to Orlando. They made this a game behind Markel Foltz, a little scoop layup, the foul obviously. And then Dejante closed it out, hitting the free throws. There's only free throws of the game. The bright side for this, for the Atlanta hogs is the last couple of games, Trey Young has looked more like himself than the first 20 or so. Where he ended up with 37 and 13, which is a crazy stat line. But deeper than that, he shot it officially. And me and the guys were talking about in our podcast recently about the Trey Young struggle of shooting and how we didn't really understand it and that we knew he'll eventually get there. But at that point, he had only had like two games in a season where he has shot over 45%. I was a little while ago, but he had shot over 45% from the field. That's not good for Trey Young. And the last couple, he's been efficient, that he's been helping them win. And I don't know if this is the turn. I really don't know. But they beat a scorching hot team and they should be happy about that. I'm sure the Mavs will get their video eventually. But we spent five minutes on the Toronto Raptors in their struggles. I wanna go the opposite direction and start shining some light on the team like the Minnesota Timberwolves. Cause they're without Carthage Towns, Rudy Gobiar went out with an injury. Kyle Anderson didn't play today. Who else didn't play? The list goes on and on and on and they beat the Dallas Mavs. Don't ask me to talk about the officiating or whatever. I'm not here to do that. They beat the Dallas Mavs behind Anthony Edwards. And I'm very close to making an Anthony Edwards centric video about the last week or so of basketball for him. Because if you remember when we were talking about the Rudy Gobiar trade or just Anthony Edwards in general, one of the main things I said on this channel is that what's gonna make Anthony Edwards at threat deeper than just what he is right now will be his ability to play make. If you're the first 20 or so games he was kinda used as an offensive go get us a bucket and not much more. He was running some pick and roll, Rudy Gobiar, but he never really passed the ball as more shots. These last couple days games bro has been out there play making like it hit a whole nother level. It has hit a whole nother level. Listen, I gotta see it first hand when he went against my Chicago Bulls goddamn. But like today a nine assist one turnover game for Anthony Edwards is something that they gotta make a plaque for. Because that was not something a lot of people saw coming. So his play make it opens up the game more to like now he can go out there and get his own when he needs to. And in his post game interview I think it was yesterday or whatever it was against the Bulls. He was talking about how recently him and D'Angelo Russell have kind of shared the point guard position. And he said it's opened up his eyes more because now he's not necessarily focused on just taking shots because he ain't touched the ball recently. It's like I could create for others. And if we could keep that mindset for Anthony Edwards once everything gets going and everybody comes back it could be a scary sight for a lot of people. We'll be able to do this when everybody's back is the big question. But these are quality, quality wins where we watch Anthony Edwards develop. And these are the type of wins you need. We're talking about a young guy that you bought into by making the Rudy Gobert trade. You bought into him because you gave up the future because this is your future, you know? So I'm really excited and happy for it because this game was elite.  And it scares me because I think Nas might end up getting dealt because they have too much depth there. Maybe I'm crazy, but I guess we'll see once we get closer to it. He's one of the things on this roster that has current value now. And I think there'll be a team that will be willing to buy a little bit. Austin Rivers also on a non-guaranteed contract. He has 16 points and five rebounds and this defense has been good. So set out to him. Congratulations to Damian Lillard who passed Clyde Drexler on the all-time record for the Portland Trailblazer points. Really proud of him for that. Mama got taken away a little bit though. Kasey gives out his end. There's actually that boy. One of my favorite things about this game is at the end of the game when he's dapping up his teammates, his point and whatever. And while he's celebrating he finds the three referees at the scores table and dapped them up to. And he have 14 free throws today. He like, hey, I know I do my thing but y'all got to actually blow the whistle for me to get there. So he ended up spoiling Damian Lillard's big night. The mellow ball is back and in the games he has been back. He's been, he's been good. 23, seven and a half, three rebounds. Even though today he didn't shoot the ball efficiently at all he was in control of this game from start to end. He ended up with two turnovers but like three quarters through he didn't have any. He was making full court lobs. He was playing really good basketball and I like to see that from him. I want to shine some light on DeMonte Sabonis and DeAaron Fox in this one because if it was not for them this game is nothing. Mostly I know that DeAaron had the 37 points which is elite. It was mostly Sabonis because anytime Sabonis went to the floor they fell apart offensively and defensively.  His defense this season has been 50 times better than any season in his career. So he deserves some praise. And the game that I wanted to watch the most today I did not get a chance to watch a single second. So I see the JV ended up with 37 points and 18 rebounds and CJ shot 46% from the field they ended up losing to a 42 piece Giannis. I'm going back to watch this game tonight before I go to bed. Cause Giannis versus Zion had to be a show even though Zion only had 18 points or whatever it had to be a show. So I'm gonna tune in. I'm gonna tune in.


The worst thing the narcissist can do to you. There are many horrific things that narcissists do, but there is one thing that is worse than anything else. The narcissist will manipulate you. They will condition you into adjusting to them, into achieving their desired fit, appearance and result, into being more effective and suitable for them. Instead of you adjusting to what your needs are, to the things you must have for a satisfactory life, you're not attending to your own needs. Because you've been programmed to adjust to them, you have no limits to how you're dealing with them, so you're not looking around and seeing how your situation has become aggressively worse, to how you're becoming worse in character, quality and value. It's bringing you down, it's making you depressed, but it's under the radar, so you may not notice it initially, but the longer you stay with them, the more bits and pieces of your life start to disappear, which will never be found again, which will never see the light of day and it's never going to get better because they don't have your best interest in mind.  They're not giving you an advantage, so it will begin to affect your life, it will affect you financially, it will affect you sexually, you will develop all kinds of health problems, you will become depressed, especially when it's over, because you've been with them for such a long time. You won't even recognize yourself and it may take years for you to go back to being the person that you used to be, because you've invested so much of yourself into this person and you've received nothing back in return to replenish yourself, so you haven't got the strength to pick yourself back up again, you've lost all of the passion you once had for life, all of the love you had for relationships, you've become shy and timid, you feel nervous and uncomfortable in the company of other people, you're easily frightened, you're extremely self-conscious, you're not at ease with other people, when you used to be strong and confident, you could talk to anyone, you could deal with things efficiently, but now it seems like even the simplest of things are a difficult task, you don't know how to deal with life anymore, you don't know how to be yourself, because you've been who they need you to be, for such a long time that it's hard for you to get back to being who you were before, you're a ghost of who you used to be, it's like a distant memory, all you have are things that you remember from the past, because when you're dealing with a narcissist, you lose all of your money, you lose your career, your left lacking good qualities, you're at the end of your resources, you're reduced to a state of financial ruin, you're empty just like them, because you've given everything that you control over to them, so now there's no incentive, you don't have any motivation or enthusiasm, you've lost those feelings of energetic interest, those feelings of excitement and desire, you've become just like them, you've become depressed, you're no longer happy with anything, because it's hard for you to get back to being the person that you used to be after everything they did to you, all of the mind games, the manipulation, the lies, it's had an effect on you, it's affected your state of being comfortable, healthy and happy, and sometimes you've just got to look at yourself for what you are, and for who you've become, you're miserable, you're depressed, you're lonely, that's just how it is now, after you've been dealing with them for such a long time, but no matter how bad it gets, you just keep holding on, you keep trying to maintain your condition and position with them, you continue to do something difficult, while waiting for help, because you think that someone is coming to save you, well I can tell you right now that once you've given all that you have to give, they're not going to be there, they're not going to stick around, they're going to ghost you, they're going to end their relationship with you suddenly and without explanation, they're going to withdraw from all communication and you're going to be left stuck without any support, without any means to rebuild everything that they had destroyed, that's the last that you're going to take, and it's a significant loss, but it's no loss for them because they were never in it for the long run, they saw it as something temporary, it was nothing more than recreational use, it was for their own personal enjoyment, which is why they never invested anything into you, because they weren't trying to build anything with you, they were just with you for what they could get, which is why once they've gotten all they can get, they're out of there, there's no two ways about it, there's no hidden meaning to their behaviour, there's no other reason for them leaving, they got what they wanted and now they're gone, many of us overestimate our own nobilities, we think we can overcome anything that narcissists do to us, but sometimes you just have to look at it for what it is, some people never recover what they have lost, they never bounce back, they never return to their earlier condition, because at the end of the day we're all human, there's only so much damage that we can take and sometimes we end up broken beyond repair, to where there's no going back, there's no recovering what was lost and those are just the effects of dealing with narcissists, but it doesn't affect them, because they can move on, they can forget about you and they will be fine, because they've turned your life upside down, they've messed your life up, which is why many of them move on and they're good, they don't have any worries or problems, because they know the damage they've done to you, they've left you any condition where you're not going to be good for anyone else and they know that, so what do they have to worry about? Your life doesn't affect them, they can move on whenever they choose to and that's exactly what they're thinking in their minds, they know that they can walk away whenever they want and you're going to be the one who is left stuck, you're going to be the one who is left unable to fix things, because they know the damage they've done to you, it was pre-ordained from the very beginning, they already knew what they were going to do to you, so they know the mental condition that they have left you in, they know and they know how hard it would be for you to compensate for their faults, once they've turned your life upside down, they may have robbed you of your qualities and virtues, they may have stolen your money and possessions and maybe you can't recover what was lost, but you can recover, you can return to your normal state of health mind and strength, which is something that they're never going to be able to do, they can't recover because they don't think there's anything wrong with what they do, that thought doesn't even cross their minds, so they're always going to be this way, they're never going to get better, but you can, it may be hard for you to recover, but it can be done, some people never recover, but a lot of people do, it's not definitive, it's not a guarantee, you're not just going to quickly return to your previous condition after dealing with them, you need the right type of help and advice from someone who has already been through it and while I am not a doctor or a medical professional, I can guide you through this process, I have coached hundreds of clients over the past four years including psychologists, psychotherapists, lawyers and even some celebrities and the most powerful thing that I can offer to you is my belief that you can recover from this, I believe in you, I believe in your future, I believe that you have something to contribute to the world and that is why I am willing to invest everything I have into you, I see something in you that you may not be able to see right now, you have light, you have power, you just need to find the motivation within you and it all begins now, what you do now will determine your future, it will dictate the outcome and results, there were times in my life where I felt like giving up, there were times where I did give up but then I got back on my feet, I kept pushing forward and that's what you need to do now so that you can get past this hurdle so that you can move on to greater things and that is why I offer my one-on-one coaching program to help you to do just that but you need to have that motivation, you need to be ready or it's not going to work so if you are ready to make a difference in your life, I invite you to Bokeh One-on-one with me, head to my website it's NarcSurvivor.co.uk, Bokeh time and day that suits you and let's talk about it, let's make a new beginning


Welcome, everybody. My name is Gray Norton. I'm an engineering manager on the Polymer team. And today, I'm here to kick off an hour worth of content on server-side rendering or SSR for short. I'll get the ball rolling with a brief introduction. And then Sam Lee and Trey Shugart will follow me with a couple of different approaches to server-side rendering web components. Sound good? All right, let's dive in. So over the next 10 minutes, we'll ask and answer a series of key questions about SSR. The first one being, why are we even talking about server-side rendering here at the Polymer Summit? In short, because you guys asked us to. SSR is a hot-topic in WebDev. And frankly, we've seen there's quite a bit of confusion about what exactly SSR is, why it's important, and how it relates to web components specifically. So our goal is to answer that call for information, clear up similar confusion, and let you know about some recent developments specifically related to web components. To start, let's establish what we even mean by SSR. So for the moment, I'd like to define it very broadly. We're going to say that you're doing SSR if your web server ever delivers meaningful, renderable, route-specific HTML to browsers or other user agents. So for example, given a URL like this, if your server sends something like this to a browser or a bot, then you're doing SSR. On the other hand, if you only ever send an empty HTML shell more like this, then that's not SSR. So this may seem overly broad, but stick with me, we'll get more specific soon. With that definition in mind, the next question is, why would you want to use SSR? Turns out there are two major reasons. Now, if you've been building apps for production or paying attention to public conversation on the topic, you probably know these, but let's quickly spell them out. The single biggest reason is to maximize your reach. To have any kind of impact to your app, of course, needs to have users. And the best way to reach users today are search and link sharing, both of which rely on non-browser user agents called bots. Search bots crawl the web and populate search indexes while link bots visit URLs and produce appealing visual snippets to encourage sharing. Sadly, many of these bots don't run your client-side code. If you don't serve them any meaningful HTML, your site might as well be invisible. OK, I need to pause here for a second before we move on to reason number two. Because I'd just like us to recognize how messed up it is that here in the year 2017, we're depending on services to help us find and share information that basically see the web like their browsers from 1997. Now, for anyone who embraces the idea of the web as a dynamic and capable platform, and I'm guessing there are probably a few of you on the room, I think this is an existential issue. So let's fix it, all right?  So the second reason you might use SSR is to maximize loading performance. Now, we all know that performance is a critical component of user experience. And in the mobile era, loading is almost certainly the most important aspect of performance. The performance-based argument for SSR is pretty simple. Serving renderable HTML is generally the fastest way to get something on screen since the browser can paint right away before loading, parsing, or executing any of your JavaScript. Makes sense, right? So now we've reviewed the two key benefits of SSR. But I'd like to look critically at each one. First, do you really need SSR for search and sharing? Honestly, this is a question you need to answer for yourself based on the nature of your site and your business. But that answer feels a bit like a cop-out. So we're just going to say, most likely, yes. Let's note the exception first, though. If you don't rely heavily on sharing, and if you're satisfied with a reach that Google Search gives you, you may not need SSR. That's because Googlebot uses a rendering service based on Chrome, and therefore sees your site very much like your users do. There is a caveat. Googlebot's version of Chrome isn't entirely up to date, and it has a few features disabled. So its rendering may differ from your users in subtle or sometimes not so subtle ways. The details are out of scope for this talk, but I encourage you to check out these resources on developer.google.com for more information. In general, though, you'll be happy to know that Googlebot runs your client-side code, fetches your data, and renders your app very much like a real browser. The problem is that Googlebot is not at all typical. As we've already mentioned, many bots don't attempt to run your code at all, and many that do do so in very limited ways. So if you care about non-Google search engines or you depend on link sharing for much of your traffic, you'll probably want to use some form of SSR. We'll see how you might do that in a minute, but first let's ask the same question about performance that we just did about search and sharing. The answer to this one is even more nuanced and frankly starts creeping into some political territory. But what the heck, I'll just say it. No. You don't need SSR to achieve excellent loading performance. Using patterns like purple, you can deliver a great loading experience without SSR. We've shown this with our own example apps and developers of real-world Polymer apps have done the same. And the Polymer version of the hacker news PWA is among the fastest to load despite not using any SSR. But while it's nice to know that you can build a fast loading app without SSR, what's more important is actually the converse. That is, using SSR is by no means a guarantee that your loading performance will be good or even adequate. So Kevin Schoff built this slide to demonstrate a problem known as the uncanny valley. SSR helps you get something on screen as quickly as possible, but if your app isn't interactive within a few seconds, your users probably aren't gonna be happy. And SSR doesn't do anything to get you interactive faster. So whether it's more important to paint quickly or get interactive quickly may depend a lot on the nature of your app, but the bottom line is that SSR should in no way be viewed as a magic bullet for loading performance. With that said, can SSR help with performance? Absolutely. So you should try hard to get interactive as quickly as possible, but for however long that takes, your users would rather be looking at meaningful content than at a blank screen. And ultimately, I think the best user experience will probably come from combining some form of SSR with a technique like purple. All right, so now we can move on and talk about SSR and web components specifically. As I mentioned in my intro, we see quite a bit of confusion about web components in SSR. And this is probably because certain features of web components do pose challenges for one very popular flavor of server-side rendering. We'll discuss what those challenges are, but the key takeaway is that web components are absolutely compatible with SSR. Let's see how, starting with a common pattern that works with virtually any form of server-side rendering. Specifically, reusable web components like UI controls and embeddable widgets can be used in any server-side rendering scheme. The same goes for a class of elements we'll call presentation components. As illustrated by this example from Electronic Arts, these are components you build yourself to standardize patterns for presentation and navigation. Each component has its own semantics and encapsulates styling and behavior to ensure consistency across your site or even a family of sites. Now, you can use presentation components in UI elements with any form of SSR. So you might craft your HTML by hand, generate it offline, server render it at runtime, whatever, you just include custom elements in your markup, being sure to place meaningful content like links, text, and images in the light DOM where bots can see it. Now, one quick note is that this pattern does lead to rendering in two stages. Your document will paint immediately, but your custom elements won't render fully until they've registered and upgraded. So it's a subtle point, but something to keep in mind. But what if you're not just integrating components into your site, but building your entire app out of web components from top to bottom? What if you don't have an existing SSR solution to lean on? In this case, you need something more. Let's look at two possibilities. One option is to delegate bot rendering to a standalone service. So let's assume you're doing something like this. User shows up, request one of your app's routes, and following the purple pattern, you serve an empty HTML shell and just enough JavaScript to handle that first route and let the browser take care of the rest. But now suppose a bot shows up and requests that same route. Before responding, you send that same HTML shell and JavaScript to a rendering service. Service returns your rendered HTML, and you pass it along to the bot and everybody's happy. So all things considered, this is probably the best way to implement SSR for a pure web components app today. The integration is light, you don't write any server-specific code, and bots and users each get what they need. Now the approach isn't new, it's been used for multiple generations of Ajax and single-page apps, but there's always room for improvement, and Sam Lee will be up on stage next to tell you about a modern, web components-friendly rendering service that he's built using Headless Chrome. Now, you may have noticed that a rendering service doesn't address performance, though, since you're only sending HTML to bots. For that reason, you might want to explore another approach called isomorphic JavaScript. This is a form of SSR in which your front-end code is explicitly designed to run on both the server and in the browser. So instead of rendering an empty shell, or returning an empty shell, you run just enough code on the server to render your initial HTML, which you then serve to both browsers and bots, along with your client-side JavaScript. Once the browser loads your code and the app boots up, it reclaims those pre-rendered DOM nodes and then runs just as if it had rendered on the client to begin with. This is super elegant, and it can be a great solution, but as always, there are trade-offs. So your code gets a bit more complicated and you end up doing more work on the server for every request. And as we mentioned, there are those couple of web component-specific challenges. First, because web components rely on web platform APIs, you need to either include a full browser in your server environment, which sounds expensive, or use an abstraction layer that provides a lighter weight implementation of those same platform APIs. And the thickness of that layer may vary depending on how many platform APIs you need to render your initial app state. Now, if your components use ShadowDOM, there's an additional wrinkle. After you build your DOM tree on the server, you need to serialize it into HTML markup. So without ShadowDOM, as in this case, it's pretty straightforward. But unfortunately, the platform doesn't currently give us any way to represent a shadow root in serialized HTML. So our simple task becomes a tricky problem. Now, there are ways to work around this limitation, but they require inserting placeholders and running a bit of client-side code during your initial render. So Trey Shugart will be on stage shortly to share his work on isomorphic JavaScript for web components and take a closer look at all of these considerations. And with that, we've wrapped up our brief intro to SSR. I hope it's been useful to you. And I'm sure that you'll be excited to see what both Sam and Trey have in store for you next. So thanks and enjoy the rest of Palmer Summit 2017.


Permutation entropy is a powerful tool for analyzing time series that accounts for temporal information contained in the data, has simplicity, robustness, and low computational cost. It has been widely used in recent years to understand complex and chaotic systems, as well as economical markets and biomedical systems. This article was authored by Osvaldo A. Rosso, David Papo, Luciano Zunino, and others.


I've made videos on how not to die from heart disease, how not to die from cancer, how not to die from other deadly diseases like diabetes, but some of the most popular videos on the site are like the best way to cook sweet potatoes. Alright then, what's the best way to cook bell peppers? Here's the antioxidant power of raw green peppers and red peppers, and microwaving or stir-frying doesn't seem to do much, so with boiling, there's a drop. But then if you measure the antioxidant activity of the leftover boiling water, the antioxidants weren't destroyed, but just leached out into the cooking water. So the researchers' conclusion is that it's vital to consume the water used for boiling. In addition to the peppers, as bioactive compounds will be left over in the water. But that's not the takeaway I get from this study. Drink the water or not red peppers, and nearly twice the antioxidant power of green, no matter what you do. So while both peppers are, by definition, green light foods, the red peppers, ironically, are even greener. What about mushrooms? They're probably best not to eat them raw, but what's the best way to cook them? Since cooking techniques clearly influence the nutritional attributes of mushrooms, the proper selection of cooking method may be a key factor to prevent or reduce nutritional losses, and microwaving and grilling were established as the best processes to maintain the nutritional profile of mushrooms. For example, a significant decrease was detected in the antioxidant activity of mushrooms, especially after boiling and frying, while grilled and microwaved mushrooms reached, in some cases, higher antioxidant activity. Boiling had a similar negative impact on the antioxidant power of cauliflower, which serves as just kind of a rough proxy for how many phytonutrients of potential benefit we might be losing. Blanching was better, where the cauliflower here was dunked into boiling water for three minutes and then run under cold water to stop it from cooking. I had never heard of steam blanching, but same idea. Steam for three minutes then cool off, which appears to be better, since you're not immersing it in water. So note, there's not much difference between steaming for six minutes and steaming for three, and then running under cold water. Too bad they didn't look at roasting that, so I make cauliflower taste good. In fact, I got two recipes on roasted cauliflower in my How Not to Die cookbook, for which all my proceeds go to charity, of course. There are certain antioxidants who are especially interested, though, like the eyesight and brain-protecting green vegetable compound, lutein. Here's the back of the eyeball. What lutein does is protect those sensitive, light-sensing nerves by blocking the high-energy blue light rays, which helps us see better and may help us think better, too. So researchers looked into the effects of four different cooking methods on lutein concentrations. The first thing you'll notice is that broccoli has like 50 times more than cauliflower, not a surprise, since lutein is a plant pigment and cauliflower is too white. Here it is graphically, so you can appreciate the difference. Then they compared boiling, steaming, microwaving, and sous vide cooking, which is like a fancy name for boiling in a plastic bag.  How is that possible? Heat can actually disrupt the cell walls and all the little subcellular compartments that can enhance the release of antioxidant compounds. Sous vide was similar, microwaving detrimental, at least for the broccoli, and steaming the superstar, nearly doubling lutein levels. Heat isn't the only way to liberate lutein from greens, though if you finely chop spinach, you can double the amount of lutein released during digestion in this experimental model and make a green smoothie or pesto or some kind of pureed spinach dish, and you may triple the bioavailability. But you have to watch the heat. Steamer or boiling is one thing, but super high heat, like stir frying, can reduce lutein levels to nearly nothing. Frying is also bad for the purple pigments in blue potatoes. Even air frying, they just seem sensitive to extremely high heat. These special antioxidant plant pigments appear to be sensitive to really high temperatures. So we should try to avoid frying, especially deep frying. That was one of the conclusions of an expert panel on cooking methods, Avoid Deep Frying Foods. Not only the nutrient losses, but all the added oil, not to mention the production of some toxic compounds at those temperatures. So that continues to be a challenge to the food industry. What's their solution?  Let's try frying in pure molten sugar. It's like the snack well cookie phenomenon taken to its logical conclusion. Oh, you want low-fat? We'll fry in sugar.


Mani rui, apba ni mazumiau garet te wanau i rohau, mumilitiau asili iırtionu, tu irohau apba u一起i toanau. Nau maki u i endukiau ka munguot, kia asili iirotionu i kato, mumili e munguot i jambahau, minozi mazumiau pa iroha. Mani raka'a kai irohau, maka miau prtsta maza, maza irohau i K-Road, magingu ar Samoan, pratissinau, azi iirotionu i raka uniau, muna, muna irohau rangīlau proswa arandu. I had to learn what that was about. I literally just earned enough to pay for my $50 bus pass to come to work from Mangere to K Road every day. And that's what I did. And I did it for two years. But the solid grounding was really priceless. Just that every other case was on a pro bono basis. It was amazing. That's what guided my practice. Really right from the beginning. And in many respects it's actually how I practice today. I've had the privilege of representing families of understanding the issues of knowing what their struggles are. And I've had the challenges of advocating for them against systems, against government systems. So the first, you know, 40 years was really about building my career. And then you say, what do I do with this knowledge now? And I say, I want to use that knowledge to actually now try and improve systems. Every one of us serves a different purpose and you've got to be really comfortable about understanding what your purpose might be. So I find that the purpose of why I get to sit at some of those boards is actually to bring the everyday experience of the average man. So I'm not a token person sitting at a board. It's about, you know, if I want to make a real difference to a particular sector of society, am I presenting their case? What's the persuasive argument that I'm putting forward? Whilst law school doesn't necessarily prepare you for the real world, the tools that we can learn at law school can be incredibly useful. And it's how you use those tools to actually for advance and advocate, you know, for different cohorts of society. That's exciting. That's what can make a difference. And I think that's where you can actually influence change.