I'm Andres Freund, I work for Citus Data and I'm a PostgreSQL developer and committer and I spent most of my time playing around with PostgreSQL in one way or another and today I want to talk about how does PostgreSQL deal with I.O. and how that influences performance because that's something that's actually like closely related and sometimes it's hard to understand why you need to tune a parameter to make performance better or why it makes it things worse.  The blue line is the number of transactions per second, the red line is latency in milliseconds and you can see that it's a pretty terrible picture. In this case this was done on my workstation at home, unfortunately on rotating media because I had destroyed my SSDs with tests the day before. They don't last all that long but yeah it doesn't really change if you use SSDs the latency numbers are not quite as bad but obviously this is a pretty bad picture but then it's also done with the default parameters so there's a reason why it's bad. So that's basically I want to see why this looks this way, I want to explain how it looks that way and how you can make it better. For that we unfortunately need to look a bit into the architecture of how Postgres works and the basic architecture is this that we have various processes. These are the things in the middle, the connections, we have some background processes like the checkpointer and some other internal processes and they all access some local memory that's just whatever when you call malloc or Postgres's malloc that's allocated on the left-hand side and they all are attached to some common memory that's the shared memory and that's where we store like the buffer IO where we have locking information to coordinate between the connections and by like by size the buffer cache or what you configure by shared buffers is going to be the largest part of shared memory most of the time and since shared memory obviously influences and like shared buffers influences how IO works I'm going to explain a bit how that looks like but it's basically looks like this we have one hash table that says this block in this table is mapped to this block in our shared buffers and then each shared buffers page is eight kilobytes of data and then some flags and locks and so on associated with that and but it begins initially when you start the database the hash table will be empty and all the buffers in shared buffers will not contain anything so how does actually reading data work so whenever you do need a page from some table in memory to read it for example because you did a select star from table what happens when when the query execution engine finds I need the first block it looks into the hash table checks whether the specific entry in the hash table already has a block associated with it if the if there is one then that's easy then we can use that so on further executions we don't have to do the IO to the operating system again but in the case we don't have what we do is we find a free block in shared buffers if there are no free blocks we'll have to do something else but that's the next step so once we found one we point the entry in the this shared table and lock acquire some logs and do some internal stuff and then the next part is the important part we ask the operating system please open the file and give us that block and what's important in contrast in Postgres to some other operating systems Postgres does not use a direct IO so when it does a read call system call the OS may have it already cached so in the a bit faster case the OS's own page cache will say okay here you go that's the page if that's not the case the US then we'll ask the storage to read the give the data back and that will take a bit longer but eventually also have read it and once that's done we can load the data in our shared buffers and then we're done and can return the page to our internal user so what does happen if the data is actually if we don't have a shape free shared buffers because our workload is bigger than our shared buffer setting that it will not always be the case but especially in the default configuration it quite frequently will the algorithm Postgres uses for that is called a clock sweep algorithm and we earlier saw that I had arranged all the shared buffers basically in a list from zero to however you many you have configured and the clock basically arranges this the number of buffers just in a circular in circle and when we have one clock hand and the clock hand is basically shared by all processes that's where we where the clock is pointing at and when we need a new page what we do we look at the buffer that's at the moment under the clock hand and each page has a so-called usage count and the usage count is basically information about how often has this page been used so let's say that in this case we have the pages a usage counter for that means it has been used somewhat recently so we can't directly reuse it because then we would potentially throw out useful content so to do is we just say okay now we have looked at it so we decrement the usage count by one and then look at the next one and at the next page we do the same again and so on and at some point we'll find a page that has a usage count of zero potentially that means we have to go around the whole clock of all pages by the number the maximum type a number of usage count and that at the moment is five so potentially we have to go around the whole clock number of times so and once we have found that page we either will just throw out the old content or we will potentially have to write out the current content because if somebody had written something to that page it might have been updated in memory then we obviously need to update the file system view of that page with the code with the new content and that works the following way we again we just have the entry in our shared buffers and then we need to lock the page and that's relatively boring what we then do we do a right system call to the operating system and there he is important again we don't use o direct we write to the operating system and the operating system does its own caching and after that we just say okay we're done with writing out and yeah so there's one more very important part about the how to understand how databases and not just Postgres generally do IO and that is for consistency most databases use something like val logging undo logging and that basically works like that if you whenever you do a modification to the database say you insert a record you insert something into a log and that says insert into table so and so this content and whenever you commit you say commit transaction so and so and you write that and so you have this lock that with with with each modification which goes a bit and whenever you commit a transaction you don't have to write out all the changes made to all the data tables what you do is you just say sync the lock up to this position and then you can return the commit to the user and whenever so the yeah and whenever this lock then grows obviously you got the all the time and when you at some point it might happen that your database crashes because your hardware goes out because you kill nine the Postgres process or something in that case what happens we start at the lock from the point where we started the database basically and just look at the log log entries when they log entry says insert something into that position in the table then you do that when you so when it says mark this transaction is committed because it committed or boarded then you do that so we go through the log and replay all that actions that's how the durability happens because we have redone all the operations have happened since the crash and now we are up to date again and once we did the crash recovery we can say okay we just start at the new position from where up to where we did crash recovery and then we can just accept rights again and we will fill the Val again and the reason I had this these small bits at the beginning and then the larger block is that in Postgres the Val is by default created in 16 megabyte chunks and these are each physical files and you'll have sometimes interact with those 16 megabyte files if you ever did like point-in-time recovery or streaming with application or something like that so once once the database is working again what happens you'll just create new log entries and the lock entry the log will grow and grow and grow and at some point you have the problem that the log will have grown to an indefinite size because so far we don't know how to remove old lock entries and the process that's obviously not something you can do because over the lifetime of a database you write will write many more times the amount of disks base you want to have available for that also if you never if you have always started the beginning of the data of the Val after a crash it would take a lot of time so there's a process called check pointing which basically says I'm trying to write out out of shared buffers all the modification that I've done previously and write them to disk and then I'm f-syncing all the files in the database which means that all the old modifications are now safely on disk and I can say now I can remove the old lock entries that were made before my checkpoint so I can now just delete the files and continue writing it's important to know that in postgres this checkpoint doesn't happen like in the foreground and while it's blocking but this happens in the background you can continue writing while it happens so it's all a bit more complicated than I'm drawing here but that suffices basically for the basic understanding and then we can just continue writing and the way how reading and writing is done and how checkpoints are done explain a lot of the performance problems that's why I went with it to explaining them so when do we do these checkpoints and why is that important by default the default setting is checkpoint timeout equals five minutes so every five minutes we go through shared buffers and write out all the dirty buffers and shared buffers and that's important because like if you say my my shared buffers is one terabyte of memory and I dirty all of those five terabytes of memory one terabyte of memory all the with all the time and then you do checkpoint every five minutes and you can calculate what your maximum write rate from checkpointing is because it will be five one terabyte divided by five minutes so you'll have a very high constant write rate so you need an IO sub system that can handle that there's also other reasons why we can start checkpoints when the val grows too much then we say okay we want to write create a new checkpoint because we want to remove the old entry so we don't use arbitrary amounts of disk and up to 9.5 the configuration variable for that was checkpoint segments and it was defaulting to three which meant that after 48 megabytes we wanted to do a checkpoint and that obviously is in practice ridiculously low for anything that has a high write throughput in 9.5 we have a different setting which is max val size and that has a slightly less insane default setting and the relation between the reason we renamed that is that checkpoint segments had the problem that the actual amount of disk space we needed was more than checkpoint segments you had to basically multiply things around to figure out how much the disk space is going to be that's why we renamed it and re jiggered how this all worked and it's now max val size and whenever if you enable the logging of checkpoints you will see that if you that's the reason why a checkpoint is started you will see checkpoint starting x log and potentially also oh checkpoints are happening too frequently you're this is not good for performance it will warn you every now and then you also can trigger checkpoints manually by saying checkpoint in the sql via sql and they will start that and up to i think 8.3 the way we did checkpoints was that we had some process that did the checkpointing but it tried to do so as fast as possible so if you had shared buffer set to i don't know 100 gigabyte it tried to write all the dirty buffers in these 100 gigabytes as fast as possible and then went to fsync all the data but if you imagine writing out at a sudden point in time 100 gigabytes of data out that will make everything else very slow so what was introduced back then is spreading checkpoints so we'll just say our checkpoints are allowed to take longer because it's not that important that we remove all the value immediately so by default it uses a setting named checkpoint completion target and it's set to 0.5 what that means is that we try to finish a checkpoint by half the time the next checkpoint starts and that means we will just sleep whenever something is happening and when we've done some work and we've compute how far we have to go and sleep accordingly and yeah that means but that means also that if you have too much work to do during checkpointing and the completion target might not play a role it might not slow down things if if he wouldn't finish otherwise so to go back to the graph from earlier i said earlier that this is an untuned postgres installation and you can see that after i don't know i don't know whether you can see it i can't see the screen after i don't know 20 seconds it starts to get very slow and then it's slow for a period and then it starts to be fast again so what did we tune wrong the first thing we might assume is that the default shared buffer setting was too low so let's increase shared buffers to something larger in this case 16 gigabytes and that actually makes the whole workload fit into shared memory but you could see it might have slightly improved performance but it's still pretty bad so what we can guess now next is okay the default setting for checkpoint segments are very low so what happens is that we will frequently do a checkpoint and that's whenever a checkpoint starts you can see that the performance tanks very very badly and that's because the checkpoint is writing out data quickly because every very quickly exceed checkpoint segments or max val size in this case because i did this test with 9.6 and it's busy doing that and that slows down throughput and increases latency because every write takes longer because of the checkpoint also happening so let's try increase the max val size so checkpoints happen less frequently and the result is this note that the scale at the bottom changed the whole year the entirety is 300 seconds now the first 300 seconds are where the performance is consistently very good and then we see after 300 seconds the performance goes down what's happens is that then at that point a checkpoint starts and starts to write out data and suddenly we have this zigzag pattern where performance is very good for a short moment of time and then very bad for a short moment of time so why would would that be i said earlier that whenever we write out data from the database we just write it out to the kernel and we don't use o direct so it catches the data in its on its own and then every now and then it will the kernel will decide now i have cached enough memory and i need to write it out so one assumption possible assumption is that we write out the kernel writes out the data in a not very regular manner so we can now monitor the kernel for how much dirty data it has and this is the graph that shows the red line shows how much the the blue line shows how much dirty data it has and as you can see you have very similar patterns to performance so the problem is basically that the kernel caches too much and then whenever it writes data back performance suffers so one idea would be we can change the os os configuration to tell the kernel to catch a lot less and for pure database ool to p-stale style workload that actually can up to nine five including nine five be a very good idea what you can do you basically you can tell the kernel to write data out more often that means you can reduce dirty writeback sentisex to a lower setting or you can say write out data whenever more than that these kind of bytes are dirty and that's dirty bytes ratio so the one of the problems with that is obviously that it can increase the total amount of writes and it can increase how much how random the ios because the kernel will try to do some reordering it's not that good at it at least in linux but it trials to do some of that so if you try and tell the kernel that it shouldn't catch more than 40 megabytes of dirty data you'll get to this kind of workload which already looks a fair bit better we can now see that performance is very good for 300 seconds and then we are slower for about 150 or something and then the performance is very good and now we can see actually the effect of the checkpoint completion target that i mentioned earlier you can see that after 300 seconds we start a checkpoint and we try to finish that checkpoint by half the time we will have to start the next one and that's exactly these 150 seconds where the performance is lower so what we what the next thing we could do is try to spread the cost of the checkpoint over more time so what you can do we can increase checkpoint completion target to something higher then you'll end up with like something like this i think i set it to 0.9 and that's already pretty good i mean performance is still not as good as if there were no checkpoint but that's pretty obvious if we don't do any writes performance will be better but and one thing to also consider is that this work this benchmark is a saturation tests we try to do writes as fast as possible most applications aren't that way that means most of the time your application has a certain demand for a number of writes say i need to do a thousand transactions a second or something and everything is okay it's it doesn't it's not a benefit to you if you can do 10,000 transactions a second if you don't have 10,000 transactions to process a second so the important part is just to get the performance above your the required baseline and so increasing checkpoints the completion target can very often achieve that by spreading the work so to get back from the example to more how you can tune things the i'll give some basic guidelines about how to do tuned shared buffers the most important part is you shouldn't tune shared buffers to something that's high yeah sure next slide give me one slide and then i'll come i'll ask you afterwards whether it answered your question so in shared buffers the most important part is leave enough memory to actually have other work to do like the queries sometimes need memory for sorting you're you might want to run applications you want to do run aggregates so you shouldn't set shared buffers to like 90 of the memory of your machine then there's some problems which i'm going to go into very little detail later but you should only set shared buffers to a very very large setting if you can fit your hot data set into if you can fit your working set into shared buffers because in those cases none of the scalability limitations around shared buffers and postgres really matter to you so if you have a workload where you can say i have 256 gigabytes of memory and my workload actually is like 100 gigabytes large then it can make a lot of sense to set shared buffers to 128 gigabytes there unfortunately are a few exceptions to that if you do very frequently do a drop table or re-index of tables or something like that then large shared buffers will hurt you because unfortunately we only have a hash table as i explained earlier over shared buffers so when we drop a relation we need to remove all the pages that are in shared buffers so our solution to that is we walk through all shared buffers so check whether it's a relevant page and then remove it so that can increase the cost that normally doesn't matter for production workloads but for regression test workloads it can make a huge difference i've seen regression tests go from minutes to seconds by reducing shared buffers the other cases are if you have bulk writes in a workload which is bigger than shared buffers then reducing shared buffers counterintuitively can often increase performance and if you remember i was talking about this clock sweep earlier the reason for that is that then just can take the clock sweep a lot longer to find a replacement page and the clock sweep then often will have to write out dirty data from shared buffers so that can increase the cost and if you actually use a large shared buffer setting and you use linux consider configuring huge pages because that can drastically reduce the per-process overhead of having a large shared buffers so that's the basic guideline so for shared buffers so for the writer headlock for the sizing of checkpoints the most important guideline is you should always have checkpoints triggered by time never by the limit of the val size so what you want to do is to size your checkpoints so by setting appropriate checkpoint times out and max val size that the timing triggers them the reason for that is that the timing is a lot easier to estimate about how long it's easier to estimate how long five minutes take because you there are five minutes so we can spread the work on a very regular basis but if the if we have to do checkpoints because of the val size the your workload might not be completely predictable so we might need to speed up and slow down the checkpointing and that can influence your application performance so it's okay if you have like a nightly batch job and then checkpoint segments is the limiting factor because you might not have other work queries but that's the basic and one the other important part is that increasing checkpoint segments means like having larger checkpoints increases how much time you spend on recovery because after a crash you need to replay all that RAS so if you have a thousand segments that will take longer if you have only 10 a very very rough guideline is that in current hardware you usually can do like three to eight segments a second to replay if you have decent ish hardware but there's unfortunately also a contra argument to having a relatively small checkpoint segments besides the amount of total IO the other that is that whenever a page has been touched first in after a checkpoint we don't just write the change like for example we updated a row we also write a so-called full page image that means we will lock the whole content of the page into the val and that can drastically increase the amount of val I've seen cases where increasing checkpoint timeout from five minutes to one hour reduced the total amount of val by more than a factor of five so we went from I don't know 100 something gigabytes an hour to 20 just because we didn't need a lot less from these full page writes and having less of these full page writes also influences replication performance because they're pretty large and you have to transport them you have to write them on both sides so often increasing the number of checkpoint segments increases the replication performance actually but it also decrease increases the amount of time a new base backup takes till it can accept read queries or till it's recovered does that kind of answer your question or not yes it's no no yeah we stream like if you stream replication we continuously send the data in 8 kilobyte chunks or 16 kilobyte chunks or something and we can apply in these increments and if you use like archive-based replication like with archive command and recovery command then it's 16 megabytes because the val is always written in 16 megabyte increments yeah I mean it's pretty easy to create scenarios where your network can't keep up with the amount of val I mean I've seen 40 gigabytes and links saturated with val so there's some performance features in postgres that try to make this all more efficient there's the val writer which does just tries to write val so back ends don't have to do it when they do the insertion but there's not really anything to tune and it's mostly important if you use as an conus commit but you can't tune it so it's it's there and does a job then there's another thing that's pretty important which is I said earlier that if the clock sweep finds a dirty buffer that it replaces it says it has to write out that buffer and that means that the query that does like a select suddenly has to write out data which is you don't want it to do that work because it should answer the query as fast as possible so there exists a process called the background writer that basically just looks at the next few buffers ahead of the clock and tries to write them out unfortunately that thing is overly complicated and under effective and one of the problem there is that the defaults are very bad for any real high throughput workloads because its configuration values limit the amount of maximum work it can do to four megabytes a second and if you have any real throughput that's not very interesting so if you want you can tune it by configuring the two settings at the bottom that's bg writer delay which means how long does it sleep if it sleeps after doing some work and bg writer liu max pages after how many pages it has written out it does it sleep you can increase that but unfortunately even then it's not very good it's too complicated and we're working on replacing it for nano seven and surprisingly there's another very similar process which has a lot of needs tuning in pretty much every database that's not of trivial size and that's actually auto vacuum and that causes the in my experience the most down times of postgres is that auto vacuum is not tuned because it is by default also cost limited and the cost limits it has limited to four megabytes of work per second at the max and often lower than that and that means that if you have more than four megabytes of rights a second it can't keep up and then you'll just fall behind and that's how you often end up with databases that have these huge amounts of bloat if you ever had auto vacuum problems and you ran the default configuration this is likely the reason so you will if you don't if you run a non toy database you will have to oh there's a mistake the vacuum cost page miss the default is not 20 it's two sorry oh 10 yeah okay but i mean this value is oh i copied the value twice that's the reason yeah okay that's what dirty is actually yeah so okay sorry there's a mistake there and what but the way it works that it just calculates a cost factor cost while performing its work and after it reached cost limit which is by default 200 it sleeps for 20 milliseconds and if you do the math that ends up that if you have more than four megabytes of dirty data you'll that's the maximum you can do basically so you need to tune that if you have any right activity in your database one of the if you have decent hardware you can often just disable the cost limiting by setting i'm only sleeping zero seconds a milliseconds that works often otherwise you will need a lot higher cost limit and lower cost delay so yeah do that then we have this problem with what we saw earlier that the kernel catches all these writes and writes them back to the hardware in irregular patterns and one of the ways we can do that is by changing these or as dirty defaults but we can what you can also do is we can just force the hand of the kernel to write out data on a more regular basis and that's what you did in 9.6 so in 9.6 you don't need to do this dirty data tuning because the dirty data tuning has a lot of problems if you have other writes where you don't want to immediately write them out for example you have a temp table or you have a disk space sort you don't run the those to hit uh disk unnecessarily so we have now in 9.6 a feature that works on linux and some other platforms but not as well as on linux the way it just forces the kernel to write out pages if they've dirtied more than depending on what what writes them out a couple megabytes and to alleviate the cost the problem that that increases the amount of random IO the checkpointer now sorts the writes and that's something we should have done a long ago and the other problem I mentioned is that the hash table at the moment we can't do any sort of give me the next buffer in the file very efficiently what we have to do is we have to do a completely separate look up for that and we can't use the hash table for sorting because hash tables per definition have no sorting and that caused a lot number of problems and the other problem part of that is the problem is that hash tables are actually from an efficiency point of view they are 01 or in the normal case but the problem is that the constant cost factor for something that's accessed across multiple CPUs is not very is pretty bad so we probably have to replace the hash table by something else also we had a number of locking issues around this hash table because this hash table can be accessed but it's often accessed by all processes so the locking around that is very important the most important improvements have been in 9.5 so if you run into locking issues before a 9.5 upgrade to 9.5 we have some more important improvements in 9.6 but those are mostly if you have a working set that's a lot larger than the database than memory and I think the best replacement for the data structures we use as a instead of a hash table we should use a radix tree I'm trying to work on that I'm not 100% sure I can get it into 9.7 but that's my hope the other big problem is that our cash replacement scales not very uh scales badly I mean you saw this clock earlier in the past what we did we whenever we wanted to get a buffer from that clock we just acquired a global lock and only one buffer could advance that one process could advance that clock and look for replacement pages we fixed that in 9.5 by better by using atomic operations but the still the problem is this clock has to be advanced and if I saw earlier that we sometimes have to go around the whole clock five times to find a replacement buffer and if you have a couple million of shared buffers going through a couple million an area of a couple million that's really expensive so our fundamental fundamental cash replacement algorithm is just not very efficient and the reason for that is that it's mostly been designed for efficient changing of the reference count which is very nice but the replacement has become so inefficient with today's memory sizes that I think we need to replace the fundamental in algorithm I don't really know how to what would be good there we've been various people proposing different algorithms but it's pretty hard the other problem is that this this maximum usage count is five and that means we have a very low granularity about how often pages are accessed you often reach a state where you have all buffers have a usage count of five and then the clock goes around to reduce all of them to zero or all of them to one or zero and then buffers get replaced and so you have very little locality and that's something that you can actually see sometimes in the database using the PG buffer cache cash extension and that's actually a very interesting thing to do in your database look at how regular your usage count is because that allows you to do some estimation about how well does the caching work in your database if you have a very unique you need distributed usage count that usually means that your workload is bigger than a lot bigger than share buffers that you have a very that the caching doesn't really work that well if you have mostly a high usage count and then a third or so that's very that's a lot lower that means you have a well cached workload and you can by looking at how that develops over time you can estimate how soon you're going to hit the wall of okay my cache is too small another problem is that I said earlier we don't use o direct and that's a problem because that means that the kernel page cache can contain cache data and that postgres caches the data and that can mean we just waste memory doing caching the same we nearly the same data twice it's unfortunately not that easy to get to use just use o direct which avoids using this page cache because the linux or most kernels do a lot of optimization about how to queue i o to devices and if you don't use use the facilities to do that things get slower so I think we we're making slow progress and being able to do that but we're by far not there the other big problem is that it's a very os specific so we can't easily do it because the linux implementation would look very different than the even solaris implementation or free bst implementation or even more so than the windows implementation okay this is basically what I wanted to go through if are there any questions


Now all of your accomplishments the things that you're most proud of the things that you would brag about Tell me those things that you are most proud of


What is going on guys welcome back to the channel critical overlord here, so it looks like we may have Something to talk about in regards to Nightmare and Elm Street or at least it would appear So from something new line cinema who we know distributed almost every single one of the Nightmare and Elm Street films We know what's Craven helm the original he wrote the screenplay for the original Rest in peace West Craven. He's brought us so many iconic figures in the horror community and Freddy Cougar is one of the main Ones he's part of the big three for the horror genre So as you see here in this tweet it says seven eight gonna stay up late nine ten never sleep again coming from new line Cinema's official Twitter account and then prior to that they were tweeting out all the other things that came before that You know one two Freddy's coming for you three four better lock your door five six so on and so forth Many people started speculating that this means that there is movement going on with the franchise now There is movement going on with the franchise. I'm gonna get into that in a later portion of the video. However New line cinema quickly cleared up that Not quickly I'll say they they made it clear that they're not doing anything other than just teasing and Making poking fun and getting people excited for the holiday season since October is Horror month the horror month of Halloween Halloween isn't an actual holiday, but you you get my point so There's nothing to see there. It doesn't look like they are trying to tease us with anything Now what I do want to say is that of course that could be their way of flaming the fire because you can easily Come out and say you're not doing that when in fact you are doing that You just wanted to be an even bigger surprise down the line when you announced what's happening So maybe they're trying to keep the keep the fire down a bit just to keep people at ease Until they make that official announcement to shock everyone Again Freddy Cougar is a very iconic character We know he was brought to life by Robert England who does a phenomenal job portraying the character Not only in the original classic but in the second second film the third film, which is argued arguably the best sequel Nightmare Nelms Street the dream warriors He portrays Freddy again in Nightmare Nelms Street 4 the dream master the dream warriors Not the dream warriors the dream child and the dream master Which was part 4 and 5 and then we have the abysmal Freddy's dead the final nightmare, which was part 6 and that's honestly one of the worst films I've ever seen in my life one of the worst horror films.  He's so iconic, but the films themselves It just goes to show you how far acting can get you because Robert England no matter what the material was good or bad And a lot of the later sequels they were just crap He made this character his own he is forever going to be noted notice Notified and recognized for his portrayal of Freddy Cougar because Regardless of part 4 5 and 6 being a downward spiral Robert England still brought his a game. He has made a iconic character in the horror community and Fans of the genre have been desperate to see this character brought to life again And it's just sad that nothing has come to fruition with with this character, but Getting back to what I wanted to say as I mentioned earlier We do know that there's at least some type of movement With this character with this franchise because we know what's craving unfortunately passed away in 2015 but his estate the estate of West Craven They did gain the rights back or they gained the rights for the nightmare in Elm Street film and the character of Freddy Cougar Bloody disgusting did report something. I think late last year sometime They stated that they can exclusively report that Craven's estate has begun work on resurrecting Freddy as they are actively taking Pitches for a new nightmare in Elm Street While we don't know exactly what the estate's plans are or if they have any distributor financial deals in place We have heard they're looking for both feature film pitches and also concepts for a possible HBO Max series Again, we do not know the extent of their plans and it's also entirely possible. They don't know what they want either so Just looking at this for a quick second at HBO Max series I could see that working if we are talking about exploring Freddy Cougar Before he became Freddy Cougar because as we know the franchise itself the original film revolves around a group of friends Nancy Thompson and her friends who are terrorized by a dream demon who has a connection to Their parents because their parents will come to find it that he this dream demon in in life He was a child killer and the town or in the in the parents of Elm Street Group together came together as a group to take him out after An issue occurred with his court hearing and he was set free due to a technicality issue So we know that we know that the franchise itself or that original film revolved around that and it branched out Into these later sequels as well just expanded on that in the mythos of Freddy Cougar We know Nancy Thompson is now recognized as one of them one of the best final girls to ever exist alongside with Sydney Prescott Lori Strowed, you know all of those iconic horror final girls that we all are very familiar with So an HBO Max series I would like to see if that was what they were going to go with because they're they're accepting pitches if they Were going to go with an HBO Max series. I could I would like to see just a series Going into what he was like prior to becoming this dream demon Because we know we get clarity on how he exactly did that how that happened we find that out in part six and it's just Just like oh like it's part six is just so so asinine I I can barely bear myself to watch it at times It's just so bad and we haven't seen Robert England even portray this character Since Freddy vs. Jason in 2003 and when I say we haven't seen a portrayal clarify because I know I'll get people in the comment section We haven't seen him portray this character in a feature film for the nightmare in Elm Street franchise Since Freddy vs. Jason He's made appearances in the makeup recently over the past couple of years for other things But they had nothing to do with being a feature film or any type of TV series related to the original continuity So if they do a HBO Max series would love to see something detailing what Freddy's life was like prior to him becoming this demon Would love to see more things from his childhood perhaps because that's one thing about Nightmare Nel Street 6 That was somewhat interesting because at least you're diving into What makes Freddy Krueger Freddy Krueger in ways not really giving us too many concreants But we get a better understanding that he had a horrible upbringing of course since he was in a lot of abusive homes In and out of foster care it seemed So going from that route jumping into pitches for films What would we even be able to do at this point because I don't see Robert England England himself has stated he doesn't see himself portraying this character again because he's too old But a lot of people have speculated about this gentleman Kevin Bacon Kevin Bacon portraying Freddy Krueger that was something I was not up for but at this point after seeing so much of Kevin Bacon and reconsidering and knowing that Kevin Bacon is a talented actor I'd like to see what he could do with this character I something about him now just seems to me to scream Freddy Krueger And it might have to do with the fact that so many people have hyped it up So he's actually come out and stated that he would love to portray that character So I'd be up for that and I know a lot of fans of this franchise and fans of the horror genre and just die hard to want to see Kevin Bacon, that's like fanfiction come to life If they actually managed to get Kevin Bacon in this makeup and he gives us a phenomenal performance That's an homage to what Robert England brought us and then giving his own new spin on it That's just gonna be fanfiction brought to life for the best best possible way imaginable It's also giving us a good script to go along with it too. That'll just be perfect But I don't see where else you would go with a film because I don't think I Don't I don't I don't see where you would go because the last time we actually saw Freddy Krueger in the original continuity was him being dragged out of the water With Jason holding his head at the end of Freddy versus Jason. So where would you go from there? I'm thinking you would ignore Freddy versus Jason and then set this immediately after Freddy's dead Or what I'd probably do is I'd ignore Because we're gonna talk about red cons. That's just a new thing. Let's just talk about red cons I would ignore Friday the 13th. They're not Friday 13 I'd ignore nightmare in them streets part 4 5 and 6 and Freddy versus Jason and of course West Craven's new nightmare, even though that is even you don't even need to ignore that because it exists on its own Completely different film. I'd ignore those movies and just have a direct sequel to dream warriors try to do a sequel to dream warriors of some sort and go from there and Who would I like to see helm and direct? Or direct and write the film. I'd like to see a combination of Lee Wanel and James Wan working on a nightmare now Street movie. I think they would do an amazing job with it But those are just my thoughts I just wanted to come out and clarify a few things about what was going on on Twitter And just share my thoughts on what I would like to see for the future of this franchise if they go with another film or TV series But let me know what you guys think about all this down the comment section below If you haven't already make sure you subscribe turn on post notifications that never miss a video in the description I have links on my site on my Facebook all my social media accounts on Facebook Twitter and Instagram You can message me there to let me know if there's any movies news or reviews You'd like me to cover in the future with all that in mind guys. I will see you in the next video


The Japan Aerospace Exploration Agency generated the global digital elevation-slash-surface model, DEM-slash-DSM, an orthorectified image, or I, using the archived data of the panchromatic remote-sensing instrument for stereomapping, prism, on board the advanced land-observing satellite, ALOS. This article was authored by T. Tadono, H. Ishida, F. Oda, and others.


Good afternoon. I am Hemant Bakshi. I am a mechanical engineer working in quality control at Indiana Transmission Plant. It's a unit of Stellantis and V. Previously, we were known as Fiat Chrysler. This is my first time presenting at Open Source Summit. So, I want to thank Linux Foundation for giving me the opportunity to present. Today, I am going to present the work I did in creating Quality Control Dashboard using Python for recording and reporting manufacturing product quality data. For the disclaimer, this work represents the view of the author that is me. It does not necessarily represent the view of Stellantis. Stellantis is a registered trademark of Stellantis and V. Any third-party company product services mentioned are their own. As Tom Peters said, almost all quality improvements come via simplification of design, manufacturing, layout, processes and procedures. Simplifying the process helps in reducing errors and in-term help us create better product and service quality. So, simplification is the goal for the project. So, the overall goal for the project is to simplify the process. Going forward in this talk, I am going to answer how I reached this goal, the questions I had in the process and the methods I used to get there. So, the first question I am going to answer is why I used Open Source. Then I am going to give you a high-level overview of the project and the Open Source tools I used. Then I will dive into the actual project I worked on and lower-level objectives achieved. And finally, the outcomes attained and the challenges I faced. So, why Open Source? Flexibility. So, more control and flexibility in my design, I can create whatever I want to create. It gives me the freedom to be more creative. The second reason I used Open Source was easy integration with different backends and databases. I needed to use different data from various sources. We are using databases like SQL, Excel, Axis, CSV files, Google Sheet forms, APIs for live data. I found tools in Python which I can use to get the data from all these sources and process them at one place. The third reason I used Open Source was good community support. A lot of help available online from the community. You can get almost all your answers online. And the final and the most important reason it was fun.  Working on the project was a lot of fun and was a great source of learning. Here I give you an overview of the basic design. So, the user puts in the input data. The data is then processed and stored in the database of your choice. We then retrieve the data and then analyze to generate useful information. Using visualization and presentation tools, we present the information to the stakeholders in an easily digestible way. So, they are able to make informed decisions. So, we can break down the basic design. I showed you in the last slide into four to two steps. With each steps I am going to highlight the Python Open Source tool I used. The first step is collecting the data. A key part in this step is determining which data is needed. Data might be quantitative data like sales data or might be qualitative data like customer review. We use, I use tickenter to create forms for data inputs. The second step is data processing or cleaning the data. The step is to get the data ready for analysis. There are always errors in the data that duplicates missing data outliers. All of which are inevitable problems when you are aggregating data from numerous sources. NumPy and Pandas provides powerful functionality to do data cleaning and manipulation. The third step is data analysis. That is where the fun starts. Data exploration is done using various data visualization techniques to find trends in the data. The type of data analysis we do depends on the objectives or the goals we are trying to reach. But there are various techniques available like where you like univariate analysis or multivariate analysis, linear regressions, time series analysis, just to name a few. Scikit-learn library has features that allows you to build regression classification and clustering models. Once we are done with our analysis, the final step is to present our insights. We can answer the questions like did our data analytics process derive meaningful results? Were the results in line with our expectations? In this step, it is also the step where we share the insights with the wild world or at least the organization stakeholders. This is sometimes complex because sharing the raw result of your work is not enough. You have to present them in a manner that is digestible to all type of audiences. For this reason, data analytics guys commonly use reports, dashboards and other interactive tools to support their findings. Matplotlib is a commonly used library for plotting data for visualization. Plotry and Bokeh are other highly specialized libraries for creating interactive and effective visualization. While most of the Python libraries are robust and have incredible features and I did not have much trouble in deciding on which package to use. However, I have to do a bit of research in figuring out the best visualization library for the dashboard. So I did a bit of research. Pyvis.org is an open source platform which tracks the current Python visualization tools and developments. The library has been split into information visualization and scientific visualization libraries. The scientific visualization libraries are those based on open GL and provide high dimensional graphs. All other libraries fall into information visualization. This category of information visualization can be further distinguished as libraries based on Matplotlib and those supporting JavaScript. Matplotlib is the basic library available in Python. JavaScript libraries provide interactive feature which are advanced than what are based on Matplotlib. For most of my purpose I use Matplotlib for creating static graphs. I mainly needed interactive to create dashboard that is where I explore JavaScript based libraries. Next I am going to go through a couple of JavaScript libraries and why I decided on the one which I use. So the ones which I was exploring were Bokeh and Plotly. So I started to experiment with some finance data and I plotted some multi-line graph and candlestick on both libraries. I tried to make them interactive by integrating widgets. Bokeh comes with its own widgets while Plotly uses Ipy widgets. I found it easier to work with Plotly. Plotly handles a lot of the graphical works. I don't have to do the lower end of the work in Plotly. But with Bokeh you have to have lower level details that needs to be provided. And that gives you more flexibility in designing your database or dashboard. But there is a big learning curve in using Bokeh. Also Plotly has better aesthetics and interactive capabilities. So I went with Plotly because of the ease of use and its interactive capabilities. So all nice and good now I have all the tools I need, the visualization I need. But the one thing I still needed was to be able to render those graphs as a web page for dashboarding. I needed a web server. So the web server I looked at, some of the web servers I looked at as Viola, Bokeh and Flask. I decided to use Viola because it worked with Plotly and was integrated with Jupyter notebook. So until now I was deciding, I was describing all the tools I used. Now I am getting into how I use those tools to create my dashboard and how I use them to simplify the process. So the process I was trying to simplify was the quality check flow. So the first question we are going to ask is what is the quality check flow? So in any manufacturing facility when a machining operation is done on a part, a check is to be done on the part for the dimension which is modified so as to make sure that it conforms to the drawing specification for the dimension. So in the diagram you can see so once a part is processed through the machine, the machine operator picks up a part from the machine and takes it to the quality check lab to check for the dimension. And he does this at frequency that is defined. So once the part is dropped off at the quality lab, the lab technician checks the part on the gauging machine and verifies if the dimension measured is within specification. If it is within specification he says that the quality tech tells the operator that the part is good and he can keep on running the machine. But if the quality lab tech finds that the part is out of specification, he lets the operator know to stop the machine and get the machine fixed. And once the operator gets the machine fixed he runs another part and brings it back to the lab to be checked again and the cycle continues. So by simplifying the process we were trying to achieve a few lower level objectives for the project. So the first thing we were trying to figure out how many checks we were doing every day. The reason we wanted to know that because we need to answer this question of are the number of checks line up with the number of checks we are supposed to do as per the control plan. And the second objective we needed to find out was in case of a bad check quality check are we reacting quickly? Are we shutting down the machine quickly enough not to make more bad parts? And the third objective was are we recording those fixes whenever we have a bad quality check? Are we recording the fixes we did on the machine for future references? And the fourth objective was to get those three objectives done as painless as possible by automating part of the process. So the plan was to collect data by creating forms, store the data and run a script to generate reports. So how did we do that? So when the machine operator drops off a part at the quality check lab he will fill up a form that puts an entry for the drop off. The lab technician then checks the part and we created another form for the lab tech where he signs off on the check. When he does that an email is sent to the operator and everyone in the department regarding the status of the check. Once all the data is inputted it is stored and I wrote a script to generate report to track progress and I can email those reports automatically using SMTP servers. So on the left is the form I created for the operator to drop off the part and on the right the two forms are for the lab tech to sign off on the check. And these are the snippets for the generated daily reports. So I used the metplotlib lab to generate static graphs, xlx, xwriter to write, draw and manipulate data and chart in Excel. And I use SMTP server to send these files as email attachment automatically. So I have to do less work, less repetitive work. And finally I also created the dashboard to use during our weekly meetings. Using plotly and viola I was able to create this interactive dashboard. I will present you with a brief demo of how this dashboard works. But it not show, yet I am not able to show the other slide. It is not showing up there. It is not power. So it will not. So I have the interactive dashboard but it would not show up. But I cannot see it now. So this is the dashboard I was able to create. So how do I take my cursor over there? Sorry for the delay. So plotly provides interactive charts called sunburst charts which I am using here. So if I click on that, it is a hierarchical representation. So if I select a level I am able to use it as a filter to open up data on the bar chart and the table. I use different sunburst chart as filters by issue and by department. And I am able to use them filters for the bar chart and the table. Also at the bottom I have a pivot table. It is a bit hard to drag. So with the pivot table I wanted to keep the analysis flexible. We can use any feature we want to do a deeper dive and draw insights from. So when I started Python had a few pivot tables packages but I was not able to convert them into a widget and render them to be used in my dashboard. So I wrote my own pivot table widget on top of these packages and I have it in my github and you can go download it from there. Also I was able to put it in the pypy packages so we can import it as a package. So this way I was able to contribute back to the community which has taught me so much. So lastly my experiences, the pros. Python has a ton of packages and good documentation which make it easier for you to learn and implement. Tools and packages you can find tons of tools for almost all of your requirements. And the final is tutorials, lot of tutorials and help available online. And the only cons I could find is we have to be careful about the packages and license you are using as open source. And the second con I could find was the packages are updated frequently and it might create some compatibility issue with future Python versions. So that is how I created my dashboard. Any questions? Thank you. Thank you for coming in.


My full name is Sarah Schneider Chance. I'm a 68 Mike Nutrition Care Specialist. Before I joined the Army, I was a professional MMA fighter. I fought for Bodog, Invicta, UFC, and Bellator. I represented team USA three times. I was the first ever women's world champion in pancreation. I also took two silver medals. The reason I chose to enlist is I actually had a fight, and after I won that fight, I just something came over me. It made me realize that I wanted to be part of something bigger, something better, something greater than I was, and I decided to join the Army. Mainly, patient care, you know, we focus on getting patients better and work alongside a dietitian. Army combatives definitely helps represent the Warriors' ethos. As far as being a fighter, you're still the same thing. You get that courage to go out there and finish the fight and not turn and run from your opponents. What's similar, that I find similar, is the mentorship and fighting and your team. Like, you all train to get really, really good and to go out there and do your best. Army's the same way. You need promotion. All your teammates come in and help you get that promotion or even win that fight. You're all working together to make sure that you're all as strong as you can possibly be as strong. COVID-19 kind of clears away that I can bring back the combatist program and as really a soldier that's what we are. We're meant to fight and go and win wars.


Welcome to User Experience Testing. In this activity, you'll learn about the two different types of UXD testing and how they can impact your website or application's performance. Let's face it, the primary goal of every business is to make money. In this day and age, technology plays a vital role in determining whether or not a business is profitable. If customers don't enjoy using a website or application, they'll go somewhere else, which directly impacts that business's profits. So how can businesses prevent losing customers? They can work hard to develop websites that provide a good, if not great, customer experience. Providing a great experience improves brand perception and keeps current customers coming back. It also brings in new customers through the positive word-of-mouth advertising. Let's examine the two different types of UXD testing, usability and user experience. Usability testing focuses on how users complete specific tasks. User experience testing measures user satisfaction with the website or application. It's clear to see why usability testing is important. Every business needs to know if customers can complete online tasks like finding products, viewing their shopping cart, or entering their payment information. Because user experience testing focuses on user satisfaction, it allows businesses to examine how the user feels. Users are asked to elaborate and explain what is making them feel that way. This leads to a deeper understanding of both the user and the website or application. After analyzing the data from UX testing, most businesses find they can develop an experience that improves customer satisfaction, provides savings in the development cost, and improves brand perception. Many of the same tools used for usability testing are also used for UX testing. It can be conducted either in person or remotely using a video or audio recording. Regardless of how the testing is performed, the facilitators' physical, verbal, and emotional reactions need to be recorded and observed. While user experience testing can be done remotely, testing in person enables the UX designer to ask the facilitator questions during the session to gather additional information about the customer's experience. During the testing process, it's critical to truly listen to what the customers are saying both verbally and non-verbally. It may be hard for designers to let go of their own thoughts and preferences and keep an open mind to any critical feedback. If a UX designer has difficulty remaining unbiased, it may be a good idea to hire an outside party to perform the testing. Today, we examined the two different types of UXD testing and saw how user experience testing plays a role in the successful creation of websites and applications. UX testing plays a vital role in developing user-friendly and profitable websites and applications. You have completed user experience testing.


Four reasons why Argentina is a great place to teach English abroad Argentina is not only the fourth most populated Spanish-speaking country in the world But it also offers great opportunities for English teachers all over the country Attracted by the vibrant culture, exciting nightlife and spectacular natural wonders Many thousands of people come to life and work in Argentina each year Find out why Argentina is a great place to teach English abroad in this article Fascinating natural beauty the scenery of Argentina ranges from snowy mountains and blue lakes in the south to the most Amazing waterfalls in the northeast near Brazil that will really take your breath away The Saro de las 7 colors offer picturesque scenery paired with amazing wildlife and the glacier Pareto Moreno, the largest glacier in the country should also not be forgotten This wide range of landscapes allows you to engage in a variety of activities including skydiving, trekking, canoeing, skiing and much more The diversity of scenery and weather in the country also invites you to try a variety of food and traditional dishes You should definitely try Argentinian barbecue or the unique stulacro, which is made from corn, pumpkin, bacon and sausages marvelous history, culture and architecture Argentina has an incredible history and its culture and architecture. There's witness to Spanish colonial times Most cities in Argentina feature majestic churches and old cobblestone streets of the colonial era that remain next to Modern buildings and commercial centers Large cathedrals and palaces can also be found in cities around the country and do not forget the old train stations that are our true jewels of the colonial times Welcoming and vibrant locals Argentina is famous for its vibrant nightlife and many people go out to pubs, restaurants, cinemas and theaters to socialize It's not rare to find locals dancing tango in pubs and cafes, especially in La Boca, a famous neighborhood in Buenos Aires Argentina's incredible football culture also invites you to head to a stadium and experience the heat firsthand Moreover, Argentina is home to the largest selection of libraries in the world allowing you to forget the time reading Locals in Argentina are very friendly and interested in foreigners visiting from abroad Argentinians always welcome tourists and show great respect to those who want to stay and live in their country Tractive job opportunities Students in Argentina learn English from an early age as it is the most important second language for people in the country As English is important for travel and work in Argentina, English teachers are in high demand here Teachers don't only work for English language schools, but also for major companies focusing on business English On top of that, Argentina has a varied low cost of living allowing teachers to live a comfortable lifestyle And maybe even save some money during their stay Teacher salaries in Argentina are also amongst the highest in the Latin American region The highest demand for qualified teachers can be found in the capital Buenos Aires If you want to work in Argentina It is important to know that the majority of teachers are hired via face-to-face interviews rather than from abroad That's why it is best to travel to Argentina and conduct your job search locally The main hiring seasons are February, March and July, August Are you ready to teach English in Argentina? There are many reasons to go teach English in Argentina and wherever you are based in the country You are sure to have the experience of a lifetime Apply now for your TEFL TESOL certification course and start teaching in a matter of months Speak with an ITTT advisor today to put together your personal plan for teaching English abroad Send us an email or call us toll free at 1-800-490-0531 to speak with an ITTT advisor today


Hello everyone, welcome to Options with Doug, streaming live daily on Bookmap Discord and the Bookmap YouTube channel at 1.30 pm Eastern Time. Before I get started, I need to go through the disclosures. General disclosure, all Bookmap limited materials, information, and presentations are for educational purposes only and should not be considered specific investment advice nor recommendations. First disclosure, trading futures, equities, and options involves substantial risk of loss and is not suitable for all investors. Past performance is not necessarily indicative of future results. The focus of my presentation and the focus of the options-dog chat channel in Discord is options, order flow, the impact of options markets on stocks and futures, and the influence of market maker hedging flow on price action. I have a two-step process for trading and the first is planning, and I use positional analysis. I look at how traders and market makers are positioned in the options market and how those positions change from day to day to develop a thesis regarding the expected trading range and volatility for the day as well as a directional bias. The second step in my process is execution. I look at real-time order flow in Bookmap and real-time market maker hedging flow in SpotGammaHero to confirm my thesis and for setups for entries and exits. Just to be clear, I will be talking about setups today. Those setups can be taken any number of ways. For example, the S&P 500, you can trade that with futures, spy shares, spy options, or SPX options, or ES futures. And questions and comments are welcome, and I will be watching the options-dog chat channel in Discord and the chat and YouTube for your questions and comments, so please feel free to post whatever questions and comments you have. All right, let's get started. My agenda for today, first of all, I'm going to go over news items for today as well as the rest of the week, as well as economic data and events. And then I'm going to go through my positional analysis. Then I'll highlight a few setups that were key to the price action today, the markets. And then finally, we'll take a look at the live markets. So we'll do that, take a look at the live markets in about the last half of the presentation. All right, so first of all, today, there was some economic data that came out today, retail sales at 8.30 a.m. Eastern time. And it looks like this month over month was lower than forecast, but better than the previous reading. And then tomorrow, that's VIX expiration. I believe that's at 9 a.m. Eastern time. And then finally, on Friday, options expiration, the big monthly options expiration. And the last time I checked, Fed Chair Jerome Powell was speaking at 11 a.m. on Friday, and then all during the week, there are a number of Fed speakers every day. All right, let's take a look at positional analysis now. Let's start with the SAP 500. And this is book map showing, again, the SAP 500 futures, ES futures. And before I take a closer look at this chart, let's take a look at a larger time frame. I'm going to take a look at a thinkorswim chart for SPX. This is starting around the beginning of April, when the SPX shifted to a positive gamma environment. Market makers position shifted to mostly positive since the beginning of April. And again, this is a one-hour chart, thinkorswim, showing some key levels here all based on the options market. So first of all, I'm showing the lower and upper edge of the expected move for the week, shown with the dash purple lines. And then the dashed blue lines, light blue lines, are showing the upper and lower edge of the expected move for the day. And then there are some key spot gamma levels, some gamma levels. These are provided by spot gamma to spot gamma subscribers. And I want to highlight a few of these levels. The first is the SPX 4000 level, and that is the put wall. That's a strike with the largest net negative gamma that can be expected to act as support. And then here is the 4110 volatility trigger. And that's spot gamma's proprietary gamma flip level. Below that level, market makers position on the gamma curve is negative. In a negative gamma environment, they have to trade with price to hedge their delta exposure. And in a positive gamma environment like SPX is trading now, market makers position on the gamma curve is positive, and they have to trade against price to hedge their delta exposure. And then note the absolute gamma strike for SPX did move up. Yesterday it was at 4,000, and now it is at 4150. So it moved from 4,000 to 4150. That's the strike with the largest absolute gamma. And then finally, the call wall at 4,200. That's the strike with the largest absolute positive gamma, or net positive gamma. So the put wall, floor, volatility trigger, gamma flip level, the absolute gamma strike at 4150, and then the call wall at 4,200. So those are the primary key daily levels. Now let's take a look at another SPX chart from Thinkorswim just for today. So this is showing SPX just for today in a one day, one minute chart. And just to point out some levels that are in play for today, first of all, down below price here, there's the lower edge of the expected move for the day. And price did not quite reach down. And when we look at NASDAQ, it'll be another story. NASDAQ is trading up toward, last time I looked just right around, that's upper edge of the expected move for the day. And then also there's the volatility trigger, again at 4110. And the zero gamma level just above that at 4112. Let's take a look at book map now. And I've got two columns of notes with levels here. This one on the right, these are spot gamma levels. Again, provided to spot gamma subscribers for a variety of platforms here. They are provided to book map users in the form of cloud notes. In the range of price today, there are no SPX levels that they're showing. The things, the keys for today were really spy levels. So here, this is the spy 411 level that did act as support a couple of times. And then the spy 412, absolute gamma strike, also the volatility trigger, that did act as resistance multiple times. And what this has done today is set up great range day fade trades. Sell the spy 412 level just above the ES4140. And then buy the spy 411 level just around 4130. Multiple fade trades up and down, again based on these two spy levels. And we'll talk more about setups in a few minutes. And let's take a look at NASDAQ. And NASDAQ, an entirely different story. Let's just take a quick look at QQQ levels. Then we'll get back to this chart. So for QQQ, the spot gamma levels, shown in the range on the chart here, here's the 325, large gamma 2, and also the comma combo, combining NDX and QQQ, L4 level, and then the call wall up above at 330. And price action has been entirely different in the NASDAQ today, much more of a trend day in the NASDAQ and a range day in the SAP 500. Let's go back to the NASDAQ chart now. And here's the upper edge of the expected move for the day, shown with a light blue line. And it looks like that has been the stopping point for the move higher so far today. Let's just take a look at one other thing just to give us a better idea of what's going on today. This is thinkorswim. This is a heat map for the SAP 500. And this is showing what stocks are driving price today. It's just a handful of stocks. Basically, Microsoft, NVIDIA, Google, and Tesla. And when we take a look at setups, we'll see that call buyers are driving these stocks. So it's just amazing that call buyers in four stocks seem to be having such a large influence on the entire stock market. All right, so that is the SAP 500. We can take a look at the NASDAQ. There's the same stocks, Microsoft, Google, NVIDIA, Tesla. Also AMD has a little bit more, a little bit larger influence on NASDAQ than the SAP 500. All right, so we'll talk about setups in just a few minutes. So the next thing that I want to talk about is shifts in levels. And while I'm doing that, I'm going to go take a look at the absolute gamma levels. This is from SpotGamma. I'm going to start with SPX. And for SPX, there was one shift higher in levels, like I mentioned yesterday. 4,000 was the put wall and the absolute gamma strike. So 4,000 remains the put wall. What this chart is showing is positive gamma or call gamma above the zero line with the orange bars and negative gamma or put gamma below the zero line with the blue bars. So there's the 4,000 strike. That's the strike with the largest absolute net, negative gamma. That's the put wall.  And then the call wall remains at 4,200, the strike with the largest absolute positive gamma. That can be expected to act as resistance, 4,000 as support, and 4,150 as a magnet for price, especially going into expiration on Friday. That's SPX. And let's take a look at SPI. And we'll talk about shifts and levels. So for SPI, the volatility trigger did shift higher from 4,10 yesterday to 4,12. And the call wall shifted higher from 4,15 to 4,20. So here's the put wall at 4,100, the strike with the largest net, negative gamma, the support level. And then the absolute gamma strike remains at 4,12. And that's pretty obvious, the strike with the largest absolute gamma. And then the call wall has now moved up to 4,20. So there's the ceiling resistance level for SPI at 4,20, support level floor at 4,100. And then the concentration of gamma and potential pinning level, magnet for price into Friday at the 4,12 strike. All right, that's SPI. And for NDX, there were no shifts and levels. So let's take a quick look at the gamma levels for NDX. And I need to do a refresh. Hello, Hector. Good afternoon. Glad you're here. So here's NDX. And note the call wall and absolute gamma striker at 12,975, not shown on this chart. And concentrations of gamma at 13,200,300, 350, and 500, and mostly call gamma. And finally QQQ. I'm going to zoom in on this. So for QQQ, the volatility trigger did shift higher slightly from 323 to 324. The put wall moved lower to 300. So here's the put wall at 300. Support level. And then the absolute gamma strike shifted higher to 325. And then finally the call wall remains at 330. And while we're on this page, I want to take a look at the Vana model. This time I'm going to take a look at the Vana model for QQQ. Give me just a moment. I'm going to see where QQQ is trading right now. QQQ is trading at about 328.6. So that's about where QQQ is trading now. Where I'm holding my cursor, that vertical line. So what this chart is showing is how market makers delta notional, their delta exposure, changes with price. Shown on the horizontal axis. Delta notional shown on the vertical axis. And, excuse me, price shown on the horizontal axis. And there are two curves on this chart. The first, light gray, shows how market makers delta notional changes with changes in price only. And what this is showing is as price increases, their delta notional will increase. And they'll have to sell futures to hedge their delta exposure. And that's typical on a positive gamma environment. And then the second curve adds implied volatility to the equation. So it's showing the change in market makers delta notional changes in price and implied volatility. And that is the van effect, the change in delta with a change in implied volatility. And what this chart is showing is around this level, we're actually starting right here at this intersection. Market makers will have less delta notional to hedge than predicted by the delta only line. Then on the other hand, as price decreases, they will have more delta notional to hedge. So as price is moving lower and implied volatility increases, they will have to sell futures to hedge their delta exposure. All right, so let's take a look at the current level. So around 328, so around here, what this is showing as price has been moving up today, market makers could actually buy back short hedges. So that was providing a bit of a tailwind to price up to around the 330 level. And then at that point, market makers will need to start selling futures in Q futures, which moves the same as QQQ. So market makers will have to start selling futures to hedge their delta exposure, and that should slow down price. And that may be what's happening now as price has made it up to the upper edge of the expected move for the day for NQ. All right, let's take a look at one other thing here on this chart. I'm just going to go to spy, back to spy, and look at this expiration concentration graph. This is for spy, and this is showing buy expiration. So this bar where I'm holding my cursor now, that's the Friday, May 519 expiration. And this is delta notional. So this is showing the orange bar, is showing this is a call weighted expiration. So a lot of this call gamma will expire on Friday, and that could release some of the call gamma that is kind of containing the market in this positive gamma environment. So something to watch out for beginning next Monday after expiration. All right, let's take a look at one other thing. This is the spot gamma index that I like to highlight every day. This is showing market makers position on the gamma curve with a proprietary gamma index for SPX, spy, NDX, and QQQ. The main thing that I watch here is the number for SPX. It seems to change the most from day to day, and this number is positive. Showing market makers position on the gamma curve is positive, and again in a positive gamma environment, they're trading against price to hedge their delta exposure. And spy at slightly negative, no change really from yesterday, and then for QQQ also slightly positive and moved up slightly from yesterday. So this number did move up pretty substantially from yesterday for SPX and slightly for QQQ. Okay, so that is the positional analysis. Now let's highlight some setups, and then we'll take a look at the live market. So I'm going to go back to... Actually first, let's go to... I'm going to go to spot gamma hero here. I'm going to zoom in a bit on this chart. What this chart is showing is price with a white line. The purple line is the hero signal. That's hedging impact of real-time options, showing options trades for pretty much all the S&P 500 complex. SPX, spy, and EES futures. So this is options trades and market maker hedging activity. A combined signal for puts and calls for all these instruments. And let's zoom all the way out. So right now this total number is negative, minus 675 million. So net-net traders are taking negative delta positions in all of these instruments. SPX, spy, and EES futures. Let's just take a quick look at the individual components. There's SPX. That's slightly positive. At 278 million. The next component, spy. And that's negative. Just about the same absolute number, 882 minus 882. And then the tiebreaker here, S&P 500 futures, at about negative 80 million. So let's go back to the total number there. All right, so let's zoom in on this now and take a look at a couple of setups. So remember when I showed the EES futures, and I pointed out some good range day fade trades around the spy 411 and spy 412. So let's just take a look at a couple of those. Zoom in a little bit more. So here, for SPX, first of all, there was a divergent short. And what I'm looking at is right here, this move lower in hero, and then price follows just a couple of minutes later. So that's at 945. And then there was, I would say really not much of a long setup here. And more of a confirmation short here. And that was at around 1010. And we'll keep track of these times. And then a divergence long at around 1015, and et cetera, et cetera. All right, so let's go take a look at book map now. So we've got a divergent short, then a confirmation short, and then a divergence long. And just keep in mind when I'm trading, I have two screens on this computer. So I'm watching hero on one screen and book map on the other screen. I'm only presenting on one screen, so I have to jump back and forth. So that's what I'm going to do now. I'm going to go back to book map, and we'll go back to the SP500. Yes. Hello JC, glad you're here live. So let's zoom in on this morning session. So remember the first trade that we noted was a divergent short at 945. I'm going to zoom in a little bit more. Let's go from 930 to 11. So here's the short. First short at 945. So a little bit, maybe not as quite as obvious as some other reversals, but definitely a shift in order flow. You can see the aggressive sellers coming in there as traders were taking negative delta positions. That led to a quick drop lower and confirmed down here in the sub chart that sell stop orders helped to fuel the move lower as well as sell iceberg orders that large traders use to hide their size. So that was the first short. Again, a divergent short. Then here's the second setup. Let me just... So there's the first short. Here's the second short at the 412. SPY 412 absolute gamma strike volatility trigger. Again confirmed by order flow and hedging flow. And order flow shifts bearish. Green dots up to pink dots down. And again the same shift shown in the sub chart. Now note this time that large traders were buying the move down. So they were coming in with iceberg orders. And note that's shown by this light blue line here. And also note the large iceberg order. Iceberg orders that is 4,378 contracts in 15 executions. And along with options traders that helps to move price higher either an entry here or here back up to the 412 level. So there is the divergent short. Confirmation short. And divergence long. And et cetera, et cetera. Up and down around that paid trades from 412 to 411 back and forth. And JEC notes the 412 SPY level was mentioned in the SPOT gamma AM founders note as a key level. Highly concentrated gamma at that level. High concentration of gamma. So right now the SMB 500 remains in that zone 411 to 412. And note most of the session volume profile here. Most of the volume today concentrated in that level. Alright so that is the SMB 500. Now let's take a look at NASDAQ. And definitely a tale of two markets here. So first of all let's go take a look at HERO for NASDAQ. And similar to the SMB 500 this is a combined signal of NDX and QQQ. And note the total negative 731 million. Notional value. Alright so in YouTube a rash asks what is the difference between VIX one day and HERO signal. There may be a relationship but what VIX is showing is just, and there's actually a, you would have to look for that. Read the white paper and you know this is a new thing, the VIX one day. But basically tied to the implied volatility of zero DTE options. And maybe later in the day incorporating more of the next day one day options. HERO signal is something that is proprietary to SPOT gamma. Something that they came up with. It's H-I-R-O. Stands for hedging impact of real time options. And what SPOT gamma is doing is looking at these various instruments, looking at options trades. And they have refined their algorithms to show the most important options trades and market maker hedging activity in terms of delta notional. So for example for this NASDAQ signal what this is showing is that traders for these two instruments, NDX and QQQ, they are buying calls but not nearly as aggressively as they are buying puts. So this notional value is a positive 90 million that's for call buyers in the NASDAQ versus minus 804 million for put buyers. So options trades for the NASDAQ are not having a strong influence on price today. And that does happen. And it may be this selling pressure along with what I show before that shift in the Vana model for QQQ from sloping down from left to right to flattening out indicating market makers. There's no longer at this point for price, there's no longer much of a tailwind for market makers having to buy back short hedges. Right, so Arash, I hope that answers your question. I encourage you to go to the Spot Gamma website, go to the free resources and there's a lot of information on HERO there that will provide a further explanation. All right, so let's take a look now at, go back to book map, take a look at NASDAQ and this is, to me this is really interesting that this upper edge of the expected move that I put on my chart yesterday has acted as the, basically the ceiling, the upper edge of price today, the upper range as well as the NDX, 13,500 level, that is a large Gamma 1 level, the highest level of Gamma in the ranked 1 to 5, 1 being the most important. And again remember we looked at the Vantemodel that now at this point above the 328 level that price that the Vantemodel was starting to flatten out and as price, if price continues up to the 328, 330 level, the call wall then that market makers will have to start selling futures to hedge their delta exposure. So anyway it's a tale of two indices today and HERO is providing, I thought, much better clues for price action for the S&B 500 than NASDAQ. And note one other thing here is the rising yellow line, this is showing stop orders. So this move higher has been fueled by my stop orders and also iceberg shown by the rising blue line which is a little bit unusual but traders, large traders were buying on the way up with iceberg orders. Usually they sell strength and buy weakness with iceberg orders. So a stop fueled rally with larger traders coming in with iceberg orders helping to fuel the move higher. And these appear to be just a few larger trades here and here but net overall positive even though cumulative volume delta is negative. Alright let's highlight a few setups and then we'll take a look at the live market in more detail. So the setups that I want to look at, remember let's just go back to the thinkorswim heat map, Microsoft or Google, Microsoft, NVIDIA and Tesla. Alright so we're going to look at those stocks. So first of all let's go to Google, very solid steady uptrend to Google and 120 is the call wall and the key gamma strike. We'll take a look at HERO for Google and there that is showing call buyers driving price action higher. So if you're looking to go long a stock this is definitely what you want to look for as traders buy calls, market makers sell the calls and they have to buy stock to hedge their delta exposure. And note the 120 call wall key gamma strike. Let's just take a look at one other thing for Google. This is the spot gamma equity hub. Let's go back to, let's go to Google and now Google has been bullish for a while. I'll just point out this is the equity hub history showing how these key daily levels changed from day to day for the last 10 days and note the steady increase in the key gamma strike from 105 to 110 to 115 to now 120 and this is bullish. Traders are accepting higher prices, they're looking for higher prices and they're positioning themselves in the options market for higher prices. And one other thing to point out and we'll talk more about this on Friday is this is a monthly expiration and note that 35% gamma is expiring on Friday that number will probably increase by Friday and that is Friday 519 the top gamma expiry and let's take a look at this composite view and this green is showing that above 115 this is where Google price action is dominated by calls. Alright so let's take a look at the next stop and that's Microsoft. Again call buyers are in charge although there's a pretty equal distribution at this point in time positive 80 million for call buyers negative 75 million for put buyers. Let's just zoom in a little bit on the morning and around up until about noon there was a much bigger difference positive 83 million for call buyers versus minus 32 million for put buyers. Let's go take a look at the bookbump and note the 315 level that's the call wall up above we'll go to bookbump, go to Microsoft around on this straight shot up in the morning and then consolidation a pretty big pullback down to just above the 311 level and then here's the 315 call wall above so we know that Google is a possible call gamma unwind candidate for Friday and Microsoft is too. All these stocks that I'm going to talk about are all call gamma unwind potential candidates. Alright the next is Nvidia and for Nvidia 290 is the key gamma strike in price shot up it didn't spend much time there kept going higher let's go take a look at hero and again we can see that call buyers are in charge orange line positive 171 million versus blue line minus 33 34 million call buyers driving price higher alright JC I'll answer the question just a minute let me get through one more stock so there is Nvidia and then finally let's take a look at Tesla again call buyers are in charge driving price action orange line 106 million positive versus put line minus 38 million negative we'll take a look at the chart there's Tesla quick move up around just after 10 a.m. and then chop around the 168 to the 169 level and note that 170 is the key gamma strike alright so JC asked for the benefit of newer members what is the call gamma unwind so let's go back and take a look at equity hub and we have this on this is Google so these what traders do is they will buy calls that expire at the end of the week for stocks they're typically doing that every week and for Google we can see that again let me just rank this by next gamma expiry so all these stocks are candidates anything over 30% of this will change by Friday we're just on Tuesday now so this will most likely these numbers will increase going into Friday and what this means is that these calls that traders have been buying expire at the end of the week and so those calls will start to lose value as the end of the week approaches so remember when traders buy calls market makers are selling calls and they have to buy stock to hedge their delta exposure and then as time passes those calls start to lose value and that's the charm effect the charm effect is the change in delta so those calls will start to lose delta market makers will be able to their delta notional will decrease and they can start to sell some of their long stock edges now that may not work sometimes it doesn't work if traders continue to buy calls on Friday then this won't work but if they're not then it's a good bet that that charm effect those calls losing value market makers can sell their long stock edges and that tends to push a stock down so that's the call gamma unwind pretty reliable strategy so we will definitely spend more time with that on Friday but something to keep in mind again I'll be looking at my watch list and note all of these are 519 Friday and this will also apply to the S&P 500 and NASDAQ as well call gamma expiring potentially releasing some more volatility for next week and hopefully some consolidation so there's Nvidia Netflix not so much I'm looking at this composite view chart and looking at the green versus red so the green area is an area of call domination so for AMD above 100 and it's put dominated below that level so there's Google and 115 is the pivot level put domination below 115 call domination above so again we'll be looking for these calls to start losing value as expiration approaches and market makers again will be able to sell some of their long stock edges and that should produce reliable short setups unless again traders continue to buy calls into Friday afternoon let's take a look at the current market and the S&P 500 futures continue trading in this narrow range let's just take a look and see what options traders are doing right now going to go back to the total signal for the S&P 500 and it looks like this continues to lead price lower and higher let's go back and take a look at book map so note that as S&P 500 approaches this 411 level that some larger traders are coming in with iceberg orders it's hard to see there may need to zoom in it looks like some of those orders may have been canceled but this rising light blue line does show that there are some executions there so we know that let's go back to hero so we know that there are some large traders buying with iceberg orders we know the support level so far today has been pretty reliable at 411 so you have if you're very very patient and looking for a long setup that seems to be the next play on deck for the S&P 500 potential reversal higher at around 411 let's just go back and take a look at hero again zoom in a little bit more so this is definitely showing that options traders are options traders are taking positive delta positions make sure I'm zoomed out all the way they may be letting up a little bit all the trend since about 208 has been higher for hero so I'm reading JEC's comments here and discord so JEC notes the way SpotGama makes assumptions regarding market makers positioning for equities is different than indices and that is correct so for indices S&P 500 Nasdaq SpotGama assumes that market makers position or actually traders positions are short puts are long puts and short calls so market makers have the other side of that and their short puts and long calls hence the in the call dominated region and the market makers position is positive gamma on the other hand for equities SpotGama assumes that traders are long puts and or long calls and market makers are short puts and short calls so for inequity options market makers are always negative gamma so that's the difference between an individual stock inequity versus an index let's take a look at Nasdaq see if there are any clues from hero so the only thing we can take away from this is that so far the trend for hero for the entire day has been pretty much steady down traders taking negative delta positions overall let's just see if we can get a better idea of what they're doing so again they're buying calls but the put buyers are winning positive 72 million versus minus 842 million for puts let's go to bookbump actually let's go back to go back to ES and note now this is showing execution for these icebergs the E 1552 executions 5 separate trades so larger traders as well as options traders are looking to fade this move potentially at the 411 level let's go back to Nasdaq so the bigger move today was up to the upper edge of the expected move for the day and now it appears to be potentially unwinding cumulative volume delta sloping down so the long trade was obviously in the morning up to the upper edge of the expected move and then the short trade was at that level just after 1pm eastern time and then a second opportunity for a short at 2pm so if you are looking for a short at Nasdaq I would definitely look for a move higher some sort of pullback move higher before taking a short and then for ES it looks like potential long setting up again at the 411 level although the large cap stocks driving price action could have a say on that so right now it looks like Nasdaq may want to move lower my time is up let's just take a quick look at the stocks that have been driving so Google order flow shifting bearish call wall may at 120 may be doing its job and now microsoft may be rolling over and in video as well so RJ says hero may get its way in the Nasdaq the put buyers may finally be right there's Tesla began moving down around 2pm as well interesting day tail of two markets today call buyers and a handful of stocks driving price action I'm not sure I've ever seen that before but dissecting analyzing the options market really revealed as well as order flow and book back really revealed what was driving price action today alright I want to thank you everyone for watching thanks for your questions and comments thank you JEC and RJ and I will see you tomorrow remember tomorrow morning is fix expiration alright thanks again I will see you tomorrow bye


Introduction Monkeypox is a rare zoonotic disease caused by a virus belonging to the orthopox virus genus and is closely related to smallpox and cowpox viruses. It can be transmitted from animals to humans and is characterized by fever, headache, muscle aches and a rash. The emerging epidemic amidst the COVID-19 pandemic is a cause for concern and requires urgent public health attention. AIM to explore the emerging zoonotic, epidemic threats, future implications and the way ahead in respect of monkeypox. Methodology, secondary data from official government sites, press information, latest articles, newspapers and the World Health Organization, WHO website were extracted and discussed in the article. The current epidemiology of monkeypox with the differences from the COVID-19 pandemic is highlighted in the study. The most probable factors for the emergence and recent outbreak are also discussed. The period of the study was from 20 May 2022 to 27 May 2022 and was conducted in the medical. This article was authored by Suraj Kapoor and Ashwin Vartharajan. We are article.tv, links in the description below.


So, there are three different kinds of micropipettes, the P1000, the P10, and the P200. And micropipettes are used to transfer small amounts of liquid, usually from one to 1,000 microliters. So a way to set the micropipette, so with the P1000, so this ranges from anywhere from 100 microliters to 1,000 microliters. And we see these digits over here, and the way to set it, so if we want to do 800 microliters, we twist the knob at top to 800 microliters, and then when we want to take the liquid out, we put our tip on. The way to put the tip on, in every micropipette has a different tip. So the P1000 have these bigger ones, the P10 is the littlest ones, and then the P200, these middle sized ones. To put the tip on, you go to the top of one of the pipette boxes, get it into the circle, and I usually just do it one more time to make sure that the pipette is actually on.  That's the stop that indicates that's going to be, for example, on this 800 microliters. We go into our liquid, and we go to that first stop, and then when we get to the first stop we let go, and that's 800 microliters. To now release it, the liquid, we go down, we press it until that full stop, and then there's another double stop, essentially, and that gets rid of all your liquids.