Hi everyone, I'm pleased to be talking to you today about my work on ESBL plasmids in Klebsiella in a hospital setting. So first a quick bit of background about Klebsiella. So Klebsiella is a gram-negative bacteria and it's frequently an opportunistic pathogen in humans. Now there are many different Klebsiella species as we can see from the phylogenetic tree on the right. However, species that fall within the Klebsiella pneumoniae species complex, which are the seven species shown in the box, are the most common in humans. And species within the Klebsiella pneumoniae species complex are often multi-drug resistant when we find them in hospitals. And third-generation kephalosporin resistance is becoming a real problem here in Australia and that's usually mediated by the carriage of extended spectrum beta-lactamases or ESBLs in Klebsiella, which are frequently found on plasmids. So we've already done quite a bit of work looking at Klebsiella diversity and strain transmission in our hospital. So in 2013 to 2014, we had a one-year study called CASPA. And in this study, all patients in the ICU were screened for carriage of Klebsiella and we also collected all Klebsiella infection isolates hospital-wide. Overall, we had 440 genomes that came out of the study and these genomes were all sequenced using the Illumina platform to generate short reads. And at the time, one of the PhD students in our group, Claire Gory, worked on this data and she spent quite a lot of time understanding the strain transmission dynamics, which you can find in these three papers here. And so one of the main findings that Claire had was that isolates that we were pulling from the hospital called Klebsiella pneumoniae actually belong to three different species, all of which are in the Klebsiella pneumoniae species complex. And these isolates were incredibly diverse. We did, however, see some instances of strain transmission and these are the lineages or sequence types highlighted in blue. But as I said, Claire mostly focused on what was happening at a strain level in this population and she didn't look too deeply into the plasmids. And we know that when it comes to the movement of antibiotic resistance that strain transmission isn't the whole story. So what we really wanted to understand was what were the dynamics of ESBL transmission in our hospital? So firstly, what is the actual burden of ESBLs during this study period? What are the plasmids that are carrying these ESBL genes? Was there any plasma transmission occurring? And what was the impact of any plasma transmission on ESBL burden? And so we used a combination of Illumina and nanopore sequencing to answer this question. So we took our 440 genomes and the first thing we did is we de-replicated them so that we only had one genome per episode. So that made sure we had a unique genome per patient and per body site to remove any duplicates. And so here is a bar chart showing you the total number of episodes per month of the study broken down by whether the isolate was a carriage isolate or an infection isolate. And when we screened the Illumina data for ESBL genes, we found that 18% of our genomes had an acquired ESBL gene. And by far the most common ESBL gene was CTXM-15. So then to get at what plasmids were carrying these ESBL genes, we then went and did an additional round of sequencing where we selected genomes to do nanopore sequencing on. And the way we selected genomes is we made sure that we were going to have at least one completed genome per species, sequence type and ESBL gene combination. So once we had our completed genomes, then what we wanted to do was to find some more plasmids. So the first thing we did is we've separated our genomes out into what specific ESBL gene they carried. And then we took the plasmids that carried the same ESBL gene and we compared them all in a pairwise fashion. And so here I have an example of two CTXM-15 plasmids. And the first comparison that we would do for each pair was to compare the nucleotide sequences. And we would then get a nucleotide similarity score, which fell between zero and one, one being identical and zero being not the same at all. And so in this toy example here, we can see our nucleotide sequences are pretty similar. We have a score of 0.98. The next thing we did is we wanted to check how similar the gene content was. So to do this, for each pair of plasmids, we worked out which genes were homologous and homologous genes got the same gene symbol, which is what I'm showing here. And then we calculated out of all the possible gene symbols across these two plasmids, how many did they have in common? And that gave us our gene similarity score. And for this example here, the gene similarity score for these two plasmids is 0.8. And then the final thing that we did is we had a look at the order of genes. So if we took these two plasmids and we had the sequence start in the same location, how many of the genes were not just the same, but also in the same order? And so this is what I'm sort of demonstrating here. We have our two plasmids and the gene symbols are pretty much all in the same order, except for the middle-ish genes, gene 4 and gene 10. And so that was a gene alignment score. And in this particular example, the gene alignment score is 0.88. So back to our question, how many different ESBL plasmids are there? This is what we did. We compared every plasmid pairwise and on this graph here, I'm showing just the nucleotide similarity scores and the gene content similarity scores. Each point is a pair of plasmids coloured by whether they come from the same strain or sequence type or not. So grey if they don't and black if they do. And you can see that there's a pretty clear break in the distribution. So in the top right-hand corner, we have pairs of plasmids that are sufficiently similar at both the nucleotide and a gene content level as to be called the same. So when we applied these cut-offs, we found that we had 12 distinct Clebsiella plasmids across our ESBL collection. 10 of these had ink F replicons. They were generally pretty large, at least 100 kilobase pairs in size. And the vast majority of them carried additional AMR genes on top of the ESBL gene. So then we wanted to understand if there was any evidence of plasmid transmission. So to do this, we took our scores and we used them to make a network. And what we found when we made this network is that most plasmids were in a single sequence type. So here I have an example of a CTXM-15 plasmid B and each of the dots here represents a genome coloured by its sequence type and the genomes are connected by a line if they share the same plasmid. And you can see that all three of these genomes have the same plasmid, but they're also all the same colour so they all belong to the same sequence type. And generally this is what we saw for many of our plasmids. They either belong to the same sequence type or they were just a single strain that just carried that plasmid. However, we did find one plasmid that was found in multiple Klebsiella sequence types and even multiple Klebsiella species. So this plasmid we called plasmid A. It carried a CTXM-15 gene. It was pretty big at about 250 kilobase pairs. It had ink FIB and ink F2 replicons and it carried five to eight additional AMR genes on top of the CTXM-15. And you can see by the different colours here in this little network is that it's present in multiple sequence types and in fact the light purple dot actually represents a different Klebsiella species called Klebsiella varicola. So we wanted to have a look at what was going on with all of these different plasmid A positive genomes and what was happening with their sequence types more generally across the study period. So what we found was that plasmid A was present throughout the entire study period. And the first thing that we noticed was that Klebsiella ST323 which is the top row here in this graph in blue was carrying the plasmid throughout the entire study period. So each of these points is coloured in if the genome is positive for plasmid A. And we can see there's ST323 all the way along. We see single instances of ST221 and 5822 both of which carry plasmid A. And then what we see is about halfway through the study we see the emergence of ST29 that's now carrying plasmid A. So we hypothesised that ST323 has donated its plasmid to ST29 and this is our first instance of plasmid transmission into a new strain. And then we also see a couple of instances of our Klebsiella barocola ST347 emerging now carrying plasmid A. And again, we hypothesised that ST323 has donated its plasmid and this is now our first instance of species transmission. So what was the impact of plasmid A transmission across the study? So here I have a bar chart showing the total number of ESBL episodes that have occurred per month during the study. So we had 57 ESBL episodes across the whole study period. 23% of those were due to ST323. However, if we then add in all of the additional ESBL episodes that were caused by strains acquiring plasmid A we now have 53% of all of the episodes throughout the study were due to plasmid A. So a small number of transmission events has led to over half of all of our ESBL episodes during this study period. So this is our hypothesis. ST323 persists throughout the study period. We see occasional transfer of the plasmid into new strains. Two of those strains then go on to cause further outbreaks in the hospital and infect other patients. And we wanted to know if any of these newly resistant strains persisted beyond the end of our study. So we had a collection of all Klebsiella infection isolates from the same hospital that spanned from 2017 until 2020. So we had a look in these isolates to see if we could find plasmid A. And this is what we found. So here again, I'm showing each bar is showing the total number of ESBL episodes per month from 2017 through to 2020. And the bar is colored if that particular episode is carrying plasmid A. And so you can see many of the same colors that we've seen before. So the Klebsiella varicola ST347 is now very prevalent, especially in 2017 and early 2018. But we also see the emergence of a new strain now carrying plasmid A ST2856, which then goes on to cause an outbreak, as well as a single ST5823 that now carries plasmid A. And if we look at the impact of plasmid A in this early time point from 2017 to the first portion of 2018, 64% of all of the ESBL episodes of this time were due to strains that carried plasmid A. So we also just wanted to double check that when we looked at the plasmids from this later time point that they were indeed the same plasmid. And so here I just have a little depiction of what's on the plasmid. So this particular plasmid carries metal resistance as well as plenty of AMR genes shown in red. And here is a alignment of three of the plasmids, one from each of the main sequence types from the first part of the study in 2013. And we can see by the order and color of the blocks that these plasmids are remarkably similar. There's been a small deletion here and we've seen an inversion of this green block in these two representatives here. And when we expand this to have a look at representatives from all of our previous STs plus the new ones, we can see that the plasmid is remarkably similar. So there's almost no point mutations different between any of these plasmids. And the changes that we do see are mostly around insertions and deletions. So we have some small deletions here and this one here and this new sequence type seems to have incorporated a larger new portion of DNA. So I think one of the main takeaways from this study was that plasmid transmission was pretty rare in our hospital, but when it did happen, it had a really big impact on ESBL club cell burden. And I think the other thing that I took away from doing this analysis was it really made me think about how we could go about performing these types of plasmid transmission analyses going forward. So I set specific thresholds that made sense for my data at the time, but I don't necessarily think that thresholds that I've used here could be replicated and make sense across all studies in the future. And I think what it really comes down to is how we wanna define the same versus different when it comes to plasmids. I think one of the really key tricky things that plasmids cause when we're trying to understand this is trying to have a better understanding of how frequently mutational events occur in plasmids. So when we look at chromosomes and we look at point mutations, for many bacterial species now, we have a pretty good understanding of how frequently we expect those point mutations to arise. Whether I don't think we necessarily have that good of an understanding of how often we expect to see that in plasmids. How many point mutations between a pair of plasmids is enough to say this was a recent transmission event versus this happened a long time ago. And on top of that in plasmids, we don't just have to worry about point mutations, we also have to worry about larger scale insertion and deletion events, especially in these AMR regions. How often do these larger scale insertion, deletion, inversion events actually occur? And I have a sneaking suspicion that this is probably gonna vary a little bit by plasma type and also potentially by host background. And I think we really need to get a good understanding of how frequent these different events are if we really wanna be able to use these kinds of genomic techniques to understand when we've got plasma transmission happening in a clinical setting. And finally, I'd just like to thank everyone that was involved in this work. So I'd especially like to thank Kat Holt, who was my supervisor at the time that I did this and everyone in the Holt group. I'd also like to thank everyone in the hospital microbiology lab, especially Adam Jenny. They collected all of the isolates and made them available for me to study. You can read some more about this work in the preprint that I'm linking below. And lastly, I'd just like to say that I'm really keen to hear any of your thoughts or if you've got any questions about what I've presented here today. Unfortunately, it's the middle of the night here in Melbourne. So this talk is prerecorded, but I'm hoping to be awake and available for questions during the discussion portion of this session. But otherwise, you can contact me on Twitter or you can send me an email. Thank you very much. Thanks very much, Jane. That was a fantastic talk. And I'm glad you're still awake. So we have a couple of questions. I'm gonna give you Yana's one. I'm gonna just give you one because of time, but we'll come back to the other stuff from Yana Hussman. Who is Yana? I'm gonna have to ask you how to spell your pronounce your name because I keep relaying your questions. But anyway, Jane, you mentioned two episodes of Plasmid A transmission into a new ST. In one case, in green, you first find the ST without the Plasmid and later with. But for Klebsiella varicola, you don't have another status of the strain without the Plasmid. What made you think this was a new transmission event during the time you were studying? Yeah, this is a really good question. Look, it's just a hypothesis. It's really hard for us to pin down exactly when the transmission events happened. It's not published, unfortunately, this information, but we do know that ST323 had been circulating in Melbourne for a while, not just in our hospital, but also in other hospitals. So we do still think that ST323 is the donor strain, whether that Plasmid transmission event happened in our hospital or in another hospital in Melbourne, we don't know the answer to that, but it's our best guess. Great, thank you. Yana, any follow-up on that? I'll let you type. Jane, that was brilliant. I have questions, which I'll say for later. And I don't know how much of the rest of the session you intend on staying up for. Yeah, I'm hoping to stay for the discussion section after the following talk and then go to bed. Thank you very much. Okay, so let's move on to the next talk from Rob Moran. This is high-resolution sequence annotation and comparative analysis as the foundations for Plasmid surveillance. Rob, do we have you online? Hey, yeah, here I am. Let's see if I can screen share.


So thank you so much for being here. I'm really excited to share this work with you guys. If you're here for the component model, you are in the wrong room.  I'm at UC San Diego. I'm going to be talking about some work that has been done in collaboration with colleagues all over the place. So credit is all spread out. And the thing I'm going to be talking about is, so WebAssembly is kind of this amazing technology from an isolation standpoint. It gives us overheads that are orders of magnitude less than what are possible with existing hardware isolation mechanisms. And this has enabled all sorts of very cool use cases. Unfortunately, Watson also has some fundamental limitations today in terms of security, scalability, performance, and some other attribute that, oh, compatibility. There we go. And so I'm going to talk about two things. First, I'm going to talk about a couple of optimizations on current hardware techniques called Segway and ColorGuard that give us a really nice boost in terms of performance on existing X86 machines. Potentially, we could apply this on ARM as well. It cuts about 25% of the kind of virtualization tax or kind of wasification tax versus native off of workloads. And the other one called ColorGuard lets us increase the number of instances we can run by about a factor of 12. So addresses performance scalability. After that, I'm going to be talking about hardware-assisted fault isolation, which is an extension to modern processors that we've been working on for a couple of years with Intel, collaboration with other colleagues. And it's a very simple set of extensions that's kind of exactly what we want for addressing kind of all these problems in the wasm space. So wasm enables many cool use cases, as I talked about. And again, it's because of these unique properties. And these unique properties are like instance creation that is orders of magnitude lower than what you're going to be able to do on something like Lambda, microsecond scale. And nanosecond scale context, which is very small footprints. And all of this makes it possible to do these high-concurrency, low-latency, edge-compute platforms, like we're seeing from folks like Cloudflare, Fastly. You couldn't do this with existing hardware. Another very cool thing that this has enabled is allowing us to do compartmentalization of untrusted code. So for the last few years, we've been working with the really great folks in Mozilla on sandboxing untrusted libraries. So they depend on all sorts of third-party libraries that are written in C. You guys may have gone to the RL box top earlier in the week. And the reason we're able to do this is really because of WebAssembly. People have tried to sandbox stuff with processes for the last two decades for as long as I have been in security. And it really doesn't work out. Because inter-process communication is so expensive with processes, you have to refactor your whole application. And so most people just don't do it. Things like OpenSSH or browser's use of processes are really the exception rather than the norm. Unfortunately, so Wasm has these fundamental limitations in terms of performance, scaling, security, and compatibility. And I don't just get me down. So my background is in virtualization. I was there in the early days of virtualization. And when I started working on virtual machines, the overhead for using a virtual machine was 30%. So when I'm like, 20% for Wasm, I'm like, wait five years. It'll be OK. But so there are some real challenges here to tackle. And this is what I'm going to talk about. So first I'm going to talk about these limitations, these optimizations, and then finally what we're doing in hardware. Really quick review, just in case you didn't take undergrad computer architecture recently, page tables. This is what containers and virtual machines use. You're going to go get an address.  It's going to look at the address. Part of that's going to be the virtual address that's going to identify the page that you're after. And the rest is going to be the offset into that. You're going to go to the TLB. Hopefully, you hit the TLB. If not, you're going to go look it up on a page table on main memory, do some permission checks, and that's going to actually have you translate your physical address. And the reason I'm kind of bringing this up is because these are the building blocks we're going to talk about. So I just want you to page this back in. That's one way to do memory protection. The other way people usually do memory protection is segmentation. And when I say usually, a lot of old hardware did this. If you're old like me, you remember doing this on the X86. This is largely not in the X86 anymore. But the basic idea is that you describe your memory in terms of extents, in terms of a base and a bound. So you're like, I want to grant access to this base and bound. And if I'm going to load an address, I'm going to look, depending on how I'm doing addressing, if I'm doing segment relative addressing, I'm going to say starting at the beginning of the segment, where's my address in this thing? If it lands in that thing, you're going to allow it. Otherwise, you're not going to allow it. There's going to be some permissions. And your address is going to be done relative to the start of that segment. Sorry, I hope that wasn't too brief. Why am I bringing this up? What is WebAssembly doing? I think one way to think about WebAssembly is kind of like a poor man segmentation. We're taking hardware, which no longer does segmentation for us, and we're using the compiler to give us a segmented memory model instead. And the dope thing about a segmented memory model in software is that it lets us avoid the overheads of hardware. It lets us avoid the TLB flushes, the TLB shootdowns, context switch overheads, all of these things that happen when you get involved with traditional hardware production. Unfortunately, there are trade-offs to this. So there's two ways that we can implement this. The simplest thing we could do would be, let's just add an upper-balance check and a lower-balance check to every load and store instruction. And of course, you can do this, but it's expensive. And of course, this is also not Spectre safe. So what most was in runtimes are doing, if you're running Chrome on your browser on a 64-bit machine, if you're using was in time in the cloud, is a system of what are called guard regions. And so with the guard regions work, right, is you're like, well, I've got a 4-gig address space. I'm going to allocate another 4-gigs after that for my guard region, because I'm going to take my 32-bit offset that I'm going to load. I'm going to add that to a 32-bit heap base. I'm going to get a 33-bit value, 8-gigs, right? And so my accesses are going to land in my address space, or it's going to land in my guard region. If it lands in my guard region, it will trap. There are other things that are done to actually control the end of your heap. So this is great. This is much more efficient than those conditional checks. There are costs in terms of start-ups, slowdown, and resize, because you're still involved with the MMU and still making system calls. And this wastes a lot of virtual memory, which impacts scaling. And finally, this is also non-spectre safe. So more about this. So these scaling limitations, right? Right now, if you kind of do your basic math, 2 to the 47-size virtual address space in user space on x86, 2 to the 33-size virtual memory for each instance, right? 2 to the 14 is 16k. If you organize things a little bit more efficiently, you can get about 20k. But that's the most wasm instances you're going to pack into that 128 terabyte virtual address space, which is kind of depressing when you think about it. So this is a bummer if you're doing serverless, and every request you are spinning up an instance, right? Like if you're a Fastly, right? This is a problem. Maybe for Cloudflare, this is a problem. And this problem is going to get worse with the component model, right? Because instead of each of your applications being one linear memory, maybe each of your applications is 10 linear memory. I don't know what your applications look like, but I feel like anytime I compile something, like the list of dependencies gets quite large. So scaling, I think, is already a problem, and it's going to become a much bigger problem. Another thing is that we don't always get to use guard regions, right? If you want to do 64-bit memories, we're back to those conditional balance checks, right? 50-bit memories on wasm, not efficient. And this also doesn't work on 32-bit processors. And we personally care about this because we ship sandboxing on Firefox to older desktop machines. And there's really a lot of Android devices in the world that are still 32-bit. So this directly impacts us, and we have to pay that tax. And linear memory checks, I'm still adding a heat-base addition to every load and store, so there's a cost associated with this as well. And finally, we can't support all the things out there. Some of this, right? There's a lot of really great work going on in terms of standard servers to address this. Some of this will never be addressed, and this is just, you know, it's a limitation. So next, so let's talk about these optimizations. Again, Segway, it's a fun trick you can play in your runtime that speeds up wasm. Color guard is something that gives you great scalability, right? And so Segway is just a cute trick of using, a cute way to use x86 segmentation. So if you're old, who remembers a 32-bit segmentation in x86? You, that guy over there, right? Like, so if you remember this, right? Back in the day, everything was, you know, you're using segments for all sorts of things, it was great. And in 2003, when AMD released x86-64, right, they took this out. Mostly, right? So your segment registers are still there, most of them just zero relative address, most of the other segmentation hardware was, but you could do more sophisticated things, those things are gone. But we still got two segment registers left that actually do something, and this is FS and GS, right? And the one thing that they do is segment relative addressing. And what operating systems use for today is thread-level storage, right? So if you're accessing thread-level storage, what your compiler is doing, is doing segment relative addressing relative to either FS or GS, and which of those it's using depends on which operating system you're running on. But we have one segment register left. And we can actually reuse the other one too, if we're careful. And so Segway reuses this remaining segment register for a heat-based addition, right? Really simple idea. But the cool thing about this is this freeze-up-a-general-purpose register, and this enables more optimized instruction encoding. And so what is the consequence? Well, if we look at kind of the before and after, we can see we have an extra instruction and we're using extra register, and we can get rid of both of those and give our compiler more freedom when we're using Segway. And you can look at our paper on this for more details. It gets gory. So what is the goodness we get from this? Number one is we get a code-sized reduction, which is very cool because we're shrinking the number of instructions that we have. Good for our iCash. This gives us a nice speed-up on spec. And when we've looked at specific applications, we've seen kind of even bigger speed-ups. And right now, actually, this is shipping in WAMR. And I really wanted to call out this thing about reducing compilation times because we have no idea why this actually is the case. It just is, and when they posted this, we're like, this is great. It's good. Our optimizations are making the world better in ways we didn't even know. So good. So let's Segway. So the second thing I want to talk about is color guard. This is something that helps scalability. And so more review. And so this is a very, very simplified way of view of memory protection keys. But so going back to our page table, right? So each page table entry is there for doing virtual address translation. And memory protection key adds four bits to each page table entry. And these four bits we refer to as a memory tag. And we can think of this in terms of colors. So think of this as like we have 15 different colors. And each of our pages are colored with a different color, kind of like is depicted here. And on each of our cores, we will have a register that says, okay, this is the color of my core right now. Let's say thread for those who are into high-level abstractions. So right, if my register says I can access blue memory, then I can only access blue memory. So how is this useful? How can this help us? Well, so I talked about the way that we use guard regions in Walsum, right? And how that works, right? Is that we are, for each of our instance, essentially burning eight gigs worth of space. And it's not totally burning, right? Some of that address space I'm gonna use. But usually like a Walsum instance, like maybe use a couple hundred megs in my virtual address space. Maybe more, maybe less. But then all that other space, my guard region and the rest of my virtual address space, I'm not getting any value from that. So let's say instead, what if I could use, instead of wasting that, I could put other VMs there. And this is what color guard is letting us do. So what we're doing is we're saying, okay, now that we have these colors, let's say I have like one VM, this is my blue VM. And then if I have say one gig VMs, I'm gonna put seven other VMs decided that there are different colors. And that way again, right, if I kind of going back to, I'm gonna do my heat base addition and I'm either gonna land in my blue VM or I'm gonna land in a different color. And so this way, I'm getting that same property that I got from those guard regions, right? That same nice trick for accelerating bounce checks. But now I'm not wasting the space. You need colors to each sandbox. And we can just kind of repeat this pattern of different colors on each side over and over again in memory. And so kind of the punchline to this, right? If we, so starting out, so if you're wasm time and you've done the smartest thing you can do and you're like, I'm gonna put, I'm gonna use unsigned addition instead of signed addition. I'm gonna use two gig guard regions on either side. So I'm gonna do four gigs, two gigs, four gigs, two gigs. I can pack, you know, roughly 20K instances into that process address space. And with color guard, with half gig sandboxes, now I can do a quarter of a million sandboxes. So it's kind of a really nice win in terms of scaling. Again, this is on Intel MPK. This is also available on AMD since Epic Milan. So it's on a lot of hardware right now. And I think that we will be able to do this with our memory tagging hardware when it is finally available. So now I'm gonna talk about what we can do in next generation processors. So after working with this for a few years, we're like, man, we really need some help from hardware to overcome these limitations. And so this is a result of a multi-year collaboration. Shravan in the back did a lot of that great work. Worked with great folks at Intel and Revo some of the other folks I listed at the beginning. So what do we want from hardware? So we wanted three things from hardware design. Number one, we wanted it to be dead simple, right? And there's a lot of good reasons for this. Number one, we wanted to be able to run on low-end hardware, like IoT devices, and we wanted to be able to run on state-of-the-art server-class processors. Right, and we just like, you know, as one architect put it right, like when you're putting stuff on the data path, this is kind of the Manhattan of chip real estate. So like, you know, every gate, you better have a really good reason for putting it there. Second thing we wanted was minimal OS changes, right? If you kind of follow along with the Linux kernel and like how long it takes for a feature to get into the Linux kernel, right? It took years and years to get MPK in there, and there is still no MPKs to port in Windows, right? So if you want to have impact with a hardware feature, like staying user space, staying out of the way of the kernel is the way to go. Third thing we wanted was we wanted to support several critical use cases. Number one, we wanted to be able to support Wasm, right? And there's things you just want for Wasm that are different from, you know, a cherry, from like all these other different compartmentalization mechanisms, because we've got a trusted compiler. We want to be able to sandbox unmodified native binaries. Right, sometimes, right, you've got a system library, we'd just be able to like be loaded in from like our weird world of using Wasm for sandboxing legacy code. This is something that we really needed.  Finally, we want to be able to support custom SFI systems, right? Custom isolation systems. So like V8 has their own sandboxing system called Uber Cage that they use to contain JIT vulnerabilities.  And they're like, we want that thing you're doing and we're like, awesome. So anyway, there's a lot of love. So we want to support these two environments. And it's interesting, right? Like when we can trust the compiler, we can do optimizations that are not possible with native, right? Because we can trust the compiler, we have this finite set of resources to enforce isolation, and we can let the compiler manage those and you know, spill them. And we get a lot of flexibility from that. But we also want to support native binaries, right? So we're trying to support both of these requirements. So our solution is hardware-assisted fault isolation. And what does this give us? So this provides fast, secure isolation and sharing. So memory isolation is free, right? There is no overhead for bounce checks at all. Because of the fact that we carry those checks in parallel with that TLB lookup, right? So we fit within the amount of time it takes to execute that pipeline stage, so we don't add any overhead. We can enable zero copy sharing. We can map stuff in and out of the sandbox in user space without touching page tables. System call under position for almost no overhead, which is great for native binaries. And we've got Spectre safety. And if you want to talk more about that offline or question time, we can talk about that because it's a nuance issue. We can also do unlimited scaling, right? We can put as many one-meg sandboxes into your virtual address space as you want, right? There's no tax for that. I don't want to do the math on that, but it's a lot. And we can do near-zero costs, sandbox set up, tear down, and resizing, right? Because we're no longer involved with making system calls and messing with the MMU and TLB shoot downs when we're trying to set up and tear down these address spaces. So we're kind of at like language speeds for doing these kinds of operations. And finally, we can provide compatibility with existing code. So the architecture itself is very, very simple, right? Sort of, we have this notion of regions. Regions are, again, like base bound pairs. It's like segmentation, right? We set up our regions. Or say, here's our virtual address space. I'm gonna map this range, this range, this range into my sandbox. When I say HFI enter, the only thing that my code can access now is those ranges of memory. I execute my sandbox code when the guest called HFI exit. It hands control back to some trusted runtime, my wasm runtime, or other runtime. So there's additional details. I'll talk about some of those later. And then, again, hopefully I'll have time questions. So one of the challenges here, right, is that if you wanna naively do this, you're like, well, I have regions. I'm just gonna do two 64-bit comparisons, right? Base and bound. That's fine, right? And that's not going to work out. Because that's a lot of circuitry. Again, we have this constraint. We have to fit within the amount of time that it takes one pipeline stage to execute. And we can't afford that amount of time that would take two of those comparisons. Also, we can't afford that amount of circuit area. So we need to find some way of doing this that is cheaper. And our answer to this is to specialize regions, right? So we have a variety of different types of regions that give us flexibility, but then also let us use less hardware to implement these checks. The first type of region is called an explicit region. And this is segment-relative addressing, right? So we have four of these, and this is great for implementing a wasm heap. We have a choice. We can either have these address more memory and have 64K sized and aligned area or regions, or we can have a smaller addressable space and have byte-aligned regions, which for us doing sandboxing is great because we want to be able to say, okay, here's a data structure, and in place, not modify the code, just map that into my sandbox. And the way that we access those regions is, right? So we have these four regions, and we actually, in the x86, add new instructions, right? And so the region number is actually encoded in the instruction. And the reason that we do this is because we don't want to change the expressiveness of the x86 move instruction, right? So we still get all of our addressing modes. We don't have to constrain our compiler at all, but we get this nice restriction. There is that one industrial restriction that our index now needs to be positive, but as far as we can tell, that's not a significant restriction in terms of compiler optimization. And we can do this with one 32-bit comparator, again, because instead of having to check an upper and lower bound, right, we just have to do one upper bound check. So the other types of region we have are called implicit data regions. And so these get applied to every load and store. Again, this is similar to, if you're used to the x86 32 world, this is a similar idea, right? So for every memory operation, we're gonna go through our regions and we're gonna say, okay, are you in this range? And if you are in this range, do the permissions match, right? If it's a load, then I'm gonna need a repermission. And if everything lines up, right, then I'm gonna execute that load. I've got four implicit data regions, and then I've got two code regions. And so these, my implicit regions, I just use masking, right? So I'm not using a comparator at all, just simple ands and ors. And so again, this brings size, alignment, restrictions, but we have our explicit data regions when we need more granular access. And for heaps, for larger areas of memory, right? I think this gives us the expressiveness we need. And so these choices, right, these like, you know, why do we have four or why do we have two? Came out of our experience with sandboxing lots of different code. Our colleagues at Fastly were like, you know, what's the number that we need? Of course, you know, we can spill these and reuse them, but we don't wanna do that too much. And so sometimes you pick magic numbers and these are our magic numbers. So just regions are not enough, though, right? So we don't just need memory isolation, we need to have some grasp on control. So I don't know, a couple of years ago, Shravan and I were talking about this, and he's like, what should we do about system calls?  This is what I want, right? I just want the support from the processor. So if you've done this before, it like hurts so much, and it's really great to just be able to like, okay, like hear all of my different, you know, sys-enter, int-iddy or whatever, it's just gonna redirect those to a handler. So if you exit the sandbox or you make a system call, just hands it right off to the runtime. And again, like unless you've been through the pain, like you don't appreciate like how great this is. Like I hate P-Trace so much. And again, this is implementable with a simple conditional logic, you know, if a smaller processor or microcode if you're on something like a big X86 core. So HFI has these isolation primitives. Our explicit data regions, they're great for WASM because we can use them for WASM heaps, for WASM linear memories. Explicit data, implicit regions are great for protecting the runtime itself from specter attacks. Also for code regions, right? So software CFI that WASM relies on is not specter safe, but we can use these regions to make it specter safe. And then for native isolation, right? We can reuse kind of, you know, pretty much all these same mechanisms. And explicit data regions, right? If you can actually change your native app, you can use it for sharing too. So we've kind of got this very cool, kind of like two-in-one solution here. So how does it perform? Right, so way better than bounce checks.  But we can do this on 32-bit processors. We can do this on 64-bit memories. We can do this without worrying about specter. We can do this without scaling limits. And for some workloads, we actually see a bigger boost, right, like with Firefox image rendering. We see this like pretty big speedup from getting rid of the overheads of bounce checking. So good, so I have some time for questions. That went a little bit faster than I was planning, but it's okay. So what can you do? If you're interested in this, so first I'll ask your runtime vendor about segue and color guard. I'm looking around. There's some guy over there that's supposed to implement color guard in wasm time. So he's on the hook now. So yeah, so we're kind of getting this stuff out there into production for folks to play with. If you're interested in HFI, come talk to us or talk to your CPU vendor about HFI support. So we've been talking with folks at Intel, talking with folks at RISC-5, and working within that standards body. And basically the money in the bank with pushing architecture features is big vendors who are saying, this is exactly what we want. Like when we talk to the Chrome guys, they're like, okay, this is exactly what we want for sandboxing V8.  And then finally, come talk to us about your production needs, right? If color guard, if the scalability or performance thing could be a benefit to you, we'd really like to know. Shravan and I, like the UCSD, UT crew, like we're all about performance, scalability, security. So if you have practical challenges, we'd like to know about your workloads and how we can help. So I'd love to take some questions, if you guys have some. Things are going well with the people in the Pacific Northwest. I don't know, they're kind of secretive. I don't want to scare them away, like a small animal. And we have really good, I think, supporting momentum in the risk five community. We haven't made good connections in the arm world, so if you know folks in the arm world, that'd be great. But no, I mean, look, Intel folks were involved with the design of this. And so, yeah, so there's definitely a lot of interest there. And then some of those folks went to RIVOS and they're in the risk five community. So there's a lot of first person involvement, which is, yeah, ownership is good. Do you have a question? Oh, no, so there used to be like six different segment registers. Four of them now just do nothing, right? Four of them now, if you do segment relative, it will just be relative to zero. Two of them actually still do segment relative. They don't do bounce checks anymore. When they were first added, you couldn't access them from user space. But then in Ivy Bridge, probably like 12 years ago or something, Intel made it possible to access those from user space. So there's, yeah, so we use them for the real level storage. So they are there on every core, and yeah, you can just use them. Oh, MPK. Oh, yeah, so MPK, right? So each thread, like, your thread will use the PKRU register and say, okay, here's the color that my current thread can access. Because you're only running one thread at a time. I'm coming to the core. Yeah, yeah, and if you have hyper threads, right? Each of those is gonna have its own PKRU register. Oh, yeah. For which stuff? For HFI? I mean for HFI or for Segway and ColorGuard? Oh, ColorGuard is only available on like modern x86 hardware, which is 64 bit. So ARM is gonna have MTE coming out on like Cortex stuff, but I think it's probably gonna be bigger Cortex stuff, so I don't think we're gonna see that down at like 16 bit sizes. We'll have to figure something else out, but we'll talk about that. Other questions? If you're sitting on something where you're like, man, I just have this like really confrontational question, right? I'm Israeli, so like, it's like really hard to offend me. What's that? With HFI? Yeah. It's easier and simpler you mean than like page based? Sorry, you're saying so that, I don't think I quite understand the question. Sorry, so with HFI, yeah, I mean, as long as the check is in. Yeah, exactly, yeah. So does the check's in parallel? Yeah, so you don't pay anything? No. Yeah. Yeah, yeah, no, I definitely mean it simplifies your implementation a lot. I mean, so for me, there's this analogy to kind of like hardware virtualization and like, so when I was at VMware, when I started, it took like a room of like the smartest people that I know to virtualize the X86. I mean, the original VMware system, the way that we dealt with the fact that X86 wasn't virtualizable was that we like literally did a JIT for X86. Like we had the hotspot guys working on this. This is badass. And like, nobody had this for like five years. Once like hardware virtualization came out, once we had like VT and EPT, like writing a virtual machine monitor is like a project for a graduate student, right?  And I think HFI could do the same thing, right? In terms of like doing fine-grained isolation instead of having to like modify, Python for years and like have a like a wasm, a wasm compiler and like all this stuff, right? You know, you just like set up some regions and go. So I think it really, really will lower the bar for fine-grained isolation and like open up a lot of new possibilities for like how we can be doing serverless, how we can be doing security. Yeah, yeah, well, so I mean, it's published.  And I saw like, this is why we are not going to file IP on it. So, I mean, I could have just like wait them out for another five months and then it will be in the public domain. But no, I think it's because it's been done with like UCSD and so many other folks, right? And because it's gonna be in the public domain, it's not encumbered. And then, you know, they'll work obviously with risk five will be all royalty free. So we're kind of trying to let everybody know we're like the opposite of a secret silence. Any other other questions? Segway, yes. Color guard, no. Yeah? Yeah. Well, so it will help you with a base addition but you still have to do the conditional check yourself. Like, I don't think we have a good answer for like, how do you make like, I don't think we can make 64 bit memories like very fast. We're just gonna need better hardware. I mean, you could design other stuff, but like, that's the only fast board I know right now. And I'm looking. Anyone else any thoughts? We've got two more minutes here. Shropping, you wanna troll me? You wanna troll me? Oh no. Ben, you wanna troll me? It's actually my controls. Okay, cool. What's that 128 bit memories? I've had people like Intel be like, you know, I think at some point we're gonna need 220 bit addressing. I'm like, I think the physics gets harder on that one. But maybe, you know, you can do a lot with those like harder bits, right? You know, we keep on being like, what do we do with these top unused bits with 128 bits we could have a lot of stuff to do. Anyway, thank you so much everybody for coming. I really appreciate it. And please come talk to us after. Yeah, love to chat more about this.


As far as history is concerned, things don't change.  Most of the population were terrified. Despite all those horrors, despite the world saying never again, genocide has happened since. History can teach us so much, but we keep ignoring history lessons at our own peril all the time. I was born in 1935 when the Nazis were already four years in power. I was very sheltered. I've got a photograph, for example, when I was two, where I'm a normal happy scruffy two-year-old because you could keep a two-year-old child indoors. I was blissfully unaware of what was going on outside. Almost immediately after the Nazis came to power, my father was sacked from his position as a judge. Aryan Germans were not allowed to employ Jews. The Nazis went about it in a very devious way. They were boo-laubed, which meant released on holiday. The Nazis operated in euphemisms. I was born and raised in rural Bosnia, so it was a really nice childhood. My family had lots of animals. We grew some crops. When I was old enough, I was heard in animals in the fields around the village. I had two older brothers who were looking after me, so my childhood was pretty much idyllic. When I was a teenager, that was a couple of years after Tito, the former Yugoslav president, died. Some media started using propaganda, employing propaganda to vilify one particular group in former Yugoslavia, Albanians. After 1984, this propaganda became more vicious. I grew up in a very stable family environment. I went to school. I played football. I went to this primary school. I received a very, very harsh treatment from one of the teachers. She didn't like tootsies, and therefore she used that reason to really target me. I had started having trouble with issues at school. I was becoming this rebellious young child, doing wearer school. Then football all of a sudden became very important in my life. I started realizing that there were some big issues among the Rwandans when I was about 13, 14. That's when my dad lost his job. Then we had to move the government of that time, putting in place those rules that Hutus had more right to jobs and education than Tootsies had less. From that moment, I started realizing who are among the unwanted members of the community. My father was often in hiding. There was a sort of bush telegraph. The Jewish community got warning of what was happening before it happened. They either hold in their homes, which didn't give them any protection at all if the Gestapo were after them, or they ignored it. Most of the population were terrified. The Nazis dominated and terrorized very early on. Immediately they took power. They started killing people. Completely perverted the legal profession, the teaching profession, the medical profession. In 1991, we started having some serious problems. Six months before my village was attacked, one person who used to work for the local education board was tasked by his political party, the Serbian Democratic Party, to form 13 illegal police stations. At the same time, a lot of my Serb neighbors were given weapons. Either by these guys or by the army that I used to serve some years earlier. And no one spoke about it. At the end of April 1992, they staged the coup. Our freedom of movement was severely restricted. Some weeks later, just after three weeks later, my village came under attack. And then there was nowhere to go, nowhere to run. And when we were ordered to surrender, we congregated on the local football ground. It was clear there was a plan. A number of friends and family members got arrested. Purely because they were Tutsis. More people, people who had no idea of what politics are, who had no interest in the politics, who were just there trying to make their living. And all of a sudden, you had such, had been arrested, such as in prison.  I think we somehow accepted it.  They believed that they were cockroaches. I was a football fan of a club called Rayonspor from the young age because my dad was a big fan of that club. I became a goalkeeper for the club. I went on to play for the club for a number of years and I also played for the national team. When the genocide started on the night of April 6th towards April 7th, I slept and was woken up by sounds of guns and bombs exploding in Kigari. There were so many soldiers around the neighborhood. They came into our house kicking the door in, accusing us to have player parts in the killings of the president. Up till one of them, I think, threw up one of these albums. The photos took his attention. Who are these people? That's me and my teammates. We played for Rayonspor. I said, yes, I know every Rayonspor player.   We started chatting. We sat on the sofa. That moment of him realizing who I was really changed the whole atmosphere there.  I came to England on the Kindertransport in 1939. I can remember being very shocked at the huge size of the boat. I remember being frightened that the boat would sink. Too many people and too much luggage. Under fives. I think everything bad is caused by them. Which, on being abandoned by my parents in a foreign country, I experienced it as my being so bad that my parents couldn't and didn't want me any longer. I ended up in the Amarska camp, the most notorious concentration camp in Bosnia. I started recognizing a lot of the guards. They were basically the locals. Some of them went to school with me. And some of them were my teachers. And I think if they were complete strangers what was going on would be easier to bear than knowing that you didn't do anything wrong. At the beginning there was no food, I think for four days. We were crammed inside one former locker room. There were maybe 500 of us in this room and you just couldn't sit on the floor. There was no space to sit on the floor. It was extremely humid, extremely hot. After two weeks they began the process of interrogations. I say interrogations but it was really the process of torture. Physically I was there for two and a half months but every day was like a whole eternity because you just want to survive. You just want to live. You want to see your family again. During the genocide I lost so many family members including a young brother of mine who was just seven years old at the time. We were forbidden to speak German from the moment we came to the Steds, the first foster family, which I thought was crazy. I remember asking my brother, why can't we just talk? And I remember him saying, there are soldiers around. He said, they're English soldiers.  There were stories circulating about America. So the world knew about this place but sadly there was no interest to put pressure on the Serbs to end the violence that was going on inside. ITN and the Guardian, they arrived in Bosnia, it took them some days and once in Bosnia Karajic, he played their host trying to dissuade them from coming to the northwest They were persistent and they finally arrived in the region on the 5th of August 1992 so I guess they didn't know themselves if there were really camps in the region and unintentionally they saved my life. They came to hunt for this story and inadvertently they forced the Serb authorities to close down the camp. The lessons of the Holocaust have not been learned. It's a fundamental lesson that all human beings are equal as human beings. We're a long way from accepting that. I'm only one person, I can't do anything about it anyway. I think that was probably the attitude of most people and still is today. We need a massive drive to raise awareness of the existence of human rights. I have seen and survived something that I feel no human being should ever be aware of. I feel that humanity can benefit from such stories in hope that they don't have to go through the same experiences. The Genocide 80-20 group is a group of students mostly from our school but we work with students from other schools as well. We're trying to raise awareness of genocides that have happened so spreading stories from survivors, from experts who've worked in genocide response but also we're trying to make sure that genocide never happens again. It's trying to teach people the warning signs of genocide and what they can do to help make a difference. Genocide 80-20 project was founded about 14 years ago and it came about through one student coming to see me one day after a lesson. I'll tell him history. And he said, Sir, I've seen a film about something that happened a long time ago in a place called Rwanda and the club essentially started as myself and this boy investigating what happened in Rwanda. From there we were able to invite a survivor to come in to speak to us and as time progressed more and more boys got to hear about the project and what we were doing and they joined and it grew from there and as I say the rest is history. Yeah, I think it's really important there's to it in schools it's very easy for these things to kind of slip into history and people forget about the atrocities that can be committed by people and I think people should be aware of it or to push for more action to be done to stop it. So throughout a typical year of the last 14 years of the Genocide 80-20 project there's been the routine meetings that we hold every week and those meetings build towards a particular aim so whether it's the production of a newspaper, a booklet, whether it's an event in Parliament is essentially anything that the boys think will make a difference. For this year we're planning a genocide awareness week and we are also planning sort of an expedition up to Parliament to talk with the all-party parliamentary group around genocide and we wish to really get more engagement from them. The main thing is awareness. Most people don't even know a lot about the Holocaust they only remember what they were taught in history class but a lot of the time people don't even know what's going on in these terrible situations in China and other places and so if people can have that conversation you can have a network effect where people are talking about this confronting these difficult conversations, these difficult topics then hopefully more awareness will be spread and then that puts pressure on people in authority. I'm really proud of everything that the boys have achieved here they join a club thinking this is just going to be another lunchtime club but what they soon learn is that when they're empowered with the knowledge and speaking to survivors and so on they can actually make a difference so they're listened to by MPs, they're listened to by statesmen and they soon realise that yet they can make a difference and the ripples from the project that they've created can spread far and wide. The New Holocaust Learning Programme is a newly developed learning programme for young people aged 13 plus The session entails a hybrid model of working with a facilitator a trained facilitator in Holocaust education and it also incorporates spending time within the Holocaust galleries with a learning device in groups the activity on the device that they use to guide themselves around the galleries is very engaging it expects students to really take control of the choices that they're making within the galleries work as a group students will find the object within the gallery behind a glass panel and then have the opportunity to explore the whole object including the bottom and the sides and things like that and through doing that exploration we also provide them with information that is not included within gallery text so we're giving them a deeper understanding of why that object is in the gallery if you were to go into other galleries if you were to hear a talk it's very easy for students to switch off and not engage whereas the learning device that we provide students with to use throughout the gallery it really forces them to take note and to take part with the rise in digital and social media and digital technology students are very often not challenged on their opinions and can often go through life not really knowing much more than what is within their comfort zone and so it's really important that we challenge that because that's how you can be more empathetic to different people who have got different experiences and are different to you it's all about just being empathetic and being understanding and accepting of everybody The Generations Photographic Exhibition photographs of nearly 60 Holocaust survivors who are all based in the UK we coordinated survivors to have their photos taken by fellows of the Royal Photographic Society working with some of our sister organisations who work with Holocaust survivors around the UK and the exhibition shows these survivors some of them with family members some of them with objects that are very dear to them some in their own homes and it's a celebration of the lives they've built in the United Kingdom For me this project was about memorial, about remembrance not forgetting but also showing the concept of hope really The experiences have been many varied from hidden babies to sitters who survived the Holocaust through the goodwill of people around them who survived pretty sticky situations you know, war and conflict and degradation in concentration camps and survived because of great luck and stoicism and endurance and perseverance and I suppose that is a message about life really During the Second World War the Holocaust was a thing that defined how we saw and visualised humanity going forward and I think that it's a lesson that we need not forget The title Generations has multiple meanings it recalls the generations who were lost, lost because they were murdered and the survivors who were celebrated in this exhibition almost all of them had no relatives left when they arrived in Britain and they rebuilt their lives here many of them have gone on to build families here and for many of the photographs you'll see generations within the one photograph the survivor with their partner with their children with their grandchildren, some of them with great-grandchildren so it celebrates the families that they've built as well as the members of the families who were murdered of course not everybody was able to rebuild families and some survivors chose not to have family members in their photos so as we look at the photographs we think about the absences who's not in these photos and we celebrate the people who are in the photos it's so important that we pass on that legacy because the generation of Holocaust survivors themselves are passing away and the responsibility for sharing their stories and their experiences shouldn't only rest with their own direct descendants we all have a responsibility Holocaust Memorial Day we all come together in our schools, our civic centres our places of worship and museums and cinemas we all take this one day to learn and to think what can we do what specific tangible actions can we take that will make one day without genocide a reality the Holocaust was an experience of mass murder on an industrial scale 6 million Jewish people including one and a half million children using the most sophisticated and industrial modern technologies memorialising and remembering those individuals murdered just because they were Jewish is important in and of itself I think it's powerfully important that we keep telling these stories because as the next generation arrives on planet Earth and these stories are not told there could be a tendency to forget and that would be catastrophic because I think that we as human beings tend to forget history tend to forget the lessons I think it's the duty of everyone especially in richer safer countries to make a real effort to learn about the stories from survivors of genocides as well as to stay informed about genocides that are going on currently because the truth is that genocide can happen anywhere at any time to anyone and unless we take the messages from the past we won't be able to recognise the signs of genocide and we won't be able to put in place measures that can stop it there are many people who would say that humanity hasn't learnt from the Holocaust and of course it's so easy when you look around the world now what's happening to Uighur Muslims in China or Rohingya Muslims in Myanmar and to think that we've not learnt those lessons humanity still persecutes minority groups simply because of the community that they belong to and we all have that vulnerability to to seeing people as the other and feeling afraid of the other and wanting to remain within our own busy groups and our own echo chambers but we also have within us that capacity to be welcoming and outward looking and be in solidarity with other people and learning about the past I think gives us all that opportunity every year to remind us to squash down that bit of us that is vulnerable to division and to enlarge that bit of us that is outward looking and open welcoming to other people there is nothing that really shows that what went on in Rwanda 23 years ago where over a million innocent people lost their lives within just a period of 100 days had contributed to any lesson on how to deal with future tragic events as someone who survived genocide I can feel that human rights right now are very vulnerable in the UK I can see some very strong parallels between what is going on in the UK and let's say in America and what happened in former Yugoslavia I say we always live just one step away from genocide we have to make sure that we protect our human rights most people don't understand that when you go to bed and wake up the next morning somebody may have come overnight and taken that piece away from you people should look at survivor stories try and go to survivor talks look in the newspapers and really find out about situations around the world but they should also educate themselves about what is happening locally because history tells us that stronger communities communities that don't create an other communities that don't fracture into them and us are stronger communities and therefore these sorts of things are less likely to happen the important thing is to learn for a purpose learn from genocide for a better future I think the critical thing is always to have the conversations with people in your circle because if you can get a population which is educated on these issues why they're happening then as a group of people it puts pressure on politicians and the people who actually have the power the easiest thing you can do is just have the conversation which is difficult for itself we constantly have to fight for our human rights because so many people before us have fought for them and died for them


Welcome everyone to our talk on motion design and how to improve user experience with animations. We're really happy to be here. So short introduction. My name is Sarah This is my co-presenter Lise. We work for Amazelabs as front-end developers you'll find our Twitter handles and the code pendlings on the slides and And Amazelabs is currently hiring. So if after 25 minutes you still think this was pretty cool come talk to us So here's a small animation we created with G-Sap G-Sap is green sock animation platform It's the last for Drupalcon drop logos that evolve into each other using morphing and drawing animations Lise will show you a bit more in depth and in code how you can do stuff like that So we're really excited and let's get started The agenda as a short intro will show two brief examples how to and how not to do animations then invisible and immersive and how that What that means in the context of animations Then from the ten top principles we selected three and we're gonna explain those three in a bit a bit and then the biggest part will be examples and some code So when we talk about animation that improves the user experience We are not talking about things like this unholy abomination I'm gonna give you a couple seconds to watch that and appreciate it So sites like these are why animation gets a bad rap that is animating for the sake of animating Good animation is well thought through and designed. It requires planning and should be part of your development process So when we talk about animating your site, we mean things more like this This is an example of a site with immersive animation, which is not as commonly used But it's a good example to showcase how motion that has been designed can improve the flow of our websites and ultimately the user's experience So immersive and invisible animation Good animation can be broken down into two groups immersive and invisible To briefly explain the differences immersive animations are things like data visualizations where animation is the purpose Invisible animation is animation done well as part of a UX flow. It doesn't announce itself Well conventional animation may have 12 basic principles, which are originally defined by Disney in the 1930s There are many people who believe that this can be consolidated into 10 principles for motion design I'm quickly going to talk about the top three principles that Sarah and I have chosen which we believe to be the most valuable So squash stretch and smears this gives weights a sense of weights and flexibility Objects change shape as they move and depending on the depending on the elasticity of what they're made of When using this principle, it's important to maintain the volume of an object to make it look realistic This can have the tendency to look childish. So it needs to be subtle and natural looking Follow through an overlapping action not everything stops at once This helps give the impression that the characters are being the laws of physics And in this instance the character is whatever object it is that you're animating Timing spacing and rhythm. This is the amount of time it takes for an action to happen And the changes in speed over the duration of an action's timing This also makes animated objects that they appear to obey the law of physics and it can establish mood emotion and reaction So enough with theory. Let's check out some examples there will be animations that we think are really nice and improve the user experience and second part of the examples will be code and Stuff that we did so we go in more depth That's a page transition and it shows really nicely on how to keep a user's context We don't just switch the page or what we clicked on doesn't like suddenly come up from from above or from a weird side But we click on it. We know we clicked on the grid it enlarges. We can follow it with our eyes We know where we click. We know where we go through and we know where it goes back and On top of helping with UX it also just looks nice. I mean if there was no animation, I definitely prefer it Zooming scaling up Here's an iOS screen opening an app no transition no animation at all Just breaks context new page. I'm not sure did I click the right icon or not Here's the same thing but with animation So you know you clicked the weather icon it grows out of the icon and you know you're in right up That's skeleton screens The UI incrementally completes on the right side and Both screens take the same amount of time till they load But the right one just feels way faster because I start seeing Things appearing on top and the bottom can still load but also read I already read and see content Big sites like medium or Facebook use skeleton loading a nice contact form It's pretty playful. So don't use this if you work for a bank or insurance might be too childish It also has a lot of context switches, but since the elements move and transition you can follow it where it goes Where did it come from? Really nice and fluid Okay, so now we're going to show some examples where we dig into the code just a little bit So over here we have a search input field. I just need to get my mouse over here So we can actually use it There we go Cool. Okay. So when click the search icon morphs into the input field and the text animates in from the top This is created using g-saps morph SVG plug-in Let's see Again, so this utilizes some of the principles that we spoke about earlier such as follow through an overlapping action Which makes it feel smooth and organic and like it's obeying the laws of physics. So you'll notice when I Open it the text slides down and then the cross slides in just a little bit after with a little bit of delay This helps make it feel more organic. So it's to get into the code Just to give you like a bit of context. So, you know what we're talking about over here are some of the variables that were defined Here we've This is how you create a timeline in g-sap and here you can see it's incredibly simple literally saying morph a into b that's how easy g-sap is and This over here, you can see How we trigger this by toggling the active class and how we make the timeline play in reverse Onto the next example of a share button So if we click it like that Okay, so The one of the important principles of concept concepts here is that you don't have to show everything all at once You can reveal things when the user needs it or when the user asks for it This is also using the principle of squash and stretch. So it's maintaining its volume So it makes sense that when I it's a large We've obviously enlarged it for the presentation. You wouldn't actually make it that large on your website But when you click on it and the other buttons are sort of pulled out of it the original button gets smaller So it's maintaining its volume This example also animates from its origin. So the human brain is saying that's in there and we all know there's no There it's all just code But it gives a good sense of context for the user So it's going to the code this animation is entirely CSS and it's quite complicated But I wanted to quickly show you how powerful sass is if you really dig into it Here are some of the variables that have been defined and one of the mix ins here is another more complicated mix in Which this one is used for distributing the social share icons All of these examples are available on our codepains if you want to play around with them and dig into them a bit more and This is the only JavaScript that was used for that animation, which is what's used to trigger the animation on click So now something quite the opposite. This one is entirely JavaScript probably So this is the Drupalcon animation that was done using g-saps draw plugin morph SVG plugin and Shapeindex plugin. It's quite intricate. So we're just gonna look at a small part of it So over here you can see the piece of the SVG code. We've got a path Called V1 which stands for Vienna one, which is that first section of the Vienna logo and D1 Which is the piece of the Drupal Con Dublin logo that it morphs into in that section over there So the D1 that path is actually hidden. It's just plain none You will actually never see that but I'll explain a bit more of that later Just for some context here are our variables and here we've created our timeline So you'll see I've said repeat negative one and yo-yo true repeat negative one is what makes an animation loop in g-sap and Yo-yo true is what makes it Reverse so it'll play through and then reverse back We will so use labels a lot in this animation So you can use a label to inch to make multiple sequences trigger all at the same time Which is what I did so here we've got v1 and and D1 morphing into each other So in the animation at this point v1 2 3 4 and 5 morph into D1 2 3 4 and 5 all at the same time Using that label and then here is how the morph actually happens. So quite simple again You're saying take the path of Vienna one You choose your ease G-Sap has got some really great eases. You can also create your own eases Then you're saying more fit into the shape of D1 and what's important to note here Is that you're not making that D1 path visible? You are changing V1's path to the path of D1 so from that point onwards You will still be targeting V1. It will just look like D2 and now has Look like D1 and it has D1's data So then the shape index plug-in you'll see here. I gave it a shape index of 8 With this example, it's quite tricky with the SVGs the Vienna the Vienna piece has very few nodes whereas the Dublin one has a lot of nodes which makes it very tricky to make them morph into each other and Often if you try to use this plug-in and you try to morph things and it just looks like a mess It's probably has to do with your shape index so What the shape index does is you can change the node at which the morph originates from Yeah, and then you can see at the bottom there That's where you add in your label and you say when you want the sequence to trigger so a small chart we did not the nicest but Just about how can we animate charts? They're usually usually hard for websites because how do you make them responsive and This is done using chart tests the small library It makes all the charts SVGs which is nice because then we can animate and change them and it's automatically responsive out of the box so how can we Have this draw effect no matter if it's a pie chart or doing donut chart We first need to get the length of the pass the path is so we know how long do we need to animate so each slice We need to know how long it is and Then we set the dash array too much exactly that length so It's actually it's hidden because the the dash array property Is the space between if you have a stroke meaning a line in an SVG? It's the space between so the higher the more the higher the distance between those dashes if it's the same length as the past The path is actually not shown and then you animate it from that length down to zero So it draws the line and that's a drawing effect And then we define the animation so the ID we need of each slice so we can sync them So the second one starts when the first one ended The geo is duration. How long should that take from to from where does the animation animate to? And the fill freezes needed Otherwise the animation would jump back to its initial state and it would not be visible anymore So we need to freeze it so it draws the whole circle login form we click it and Shaking its head that's only CSS transform and Here's a key frame so zero and a hundred they don't change at all on the x-axis the form stays where it is and then 1020 we move it minus 10 pixel on one side plus 10 pixel on the other side and back and forth That's how it's shaking and then we just tell it to take one second to shake Ease and move forward not backwards the whole animation an upload button also entirely CSS except for the Click toggling Okay, that's misaligned Maybe to be more but so basically we have the button and on One side we have a spine element. That's exactly the size of the button But it's hidden because we translate it x into the minus and the button obviously has an overflow hidden so we don't see it and then we Transform it for two seconds slowly having this progress effect, and it moves and fills up the button that we saw And the cubic bezier is just that it's not linearly, but like goes fast and then slows down Yeah They're actually in code exactly aligned with the button. So don't mind that just check the code So That's the check That's drawing itself. It's also using the dash offset to draw. It's an SVG path it Takes 1.5 seconds and it's delayed by the amount that the other progress bar takes to fully load so it only happens afterwards and Then the fill mode forward linear default. These are default values and The key frame so what it first does it has the hundred percent hundred pixels That means the check mark is hidden and that goes to zero So it's drawing itself again, and then we slowly also move it up and the next element is Coming in which is the uploaded button. So the upload moves up the check mark is drawn and then the uploaded moves which is hidden and translated a hundred percent below the button and Delayed four seconds. Yeah, cuz that's a sum of the progress bar and the check mark and then it moves up as soon as the check mark is gone and Translate 50 50 that's just to vertically and horizontally center the uploaded text in the button So animation is often implemented as an afterthought and considered the sugar on top when it's treated this way It will fulfill this way It's a powerful design tool which can be used to greatly improve the user's experience But when used incorrectly it can hinder the user and end up causing an overall unpleasant experience Motion design should enhance the user's experience and add meaning to a design It's an important tool that every designer and developer should pay attention to Thank you very much Any questions? Thank you for the really nice animations. I have a silly question because do You obviously probably receive from the from the designer Documents where it's like in very detailed explained how animation should work Does it work that way or do you sometimes event them on the spot and then suggest to the client that this is better You mean we work in the process you do you receive a document where it's like really deep in detail or do you vent on yourself? So I've got a bit of experience with this The designer that I mostly work with Jason in the Cape Town office We often will sit down together and discuss things in great detail and plan things and you know discuss like is this possible Can we do this? How long is it going to take and yeah, it's part of the process that we Go through and we decide upon the animations that we're going to implement So like intense communication with you and the designers essentialize you Yes, and how does it work if you work with a large project and your designer sits in a different country You have an experience with that There's an application called zoom Is it possible to work just over over Skype or is this being physically together? Yeah, well at amazing. We've got a lot of remote developers or remote people in general And I've actually never really experienced any issues working remotely with people It's very easy to contact someone via Slack or zoom and you just discuss and yeah You talk about the animation with JavaScript. Do you have any recommendation?  I really like G-Sap G-Sap has been performance tested and It Performs as well or better than CSS obviously there's instances where you'd prefer to use CSS But if you're going for JavaScript and you've made that decision, I would definitely recommend G-Sap There's a lot of extra libraries on top of tween max and timeline max Yeah, it's incredibly powerful. It's quite easy to use as a very large community as well It's easy to find things out and learn things How do you handle accessibility? Because you're conveying Information through animation How do you present that information to visually impaired people? There are a lot of ways which with SVG text. It can still be readable I Don't quite know how to explain it but a lot of time when you animate text. There are methods which you can use to Have the text will be legible and it can be picked up by like text-to-speech Edits and things like that. Also, that's that's more when it comes to immersive animation. So the sort of subtle things It's not really Going to be affected by that. I don't think well I think if you change a button to the status of upload it You will have to inform the user that you know the action has resolved Yeah, well, that was your button. Do you want to explain you? No, no, no, I mean she okay. No, that felt like I was throwing on the bus. This is how we we work together But so Sarah is a Designer and developer and all of that so and she put a lot of thought into that That button we sat together when she was programming it and I think she's been about like seven hours Yeah, so the yeah, we changed that button a lot of times and just wanted to make it perfect So the focus is on animations here and The accessibility I know it's it's always the thing that we keep forgetting or that projects don't have the budget for and it would be important but In this case it yeah There's not the SVG that you could talk That's her maybe one last comment. I think Accessibility should be your first focus because if I'm visually impaired and I cannot use it I simply cannot use your website So I would suggest start with accessibility and build on top. I mean progressive announcement is still the best way to go So I really like the Animations, but I want to make sure I can use them especially for our government Clients where we have to be accessible Thurley Hey, thank you for this amazing question. I just have a little query How do we decide if I have two options for the animation? What are the criteria's on which I can decide which animation which way I should go this way or that way like there There must be some basic criteria, right? It should be user-friendly easily accessible the colors maybe and so something like that You can do user testing or usually I design a lot of the things I do in the browser itself because only if I see them or I can then Knock on like get one of the other designers to look at it in my browser and then start discussing and tweaking When's the timing perfect? How much needs this to be delayed or? Is there something like the optimizations as well in in the animation designing because I'm a backend developer I really don't know much about the animation design So does the optimizations part comes in and plays an important role as well? Or it's just that you can design whatever the way you want because I'm starting to learn the animation designing for my own project This is why I'm asking this but shouldn't take too long and animation should not be something that the user has to wait for to end because it It should help but certainly not like prolonged anything. Thank you very much Just a quick remark to the accessibility question from you So it's one thing is the animation and then to show people who are able to see that animation That they can experience it and maybe get an added value But on the other hand there are possibilities to add information Which are only visible for example to screen readers and so this is actually in my opinion at least not part of this talk So let's discuss it later I'm just on the topic of optimization a couple Fun facts or things that probably everyone already knows If you're looking at CSS animations the sort of the cheapest properties to animate our opacity and Transform I believe and Then with SVG I always use SVG OMG to optimize my SVGs Depending on the complexity of it because some of them you put it in there and the next thing you know it looks completely different but SVG OMG has a lot of different settings that you can play with and Adjust the precision and yep, usually I mean I get about like 60 to 70% saved on my SVGs that way


What about the investment piece, the money piece, the investment in the business, the marketing, the branding, all that kind of stuff? Can you talk a lot about that last night, too?  And I was spending money pretty dumb. Two ways, one, I wasn't spending enough.   Why is that? Because once I did it, once I made that first step and gave it some time and was reasonable in my expectation. Yeah. You have to be reasonable that not everything's going to work today. It's not going to work today imperfectly, yeah. So once I did it and I gave it the time that it was reasonable to give it and altered a few things and changed some things and start to seeing it work, it comes to a point where if I can spend a dollar to make two or three or four, great, now times that by 20 or 30 or 50 or 1,000. As long as I have that number coming back to me two or three times, I'm okay with it. And so the fear is gone because I've seen that work where I spend the dollars, big, small, little, whatever it looks like, and it comes back to me. Yes. You guys need to take the step, okay? The toughest, the person we need to believe in the most is us. The person we struggle to believe the most in at times is us. It's an internal game, the battle, because even you said earlier, you're with a bunch of the UHC guys at a meeting and you're like, man, I could never do that. That is doubt creeping in, but that's the, a lot of times that's the first thing we think. Yeah. I do it all the time. I'm walking out to a conference and I'm like, man, I don't know if I can do that as good as that person just did. And then I'm like, no, no, no, hang on a second. You can do better. And quit worrying about doing it perfectly. Yes. I'm going to fail. When I walk out this door tomorrow back in my office, I'm going to make mistakes. That's so good, by the way. Every single day, but quit worrying about it. Perfect is impossible. No. And by the way, let me go back. It's no different than you saying in some of your videos, I need to get through how many knows, right?  Same thing with make mistakes. I just need to make enough mistakes that I'm going to get to the point where I'm making the right decisions and I'm going to figure out what's right and wrong. But I'm going to make mistakes all along the way. I'm trying, I'm not there yet, to almost look to make mistakes. Let me see what I can do wrong to figure out what I got to do right. I love that. You're in a place too where I can see from a business career standpoint.  Yeah. It is absolutely the happiest. Yeah. It's such a cool feeling. It is fun. It's fun. Because I'm excited to go back and I've got some really great guys and gals that work with me. But I'm excited to go back and find more people to bring in the team. And see them grow. I mean, that agent that I brought in, we didn't talk about it about a year ago, to see him do so well is just the funnest thing to do. Way funner than anything I've bought recently. Why is it that the people aspect, like helping others and bringing others up and seeing them win, we end up getting more gratification out of that than seeing ourselves win? Because I got excited. He brought his wife and I know his wife and his children, his two daughters. And they're amazing people and they've got a brand new house and they feel comfortable enough to buy a house with the opportunity that him and I and the other team members are developing. And that's really fun to watch. I mean, it's fun to have my own home. It's fun to us to go on trips and I'm going to keep doing that. But to see him feel comfortable enough to take those kind of risks and do those kind of things and grow his family is just. I think you see that. I think you feel and see that you're really winning and succeeding when you see you helping others win and succeed too versus just being about us like it's easy. I almost think too, like if someone has the ability to be Casey Peterson with people and freaking blow up their business and start to think on a different level and help people that they're selfish if they don't, that's weird. I couldn't agree more. Okay. No, it is weird. Okay.  Is that selfish? Yeah. Yes. Yes, it is. Yes, it is. That's the answer. That's a good analogy. How many people now have to go out and figure out on their own? That's not ego. I don't think that's pride at all. Yeah. I don't think it is either. That's a really good point. What do you guys agree? I want to hear in comments below because that was brilliant. It's fun.  Why are the people aspects so important to growth? Not from the satisfaction winning success standpoint, but from the internal engine, like you've seen the best thing that I've personally ever done is surround myself with incredible freaking people. And man, I am so grateful and so blessed to have unbelievable people. Yeah. It's neat. I've got another guy that's only been a couple of months in our office and he is driven.  And you ask why the people thing is so important because he's like 24. I'm 47. I learn from him all the time. I'm excited about what he has to share. And so the people aspect is great because you get to learn and grow and be better because of these other people around you. My admin, she's got some huge goals in her life and I'm watching her do it every day. She wants to be healthier. I watch what she brings to eat. I watch what she brings to lunch. She talks about what they did over the weekend and some of the big goals that she has. And so to be involved in some of those things and the other five stories I could tell you is really exciting because it takes you out of you. I get in my head a lot because I have all these decisions to make. I have all these things that I want to do. And so I start putting my head down and going to work. And when I take a step back and start paying attention to what these other people are doing around me, it puts my head in the better place. It makes you better too with people watching. Yes. It's like you're always playing a game, a basketball game with people in the stands or with teammates. So I learned something about that. I used to, years ago in another career, I always had my door shut. And until people came in to meet with me, I had my door shut. So in this career, my door doesn't get shut unless it's a client meeting. So they can hear me on the phone. They can hear me in my interaction. My kids call, they hear me. Sometimes my kids do things and they upset me and I have to remember not only are they listening, but I should be doing the right thing and how I interact with my kids and other vendors. I love that. Like I wanted to blow up at a vendor the other day, like lose it on this vendor. They completely botched a huge project. All right. Stop. What would you do? Now let's see what Casey did. Well, what I would normally do with my door shut is I'd come unhinged. But because my door was open, I had to take a beat. And because I took a beat, I was able to put it in perspective and say, what am I going to do about this? Because in my mind on this person who I have a long-term relationship with who's going to help me in the future is going to damage that person relationship. So I was able to take a beat and say, okay, how are you going to fix this? Where I would have said, you will fix this and hung up on it. But because I said, okay, how are you going to fix this? I was able to have put it back in their court. And so the door being open, them hearing how I interact made me a better person because I was worried about my personal relationship with my admin and with my guys in the office hearing me be a jackass. Excuse me. Yeah. That takes a special maturity. Or have been a jackass a lot of times. I can relate. Yeah. I didn't want to be that guy again. Never again. Hopefully never again. Hey, if you enjoyed this, I got another one you're going to love. It's right there. Click on it. See you in there.


Welcome to Alabama Smart Yards. We're creating beautiful landscapes that protect natural environments. Today, Danny Carroll will talk about our native pollinators and share some ways that our yards and gardens can create habitat for them. Pollinators are a very important part of our lives from pollinating the food we eat, food for wildlife, as well as pollinating plants that produce textiles and building supplies. Bees are the most common and abundant pollinators. We have over 3,500 native species of bees in North America, as well as the European honeybee. Numerous other insects are common pollinators that visit flowers, mainly for nectar. Each one serves a specific purpose. Moths are night active and pollinate flowers that are open at that time. Butterflies are not as efficient as bees as moving pollen, but they can visit long, deep flowers. Flies find their specialty in stinky flowers. When it comes to pollinators, it takes all kinds. Providing food, water and shelter is an important part to maintaining our populations of bees. Plan your garden to provide flowers all year long. Many of our native bees are active at different times of the year. Provide various shapes and colors of blooms. Limit pesticide use in the landscape. Identify the pest first and always follow label directions to minimize pollinator impact. And many of our so-called weeds also provide forage for bees. Therefore, minimizing mode areas is a great way to enhance pollinator activity. Don't forget about habitat. Most of our native bees nest to solitary bees in the ground or cavities, like small holes in trees or wooden fences. There are many practices we can implement in our own yards and gardens to help our pollinating insects flourish.