We're here at ITU telecom world 2012 and I'm very pleased to be joined by John Davis who is vice president for the Intel World Heads Programme. John, thank you very much indeed for being with us today. It's great to be here Max, this is a wonderful event to be part of. There have been a lot of debates and a lot of talk recently about the incredible transformation in the ICT sector. I wanted to find out from you what you think is the principal opportunity arising with this transformation. Well really the big opportunity is reaching more people and reaching them in ways that it benefits their lives. So the big programs we've been part of with telecom world and ITU have been prepaid broadband, just like the prepaid cell phone, much more people can afford. We've been involved in education transformation and we've been involved with announced the World Health Care Programme today that we're part of and just the enormous different array of devices, it's computers, it's tablets, it's smartphones and they're reaching far far more people with value to their lives. You're also a commissioner for the Broadband Commission for Digital Development, perhaps you could tell us a little bit about your involvement there. I've been a member of the Broadband Commission since the very very beginning. I've attended every meeting there and I've seen some amazing progress. I think the drive of ITU, the passion of Carlos Lin, Paul Kagami, Irene Bockeva, UNESCO to lead this has just brought around some amazing transformation. We've been able to talk about our programs on prepaid broadband and low-cost PCs and get an incredible support of countries and industries. We've been able to show the commissioners look at the use of universal service funds in countries like Turkey or Nigeria that are driving complete transformation of their education process and explain those and have the people sitting in the room there that make the decisions, that have the resources at their fingertips and can make this happen in their countries or globally. And so it's an amazing body and I'm just delighted to be part of it. What are the projects that Intel has been involved with recently? The biggest ones obviously is to reach more people, prepaid broadband, to drive education transformations so we're involved with the teachers, training teachers. We've trained 12 million teachers to use a PC in the classroom and do it with confidence in front of kids that grew up with technology. We've worked programs with content in schools and equipping them in ways that their investments protected and you can actually transform education. So education has been really one of our biggest drivers. It's where we're investing the most and we have targeted PCs for kids. They're rugged, drop them on the floor, spill the liquid on them. How do I connect? How do they become theft proof if someone takes it, stops working and put these kind of networking in classrooms that the teacher can see what the kids are doing, the kids can interact with the teacher and they can do that. So those are just massive, massive programs for us that make a difference. And what are the major challenges that you're facing at the webinar? Well, the challenge is always getting people engaged in ways that are meaningful to them. There's lots of different choices for everyone. You have to think this out as a plan. So in education, if you think of it like, okay, I'll get this device or this tablet or this smartphone or this laptop, and you treat it like it's a hardware program. You're not the transform education. How do you connect the schools? How do you train the teachers? What's the electronic content? Where is my assessment? How do I tell if this is working? What is my next five years playing going to look like? And to get those plans, and typically, they don't spend one group in government. They spend ministers of education, ministers of IT, ministers of finance to pay for this, heads of state that have to be behind doing this for their country because it's major investments. So getting everyone together on a common page and then the industry players supportive of that is usually the biggest challenge. But does it feel like one big community or is everybody pulling in different directions? It's getting closer and closer. Bringing the plans together. We've seen transformations. We have examples, we can point to countries. Those countries are very proud of what they've been doing. So they're delighted to share why it worked for them. And they'll go around, people will go to their country. And the plans are getting easier because there's proof points. Five years ago, you couldn't point to anyone and say, this is a great job done. Today, you can. You can say, Portia, every child has a laptop. They've been using it for three years. They've learned many things. They can share what they did right. They can also share probably what they wouldn't do again. How you could do it better than they did. And so those proof points exist and that helps a tremendous amount. We're here at ITU Telecom World 2012. You've got a big stand here. I know you've had a presence here for a number of years. Just really wanted to find out really what you are hoping to be the outcome from this particular event. And also, I suppose, do you have a key message that you'd like to deliver to our uniquely influential audience? Well, what we have got out of the stage is we showed tablets there. We showed phones. We showed kids' PCs, connectivity teachers' PCs, how you can network them. And so we showed a complete array of technology and some of the solutions around that. And ministers came through the booth every few minutes to see this. We gave them the two-minute tour and they went, oh, I want to follow up on that. Or this is an interesting area. So it really got exposure of the capabilities that we can bring and that partners can bring to many, many people that we wouldn't normally have been able to do. Now, if I can leave one message, it's the leaders, the ministers are here. They make decisions. It's a time of transformation. The capabilities exist. Let's be bold together and do the right things for the country, the kids, the economy, because ICT can make those changes, but it needs cooperation. We're all here. Let's cooperate and look back a year from now and say we made this difference here and be proud of it. Great words. Thank you very much, indeed, for your time today, John. Great. Thank you so much, Max. It's delightful to be here.


Hey folks, we're answering frequently asked questions from the Okta customer identity cloud community and today We're going to discuss how to cancel, downgrade or change your subscription. Let's get started You can cancel, downgrade or change your Auth0 subscription anytime. If you are subscribed to an essential or professional plan in your Auth0 dashboard, go to settings and subscription Adjust the monthly active users if needed and locate the plan you would like to downgrade to and click downgrade To cancel your plan, select the free plan from the list and select downgrade Don't forget to click on subscribe now to confirm the subscription change Today we looked at how to cancel, downgrade or change your subscription If you found this video helpful, please like and subscribe to us on YouTube and join us for more content on community.auth0.com


How much VC do you have? I look four hundred thousand now So I bought the right amount of VC cuz I know how to use my money wisely So it's kind of okay my player. Hey, dude. Yeah, come here. We can get a game. We can get a game. Run. Oh, I don't know How do you get in Puma Mania? This is the only game will ever be to play This is the only court on the old is that you on the God next. Yes, right here right here. Come on Come on. Are you already dripped out?  I'm right here. I'm right here. Ready? Oh Also fellas look have a stadium controller. So throughout this video I'm gonna try and switch to the TV and back to the PC because apparently it's supposed to be seamless So we get a test that out here today Just mute me. Oh, yeah, you can't mute me. Yeah, what up Bluetooth? How you doing man? Your mic is horrible.  I'm playing I play Davis you didn't even offend him. Why did you just backtrack on your joke? I'm right here.  I never miss man Richard you're bugging my guy. That's cats Yeah, what are you playing on oh, then why did you ask me that? Hey next time I get on Also, okay, so since the last time I played this delay and see is higher Davis. It was incredible the first time green You got to stop leaving me open.  Go Davis. Go Davis.   Oh Yeah, Davis bounce back see it's cuz of the delay is kind of difficult to tell what I'm telling you one thing though. I kid you not these do not feel like the same sliders and it doesn't feel like the same The same game at all cuz like Pete when you shoot without quick draw. It's way slower on ps4 I'm saying why is it so much faster? Oh, that's a good question my god Little hop little hop go inside agent bucket. That's what I do good way man Yeah, y'all trying to run it back all night and boost with me Yo, what is your problem? Yo illus you're trying to boost since we're probably the only game we can get This was a valid reason to ban you there's evidence right there. Ooh Davis you got it. Oh my god. It's so hard not to get about you got it. You got it There cannot be a gaming experience Based off of timing and reaction where there's inconsistent timing reaction. It's so inconsistent It's unbelievable, but it's equally as inconsistent on the consoles. It's just harder to tell the difference I'm taking down top reps Davis. I see you guys notice the ramen shop. What is that? What is that? Can we go in there? No? I'm pissed Davis we're gonna have a competition right now my guy whoever can leave swags the drippiest wins 10,000 subscribers I don't know how that works, but we'll figure it out later I missed the days in 2k 18 where they made you go all the way back to your my court to put stuff on like trek all the way around The entire way bro. That was my favorite 2k ball time. I think I check it out. Check it out. Check out the drip check out the What did you put on? Look like that. That is Jeff. What do you mean?  That's not me my guy. It's not me agent. Stop. Stop. Stop. Yo, don't you really got you got a 0% Did it go in Davis? Why are you always so busy hating my guy? Hmm. I see you. I see you with the helmet You know me fresh off the short bus.  You're still breaking on the stadia Hey, you know why you know why cuz of the delay is lagging so bad. It's not lagging. Oh, yeah, that's me, buddy Whoa, I touch me like that weirdo. I'm like oh my god. Oh my god. Oh my god. Oh my god. I'm in third Are you I'm not lagging though. How are you lagging? I'm not lagging. I can't it must be your connections to their online services How you know that right to the Tim, baby Yeah, Davies if you're not careful you might tip over lose balance and fall in the goon.  I'm throwing a game I get more games on study than I do on ps4. It's called stadia, bro.  Give me that board. Oh, yeah, let's go agent buckets He in the paint man, let's go Oh He just gave up. Oh, it definitely looks like we're boosting bro And then you did are you trying to get us banned David? I can't time this Please what I get what I get what I get oh $50 if you hit that swear god. All right, babe. It's green Green ladies and gentlemen's time to do the test. I've been waiting for at least Uh, I got my little stadia controller. Let's turn it on. All right So I'm gonna turn my stadia controller on real quick and then I have to do I have to link my controller real quick. Hold on. Let's He's trying to post me out. What a bozo Who do you think you are my guy? Give me that. Okay. Okay. I think I'm switching to my tv right now davis Is it gonna switch? Is it gonna switch? Oh, first of all, this stadia controller feels really solid Second of all, the latency on the tv is out of this world I can't I can't time it. I have to let go of it before I see my player go up Is that bad? Yo, it's so bad. It's so bad. Hey google Play mba2k20 on my desktop. I looked for nba2k20 A.J. I'm getting dealt with him.  I know I know and I'm trying to figure out a solution. Ah Hallelujah. Okay, so this is how this is what you had to do. Oh my god.  All right opening nba2k20 on studio tv That's cool. That's cool. I don't care what anybody says. That is cool Now it doesn't play like on the tv and I would never do this voluntarily Yes, but still cool and then if I want to switch back to pc. I just click play and then it's and then it's it's back just like that Oh my bad. My bad. Oh, I'm undefeated on this. We can't lose. All right come back No, you don't want that. I bro just three four days ago when I played it It was so glorious. It had less latency than ps4. No way. He hits that come on. Come on. Let's go That's what that's my buddy Oh, yeah, we confused them for sure That's you. I know you got that. Let's go man. I knew that about you davis Please Look at this bozo here My favorite thing about this probably is the fact that on the top. Yeah the fact that we're top reps. That's crazy Yeah, I might just grind stadia just so I could be there with alexis morgan, you know I mean chopping it up. What pc doesn't even have game chat. Okay, never mind. That guy just lag No, wait, yeah, 2k.  How are you green? That man is playing at the google headquarters with no delay Yeah, I got camera. I got the release.  I didn't mean to No, are there a reason you play zero defense and not in position bro. I can hit I can hit I can hit I can hit I didn't mean to So you're trolling. Okay. I have no energy just from trying to box this guy out. What? Yo, leave me open. Leave me open That's cash Let's go. I got the release on me now. I got the release on you. All right And you didn't roll Oh my god, we're in here, buddy green Oh, yes, sir.  All right I'm just trying to get back to the number one ranked on stadia But for some reason you decide to continue to troll cool. Yeah, I thought we're not both smooth two second ability What and you let him and you let him all right davis. Yeah, it's fine. It's fine That's what you want to play the game.  Watch me do it again. Step back. Step back You can't shoot.  I know you can't shoot. So I'm just gonna let you have that Easy rebound. I don't want that. That's cash No, I'm telling you this release is money my god. I don't think I could play Why not? I'm getting one frame one frame is basically like a slide show I'm in a slide show like in the paint and oh, yeah. Oh my god No That's it. Yep. He quit. He quit. I got my you watch me.  Watch this That's one davis. Keep watching. No, no, no. Stay right there. No, it takes you to the main menu Spin move the greatest stadia player in existence Let it be known if you want to challenge me on my throne sleep me on the ps4. Hey google End of my video for me and put the end screen right here like comment and subscribe and click the damn video on the screen


Hi and how are you all today? I am Priyanka and let us do the following question together. It says write the following set by using setBuilder method. Now these are the five set which are given to us and all these are in Roaster form. We need to convert them in SetBuilder form. We know that in SetBuilder method all elements have a single common property which is not possessed by any other element outside the set. So we identify the common property of the elements of the set and our setBuilder format is xh to x common property. So the knowledge of this procedure is the key idea we are going to use in order to proceed on with our solution, proceeding on with the solution of the first part. Now we are given in Roaster form 36912. Right? So in set A we see that all elements are multiples of 3 right? And we can write x as 3n. Let this be set A. So we denote symbol x for element of the given set. Single common property will be all elements of all elements multiples of 3. Right? And written as 3n. So the solution will become A is equal to x is to x is equal to 3n and n is greater than equal to 1 less than equal to 4. Now let us verify our property. We have written that x is equal to 3n means each element is equal to 3n and it will change as we are changing the n. x greater than equal to 1 and less than equal to 4. That means n will vary as 1, 2, 3 and 4. And what is our result? We can find that we are getting all the elements that was present in the set. Right? So this means that the answer which we have formed is a correct answer. And this is the answer to the first part. Gone with the second part. Now we are given B is equal to 2, 4, 8, 16, 32. Now we are taking all the elements as x. Now the single common property we have ourselves assumed it to be named as B. So the common property is that x is a square number, isn't it? Denoted by n where n is greater than equal to 1 and also n is less than equal to 5. So let us write it in set builder form and it will be x is 2x is equal to 2 to the power n and 1 is less than equal to n is greater than equal to 1 and it is less than equal to 5. Now this completes our second part and let us verify it also. 2 raised to the power 1 then we have 2 raised to the power 2, 2 raised to the power 3, 2 raised to the power 4 and 2 raised to the power 5. So what is the answer? It will be 2, 4, 8, 16 and 32, isn't it? So that means we have verified our obtained answer also. So this is our required answer of the second part. Proceeding on with the third part let us write it as c is equal to 5, 25, 125 and 625. Similarly as we did above all these are 5 raised to the power n. So our answer can be directly written as the common property first. x is a power of number 5 which is donated as 5 raised to the power n and n is greater than equal to 1 whereas it is less than equal to 4. So let us write it down. Our answer will be b is equal to x is to x is equal to 5 raised to the power n and 1 is less than equal to n whereas it is less than equal to 4. And let us verify it also. 5 to the power 1 gives us 5, 5 to the power 2 gives us 25, 5 to the power 3 gives us 125 and 5 to the power 4 gives us 625. So isn't it all the elements which are present in set c? So it will be c is equal to x is to x is equal to 5n raised to the power n and n is greater than equal to 1 whereas less than equal to 4. So this becomes the answer of the third part. Proceeding on further to the fourth part let us take it as t is equal to 2, 4, 6 and so on. So which is the common property which we are observing? It is that they are all even natural numbers, right? 2, 4, 6, 8 and so on. So the answer will be in set builder form x is to x is an even natural number where we have represented x as the elements of the set and it is never ending so we haven't given any condition to it. This determines our answer of the fourth part. Proceeding on to the fifth part we are given 1, 4, 9 and so on till 100. So which is the common property which we can observe? We can see that x which represent for the elements of the given set is the square of number n where n is greater than equal to 1 and n is also less than equal to 10 because 100 is the square of 10. So our answer will be x is to x is equal to n raised to the past square and 1 is we need to write the property the condition attached to it also. So this becomes the answer of the fifth part. So I hope you understood the question. In this question we will learn to identify the single common property of a given set in roster form and then write it in the set builder form. Right, bye for now.


What I have here is the Simper, our new radio, and I will demonstrate how easy it is to deploy with the antenna, okay? That's how easy, how easy it is. What we have here also is the radio adapter that allows you to use a traditional connectorized radio with the twist for antennas. That's how easy it is.


What's up everybody, Jason here for jaspyscasebreaks.com. We just sold out a little filler here to help sell out Dynasty Baseball 2019 We're giving away eight spots in that break with this 2021 Bowman jumbo pack break random teams number three So first we do the break you randomize the customer names and teams distribute the hits out and at the end of the break We'll take all 30 customer names randomize them top eight names get a spot each in the dynasty break And the next one's already on the website 29 left that sells out the break So good luck guys break number three. Let's roll Six and a one seven times. Good luck one two three four five six seven Kobe down to Kobe. There you go seven times one two three four five six Seven Cincinnati Reds under the same those Cardinals and again stick to what you got guys. All right, so it seems no paper also ships guys Jake Croninworth And would you look at that we got an autographed pepper Perez you got a Shailan leaders Westburg your eyes Garcia and a Rosario to 250 for the Red Sox make an exception on this about though Appreciate it guys now the switch scenes and give away the eight spots. Good luck everybody roll three and a six nine times one two three four five six seven eight nine times top eight get in and Sean O'Leary Sean O'Leary Daniel Kobe Sean Maddox Sean Maddox Sean O'Leary and Bill Norton There you go after nine times Top eight get in congratulations guys next one is already in the store. That's one sells out dynasty


Hello people! It's me, Ginny Metherill. I am, as I'm sure you all know from watching many of my videos, you've watched them all, haven't you? I'm a fourth generation witch who practices traditional magic, or the old ways, which have been passed down to me through the very generations. My magic is pretty much the same as everyone else. What we do is we use energy because this is witchcraft. Now this video is a little rough and ready, so do bear with me. It's because I recorded it a few weeks ago and didn't think I was ever going to put it on YouTube, but I'm having building work done in my house at the moment and my life is at sixes and sevens and I don't have a kitchen and we're living off microwave meals, which are disgusting. Come on guys, you've got to make something better. So the video I didn't think I was going to show you, but because of the upset and the upheaval in my household, I haven't had time to record anything new. Or to be fair, I haven't really had a point in time where I could record when there wasn't a hammer drill banging away, making a huge racket. I mean there is actually one going at the moment, but it's only intermittent. So anyway, this video today is about a pendulum. I use a pendulum on a regular basis and I have quite a few of them. This is my one that I use currently. It is made from rock quartz and I find it rather beautiful and this broken bit of blue glass is very good at finding lost objects. An amethyst crystal I use for mental health issues. And a piece of goldstone works well with my wand, which is also made from goldstone, so the two combine well together, especially when I'm in a circle. This metal version I keep in my handbag because it's unlikely to get damaged being made of metal and everything else seems to break under my tender loving care. And finally, I don't use this one, it's an occluded piece of quartz and it's so occluded that the energy can't flow straight through the crystal, so I get nothing from it. So these all make up part of my pendulum inflection. As you may know, I believe that this pendulum has a rock spirit, so it has some conscious energy contained within it. And this conscious energy helps me when I'm using my pendulum to ask spirits. I believe they call them the akashic records. I just call it knowledge, but if I need to answer any questions, my pendulum will give me the definitive answer. So this is my video about what happened a couple of weeks ago. So this morning I woke up and I picked up my pendulum, which I use on a daily basis for divining, asking questions. It's one of the first things I reach for because it lives by the side of my bed. And I asked it to some questions and I was getting very, very strange answers. Now my yes response from my pendulum is normally a backwards and forwards response, and my no response is a side to side response. And so when I was getting these skewed answers, I realised that something was wrong. And so I said, pendulum, please can I have, as I'm going to do now, a yes response. And look, pendulum swings, side to side, which is the opposite. So I asked pendulum, please can I have no response, and it immediately changed to a backwards and forwards, which is not great. It means that my responses on my pendulum have flipped and there is something amiss. Now I knew something was up with my pendulum this morning, not just because I was getting skewed responses, but only because something rather strange happened with my pendulum the night before. It was a bit weird actually. So yesterday I found, I had a pair of scissors by my bed, like not these ones, but I had a pair of scissors by my bed, and the scissors were on my bedside table, and I'd put my pendulum down beside them and just dropped it on. And in the morning I woke up and my pendulum was completely and utterly intertwined in a knot around my scissors. I saw it in a knot on the table and I picked it up and I looked at it and I was like, what? But that's because this pendulum is a rock spirit and it was trying to attract my attention to the fact that it needed a cleansing. So that's why I thought I'd do this with you today. As always the first thing I do is light some candles because I love candles, they make me happy. And also I'm going to add some incense because most likely I will need the smoke from the incense. The smoke will be useful because it will take away any negative energy should I need to do this step. I'm just using some frankincense because I like frankincense, but you could use a jostic or a sage burner or anything such as that. Little bit of arrangement of my working space just to get everything ready. And then I'm going to add some warmed water, it's spring water that I'm using to a bowl, so that I can wash the crystal. This is the very first step whenever you cleanse anything. 90% of all negativity will be taken off an object once you wash it in clean water. Once you've finished washing, take a soft cotton cloth or natural fiber cloth and dry the crystal. Manmade fibers can have man-made energies on them, so you're better off with a natural substance. So now I need to ask my crystal if it needs everything further. Crystal, do you need anything further? And I'm getting a side to side response because I don't know, so I need to check. Please, can you give me a yes response? And can you change to a no, please? See, there we go. My nose backwards and forwards still and my yeses side to side. Do you need smudging? Oh, yeah. And this is what I'm going to do. I'm going to hold the crystal above the smoke and the crystal will begin to spin by itself. The crystal will spin until its energy has changed. And you'll know when the energy has changed because the direction of the spin will either stop or you'll feel a difference. Like if you watch carefully here, it's going backwards and forwards, not round and round. So it is complete. But let's ask, Crystal, can I have a yes response, please? It's backwards and forwards. Please change to a no. Oh look, and it's side to side. So I'm back to the original responses of my crystal. It's how I cleanse my crystal. So I'm quite pleased actually, because I don't like it going the other way. So I can have a yes. So I'd love to know your thoughts in the comments below whether you think that the knot that encased the scissors with the pendulum was just me dropping it onto the pendulum overnight or something else. Do you think that that was magic? Let me know in the comments below. In the meantime, I hope you enjoyed this video. Don't forget, my covered meeting is happening on the 8th of March. Don't miss out, get busy and register for that. Just go to www.patreon.com forward slash Ginny Metherall and you'll find all my details there. I hope to see you. In the meantime, I hope you enjoyed this video and if you did, please give me a subscribe and a like and I will see you in my next one.


Well, it's been 74 years since Maslow published his hierarchy of needs. And there's still a lot that we can learn from it today, or maybe a slightly more modified version. But I actually think that this version is not even quite as accurate as this one. And that's because slow Wi-Fi is worse than no Wi-Fi at all.   That is pain and frustration. And that's because when we have to wait for things to load, it is really, and I mean scientifically, stressful. More stressful than watching a horror film.  But even when we look at this quantitatively, we see how big of a problem it can be. Like a 10% of your audience lost problem for every second added to your load time. Luckily on the flip side, when we do a good job, when we actually deliver quick experiences to our customers, to our users, they reward us. They're delighted, and we get incredible uplift and conversion rate, engagement, or even for e-commerce sites, interesting things like an increase in orders or conversions amongst new customers. That can translate to real revenue for the business, like $300,000 in revenue, or even $800 million a year in increased customer spending. But let's talk a little bit more about why site speed might be important for SEO specifically. Now, if you've been paying attention to some of the announcements that have come out of Google, you might have heard earlier this year Google announced something called the speed update. Actually launched this week, if you're paying attention, but let's think about their announcement. I've actually read through all the documents, and I promise that there's no mention of Sandra Bullock. This is incredibly different, and it's basically Google just announcing that they're going to start factoring in speed into their mobile ranking algorithms, which is a big change for them. Previously, they had only announced they'd done this on desktop. But let's unpack this a little bit more and look at the too long didn't read here. So the announcement claimed that it would impact rankings, not indexing. So if your site was really slow, you could still be included in the index, but you wouldn't necessarily rank as well. Similar to that, it was intended to hurt slow pages and not give boosts to fast pages. So it was something that if you were already pretty speedy, you might think, well, that doesn't really impact me, and Google kind of echoed that by saying only a small number of pages should actually be impacted. So why am I telling you things that might make you think that this is not a big deal? And I think that it's because, honestly, the speed update aside, we should all be caring about page speed for SEO, not because of rankings, but because of the fact that it's incredibly important when we're trying to acquire users from a search context. That search context is incredibly critical, because in a search context, users know that they have other options. They see them all listed there. And when your site doesn't deliver, when it's not performance, when it is a terrible product, users know that they are just a back button away from somebody else who can fulfill their needs. So not only are you losing that potential customer, but you're driving them right back into the hands of your potential competitor.   I mean, we miss industry benchmarks. This is actually a sample size of looking at pages that are from AdWords, which means that we're paying for traffic to these slow pages that don't perform to industry benchmarks. And it's happening with big brands, too. I mean, we think often that big brands should be better at this. They have bigger engineering teams. They should rock. They should have incredibly performant sites. And that's just not the case.  It's hard, duh. But no, seriously, it's really hard. And it's hard for developers, too. And so when I wanted to figure out why we were creating this really un-performance, this really slow web as a group of people that should be motivated to improve it, I looked to Paul Kinlan, who is a developer advocate at Google, and he published this great document at the beginning of the year about some of the challenges that he sees in the development community. And one of the biggest challenges he outlined was building performant fast websites. There are lots of technical challenges that obviously developers face, but I wanted to focus on two that weren't technical at all. The first one was that devs don't know what the goals that they need to aim for are. I thought that's really interesting. Why don't they know that? And the second one was devs don't have all the info about their user base and the impact that their decisions can have on them. And I thought that's a problem that we should solve. If you think about what Johnno was saying earlier this week, we've been keeping this information to ourselves for far too long. And the fact that developers feel like they don't know what kind of impact they can have on their customers is really tragic, and this is making the web slower. So how do we fix this? Today I want to provide a framework for you to go back to your businesses and learn how to work with your development teams, work with your managers, and make sure that your products are actually delighting your customers. So the first part of this is choosing your key metrics. It's interesting to choose key metrics to measure speed. You have to ask yourself the question of what is fast? How do I measure fast? And that's actually quite a bit more complicated than we think it would be. Lots of people can define this in very different ways, but ultimately what we're looking for is to determine that speed as a proxy for feelings. We want to measure if something feels fast, right? It doesn't matter if a thing loads before another thing unless it's giving off that feeling of fast for our users. That's what's going to give us uplift. And so Google has done a good job of trying to document the various feelings that are associated with fast. Is it happening? Is it useful? Is it usable? And understanding that those are three key distinct feelings that happen as a page is loading. And then you can map those feelings to some of the more technical measurements. But I think it's really critical that we start from the feeling and map our way down instead of starting from the measurements and trying to understand what those mean. The other thing to note here is that some metrics will correlate more with your core business metrics, things like revenue or conversion rates. And it's important to understand the relationship between the metrics that you're choosing to measure whether or not your site is fast and your core business metrics. For example, if you're an e-commerce site and you rely heavily on conversion rate, something like Time to Interactive, which is measuring that is it usable feeling, is incredibly critical for your conversion rate. Now let's go back to our framework. Let's assume that you've done your research, you understand how to measure what fast looks like, and you've picked a few key metrics that are going to help your business measure how you're progressing with your work in site speed. Now you need to get some data. And that's really important is to understand, okay, we've picked what's important to us, but how do we actually do? Are we fast? How fast are we? To get this data, I want to make sure that we understand the different kinds of data that we can get when we're measuring site speed. The first thing that we need to look at are potentially lab tests. These are simulated measurements. So we're going to simulate how fast the site loads, measure that simulation, and log that in our results. The second thing that we can look at are what's called real user metrics or RUM. RUM is shorter and easier to say. Also it sounds like fun, so that's, I think, why they came up with that. So I'm going to take you through a few different pros and cons with each of these. So lab test tools or simulated performance tools. There are lots of these available. A lot of them are free. The great thing about these tools is that in pretty much all of them, you can just drop in a URL. You can set various parameters for how you want to look at that site's performance. You can choose things like your network speed. You can choose things like the location of the device. You can even narrow it down by the very device itself. And this is really helpful because when you then run that simulated performance test, these tools will give you various results. Some will even run multiple tests and give you the median because that's a bit more accurate. But in the end, what you get is sort of a breakdown of your performance by various metrics. You can even in a lot of these tools set those custom metrics up that you defined at the beginning. And if you drill down deeper into this, you can actually see a bit of that film strip view and you can see how highly correlated it is with the metrics that you defined up front. Below that film strip view, and this is in web page test, you might actually get a waterfall view of all of the network requests and all of the assets that your site has to deal with in terms of loading. And as you sort of scroll on that film strip, you'll get the same perspective on the waterfall. This is also available in Chrome Dev tools. So there are lots of tools right now that are exposing this information. The great thing about these tools, these lab tests simulated performance tools, is that there's almost no setup required. You can just go right in, you can enter a URL and you can start to get information from a simulated test, which also makes it really easy to track your competitors. You can also test pages here before they launch, which is fantastic. If you wanna see how your site speed is going to be impacted in a new page template or something like that. And it's a controlled environment, which makes it good for debugging. That means that you could go ahead, make a change and then run the same test conditions on that same page to see if there was an improvement or not. And you can be pretty sure that a lot of the test conditions were the same. You don't have a lot of variables. It also allows you to test on multiple networks and of course, different locations and devices. But on the negative side, this is really hard to scale and keep current. As you've noticed, it's kind of a manual process. And if you wanna run these, then it's gonna require some dev work to come up with a system that can continually make these requests to run continual simulated performances. You do have to often run multiple tests to get something that's a bit more accurate. That's why web page tests will run three tests and take the median results. And then it's also missing a lot of real world conditions. So you don't get an accurate snapshot of what your users are experiencing. You only get an accurate snapshot of what the specific conditions that you set up were. This makes it really hard to measure the impact of things like dynamic content. If you're constantly switching things in and out or maybe you're running lots of tests and things can vary constantly, you have no way to know if you hit the test or not. This is why it's also good to take the median result. This is where real user metrics come in. Now, these RUM tools are fantastic. They are few and far between are free, but there are actually some now that are free, particularly Google is trying to expose a lot of the data that they get out of Chrome for you available for free. When you get this real user data from whichever tool provider you choose to use or even if you set it custom yourself using something like browser APIs, you'll end up getting a really interesting way of looking at this data. You get so many different numbers, it's not quite as clean as these lab tests, and I actually think that it's often more useful to look at this data in a table than in that kind of chart because you can make statements like, it looks like 10% of our mobile visitors are having to wait longer than 12.6 seconds for our site to become interactive. Again, we're solving some of the problems here from those lab tests. We get to look at real load times of our users. It's scalable by design, we're tracking them in real time, which is exciting, so we get that information as it comes in, and it's really easy to feel the pain of our audience because we know every data point was a real person, not just a simulation. It's also interestingly what Google is looking at. So we talked a little bit about the speed update. You might have wondered, how does Google know how fast my site is? Well, Tom Antony who is at Distilled did some really great sleuthing, I think, and found out that Google was going to use Chrome usage data to impact this speed algorithm, and he wrote a great post on it at Moz so you can go read all about it, but basically, if you wanted to look at the data that Google thinks applies to your site, you can go look at it in the Chrome User Experience Report, which is available on PageSpeed Insights or in Google BigQuery. Let's talk about some of the downsides, right? This is gonna require more engineering setup. It's not something where you can just go drop it in URL and hit enter. It's gonna suffer also from survivorship bias, which means that unfortunately, since we're trying to track how long it takes for our users to get to various stages in our loading journey, if they don't get to that stage, we don't capture their measurement, right? Which can be really challenging. So if you're only looking at your real user metrics and you're not looking at your simulator reports, you might miss some of those really slow pages just because people aren't actually getting that far in the process on their slower connections. This is also limited to the specs of your current audience. So if you wanna launch something in a newer developing market and they have completely different devices or speeds of their network conditions, this is not very helpful. And it can be difficult for debugging. If you make a change and then you see something go up or down, you don't really know what changed in that time. It could have been your fix or it could have been that 5G network was released and you had no idea that all your customers were getting much faster internet. So as you might have guessed, the best thing that you can possibly do, usually in a development cycle, is to have these two kinds of metrics work together in a cycle. So you'll write your code, you'll make your fix, you'll make your edits to your page, you'll test those fixes in the lab to verify that it actually had a positive improvement on the metrics that you care about. Then you'll release that to users and then you'll try and observe that that actually had an impact in the wild. Rinse, repeat. But developers have been knowing how to do this for a long time. And I opened this presentation by saying, I think that there's a lot that we as marketers can do to impact this. So they can take the run data and the lab data and they probably already have or maybe somebody has and they can put it in a spreadsheet and they can look at how bad things are. But I think that the piece that's missing, the piece that the developers are missing right now that we really need to contribute is how important it is, how important every page template is. And we know that information. We know which users are on each page type or page template, we know which pages drive the most traffic and most conversions. And once we start factoring that information into our system, our company is able to actually prioritize this work. Now, you can even add in a little effort score if you think that that's going to be really important to your business goals. And now you have a much clearer picture. You know, not only how bad is it, but what's the potential impact and how hard is it gonna be to fix? So let's finally go into this last section, optimize the experience. And this is honestly the section that most people in marketing, I think like to focus on when it comes to performance optimization. Most people focus on this first part, optimizing sites that actual speed that we wanna improve those metrics that we set out to improve from the beginning. But I wanna remind you that our metrics were just a proxy for feelings. And if we can change user feelings, we don't necessarily have to change the metrics, right? That's just one step toward the goal. That's one way that we can help approximate that we're going to change feelings. But if we can change users' perception of how fast our site loads, we can achieve roughly the same goal. So I'm gonna talk to you about both of these and let's go ahead and start with optimizing site. Now, people have been optimizing their websites to be more performant for years now. This book High Performance Websites was released about 10 years ago. And if you ask most developers what's changed, generally the whole strategy is pretty much the same. And I love this quote from Patrick Mena who sums up what the goal is in a pretty elegant way. He says it mostly boils down to ship less stuff and what you do ship, ship in an optimal order. So let's see how that might apply to some of the things that we as marketers often interact with on websites. So images, number one cause of bloat on the web. I think we can say that that's pretty accurate still today. This is a great guide to image optimization, but I can already preview it for you because we know that we need to ship less stuff. That means ship less, shipping smaller file sizes, trying to make improvements on how much we're shipping. And then we also need to make sure that we're shipping in an optimal order. So we're prioritizing images that are critical and then we're also lazy loading the rest. And that's pretty much it. We just went through an exercise and that's exciting. The one thing that I think that is missing from this sort of general understanding of how to do performance optimization is that there then becomes often an SEO or marketing impact based on the decisions that we make for more performance websites. And in this case, it's that when we make those decisions to make some of the images lazy loaded, we also need to make sure that search engines can still see them and that they're still following search engine best practices. So Alexis talked a little bit about this yesterday, but very important to make sure that you're constantly sort of looking at the impact of what your performance decisions are doing for your marketing. The next thing I wanna talk about are third-party scripts. Third-party scripts are really interesting because these are things like ads or widgets that come from other websites where you don't have control over the script itself. And this is a really interesting thing because we as marketers, we love to request these from our development teams without putting much thought into it. But if you think about it from your development team's perspective, they can fine tune that race car, that website as much as they want because they've built that, that's theirs, they own that. But when we ask them to bring in a third-party script, what we're asking them to do is bring in something that they cannot change for the most part. Some of them you can change, but for the most part they can't. It's like asking them to put a subwoofer on top of that finely tuned race car. The only way to improve it most of the time is to just take the subwoofer off. So this is the only thing I'm gonna say about AMP today. But AMP's biggest advantage, a colleague of mine did a great research project on this, AMP's biggest advantage he found was not a lot of the fancy stuff that they're trying to do to optimize the code and everything like that. It was actually the fact that it was limiting the number of third-party scripts, the number of stuff that you could cram on a single page. And I think that that's really impressive and that's super important for us to know that if we're willing to say no to get into the AMP experience, why aren't we willing to say no to things on our own site? And so as marketers, I hope that you kind of get out of this experience that maybe there are some tough calls that we have to bring to this conversation with our developers and they're calls that we're gonna have to make. If you wanna know how badly your site is impacted by third-party scripts, there are great resources that can help you do this. The process is very simple.  You can do that in Chrome DevTools, you could also do that in web page tests. All of your simulated lab test tools should be able to help you out with something like this. The next thing I wanna talk about is render blocking scripts. Render blocking scripts are a particular beast that prevents the web page from being displayed until the script itself has been downloaded and processed by the browser. And in some cases, this makes sense, but in other cases, it can be really detrimental to our performance. So, A-B testing is the classic example of this. If you can imagine that you're running an A-B test and that decision is being made in the browser on the client side, you're maybe, let's say, trying to change a button from blue to orange to see if that impacts click-through rate. Well, what happens is the web page wants to load the blue button and then the A-B testing script comes in and says, but not until I change it to orange. And that makes sense sort of, right? We don't want the user to see the blue button and then see the orange button, but that also takes time. And so the performance fix for this is to try and move those A-B testing decisions onto the server side, which means that what the browser gets is actually the orange button, not the blue button and the instructions to change it to orange, but the orange button right away. This is Patrick Meenan explaining that in better detail. Tag managers is another one that Patrick described when I asked him what is the worst mistake that marketers usually make when it comes to creating a suboptimal website. Tag managers, he said that he often sees tag managers that aren't loading asynchronously and some of the stuff that they're doing is also not asynchronous, which means that they're blocking rendering. So if you're making decisions in your tag manager, they're going to impact the visual layout of your website and you're blocking the rendering on the browser side, that can be really labor-intensive. I'm going to move on to server side rendering. Again, Alexis kind of touched a little bit on some of the reasons why you might choose server side rendering for SEO. I'm going to talk a little bit about the page speed implications of these decisions. So server side rendering is a choice that you make sort of as opposed to client side rendering, which is maybe the default rendering solution when you implement a JavaScript-heavy website. You can kind of see the process here. I hope this is big enough for everyone to see. But basically what happens in client side rendering is that the server sends a response to the browser, the browser downloads the JavaScript, the browser executes the JavaScript, in this case React, and then the page is now viewable and interactable at the same time. That means that the user knows that it's happening and it's usable at the same time. If server side rendering, you can see that the page becomes viewable much more quickly, but then it becomes interactable only later once the JavaScript is downloaded and processed. And we have to be really careful about this because it looks really great for performance up front. It starts happening a lot sooner, but we need to remember that actually our time to interactive may be a bit more delayed. And so we have to be really careful about that uncanny valley in between when our website loads and when it becomes interactable. If you've ever come to a website where you've tapped on a button a million times until it finally clicked, you've been in the uncanny valley, and so we don't want to deliver that experience to our users. If you find yourself in this place where you are seeing a huge gap in between that viewable and interactable moment, I would recommend you look into something called route-based code splitting with your developers. Finally, I want to just mention resource hinting. This is when you notice we've got something maybe really heavy as an asset on a page, but most users are only coming to that page when they've been on another page. This is great for checkout processes and things like that. If you want to load your checkout page really, really fast and you know that that's the page that most users go to, you can do something called resource hinting to the browser, which is basically saying while the user is sort of lagging on this page, we want to load this asset in the background so that they can have a much more fast experience once they go to the new page. It doesn't have to load at that time. We can start loading it ahead of time. So it's a much better way of sort of prioritizing resources. UX, I want to make sure we get to this. So I talked a little bit about user perception and I think one of the best ways I like to think about this is with lines or if you're British, it's cues. And the reason I like to think about load times as cues is because my friend, Johnno, who you guys heard speak earlier, has told me about his friend who has the most interesting job I've ever heard about, which is that they're a professional cue designer. And that sounds like it's something that probably only exists in England, but I love the idea of this. And it turns out when you're a professional cue designer, you are designing the experience to be optimal. It doesn't mean that you're shortening wait times, but it means that you're making people feel like their wait times are a lot shorter. And sometimes what they do is try and put people in an active state. So if you've ever been in a cue, you know what that feels like? It means that you're walking. It means that you're moving. The cue feels like it's moving. And even if it takes the same amount of time as a cue where you're standing, it feels faster. And that's what tools like Slack try to do when they try and tell you, okay, you're connecting. Okay, now here's a quote. Okay, now you're in a different place. They're trying to keep you in that active wait state so it doesn't feel quite as long. This is also the sort of basic principle behind something like skeleton screens. When you see something show up and flash, it's faking that is it happening feeling for you, even though it's much less labor intensive than maybe loading the entire page. Now you might think, okay, but I am not Slack or Facebook. I can't possibly do this. How do I implement something like this on my site? It can be as simple as choosing the correct loading bars. If you know that it's going to take a long time to load your page, I understand a lot of people have to load very heavy applications for some of their products. You might just wanna be aware of the fact that not all loading bars are created equal. And it would be worth user testing to see if any loading bars you might design might feel faster or slower than others. This is a study by Carnegie Mellon that found that backwards-lined progress bars felt faster to users than ones without the stripes. But I've given you a lot of tips right now, and I'm a bit concerned that what you're going to do with this section is create a long list of things and then just hand it to your developer, which is not the way to talk to developers. Can tell you from experience. If you've ever had that frustration of, oh my gosh, my developers never do anything I ask, takes them forever to get to my projects, they seem to hate me. I'm telling you that it's probably not because you're not giving them enough beer or whatever every blog post tells you you need to know to talk to developers. It's because you're telling them solutions instead of problems. And if you instead go back to your developers with problem statements instead of this long list of potential solutions and you work on things together, I can guarantee you that they'll probably know a lot of this, but they'll also be able to find more creative solutions for you as well. So I appreciate the complete irony of me telling you to go a little bit slower to optimize your site for speed. That's exactly what I'm about to do. You're not going to be able to make these changes long-term and sustainable if you just go barrel forward and do them all on your own or handle this to your developer and then never look at it again. You have to build this into your business and into your process, which means unfortunately talking to people and building relationships. So I'm not gonna spend a lot of time on this, but I wanna give you some quick tips that I've found help organizations get their performance budgets approved and prioritize this work. The first thing is that you have to simplify those performance KPIs. So we talked at the beginning about setting your key metrics, make sure that you've made those as simple to understand as possible, you explain them to the business in a simple way. Then you wanna clarify how important they are to the org. If you can correlate them to your core business metrics like we did with Time to Interactive, then you can make a much bigger case for why everybody should care about this and watch this.  Remember how at the beginning of this presentation, I showed you guys some dollars and some pounds and that made a huge impression. You wanna do that with your business as well. So I wanna end today with what I sort of set out to do, which is tell you what all marketers can do about site speed. And what I hope that you'll do at the very least is leave here asking, can we afford it? Can we afford it? Is what the BBC tries to ask when their site is slowing down and they have to make a tough call. And they decide to remove some of their marketing material. That's a tough call. But it turns out that speed is much more important than the promo box. Because the BBC knows that one second added is 10% of their audience lost. Or it could be $300,000 in your revenue. Or 800 million pounds in customer spending. Sorry, I don't wanna offend any British people. It's been a rough day. So lastly, I just hope that all of you today are leaving with an immense curiosity for what are you leaving on the table by not investing in performance? And if you wanna answer this question, Google's already released a calculator that you can use to help estimate that impact in your org so that you can associate that load time with real dollars. Thanks very much. I've been Emily Grossman.


the aforementioned rub. Here's the part where I tell you, I'm definitely going to post my slides on my blog tonight. You're going to check my blog tonight. You're going to check it in a week. It's not going to be there. In a month, you're going to get tired of waiting. You're going to email me. You're going to say, hey, can you post it already? So I have my slides online right now. If you go to robbridge.org, you'll get to this page. Click on Presentations right here. And we're going to look at serverless architecture in Azure. So you can click through, feel free to get ahead, dig into all the things. It's really fun. Who's the guy up on stage? This is a bit about me. I'm a Microsoft MVP. I'm a friend of Redgate. AZ GiveCamp is really cool. AZ GiveCamp brings volunteer developers together with charities who otherwise couldn't afford custom software. We start Friday after work building them software. Sunday afternoon, we deliver completed projects. Sleep is optional, caffeine provided. If you're ever in Phoenix, come join us, because it is a lot of fun. That's the book that I worked on. I worked on Gulp in version two and version three. That was really fun. One of the things that I really enjoy, I posted a comment on the .NET Rocks podcast. They read it on error. They sent me a mug. So that's a little bit about me. My company is Richardson and Sons, Microsoft Partner. I run the SoutheastValley.NET user group, that wonderful Sun logo, and then I'm also associated with the Phoenix Angular Meetup. So we're here to talk about serverless architecture in Azure. We talked about this guy. We're going to keep coming back to this point. I don't want to own that. I only want to own the code that only I can write. When we start talking about serverless, we start talking about what can I offload so that I don't need to worry about that anymore. A brief history of time. Let's start at the beginning. Remember when you went to the store and you got that magazine and it had all of the components in it, and it was really awesome, and you bring that home, and you pick out all of the things that you want, and you craft that perfect PC? That was awesome. And you can have spout your specs, and your signature on the BBS has like 10 lines in it talking about all of the components that you have, and aren't you so proud of that? It was wonderful. Achievement unlocked. Compute count one. Woo-hoo! Let's build our server farms that way. So skipping ahead a little bit, we got to the point where we didn't want to build our computers anymore. We wanted to outsource this to those that would build a black box. They would pick out the components for us. We would buy that black box, which is kind of funny because computers now are black. So we go to PC manufacturers like HP and Dell and Apple, and we get them to pick out the components. We have outsourced the choosing of components. I don't want to own choosing my components. I only want to own my code. So let's take that to the next level. Skipping ahead a little bit in time. I don't want to own the hosting. I only want to own my code. We started out with the server. I love this because this is so representative of the server closet. I worked at a company where all of the non-people things went in that back room. We had the server rack. We had the water main. We had the air conditioning vent. It's really entertaining when the air conditioning from the ceiling dripped in on the server rack. That was a bad day. They're like, but it's all that not people stuff. So we went from the server to a co-location facility where we have many servers. When I moved to that co-location facility, I have outsourced the physical security. I no longer need to keep people out of the building. They take care of that for me. I no longer need to supply ethernet and electricity and cooling. I've outsourced that to them. We went to a co-location facility so that we could get rid of that back room with the water dripping on it. Let them handle that part. Skipping ahead a little bit more, we get to the Cloud. Everything now is the Cloud and what is the Cloud? It's the water that made the servers die. The Cloud is about getting virtual machines faster. Instead of doing that six-month procedure of going through the corporate tribunal to try and get access to a virtual machine, instead we go to a dashboard and we push go and we get that machine a lot faster. Here in this infrastructure as a service mechanism, we've got that provisioning automated. I have outsourced the process of purchasing hardware. Ultimately, that's really cool, but what I ended up with was a faster way to get to a server that I own. At the end of the day, I still have a server. We look at that and say, well, I really don't want to own the server. I want to own my code. We start out with platform as a service, or we move then from infrastructure as a service into platform as a service offerings. Can we get hosting as a service? So what's really cool if you squint real hard, here's our on-premise IIS server dashboard, and here's how I configure my website, and I click through the website, and I have each of those controls. If you squint real hard and you look at that, versus this platform as a service in Azure, here's how I host my websites. I'll take my.NET or Java website and I'll hand it to Azure App Service and it will run it in all the ways that I do. All of these controls that I had are pretty much the same. I'm configuring the different parts of my application, and that looks not unlike this. Well, there's one difference here. As I click through and I get to this button where I have the scale and this is wonderful. This is why we move to the Cloud because I drag that slider from one server to 10 servers and it just works. Now I have 10 servers doing that. Well, what's the server name? What's the DNS? I don't care. I have outsourced running my web server to my Cloud Platform. Any questions so far? Good question. So I have financial data up here on the Cloud. How do I make sure that that data is secure? Good call. So my customers are hitting this web server that's up on the public Cloud. How do I validate that the server is okay, that that connection is safe, and that's where SSL comes in really handy. I would argue of all the places where you're working on securing your web server in your data center or in your server closet, how often are you patching things? How often are you chasing vulnerabilities? Compare that with Azure. How many engineers do they have focusing on security, both physical security and network security? They actually have machine learning algorithms that will watch the traffic to your site and go, I don't think this database query is normal. I think you might want to look at that. So ultimately, yeah, you have to sell that. But built into Azure is a whole lot of business compliance that takes away a lot of that risk for me. The beauty of beauty there is, while I'm in the midst of the audit and they talk about how do you do all the stuff, I'm like, well, here's the page on Azure, go read it. Usually that's the end of that conversation. All of the pieces underneath my application are now irrelevant to this audit conversation. It's a sell and your business may not be perfect for that. But this is a great way to get away from managing my hardware to just managing my applications. Yeah, that's a great question. So I have uneven load, I may have more traffic at the beginning of the month and less traffic towards the middle of the month. That's where Cloud makes a lot of sense, because I don't have to provision for my worst case scenario. I provision for where I am right now and I just dial that slider up and down. What's really cool is I can start to build automation around that to say, well, let's watch the network traffic or let's watch the CPU. Ultimately, the metrics that matter for you are going to be different than the metrics that matter for me. But let's build some automation around that to say, when I notice that my servers are under load, whatever load means to you, let's spin up some more. Whenever I notice that there are servers that are underutilized, let's spin them down. Or if we have a really infrequently used product, it's only going to run the things at the very end of the month, let's shut it down the rest of the time. We have a B2B app, it only works during business hours. Let's turn off the virtual machine at night. Now instead of paying for 24 hours of time, we're only paying for 12 hours of time, and that VM is half the cost, just straight out of the gate. There's some balance there. Somebody's going to try to run the job at three in the morning and it's not going to work. But can we make those adjustments and can we start to provision for our right size rather than over provisioning to match our worst-case scenario? That's definitely what this works for. Yeah, great question. So how do I get data that is persistent across that shutdown process? What's interesting about the Azure virtual machines is that they are persistent. The disk, much like S3, they have Azure Blob Storage, that disk goes into Azure Blob Storage, it is persistent. When the VM pops back up, it connects that disk again and I still have my data going forward. I would argue that when you get towards stateful data, when you get to, I want that database to be persistent. Ideally, you probably don't want to put your database inside of a virtual machine. Instead, you want to leverage a Cloud product, a software as a service, just get SQL as a service. I want a magic connection string that I know works forever, and at that point, then that connection string will continue to go. Whether my virtual machine is alive or dead, whether my website is alive or dead, my database is persistent. The beauty there is that SQL Azure is a little bit more than running a virtual machine, but now I don't need to worry about backups, I don't need to worry about geo-replication, that my data is safe, they've provided for it. So let's dig in a little bit. We've got Azure Web Apps and the cool part about Azure Web Apps is now I'm not hosting the virtual machine, I'm sitting at the layer above that. We hit a few bumps in the road when we did this, and we were going to hit a few bumps here, whether we went from one server to two, or whether we went from on-premise to Cloud, we hit these kind of architectural things where the old way didn't work. Well, what happens if the machine isn't durable? If the disk isn't durable? If the process isn't durable? I've moved from virtual machines to web apps, and so my next request may not start up on the same machine as my last request. So I have a scenario where I've got this app, and I want users to be able to upload their profile pictures. So I get to that point where I'm uploading the profile picture, and I put it in the temp directory, and the virtual machine goes away, and I get a new virtual machine, and the next request goes to look for that image and it is gone. We're going to hit these bumps in the road no matter what, but we need to start thinking differently when we move to the Cloud or when we move to scale. Rather than saving it to the temp directory, I'm going to save it to blob storage to S3. When I save that file to blob storage, now I can go pick that file up at a later date, whether I'm on that server or another server, whether that server has been recycled by the time I get there. It's those types of things rather than storing my data on that machine, I'm going to store it into SQL Azure, or I'm going to write it to a queue. When we get to Cloud Scale and we start thinking in these ways, keeping our data off of the machines, now we get to look towards stateless immutable infrastructure, and that's what's really cool. So we would have hit these bumps anyway. The process isn't durable. How do I communicate between multiple machines on the same network? But we get past that and we start architecting for the Cloud. Ultimately, when we coordinate through queues or through blob storage, now two machines or 2,000 machines can communicate in parallel. So I'm going to take that image upload. I'm not going to save it to my temp directory. I'm going to save it to blob storage, and I'm going to write to Azure queues. I need to go resize that image because of course, they uploaded the five gig image and I only want the 300 by 200 thumbnail. This is one of those more controversial ones. We're going to work towards eventual consistency. The beauty of eventual consistency, I love this model.  Imagine they hand you the cup, and then they hand you the steam, and then they pour some milk in it. I don't want to deal with it at that level. Do all the things that you're going to do. I know that you have my credit card and I know that you have my name written on it, and at the end of the day, you will hand me the full cup with the lid on, and that's my latte. Let's write it to a queue. Let's go process that queue. Let's tell the user your order is being processed. We don't need to give them the success or fail right now. But then let's message them in a minute or five minutes when we've completed that sale. When we move to eventual consistency, we also have durability in nodes, because as they communicate with each other, as they go up and down, we can retry a few times. There isn't a user waiting for it right now, waiting to finish that request. Any questions so far? So that's all good and fine, but I don't want to own that. I want to run my service my way. So in the app service model, the web apps model, we had to upload our website to that. Well, I have an application that requires a specific workload. I need Redis or I need this version of this database, and that's when we reach for containers. What's beautiful about containers that infrastructure is code, I can build that container from this text file, I'll version this 20, 50 line text file and it'll be able to build that image in a very consistent way. Unlike the virtual machine where I have to manage all the pieces, I can just build in those plugs, and I can start to host that machine anywhere. Well, it's really cool in Azure, we have the Azure Container Service. Azure Container Service gives us the ability to host these Docker containers in really elegant ways. So I build out my Docker container, and I hand it to Azure Container Service, and I say run it in all the places. Well, Azure Container Service is for the most part, an ARM template. It's a list of hardware that I need to be able to run. By default, it spins up on Linux, but I can configure that to run on Windows as well, and I get to pick from the three major orchestration engines. I can choose Kubernetes, I can choose DCOS, or I can choose Docker Swarm. Once I've made that choice, I can spin up other worker nodes that are Linux or Windows to be able to get the workloads I need. So now I can have my container running my way in Azure, and Azure will manage all of the pieces, make sure I have the right number of virtual machines running. Now on the upside, I now have containers running, I have this Kubernetes cluster, it's doing all the things. On the downside, I've pretty much provisioned quickly, but now I must own these machines. I must patch the virtual machines, I must patch my Kubernetes cluster. I need to keep track of that. So I can take the next step and I can look at Service Fabric Cluster Service because naming is hard, the Service Fabric Cluster Service. The best one is Microsoft created a product, Microsoft ASP.NET Ajax 1.0 for ASP.NET 3.5. Yeah, Microsoft is awesome at naming. So the Service Fabric Cluster Service, it isn't quite the cluster that the name is, but the cool part about Service Fabric is that this is that hosted Docker as a service platform. Now I'm not using the standard orchestration engines, this isn't a Kubernetes cluster, this is a Service Fabric Cluster. But here in the Service Fabric Cluster, I upload my Docker images and they just run. Azure will make sure that I have the right number of Docker containers running at any one place. I don't need to patch the underlying hardware at all. I don't even need to know what it is. I just say this container needs to run on Windows, this container needs to run on Linux, just make it go. Together with the Azure Container Registry, if I don't want to publish my containers to Docker Hub, I can spin up the Azure Container Registry, which is just a specialized blob storage account. I am only paying for that storage. I am not paying for all of the things to manage my Azure Registry account. So now Jenkins spits out images into the Azure Registry. Service Fabric or Azure Container Service spins up to pull in those images from Container Registry, and I have this complete private Docker ecosystem running in Azure. Any questions so far? Good call. So if they're doing all the things in Service Fabric, they're patching the underlying pieces. What happens when a change in that underlying piece breaks my code? Yeah. Sorry. The beauty of Azure Service Fabric is that all of that is removed from me, I have no control over it. One day I wake up and the portal is different. If I want that control, if I don't want to outsource that piece, that's where I reach for Azure Container Service, where I'm starting to run that Kubernetes cluster or that Docker Swarm cluster. Because at that point, I can manage keeping my versions in sync and validating my results. Yep. One day your app is working. If you've built your app to be that fragile based on the underlying hardware, there's probably a bigger problem, but at the end of the day, my app is still down, so my head is still on the chopping block. Yeah. That hurts. Good call. Can I create a QA environment and test things there before it goes into production? I can create two environments, a QA environment and a production environment for testing my changes, but they're going to update them all at the same time. So if I want that ownership, I need to go to Azure Container Fabric, or Azure Container Service. Yeah. Can Azure build the Docker images? That is a great question. We'll look at Visual Studio Team Services for that. That's outside the scope of this presentation, but yes, you could build in Azure those Docker containers if you wanted to. What I usually do is I spin up a Jenkins VM, and I just get the Jenkins VM to do it. So we've got our Azure containers, and we've got our code running our way. But ultimately, I don't want to own that. I just want to own a back-end context. I have perhaps this Windows service that goes and pulls those images that I uploaded and resizes them to do interesting things. I don't want that five-meg image loading on each page load. I only want a small image. So I have this back-end service that does stuff. I want a Windows service in the Cloud, and this could be a Windows service or it could be a Java app. Ultimately, I want something that isn't bound by that browser timing out after 30 seconds and cutting off my job. Here's where I reach for web jobs. What's really elegant about web jobs is it is that Windows service in Azure. Now, unlike Windows service where you have to configure all of the things, a web job is in itself just a console app. It's a console app with a while loop, a console app with a timer. Here's an example of a web job that is pretty cool. Hey, one of my visual studios just closed. So I'm going to go in the other way. Here's a web job. It is just a console app. The beauty of that console app is I can test it locally just as well as I can test it remotely. So ultimately, I upload this web job, this console app, and I can start it either on a timer or based on a web request, or I can have it running continuously. At that point, it just does what it's going to do. Typically, when I build a web job, I'll build a web app that runs continuously. I'll have a timer in that web job that kicks off something every few minutes or so, and then goes and does the action that I was going to take. That Windows service as a service here in web jobs, runs on the full.NET framework, and it does a really elegant job doing that. The other option for web jobs that is really cool is running them as triggered jobs. So unlike the console app here, I initialized a web job host, and then I have this function that just takes in things. So you see here, it says this is based on a Q trigger. So I just happen to have a Q trigger named QNAME, and anytime something gets dumped into that Azure Q, this function will get called automatically. So I don't need to pull against it, I don't need to do anything fancy, I don't need a timer that waits for it. I just say, hey, when something enters this data source, go run that task. So the user uploads their profile picture, I dump the picture into Blob Storage, I dump a message into Azure Q, my web job wakes up, notices that there's something in the Azure Q, feeds it into my function, my function goes and reads that blob and resizes my image. Probably I'm done with that resize by the time that page refreshes on the browser. If not, that's okay, it's an asynchronous process and it could happen in a few minutes or in a few hours or tomorrow or I could run it again in a month. Web jobs based on the full.NET framework gives me that simple mechanism for building Windows services, which is really elegant. Yes, I don't want to change tabs yet. So we dug into web jobs a little bit. Any questions on web jobs? Can I write web jobs in other languages? Anything that can be run can become a web job. So you create a file that says, here's the command I want you to run, and that can be a shell script, that can be a jar file, that can be a bash script, it can be anything that you can execute, you can turn into a web job. That's a great question. Yeah. Is this similar to Lambda functions? It is not. How is it different? Lambda functions will run on demand. This web job will run all of the time, or it'll run on a particular schedule. Let's come back to that when we talk about Azure functions because then we'll start to make a whole lot more comparisons between function as a service and kind of this Windows service as a service. Yeah. What security context does it run under? It is running inside of IAS, but it's not a website running in IAS. So you've got that same security boundary of being in the user land worker process. But because it's not hooked to a web request, it's not bound by that 30 seconds. So a web job is great if you need to run for hours. That's awesome. What's the difference between a console app kicked off by a scheduler versus a web job? I can actually put in Cron expressions to kick off my web jobs, and so ultimately, it's identical. What I love is exactly that. It's a console app. So I'm used to building that console experience. I just don't put that read line at the bottom so that it doesn't exit. I have to wrap that in an if debug because I've deployed a few web jobs that are like, well, they never ended. Oh, yeah, it's waiting for me to push return at the end. But yeah, it's exactly that. I will build my console app. I don't need to do all the funkiness around getting a service to run. I just then schedule it through Azure. Yeah. How do I create that? Is it part of my website or is it a separate service? That is a great question. Here in, did it load? It's going to kick up. I'll have a separate project for my website, and I'll have a separate project for my console app, my web job, and then I'll link them together as part of publishing. So for example, and this is a little bit tiny, but here is my website, and here is a web job. So I'll come into the website and I will say, add project as web job. So here I have the new web job or an existing web job. If I were to choose an existing project, then it'll ask me to pick the project in my solution. Once I've done that, it will link the project, my web job project with my web application, so that when I publish my web application, it'll ensure that my job is built and deployed as part of that package. If my job is built in another technology, then I just need to make sure it ends up in the bin folder, so that as I deploy my app, it goes up as well. That was a great question. Thank you. So web jobs are really cool. Web jobs give me that I'm not running the thing, but on the downside, I still own the process. It's going to restart the process for me, but I'm paying for the process to run the entire time. I don't want to own the process, I just want to own my function. I want functions as a service. I just want it to run. Azure functions are really elegant for exactly that. They're actually built on top of web jobs, and the beauty here is that when your Azure function runs, you are only build as your function runs. Where with a web job, you're paying the entire time. With a function, you're only paying as your function runs. So it's perfect for the things that run infrequently or for gluing things together. The IDE is either the Azure portal or you can use Visual Studio for this, and Azure functions are just beautiful. So let's actually start in the Azure portal. I went into the Azure portal, I went to new, I chose Function, I have no Internet connection, and ultimately I got to my Azure function. Now, this function app is just a grouping of functions. It doesn't mean that this is a security context or a boundary between calling things. It's more just a billing construct, more so than anything. Here's my group of functions. So I'm going to create a new function. I'm going to say I would like a new function, and this wizard is gorgeous in kind of helping you fall into the pit of success. Do I want it to run on a web hook or on a timer or on a data event like dumped into an Azure queue? Then do I want one of these three languages C-sharp, Java or F-sharp? Or I hit the Advanced button. The beauty of the Advanced button is now you have much more languages, you have much more constructs, and so this list then just goes on and on of all of the different ways that you can do things, and other languages as well as just those three.  I'm going to choose a web hook, and I'm going to create this function. Now my IDE is here inside the portal. I'm in Chrome, I'm typing code. When I get done with my function, and I'll just take this function as an example, I will hit Run, and it will actually run my function here in the portal. Here's my logs. So I passed in this request body, I got back status code 200, hello Azure, and then I can see the results of all the things that I logged to that function. If I need nothing more than this, this IDE is great for hacking things together and gluing them together. Once I'm done, I can click on this Get Function URL, and you notice that it has this question mark code equals there. That code is that security piece. So each request to my service, unless I choose to disable it, we'll need a similar code and it's just a GUID. I can come in here to manage those codes and do some interesting things. Let's come back to that one. So instead of saying throw on error, I'm going to go, well, what if you don't pass in a name? Well, if I don't pass in a name, I get a status 400 bad request, and I do that because here in the code it says, well, go grab the name in all the places, either from the passed-in query string or from the post body, and if my name is null, then hand back an error response, please pass a name. So I'm going to say, if name equals null, name equals user. Now still with that blank post body, I'm going to save and run, and now I get a 200. I can put that user back in the post body, and I get a 200 with that value as well. This is great for doing those experiments. I want to glue things together. I want this API to talk to that API and they don't, let me build some glue codes in middleware. At the end of the day, whether I choose this way or whether I want to pre-confiled function, I'm still only paying for usage. So I'm going to come in here to Visual Studio, and whether I want Visual Studio or not, I can get a more compilely, local debuggy type of experience. I said file new project, I created an app function app, and I'll have a similar mechanism. I'm going to say, add new item, I'm going to add an Azure function, and I will say this is GitHub webhook. Now in this case, I chose C-sharp, but I could have also chose any of those other languages as well, and now I'm greeted with that same experience. Here's the Azure webhook. As I push to GitHub, if configured to do so, it will then call into this and I can take action. So it's pulling in that data and perhaps I'm pulling in the first and last name of the committer and doing interesting things. Back here in the portal, I have each function and so in this case, I just have this one function, but if I come up here to the app itself, I now have some of the larger configuration pieces that may be similar to the way I'm looking for them in web apps. So these start to look familiar. Here's all settings, here's where I can configure connection strings and other interesting things. Deployment options, that's where I start talking about slots, where I can have the QA slot and the production slot, and then I'm going to flip them live. All the ways that I can dig into regular mechanisms, I can dig in here to Azure Functions. If I choose, I can create my functions to run all of the time instead of just on-demand. At that point, I'm paying for it much like a regular website, but I have that option to flip into that billing model as well. Any questions so far in Azure Functions? How do I version control when I'm developing in the browser? You don't. So that's a great use case where it's like, well, I want more control over my deployment process. Well, when I'm in Visual Studio, I can do some interesting things like here I would say publish, and I can choose to do that through Visual Studio, or I can have a CI process publish. So maybe my versioning scheme for functions is that I check this into Git and I get Git to kick off Jenkins, and I get Jenkins to publish to the portal. Yeah, so it was late one night and I just needed to make this quick change and so I just logged into the portal and I started changing the code and now it works again right up until you deploy tomorrow. Ultimately, when you want that more control, Azure Functions isn't a great fit and you go back to that where I'm on the website and I'm owning all of that process and I can version things and I can deploy it in really elegant ways. I've lost that build model, but I now have a whole lot more mechanism and I have some and I have C involved in that as well. I don't need to wait for the function to spin up. Great question. Thank you. Should you go into production and start changing things? No. Well, this is what I love, the resume generating events. So it's your head. That's awesome. How do I add third-party libraries or other dependencies to this? If I'm inside an Azure Function inside Visual Studio, then I just have dependencies and I can add reference or manage new Git packages in the normal way. If I'm here in the portal, the interesting thing about the portal is I have, here in this minute, here we are. I can start to define other things that I'm uploading into the bin folder as part of that. So the beauty there is that I can upload anything, I can just reference any DLL that I need to. The downside because it's this looser model, it's great for things that don't change very often or things that don't run very often or things that don't evolve. I just need to make this thing work for now. If you want to look at more durable things, definitely look to Azure websites instead. Yeah. Third-party monitoring tools. That's a great question. What's really cool is this is just a web endpoint, and so you can just hit it with any web endpoint, with any monitoring tool to grab that endpoint. It's a function, so it's going to do its job too. So pass in the fake customer or the fake credit card number so you're not actually running things. But you can also harvest the logs into either Azure Analytics or do interesting things that way.  So in time, that may be your best way to look at the innards of Azure Functions. That was a great question. Thank you. So I have an Azure Function that's Python or Node, how do I manage those dependencies? What's really cool in Node is I can just upload the package JSON as just another file within my project, and that package JSON can specify a whole bunch of dependencies. In Python, you can do similar things pulling in packages from that package manager.  If I want to lean on Express, for example. Ultimately, you don't want to spin up a thing, so Express probably isn't a great solution. But you want to reach into libraries that can execute quickly and then get done. Just put them in your package JSON and it'll pull in it automatically next time it starts. So we looked at lots of interesting things here. We dug into Azure Functions quite a bit. I would argue that Azure Functions is great for single-purpose tasks, for things that run infrequently because you're leveraging that billing model, for things where you just need to quickly glue to stuff together. Maybe great for prototyping as well. The downside, Azure Functions is difficult to visualize. When you have now a container full of 100 functions that do interesting things, how do I know which one calls what? How do I know which handles what data? So I invent a naming convention. I see this as an opportunity to grow, to be able to visualize that workflow, to be able to see functions calling other functions and functions impacting data sources. Because the code is right there, it should be pretty easy to reflect that out. So I don't want to own any of that. I just want my business problem solved. I'm Rob Richardson, I do this for a living and you can hire me. Any questions? Good call.  They've given an SLA that they say they will support it going forward, much like they support Silverlight and Windows XP. So yes, your mileage may vary. At the same time, I'm seeing a lot of adoption in Azure Functions and Web Jobs, and so I see those sticking around for a while. At the end of the day though, that's one of the things that we give up when we move to the Cloud, is it will upgrade at its own pace whether we're ready or not. If you want your application to live for a really long time, probably best not to put it in the Cloud. The Cloud moves too fast. Thanks, this has been a lot of fun. Thanks for letting me play.