Singles in Godot are one of the most powerful and important concepts to learn and understand. In this video, we will make use of some signals, we'll add our own custom signals, and we'll wire them up, and I'll explain them the best I can. I've got an empty project, nothing fancy, we're in Godot 4.0, let's add this SVG icon to the screen. Let's go ahead and we'll add a timer node. This timer node will auto-start it, and we won't one-shot it, and we'll have it be one second. We'll go ahead and save this. What we're going to do, we'll add a simple script to main.gd that says, in every frame, we'll take our icon and we'll rotate it. If you've watched my other videos, I love rotating this icon. It's my favorite thing in the world. We'll set a variable that says rotate icon, and we'll set it to true. We'll say, if rotate icon, rotate the icon. Run this, and we haven't wired up or used signals yet, but we've got our rotating icon. Now, our timer, back to that. In the inspector, we've got wait time one seconds. You can change this as needed. We'll keep it at one second. Now, signals, let's get into it. You click into node, and then there's two sub tabs here, groups and signals. This video is about signals, not groups, so we'll talk about signals. Each node, based on the type it is, has different signals. So timer has timeout. You can hover over it, and it says, omitted when the timer reaches zero. Cool. Okay, that's really useful. Signals are events that happen that we can wire up and react to accordingly. Let's click our sprite to the icon. Oh, frame change, texture changed. We're not really worried about those, and there's some others that exist too, like on all nodes, but just want to show you that they vary. Now, what you do is you can here, you can go down, click connect. I like double click. It's kind of nice, and it says from signal, timeout, connect to script, and you can filter nodes. We're going to connect it to our main node, which already has a script. So instead of clicking something else, we just leave it clicked on main, and then you have receiver method. This is quite nice. This is a new function that will be added or be used if it already exists. You can use the picker too to pick, but we're not going to pick it. We're going to create it. You just click connect. That goes ahead and opens up the script editor with that function created on timer timeout. And it's called every time the timer times out. Let's just do print debug timer timeout, and go ahead and save that. If we go back here, we might have to rerun our game to get that wired up. And our timer down here, you see it's every second timer timed out. Great. So we know that this signal is wired up, and you can see here this green icon in the left gutter. You can click that, and you can see which signals are connected to the method. Timers timeout is connected to the main script. Excellent. Now instead of print debug, what we're going to do is we're going to have it change rotate icon to just be to negate itself. Now we go ahead and save that. Oh, our timer, our rotating stops every second, and then it resumes. And we can go into timer. We can go into the inspector, and we can change it to be every three seconds. So it gets a little further along before it pauses. That's pretty nice, right? That's the basics of a signal. When you have a scene or an object or a node that does something, and you have another node or scene that needs to react based upon that, it could even be itself needs to react upon it. You use signals to communicate and say, great, this happened. All right. So that is using a signal from an existing node. What if you want to code up your own signal? Well, let's go ahead, and we'll go into icon, and we'll attach what's actually clear out our timer, because how to do this, how to best do this. Let's take this. Let me back this up so I can give you that source when it's needed. But we're going to go ahead, and we're going to add, we're going to kind of get rid of our timer and redo some things. So we'll delete that. We'll even delete this, because that doesn't do anything to understand. We'll just pass through right now, delete the timer, yada, yada, yada. Okay. Let's go back to our 2D view for a second. Now, what I want to do is make a UI label. So type in label, add that node, and we'll just rename this label. We'll call it rotating status, and we'll say rotating. And this label is going to be our UI for monitoring whether or not this icon is rotating. We're going to change the text and react based upon our custom signal. Okay. So maybe we should have kept the timer and all that stuff, but we'll do it our own way. So right now, if we run this, our icon doesn't rotate, and this label is a lie. Let's go ahead and we'll add a script to our icon, and we'll send our signal from our icon. So I'm going to name this just icon. It's sprite 2D. We'll quickly recode our thing and say rotating true, and we'll say process. We'll say if rotating, right? Instead of saying icon that rotating, we'll just call rotate method on ourselves because we're in the side of that. Okay, run this again. Now our icon should spin again. That's, there's no more lies. Now what we want to do is wire up a signal ourselves that says, let's make this so we can toggle our rotating, and then we'll go ahead and add our signal. I'm going to add an input event callback, and we'll just say event is action pressed, and we'll use UI accept because that's a basic one that exists. And if that is just pressed, which I think should be the space bar, we'll say rotating is false. We'll say rotating is the opposite of rotating so it can toggle. Great, run that again. Space bar toggles it. Now what we want to do is take a signal and emit it every time that happens so that our UI can update accordingly. So we're going to take our input, and every time that rotating changes, we'll send a signal. So we'll say signal, say rotating changed. We'll say rotating toggled, and then you can, in your parens, you can say, you know, what this, you can give it like a name to represent what it is, and a type signature. So we'll say rotating, maybe we'll make it is rotating, and this is unrelated to this. That's why I renamed it because I didn't want it to be confusing. And that's a boolean value. Now, if the action is pressed, or we have this signal, right, let's slow our roll a little bit, and let me make this smaller. So we have this signal. If we go to icon, and we go to node, you can see here in icon.gd, we've defined this single signal, rotating toggled.  So we can say on icon, rotating toggled. And if you click connect here into main, we have a new method, just like we did with timer. But instead, we made this ourselves. And you can even see here, we have is rotating, which is the boolean. What we're going to say here is, if is rotating, we're going to set rotating status dot text is equal to rotating active. Else, rotating status dot text is equal to rotating paused. That is the gist of the code. Now, if we run this, and toggle it, our text here and our label didn't update. Very interesting. Why is that? Well, we have to emit our signal, which says, in our code somewhere, we need to go ahead and say, tell the world, tell anyone who's listening, that this event occurred. So all you do is you say rotating toggled, the name of the signal that we defined up above dot emit. Now, normally, you would just do dot emit with nothing if there was no signal value to send. But for us, we're going to send rotating as our parameter. So anyone listening can get this is rotating boolean. So now that we did that, we can run our game. Oh, now it's changing. And you could see that the a is not capitalized because it changed from our placeholder text. So you could go ahead and make that better. But now, to summarize what we've just done is we've taken code happening an icon, or we've taken an event, a signal happening an icon, and we've let elsewhere in our game know that when this event happens, react accordingly and change your state, change the text, change whatever. And this could have been in rotating status. We could attach the script there. But we had main. It's easy enough to have in these simple demos have the parent, the root of the scene manage its children stuff. But if you had a complicated game, you might want the rotating status text to be responsible for this. So it's up to you. And let's make this code a little bit better, right? We'll say var text is equal to an empty string. And we'll just assign it accordingly. And then here we'll say that code's just just a little bit better, I guess, debatable if it's better. But I like it more. So now we toggle it. And you could even make it so that on ready, we admit the signal ourselves. And we say, based on this default value, this this like makes our code more true, it gets rid of that placeholder active with the capital A, and uses our code to actually let the parent node know when it's ready, what its state is. I hope that helps you see how signals work, because you've got timers, or you've got existing nodes like our timer, where you can find and see signals that you can wire up and connect to, right? And you do that in the node tab. Or, and this is pretty common, you're going to want to create your own signals if it doesn't exist for different game logic events that happen. And all you do is you type signal, you do the name of the signal, and then the data that you want to send. And this bull is optional.  That's helpful. And then you take that signal in that script, and you just admit it. And your game can react accordingly. I hope that helps. You better understand signals. They're really cool. They're really helpful and useful. They're a foundational part to building games with Gino. Thank you so much. Catch you later. Bye.


We are still analyzing data that we collected during the Indiana and California investigations and we expect to come out with that additional data in the near future. We also have interest in identifying technological solutions and conditions where you can use the technology that do not pose a health hazard to workers as well as the general population that's in the area.


15 to 20 years ago, we saw function move out of the host, storage function specifically, into what became the storage network. And for good reason. We needed to share data, we needed to protect data, we needed to get data off site. And moving that data away from the host made a lot of sense. In the past five years, we're starting to see that trend reverse. And there are a number of factors driving that. We're seeing a massive increase in processing power, decreasing costs in both processing power and memory, and also the disruption of flash. So you're starting to see Das as a new mechanism. And I'm here with Stu Miniman, who just released today a new definition of server sand. We're going to talk a little bit about that today. And we're also here with CJ DeSise. CJ is the president of the Emerging Technologies Division at EMC, a group that is set up to specifically identify disruptions in the industry and then bring them to market. CJ and Stu, welcome to theCUBE. Thank you, thank you. David really appreciate it. So happy to be here. So let's start. There's some news today actually, Stu. You know, we're talking about all these trends and shifting sands in the industry. Well, David Goulden was finally, it was announced that he's the president and CEO of the EMC II group up here of Pat Gelsinger now and Paul Moritz, which of course we knew all along. We've been saying. Yeah, David, it's really interesting. The nuance on that, of course, is that Joe Tucci still is chairman and CEO of EMC the Federation and EMC squared the entity itself. But now Goulden is a peer with Pat and Paul running all of the kind of storage infrastructure, the IIG group and all those pieces under there. So CJ, your new boss got promoted. So in fact, you got promoted. So congratulations. Congratulations. So let's talk a little bit about the emerging technology products division and what the scope is of that.  That's a great question. So I joined in September. My background in 90s, I was with Oracle Corporation and one of the things that I did at Oracle besides doing Oracle applications and so on was we were the first group to launch software as a service at Oracle. This was in year 2000. This was an RMCRM online in that era. And then I was with Symantec. Originally I'd end the security division, which was called Endpoint and Mobility Division. And then after that, my last job with Symantec was running Veritas. So everything from VXFS to NetBackup, BackupExec, Storage Foundation, and other technologies archiving in the cloud and so on. So the reason I joined EMC, Dave, is because they have healthy paranoia about disruptive technologies. They want to bring disruptive technologies in-house or invest in disruptive technologies, give it proper resources, whether it's related to R&D or sales and marketing, to make sure that rather than anybody else disrupting EMC, EMC itself can disrupt when there is a market demand for disruptive technologies. Well, I think that's an interesting point too. And still, we've been observing this market for a long time. Being from the East Coast and watching all the mini-computer companies get crushed and of course, Joe Tucci sort of came out of that world. It is very much a tune to that. I think EMC and others have a healthy paranoia. I think that the legacy of today's leaders is largely going to be determined by how much they don't have their head in the sands and how much they can sort of eat their own. And we've seen it in a number of instances with EMC. I mean, we're a close example. Yeah, Dave, so I mean, no secret. I spent 10 years at EMC and one of the Bibles working at EMC was only the Power Noir that survives by Andy Grove. So EMC was always looking out for that disruption and both through internal R&D and acquisitions, they've done a number of moves to move beyond just being a hardware company. They expanded their software and their services division and it bought a number of product lines to kind of bolster the portfolio. Okay, so CJ, the role of the emerging technology products division is essentially to identify disruptive technologies, is that right? Talk about that role a little bit and how that all fits into the EMC and the Federation. Right, so first of all, at EMC-II level, which is the EMC storage and infrastructure division, we are focused on looking at the technologies that are disrupting the market. So let me spend a few seconds talking about it. So one of the first assets that is part of this division is Extreme IO. As you know, there are many all-flash arrays that are out there in the market. EMC has an architecturally superior product that was designed from ground up for flash. So that's one product line that is part of the division. The other one is Scale IO and you're talking about things moving to the host and with my experience in Veritas and so on, we are definitely seeing the trend that there is definitely unused capacity attached to the server. So can we use DAAS with manageability of sand? Can we use, can we help our service providers who have scale out infrastructures? They are under cost pressures and a solution that is software-based and attached to server and can leverage flash or commodity hard disk and so on is game-changing, is very disruptive. And there are a few other initiatives happening within Emerging Division, which we'll talk about at EMC World, not ready to talk about that yet. Okay, but in concept, should we look at the division as both a place where disruptive acquisitions like Extreme IO come in and Scale IO, and is it also a skunkworks? Of sorts. Skunkworks is a tough word, but yes, advanced research is what I would call it there. So we are doing- We're very colloquial here sometimes, that's what you're talking about. So we are doing advanced research in certain areas. We are exploring partnership where it makes sense for EMC and we are also constantly looking at disruptive technologies that fit in with overall EMC's vision. So in theory, that is the idea behind this division. So let's talk about, before we get into the service end, let's talk about flash as a disruption. I mean, you guys, well, we wrote a piece, I wrote a piece, actually EMC lands a haymaker, when EMC, a long time ago, when EMC put the first flash device into Symetrix. It was 2008. Yeah, we look back at that now and go, okay, that was sort of not the future, but at the time it was an indicator of the future. Yeah, 2008, that's right. So flash as a disruptive technology, give us your thoughts on flash as a disruptive technology. Other than the fact that it's a persistent medium, what makes it so disruptive? So I think one of the things that we have seen is that the demand from our customers is very high when it comes to performance expectation, low latency, consistent high performance at low latency. So like you discussed with VMAX, the journey started out in 2008, then followed by VNX, and both VMAX and VNX can go from zero to 100% flash in the configuration today. Extreme I.O. specifically was designed from ground up to leverage the power of flash. And what we are seeing with Extreme I.O. specifically in the use cases is when you have virtual desktops, right? As applications are moving more towards the data center and adoption for virtual desktops is happening, the performance given by Extreme I.O. on an all-flash array is just blazing performance. And then you have hyperscale and other types of customers who are saying we want to attach flash to the server, we want a solution that can scale out and so on. So we are seeing flash being attached, driven through the traditional send, as well as also as part of the server infrastructure and that is disrupting the market because the demand for performance, whether it's virtual desktop or virtualized servers or even OLTP workloads where you have high expectation when you're doing reads for the data analytics and so on is very high. So you mentioned the hyperscale, you've got the true scale out architecture and then the traditional stuff, you got a stack that's robust. And now a lot of people say, okay, new is going to kill old and it never happens that way. But eventually do you see these two worlds coming together and how does your division sort of cross-pollinate technologies? You share with your colleagues, borrow from your colleagues, how does that all work inside of EMC? Great, so EMC definitely one of the reasons Dave I joined is because it has strong lineage in send. And when we are trying to even for extreme IO where we can leverage the scale with engineers and understanding the storage infrastructure, architecture. So for example, we have done integration with bunch of EMC products such as V-Plex and so on with extreme IO. So we do leverage that scale quite a bit. And we do that leverage the scale with sales and marketing efforts with our core Salesforce and so on to make sure that the division and the products that come out of the division, one fits in with the overall EMC strategy and two can scale, no pun intended, can scale out as we scale the businesses. So that's number one. And then number two is what we also find is I am talking to all of my peers and all the engineers in different organizations to make sure that we are not, we are leveraging the experience they have had, the rich experience EMC had. And if we can do things differently, then we'll do that. So for example, on scale IO, it's a great piece of technology is server attached software storage solution. Now, Viper is our overall software defined storage messaging. So we are gonna integrate with Viper when it comes to both the control pane and the data pane. Now that sand background that EMC has the perfect lead-ins due to the whole server sand discussion. Now, I mean, I love the fact that SiliconANGLE Wikibon, we tend to be ahead of the curve in terms of things that we track. I mean, we were on cloud in 2006, 2007. We were early on Hadoop. We've been writing about Bitcoin.  Now Bitcoin's everywhere. Server sand is something that people have talked about, Stu, and there really hasn't been a clear definition of server sand. Like there wasn't with software-led infrastructure, which became the software-defined data center. But so you took it on yourself and some of your colleagues, David Floyer, to define server sand, as they say, a term that's been bandied about. But so what is server sand and how does it relate to this discussion? Sure, Dave. And in a lot of ways, this is really an extension of what we've been tracking at Wikibon for a while. One of the big trends we've been following since I came on almost four years ago is how does hyperscale impact the enterprise? So scale out architectures, how Flash is involved in things and really having software be the layer that controls everything rather than hardware really differentiating too much is a major piece, as well as convergence, which is an area that I've spent a lot of time on. How are the compute and the storage assets going together? So server sand really sits right at that intersection. So it is a converged infrastructure, but it's built out of compute nodes that have local storage and the software layer itself can manage all of those storage functionalities. I think back to CJ, you worked for Symantec. Symantec and Veritas for years were one of the toughest competitors for EMC because they could offer very inexpensive solutions that provided a lot of the functionality that EMC was trying to do with their storage arrays. And now with the advancement of the software functionality, you're really seeing that blurring between what is a hardware solution, what is a software solution, as well as that server and storage line has really blurred a lot. So the hyper-convergence players kind of fit into this discussion, what EMC is doing with Scale.io, fits square in here, VMware's vSAN, and a number of others. So it's an exciting new space. And as Dave you said, over the next few years, we expect many applications are going to fit into this environment and it will directly impact the tradition. So just to clarify, so server sand is essentially a pool of direct-detached storage devices that communicate, how do they communicate? Is it a high-speed internet, whatever, or an infinite internet or whatever it is. And the point of control is the software, right? Okay, so that's exciting, because again, years ago, we were talking about who's going to be the next veritas of the industry. There's a software opportunity enabled by the performance of microprocessors, the decline in cost of microprocessors in memory, to the point where you can actually, without the trade-offs, have software control the storage pool. So that leads to Scale.io. I wonder if we could talk about that a little bit. Where does it fit in the portfolio? Talk about the acquisition and where you guys see that going. So Scale.io became part of EMC family in the early fall timeframe. So this was around August, September of 2012. And the reason we were excited about Scale.io is because one, like we talked about, for service providers, you see that they're constantly under cost pressures. They want to use the commodity hardware where it makes sense. And Scale.io is block solution that works closely with server and of course blurring the line between the server and storage, like you were talking about earlier, between host and storage, but provides you full manageability, parallel IO, massive performance, and can scale up to thousands of nodes. And one of the advantages, Dave, of Scale.io is it also works with heterogeneous infrastructure. So whether you have multiple hypervisor from VMware, Microsoft, and so on. We are also doing integration with OpenStack. We are also making sure it can work with bare metal, flash, and magnetic disks. So it is truly a heterogeneous solution. So that's the enterprise use case. Sorry, service provider use case. And then on the enterprise side, we are also excited that when enterprises want to leverage desk with manageability of sand, then Scale.io is a perfect solution, which was your earlier point on the warehouse side. Well, we were talking about the hyperscale market before, and when you dig into what's going on in hyperscale, they're not putting in big sand infrastructures. They're using this direct attach, you know, approach.  So is that the role that EMC is playing, essentially bringing that hyperscale class of product to both the enterprise and the service provider? That's exactly, you got it correct. So when you look at it, the service providers, when they want to leverage the manageability and all the features that you expect in traditional sand, such as thin provisioning and so on, this is provided by Scale.io today. So that's the big advantage of Scale.io in the service provider market. And on the enterprise side, if you want to run DevTest, if you are not comfortable moving the data to cloud and you want to run quickly and use your desk capacity or on commodity storage, you can do with Scale.io. And the third thing I'm excited about is Viper integration that will integrate with Viper also to ensure that from control plane of Viper, you can manage Scale.io and Scale.io and provide data services. So let's talk a little bit more about and unpack the sort of the applications and workloads. I know, Stu, what you found in your initial research, but where does server sand fit? And then CJ, I wonder if you could just sort of comment. Yeah, so Dave, definitely there is a little bit of that gap. This scale out architecture is built for, will be great for some modern applications. So desktop virtualization, it can definitely fit there. Some big data applications depending on how they're configured can fit there. And but it's not today built for necessarily the same kind of mission critical databases there, but that's where over time we expect server sand to expand with more functionality and more. Is that consistency, CJ, with what you guys are saying?   Enterprises, they will start with something like Dev and test to what he was saying and make sense. What about converged infrastructure? Where does that fit? One of the things that surprised me a little bit that we were recently at Amazon Reinvent is to hear Amazon talk about how they're developing more customized solutions. You see the OCP initiative that came out of Facebook with sort of horses for courses configurations. How do you see converged infrastructure fitting in to your whole space? So of course as you are aware, very well that VCE was first attempt across the federation and in partnership with Cisco to go after the compute networking and storage and VCE has been received very well by our joint customers. We are also looking at few other options to leverage the technologies we have such as the Scale ION, the V-Sense of the world to ensure that we continue to be player in a converged market. But that is definitely, I call it in layman's term data centered in a box, it is definitely a preferred option. You don't have to configure it as much and you can scale out as much as you want. So you're definitely seeing demand for converged infrastructure. So you're wondering if you could just give us, I mean, you're not going to give us hard metrics but if you can give us just a sense as to how it's going in the vision.  So you've successfully put the organization together. You've made a couple of acquisitions. How's the uptake of customers? I know at EMC world, there was a lot of enthusiasm or certainly around what they were showing with extreme I.O. But maybe you can give us an update just in general terms, market momentum, things that you're seeing, enthusiasm that you have and then we'll wrap. So, Dave, good question. So what we have seen is customers are definitely excited about these two technologies that we have. So first is from an all flash array conversation when the performance demands are very high, a lot of our customers are coming to us more like a pool model and asking us about an all flash array or an existing array, what performance at what cost we can give it to them. So definitely a lot of momentum on extreme I.O. business already, we G8 the product on November 14th. And so it has been on market for six weeks. Prior to that for a few months it was in directed availability. So what we have seen is now customers are able to install and are pretty happy with the performance they are seeing in the VDI use case or virtualized servers and so on. With scale I.O. we have seen again demands on both sides. One is service providers are definitely having conversations with us, some of the large names. And also on the enterprise side when they are trying to leverage desk capacity they're definitely exploring that. So we have a great momentum behind us. The company has been very supportive to ensure that these technologies are successful. And so far I'm very positive about the future of these technologies. So my last question is what should we be paying attention to? What are your sort of goals over the next six, nine months? Milestones that observers should be watching as sort of indicators of progress. So we are going to of course evolve the roadmap when it comes to say something like extreme I.O. and continue to add features. As I said the architecture was designed from ground up to leverage flash power. So we'll continue to add features over time and do multiple releases. When it comes to scale I.O. we also have another release planned in the Q2, Q3 timeframe. So there will be features we'll add there too. And then there are other technologies that are being worked on in our division and hopefully we can announce that at EMC. All right CJ, well thanks very much for coming to our studios in Massachusetts. Appreciate you making the trip up here and thank you Stu for the good work you did. You released this morning and keep it right there. We'll be tracking this issue and the evolution of ServerSAN and EMC's emerging products division. This is theCUBE, thanks for watching everybody. We'll see you next time. Thank you.


Today, we're here at Ascetic corrals belonging to a larger and average size Wyoming ranch. Now anybody can recognize and describe the characteristics of Ascetic corrals. Bear with me though and look at it from the viewpoint of a range manager from down here. A corral is subjected to intense grazing and trampling pressure. Perennial grasses which protect us all from erosion can't survive. They go away. Surviving plants are either so tough, unpalibre poisonous that livestock won't eat them. Sun covers gone, exposing the topsoil to sun, wind and water. Degradation by those elements often lost. The startling thing is that while we begin on a ranch, with Ascetic corrals that covers one or two acres and serving maybe 500 cows, now we're on a five acre pasture that's serving two horses. It's an ecological extravagance. The sound land management solution. Build a corral to pin the stock the majority of the time. The rest of the acreage retains the aesthetic properties which entice the landowner to be there in the first place. From the University of Wyoming Cooperative Extended Service, I'm Eric Peterson.


And God said, let us make man in our image according to our likeness. And the word image and likeness kind of gets misunderstood. But what it means is this, our image and likeness refers to two things, form and function. The two words that are used there is the word selam and the word that we were given attributes of God. That's the form, meaning that we have been given the attributes of love, the attributes of caring, even the attributes sometimes of indignation, meaning that we don't tolerate sin either by us or from others. And so because these attributes are there, our function, the likeness of God is also there. We are in this harmony, this agreement, just like the father, the son and the spirit are in this harmonious agreement. Because we bear his image and we want to see his image multiplied and increased, we do the same thing. We use those very same attributes that were given. This desire to see others born out of our love for him and others, what do we do? We share the gospel. And so in that way, we prove that we were made in his image and his likeness.


Hey everyone, Adam Shaw here from Bravera Media Company. Today we've got another vintage map for you guys. It is a map of Detroit, Michigan that was originally produced in 1895. We're going to examine and explore this map and other maps of Detroit, but before we do, let's give a brief historical overview of the background of Detroit and how it came to be. Then we'll go into it and zoom into these maps. To start, the city of Detroit was founded on July 24th, 1701. The city and the surrounding area, though, was originally inhabited by several Native American tribes as early as 11,000 years ago. The tribes that reside in the area were the Huron, the Adawa, the Patua Tomi, and the Iroquois. The first Europeans did not reach and discover the area until French missionaries and traders worked their way around the League of Iroquois with whom they were at war with other Iroquois tribes around the 1630s timeframe. The city itself was named by French colonists referring to the Detroit River. They called it Le Detroit, meaning the Strait of Lake Erie. On the shores of the Strait in 1701, the French officer Antoine de la Monde Cadillac, along with 51 French people and French Canadians, founded a settlement called Fort Pontchartrain de Detroit, naming it after Louis-Philippe-Pu, Chancellor of Pontchartrain. France offered free land to colonists to attract families to Detroit when it reached a total population of 800 in 1765. It was the largest European settlement between Montreal and New Orleans, both of which were also French settlements. The region's economy was based on the lucrative fur trade in which numerous Native American people also partook. Then the French near Indian War broke out, which was a massive military conflict between British and French and Indian forces. British troops were able to control the settlement in 1760 for which they shortened the city's name down to just Detroit. As the French and Indian War continued, several Native American tribes launched counter-attacks on the British forces in the area that included Pontiac's Rebellion in 1763 and the siege of Fort Detroit. These attempts, though, to recapture the area proved to be a failure. Under British control for about 36 years, eventually Great Britain would surrender the territory sometime after the American revelation for which this led to the signing of the Jay Treaty of 1796. The Jay Treaty established the northern border of Canada and the United States. From 1805 to 1847, Detroit was the capital of Michigan first as a territory, then as a state. During the War of 1812, Detroit was surrendered to British troops in the siege of Detroit. The Battle of Frenchtown in 1813 was a United States effort to retake the city for which American troops suffered their highest fatalities out of any battle of the War of 1812. Detroit would be recaptured by the United States later that year. After the conclusion of the War of 1812, Detroit became officially incorporated as a city in 1815. Prior to the American Civil War, the city's access to the Canadian-U.S. border made it a very key stop for refugee slaves gaining freedom to the north along the Underground Railroad. The city went across the Detroit River to Canada to escape pursuit of slave catchers. Numerous men from Detroit volunteered to fight for the Union during the American Civil War including the 24th Michigan Infantry Regiment which fought with honor and suffered 82% casualties at the Battle of Gettysburg. That's unbelievable. Right throughout the 19th century was sometimes referred to as the Paris of the West because of its architecture, Grand Avenues in Paris, its style, and also for Washington Boulevard being electrified by Thomas Edison. The city had grown steadily from the 1830s with the rise of shipping, shipbuilding, manufacturing industries. It strategically was located along the Great Lakes, Waterway, Detroit emerged really as a major port and transportation hub. In 1896, a thriving carriage trade prompted Henry Ford to build his first automobile in a rented workshop on Mack Avenue thus establishing the Ford Motor Company in 1903 and launching Detroit into becoming an automotive city. Alright so we gave you a brief background into the history of Detroit. Let's look at this map and we'll also look at a bird's eye perspective map of Detroit and we'll kind of just explore and examine it. If we look at this map, this is the 1895 map of Detroit. We can see that buildings are actually labeled on this map. We have numbered locations for these various buildings and we'll go up to the key, look at all these reference points. We've got depots, we've got hotels labeled, places of amusement, prominent buildings, institutions, and churches. Let's go down to our numbered list, this is the downtown Detroit area and if we look right around here, you see 20, let's look, this is a corner building, we can look up the bird's eye map and see what this building is, 20, it's either 20 or 15 is this labeling. These numbers are a little bit clustered but let's look at what 20 and 15 is. We've got a market right here and we've got City Hall labeled right here. My guess is that is City Hall considering its location and when I looked on a bird's eye perspective map, here's a bird's eye perspective map of Detroit, 1889, same time frame, we see that same cross section, look how big this building is and look at the flag hanging at the top. My guess is that the assumption that that is City Hall is correct given the flag hanging at the top and it's the size of the building. You can see the half moon shape extending down and if we just reiterate, see that half moon shape right here, we can just use that as a point of reference. So this is definitely City Hall, you can see how it's labeled right here. We can see Cadillac written right here, Cadillac square, that's so cool that we talked about in the history, Antoine de la Mode Cadillac back in 1701 and I mean obviously we know the car today and we know that Detroit is an automotive city so I mean a lot of influence. You see all these streets labeled, what's 34? This is on Antietam, what is this, I'm sorry, Gretaute, 34, let's look up 34, it's a church, very cool. So that's a little church right there. Let's see what some of these other buildings are, seven right here, just ahead of City Hall, we probably looked that up on the bird's eye, that's a hotel, Griswold Hotel, let's look on the bird's eye so we don't, the hotel is located generally in this location, the bird's eye doesn't give us numbered locations so we have to use the other map, but I can generally assume that hotel is right around here, probably on this major street side, it would be my best guess. Let's go back, 21 is a post office, let's keep looking for different buildings, here's 28, this is close to a railroad depot, I'm guessing has something to do with the railroad, 28, nope I was wrong, that's a church, wow, church is really close to the railroad, I was way off, let's look at this one, six right here, we've got six and ten, six and ten, very close to the river side, that's another hotel, that's a griffin house, okay, what's ten, another hotel, look, notice the hotels are located very close to the river front, probably because people who weren't from the area who were trading and involved with commerce needed to find somewhere to stay very quickly, I've been noticing that trend on this map, 41, let's see what 41 is down here, awesome, museum of art, close to the river, kind of a tourist attraction, right here, 41, very close to the river front, 26, look at 26, that's another church, a lot of churches, when you look at these maps, I mean, that's a common theme, they love labeling churches on these old maps and I've noticed that many times, look at this, a US Marine hospital, labeled right here, very close to the river side, and we've even got, these look like ferry routes, yeah, see, we've got a ferry right here, the Walkerville ferry, you can see kind of drift over here from, say in Water Street, yeah, Water Street, I mean, these maps are amazing, we can see the measurements of distance across from the Detroit River, three miles right here, two miles right there, we've got Detroit International Exposition Grounds, Fort Wayne, so cool, a lot of these maps, I mean, I do metal detecting videos to help metal detectors look for certain areas, I mean, this is a treasure trove of information, 18, what's 18 back here, all by its lonesome self, that's a hospital, Harper's Hospital, all the way back here by Martin Place, kind of close to Willis and Canfield, we've got reservoirs labeled, Cass Park, wonderful map, wonderful map, lots, a lot more information on this map compared to the bird's eye, if we look at the bird's eye, I wish they, I mean, the illustrations are great to see what kind of what the landscape looked like in the railways and how they came in, you can see this railway coming across, we can see the factories lined up along the railway, obviously just distribute and take goods, we can see that the railway comes down to a depot all the way by the river front, we can see the factories, they're always lined up next to the railroad just because of the amount of time it takes to put goods on and take goods off in transportation, but I wish they labeled buildings on these bird's eyes, I don't know why they didn't, but you know, the bird's eyes are nice, you know, you get kind of a look at the Detroit river and what was going on, the river boats, a lot of detail, you know, I would say there's more detail along the waterfront than there is obviously in the background except for the fact that you get to see the railways and how they came into the Detroit river, but I like this map personally a lot more, 1895, I mean, the parks are labeled, the waterways, the boulevards, really, look at this, peninsula car works, I just realized, I just saw that, and it's right along the rail line, that's pretty cool, that's pretty cool, yeah, so I hope you've enjoyed this video, I hope you learned something, definitely subscribe to our YouTube channel, we love doing videos like these all the time where we talk about the history of a city, we do vintage maps on Detroit, on Michigan of different states throughout the United States, we talk about history, we just did a video series on St. Patrick's Day, it was something like eight different videos that we did, and it was very, very popular, so if you like history, you like vintage maps and you like hanging out, just subscribe to our YouTube channel, we upload videos all the time, leave a comment below if you have any questions about this map or you'd like to leave a comment about the history of Detroit, leave a comment below, like this video, share this video, and I will see you guys soon, okay, take care, alright, bye.


Hello everybody my name is Aldo. I'm from Google, but in this talk I'm representing sick apps from Kubernetes community So basically What I want to to say is that well we understand that We understood Front since that since the start of Kubernetes the job API Was not meant or was not ready to run all kinds of applications So All kinds of applications in the HPC AI ML ML Space so I'm sorry need to I cannot really see what I'm doing here Sorry about this Sorry about that So in particular When you wanted to run part of the applications on Kubernetes you run into a number of problems In as you might know in the Kubernetes API in the Kubernetes documentation we proposed a set of Patterns for how to run a job part of jobs and they were actually cumbersome for example You you had to set up an external queue just to do data partitioning Or another recommendation was if you wanted to run the same job across a set of Different sets of data you had to just set up your own orchestrator around the job controller and Of course there is limited control over over startup or termination Of the pods how to control retries or rather fail a job etc. And this cost this has caused that a number of Developers in the ecosystem and you've probably already heard of some of them during this talk during this batch APC day that there were a number of people projects rewriting the job controller and This of course leads to fragmentation, which makes it hard for Providers to support We're hearing earlier that well now we have all these different APIs We have to support which ones my provider supports So that's one problem and also a number of bugs that Were done in one place are also replicated in all these places So looking into that Basically around the 121 release of Kubernetes we have been working on this number of of features in the job controller to finally Make it possible that everybody or at least most of the developers can run in a single API I'm going through basically all of these ones during this talk But this is for reference so you can you can once you download the slides you can go through all this The documentation for all of these ones I'm also going to talk a bit about what are we thinking for the future and what are the moon shots? What do we want to bring the job API next so the first one is maybe some of you are already familiar with this index jobs Index jobs is simply the ability of creating a single job For a parallel application where each each part in the job has a different index and Well this This index is available as simply a number as an environment variable So how do you set up an index job? You just set the completion mode to index and just you set the number of completions the number of pots you want to run and then in the command line or well in your in your pot in your workload you just access the the Environment variable and well execute your application and Well, this is this is how it looks in the This is how we can think about index jobs. So this is such a fundamental feature that He hasn't existed since the start of Korea is a couple of years back. We finally added it The next one is Job suspension and scale and mutable scaling directives so This provides you with the ability of creating a job but not start the the the pots yet think of it's this is this has already been mentioned but You could have a case where You don't want you have way more Workloads running or you desire to run more workloads than you have capacity in your cluster And you don't want to make your users Simply well Try to run the application and run into scaling errors or or simply fail the the pod creation The job creation you would like to queue this these workloads. So we added these fields into the into We added just this one field in the job API to say well this this job is suspended and You can implement an external controller To do the unsuspension Start or resume the job even you can suspend it back to to do preemption and stuff like that Then once this external controller Considered that there is capacity in the cluster. There is quota We've dealt with first sharing within the cluster for all our users we can start the job and Maybe even Place it in a particular place in this case We have decided that this job is gonna run in the In this zone the US central one a and it's gonna run on spot VMs because this is what we have capacity now of spot VMs and This is exactly what one of the projects in six scaling is doing. It's using these APIs to to implement this these semantics and But the interesting thing here is that well queue is one project that can use this but any or any other job Job queuing operator can can use the same APIs without having to read rewrite the job controller or the job or the job API This one is a Feature that is the the most hurtful for me Basically, well, I implemented this but it was quite challenging and this is why I was mentioning Initially about bugs How this this bug that is present was present in the job controller was present in a lot of these other Custom job APIs and it was very hard to fix So what was the problem? Basically the design of a job controller What's meant it was originally thought of low scale and also just to serve Services so it It at some points when he interacted with the garbage collector, he would start losing track So you could say you could see that your pot said I have five pots completed And then later he says I only completed actually three Why because the pots were disappearing and the job controller was only looking at the pots that existed in the cluster So this led of course to pot recreation and then people ended up paying more to render jobs and of course this meant that jobs were unusable at scale people running a five thousand Parallel job wouldn't be able to use the job API or maybe one yes, but not not more than three So this this was a big problem. And of course if you had preemptible VMs spot VMs Once these nodes disappeared the the the progress will be lost as well So and as I was saying custom jobs in the ecosystem had a similar design similar problems The fix is rather an entire rewrite of the of the job controller, which I don't I won't get into the details but during lunch you can look for me and we can talk about it and It was such a complicated fix that the feature ended up being disabled by default in Open source release of one two one twenty three and one twenty four even though the feature was already beta and hopefully we fixed all the the problems and We re-enabled it back to one twenty five with Incorporate is we don't really Renable features by default again, but if you if you need the feature you can still Re-enable even one twenty three and twenty four because all the fixes were backported So this is mostly Non-visible to users you you you don't say I want to use job tracking with finalizers We just track with finalizers And you can see some traces of what's happening. You could you will have of course pots with a finalizer and And of course you will see that your job is finally tracking progress correctly and not losing not losing Not decreasing counters of completed and completed jobs And actually We've heard from some of our customers That they are successfully running index jobs with 5,000 pots or more Which of course was not possible before This is another feature we are currently working on it's it's in alpha today And we are one of our engineers is working on the on the beta release so basically in Kubernetes you have a number of Problems that could cause your pot to to stop running right you could have of course software errors The hardware could fail you could have a maintenance event like upgrades or simply maintenance or You could have the eviction API or maybe a high priority job comes in and keep scheduler simply Kills the pot There's the pot garbage collector You can add a taint There is a cluster auto-scaler that could decide that suddenly wants to pre-empt some pots because it wants to optimize utilization The API server and you could maybe write your own controller and Affect a running pot so all of these components can can really kick kill your pot and You of course you might want to retry you might want not to retry because you Your workload doesn't support preemption And really there was no control over over this All these problems you just had a face in the process the test failed and the job controller could only say Oh, I want to support up to six failures So in Kubernetes 125 we added first a pot condition to Observe what's what happened to my pod? We just say well this pot has been disrupted It has been disrupted by skew scheduler for because of a taint etc. All of these all these problems And in 126 we are working on the support from cuba all the things that cuba might do to kill your pod Which includes? exceeding memory limits for example or Exceeding the usage of ephemeral storage and maybe we'll think about some other some other conditions in the future So what what do you do with this? This is just the information being passed by Pass from other controllers and then from the job API you can use these conditions to decide whether or whether to Terminate the job or retry it or how many times? And also we have support for looking at the exit codes of the of the Pots so if you know for example the The exit goes 40 41 and 42 are non-recoverable. You can immediately Fail the job without having to go through all the counters But maybe you want to ignore if the pod was disrupted disrupted by any of the controllers So you can retry indefinitely for any infrastructure problems Maybe you want to terminate. Oh, sorry. Yes, maybe You want to fail your job because of any error that happens in the In the in the binary But you want to retry if there is a disruption by the control plane But only up to a limit in this case the back of limit is three So I want to count to this failure and once it fails three times. I'm done with it I don't want to retry again So this is all the features we've been working on Are either most of them are finished one of them is ongoing and then in the near future we want to add this other Capability to index jobs where you control the back of per index and You can basically guarantee that all your indexes run at least once or up to the limit And you can say even okay if this limit if this index fails I just want to fill this index, but all of the other indexes can continue running We haven't started the sign yet, but this is kind of like the potential API So and What what comes next? Well, we are thinking of a some some moon shots But but really what we want we are here in in much HPC day basically to present These enhancements and also to ask you what do you want to see next in the job API? Well, how do you think job V2 API could look like for example Maybe why do we not index jobs? Maybe all indexes all jobs could be indexed Would be a huge simplification for the current is control plane That would lead to even better performance Or maybe you want to see multiple pot templates pattern with a startup sequence, which is something we haven't Looked at or maybe you want a resizable jobs. The jobs currently are fixed fixed number of completions Maybe that's something you you want to to have so with all of this How can you get involved? Why would why do it should you get involved? Well, we are building these API's We only have three credit releases per year, right? So we want feedback as early as possible from the community So once we publish our API design, we would like to know if it fits your use case and Well to do that, of course, we also want contributors if you Want to contribute to to the Kubernetes core components? But this is all the places we communicate in in particular the working group batch or the c-gaps In slack or the the meetings we have So, yes, thank you. Thank you for listening to me and Please keep in touch. Thank you. Although I think we're running out of time But anybody has any questions we run or two questions Yeah, so what's your take on the pod groups that are co-scheduled and how that relates to jobs? Rather that's well from the perspective of the job controller does tangential the job controller doesn't care about scheduling it's all about the how how it presents to the developers to the application developers If you want my take as a six scheduling leap, that's that's a different question. Is that what you're looking for? Yeah, essentially, so we have this idea that for us a job typically is not a single pod It's a collection of Kubernetes resources with a lifetime that is tied together with all of them And that may be multiple pods and services, right? Yes. Yeah, we actually had this question recently in the working group batch About yes, what if the job also encompasses services in particular right for interactive jobs? Yeah, for example, that's one use case There are two ways to think about this one is that Maybe a service is not that expensive and it could be created from the beginning and it's gonna be there sitting idle Because the job the pods are not created. So the services don't have endpoints and whatnot The other way to think about it is well, you can Implemented in the controller in your application controller. For example, let's say we have interactive interactive job Controller this interactive job controller has a job a Kubernetes job And you say well your controller only will create a service once The job is unsuspended the Kubernetes job is unsuspended So you could actually just listen to the signal from the job API and control the The rest of the resources based on that Those are the two ways I've So far thought about it, but of course, it's a it's an open discussion still Right. Thank you. We're having an interesting discussion during the panel about this topic as well Any other questions? I guess one thing I guess it's also on the panel So maybe I'll just ask it now a little bit But how so for all these different projects like Argo workflows airflow They all kind of have gone ahead and most of them are probably scheduling raw pods and then I guess is the the hope from From like the working group batch is like is this a place for people to come to try and like ask how to like migrate to Using the jobs and like if it normally is that like what the Guess the goal of some of these batch groups is to try to get this feedback from them Absolutely, so I don't blame them for rewriting their own or writing their logic in robots because the job controller was not ready Now that we have fixed a number of things we hope that all of these projects would Use the job API in particular about Argo Argo has had the same problem. I don't know if still does about losing track of progress So if they were a if they were migrating to the job API They would basically get rid of a bit without having to re-implement what we already went through Yeah for index jobs Some some common features I see in HPC based schedulers for job arrays our step and cap So like a step would be how much to increment between each Run so like if you're saying one through a hundred you could do step 10 and Like would be 10 20 30 40 for each index And the other thing is a cap Which is like a limit So like if you had a index of a hundred that you are running You could give it a cap of 10 to only run like 10 at a time Are those features that you guys are looking into implementing? That's actually already supported There we go, so if you see here, there is two fields completions and parallelism Completions is how many you will run? Oh I don't think I But I can point here. So you have to two fields completions and parallelism. So completions completions is how many? Are in total and parallelism how many run at a time? So this is actually what the graph is showing here. So it's two at a time running Now in terms of steps We believe that this kind of things can be done in the application level I mean you can always multiply inside although there have been requests about Basically I want to you know, I run my job and then certain indexes fail And then I just want to retry the indexes that failed So that's something we we might be looking into but we don't have support for running all the indexes yet So that would be the first step and then we can implement Selected indexes to run But yeah, that's something we are definitely looking Forward in the in the next releases How this will handle that are the part deletion I miss that the part deletion like a part eviction Suppose if the node is draining then the Kubernetes will automatically evict the part Will it retry the part or? Yes, so that's that's the API for job retries That's one of the disruptions the control plane can do and then you can express in the API whether You want to retry for that particular kind of disruption or or if your workload doesn't support it you you can stop Does that answer your question? Yeah Yeah, that's a name of course So do we have the ability to query the job status of because jobs are long-running thing I mean they tends to go Multiple days or hours. So is there a way to query the job status? What is the status and you know ability to understand when it's going to be finished things like that? Yeah, I don't think I clearly here, but you can in the job status You will tell you exactly which index is already finished And from that you can derive which ones still didn't run or complete. So yes, that's okay. That's visible One last question I guess before we go to lunch You mentioned earlier that you expected multiple services to potentially interact with suspend and other attributes of the job once it started Do you at this? You've mentioned specifically that you might have a queuing system And then you mentioned later talking about interactive jobs on with the other questions That you might have something that would suspend the job while it spins up say Let's for example a service and wait for endpoints to be populated Is there any way to coordinate that at this time so that you know the job doesn't actually run until both of these things? Because we'd have the point where the queuing system sets it on to spends it and the other system then tries to suspend it and I Was wondering if you had any ideas how to prevent it from starting in that brief gap So I can tell you a little bit what we are doing in queue which is our Implementation for how we think this should work and Well, there's a few things First having our back to prevent a job from starting is one possibility But ultimately the controller can You know if you observe a job try to unsuspend You can suspend it back from from the controller Is that is this in the lines of your question? I'm not sure yeah, I guess I I Was wondering if that might lead to like a race condition or something where the job starts In that gap and if there's any way to get that. Yeah, absolutely Well, this is kind of we're feeling within the pattern of communities, which is eventual consistency, right? in communities nothing is like We don't issue something and wait for it. We rather we do we do We have a desired state and the control plane converges towards the desired state state You again you can control some things with our back, but ultimately the controllers should remedy those situations where you have these these Problems and then that's that's when retryable APIs Come in place too, so you can control whether You should retry recreate bots or or simply stop The the job. Thank you. Thank you all. I'm sorry for running out of time. So we're gonna be back 55 1255 for lunch Thank you so much. Thank you