Welcome to another episode of Ask Google Webmasters. Today's question is from Marcus Keppeli. Marcus is asking, can we have a clear answer to the question how to handle headings and accessibility? I see a lot of multiple H1s, all but one are usually hidden, out there on the web. Everybody treats it differently, and stuff like the main tag. So this is a pretty common question, and it's pretty straightforward. Our systems don't have a problem when it comes to multiple H1 headings on a page. That's a fairly common pattern on the web. We use headings to better understand the context of different parts of a page. Having clear, semantically understandable headings is useful in understanding any given page. However, we have to work with the web as we find it, and a lot of it isn't semantically structured at all. For users, the difference is minimal. Both kinds of pages can be extremely relevant to a question that they have. In turn, our systems aren't too picky, and we'll try to work with the HTML as we find it, be it one H1 heading, multiple H1 headings, or just styled pieces of text without semantic HTML at all. In short, when thinking about this topic, SEO shouldn't be your primary objective. Instead, think about your users. If you have ways of making your content accessible to them, be it by using multiple H1 headings or other standard HTML constructs, then that's not going to get in the way of your SEO efforts. I hope you found this answer useful, and if there's anything else we can answer for you in short video form, please send us your questions using the Ask Google Webmasters hashtag on Twitter so that we can include them in one of the future videos. To stay in the loop, make sure to subscribe to the channel and see you next time.


In this video, we are going to see how the hyperconjugating effect of an alkyl group changes if I replace these hydrogen atoms with other heavier isotopes of hydrogen like deuterium and tritium. Isotopes, if you remember, are basically different atoms of the same element, right? Hydrogen has three isotopes, hydrogen 1, hydrogen 2 and hydrogen 3. All of these have the same number of protons, all of these have the same atomic number. And as you know, atomic number gives the chemical signature of a particular atom. So because all three of these atoms have the same atomic number, all of these are essentially hydrogen atoms. However, if you look at their mass numbers, which is nothing but the number of protons plus number of neutrons, their mass numbers are different, right? Hydrogen only has one proton and no neutrons, so it has a mass number of one, while this one, H2, has one proton as well as one extra neutron giving it a mass number of two, while H3 has one proton and two neutrons giving it a mass number of three. So these two isotopes, they have extra neutrons in the nucleus and these two are definitely going to be heavier compared to the hydrogen atom, right? So H3, which we commonly call tritium as it has a mass number of three and we represent it by the symbol T. Because tritium has the highest mass number, it's going to be the heaviest, followed by H2, which we call deuterium and represented by the symbol D, followed by the hydrogen atom, right? Hydrogen, in fact, is going to be the lightest of all of its isotopes. Now it turns out that these small differences in mass of these isotopes also affects their ability to show hyperconjugation to a surrounding cation or an alkane. So how does that happen? To understand, let's take a carbon-hydrogen bond. So let's say we have a carbon-hydrogen bond out here. Now we generally represent a bond by a straight line, but in reality the atoms in any particular molecule are not static, but these atoms keep vibrating. So a chemical bond is more like a spring. So you can think of this bond as vibrating like a spring, right? Now in a carbon-tritium bond, because tritium is heavier than hydrogen, so it turns out that it doesn't vibrate as much as a carbon-hydrogen bond. So therefore on an average, a carbon-hydrogen bond is longer compared to a carbon-tritium bond. Now because on an average these bonds are longer, this means that the electrons in this bond are further away from the nucleus of both of these carbon and hydrogen atoms. So therefore there will be a weaker electrostatic attraction out here between these electrons and the nucleus of each of these atoms compared to the electrons in a carbon-tritium bond. The electrons out here are much closer to the nucleus of both carbon and tritium, so there's going to be a stronger electrostatic attraction between these. So therefore because the electrostatic interactions are much weaker in the longer carbon-hydrogen bond, so it's easier to break a carbon-hydrogen bond compared to a carbon-tritium bond. In fact if you look at the bond dissociation energy data, if you look up these values on the internet, you'll find out that a carbon-hydrogen bond has a lower bond dissociation energy compared to a carbon-turtium bond. It's easier to break carbon-hydrogen bonds followed by carbon-turtium and the most difficult to break would be the carbon-tritium bond. Now coming back to hyperconjugation, because hyperconjugation involves breaking of these bonds, these carbon-hydrogen, carbon-turtium and carbon-tritium sigma bonds. It's a form of sigma pi resonance, so therefore because it's easiest to break these carbon-hydrogen bonds followed by carbon-turtium and carbon-turtium. So therefore the hyperconjugating effect of a carbon-hydrogen bond will be greater as it's easier to break compared to carbon-turtium and carbon-tritium. So if you look at the stability of these three cations, let's call this A, B and C. In all of this the cation can be stabilized via hyperconjugation. However this sigma pi resonance will be much easier in A as it's much easier to break these carbon-hydrogen bonds compared to carbon-turtium and carbon-turtium. So the stability imparted by the CHC group will be the highest followed by CD3 and CD3, right? So therefore stability wise A is going to be more stable than B followed by C, right? Now a quick note out here, from the point of view of hyperconjugation, a CHC group shows a greater plus H compared to CD3 and CD3. Now these alkyl groups, they can also show inductive effects, right? Because carbon is more electronegative than hydrogen, it can pull some of the electrons in this bond, it can pull some of the electron cloud towards itself, thereby making it partially negative, right? Now if you compare CH3 and CD3, even out here this carbon is more electronegative than the tritium atom, so even this can become partially negative. However because the carbon-turtium bond is shorter, the electrons in this bond can be much more influenced by the nucleus of the carbon atom compared to electrons in a carbon-hydrogen bond. Because this bond is longer, the electrons are further away, so the electron pull by the carbon atom is lower, so therefore the amount of charge that gets developed on the carbon atom of a CD3 group will be higher compared to that of CH3. So a CD3 group will have a greater charge density on the carbon atom, so it will push the electrons in surrounding sigma bonds much more compared to a CHC group, right? So from the point of view of induction, the trend is exactly the opposite, CD3 is a stronger plus I group followed by CD3 and CH3. So once again if you look at the stability of these three cations, on the basis of hyperconjugation, the stability of A is going to be greater than that of B which will be greater than that of C as a CHC group shows the highest plus I effect. But if we consider the stability purely on the basis of induction, so if we think about the stability purely based on the plus I effect, then because CD3 has the highest electron density, it will push the electrons in this sigma bond more towards this cation compared to CD3 and CH3. So therefore purely on the basis of induction, C should be more stable than B which should be more stable than A, right? So as you can see hyperconjugation and induction are working exactly in the opposite direction out here. But remember because hyperconjugation involves actual delocalization of this sigma electrons which will lead to an actual delocalization of this positive charge which is not the case in case of induction. So therefore these hyperconjugating effects are much stronger compared to induction and therefore the correct order of stability would be A greater than B greater than C. Now that you know how replacing hydrogen with its isotopes changes its hyperconjugative and inductive strands, can you figure out the stability order of these given cations? Pause the video and take as much time as you want and try and figure out what the correct stability order might be for these cations. Okay now that you're done let's see how each of these groups affect the carbocation stability. Now a CD3 group is an electron donating group, right? It can donate electrons to the benzene ring via hyperconjugation. Let's also not forget that this CD3 group is also an inductive group. It can also push electrons into the benzene ring via induction, right? So this is a plus H as well as a plus I group, right? In fact all of these are plus H and plus I groups. All of these are plus H and plus I, right? However as we have seen in our previous videos whenever we have an electron donating group attached to a benzene ring it only brings about negative charges at these positions, right? It brings about negative charges at ortho and para of the electron donating group. So when out here the negative charges will get developed out here, right? If you are not sure exactly how this is happening feel free to check out the previous video in which we talk about in detail about how these charges occur. Now as you can see in both A and C these negative charges will get developed right under the cation. So if you draw the hyperconjugating structures in case of CD3 if you keep pushing these electrons. If you keep doing that you will see that in one of the resonating structures will have a lone pair right next to the empty orbital of this cation. So both of these can overlap and stabilize the cation, right? So the CD3 group out here can stabilize this cation. Similarly if you come to see if you draw the hyperconjugating structures out here you will see that even out here this CD3 group can go and stabilize the cation. However if you come to B when we have a CHC group attached at the meta position if you draw the hyperconjugating structures out here if you keep moving these electrons. If you keep doing that you will see that in none of the resonating structures does this negative charge come right under this carbon atom. So therefore in both B and D because the electron donating groups are at meta so therefore they won't be able to stabilize the cation via hyperconjugation right? So in B and D because hyperconjugation is not leading to extra stability so hyperconjugating effects are going to be not that important right? Now that we have established how the attached groups are affecting the cation. Let's try and figure out the stability order. So A and C are clearly going to be more stable compared to B and D as they can stabilize the cation via hyperconjugation. And between A and C because CD bonds are weaker and easier to break compared to CD bonds. So there will be a greater hyperconjugating effect in case of CD3 compared to CD3 so A is definitely going to be more stable compared to C right? Now between B and D hyperconjugation doesn't play a role so the more important effect out here will be the induction and because CD3 shows a greater inductive effect compared to CH3. So therefore between B and D D is going to be more stable compared to B.


Welcome everyone. My name is Florian Schmidt. I'm an engineer at Nutanix and together with my colleague Ivan Teter-Evkov I'll present lessons learned building a production memory over commit solution and The title really already says what we set out to do We wanted to create a self-adapting memory over commit solution, which sounds easy, right? well Obviously, there are some pitfalls here and we soon realized that we can't write everything from scratch Especially not our own memory management So instead we decided to leverage existing technology and it turns out that that was probably a good choice because a lot of Building blocks for such a solution already exist So we could use the Linux memory management system C groups for control the verdiable loondriver inside guests procfs for stats collection and so on and so forth and The only thing that was really missing was a central tool that tied all of these things together and This talk is about design choices and challenges that we faced on the way Now when we talk about memory over commit there are two practical solutions that are in wide use for that ballooning and hypervisor swap with ballooning you have a verdi or driver inside the guest that Allocates memory and sits on it and then gives it back to the hypervisor for used by other VMs the advantage here is that the guest can choose which memory to give up and The guest generally knows best This might also not cause swapping because it might choose to give back memory that is not even in use at the moment The big disadvantage is that this requires guest cooperation. So if there's no balloon driver or the balloon drivers broken You're out of luck and also the state gets lost on reboots So memory that was handed back might suddenly be used by the VM again breaching the contract basically The other option is to use hypervisor swap where you treat a VM basically like any other application You swap out parts of it when you need more memory and you can control how much each one of those uses with C groups The big advantage here is that no guest cooperation at all is required And when you first set out to build our solution We thought well the balloon driver sounds nice, but if it's not really supported by By every guest we want something that is you know applicable everywhere. So let's just go with hypervisor swap Of course hypervisor swap also has some downsides and the biggest downside is probably its performance Especially when you are hit by a problem sometimes called double swapping and let me explain to you what that means So here we have an example set up we have some memory Part of which of the host memory is used by the VM and then we have swap at the host level and we have swap at the VM level now If the host decides that the VM needs to give up memory It can identify some idle memory and swap it out to the host swap Shortly after the VM might also realize that it is under memory pressure Search for some idle memory and decide to swap it out except now to swap this same page out It first needs to swap it in just to swap it out again on VM swap Even worse if the VM is under memory pressure chances are to even swap this memory in You first need to swap out some memory to swap in some memory to swap out some memory And you can probably see where this is going you create a lot of additional IO and can easily end up thrashing badly and The most insidious part about this is that the better your memory management system works Or the closer the ones in the VM and the guest and the host are the more likely it is actually for this to happen Because they will identify the same idle pages So I think we have established that ballooning might not always be available or reliable But hypervisor swap can have severe performance issues So the solution here is pretty straightforward We want to combine both to get the best of both worlds and the guiding principle would be that you use ballooning Where it's possible and you fall back to hypervisor swap where it's necessary So simply if you want to shrink a VM You would first try to balloon out some memory and only then reduce the c-group reservation of the VM and Conversely if you grow a VM you first grow the c-group limit and then you balloon in the memory that is now available Of course as I said if the balloon driver isn't available or just doesn't want to comply Then eventually you give up and you just use hard c-group limits Another problem that we saw is that When a VM starts swapping Then it needs memory and it needs memory fast because the performance is tanking But if you use up all your memory then to grow one VM you first have to shrink other VMs Before you can grow it and shrinking a VM can be a quite slow operation IO is of course slow, but also the ballooning API is not the fastest in the world So a Solution here is to keep some buffer memory At all times that is not in use by any VM and then when a VM needs memory We can quickly grow into that buffer and then asynchronously after the fact we reclaim memory from other VMs to replenish this buffer of course, there's a trade-off here between Reaction speed so we react quicker But we reduce the overall memory efficiency because now there's some memory around that we don't permanently assign to any VM But this seemed to work for us pretty well to increase the reaction speed Now I talked a lot about growing and shrinking VMs But we need to make a decisions which we have to grow and shrink and for that we need some stats to make these decisions and if we have a balloon driver then we're actually in a quite lucky position because The balloon driver is not only a control interface. It also collects information Inside the VM and makes it available to the host and so for example, we can get information about how much Swap in and swap out has happened at a VM level Which is important because from the outside we can only see IO and we can't know whether that is swap IO or other IO We also get information about how much memory might be reclaimable from the VM There's a stat called usable that is Provided by the balloon driver, which is defined as The amount of memory that a VM can give up before it starts swapping and that is exactly what we want to know for our scenarios If we don't have balloon driver information or maybe in addition to it We can also have some stats available at hypervisor level. So Swappings from hosts level swap we can identify because the number of major faults of the chemo process, which owns the VM memory Will increase Conversely, there's not really any single stat that allows you to identify host swap out Which might be quite valuable. You can try to come up with some rough heuristics to estimate that but it's it's tricky and If you're talking about reclaimable memory again Then what you can do is you can do some working set size estimation, but more on that later in this talk So now we have ways to grow in shrink VMs and we have stats So now comes the point where we tie these together into an algorithm and add a basic level our algorithm works like this we Categorize VMs either as needy Which means that there's some swapping going on like some not insignificant amount of swapping and then we say the VM needs more memory Or a VM can be greedy. That is it's not swapping, but it has unused memory to give up Now one problem is for these greedy VMs We saw that we have ideas of how much memory is reclaimable, but conversely We can't know how much memory and needy VM needs to stop Swapping and being needy it could be a little it could be a lot We can't know so the best that we can do is we can give it some memory Then check whether that improved the situation and if not give it some more memory again So the algorithm goes like this You look at the VMs that are running on the system and you order them by their neediness So you can see here for example the red VM has a lot of memory pressure a lot of swap happening The green VM is not swapping as much, but also so if you order them You have the red green and then the the two VMs that are not showing any neediness at the moment and then You hand out based on that list position so the red VM gets more memory than the green VM and the blue and yellow VM give up some memory accordingly and Then you come up with this plan and grow and shrink the VMs accordingly and then you rinse and repeat that Over and over again. Of course, there are a lot of special corner cases and Situations that you have to think about but I will not go into detail in this talk And let's just suffice it to say that this is the basic idea of this algorithm Okay, I will now hand over to my colleague Ivan for the rest of the talk Hello, and let's talk a little more about the metrics and stats we collect about the running VMs As Florian said, we have quite a few available at the host level such as Proc of S files and we also use the virtual balloon driver stats reported about the in-guess situation This is useful. However, the virtual balloon virtual your drivers are not always installed in guests or they may be malfunctioning for some reason In this case, we've been looking for more stats at the host level to get more insights about the in-guest workload And the working set size is one of them It's fairly it's fairly accurate and it's reliable always there. We can trust it Practically high estimate means that you need some memory. There are some corner cases But they are other one of situations that handle the metric is based on the page tracker available in the links kernel As many of you know, it's a bitmap interface indexed by the page frame number PFN within the host address space We could of course, we could check all the pages available within the host get the Working size estimate for the VMs, but this is not practically achievable at scale because of our harness of gigabytes or terabytes of memory so we need to do some sampling and We've been considering two approaches. The first one is to sample the guest address space with the page map interface So you could get the sample set within the guest address space map it to the host PFNs and give it to the IPT This this is possible but this comes with a computational overhead more guest address spaces You have more CPU cycles You need to burn to filter out the PFNs and things worsen with the memory because you have fewer more guests within the same address space on the host The second one is Getting the PFN sample within the host address space and filtering to assign it to the running VMs with the KPHC group interface It's another binary file that says this PFN is being accounted by this C group Partition within the memory controller and this is possible in our case because we put each guest each VM into its own C group partition The computational overhead is still there, but it's constant and it doesn't depend on the number of running guests So we chose this approach We create a sample set of uniformly distributed PFNs within the host address space Then we map it to the running VMs with the inode KPHC group interface then we give it to the IPT and get the raw report This report is inherently noisy because we use the random sample set random distribution and therefore we need to do some post processing We use the moving coverage to get the fairly stable and settled metric and this metric is used along with others to make decisions about whether we have needs memory or Could give it away Now let's talk about the issues related to life migration Firstly, I want to highlight that we use shared memory This is because the storage data path for the running guests is handled by a separate process and this process handles the in-house developed storage data fabric in Nutanix and It shares memory with a Kimu This is important because shared memory handling differs from private memory in the Linux kernel and more you dive into the source code within the kernel more you realize the differences Now let's consider an example We have a guest and let's say 75% of its memory is present in the host address space and 25% not mapped either because it's blown away or Never accessed. This is possible for Linux guests and for simplicity. Let's say the host swap is not used for this case the C group the The C group limit is in place and it's nicely aligned with the currently present memory in the in the host address space Now let's migrate it with Kimu from source to destination Kimu must read the entire address space of the guest at least once and Transfer the either the content on the control message that the page is zero to the destination When it happens, it also accesses the pages that are not mapped and as a result of the check whether the page is zero or not the kernel handles this Minor page fault allocates a new zero page gives it to the Kimu then Kimu deals with it when it happens the other you policy kicks in and then it replaces the Inactive pages present in memory with the zero pages just allocated for the Kimu zero check and as a result we have few problems At the end of the iteration we have unnecessarily located zero pages. We didn't want them in first place We also had some swap IO happening that we could have avoided all together and we also mangled the host Sorry, not the host the DMs working set because if for example the guest wants to retrieve the Pages from the host so then this would be a even further performance drug during the life migration This could be avoided avoided all together and there is the way to work it around. There is a recently fairly recently introduced M-Advice called Hint to the M-Advice system call. It comes with the Linux kernel 5.4 Essentially, it allows the user space to say hey kernel. I have this address range. I don't use it it's called whenever memory pressure occurs, please take it away and This is what we're using in the Kimu We go to the is zero page check and before actually performing the check we consult with the page map interface Check of his if the page is present or not If it's not present and if it's zero then we could reliably conclude that more or less reliable conclude that it's not It was allocated as a result of the zero paycheck So we definitely want to get rid of it We mark it with the M-Advice called and the kernel whenever the pressure occurs the kernel simply discards it because it's a clean zero page So this is how we work it around the second problem related to this configuration is that Let's say we have the guests with a similar config But it uses the host swap before performing the life migration In this case whenever the Kimu accesses the swapped out pages It replaces some cold memory some cold pages present in memory with even colder from the host swap And in this case it replaces it mangles the working set size in a similar way to the previous configuration From the guest point of view it looks It looks somewhat incorrect because it has some working set and Now some part of it is being replaced some cold memory is being replaced with even colder memory Which is not we not what we want and In the end we also could avoid it the swap out of the cold pages that currently present in memory for the guests and There are ways to improve it. Obviously we also mungled the working set of the guests similarly a Workaround a solution to this problem is using the page out Hint to the m3 system call. It's similar to the previous one. It comes with the 5.4 kernel and It allows us to say hey kernel. I don't want this pages. Please page them out And since we have them already paged out and the entries present in the host swap Colonel simply discards them So it saves time The approach is fairly similar. We go to this is zero page check We check the page transferred over the destination It goes to the swapping of the page, but then we call the page out and avoid the page Swap out of the pages and this gives us the performance improvement a Problem with the shared memory is that The page map interface does not report the PM swap bit for the pages If they shed memory this this is not a problem for the private memory So from the user space point of view whenever you have the shed memory It's indistinguishable between whether the pages swapped out never allocated and this is a problem in our case There are ways to improve it Firstly, we currently patch the Linux kernel and improve the page map implementation to query the swap cache This comes with some marginal performance degradation, but it's not a problem at all and the second approach is to use the L seek And skip never like it pages with a seek data or sequel and another M in core system call Which is useful. We've been considering it. Well Obviously, let's say we have the We have the guests that has some Memory swapped out to the host swap whenever we do the live migration We probably don't want to transfer. We don't want to page in the pages if it had shed If had shared hotswap file, we could simply Attach it to the destination and then avoid transferring the pages all together. We could only transfer the metadata However, the interface around the host swap is somewhat limited and my colleagues at the Tonics currently working on the feature And hopefully we'll see they're working the next given forum At this point, I want to show you the last slide lessons learned The important lesson is that Swapping and the ballooning along don't work. They have issues with the performance and the hybrid the hybrid approach is the way to go for us We also considered plenty of metrics and deduced need and greed we implemented the custom algorithm On top of that we learned a very important bit that shared memory isn't private memory. It's it differs It's substantially differs and more you dive in the sources more or less that There are also current corner cases around implementation of the certain user space tools kernel space space tools There are ways to improve Kimu and There are also ways to improve the swap subsystem memory subsystem in the kernel nevertheless the Linux ecosystem around them Virtualization is decent and it provides the solid foundation for memory or commit what's needed is just to tie all these pieces together with some sort of control plane and That's essentially allows you to build a memory or commit on Linux And this is how we did it for our customers and now it works and to build enterprise gate product Linux is cool and thanks for watching. Hope you also learned lessons with us and Stay safe. Stay tuned. Goodbye


Hey friends, happy Saturday. It is about 6 45 a.m.. And I am currently at the grocery store to do this week's WW grocery haul I'm going to have quite a haul But I have to be quick because my little Lola has a nail trim appointment at 8 45 So I need to get home while I need to grocery shop get home Unload fill my grocery haul put it all away and be out the door by 8 30 a.m.. So it is going to be a race to the finish But we got to get Lola's nails trimmed and then my husband and I are going to spend the day together We're gonna go out for breakfast or lunch. I'm not sure which one Because today is the day that I use my weeklies And then we are going to do some shopping for some new shoes for him And then we're looking for a little trailer that we can pull behind our riding lawnmower To move things from one area of our yard to another because if you didn't know we have almost three acres So it is a lot of yard to move things around and we want to dig out some Areas and move that dirt to other areas So it just makes logical sense for us to buy a little to behind trailer So that is the plan of attack for today So if you want to see not only the groceries that I picked up for the week But I'm going to show you my entire meal plan Including what I am planning to meal prep for this upcoming week that all you have to do is stay tuned So here is my grocery haul for this week Everything is from Fred Meyer or Kroger with the exception of one thing that I picked up at Costco yesterday That I wanted to show you so let me show you everything that is in my grocery haul for the week And then I will show you my meal plan and what is on my agenda for meal prep first I picked up another box of the organic natural chicken breast I really like these the quality is outstanding and there is no rib meat So it is a true zero point chicken So I'm excited to grab another box of that and that is for some recipes this week I also grab some freeze-dried cinnamon apples I count these as zero points because all that is in here is Apples and cinnamon. That's it. So there is no reason to count this as points I don't usually even eat the whole bag But if you did it's only a hundred calories, which is about the same as a regular apple So I picked up that just to have as a quick snack. I also grabbed some organic unsweetened applesauce for recipes Two pounds of a 93 7 lean ground turkey. This is for an upcoming recipe this next week So I went ahead and grabbed two pounds. I also picked up some organic same brand is the frozen Chicken breast the simple truth boneless skinless chicken tenders I grabbed two packs because I'm going to be marinating these and having this as part of my lunch I cannot wait to share that with you guys. So this should be enough for me for the week for lunches. I also grabbed a pound of Black Forest ham. This is for my husband's lunches as well as for an upcoming dinner recipe Simple truth organic tomato paste I love the tomato paste in a tube because it lasts so much longer once you open it You just throw it into the fridge. So I grabbed that to not only have on hand But also for an upcoming recipe quite a few canned goods here a can of pineapple chunks This too is for an upcoming recipe this next week. It is in pineapple juice, but I drain it So it still remains zero smart points a can of corn which is for an upcoming side dish this next week I grabbed three cans of the healthy request Campbell's cream of chicken now This healthy request is actually less points than the 98% fat free and it tastes a lot better. It's creamier It's richer so I highly recommend the healthy request over the 98% fat free And you can see here that I picked up three cans that is for an upcoming recipe Also, I grabbed some no salt added petite diced tomatoes. This is also for an upcoming dinner recipe And then I also picked up a can of cut green beans. This is for my dogs. They always get green beans with dinner I picked up a big container of extra virgin olive oil spray from simple truth organic I've been really liking this natural cooking spray rather than those ones that are full of chemicals So I've really been enjoying the avocado oil and the extra virgin olive oil I also grabbed this for a recipe. These were on sale at fredmeyer for 99 cents This is the prego roasted garlic parmesan alfredo I'm not sure the points it will be here on the screen, but it didn't look that bad And I thought this would be really good for an upcoming recipe Big box of cheerios. This is for my husband But they are ww friendly if you're looking for a lower point cereal cheerios is a good option Picked up another container of my favorite almond milk. This is the almond breeze creamy almond cashew milk Love this milk. It is so good. It is thick delicious. Yeah, my very very favorite almond milk Two more containers of the too good vanilla yogurt. I really really enjoy this yogurt Only two grams of sugar and only three carbs So if you're looking for a low carb low sugar Yogurt this yogurt is thick delicious. I actually really really like it And then of course per the use I picked up that free ready with I still have a little bit in my fridge But I wanted to make sure that I did not run out I also grabbed some light string cheese again.  I had a coupon for the oscar meyer brand So I'm going to go ahead and just throw this into the freezer You can have bacon on ww if you stick with center cut It is super low points and it is real bacon. So it is of course delicious I also picked up a dozen of the simple truth eggs just to have on hand for the week Some italian breadcrumbs. I'm all out of breadcrumbs and I need these for an upcoming dinner recipe I went ahead and just grabbed the kroger brand because they were literally half the price of the regular brand And they have the exact same ingredients. So sometimes store brands are definitely the way to go I also grabbed some more unbleached flour. I was completely out of regular flour I only have the self rising.  I grabbed the riviera blend. I really like this one It is green beans wax beans and baby carrots Super good frozen veggie blend this of course is my favorite broccoli None of those stems or weird pieces all florets delicious delicious. So I grabbed that I grabbed some peas. I needed that for a recipe and then whatever's left over can be a side dish And mixed veggies again for a side this next week I grabbed some diced ham. This is for my lunch meal prep I cannot wait to share that recipe with you guys super excited for that And here is what I wanted to show you. This is what I was thinking would pair Really really nicely with my light string cheese And I got these at Costco. So this is the country archer brand These are beef sticks and they are about that long. So I would say maybe four to five inches Look at the calories Five 50 calories five grams of protein zero sugar. So that makes these beef sticks only one Smart point they are gluten free. So and paleo by the way. Oh, yeah gluten free And they're also paleo. So if you follow either one of those plans, these are definitely a really good option They are grass-fed Beef no sugar and absolute full real ingredients So there's your ingredients in there And I thought that these would be really good to pair with a string cheese for a very high protein delicious snack So cannot wait to have these beef sticks and the rest of what I have to show you is produce So I've got a big container of blueberries Two red peppers. This is for an upcoming recipe a lemon in a lime, which is also for a recipe One lone potato, which is for a dinner recipe Grab these little packs already pre-packaged up snack packs of carrots They were the same price as a bag and I thought It saved me time and ziploc bags to go ahead and buy them in these little snack packs I also grabbed some mint. This is for a recipe two English cucumbers again for recipes Two yellow onions recipes green onion recipe and that is it now I'm going to show you my drinks that I picked up for the week Fred Meyer did not have peaches and I also want to grab some more yarlsburg lights for red cheese or light cheese slices And fat free feta. So I'm going to make a quick run to Trader Joe's as well today So let me show you the drinks that I picked up for the week. So this week for myself I picked up some ruby red Grapefruit seltzer water zero calories zero points and they had their 24 pack of water on sale for $1.99 So I grabbed that as well. So now let's talk about our meal plan for the week So of course, this is my curio meal planner. I absolutely Positively love this meal planner. It is all inclusive. It is gorgeous There are several tabs for you to use resources Which is awesome. This is where you guys can write in Favorite meal websites blogs recipes so you could list out some of my recipes here Also an inventory section for both your freezer your spices and also there is a pantry inventory The tab I use the most which is meal planning They have week by week meal plans with a detachable Grocery list so you can see Here is the way for you to track your meals for the week and then you can just detach the grocery list I use my detachable grocery list every single week You can also plan out by the month, which I do like to use that as well This is a great at the glance. So if I know that I'm making teriyaki chicken for dinner The night before I can take a quick peek at this and know that I need to pull Some chicken out of the freezer for the upcoming week's Dinners or days dinner. So love the monthly planner There's a tab for gatherings if you're hosting a special event And lastly you have a tab here for notes where you can just take notes And then in the back, which I like this feature a lot as well. There is a little pocket folder This is typically where I keep my calendar of what videos I'm going to be uploading And then that way I have it quickly at a glance as part of my meal planner So that's what I use that for so let's go back and let's go over this week's meal plan So we're going to pop to the meal plan tab And go to this week's meal plan. So for this week, my meal plan always goes saturday through friday So today is saturday. We'll be going out for dinner. This is the day that I use my weekly so I never plan a meal Tomorrow I'm going to be making chicken cordon blue roll-ups cannot wait for that We're going to have some rice and some vegetables Monday night, uh, we're going to be grilling some greek turkey burgers with some roasted butternut squash We'll be doing all of that on the barbecue Tuesday, I'm going to be making copycat. Kentucky fried chicken pot pies Cannot wait to share these recipes with you guys You will be seeing all of these recipes at some point in upcoming videos Wednesday is a leftovers day thursday I'm going to be making jambalaya in my instant pot and we'll pair that with some veggies sounds so good Friday, of course is leftovers as well And then on the back of my weekly planner is where I plan my meal prep for the week So here's what's on my agenda.  That's right One smart point cupcakes. So you're going to see all of this in this week's meal prep monday So that is what's on my meal plan for the week This is my carrier meal planner If you're interested There is a link down in the description box that all you have to do is click on it and it'll save you 10 percent So if you're looking for a meal planner, I highly highly recommend the carrier Thank you for joining me on this week's ww weekly grocery haul I hope you enjoyed seeing all of the groceries that I picked up for the week Plus what is on my meal plan? You will be seeing all of these recipes in some upcoming videos And of course my meal prep on monday's which is always on this channel meal prep monday So I hope you enjoyed seeing everything that I shared with you today If you're new make sure that you subscribe hit that little notification bell that way You'll be notified every time that I upload give this one a thumbs up comment down below Let me know what is on your meal plan for the week And what of the recipes and meal prep that I showed you are you most excited to see and I'll see you guys in the next one Bye


Yeah, good day. My name's Darren. I'm just calling. Use Lock Horan on that lock. Do you have any jobs available at the moment or? Okay, I'm not entirely. I do know we've just gone through a round of hiring but I do know if we were still hiring it would be on our website where it shows what jobs are available. So if you were to head on to our Bunnings website and there's like a little tab along the top part. Yeah, look, I don't actually have access to a lot of computer and that at the moment. But if you've got one there at Bunnings, I can come in and like apply on your computer and that if you have in there because yeah, my laptop broke like six months ago and like because I got laid off like a month ago, right? I haven't been able to fix something that's so like, you know, you saying I need to apply online. It's sort of like catch 22 rock because I need a job to get a lappy to apply online, right? But that's where you use come in like, you know what I mean? Like, and like, I can just if you just want to take some notes and that like I can I can just tell you just just real quick couple of minutes just tell you what I'm good at and that and then and then we just go from there because like resumes and that like like who reads resumes and that these days like 2021, you know, but I've got like, so I used to like my lawns for my uncle back when I was like 15, 16, right? So like, and I did that for about two years, right? So like, I know heaps about the lawnmills and that.  Be one of them floating guys who like goes around and just gives people tips and that about lawnmills and that. And the other thing I'm heaps good at. I built a doghouse for my dog, like maybe two months ago, like, and I just YouTube that like I just went to Bunnings YouTube it and like I put that together took me about two weeks, but she's like she's sound as so like with like little building things and that like I can help out and also like garden and I guess you could like make say like, oh yeah, he's like garden and expert in that. My name's Darren, by the way. The only thing is you've only bounced through down to one of us at the service desk. So what I'll have to do, I'll just have to pop you through to one of our ladies. Yeah, put me on the big boss. Hey, yeah, go on. But there may be a way since you don't have a laptop for you to like apply if that makes any sense. Yeah, no, right, right, right. Yeah, look, like, because applying, I'm sure wouldn't take that long. Like what, like five minutes in there? Yeah, wouldn't take that long. I do know on our website that it does require you to have like a resume and like a cover letter. I'm pretty sure. Right, well, I can write that down on a bit of paper and I can take a photo of that. So that can be my resume. Like, I can draw one up on a bit of paper. I'm sure he's got a bit of paper there in a pen to write. So if I just duck in maybe maybe first in the morrow or like maybe tomorrow are they right? And I'll just write it all out on a bit of paper there and take a photo of it and then I can upload that as my resume on the online bit there. And then I'm sweet to start. I'm sweet to start like Friday, like I'm ready to go Friday. And I sort of, yeah, look, I'll do it for about 30 an hour. And I'll also obviously need holidays and that because like, you know, I've got keep coming on the way in that. So but yeah, if you if you can write all that down and just tell a big boss that I'm coming in tomorrow morning to apply for a job. And then yeah, I'm sweet to start on Friday if he's if he's good to go. What I'll do I'll transfer you through to her now now that she's in. I see I would give you like that finer details rather than you coming in and then seeing her then. No, that's it. Yeah, yeah, no, I need to do that. Yeah, that's it. OK, I won't be sick. No, I'll see you work on Friday, probably. See you later, man. Off to the manager. That's sick. I'm off to the manager.  Good afternoon, my name's Virginia. This is Casey. Casey, is it? Yes. Yeah, Casey. My name's Darren. I was just on the phone with I forget who it was, but she's basically said because I'll call right just asking for a job on that. And she's basically said, like, you need to do it online, blah, blah, blah. But I've come back and said, look, I don't have a working laptop right now, so I don't actually have in net. So I said, if I come in first tomorrow, right? And I just quickly come in five minutes. I use one of your computers and I can apply there. And then I'm sweet to go. I could start Friday this Friday if he's wanted to. I can do the and that chick said, yeah, yeah, all good. She was saying, like, yeah, yeah, she went. So I'll start off. I can start on Friday and that. So like, because I kind of heaps about gardening and stuff. So, like, I can start on this Friday, but I just need to do that. Applying online thing like that.  Yeah, so there's a bit more of a process behind that. So it's not like you apply and you're here in the next couple of days. It's a much lengthier process than that. I wouldn't be able to use one of our computers because they are locked with our business information on them. So we can't have anyone that doesn't work for the business. Do you know what, like, I need to what info I need to log into the computer and that log into whose computer your computer. Like, you know that info, right? Yeah, but we can't. So if you tell me if you tell me that, then like, I can log in and then like, I'll just be like, five, ten minutes. I'll just upload my resume and that and then I'm out of there. It's a bit more lengthy than that as well, because there's a bit of online induction they have to do using using it. So there's a bit more of a link. I understand what you're saying. Yeah, I'm your agent is to get it done. But yeah, sort of struggling with cash. Hey, good. Yeah. So, look, yeah, look, I sort of need some work. Like, I know sort of happen to start by a lot of Friday night.  Like, I go to your banners a lot on nowhere. She is I even know some of the staff there and that.  But like, well, come on, like between you and I, right?   I've been laid off about two months ago and I, you know, I've just been slinging a bit of weed on the side, but I need a new job. Do you know what I mean? Like, it's getting a bit urgent. I'm running out of cash and I've got a kid on the way.  Like, let's just, let's just get on what I want to work for you. Right. You need worker on right here saying, I'm, I'm, I'm ready to go. You know what I mean?   Yeah. OK. All right. I appreciate your eagerness. Unfortunately, we won't be able to help with that. OK. What? So what do you mean? Well, of course you can help. Like he's got computers, right? I'll come in tomorrow. Just give me the logins all apply and then done. She's she's submitted, right? And then Friday, Friday morning, 6 a.m. or whatever you start, I'll be there 30 bucks now. Plus holidays. I also don't appreciate your language or using with me as well. So what language are you talking about? If you can find a computer to do a language, English, English. What do you mean, darling? What language are you talking about?   All right, I'll see you tomorrow. God, dude. That was cringe, man.  Oh, you tell. She sort of let it go as a joke. But then she came back and she brought it up again.  Very good.


Now note that I'm going to right click and do another. I'm going to duplicate this again, right click and duplicate. I'm going to close up the hand boogie over here and note that we can also hit this drop down and break it out by class. So if I break it out by class, run it. Now I've got only one class right now, but if I had multiple classes, this could be quite useful because it's going to give me not only the information per class, but also the total on the right hand side so that those classes are redundant because we already have it in projects, but the ability to break everything out by class can give me a double check on the numbers and can run a nice report that breaks everything out by classes. Now if you don't have the capacity to use classes or you're using classes for something else already, you could do a similar thing with the tags. So I can go to the tags over here and so now I've got my project here, but it doesn't give you that nice total at the end. So it's kind of similar tags are like a little bit, a tear down from doing similar functionality as the classes. So if you don't have capacity because you're in a lower software that doesn't have the classes, you can try to use the tags in kind of a similar format or if you're already using classes and location tracking, then you might use tags for like a similar kind of thing. All right, so then I'm going to go back to the first tab and let's imagine now note that if we recap things here, the way we got that 100,000 estimate was probably something like we estimated the cost of the job and then our profit on the job, which we said was another 30% of the cost, right? Another 30% and that's where we got the 30 that gets us to the 100,000. So if we were trying to recognize revenue kind of as we go on the job, recognizing, you know, the progress in terms of costs, then we could, we would do a ratio or some of something like this. This is what we've actually paid for at this point in time, the costs we've incurred divided by the total estimate, that would mean that we had more basically 16.92% done. So that would mean the revenue that I would recognize if I was on like a trying to recognize a percentage of completion recognize as we go would be something more like the 16.923 times the 100,000, right? But what we've recognized in revenue so far is the 10,000 just based on the billing schedule and we recognize that before we even, you know, paid for anything yet, right? So that you can see the disconnect between the billing and when you might recognize revenue on a recognized on a revenue recognition. So we're going to continue with the separation between the two and then we'll take a look at the differences later. So let's take a look at the next billing item is going to be in next month. So I'm going to say let's say that happens in month three. Let's actually record the billing. So I'm going to go over here and we'll say, okay, let's go back and we're going to go into our projects. Now let's actually record the receipt of the payment and then we'll record the next the next billing that happened. So I'm going to say, okay, let's go drop down and let's say we received a payment. So now we're going to say project number one. And let's say this happened on, we let's say this happened actually on 7071525 and we got paid by the client for that original deposit that we sent out. And it's going to go into the checking account for this invoice. And so let's go ahead and say, okay, save and close and if I go back over here to the balance sheet, what happened goes out of accounts receivable and into the checking accounts. If I look at the checking account, so now we see the payment that we've received. We have negative still because the expenses were greater thus far. All right, next thing, we're going to be back in our projects over here on the left and we're going to say now we had another bill invoice that we're going to be sending out just according to our invoicing schedule. We can pull that in from our estimate using the progress invoicing. And we're just going to say, hey, look, next time the next estimate we had was the 25% 25. So I'm going to pull in 25%. And then it's going to pull in nicely like per line item. So it gives us a nice breakout between materials, labor and overhead that we just kind of made up so that we can see those different line items. And then I'm going to say this happened on 080125 for the invoice. It's going to go into project one. All the classes are going to be lined up. This is going to increase accounts receivable and the other side is going to go to revenue of the 25,000. Let's go ahead and save and close it. And so now we've got income at the 35,000. If I go to my reports here, run it. So now we've got accounts receivable went up for the 25,000 and the other side went to revenue. If I run the profit and loss by date, now I've got 25,000 recognized in August, the second month. Now note, again, over here, you would think if I had revenue recognition, I should recognize something like 16 and then 25 instead of by the billing process, 10 and 25 here.  Let's say that we received, we're going to receive. And if I look at my breakout by class, so now we've got our breakout by class here. We only have one class so far, but you can see the idea. So if I go then to the first tab, let's say we've received payment on that one. I'm going to hit the dropdown and say we're going to receive payment. And on project one, let's say this happens 15 days later at 15, they pay us. Time is passing. Time is flying. So we're going to receive that payment. This is going to reduce the accounts receivable and increase cash. So I'm going to save and close and then go over here and say, okay, balance sheet. The accounts receivable goes back down and it goes into the checking account. All right. And then let's say that we're going to have expenses for for month number three of 19, 527. So let's record those expenses. Next project happens. I'm just going to do it with one expense form again. And we'll say this goes to vendor one. These are expenses for the job on this is going to be on nine one. Let's say actually wait a second. This needs to be on the same date. Let's bring it back down to 815 that were the job that were okay. So these are the expenses for that timeframe. Now it pulled over the same stuff from the last time, but now I've got new numbers. So what I'm going to do is I'm just going to change this to be something like 10. Let's say this is 10,000. I'm not going to make it billable. And then this is going to be, let's say 10,000 not billable. That gets me up to 20. And actually let's say this is, let's say this is 9,000, 9,090. That gets me to the 19. And then in the overhead we'll say 527. So 527 overhead, not billable, not billable, not billable. Okay. So this is an expense. It's going to decrease the checking account. The other side is going to go into the cost of good sold because these items are telling it to go to cost of good sold. So let's save it and close it. And then I go back on over here. We can run it. So checking account goes down. The other side is going into the expense and the expense here for August. So I should have done it. So that's, yeah, I should have done it for the next month. I think my expenses are off. I had two in here for August. Let's go back in here. Check it out. Yeah. So let's change the date to the next month here. I'm going to go back and drill down on this one and let's bring it up to 9.15. All right, then I'll save it and close it. So now if I go back to my reports, hold on, I don't want to save it, exit and run it. So now my expenses are in the next month as they've been incurred. Right? Okay. And so, but, so that would mean that you would think I would, if I was doing my percentage of revenue recognition that I might recognize something like 25, 385, but I'm only recognizing revenue basically as the billing.


I want to try you know that thing that they do in the movie all the time that hey welcome back to our stupid or ecstasy as it's a i'm i'm corby i'm rick and you can follow us on instagram twitter i'm twitter i'm all juicy content i'm ajanboe chuddy karpit I'm boe make a some squad bang that's the problem you only have water and coffee over there huh follow us on a person YouTube channels links in the description below you need some james in maybe or something maybe but today you're little you're little stupid uh we are doing a movie of you yes you're supposed to watch a film uh so old i've done that so many times it's i guess technically a classic it's old enough right yeah i think technically it falls into that uh being a classic and we've heard some five years old songs from it from 1992 it's a tamo film which it was incredibly difficult to find the tamo version which is ridiculous yeah um the amazon for some reason has a telugu version and you guys know our our opinions on dubbing we you can if you like dubbing that's fine we think even even though we read the subs whenever we look up at the face the mouth is not matching the emotion of the face with the talking for the movement of the mouth we don't like it yeah it takes away the believability and the honoring of the original language yes but uh so what was that we are reviewing roja who is a distant cousin of scott sterling the first installment uh hold on is your house taking off yes it's actually the first installment of the technique technically they say it's a trilogy they're not related in any way to shape or form except for i guess terrorism i guess why that that's the same way with the the trilogy for uh vishal and his shakespeare stuff they're only related because they're shakespeare they have no connection to each other but we watched it backwards yes from the end to the beginning actually yes yeah we didn't know it's really interesting then when we watched this backward it actually becomes lagun it was weird very strange but it's uh mani ratnam is the director and writer uh as well as the other ones and uh el roman did the score and starring um arun swarmy and as roja madhu and and of course uh pankaj kapoor which is shave kapoor's father um which he's quite a good actor i like him um even though he's not the star of this i just i like him i want to explore him more so go ahead and let me know what his next film should be because he's actually like himself a star yeah he's he was he's a thesbian we've seen him in just a few things yep but i think he's a fantastic actor but anyways hundreds of minutes for a review uh came out in 1992 i'm sure you've all seen it just like bombay so if you haven't you're a weird indian yep i mean you you just gotta go see it yeah uh but and then come back and watch the review because we're just gonna spoil throughout rick our initial thoughts um i don't think they i don't think people set out to make a bad film you know what i mean i i just didn't like it very much there was a lot of stuff about it i didn't i didn't like there's some things i liked but for the most part i just left it with i had more problems with it than i did really things i liked yeah i liked it um i liked it almost equally it's a it's a different film than bombay very that's what i'm because so because like one's like a more love story much more love story this is much more the first part's obviously the love story and then it goes to the um terrorism hostage situation um but i i enjoyed the film and i i just as much i think as as i did uh bombay i now that i've seen the three they'll say is definitely the weakest of the bunch um even though i still enjoyed it and i i agree with that accessibility i think you know i would assume so you didn't have anything that's the say about he'll say but yeah i i i thought it was good there was some stuff especially like the way i believe in terms of like how this situation should have been handled and uh patriotism slash nationalism that i personally don't like sure but you know it's not it wasn't made for me and it was a very different time right in india and so it's you know i'm not holding that against the film itself but i i thought the film was actually quite good uh i thought the the two performance well these three performances i thought were very good yeah i thought the performances were i thought he was better in bombay but he i think he had more to do i think he had more especially emotion to carry in bombay uh i thought she did a fantastic job though especially when she was getting off frantic uh i thought she did a good job with her husband as well yes and then i also i thought i actually forgot it was him oh really i did i forgot it was him uh yeah no i i knew it was him i mean i was glad to be seeing him and yeah um but yeah i thought they all did uh really really well what didn't you like about it uh several things i one of the things i didn't like was the it's difficult and we've been i've been able to do it with other films it's very difficult for me unless something's done well with the direction and the story and the acting to find a couple whose beginnings are an arranged marriage and then becomes something that you are rooting for them as a couple i felt like i wasn't with them long enough to root for them and believe that they had genuinely fallen in love with each other i felt like that needed more time and i don't know that they hadn't they had the time to do it so that was just one thing and i'm going from my least to my largest things that i had a problem but it was they'd only been married a week and then you got abducted right so the the her deep passion for the guy was really difficult for me to swallow after you know that amount of time and then there were other things for me especially the whole scenario about uh the the cashmere the terrorists and the way things were handled everything was extremely simplistic modeling to the point of just overly emotively uh emotional and but you know very unbelievable in terms of the way the military would respond the way that terrorists would respond uh what actually happens when you catch fire um it just were a lot of things that strained credulity for me at a level that i thought okay so if a kid watched this they might walk away with terrorism's bad love is good but for an adult audience i didn't for me i just found it too simplistic and and not believable i agree in some of your sentiments but it was not too dissimilar from how bombay was that oh i felt that bombay was uh except that i guess in your your point that you obviously had much longer but it was a very different relationship and yeah yeah yeah well as far as that point obviously there was more time to get to know them obviously and um and we had more going on with them relationally throughout but i felt like the the heightened of the certain events was definitely there the same as it was here i didn't see them as simplistic it was definitely tense situation but the believability factor of what was going on even as um unbelievable we talked about his standing and talking to everybody was in that singular moment there was still a level of believability to the moment the rest of the ancillary activity that had been going on based on actual events and i don't know that this is based on an actual event i had no idea either um i stopped i stopped guessing after a look on i mean obviously the cashmere conflict is a real yes but this story yeah i don't know the story's real and i that for example comparing those two events in history uh simplifying this aspect the the cashmere one and specifically what i found to be incongruent with my understanding of what terrorists actually do for example when terrorists say they're going to cut someone's fingers off after day three they typically do and then they cut the toes off and then they send the body parts around and i didn't see any justification for other than they liked him to not cut his fingers off and send them around um and i think what he was more trying to do was trying to actually especially with um pan cut how do you say anything pancache yeah pancache shake of course father yes um show a more even though showing him as a terrorist showing a more human side to them showing that they're sometimes obviously i'm not trying to defend terrorists here um but sometimes that they they are in it because he want i think he actually wanted independence for cashmere obviously he's deluded in the mind in terms of his views and all that but i think that was the point it was that at least his character he was trying to show that he had more of a human side and he he actually had at least some good intentions regardless of you know being murdered and all those obviously more flaws and good stuff but i think that was his intent i understand that there were some obviously very simplistic stuff going on like the whole burning flag thing bothered me uh i was like okay like but whatever that's that's one of the things i said it's my personal views on that it i wasn't really about to put that on the film i was like okay this is cool patriotism cool uh and to make to make it really clear when i talk about the situation with cashmere i'm not talking about the history and the complexity of that yeah i have no place to talk about that even though i've researched it a lot i'm i'm silent on that aspect of what i am talking about is his example uh there was a point where they're talking to one another and he uh uh pankaj kapoor he says at one point he's just doing jihad for jihad yeah and it doesn't matter who's good or who's bad i'm just doing jihad for jihad uh and it was it was almost like the core drive behind why he's doing what he's doing i didn't believe that these conversations with the one he was holding captive completely obliterated what he was feeling and changed his worldview that justified the end where he says to him straight out you've converted me i'm no longer a terrorist that for me was like that's never in a million years gonna happen yeah i i did love that part you know i don't like those kind of endings i was you know what you know what i was hoping for i was hoping that as they were running shot in the freaking head yeah yeah and i was gonna say just kidding yeah um let's say like i think i you can guys can tell me what your interpretation i think that's what they were doing at least with his character pankaj his character was they were trying to show a little more human side sure the same way i think um vishal has done before with uh i think he's done it and like the villains at least in the story they show more more more of a human side so their struggle not just that they're these big bad terrorists i i do agree some of the situations could have been a little more realistic for sure um but especially at the time in india i knew that i don't think this the movie would have been made now i think it would have been made very differently um but i've got like a very patriotic feel of it oh yeah don't burn the flag of india don't any of that there's obviously you've all very heightened and i'm sure his moments of joy and yes and i'm sure like uh nowadays it would have been made more like uri that's exactly what i was saying i had that exact same thought uh but especially i think this almost felt victim to the time and it happened in america it happens all over the place sure this sense of you have to be so patriotic for your country oh please that's what yeah that's why i'm saying like it's not i wouldn't say to somebody there's films that i would say if they mentioned the title i go yeah no yeah no this isn't that this is just i didn't i didn't really like it it's too simplistic and modeling for me but i would say that also about a lot of films that john wain made about world war two yeah he was a racist you know uh there were some stuff where you watch those films and you see the bayonets bending as they stab the guys and it's really simplistic and wraps it up in a bow and everybody's marching in a parade at the end so the funniest part was in the beginning when they had that whole military thing and they had the people spinning on the wires and they were really spinning on the wires yeah obviously it's 1992 a long time ago yeah uh they probably didn't have as much money and obviously the effects stuff especially in india weren't where they are now no and there were some really nice cinematography moments yeah there were some very pretty moments in the photography tamela do because it was gorgeous it was very pretty there were some moments they framed especially toward the end there was a couple of shots where punkage is sitting there and he's contemplating it was around the flag burning thing and they just they had it really beautifully framed the one musical number early in the show before the marriages that's done at night in the home village uh and the way everything was really lit by the waterfall i thought that that was really pretty as was i was gripped with that opening sequence with them fighting with the military coming in um i just example things that strain credulity for me the terrorist is right there and there's the guy he's holding hostage and all of the military is there for india right to try and rescue the guy yeah they wouldn't have let the wife be there no ever no and second they would have sniped him yeah instantly they had a clear shot they're standing there watching the conversation rather than have 50 troops there they would have had one sniper off in the bush and just gone and it would have been done so uh yeah but what did you think about the the songs though i thought the songs were lovely yeah yeah i think the songs were the songs were probably just as some of the best parts of the film just as beautiful i think is the ones that are remanded in bombay yeah agreed and and they helped because we've seen a couple we reacted to yeah as always seeing it contextually makes it that much better i love the the part that i tried to be in is that i think it was whenever they were thinking about each other uh i think that that came on yeah that was a really pretty um thing that they didn't or song i don't know if it's a song and then also the uh it also came on in multiple times though uh what yeah they also did anytime he was running that had that same theme when he was running that i liked it was a high energy the male voice is going good i don't remember what they were saying so out of the three you'd pick bombay yeah first that one two and then obviously they'll say they'll say you would never yeah whereas bombay for me was like this is one i would recommend you watch this is one where i would say not i didn't like it you you can watch it in a joy i don't want to watch it again they'll say for me is i don't understand the appeal at all um but yeah i i enjoyed this film i would watch it again um i definitely it felt very similar to me though in the same way i watched i i do think there were more believability things that were a problem in this for sure then i had in bombay except for the end which was you know holding hands and saying yeah go buy all yeah of course both of them had their their issues yeah but i i enjoyed the films as a whole they definitely have this overwhelming sense and i think it was the time in in india about the love stories so even though it's a terrorist story right the overwhelming sense of it is that the major part of this film is that it's a love story so are you telling me right now we're having a review where corbin miles is appreciating the love story aspect of it and the fact that it has this model and happy ending and rick was the one hoping for someone getting shot in the skull well i can i usually adjust when the film starts and i'm like okay is this gonna be real or is this not gonna be real and then i go from there i adjust my viewpoint as i'm watching because like if like i did with um what was that um satya that it was very realistic the prop the problem i had with it was me all the members in a monster movie yeah yeah i was like okay it's supposed to be realistic and you're having but you're okay with it in a military movie well that's what like i said it wasn't very realistic from the beginning the guys were like okay gotcha the fact that satya was an actual realistic yeah it was like more realism gotcha gotcha so i usually adjust that way all right i gotcha but i understand what you're saying it's not like no i'm not mad at you like i was with um super deluxe and i'm not mad at you yeah i'm not i'm not saying like you your point i really do feel this is another one of those films where it's like some people may like it some may not and you really don't but i still have a point to say well you're wrong about that i just disagree even though i i think i enjoyed both of them the same i still i i think i would put bombay slightly ahead of this one okay and uh it would be and then they'll say they'll say a lot at the bottom even though i still enjoyed it but it's watching all three it's definitely the weakest in terms of story even though the songs are absolutely gorgeous yeah but in terms of acting and and all that stuff it is definitely the weakest because i watched that one thinking i was just going in for shabu-kan right fast right and that's basically what it was yeah but yeah but even but even that for us the expectations i had for srk in that one yeah yeah i think your your expectation for shabu-kan are higher than mine though i think you're right yeah yeah i do though i appreciate him as an actor because of my name is fun yeah he still has yet to reach that level and obviously we have yet to say oh yeah a ton of his stuff oh yeah we're not saying we're experts on shabu-kan nah at all you guys are i know that it's okay don't you're gonna hate me anyway that's okay it's fine it's fine i'll block you uh let us know what channel film we should watch and the next film by uh mimei money ratnam yes right yep uh what his next film we should watch and please let me know more hankaj i think he's a fantastic actor who we've not yet explored enough uh i know he did that one with vishaw i think it was the the blue umbrella uh we reacted to it long a long ago uh i think it was one of vishaw's earlier works as well long ago um but i don't know if that's the next one we should watch you have guys can let us know uh down below and rick ready in unison


Hello, and welcome to this KubeCon talk where we will discuss our experiences at Databricks integrating our platform with Azure Private Link over IPv6. I'm Mike Wierhold, and I'm an engineering manager at Databricks, and I'm presenting with Mei Sheng Li, who is a senior software engineer who led the Private Link integration. During this talk, I will give an overview of the Databricks architecture at a high level and talk about what Private Link is and why it's important to customers running production systems in cloud environments. After that, Mei Sheng will discuss some of the challenges we faced when integrating Private Link, how we eventually did our integration, and then show a demo of how customers can access Databricks over Private Link. Before we dive into the Databricks architecture, I first want to talk a little bit about Databricks and the platform we offer to customers. Maybe you've heard about Databricks and know a little bit about what we do, but if you haven't, then you've probably at least heard of Apache Spark. Apache Spark is a general-purpose analytics engine that was created by the founders of Databricks, and it's used for all kinds of large-scale analytics jobs ranging from BI workloads to machine learning. While Apache Spark by itself is a great product, it, like all other distributed analytics engines, can be time-consuming to manage when you have large clusters. There are also a lot of different types of software you need to manage outside of your analytics engine, like notebooking software, experiment tracking software if you're doing machine learning, and so on. Databricks realized this early on and built the software as a service platform that runs in the cloud to manage all this complexity for you. This means that your data scientists can focus on what they're good at, which is writing analytics jobs, and not on maintaining infrastructure, which is not in their area of expertise. Since Databricks was founded in 2013, the platform has grown exponentially and is used by many Fortune 500 companies for mission-critical applications. As use of this platform has grown, so has Databricks. Today we have over 6,000 customers, more than 1,500 employees, over 300 of which are engineers, and we have 350 million annual recurring revenue. So why is Databricks so popular? As I just mentioned, we provide a unified analytics platform that allows customers to be able to easily write analytics jobs to get value out of their data. While the company originally started out as a company built around Apache Spark, we have since started incorporating other types of analytics engines into our product, like TensorFlow, so that you have a choice of analytics engines to run jobs on. Our platform is also multi-cloud and runs in AWS and Azure. We provide built-in notebooking and reporting and allow customers to easily spin up and spin down Spark clusters in a cost-effective way. This allows data scientists, data engineers, and business users to focus entirely on the things they're good at and not have to worry about the details of the underlying platform. So how do we build this platform? Well, Databricks consists of both a control plane and a data plane. The control plane is where customers log in to Databricks, and it allows customers to manage users, manage Spark clusters, create notebooks, set up jobs to run periodically, and so on. The Databricks, the data plane is where the Spark clusters run, and you may have noticed in the diagram that there is one control plane and a lot of data planes. There's a reason for this, and it's because Databricks uses what's known as the NVPC model. This means that the control plane runs in the Databricks cloud account, but the data plane runs in the customers cloud account. The advantage of building your system this way is that a customer's data never needs to leave their account. This is particularly important for security-sensitive customers. Our control plane is built on top of Kubernetes, and we leverage a variety of different open-source projects such as Envoy, MLflow, Koalas, Nginx, Consul, Redis, MLflow, Prometheus, CoreDNS, Yeager, and so on. We also write our services in Scala and Python. Databricks also doesn't just operate a single control plane. We operate many control planes all around the world and across multiple clouds. In fact, we operate over 2,000 Kubernetes clusters worldwide, which are accessed by over 100,000 users. These control planes manage hundreds of thousands of Spark clusters every day and launch millions of VMs to execute customer-submitted Spark jobs. These Spark jobs process exabytes of data in order to produce reports and other business insights that are used by customers. Alright, so let's talk a little bit about PrivateLink. What is PrivateLink and why did we integrate with it? Well, it turns out that even though customer data never leaves the customer's cloud account due to our NVPC model, some security-sensitive customers are still concerned about the results of their jobs or other potentially sensitive information stored on a platform being sent over the public internet, even if all of it is encrypted during transit. They want to be able to guarantee that communication to Databricks never occurs over the public internet and also want to limit access so their Databricks accounts are only accessible through specific endpoints in their cloud network. In order to provide this level of security, all major cloud providers offer a service called PrivateLink. At a high level, PrivateLink has two components to it, a PrivateLink service and a PrivateLink endpoint. PrivateLink service is configured as part of the load balancer that allows traffic into your VNet and ultimately to your application. PrivateLink endpoint is, in Databricks case, set up in the customer's account and provides an IP address and DNS name that can only be routed to from inside the customer's cloud network. As part of the PrivateLink endpoint setup, you specify a PrivateLink service that the endpoint sends traffic to. Traffic between the PrivateLink endpoint and PrivateLink service always goes over cloud provider's private internet, giving customers a more secure way to access their cloud resource without any communication ever leaving their cloud accounts. Alright, so that's a brief overview of PrivateLink and I'll hand the presentation off now to Mei Xing. He'll talk about the challenges we face at Databricks, integrating PrivateLink and how we solved those challenges. We'll conclude the talk with a demo showing a Databricks workspace being accessed over PrivateLink. Thank you, Michael. Hello everyone, my name is Mei Xing. Next I will share our journey to integrate with Azure PrivateLink. As you can see in the diagram, if you want to use Azure PrivateLink, you need to first provision one PrivateLink endpoint within your virtual network. Then connect the PrivateLink endpoint to the PrivateLink service inside the service provider's virtual network, in this case, Databricks virtual network. Then you can send your traffic to this PrivateLink endpoint inside your VNet, which is a local kind of IPv4 address. Azure PrivateLink will take care of the traffic routing using Azure networking instead of the public internet. Then send the traffic to the PrivateLink service inside Databricks VNet. That's how the traffic is more secure and more private. At Databricks, we have several use cases to integrate with Azure PrivateLink to benefit our customers. The first use case which will focus mostly in this talk is the user to web application traffic. The user can set up a private link endpoint inside their virtual network. Through PrivateLink, they can talk to the Databricks control plan web application. They can use the notebook there to launch clusters through all the data science work. There are other use cases like Databricks control plan to Databricks like a data plan communication can also be secured through the PrivateLink feature. What is the challenge on the infrastructure side to integrate with PrivateLink? First of all, Databricks is a first party service on Azure. What does that mean? Actually, it's called Azure Databricks. It's up here as a native service in Azure. Creating a Databricks workspace is as easy as creating other resources, for example, virtual machines and database in Azure. You just need to go through several clicks, then you can create a Databricks workspace to work on. From Azure side, they provide two types of PrivateLink support models. First is the third party offering, which is available to all the Azure customers. It's purely on IPv4. The second type of support model is called the past version of PrivateLink. It definitely provides deeper integration with other Azure services. All the other first party service on Azure, they all use past version of PrivateLink. Even though it appears to the customer as a routed over IPv4, like shown in the previous diagram, you connect to the PrivateLink endpoint in your vNet, which is a local IPv4 address. Actually, the traffic routed by Azure networking is carried over IPv6 between these two vNets. That's the past version of PrivateLink. As a first party service on Azure, we have to use the past version of PrivateLink. The challenge for us is basically there's a requirement you have to accept IPv6 traffic on the control plan to make the PrivateLink traffic work. From Azure side, they do have a lot of IPv6 support on most of their resources. In terms of vNet, virtual network, some net load balancer, VMSS, which is virtual machine skill set. These resources all support dual stack. You can assign both IPv4 and IPv6 to these resources at the same time. The challenge for us is really our control plan. As shown before, we completely run on top of Kubernetes, which is purely IPv4 at this point. PrivateLink traffic coming in as IPv6 traffic. We have to accept IPv6 traffic to our Kubernetes services. There are two high-level options to solve this problem. The first is the proxy solution. We can convert the IPv6 to IPv4 traffic outside of Kubernetes and then just talk IPv4 to the Kubernetes services. The other option is just support IPv6 natively in Kubernetes. The IPv6 PrivateLink traffic can directly hit our service running on Kubernetes. A little bit about the background of running Kubernetes at Databricks. At Databricks, we run all the control plan services on Kubernetes, but we are not using the manager Kubernetes service, for example, AKS. Mainly because Databricks is a multi-cloud, we want to be consistent across all different cloud providers. We make our own virtual machine images and we make sure these VMs can bootstrap into Kubernetes clusters. We have more control over that. We can make sure it has the same kernel OS version, Kubernetes version. It's easier to support our own services. In terms of the configuration, we totally disable the IPv6 from the kernel level because we don't need that before supporting PrivateLink. The CNI plugin we are using Flannel. The container runtime is Docker. The version we are running is Kubernetes version we are running is BE1.16. The load balancer in Azure is a little bit different from load balancer settings in AWS or GCP. Basically, in Azure, there is one single load balancer and all the Kubernetes load balancer service is added as load balancer rules on the same load balancer. We first explored the first option, like a proxy solution outside the Kubernetes cluster. This solution is also used by some other Azure internal service. The basic idea is simple. Within the same VNet, we can provision a dedicated load balancer which accepts the IPv6 PrivateLink traffic. This load balancer can send traffic to a backend like VMSS virtual machine skill set. We can run the PrivateLink proxy on this VMSS which will terminate the IPv6 traffic proxy to IPv4, then again talk into the Kubernetes cluster. The Kubernetes cluster load balancer is also serving the public traffic which is IPv4 from the rest of the users. This seems to be a straightforward solution, but there are a lot of challenges. The first question is how can we deploy this proxy? Do we deliver it as a virtual machine image because it's run on top of a virtual machine skill set? Do we deliver it as a virtual machine image or a container image? It is completed outside Kubernetes. How do we actually deploy it? We cannot use a kubectl command. Maybe we can run some Docker commands if we run as a container. Or maybe we just deploy the virtual machine using the virtual machine image. But we don't have this support model. It will be a completely new kind of service we support. The other question is how we monitor this service, the metrics, logins, and this kind of stuff. We only have native support from Kubernetes. We don't have such a use case like a virtual machine skill set outside of Kubernetes and then provide the metrics and logins. These are the problems to use this proxy solution. Then because of that, we also explore the second option, which is to support Kubernetes natively with IPv6. Because we still need to serve IPv4 traffic for the public access, which is not through private link, we have to use the dual stack feature in Kubernetes if we choose to have native IPv6 support. If we use that feature dual stack on the loader balance level, we can accept both IPv6 and v4. The overall architecture looks like a simpler, which is good. However, this option has its own challenges. The first item is the stability concern. The version we are running on 1.16 Kubernetes, the dual stack feature is just an app feature. Dual stack is targeting to be better in 1.20. It's not a good idea to enable an app feature in the production workload. The second item is this option seems to be an overkill. Because we only need IPv6 support at the front end, maybe several services and parts will require IPv6 support, but most of our Kubernetes workload will not require IPv6. At last, it could be a huge engineering effort about prototyping and testing to make sure everything works. If we enable the dual stack feature in Kubernetes. We did some investigation on running the dual stack on Kubernetes. First of all, don't confuse with IPv6 single stack feature in Kubernetes, which already entered the app in 1.9 and moved to beta in 1.18. The dual stack is different from the single stack feature. The dual stack feature started as after in 1.16, but when we talk into the contributors, it seems like this feature is mostly stable right now. The reason it's not promoted to the beta is mostly due to some pending discussion on the service APIs. Actually, that will not affect our use case for the dual stack. Once you enable the dual stack, it will assign both IPv4 and v6 IP to literally every part running in Kubernetes. But for the service level, you need to have separate service for like one for IPv4 and one dedicated service for IPv6. To run the dual stack, there's also some networking prerequisites. First of all, the Kubernetes node, the host level, you must have the dual stack support. This is not surprising and Azure VMSS already support this. They can have dual stack support. Second, because every part will have both IPv4 and IPv6 address. So the container network interface, you choose the CNI must have supported dual stack as well. As we are using Flannel, actually Flannel will not support dual stack feature. No CNI plugins can better support the dual stack feature, Kubernetes and Calico. But it's case by case on different cloud providers. It's not guaranteed to work on multi-clouds. So after we explore these dual stack possibilities on Kubernetes, actually we go back to the proxy solution. Looks like a proxy solution is better option in the short term. Then we try to revisit our proxy solution. Yeah, can we combine the above two options together, whether it's possible to move the proxy into the Kubernetes. Then if we do that, we will definitely get the deployment and monitoring kind of for free. We know how to deploy Kubernetes workload and we have native like metrics logging in the Kubernetes. Yeah, so on the load balancer level, it does support dual stack. So basically, even if we use one load balancer, it can support both IPv4 and V6 traffic. So we can combine them into one. The virtual machine skill set, it also supports dual stack. Actually, only the Flannel, the Kubernetes CNI network is not supporting the dual stack. So is it possible to deploy the proxy as like a pods on Kubernetes but give the virtual machine level networking to the pods. Yeah, there are definitely some features called use host network where to work for the dual stack. Yeah, that's the third option we're trying to explore. We don't know whether it works or not. Then we prototype it and luckily it works pretty well. So here comes to our solution. Yeah, basically to make it work hand to hand. So we first need to make sure IPv6 is populated everywhere on this Azure cloud provider infrastructure. So first provisioning IPv6 on the vNet subnet and load balancer added IPv6 IP. And then create a virtual machine skill set. We create with a special image that we enabled IPv6 in this virtual machine image. Then it can have the dual stack which can be later on used by the proxy pods running on top. Yeah, to provisioning the VMSS with dual stack. If you use Azure provider 2.0 with Terraform, you can use the Terraform resource. Otherwise, you can always use ADCLI to attach a IPv6 interface to the VMSS. Yeah, then we set a load balancer to only load balance traffic to this VMSS which enabled IPv6. So once traffic hit the IPv6 IP on the load balancer, it's only go to this VMSS. And inside the Kubernetes, we also have a dedicated node pool for this VMSS so that only the proxy workload will run on this node pool, not interfering with other Kubernetes workloads. Yeah, so then we deployed private link proxy which is v6 to v4 proxy as a general Kubernetes deployment to that dedicated node pool. Yeah, we set it to host networking. Yeah, it actually gets both IPv4 and v6 interface. The proxy is just a Nginx proxy, less than part 4.3. So if you use host networking and enable the pod security policy, just make sure you specify the policy to allow the pods to use host network. Then make sure the load balancer rules are correctly configured to send the traffic to this proxy pod. And also make sure you do the proper white listing on the private link traffic so that before a v6 traffic can come into your Kubernetes. And then yeah, the proxy works. So we got a lot of benefit from this solution. So first of all, it's straightforward, easy to troubleshoot. Then it's the deployment is managed by Kubernetes. It's very easy if we want to update the proxy. And it's deployed as a stateless deployment. So as the traffic load increase, it's very easy to scale up just increase the pod replica or can normal traffic. Next item is like we definitely get the Kubernetes native monitoring and logging. Yeah, at last, this solution will also work for other use case. For example, our data plan to control plan traffic using private link. Yeah, this is some screenshots as a demo. So we provisioning this private link node pool inside the Kubernetes cluster, which is a special VMSS accept like both v4 and v6 traffic. So when you deploy the proxy pod, yeah, just make sure have the host networking and make sure it's scheduled only some private link and node pool. If we looking at the network on the pod level, we exactly to the pod, you can see both IPv4 and v6 IP. Yeah, on the virtual machine on the pod level, it's completely private IP and public IP is only available on the actual load balancer level. So it's the same like a networking interface if you look on the host VM. So on the Azure load balancer side, if we look at the IP network provisioning the IPv6 for this purpose. And then it works. When we set up the private link, if you are within your user like a vNet, you look for this URL, it will return you a local IP address. You just need to connect that to this local IP address. Actually, it will show the Azure Databricks workspace. And yeah, since the traffic is routed through the private link. Yeah, to recap, not necessary to integrate with Azure private link, but if you need any like IPv6 traffic support in your IPv4 Kubernetes, yeah, then you can use this approach. Basically, you enable the dual stack or with IPv6 everywhere on the cloud provider info level. Then you can set up with v6 to v4 proxy. You can just deploy it as a regular Kubernetes deployments. Just that you use the host networking, then you can receive the IPv6 traffic and then you can proxy to v4 and then the route will work all the way to your Kubernetes. Yeah, this is I think a good way to support IPv6 traffic with IPv4 Kubernetes if you don't want to use the dual stack feature yet. So yeah, we delivered this Azure Databricks private link is in private preview now. And it's also available in Azure cloud. This concludes our cubicle talk. Hopefully it's useful to you. Thank you very much for joining our talk. Feel free to ask questions. Thank you.