Or maybe just here, spilling your intestines. Point is, I just don't like you. Hello everybody and welcome to Jurassic World Evolution Return to Jurassic Park. And we will be continuing our play through with Mission 6, creating the compsognathus. I'll bring the microphone a little bit closer now. There you go, look at it. Oh, she's gorgeous, isn't she? And it was just a raptor claw or a raptor angle. That's like the fleshy bit underneath the claw, I think, if Jim Kirkland has taught me anything. And if I'm wrong, I'm so sorry, Jim. Of course, drinking from the amazing Color Changing Mosasaur mug, which you can get in the link in the description down below. So we got a research item from Research Center Light Cable Fence. Do we have some compies? Oh, we have a stegosaur. Wait, why do I have a stegosaur? What's that? Oh, oh no. Oh no, no, no, no, no, no, no. This isn't going to be good. Oh no! No! All my explorers! No, the queue is gone! I'm just, I'm just disappointed. I think that's, that's it. I'm just, I'm just disappointed. I was, I love that. I love those guys. So now we've got a light cable fence. Oh, that was electrified. And now we've got a light, so a smaller one. Interesting. Ooh, and then you've got the heavy cable fences. So what else can we research? Um, let's get arid. Arid's good. We've also got some dinosaur fossils. Ah, yeah, that's right, because I, before I left the last video, we were going off to collect some compsognathis DNA that are almost there. And the support, ooh. Actively incubating even more carnivores. Are we Dr. Santor? I need the genome first, at least enough to fill in the gaps of a compi. I haven't knew what he was doing when he reached out to you. What does that mean? Ooh.  Like he is, no offense. I didn't realize believing in something was a weakness. If my belief ensures the health and safety of life on this island, be it dinosaur, human, or even a tiny little plant, then that's all that matters to me. Say, have you ever heard of summit fever, Dr. Sattler? In mountaineering, it's what gets climbers killed. The desire, the compulsion, if you will, to reach the top becomes more important than anything else, more important than survival, even. That's John Hammond. And that's also me? That's what you mean? I'm only offering perspective. When you're trying for something, you want to achieve it, especially something you've dreamt about your entire life. It's not the goal that concerns me, Dr. Sattler. It's the cost. Oh, there you go. Some interaction between Ellie Sattler. They don't get on anymore. They really don't. I don't exactly know why. They seem to get on in Drossick Park and they never really had any bad interactions. That's solid work. If you think about it, they've never interacted since Drossick Park. Occasionally, to explore an evolutionary branch, one must be willing to go out on a limb if you'll pardon the pun. And this is one of those moments. A new contract awaits. Oh, getting Jeff back in the recording booth. I love it. Love a bit of Jeff. So we're trying to get more of the ComSugnator's genome, which we are now 48% of the way there. I have set off some more Dig Teams. We've got more ready. Go on. Off you go. So if I wanted to, I could crash into a fall explorer and then it just wouldn't be able to move. Oh, I think if it has so much, I don't know, if it gets damaged so much, I think you have to reset or close down the tour or something like that. Oh, that's what we wanted. There we go. Beautiful ComSugnathus. I'd love to see all the different skins that we can put on them as well. I'm hoping that in the challenge mode, there's not any specific, I don't know, like, oh, you have to do this on Jurassic Devocality to unlock a ComSugnator skin. I guess it's incentive, I suppose. I guess it is. I just don't like having to do hard work. Oh, look at that breakersaw. Oh, they're right next to that fence. They're not happy. They need more trees. That's interesting. But they could have more trees if... Imagine that. Oh, that's kind of terrifying. Oh, to know that that could just step on you. Yeah, they could just go over here, right? If they needed more trees. It's like right on the road. What are you doing? Oh, that's gonna hurt if you step on that.  Don't do it. Oh, God, there you go. Forex, like... Ah, a little bit of a problem. Little bit of a problem. Oh, we've got a... We've got a tourist in there. Hold on. Uh, can we have a check? Oh, there he is. Look at that top. That's a 90's top if I haven't seen one before. Oh, what's this arch? What's this arch above? That's part of the explorer, right? Hold on, that's new. Why is that there? Wait a minute, that wasn't there last time, was it? Did I just never see that, that arch? I think that's just updated. That shouldn't be there. Did Universal say, uh, actually, you know what it is? You need to have it look even less like the Ford Explorer. They put in that. Hold on, I'm genuinely curious because I've got the other video rendering over here. I want to have a look. Oh, that's so odd if that is the case. So a few of the three guests killed by... I love Jeff Goblums or Ian Malcolm's missions. It's just make sure just don't, nothing goes wrong for so long. Attraction, profit per minute, and Mementiosaurus genome. Oh, we could, you know what, Grant? I'll do it, just because I love you. Just because I love you. Why is Mementiosaurus? Oh, did I do it? Let's get some into an enclosure and make sure they have access to food and water. I will do my best, Ellie, but why in Jurassic Park 3 were you with that other bloke? Oh, there's only vivid. Oh, okay. Well, we'll definitely make sure they can live a little bit longer. So now, their lifespan is 100! 46% on viability, with a 40% extra, so we're looking at 86. I think that's gonna be good enough, don't you? I think that'll be fine. I don't think we need to worry about that. Ah, look, a stegosaurus, who's very not happy, who's probably gonna destroy some fences, but we'll worry about him when that time comes. Some of these animals are aggressive enough without the added stress of hunger. Feed them, or they will feed themselves. And trust me when I say that nobody is gonna like it, if that happens. All right, you know what? I don't know why, but these guys are just... They're nowhere near the feeder, which is over here. So, with that in mind, I'm actually really tempted to move the feeder quite a ways away, just so that stegosaur doesn't get tempted to smash the fence. I'm gonna put it over there. Just a little bit further away. Oh, there's another one! There they are, the copies! Oh! Where should we put them? Where should we put them? Oh, you know what? You know what? I'm gonna put them. I'm gonna get a light little cable fence, and I'm gonna have them right outside. All right, there we go. I've made an enclosure just in front of the visitor center. I have also put a goat feeder in, because I'm curious as to whether a comsognathus would attack a goat. Because we've only seen them eat off the other feeder, the regular sort of food. So, this will be really interesting. And I also want to... Oh, oh, is that... Did place one down? It's... It's... Is it drinking? It's drinking, but it looks like it's drowning. Wow, we picked the best time of day to place these little buggers, didn't we? Bro, okay, what is the social grouping?  A population they're pretty fine with. They are, however, drowning. Like, they can't float, and they're just running underneath, but you just listen to sound effects. They're so cute. Oh, we're gonna get some... Jeff, go up in action. Jeff, hello. Is it gonna come in? What? Let's get jipped out of some Jeff. Ah, there we go. These islands just can't function if we can't keep the people safe. And losing that battle might, uh, you know, work out for the dinosaurs and their appetites, but for us humans, well... Not so much, not so much. I could so see, like, Jeff now voice acting that, and then to when he was going, he's going, I could see him doing that in the recording booth, my god. Yeah, it's interesting because I don't know if Jeff could act like old Jeff, if you know what I mean, like, 90s Jeff in Lost World, because this Jeff's kind of slow and he talks, sometimes he talks a little bit fast, but most of the time it's slow and thawed out, whereas the Jeff who is in The Lost World is a million words a second. Why not? Because our hands aren't full enough with walking and crawling dinosaurs, now you want dinosaurs that fly? Get ripped, actually. And just imagine what it would be like to witness them taking flight within a secured enclosure, of course. Now, I just need to find carpet. He seems to have flown the coup. Which these dinosaurs, sorry, reptiles, can never do, like ever. And you know that for a fact, right, John? A secured aviary, Dr. Malcombe. What goes in stays in. But, John, what exactly goes in? Chaos, Malcolm. Chaos goes in. Oh, this place looks so good at night and with the rain. I'm actually tempted now to, uh, to make this a little bit less watery. Just because I want, I want to see the, uh, the compass a little bit.  But I just want to get to, I just want to get a good look at them and I guess, oh no, no, no, no, no, almost. I guess the best way to get a look at them is to do this. Oh, there, there, there, there, there he is. Where'd he go? Oh, it's a vivid one. Hello? Where'd he go? There's a goat there, but I don't know. Oh, are they all talking? I want to see them socialize. Oh, look, yeah, look, that's the goat. It's got its own little pole and everything. It doesn't get chained up though, that's a shame. My God, yeah. Like, how on earth are you supposed to dart these? They're all sort of running, God, together. I know where they're going. Are you going to water? Nope, just running. Just, just running. You think a little dinosaur like that would want to save its, uh, its strength? But Jesus, they've got a steam on. So now we can actually build the Averary. And now what's the best place to boat? Okay, you can incubate and release pteranondons in an Avery. You can increase the number of pteranondons that can be supported by an Avery in the info panel. And look, look, pteradons breaking out. Storm damage Avery's risk releasing pteranondons into the wild. But it's only storm. The Avery research is complete. And you believe in the findings? As much as I believe in anything here, which is to say, uh, no. But the engineers are confident in the design.  So, you know, we've got that to fall back on. Okay, we'll get this Avery built, powered, and connected to the rest of the park. Then we'll be able to have one of Ellie's favorites, available for study and on display. We're doing it, Alan. All doing it. Doing what? Proofing Hammond Wright. Ah, you love it. Okay, so we got that. And then we also want a pteranodon sign. Yes, we'll have that on the other way. Boom. Now, you don't want to see the explorers, do you really? But I don't think, yeah, I can't really place trees. However, ah, maybe I can place these trees. I can. Kind of. Jesus, they are fussy. Is there any other ones? Like smaller ones I can place down? Nah.  Oh, that's always good. We've got 25 power, and this consumes 10. So here it comes. Dun, dun, dun, dun, dun, dun, dun, dun. And then they have to take down the scaffolding, I think. You see, it takes a long time to get this thing working. And boom, we have an Avery. I can't wait to see them fly. I hope our guests share your enthusiasm, my dear Dr. Sutley. Pteranodons. Alan, pteranodons. Can you believe it? How many times has that question been asked on this island? It's not how many times it's been asked, Dr. Grant, but how many times it's been answered. Today, Jurassic Park takes flight. Right, so now what we need to do. I wonder if, when the Avery's broken, if they, you can even place them. Right, okay, we've got two pteranodon places, that's good. So this is how the Avery works. Um, you can increase the number of slots, but the running cost goes up. Pteranodons weird, incubation failure rate. And that's a lot of statistics. Um, and you, you can have a, you can deactivate it. Huh, but I, and apart from it costing more, there's no real reason why you wouldn't have more pteranodons. So the Easter egg in this one, because there is a few, you've got, uh, let's see, where is it? The Jurassic Park three door. There it is. Okay, so I'm going to go into capture mode here. Um, just so you can see it a little bit better, because I don't know how close I can get. So yeah, this, it's exactly the same gate. Like that's the angle where the door goes, and it's the same door handle and everything. It's beautiful. Um, of course you've got the walkways there, that you can have a look at. They look gorgeous. There is some sort of smoke in there as well. And you can, of course, uh, have a look in. Show view. So these are the views that you'll be able to get. Alan Grant, if only you knew what was going to happen before you on Easeless Sauna when you accepted that check. I don't think you can go down there where the visitors are though. So you have, that's three, four, this is the fourth one where I was telling you where, um, you get to look inside and be inside the walkway. Uh, five, six, and that's where you have some Trondon's land. Seven, eight, by the water, nine, ten, where they release them. This is the camera on that you get. So you have ten different viewage, viewage, viewing points, uh, which is pretty decent. Obviously Frontier knew that people were going to complain about, you know, they're not being able to break out and that they will, it is a glorified fish tank. So they've given you loads of ways to see them. Why are some overtime on your part? But you knew the job was tough before you got here. Absolutely no idea. I kind of want to get a moment, momentiosaurus, just cause I want it.  Oh, we haven't even seen the Spinosaurus. Is he okay? Yeah, but he's actually really hungry. Uh, okay, come, can we get fish feeders? Oh, he needs to be a big fish feeder. Big fish feeder. There you go. I've never, I've never seen a Spinosaurus feed from a, Oh, look at that. Oh, it's gorgeous. I think he's just caught with of the fish. That's a lot of fish. Oh God, why is this tail down like it's dying? Oh, cause it is on 62%. Good Lord. Oh, look at that shot with the, hold on with the Avery behind. That's, that's Jurassic Park three. Look at that. That's a thumbnail. That's a thumbnail done. Oh wow. They look so cool.  Oh, look at that. It's sort of sensing the vibrations through it now. And then boom, gets a fish. That's two separate animations. I've never just watched this. I think we've ever just fed the Spinosaurus fish. I'd love to see him use his claws. Oh, that's so sweet. It looks awesome. I love it. I love that they went to the extent of doing a couple different animations. What kind of fish are these? They look like ginormous perch. Oh, not perch. Uh, roach, I think. Probably just some common, common carp looking things I suppose. I'm so, so doing this last minute. I'm here like rendering episode three, like, oh great. And what is this? Was it a stego? Where's the stego?  Although the stego I forgot to move them. Whoopsie daisies. Well, at least they'll be so preoccupied now. Unless, oh, it was a Brachiosaurus. Oh, but he got persuaded to get away from the fence by the, uh, the cars. So that's interesting. He'll be here. Why are they, why are they moving? Oh dear, but hopefully the full explorers can keep them at bay. Oh, we can't change this skin just yet? Oh, that's because we haven't unlocked the skins. Oh yeah, that's right. Stop it. Stop. You're not going to release the Spinosaurus, all right. This one more trees. Is that it? One more trees. There you go. That's much better now, eh? Yeah. That's quite nice actually. It gives, um, it gives the tour a little bit of a sheltered and kind of explorer feel to it. The mystery of the excursion. Okay, so how are the compies doing in the daylight? They're just running about. Oh no, they're starving. Okay, yeah, they can't. They can't eat a goat. Too close. I don't even see where the dinosaur is. What do you mean too close? There's a little flex. Look at this. There you go. Okay, right. Let's observe the feeder, shall we? Now we wait. Oh, first one comes in. Oh, there you go. Gets a little bit. Is he going to eat it? You can eat it. Yum, yum. Oh, is it all cutie? They should all be coming over here, because they should all be starving. I was just hoping that we need a goat, really. I guess I was wrong. Compies, you don't do anything, do you? How did John Hammond get killed by you? All right, well, apparently only one was hungry.  Here they come.  So they all have the same animation. They just do- Look, they're like in sync. Oh, look at their skin on them though. It looks awesome. Oh my God, yeah, they're all round here. Can they only access it from like four different angles? Oh. Who's your cutie? Yes, you are.  Deadly cutie. Pretty sure Dita would have something else to say about you. Okay, that should be the Trandon almost done. So let's go get that momentosaurus. We're getting the skins, guys. We're getting the skins. But I will also make a separate video on the Avery. All the skins and showcasing them breaking out. Because I don't think that's something that we can really guarantee is going to happen. I don't- I think we'd have to get some sort of tornado or something. We'll just fill up- We'll fill up like a whole map with Avery's. And then just put storms on high and see how often a tornado comes. We're not going to move the raptors out. Just keep them in there. I would say that's a very good idea. Come on, Alan. I want to hear all of the quotes that you can tell me. I'm going to get that DNA. There we go. Mr. Hammond wanted me to thank you for your exceptional effort with that last contract. And now I have. I feel like they're building something with Cabot Finch here. Are they going to say why, like, John Hammond died? Like, did Cabot Finch poison the wine or something? I'm getting those vibes from him now. There we go. Completed genome. So we'll go for a regular pteranodon. Then we'll go for an alpine pteranodon. Then we'll go for a rainforest pteranodon. Then we'll go for a jungle pteranodon. In fact, actually, I don't even need the success ratio on this. Sorry, what's that one? We've got a rainforest, alpine, jungle, wetland. Oh my god, there's so many. And coastal, that's all of them. Wow, okay. So you can't change anything else on the pteranodons. It's basically like, if you want a better rating on your pteranodon, give it another skin. So I think it'll be a little bit better. Yeah, 115. And that's about it. You want a better rating. It needs to be 100% genome and have a better skin. Or, like, anything that's not the null skin. Which is a shame because the null skin's really cool. I like it. Look at him. Say hello to the cars. Do you want one? Do you want one? Oh, I did it. I mean, we did it. I did it for myself, really. Oh, the bottom pteranodons are going to overtake the top ones. Because they've got the mod on for an extra 10% speed, I think. Are they? Is pteranodon number four going to overtake it? Is it going to have a pressure bet? Oh, he was close. He was close. Okay, let's release the null genome. Which should look like the ones we've already seen. It's a shame that it's night and we can't really see them. Is it going to automatically swap to it? Yeah, there it is. Oh, yes. Gorgeous. Okay, so this one is the alpine. Yeah, yeah. The animation's all right. It's not too crazy. The fact that they fly in spot for a second before flying out is a bit dodgy. Yeah, look at you.  Just that's the only difference it seems to be. Rain forest. So far, I'm still liking the original skin over any of the other ones. Right, this rain forest one seems to be the nod towards the lost world pteranodon. Yeah, I would say so. It's got like a little bit of aquamarine blue, but I would say that's probably going to be it. I don't know, yeah, we're not going to get a remodel. We're not going to get the lost world pteranodon. Or Jurassic World pteranodon. Oh, this looks like the Jurassic World pteranodon. Has it got red on it instead? That's going to say, can we get it by the light? A little bit. It does have red on it, just a tiny bit. I mean, what I'll do is once we've um, once we've released all of these and it becomes day, we'll have another look at them. And there'll just be another video on them separately, so we can get a little bit of good view of them. This is the one that looks like the tapijara. Nobody beaver. Tapijarasaurus. I love that, that was awesome. Yeah, that's more of a green one. The pattern seems to be the same. They just change like a little bit of the skin tone. We're not getting anything too crazy here. Ooh, the coaster looks to be more dark. Little bit of gold, it's like an Indoraptor tyrannosaur. It's a bird cage! We did it! We got the achievement! Awesome! Woopah! And there it is, mission six complete. That means, oh we got night vision now. Oh, and this is it, the final mission. At this point, we're just going to continue to add to the populations, dinosaurs and humans, increase the density and capacity of both. It's a miracle, two creatures from the same place, but different worlds. The dream, Dr. Malcolm. The dream! The dream of dinosaurs once again roaming the earth. Belief pays off. Ellie, the dinosaurs went extinct because they were supposed to. Survival of the fittest, nature's law. Oh, it's already unlocked.  This is John Hammond's world now. We're just surviving in it, marking time until we're not. We didn't suffer in vain, Ian. Something good and wonderful came out of this, living dinosaurs. Yeah, good, wonderful. The chaos is coming, Dr. Sadler, but I do admire your optimism. Ah, research available, T-Rex fossil access. I did have a look and I didn't seem to... Why is there a fence broken? What? I knew that pesky stegosaurus was selling them. Oh, dear. Oh, dear. Oh, he got kicked. He got absolutely kicked. Why don't we try Saratops's migrating over here? There's no food over here. Goddammit, okay, fine. I guess I could give you some food. There you go. And some water, why not? I have that too. Okay, guys. We're gonna wrap it up here. Join us for the final episode. Is it today or tomorrow? Anyway, in the final episode, we'll do a giveaway. The 10 copies of return to Jurassic Park. And of course, you get this campaign. You get the Jurassic Park sort of style to the game. And the Ford Explosions. You get loads of stuff with it, not just the campaign, the dinosaur skins as well, which are probably one of the main reasons to get it. Okay, I've got to admit, but if you enjoyed this video, leave a like. And until next time, I'll see you later. Oh, bye-bye.


The Latoral Combat Ship Junior Officer of the Deck course at Center for Surface Combat Systems, the Latoral Training Facility in San Diego, challenges students with a comprehensive course of instruction to develop the necessary skills to provide critical assistance during all ship handling and bridge evolutions. Junior officers and senior enlisted with limited ship handling experience undergo eight weeks of intensive classroom and simulation training to prepare them for the rigorous demands of the two-person watch team construct on Latoral Combat Ships. The extensive curriculum begins in the classroom where students are introduced to the concepts of ship handling, rules of the road, and bridge resource management that they will use later in the partial task trainer, blending both knowledge and hands-on experience. Following the classroom portion of the course, students immediately transition to hands-on simulator work, allowing them to apply the lessons they have learned and increase their ship handling experience. Try to cover just about any kind of situation that you would encounter as a JOD. We do unwreps, we do inbound, high speed, we do slow speed, lots of traffic, mellow traffic, tug work, lots of peer work. By the time they're done with the AVIX here, they're set up for success. The JOD course pretty much fulfills every single requirement you have with the exception of the captain being able to assess how you are proficient as a watch standard. So already having that eight weeks of training with a lot of attention from really seasoned instructors just allows JODs to kind of show up and be ready to walk into the shoes and fulfill that role. I was able to apply the knowledge I learned in JOD and it does help, it helps facts track you towards the O.D. because they're basically teaching you to be O.D. The course is JOD by name, but it's O.D. in training. Well the JOD course is critical in the development of our Officer of the Decks and our Surface Warfare officers. When we were deployed we had three ensigns, now Lieutenant JG's, who had recently come through the JOD school and they did remarkably well because we didn't have to teach them the fundamentals. JOD course really teaches them the radar operation, the navigation, just the fundamentals that we need to get them their JOD quality. For LCS most of the time you'll be operating with a two person bridge, which is really puts a lot of stress on the junior officer of the deck that without this training they're not really able to fill. So we can put that emphasis on how important navigation is, conflict management and basically that they kind of need to be the number two for that O.D. because there's no one else coming. You have to be the person on watch, totally ready to respond to any situation. The Latoral Combat Ship Junior Officer of the Decks course is a vital component of the LCS program to rapidly qualify its junior officers and senior enlisted to perform their critical responsibilities on the bridge during shipboard operations. Surface Warfare officer school will continue to spearhead this essential and highly advanced training to ensure all LCS junior officers of the Decks have the confidence and experience to support any underway evolution.


So in today's video, I've got nine work from home jobs that you can easily do from the comfort of your home. And the best thing is these are available right now. And the first one on the list is going to be a chatbot manager for ancestry.com. So ancestry.com, if you didn't know, does DNA testing and genealogical research.  And in some cases, whether they have certain medical conditions in their DNA. And chatbot managers that work for ancestry are kind of like DNA librarians. They help people look into their family history and uncover their roots. And this is a high-paying position because it requires a unique blend of technical skills, strategic thinking, and excellent communication skills. And you can do this all from the comfort of your home. Now, according to Glassdoor at this company, chatbot managers make about 62 to $100,000 a year. So some of the pros of this one are the opportunity to work for probably the biggest company in the DNA testing industry. So if that's something you're really interested in, this could be a great job to get your foot in the door. There's a lot of work from home options, not only for this position with other companies, but also with ancestry.com themselves. And you have access to advanced technology and resources. Some of the cons of this one are it does require effective communication skills. You do have to be very good at solving technical problems. And it is going to require continuous learning to stay up to date on the latest AI technology. But overall, I'm going to give this one an 8.5 out of 10 opportunity score. And by the way, with all of these on the list, I'm just giving the company as an example, you can look up this same position and there's going to be a ton of other companies that are hiring for it. And positions like chatbot manager are wide open for a lot of people because of the fact that chatbots just changed with the onset of AI. And so this is one of those skills and one of those careers we can get in without having that much experience. Now the next one on the list might be great for you if you love reading and writing, but you're also really good with technology. And that's going to be a digital specialist for Scribe Media. And Scribe Media is a company that specializes in helping authors bring their books to life. And as a digital specialist, you'll be assisting those authors in the process of writing and promoting their book in order to make it more successful. So you'll be kind of like a digital Sherpa that helps to guide authors through the treacherous mountains of the publishing industry. And one of the books they've helped publish, for instance, is Can't Hurt Me by David Goggins. Now the reason this is such a high paying skill is because you combine two very valuable skill sets. You're basically combining a writing skill set with a marketing skill set and specifically digital marketing and social media. And you'll notice that with a lot of the ones on this list, the reason that they're paid so well is because of the fact that they have two relatively rare skill sets. And with this company as a digital specialist, they'll start you off at about $75,000 a year. So some of the pros here are there's a lot of remote opportunities for this position as well as with the company. It can be very rewarding because you get to empower authors to write their book and get it out there. And you're going to get a lot of experience in the publishing industry. So if that's an industry you want to work in, this can be great for you. Some of the cons here are remote work does require a lot of self discipline. There can be tight deadlines and high pressure situations. And there's going to be limited in person interaction with colleagues which can be lonely. But overall, I'm going to give this one an opportunity score of 9 out of 10. The next one on the list might be great for you if you're a fan of well designed websites, but you also enjoy good copywriting. And that's going to be a UX writer for the company Sella. Now Sella is a company that helps other companies with consulting and staffing typically when it comes to creative or technological careers. And UX writing is where you create copy that helps users navigate a website. So basically you want to help to make the website really good looking and also very user friendly. But at the same time, you also want to make the website effective. And at the end of the day, what the company wants is the person to take an action. Whether that be to buy a product or sign up for their email list, that's what the company wants the website to do. That's the purpose of the website. And so as a UX writer, you might change the text that you find on different buttons, menu items, and notifications. And you might not know this, but just simply changing a text on a button can sometimes increase conversions by as much as 300%. So this one pays about $40 to $48 per hour, which translates to almost $100,000 a year. And the reason this is so high paying is because you have a good combination of some UX skill with some copywriting skill as well. So the pros here are you're going to have a lot of remote work opportunities, not just with this company, but also with other companies. You're going to have a lot of exciting projects with diverse clients in different industries.  Some of the cons here are you do have to have very good time management skills. Some projects may have tight deadlines and quick turnaround times, and you are going to have to go the extra mile when it comes to networking. But overall, I am going to give this one an opportunity score of seven out of 10. The next one on the list might be great for you.  And that's going to be a gameplay animator for counterplay games. And counterplay games is a very well known company in the video game industry that's worked on titles such as Ratchet and Clank, God of War, Horizon Zero Dawn, Diablo 3, Valorant, Gears 5, Guild Wars, Titanfall 2, Left 4 Dead, Halo 5, Battlefield 3, Bioshock Infinite, and many more. So these are very, very well known games and you've probably played some of them yourself. And as a gameplay animator, you're going to be helping to design and shape the characters with their movements, facial expressions, etc. And all from the comfort of your home. And actually this position is fully remote so you can work anywhere in the world as long as you have an internet connection. And you'll get paid 100 to $150,000 a year. And on top of that, they have great benefits. So some of the pros here are the opportunity to work on some of the biggest games in the world. You have the creative freedom to create something that's truly unique. And just as a side note, I think that video games are one of the best mediums for storytelling. And I honestly think they're just getting started when it comes to making some of the best video games of all time. And also another pro is you're going to have a collaborative and supportive work environment. Some of the cons here are the video game industry can be highly competitive. You also have to have continuous skill development to stay up to date with the latest industry standards. And you can have very tight production schedules. And because of how competitive this one is, overall, I'm going to give it an opportunity score of seven out of 10. The next one on the list might be great for you if you're a master wordsmith that can turn a boring manual into a page turning thriller. And that's going to be a technical writer for GSK Solutions. And GSK Solutions is an IT company that consults with other companies in order to solve all of their information technology related needs. And as a technical writer, you'll be distilling complex information into clear documentation. And there are many different industries and companies that technical writers can work for. There's lots of opportunity in the technology industry as well as the health industry. And according to indeed technical writers at this company make about $55 to $60 an hour. And according to Glassdoor, they make $113,000 a year. So some of the pros of this one are lots of opportunity for remote jobs, a chance to work on diverse projects, as well as different types of technology, as well as competitive pay and potential for career growth. Some of the cons of this one are it can be very monotonous. Remote work definitely requires a lot of discipline in this situation. And complex technical communication can be somewhat difficult over the internet. But overall, I am going to give this one an opportunity score of nine out of 10. The next one on the list might be great for you if you have great technical skills mixed with a customer support background. And that's going to be a customer support engineer and the company that you can work for is files.com and files.com is all about helping other businesses handle the transfer and security of files and customer support engineer is all about handling the technical side of customer support. So if there's a bug in a product, for instance, you might be the one responsible for looking into what is causing that and fixing it. And at this company, you start off at $100,000 a year plus you have great benefits and even a chance of getting equity in the company itself. So some of the pros of this one are you can support clients from anywhere with an internet connection. So it's fully remote. You have exposure to cutting edge technology in the file management industry. And there is a lot of opportunity for professional growth and learning. Some of the cons of this one are you do have to have excellent communication skills. You also have to have very strong problem solving and analytical skills. And you might be responsible for managing multiple customer inquiries at the same time. So overall, this one is going to get an opportunity score of 8.5 out of 10. For the next one picture a company that puts the aw in awesome, the zing and amazing and the copy in copywriting. And this position is going to be a copywriter for amaze.co. And amaze.co is dedicated to helping other companies design no code amazing landing pages for their products. And as a copywriter for this company, you would be responsible for creating compelling words that captivate audiences to take action. And at this company, copywriters make about $59 to $90,000 a year. Now I will just say as a side note, the top copywriters in the entire world typically do work and either their own businesses or as freelancers. And they can literally make hundreds of thousands, if not millions of dollars a year. So this can be a great opportunity for you to get your skills up when it comes to copywriting.  So some of the pros of this one are you do have that remote work flexibility. You do have an opportunity to work on a variety of different projects in many different industries. And you get to sharpen your skills and expand your portfolio. Some of the cons of this one are the need to constantly produce high quality content. The challenges of staying creative, but also effective. And you may have to deal with what's known as writer's block. And if you're a writer, you know exactly what that is. It's basically where you have trouble writing for whatever reason, your brain just stops working. But overall, I'm going to give this one an opportunity score of 7.5 out of 10. The next one on the list is going to be a career I've mentioned many times on this channel. And it's honestly one of the best careers you can get into. And I know I feel like I'm beating a dead horse, but that's going to be software engineer. And one of the thousands of companies you could work for is CrowdStrike.com. And CrowdStrike is a cyber security company that's on a mission to stop breaches. And at this company, you're going to be kind of like an architect, except instead of building normal fortresses, you're going to be building digital ones that help to safeguard against cybersecurity threats. Now this company had great reviews online, really good benefits and the pay is amazing as well. According to Glass Door, as a software engineer, you get paid about $164,000 a year. So some of the pros of this one are you get the opportunity to work on cutting edge cybersecurity technology. You can work from anywhere in the world because it's fully remote and it has a very competitive compensation and benefits package. Some of the cons of this one are it can be a fast paced and constantly evolving environment.  But overall, I'm going to give this one an opportunity score of nine out of 10. The next one on the list might be great for you if you want to work for one of the biggest social media companies in the world and one of my personal favorite websites, which is Reddit.com. And specifically, you're going to be a product manager. Now I think everybody knows what Reddit is. It's basically a website that has like hundreds of thousands of different little forums and micro forums and a product manager is almost like an entrepreneur with training wheels. A company will come out with some new product and they'll put somebody in charge of it and you'll be responsible for the success of that product all the way from the technological side of things as well as the marketing and financing. And you're kind of like a chef that selects the perfect ingredients and then puts them together in just the right way to make the perfect cake. Except instead of ingredients, you'll be working with engineers, marketers, and accountants. Now Reddit has really good reviews from former employees that worked with them. And on top of that, you will make a mind boggling $183,000 to $275,000 a year in this position. And on top of that, it has really good benefits. So some of the pros of this one are you are going to work in an engaging and dynamic environment. You're also going to be working with cutting edge social media technology and you'll get an exposure to a wide range of different topics and communities. Some of the cons of this one are you do have to have quite a bit of previous experience. So a lot of the time people who end up becoming product managers come from a marketing or data analytics background. As a product manager, you also have a lot of responsibility and you're probably also going to be working very long hours. So overall, I'm going to give this one a 7.5 out of 10 opportunity score. Now, by the way, one job that's really good for getting into a lot of the ones on this list that's an entry level job that you do not need a college degree or previous experience to get into is digital marketing. And my friend, Seth has helped a ton of people get into digital marketing. I've done interviews with a lot of them on this channel and I'll go ahead and put his free masterclass down in the description as well as the pinned comment below. You can check it out if you'd like. And also, if you want to check out 13 remote jobs that are always hiring that are much easier to get into than most of the ones on this list, you can go ahead and click right here.


Hello. Welcome. This is Get Driven Refactoring. My name is Ashley Alice Pierce. I am an application engineer at GitHub and I'm on the billing and payments team. You can find me on Twitter at ALS Pierce if you'd like to continue this conversation afterward. So as I mentioned, this talk is going to be about Get Driven Refactoring. But first, we should talk about what refactoring is for anyone not familiar. Refactoring is changing the structure of code without modifying its behavior. It's cleaning up your mess. And of course, for this to be the case, this implies that there is indeed a mess to clean up. And we've all been there. I don't know anyone whose code base is always perfect, despite the best of their intentions. We humans are imperfect. And unlike computers, we don't always do what we're told. And so even though we know better, we make mistakes. But the good news is that once we know what mistake we've made, we can find out exactly how to fix it. Knowing where we went wrong leads us to where we need to be. How? Well, luckily, we're not the first ones to ever write software. It's been done before. And smarter people than me have gone ahead and identified common places that we often go wrong. And they've put names to those common problems. And every common design problem has a specific refactoring technique to address that problem. Once you know what problem you have, you can easily do a search and find the recommended refactor. Now, for that reason, this talk is not going to focus specifically on how to correct your code, but more about that very first step of identifying exactly what problem it is that we have. For a great talk about how you can use design principle violations to find out exactly how to fix them, I recommend Sandy Metz's Get A Whiff of This. This talk goes in detail about matching up code smells with their prescribed refactoring to fix them. But again, here I'm focusing on the first step, how to find the design problem to begin with. And so that brings us to the solid principles. The solid principles are five design principles for object oriented development laid out by Robert Martin and intended to make software more flexible and maintainable. So let's just run through what these principles are. The first is the single responsibility principle. A class should have only one reason to change. The next one is the open close principle. A class should be open for extension, but closed for modification. Then comes the list of substitution principle. Every subclass or derived class should be substitutable for their base or parent class. And then the interface aggregation principle. No client should be forced to depend on methods it does not use. And then the last one is the dependency inversion principle. Entities must depend on abstractions, not concretions. If you follow these principles, your code will be easier to understand and easier to change. Instead of being this tangled mass for one-changed cascades and causes a change everywhere else, your code will be flexible. It will mold easily around new requirements. It will be maintainable and allow you to adapt it however you need to meet the changing needs of the business. So I told you what solid is, what each of the principles are, and why you should follow it. And I told you earlier that once you can identify what the problem is, there are already curative refactorings out there that you can just follow and apply. So that's it. Done. Easy, right? Well, maybe not quite. I said before that identifying our mistakes leads us to fixing it. But just because you heard these rules doesn't mean you understand them completely and can always identify when you're in violation of them. I bet you're a guess that there are some of you in this audience that have heard these design rules before and yet still you're here. Probably because you've had trouble recognizing these patterns in real life. So that's what we're here to talk about today because I've had that same problem. Some of the examples in this talk are going to be using Git on the command line and some will be with PRs on GitHub. These are, of course, two separate tools, but I often use them together in conjunction to help me achieve my refactoring goals. But these tools aren't usually thought of as the first thing one would look at to help you refactor. So you're probably wondering how or why I used them. As I mentioned in the beginning, I work at GitHub now and since this talk focused a lot on GitHub, many people will assume that I formed this talk as a result of working there. But I didn't. The beginnings of this talk started to form for me while working at Thoughtbot. Thoughtbot is a software consultancy and they're well known for their ability to help companies write clean code. They have whole courses on refactoring that they teach and this is one of the primary things that companies come to Thoughtbot for. So I started at Thoughtbot as an apprentice and I was in general very green. I had only worked at one company previously for about a year and so although I had done all my homework, I wrote a ton of books on refactoring and clean code except from Sandy Metz and Martin Fowler and all these big names, I didn't have a lot of experience putting that theory into practice. I was writing code that I thought was clean and that didn't seem to me to obviously be violating any one of the many object oriented design rules that I had memorized and yet other developers there were much more able to recognize in the code patterns that I just didn't see at all. I'd submit my own code and think it looked great or I'd review others and say awesome, great. And then later down the road, it's still grown to this mess. And eventually what I came to realize was that by only looking at the actual lines of code in my editor, I was doing myself a disservice because you can't recognize design patterns in isolation. You need context. Otherwise, it's like you've been studying for a multiple choice quiz, but suddenly there's essay questions. We need to know not just what the rules are, but the context that will be expected to know them in. And for me, because Git is where all of my code lives, Git is that context. So instead of looking for possible design variations or areas that might need refactoring by looking at the code directly, I turned to Git and started looking for stupid simple ways that Git might tell me when a class was in need of refactoring. So that's why all the tips that I gave you today are not going to be some new crazy Git or GitHub feature that you've never seen before. It's about saying the things that we work with every day, like the Git log, PRs and comments differently and viewing them through a lens that will help you on your goal towards refactoring and writing cleaner code. So let's get back to the solid principles and see if we can use clues in Git to make these principles make a little more sense. I'll explain each of the principles briefly as we go through, but I want to be clear that the goal of this talk is not necessarily to be an exhaustive exploration of solid. My goal here is to simply use solid to exemplify how we might use Git in general to find design principle violations and refactoring opportunities. Hopefully, this will get you thinking about how you can use Git as a lens to view whatever software design principles are important to you. So as I mentioned before, the first solid principle is a single responsibility principle, which again means that a class should have only one reason to change. When I hear this, I'm like, wait, I'm confused. I don't know about you, but my classes change for lots of reasons. Maybe there's a new feature to add or I want to improve some bit of code. But when I was really trying to figure this out and see which of my classes, if any, might violate this principle, I said, okay, I have to take a step back and really think about it. Why has my class changed recently? Because ideally, you never would have written any code that violated the single responsibility principle. But if you're like me, you probably thought everything was going great when you wrote it, but down the line, something starts to feel off. And you can't really pinpoint what it is, but your code gets harder to change and you start looking for ways to refactor. And this question is a great place to start. You have to really know the history of your classes to know what might have gone wrong with them. And luckily for us, there's a place specifically suited for that. The Git log for that class. This is where I start when I really want to understand if a class I have might be violating some design rule. And it's the perfect way to see if your class has violated the single responsibility principle. This is the commit history for my engine class of my Tesla Motors company. And here's the code. You don't have to squint and try to read it. But with a cursory look, it seems pretty reasonable to me. Lots of small, well-named methods that do one thing. An engine start method that takes a true or false as to whether we're starting the engine remotely through some sort of app or the fob. A delay start so you can set the time that you want to start your engine, like in the morning at 9am during the winters that it's all warmed up by the time you get in. An idle method that decreases the power output of the engine. An ill-assist that increases the power output when we're going up hills. And then we just define some devices that are allowed to start the engine remotely. Seems reasonable. But this class has been seeming a little off to me. I feel like it needs a refactor, but I can't really pinpoint what's wrong with it. But I know just looking at the code, I sometimes miss things. So I'm going to take another look at the commit history for the class. It seems like there have been a lot of reasons this class changed, mainly adding some new functionality. But I'm going to try to take a step back and see if I notice any patterns. And indeed as I look at this, something does begin to jump out at me. I have a lot of changes in this that are related to the remote start functionality. But then of course, some that don't seem to be related to that at all. And really, the more I look at this, the more I realize, you can group the commits into two logical groups. We have commits that are related to the power output of the engine, like increasing the power adjusting its frequency and adding hill assist and idle functionality. And then of course, we have all the remote start functionality. So initially, when I looked at this, I thought there are a bunch of reasons the class had changed and that identifying one was impossible. But really, when you lump these changers into larger categories, you can see that the class has two reasons for change. A change in the power output and a change in the remote start functionality. And suddenly the way forward towards your factoring seems much easier. Just by using the Git log to understand what was really changing about my classes. Now I know that I probably need to make remote start its own class. Having this as a separate class will make the code easier to change and keep these responsibilities separate. So now I don't have to worry about every little change to remote start affecting how the power output is determined by the engine. Now obviously, for this to work, you need to be writing commit messages of a certain type. You need good commit messages that serve documentation of the important things that change in your code and why. If you have a bunch of web commits or commits for trivial things like adding white space, that is not helpful. Because things like add white space add nothing to the overall story of your code. That's documentation about what changes you were going through in your process as you were writing the code. Not documentation about what changes the code was going through. You can write commits like this as you're working, but before you go to merge that in, you need to rebase or squash merge your commits to have good commit messages. Embrace the full power of Git to help you refactor your code by using a way that makes that easy. Help Git help you. I've heard the arguments of some people that don't particularly care about having nice commits, and a lot of them say they use PRs more as their code documentation, but there's no easy way to see all the PRs that touch one class. With your PRs, you can't get quick context locally on your machine or in your editor like you can with the Git log. In my opinion, that's reason enough for me to use commit messages that are clear and concise until the overall story of my work. The next solid principle is the open-close principle. A class should be open for extension, but closed for modification. This is one of those principles that sounds really simple, but was actually really confusing to me, because I didn't understand how you could extend something without modifying it. It's like saying you should be able to change this thing without actually changing it. So I didn't really get it. I read so many books and blog posts and articles on this, and I really felt like I understood the concept in theory, but I feel life of me could not figure out how to put it into practice. I never once looked at a class and said, you know what? This is not closed for modification. I would review my co-workers PRs and try to guess whether this class would ever need to change in the future and if that change would be easy to make, but I just didn't fully grasp the principle enough. So let's take a look at some example code and some example PRs on GitHub to see if we can make some sense out of this concept. You don't have to try and read all this code, but this is a class that checks for engine health, and so mainly it's concerned if there are any electrical shorts in the engine. So this PR gets submitted by one of my teammates, and it's my job to review it. So I'm like, ship it, it's great. And then the next requirement comes in, and it's a new feature request. They want to add something to the check engine class. They also want the engine to check that all the spark plugs are connected. So someone submits a PR and it looks like this, and then another feature request comes in, more change, they want to check something else, they want to check the alternator, so my co-worker adds their next feature and the PR looks like this. And without even having to read the tiny, tiny code, we can notice something about this PR and the last one. What do we see here in the diff? This thing has more red and green than a Christmas tree. We're adding a feature and all the new lines are in green, and yet we also seem to be changing or removing a lot of code as well, as indicated by the red lines here in the diff. The phrase, your class should be open for extension, but closed for modification, really just means that you shouldn't have to change existing code to add new functionality, which to put in the context of GitHub and what you're actually seeing in your PRs means, when adding features, there should be no red in the diffs. If every time you're adding functionality, you need to change existing code in your violation of the open-close principle. Learning this was a mind-blown moment for me. It's so simple. Learning to look for this one indicator in my get diffs instantly made this principle makes so much more sense. I couldn't believe that I had been struggling and struggling to identify this theory in practice, and the answer was color-coded in front of me the whole time. If every time you need to add a feature to a class, you see red in the diff, you know you may be in violation of the open-close principle. So if you have a class that doesn't quite feel right, look back at all the PRs that have touched that class and were only meant to add functionality. If you're seeing a bunch of red, then this is likely your problem. In fixing this problem, making your class truly open for extension but closed for modification will make it so much easier to maintain in the future. All that red in the diff indicated extra work that someone was having to do to shoehorn the new feature in and make it fit. Now that we've recognized that the problem is an open-close violation, you have the opportunity to fix that class and make sure no one is having to do all that extra work again in the future. Now in the last section, we talked about how for this to work you need to have solid commit messages, and this one comes with a bit of caveat as well. Consistent style matters. For this to work, you have to have a solid style in place. I used to think that having a set style guide was stupid and that it didn't really matter, but then when I started to realize how powerful the tool get can be for recognizing opportunities to refactor, then style became much more important to me. If in addition to adding a feature, you're changing around the syntax from symbols to strings or rearranging the method order to be alphabetical, changing the hash syntax or any of the other silly things developers fight about and feel very strongly about, then you're muddying up your diffs and you make it really hard just in general to review your code, but it also then makes easy and simple tricks like this useless. You've taken all the ease out.  Programmers are lazy, keep things easy, keep your style consistent. The next principle is the Liskov substitution principle. Every subclass or derived class should be substitutable for their base or parent class. Set another way, this is you should be able to call the same method on a subclass as you could on a parent and get a compatible result. If the superclass returns a string, the subclass should also be able to handle that method and return a string. Now, there are a lot of languages where this wouldn't really be a problem and the language itself will use some checking of this for you, but I program in Ruby and Ruby has no such guarantees. So, despite all of our best intentions, I or someone else in my team might end up writing something like this. Here we have a vehicle class with the turn on lights method. In its car subclass, we actually don't want to turn on all the lights, just the headlights when this method is called. And for a bike, we don't have any lights unfortunately, so we raise a not implemented error. And this is of course an LSP violation, because you can't call turn on lights on bike and get a compatible result to what you would get on vehicle. But you know, people forget and try as hard as we might, we're not perfect all the time. So I think this is great and I push this code up to GitHub and open a PR. And my code will of course be reviewed by a teammate, but my reviewer is also not perfect. So I don't want to rely on them to always have to catch things like this. But thanks to the Magic of GitHub webbooks, I don't have to. When I open the PR, I could get this. An automatic comment from our stylebot that this might be an LSP violation. These automatic checks are a fantastic way of ensuring that your code stays clean. You can write your own stylebot like this to check for whatever design principles you want. Provided there's something easily identifiable in the code that Kong and not implemented on a subclass. Plus there are linters I count from Thoughtbot that I'll check for more general styleguide violations and every day more powerful tools are coming out to analyze your code. So if you've never thought about writing custom webbooks, I really encourage it. Internal to GitHub, we even have things like this to check for certain changes in the database files to warn us away from making those kind of changes or letting us know that we may need to get the database team involved. Possibilities are endless and this can be a great tool for refactoring. Issa and respond to are also some things that you could check for with this. Obviously there are places where these things might be called where they're not specifically an LSP violation, but they're usually a code smell, especially in a duck type language like Ruby where the class of a thing shouldn't matter. Calling attention to these things through the use of a bot makes the person who submitted the pull request stop and reconsider their code. Is this not implemented or really necessary? Is there a better way than having to check the class of the object? They probably knew when they wrote the code that it didn't feel quite right, but it may have seemed like the only way at the time. Having a bot publicly call attention to this thing that you did that already felt kind of vicky is usually pretty powerful motivation to take a second look at it. And for reviewers, this also gets them thinking about it as well. Maybe they normally would have skipped over or not noticed it in their review, but now suddenly they're also thinking about different ways you can design the code to avoid this. And they can chime in with suggestions to help you fix it. Don't rely on your human reviewers to always spot things like this off the bat because even if they see it, they might not want to mention it in a comment because they assume the best of you and they assume you probably really needed it. The bot makes no such assumptions and it will force you to rethink. Wherever possible, let your bots do the nagging. They can see things a lot more clearly than we can. After all, when you write a bot like this, you're writing it with the sole focus of helping you improve your code when you're much more focused on that task than you normally are. As much as we'd all like to say that we're always focused on code quality and improving our code, we've all got a million things on our mind day to day in our jobs. Sometimes it's hard to see every aspect of a pull request that you're reviewing clearly. Automate away the things that can be automated. Avoiding LSP violations like this makes your code able to adapt and grow much more easily. The next principle is the interface segregation principle. No client should be forced to depend on methods it does not use. The classic examples of this are in type languages like Java, where you have actual interfaces that define some sort of behavior. So let's switch to Java to see an example. Let's take, for example, the aircraft interface. This says that anything that implements the aircraft interface, anything that wants to be an aircraft, must implement these methods. Take off and retract landing gear. Here we have an air traffic control class and it takes anything that implements the aircraft interface that we saw earlier and it tells the aircraft to take off. Well, what if we have a helicopter as a type of aircraft that implements this interface? It should still be able to interact with air traffic control because it still needs to take off, but it doesn't need to retract its landing gear. So this is an interface segregation violation. Air traffic control depends on everything that it interacts with having a retract landing gear method, even though it does not use it because the aircraft interface defines it. Another way that this principle is often explained is by saying that many small client specific interfaces are better than one large general purpose interface. Instead of having one huge aircraft interface that does lots of things, as we saw, it's better to have a small interface that only does the things that air traffic control needs. So I said the typical examples in Java, but can you see ISP violations in non-type languages like Ruby? Let's take another look at the air traffic control class, this time in Ruby. This time when you initialize the class, you pass in all of the aircrafts that we'll be dealing with and we have a method called today's aircrafts that finds the flights that are supposed to go out today by checking where the flight date is today. In Rails, this where method is an active record method, meaning our list of aircrafts here must be an active record relation, a list of active record objects straight from our database. So even though you don't see it clearly defined here, air traffic control really relies on the active record interface. If we were to pretend that Ruby is typed and do a little like Ruby Java bastardization, it would look like this. With an explicit requirement, the aircrafts implement the active record interface, which is really not that different from the air traffic control class in Java that we saw was in ISP violation. What if you wanted to pass an aircraft from a CSV instead of an active record relation of aircrafts from your database? You wouldn't be able to because there's an assumption that the aircrafts are an active record relation. Of course, you could take advantage of Ruby's duct typing and just define a WARE method on CSV aircrafts. If we define WARE on our CSV aircraft, it's no big deal that in the beginning we assumed aircraft was going to be an active record relation. But the point is that that assumption can get out of hand really quickly. First, you're calling aircrafts.WARE outside of the aircrafts class, then aircrafts.FIND, then aircrafts.Order, aircrafts.Having, and then aircrafts.Group. And before you know it, you basically need to reimplement all of active record on your CSV aircrafts class to be able to use it with air traffic control. Because you wrote the air traffic control class, assuming that aircrafts would always adhere to the active record interface. And this is, of course, not saying you shouldn't use active record within the aircrafts class. Calling active record methods inside of the aircrafts class is completely fine and actually what you want. A model that's backed by active record can, of course, use active record methods. But just don't let that leak all over the rest of your application into completely unrelated models like air traffic control. Air traffic control should not have to know that aircrafts is an active record backed model. So you can violate ISP and Ruby. Or at least you can violate the spirit of ISP and Ruby by relying on huge general-purpose interfaces like active record instead of small client-specific interfaces like those methods that you've defined on your model. Because whether we're in Java or Ruby, the statement that small client-specific interfaces are better than one large general-purpose interface still remains true. All of that being said, whether you're using a type language like Java or a dynamic language like Ruby, using a large general-purpose interface isn't always a huge deal. Or at least lots of times it's likely not the biggest issue with your code. It's about balance. You don't want to rely on lots of huge interfaces or have tons of useless tiny interfaces. You want to be able to take advantage of Ruby's duck typing and implement your own version of one small method but not re-implement all of active record on a non-active record model. So do you get to help you find that balance? I would use the Git log again here to see if or how big of a problem I have. Instead of just using it to identify different things that were changing in a class like we did for the single responsibility principle, we're going to use it here to see how often our class is changing. And when change happens, how often is it related to some sort of ISP violation? If you have a class like this, where you're constantly adding additional methods trying to imitate some other interface, then you probably have an ISP violation. The last solid principle is the dependency inversion principle. Entities must depend on abstractions, not concretions. Here we have a car class with a play radio method. And inside that method we're calling fmradio.play. This makes fmradio a dependency of the car class. This class relies on fmradio's continued existence and you can't easily make cars with different types of radios. To be in line with the dependency inversion principle, we want to decouple this code. So to do that, we can practice the concept called dependency injection, where instead of calling fmradio deep in the internals of our car class, we inject it as a dependency right when we initialize the class. This is another case where you could benefit from an automatic style bot on GitHub to help call attention to this type of code when it gets added. Again, instead of depending on yourself or your human co-workers to tell you you did something wrong, use a bot. It's much more reliable and consistent and it won't allow you to skip buying code review without having to rethink your code. And at least try to reply here, explaining to the bot and your co-workers why you think this isn't a violation of the dependency inversion principle or why it's a worthwhile sacrifice to make here. And if you're just starting on your refactoring journey and you already have a lot of places in your code where you're coupling your classes to dependency, use history and blame to find out how often these classes or methods are having to change. So you can prioritize and make sure you're addressing your worst defenders first.  Make your code more flexible and maintainable because you can now have cars that are equipped with all different types of radios. As long as they respond to play, you're good to go. Car is now less specific and a lot more reusable. So let's recap. How can Git help you refactor? You can use the Git log to group commits into topics and recognize when a class is doing more than one thing. You can keep an eye out for red and the diff when you're adding functionality. This can indicate a violation of the open-close principle. You can integrate tools like automatic style liners with your GitHub account to make code cleaner and easier to recognize problems. You can use the Git log and Git blame to find out how often classes or methods have had to change. This tells you where your worst defenders are most in need of refactor. By following all these tips, Git can help you refactor and achieve solid code. Your code will be more flexible and maintainable and adapt to change easier. Hopefully, for all of you here who are already familiar with the solid principles but had trouble applying them, these tips will help you recognize through Git how to find various solid violations and have shown you in the context of the work that you do every day what those violations look like. Thank you.


I'm on. Hello everyone. I'm going to talk about Federation of OpenStack Clouds today. So before getting into the topic about myself, I'm a solution architect working at Cloud Enablers. My responsibility is mainly working on the cloud related products and programs in the organization. Now briefly talking about what we are going to discuss today. We will talk about Federation a bit. What is Federation and different approaches towards Federation. And next we will talk about there are certain projects that is going on certain projects and programs in OpenStack that actually is enabling Federation. How we can achieve a true Federation through various projects in OpenStack itself. And third we will talk about different use cases, basically the application of Federation in the real world, certain organizations or the companies they have implemented Federation. And third definitely I will be open to any kind of questions that you might have. So talking about Federation, different people have different versions or definitions of Federation but I tried to put it in a one liner. So Federation is basically a concept of bringing different providers, service providers across different platforms and the services provided by them for the end users consumption. So from the diagram it is obvious that Federation is bringing different cloud service providers together. Now what exactly Federation means to a provider. When you talk about provider definitely the main factor or main thing is for provider it can help in scaling up. What it means is capacity augmentation. In this dynamic world if there is a need for capacity definitely in a federated world a provider can add additional capacity with no time if a provider is under Federation. Second there is another way of looking at it if there is let's say capacity utilization in terms of optimum capacity utilization. Let's say a provider who is actually not having I mean utilizing its capacity, it doesn't have the customers but at the same region there is another provider who actually needs more capacity. So the capacity can be additional capacity can be given to the other provider by which actually it will be a optimum capacity utilization by both the providers or multiple providers. Then second interoperability. So today I think we have come to a stage where it is not only single resource consumption in cloud terms. I mean we are now talking about from resources to workloads. So it is a combination of resources in terms of forming a workload. So in that case the customers they are looking at different resources from different providers and combining them together as a workload and actually working on it. So that means we need to have interoperability provided to the end customer. Second what customer needs is a choice of services or catalog of services. He is not actually looking at only one provider having 10 different offerings. He is actually trying to do a lot of mix and match of services. He wants to explore different things, discover new offerings. It is not only need based but a lot of things are also getting discovered in due course of time by different providers. Now insight about providers and now how do we choose providers. Definitely we need to have some insight where we can select which provider is best suitable for me. These are couple of points towards federation. Now we will talk about the driving factors. I think we touched upon some of these points in the previous slides. Choice of providers. I mean we talked about it. Choice of providers definitely. How do I choose my providers? We cannot have let us say 5 or 10 providers listed and just simply you select this. I want this provider but because of what? What are the attributes of a provider we should look at? Is it the response SLA? It is the resolution SLA? It is the performance, the uptime or the SLA? I mean what is that or the location? What is the reliability of the provider? So there are various driving factors based on which customer actually is deciding today which provider he should go for. He should deploy his workload in. Mix and match of services. Definitely one provider is very good at SaaS. One provider is very good at something else. Maybe the compute someone is providing a best performing queuing services. So today the customer is looking at mixing and matching all those services provided by different providers and actually deploying its workload. Going local. So going local actually has two aspects. If you see why someone would look for localization. So definitely there are two factors today which drives going local. One is definitely the term we call data gravity. Data gravity means where the data resides. So if you take an example today there are a lot of e-commerce platforms evolving every day. So what does it mean is the e-commerce providers they want to be closer to their customers. If you see take an example of India or APEC region there are so many e-commerce providers. So they want to serve their customers from somewhere in India or APEC region at least in Asia. They are not comfortable in serving their customers from somewhere let's say a data center in US. Next is the user data gravity. Data gravity is something which again is related to this and I actually talked about data gravity. I will talk about user gravity. So these are the two factors which are actually deciding where the workloads should be. Where actually I should deploy my workloads. Now heterogeneity of platforms. Now this is something which is being talked about a lot whether it is open stack, cloud stack or any other cloud management platform or any other virtualization layer. Now customer would like to experiment and see which is best suitable for his workloads or his needs. So that is where heterogeneity of platform is one of the major driving factors which will actually enable true federation. Ability to scale. We talked about it so definitely in dynamic environment as of today we do not know what are our capacity needs. We can forecast only for a quarter or two but one year down the line how will be the demand for my workload or the resources I actually the customer is not able to predict today and that is why but whenever that happens they want to do it immediately. They should be able to add additional capacity without wasting much of time. Movement of migration of workloads. When we are providing choice of providers mix and match of services what it means is if a customer is not happy with one service provider how quickly is he getting logged in with one vendor or one service provider or he actually can migrate his workloads from one provider to another. If at all he do not actually he is not happy with one provider how easy or difficult it is to move his workload from one provider to another. So these are basically the driving factors which are actually going to accelerate federation. Now different approaches towards federation. The first approach what we are talking here is the so-called hybrid cloud approach. So if you we talk from a service provider's point of view suddenly he started with one data center in one region but slowly he is expanding its footprint across the globe and augmenting newer data centers. So what it means is definitely when something some resources has to be provisioned it cannot be that I should go to each and every cloud platform dashboard and I should provision the resources. So there is some kind of self-service portal which is actually targeted towards provisioning and the consolidated uses and metering aspect. So that is why this model came in. I mean this is I think there for the last couple of years. Similarly looking at the from the enterprise's perspective if we look at it they first tried to do something in-house or tried experimenting with the public cloud slowly either migrated into the hosted private cloud or on-premise private cloud or it is vice versa. From a private cloud they are going to public cloud. So this is one of the approach which actually is bringing federation but we cannot say this is a true federation in a sense. We will definitely come to the debate why this might not be the true federation. The second model if we see and maybe in the last three to four quarters we see a lot of traction gaining in the second type of federation which is marketplace based federation model where a user comes to a common marketplace where all the providers different providers are actually having real estate in terms of the different service offerings. So users come to marketplace, search, select, compare various services offered by different providers using different attributes. I mean as we discussed it can be SLA, it can be cost, it can be location, it can be geo, it can be anything. So when user comes and he selects again here he is mixing and matching the services. He selects one compute or the IS from one provider, a queue from another provider, a load balancer from some other provider. Now that is combined and packaged together and the cloud federation engine actually takes care of deploying the different or provisioning different resources across providers through this federation engine. So here if you see the federation engine and the cloud marketplace they are not related to any provider. So they are basically the provider and platform agnostic. So as and when the market is growing I think lot many cloud providers will come to this marketplace, join the marketplace. So user definitely, user gets all the benefits in terms of comparing different resources. He gets the best of available resources according to his need. Now but it is not only ending with the end user itself. Now this also provides an avenue for providers as well. Maybe it looks like providers are getting abstracted but actually that is not true. See once a provider comes to marketplace he gets to see like what other providers are offering in terms of the cost, in terms of performance. So this will actually give rise to a healthy competition among providers and definitely in that bargain what is going to happen at the end is this will also lead to lot of innovation. In terms of how can I optimize my cost? How can I provide the lowest compute or cheapest compute or resource, a cloud resource to my end user. So this will definitely give rise to lot of innovation. So that is where the benefits lies for the provider and of course they will get a 360 degree view of what others providers are offering in what cost. He should be able to compare himself with other providers in terms of what he needs to do or he is ahead in the market. So it actually this way I mean this is one of the model I mean we have seen the delts and IBMs of the world. So I think coming up with this marketplace based federation model in the last year and year half. So now I will actually talk about okay these are the two types of federation. What are the different projects available or going on any projects ongoing projects in OpenStack which is actually enabling this kind of federation. So definitely when we talk about federation first is when I have multiple providers how do I get into no two or three different providers? Do I need to have no individual identity or it is the same identity I can use? Definitely when it comes to the enterprises or end user they cannot have no identities across different for different providers they cannot maintain the credentials separately and an enterprise having different different users it again becomes even more complex. And that is where in the Ice House release OpenStack actually enabled identity federation through federated identity using Keystone. So I think all of us know about this. So now Keystone actually is acting as a service provider. So let us say any enterprise having its own corporate AD or LDAP or any other identity provider. So they need not to have their footprints in terms of credentials stored in Keystone. So Keystone would be able to take the authorization token and allow the users to consume any services across OpenStack. So this is actually really helped is helping lot of enterprises coming to OpenStack or any OpenStack related providers where they need not to again maintain the credentials. So this was a blocker and since Ice House release now this is something which is available. Now okay we come to OpenStack now that is good. So this was definitely one of the good thing that happened in the last release but having said that now we are talking about multiple OpenStack clouds. Now can it be possible let's say if I am already authenticated within by one Keystone will I be able to consume another OpenStack cloud by any other providers. So that again leads to the next actually enhancement in Kilo release which is basically Keystone to Keystone Federation. So in Keystone to Keystone Federation what actually is happening is two Keystones are acting as identity provider and service provider to each other. If a customer of cloud platform A is already authenticated by the Keystone A then Keystone for consuming any resources in Keystone B he did not to again enter its credentials. Those same authentication and authorization will be applicable. So there is a trust relationship that is getting built between two Keystones. Hence now it is becoming easy to consume resources across multiple cloud platforms. So this is one of the projects or initiatives from OpenStack which actually enables identity federation. So which is one of the aspect of the federated cloud model. Now we talked we saw we are able to login or get authenticated to different cloud platforms. Now once we get authenticated what we do next. Definitely we have to consume the resources. So what does it mean is we have to provision the resources or orchestrate resources across various cloud platforms. Now how does that happen. So in a typical or ideal federated cloud orchestrated model customer selects mix and match of services as we talked about VM, a virtual machine, a queuing service or a load balancer for let us say three different providers. On top of that customer wants monitoring any kind of management backup or DR service to be available for his workload. So the left hand side boxes what you see is the services that is provided by the different providers and on top of it in a marketplace model what is happening is a monitoring as a service or any kind of backup or DR as a service. Now that is being provided through the marketplace operator itself. Now all of that being packaged together is actually provisioned again through the federation engine and provisioned across different providers and the user get to consume it. Now this is one of the model okay this is an ideal model but how OpenStack can help us. So OpenStack the HEAT project which is well known for the orchestration I think a brief history about HEAT. HEAT initially started to support the AWS cloud formation template but over the period of time it has evolved as a robust orchestration engine and currently it supports hot template which is known as HEAT orchestration template. So whatever workloads we saw in the previous this thing if that can be templatized as a hot template and the HEAT orchestration engine what we are showing here is actually it is decoupled it is not tied to any specific OpenStack. If HEAT hot templates can be actually orchestrated across OpenStack clouds then this is possible and this is something which we have already tried in our lab and it is working fine. Now again the question next question comes if at all I convert all my workload needs or blueprints to hot templates tomorrow any other specification coming will there not be any challenges again for migration or movement of my workloads. So in that context I think one of the thing that is happening now is all the HEAT templates are becoming TOSCA compliant. So TOSCA I think there are different other providers who are also participating in this OSS-backed TOSCA compliant model where any template which is TOSCA compliant it is a XML based template that will be supported by HEAT. So HEAT can be the orchestration engine across different clouds where the workload can be provisioned across multiple providers. So in this way I think we should be able to consume the resources across multiple clouds. Now we actually got into the cloud platforms we consume the resources. Now the next question that comes to our mind is okay both of this is fine but after this how do I actually track my uses across different cloud platforms and how do I we talked about the templates but one of the basic need for templates is definitely if at all I do not have the same golden images available across the clouds how are you going to provision the resources across clouds. So to address these two needs it's actually a bit tough but I think there is a blueprint that's been proposed which is the tri-colors or cascading open stack. So I have just tried to reuse the same concept here. So if you see in cascading of open stack it's a very nice concept where what is happening is one parent open stack is exposed to the external world and all the APIs of that open stack is exposed to the external world and any other open stacks setups are actually called as cascaded open stack or it is similar to the concept of availability zones different availability zones across for a single service providers. So in this case first for uniform image management what has been proposed is at any point of time these are basically three different open stack setups out of this one works as the parent open stack and two others are the cascaded open stack right at any point of time if a image is getting uploaded to one of these providers then the replica manager there will be responsible for copying that image across other providers. Now this is something which is definitely debatable that do we really need to copy the images across open stack clouds or is there a any other mechanism. So for which the second option which is proposed in this blueprint is if we do not want to replicate the images for the first time when a call goes to any of the open stack where the image is not available for a resource consumption at that point of time the image gets copied to the target open stack. Now which means for the first time when we provision a VM with that specific image it might be possible that the provisioning time will be a bit more but if let's we are worried about the storage cost and others then definitely this might be another option and of course there will be other options but I think currently these are the two options that is proposed in this blueprint. Now second for usage tracking assuming silometer is the metering component so there is a proxy silometer so any point of time if there are any queries for any of the resources that has been provisioned from the other open stack platforms then what happens is basically everything comes from that silometer proxy which means that the data is getting usage data is getting stored in different platforms and when on demand the data gets aggregated and being sent to the user. So this is one of the way where we can actually have a consolidated metering or usage tracking but this is something which is there as a blueprint which has not come to the mainstream project yet. So now we talked about actually these were the three different concepts I wanted to discuss about in terms of identity federation, federation orchestration and the image management and usage tracking. Now we will actually talk about couple of marketplaces which are available today. So definitely when we talk about marketplaces the first marketplace that comes to mind and maybe we have seen is the AWS cloud marketplace. Now if we come to AWS cloud marketplace we can see there are different options available in terms of the software, in terms of various services, SaaS. So AWS marketplace I think was the first marketplace that was introduced with a similar model but having said that there is a question whether AWS marketplace can we really term it as a federated cloud marketplace because it is against the basic concept of heterogeneity of platform and combination of providers. So it is the single provider and it is a single platform. Having said that the marketplace model is definitely the one but definitely it doesn't give the complete federation where we said no it will be really good to have multiple providers coming under a single platform. Similarly another marketplace IBM cloud marketplace so at the outset it looks like no different applications as SaaS based marketplace which is available today and we can see no choose or pick applications or services based on platforms infrastructure type. So there are different choices that are available to the end user. Now the third I have taken is the compute next global cloud marketplace. So if you see here in the compute next global cloud marketplace it is currently you see all the IIS providers. There are almost 60 plus providers who are available under single platform in 28 different countries and 40 different cities. So the wide choices on the left hand side I mean if we see we can select the choices I mean the resources based on type OS country city or any kind of hardware and so there are different options available in this marketplace and this actually looks interesting. So I have another slide on that when I provision a workload in this marketplace how does it look like. So if you see it is again a workload based model so where on the left hand side I have selected resources in terms of compute and storage from different providers and on the right hand side whatever is been provided is actually by this marketplace operator compute next in terms of console manager which actually is nothing but remote console or a monitoring that can be enabled. So that is something which the marketplace operator itself is packaging along with various resources that is been provided by the providers offered by the providers. So this again is a good model seems to be the choice for different options for the end users. I think we talked about marketplaces and open stack cloud platforms right I mean but if you see right today whatever projects I talked about it is actually not only meant for open stacks alone. Let us say if open stack as a community right if we will only think about Federation of open stack clouds then that does not satisfy the basic definition of again the Federation. So because when someone wants to try open stack he should not have no any doubt in his mind that if open stack does not work I will invest lot of money and what is there will I be able to migrate or move my workload across to any other providers if there is a need. So that is why the projects itself be it the keystone be it the heat they are actually not only open stack specific if you see a keystone can act as identity provider to other cloud platforms as well. If you see the heat actually in our cloud lab in cloud enablers we have orchestrated the different resources using heat template to Amazon and other cloud providers as well. It is not limiting us to only try out certain things only for open stack right. So that is why the question or the thought I am proposing is we should not restrict the Federation though we started with Federation of open stack clouds it should not be limited to only Federation of open stack clouds actually it can go beyond that right. So then yeah so yeah these are a couple of references that is all I had actually any questions I will be any questions yeah yeah all right well so the question I had is networking in terms of you have got let us say you have got two different clouds that you are using for or two different clouds you are using for disaster recovery or high availability globalization is there a common standard we are developing with neutron because open stack is the Rosetta stone of talking different clouds to each other is there a standard with neutron to say connect this neutron network to that neutron network instead of having to right now it is just individual providers providing solutions but do we have people working on defining the standard to make those connections or to my local yeah that is a very good question if you will go to the cascading of open stack right I mean I talked about only kilometer and the glance but actually the same thing is done with the neutron itself where you know basically let's say you are provisioning two VMs across two clouds right and you want to apply the same subnet so that is possible but again that is something which people are have thought through but it's not implemented yet okay yeah I decided this wasn't sure if there was any any yeah so that is there as part of the cascading blueprint all right so any other questions so I'm sorry will you be could you please use the mic I mean that's a requirement from them otherwise it's not getting recorded thank you it is not clear to me in the slide whether he does the orchestration right who owns that heat heat more is the marketplace operator so it is the federation provider it is not owned by any specific cloud platform or service providers okay if no more questions thank you very much and